Accueil › Documentation › Appli LB Phone · origen_billing

Appli LB Phone · origen_billing

origen_billingapp est l’application LB Phone complémentaire de origen_billing. Elle offre une expérience de facturation complète directement dans le téléphone, sans commande à saisir.


Dépendances

Ressource Notes
lb-phone Obligatoire. L’application s’enregistre via exports['lb-phone']:AddCustomApp
origen_billing Obligatoire. Toute la logique métier est déléguée à ses exports de téléphone
ox_lib Obligatoire. Utilitaires de langue

Installation

1. server.cfg

Ajoute origen_billingapp après origen_billing et lb-phone :

cfg
ensure lb-phone
ensure origen_billing
ensure origen_billingapp

2. Langue

Ouvre config.lua et définis la langue. Elle doit correspondre à un fichier de locales/ :

lua
Config.Language = 'en'  -- 'en' | 'es'

Aucun SQL n’est nécessaire. origen_billingapp ne crée aucune table : toutes les données sont stockées et gérées par origen_billing.


Fonctionnement

L’application s’enregistre dans LB Phone au démarrage de la ressource et se réenregistre automatiquement si lb-phone redémarre. L’interface communique exclusivement par callbacks NUI → événements serveur → exports de téléphone de origen_billing → événement client qui renvoie la réponse à l’interface du téléphone.

text
UI (NUI)
  └─▶ NUI Callback (client.lua)
        └─▶ Server Event (origen_billingapp:server:*)
              └─▶ origen_billing Phone Export
                    └─▶ TriggerClientEvent → origen_billingapp:client:response
                          └─▶ exports['lb-phone']:SendCustomAppMessage

Aucune logique métier ne réside dans origen_billingapp. C’est un simple pont.


Fonctionnalités par rôle

Tous les joueurs : Mes factures

Employés (métiers autorisés)

Patrons


Exports de téléphone (origen_billing)

L’application utilise les exports suivants, enregistrés sur origen_billing. Ils peuvent aussi être appelés depuis d’autres ressources.

GetPhoneAppBootstrap(source) → table

Charge en un seul appel toutes les données nécessaires pour ouvrir l’application. Renvoie les permissions, les factures en attente, les produits du catalogue et, pour les patrons, les factures de l’entreprise, les statistiques et les produits.

lua
local data = exports['origen_billing']:GetPhoneAppBootstrap(source)
-- {
--   success         = true,
--   permissions     = { canInvoice, isBoss, jobName, jobLabel },
--   myInvoices      = { ... },
--   catalogProducts = { ... },
--   companyInvoices = { ... },  -- nil if not boss
--   companyMeta     = { page, pageSize, total, totalPages },
--   companyStats    = { ... },
--   companyProducts = { ... },
-- }

GetPhonePermissions(source) → table

Renvoie les permissions actuelles du joueur. Appelée lorsque le métier du joueur change.

lua
local res = exports['origen_billing']:GetPhonePermissions(source)
-- { success = true, permissions = { canInvoice, isBoss, jobName, jobLabel } }

GetPhoneMyInvoices(source) → table

Renvoie les factures en attente du joueur.

lua
local res = exports['origen_billing']:GetPhoneMyInvoices(source)
-- { success = true, invoices = { ... } }

PayPhoneInvoice(source, invoiceId, paymentMethod) → table

Paie une facture. paymentMethod vaut 'bank' ou 'cash'.

lua
local res = exports['origen_billing']:PayPhoneInvoice(source, 12, 'bank')
-- { success = true|false, reason = 'error_code' }

GetPhoneProducts(source) → table

Renvoie le catalogue des produits actifs du métier du joueur.

lua
local res = exports['origen_billing']:GetPhoneProducts(source)
-- { success = true, products = { { id, name, description, price }, ... } }

SendPhoneInvoice(source, payload) → table

Crée une facture depuis le téléphone. payload.items est facultatif : s’il est omis, une facture d’une seule ligne est créée à partir de payload.amount et payload.description.

lua
local res = exports['origen_billing']:SendPhoneInvoice(source, {
    targetId    = 'ABC12345',
    amount      = 500,
    description = 'Service fee',
    notes       = '',
    items       = {
        { name = 'Oil change', price = 150, quantity = 1, product_id = 5 },
    },
})
-- { success = true, invoiceId = 42 }

GetPhoneCompanyInvoicesPage(source, filters) → table

Renvoie une liste paginée et filtrée des factures de l’entreprise. Réservé aux patrons.

lua
local res = exports['origen_billing']:GetPhoneCompanyInvoicesPage(source, {
    search    = 'John',
    status    = 'pending',  -- 'all' | 'pending' | 'paid' | 'cancelled'
    minAmount = 100,
    maxAmount = 1000,
    dateFrom  = '2025-01-01',
    dateTo    = '2025-12-31',
    page      = 1,
    pageSize  = 10,
})
-- { success, invoices, meta = { page, pageSize, total, totalPages }, stats = { ... } }

GetPhoneCompanyStats(source) → table

Renvoie les statistiques globales de l’entreprise du joueur. Réservé aux patrons.

lua
local res = exports['origen_billing']:GetPhoneCompanyStats(source)
-- { success, stats = { total, pending, paid, cancelled, totalSociety, totalCommissions, avgAmount } }

GetPhoneCompanyDashboardLite(source, dateFrom, dateTo) → table

Renvoie des KPI et une série temporelle quotidienne pour une plage de dates. Réservé aux patrons.

lua
local res = exports['origen_billing']:GetPhoneCompanyDashboardLite(source, '2025-01-01', '2025-01-31')
-- {
--   success    = true,
--   kpis       = { total, pending, paid, cancelled, totalRevenue, totalSociety, totalCommissions, avgAmount },
--   timeSeries = { { day, totalAmount, paidAmount }, ... },
-- }

CancelPhoneCompanyInvoice(source, invoiceId) → table

Annule une facture de l’entreprise. L’appelant doit être patron du métier qui l’a émise.

lua
local res = exports['origen_billing']:CancelPhoneCompanyInvoice(source, 42)
-- { success = true|false, reason = 'error_code' }

GetPhoneCompanyProducts(source) → table

Renvoie tous les produits de l’entreprise du joueur (y compris les inactifs). Réservé aux patrons.

lua
local res = exports['origen_billing']:GetPhoneCompanyProducts(source)
-- { success, products = { { id, name, description, price, active, created_at }, ... } }

CreatePhoneCompanyProduct(source, data) → table

Crée un nouveau produit pour l’entreprise. Réservé aux patrons.

lua
local res = exports['origen_billing']:CreatePhoneCompanyProduct(source, {
    name        = 'Oil change',
    description = 'Full synthetic',
    price       = 150,
})
-- { success = true, productId = 7 }

UpdatePhoneCompanyProduct(source, data) → table

Met à jour un produit existant. Réservé aux patrons.

lua
local res = exports['origen_billing']:UpdatePhoneCompanyProduct(source, {
    id          = 7,
    name        = 'Oil change (premium)',
    description = 'Full synthetic + filter',
    price       = 200,
})
-- { success = true|false }

TogglePhoneCompanyProduct(source, productId) → table

Bascule un produit entre actif et inactif. Réservé aux patrons.

lua
local res = exports['origen_billing']:TogglePhoneCompanyProduct(source, 7)
-- { success = true, active = false }

DeletePhoneCompanyProduct(source, productId) → table

Supprime définitivement un produit. Réservé aux patrons.

lua
local res = exports['origen_billing']:DeletePhoneCompanyProduct(source, 7)
-- { success = true|false }