Início › Documentação › Instalação · origen_billing
Executa o seguinte SQL na tua base de dados antes de arrancar o recurso pela primeira vez.
CREATE TABLE IF NOT EXISTS `origen_billing_jobs` (
`id` INT NOT NULL AUTO_INCREMENT,
`job_name` VARCHAR(50) NOT NULL,
`label` VARCHAR(100) NOT NULL DEFAULT '',
`society_account` VARCHAR(100) NOT NULL DEFAULT '',
`can_invoice` TINYINT(1) NOT NULL DEFAULT 1,
`commission` DECIMAL(5,2) NOT NULL DEFAULT 0.00,
`society_loss` DECIMAL(5,2) NOT NULL DEFAULT 0.00,
`active` TINYINT(1) NOT NULL DEFAULT 1,
`autopay_enabled` TINYINT(1) NOT NULL DEFAULT 0,
`autopay_mode` ENUM('immediate','delayed') NOT NULL DEFAULT 'immediate',
`autopay_delay_hours` INT NOT NULL DEFAULT 0,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_job_name` (`job_name`),
KEY `idx_job_active` (`active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `origen_billing_products` (
`id` INT NOT NULL AUTO_INCREMENT,
`job_name` VARCHAR(50) NOT NULL,
`name` VARCHAR(100) NOT NULL,
`description` VARCHAR(255) NOT NULL DEFAULT '',
`price` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
`active` TINYINT(1) NOT NULL DEFAULT 1,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_product_job` (`job_name`),
KEY `idx_product_active` (`active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `origen_billing_invoice_items` (
`id` INT NOT NULL AUTO_INCREMENT,
`invoice_id` INT NOT NULL,
`product_id` INT DEFAULT NULL,
`name` VARCHAR(100) NOT NULL,
`price` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
`quantity` INT NOT NULL DEFAULT 1,
`subtotal` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
PRIMARY KEY (`id`),
KEY `idx_item_invoice` (`invoice_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `origen_billing_invoices` (
`id` INT NOT NULL AUTO_INCREMENT,
`target_identifier` VARCHAR(100) NOT NULL,
`target_name` VARCHAR(100) NOT NULL DEFAULT '',
`author_identifier` VARCHAR(100) NOT NULL,
`author_name` VARCHAR(100) NOT NULL DEFAULT '',
`job_name` VARCHAR(50) NOT NULL,
`company_label` VARCHAR(100) NOT NULL DEFAULT '',
`society_account` VARCHAR(100) NOT NULL,
`amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
`description` VARCHAR(255) NOT NULL DEFAULT '',
`notes` TEXT DEFAULT NULL,
`status` ENUM('pending','paid','cancelled') NOT NULL DEFAULT 'pending',
`commission_percent` DECIMAL(5,2) NOT NULL DEFAULT 0.00,
`society_loss_percent` DECIMAL(5,2) NOT NULL DEFAULT 0.00,
`net_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
`commission_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
`society_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
`commission_status` ENUM('none','pending','delivered') NOT NULL DEFAULT 'none',
`commission_paid_at` TIMESTAMP NULL DEFAULT NULL,
`paid_at` TIMESTAMP NULL DEFAULT NULL,
`cancelled_by` VARCHAR(100) NULL DEFAULT NULL,
`context_data` TEXT NULL DEFAULT NULL,
`autopay_enabled` TINYINT(1) NOT NULL DEFAULT 0,
`autopay_mode` ENUM('immediate','delayed') NOT NULL DEFAULT 'immediate',
`autopay_delay_hours` INT NOT NULL DEFAULT 0,
`autopay_state` ENUM('none','scheduled','retrying','retry_on_login','done') NOT NULL DEFAULT 'none',
`autopay_attempts` INT NOT NULL DEFAULT 0,
`autopay_next_try_at` TIMESTAMP NULL DEFAULT NULL,
`autopay_last_error` VARCHAR(64) NULL DEFAULT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_target` (`target_identifier`),
KEY `idx_author` (`author_identifier`),
KEY `idx_job` (`job_name`),
KEY `idx_status` (`status`),
KEY `idx_commission` (`commission_status`),
KEY `idx_autopay` (`autopay_state`, `autopay_next_try_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;Adiciona o recurso depois das suas dependências:
ensure ox_lib
ensure oxmysql
ensure origen_billingOs jobs listados em Config.AuthorizedJobs (dentro de config.lua) são apenas dados iniciais. São inseridos na base de dados na primeira vez que o recurso arranca, se o job ainda não existir.
Depois do primeiro arranque, toda a gestão de jobs é feita no painel de administração do jogo (/billingadmin). As alterações a Config.AuthorizedJobs não vão substituir os registos já existentes na base de dados.
Para repor um job nos valores iniciais, elimina a respetiva linha de origen_billing_jobs e reinicia o recurso.
Abre svconfig.lua e define enabled = true juntamente com os URL dos teus webhooks:
return {
enabled = true,
webhooks = {
['invoice-created'] = 'https://discord.com/api/webhooks/...',
['invoice-paid'] = 'https://discord.com/api/webhooks/...',
['invoice-cancelled'] = 'https://discord.com/api/webhooks/...',
['commission-paid'] = 'https://discord.com/api/webhooks/...',
},
}