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:
co-authored by
Claude Sonnet 5.5
parent
ea9a53f742
commit
25f23d541e
@@ -2,6 +2,7 @@
|
||||
|
||||
use App\Http\Controllers\Api\Admin\Bank\BankController;
|
||||
use App\Http\Controllers\Api\Admin\Invoice\InvoiceController;
|
||||
use App\Http\Controllers\Api\Admin\Invoice\InvoiceVatController;
|
||||
use App\Http\Controllers\Api\Admin\Order\OrderController;
|
||||
use App\Http\Controllers\Api\Admin\Payment\PaymentController;
|
||||
use App\Http\Controllers\Api\Admin\Report\ExportController;
|
||||
@@ -45,6 +46,7 @@ Route::prefix('invoices')
|
||||
'perm:invoice.edit',
|
||||
);
|
||||
// Send mail notification
|
||||
Route::get('{id}/pdf', 'pdf')->middleware('perm:invoice.view')->whereNumber('id');
|
||||
Route::post('{id}/send-mail', 'sendMail')->middleware('perm:invoice.edit');
|
||||
Route::post('{id}/send-mail/preview', 'previewMail')->middleware('perm:invoice.edit');
|
||||
});
|
||||
@@ -97,3 +99,9 @@ Route::prefix('transactions')
|
||||
Route::post('{uuid}/reject', 'reject')->middleware('perm:customer.edit');
|
||||
Route::delete('{uuid}', 'destroy')->middleware('perm:customer.edit');
|
||||
});
|
||||
|
||||
Route::prefix('invoices/{id}/vat')->controller(InvoiceVatController::class)->whereNumber('id')->group(function () {
|
||||
Route::get('/', 'show')->middleware('perm:invoice.view');
|
||||
Route::put('/', 'update')->middleware('perm:invoice.edit');
|
||||
Route::post('issue', 'issue')->middleware('perm:invoice.edit');
|
||||
});
|
||||
|
||||
@@ -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 () {
|
||||
|
||||
@@ -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');
|
||||
});
|
||||
|
||||
@@ -2,10 +2,12 @@
|
||||
|
||||
use App\Http\Controllers\Api\Admin\ActivityLog\ActivityLogController;
|
||||
use App\Http\Controllers\Api\Admin\EmailLog\EmailLogController;
|
||||
use App\Http\Controllers\Api\Admin\EmailTemplate\EmailHealthController;
|
||||
use App\Http\Controllers\Api\Admin\EmailTemplate\EmailTemplateController;
|
||||
use App\Http\Controllers\Api\Admin\MailCampaign\MailCampaignController;
|
||||
use App\Http\Controllers\Api\Admin\Setting\ClientMenuController;
|
||||
use App\Http\Controllers\Api\Admin\Setting\PopupBannerController;
|
||||
use App\Http\Controllers\Api\Admin\Setting\VatNumberingController;
|
||||
use App\Http\Controllers\Api\Admin\Setting\SettingController as AdminSettingController;
|
||||
use App\Http\Controllers\Api\Admin\Staff\StaffOnlineController;
|
||||
use App\Http\Controllers\Api\Admin\Ticket\TicketController as AdminTicketController;
|
||||
@@ -54,6 +56,14 @@ Route::prefix('vat-settings')
|
||||
Route::put('/', 'vatUpdate');
|
||||
});
|
||||
|
||||
Route::prefix('vat-numbering')
|
||||
->controller(VatNumberingController::class)
|
||||
->middleware('perm:setting.manager')
|
||||
->group(function () {
|
||||
Route::get('/', 'show');
|
||||
Route::put('/', 'update');
|
||||
});
|
||||
|
||||
// Dashboard Stats
|
||||
Route::prefix('dashboard')
|
||||
->controller(\App\Http\Controllers\Api\Admin\Dashboard\DashboardController::class)
|
||||
@@ -97,6 +107,7 @@ Route::prefix('email-templates')
|
||||
->group(function () {
|
||||
Route::get('/', 'index');
|
||||
Route::post('/', 'store');
|
||||
Route::get('health', [EmailHealthController::class, 'show']);
|
||||
Route::get('scenarios', 'scenarios');
|
||||
Route::put('scenarios/{key}/label', 'updateScenarioLabel');
|
||||
Route::get('email-settings', 'getEmailSettings');
|
||||
|
||||
Reference in New Issue
Block a user