Accueil › Documentation › 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.
| 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 |
Ajoute origen_billingapp après origen_billing et lb-phone :
ensure lb-phone
ensure origen_billing
ensure origen_billingappOuvre config.lua et définis la langue. Elle doit correspondre à un fichier de locales/ :
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.
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.
UI (NUI)
└─▶ NUI Callback (client.lua)
└─▶ Server Event (origen_billingapp:server:*)
└─▶ origen_billing Phone Export
└─▶ TriggerClientEvent → origen_billingapp:client:response
└─▶ exports['lb-phone']:SendCustomAppMessageAucune logique métier ne réside dans origen_billingapp. C’est un simple pont.
L’application utilise les exports suivants, enregistrés sur origen_billing. Ils peuvent aussi être appelés depuis d’autres ressources.
GetPhoneAppBootstrap(source) → tableCharge 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.
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) → tableRenvoie les permissions actuelles du joueur. Appelée lorsque le métier du joueur change.
local res = exports['origen_billing']:GetPhonePermissions(source)
-- { success = true, permissions = { canInvoice, isBoss, jobName, jobLabel } }GetPhoneMyInvoices(source) → tableRenvoie les factures en attente du joueur.
local res = exports['origen_billing']:GetPhoneMyInvoices(source)
-- { success = true, invoices = { ... } }PayPhoneInvoice(source, invoiceId, paymentMethod) → tablePaie une facture. paymentMethod vaut 'bank' ou 'cash'.
local res = exports['origen_billing']:PayPhoneInvoice(source, 12, 'bank')
-- { success = true|false, reason = 'error_code' }GetPhoneProducts(source) → tableRenvoie le catalogue des produits actifs du métier du joueur.
local res = exports['origen_billing']:GetPhoneProducts(source)
-- { success = true, products = { { id, name, description, price }, ... } }SendPhoneInvoice(source, payload) → tableCré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.
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) → tableRenvoie une liste paginée et filtrée des factures de l’entreprise. Réservé aux patrons.
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) → tableRenvoie les statistiques globales de l’entreprise du joueur. Réservé aux patrons.
local res = exports['origen_billing']:GetPhoneCompanyStats(source)
-- { success, stats = { total, pending, paid, cancelled, totalSociety, totalCommissions, avgAmount } }GetPhoneCompanyDashboardLite(source, dateFrom, dateTo) → tableRenvoie des KPI et une série temporelle quotidienne pour une plage de dates. Réservé aux patrons.
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) → tableAnnule une facture de l’entreprise. L’appelant doit être patron du métier qui l’a émise.
local res = exports['origen_billing']:CancelPhoneCompanyInvoice(source, 42)
-- { success = true|false, reason = 'error_code' }GetPhoneCompanyProducts(source) → tableRenvoie tous les produits de l’entreprise du joueur (y compris les inactifs). Réservé aux patrons.
local res = exports['origen_billing']:GetPhoneCompanyProducts(source)
-- { success, products = { { id, name, description, price, active, created_at }, ... } }CreatePhoneCompanyProduct(source, data) → tableCrée un nouveau produit pour l’entreprise. Réservé aux patrons.
local res = exports['origen_billing']:CreatePhoneCompanyProduct(source, {
name = 'Oil change',
description = 'Full synthetic',
price = 150,
})
-- { success = true, productId = 7 }UpdatePhoneCompanyProduct(source, data) → tableMet à jour un produit existant. Réservé aux patrons.
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) → tableBascule un produit entre actif et inactif. Réservé aux patrons.
local res = exports['origen_billing']:TogglePhoneCompanyProduct(source, 7)
-- { success = true, active = false }DeletePhoneCompanyProduct(source, productId) → tableSupprime définitivement un produit. Réservé aux patrons.
local res = exports['origen_billing']:DeletePhoneCompanyProduct(source, 7)
-- { success = true|false }