feat(billing): renewals, coupons, VAT numbering, billing cycles and invoice payment tracking

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
baodev0
2026-10-19 16:37:56 +07:00
co-authored by Claude Sonnet 5.5
parent ea9a53f742
commit 25f23d541e
134 changed files with 4926 additions and 185 deletions
+8
View File
@@ -1,5 +1,6 @@
<?php
use App\Http\Controllers\Api\Admin\Customer\CustomerBillingProfileController;
use App\Http\Controllers\Api\Admin\Customer\CustomerController;
use App\Http\Controllers\Api\Admin\Service\ServiceController;
use App\Http\Controllers\Api\Admin\Service\ServiceRenewalReminderController;
@@ -37,6 +38,8 @@ Route::prefix('customers')
Route::post('{uuid}/services/{serviceId}/change-ip', 'changeServiceIp')->middleware('perm:customer.edit');
Route::post('{uuid}/services/{serviceId}/change-port', 'changeServicePort')->middleware('perm:customer.edit');
Route::post('{uuid}/services/{serviceId}/notify-renew', 'notifyServiceRenewal')->middleware('perm:customer.edit');
Route::get('{uuid}/services/{serviceId}/renewals', 'serviceRenewals')->middleware('perm:customer.view');
Route::post('{uuid}/services/{serviceId}/renew', 'renewService')->middleware('perm:customer.edit');
Route::get('{uuid}/notes', 'getCustomerNotes')->middleware('perm:customer.view');
Route::post('{uuid}/notes', 'storeCustomerNote')->middleware('perm:customer.edit');
Route::delete('{uuid}/notes/{noteId}', 'destroyCustomerNote')->middleware('perm:customer.edit');
@@ -94,3 +97,8 @@ Route::prefix('services')->controller(ServiceController::class)->group(function
Route::delete('{id}/attachments/{attachmentId}', 'deleteAttachment')->middleware('perm:customer.edit');
Route::post('{id}/attachments/{attachmentId}/copy-to-invoice', 'copyAttachmentToInvoice')->middleware('perm:invoice.edit');
});
Route::prefix('customers/{uuid}/billing-profile')->controller(CustomerBillingProfileController::class)->group(function () {
Route::get('/', 'show')->middleware('perm:customer.view');
Route::put('/', 'update')->middleware('perm:customer.edit');
});