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
+19
View File
@@ -1,6 +1,8 @@
<?php
use App\Http\Controllers\Api\Admin\Addon\AddonController;
use App\Http\Controllers\Api\Admin\Coupon\CouponController;
use App\Http\Controllers\Api\Admin\Product\ProductBillingCycleController;
use App\Http\Controllers\Api\Admin\Product\ProductCategoryController;
use App\Http\Controllers\Api\Admin\Product\ProductController;
use App\Http\Controllers\Api\Admin\Product\ProductTypeFieldController;
@@ -64,6 +66,23 @@ Route::prefix('product-categories')
->name('force-delete');
});
Route::prefix('coupons')
->controller(CouponController::class)
->group(function () {
Route::get('/', 'index')->middleware('perm:product-service.view');
Route::post('/', 'store')->middleware('perm:product-service.create');
Route::put('{id}', 'update')->middleware('perm:product-service.edit')->whereNumber('id');
Route::delete('{id}', 'destroy')->middleware('perm:product-service.destroy')->whereNumber('id');
});
Route::prefix('product-billing-cycles')
->controller(ProductBillingCycleController::class)
->group(function () {
Route::get('/', 'show')->middleware('perm:product-service.view');
Route::put('/', 'update')->middleware('perm:product-service.manager');
Route::put('custom', 'updateCustom')->middleware('perm:product-service.manager');
});
Route::prefix('product-type-fields')
->controller(ProductTypeFieldController::class)
->group(function () {