// ======================== // Controllers (all imported at top level) // ======================== use App\Http\Controllers\AuthController; use App\Http\Controllers\DashboardController; use App\Http\Controllers\UserController; use App\Http\Controllers\PartyController; use App\Http\Controllers\VehicleController; use App\Http\Controllers\LrController; use App\Http\Controllers\InvoiceController; use App\Http\Controllers\LedgerController; use App\Http\Controllers\PaymentController; use App\Http\Controllers\ReportController; use App\Http\Controllers\PdfController; use App\Http\Controllers\ExcelController; use App\Http\Controllers\BackupController; use App\Http\Controllers\SettingsController; use App\Http\Controllers\ExpenseController; use App\Http\Controllers\ExpenseCategoryController; use App\Http\Controllers\NotificationController; use App\Http\Controllers\ActivityLogController; use App\Http\Controllers\HealthController; use App\Http\Controllers\AuditController; use App\Http\Controllers\MaintenanceController; use App\Http\Controllers\PrintController; use App\Http\Controllers\AnalyticsController; use App\Http\Controllers\FleetController; use App\Http\Controllers\GpsController; use App\Http\Controllers\EmployeeController; use App\Http\Controllers\AttendanceController; use App\Http\Controllers\PayrollController; use App\Http\Controllers\DepartmentController; use App\Http\Controllers\DesignationController; use App\Http\Controllers\EmployeeGroupController; use App\Http\Controllers\EmployeeDocumentController; use App\Http\Controllers\LeaveController; use App\Http\Controllers\SalaryStructureController; use App\Http\Controllers\SalaryDeductionController; use App\Http\Controllers\PayslipController; use App\Http\Controllers\HolidayController; use App\Http\Controllers\PayrollReportController; use App\Http\Controllers\ProductionUnitController; use App\Http\Controllers\RawMaterialController; use App\Http\Controllers\FinishedGoodController; use App\Http\Controllers\SemiFinishedGoodController; use App\Http\Controllers\ByProductController; use App\Http\Controllers\CoProductController; use App\Http\Controllers\ScrapController; use App\Http\Controllers\BomController; use App\Http\Controllers\ProductionOrderController; use App\Http\Controllers\MaterialConsumptionController; use App\Http\Controllers\ProductionEntryController; use App\Http\Controllers\CrmController; use App\Http\Controllers\SupportTicketController; use App\Http\Controllers\ClientPortalController; use App\Http\Controllers\AiController; use App\Http\Controllers\ChatbotController; use App\Http\Controllers\BranchController; use App\Http\Controllers\CompanyController; use App\Http\Controllers\TenantController; use App\Http\Controllers\SubscriptionController; use App\Http\Controllers\DocumentController; use App\Http\Controllers\ComplianceController; use App\Http\Controllers\WarehouseController; use App\Http\Controllers\InventoryController; use App\Http\Controllers\DispatchController; use App\Http\Controllers\VendorController; use App\Http\Controllers\PurchaseOrderController; use App\Http\Controllers\ProcurementController; use App\Http\Controllers\WorkflowController; use App\Http\Controllers\ApprovalController; use App\Http\Controllers\CommandCenterController; use App\Http\Controllers\ExecutiveReportController; use App\Http\Controllers\AiControlTowerController; use App\Http\Controllers\PredictiveController; use App\Http\Controllers\AutonomousController; use App\Http\Controllers\QuantumAnalyticsController; use App\Http\Controllers\DigitalTwinController; use App\Http\Controllers\SimulationController; use App\Http\Controllers\HyperAutomationController; use App\Http\Controllers\NeuralDashboardController; use App\Http\Controllers\ImportExportController; use App\Http\Controllers\ReceiptController; use App\Http\Controllers\AssetController; use App\Http\Controllers\AssetCategoryController; use App\Http\Controllers\AccountController; use App\Http\Controllers\DepreciationController; use App\Http\Controllers\ProfileController; use App\Http\Controllers\BankAccountController; use App\Http\Controllers\BankTransactionController; use App\Http\Controllers\BankReconciliationController; use App\Http\Controllers\BankStatementImportController; use App\Http\Controllers\SalesOrderController; use App\Http\Controllers\PaymentReminderController; use App\Http\Controllers\PaymentAdviceController; use App\Http\Controllers\VoucherController; use App\Http\Controllers\ChequeController; use App\Http\Controllers\DepositSlipController; use App\Http\Controllers\GstRateController; use App\Http\Controllers\HsController; use App\Http\Controllers\SacController; use App\Http\Controllers\TaxCategoryController; use App\Http\Controllers\GstClassificationController; use App\Http\Controllers\GstRegistrationController; use App\Http\Controllers\GstTransactionController; use App\Http\Controllers\GstReportController; use App\Http\Controllers\EinvoiceController; use App\Http\Controllers\EwayBillController; use App\Http\Controllers\GstReconciliationController; use App\Http\Controllers\ExemptionController; use App\Http\Controllers\GstReturnController; use App\Http\Controllers\ItcController; use App\Http\Controllers\ItcReversalController; use App\Http\Controllers\TwoBReconciliationController; use App\Http\Controllers\ImsController; use App\Http\Controllers\TdsConfigurationController; use App\Http\Controllers\TdsDeductionController; use App\Http\Controllers\TdsPayableController; use App\Http\Controllers\TdsPaymentController; use App\Http\Controllers\TdsCertificateController; use App\Http\Controllers\TdsReportController; use App\Http\Controllers\TcsReportController; use App\Http\Controllers\TcsConfigurationController; use App\Http\Controllers\TcsCollectionController; use App\Http\Controllers\TcsPayableController; use App\Http\Controllers\TcsPaymentController; use App\Http\Controllers\CostCentreController; use App\Http\Controllers\CostCategoryController; use App\Http\Controllers\ProjectController; use App\Http\Controllers\ExpenseAllocationController; use App\Http\Controllers\RevenueAllocationController; use App\Http\Controllers\JobWorkerController; use App\Http\Controllers\JobWorkOrderController; use App\Http\Controllers\JobWorkConsumptionController; use App\Http\Controllers\JobWorkReceiptController; use App\Http\Controllers\JobWorkChargeController; // ======================== // Public Routes (no auth required) // ======================== Route::middleware('guest')->group(function () { Route::get('/login', [AuthController::class, 'loginForm'])->name('login'); Route::post('/login', [AuthController::class, 'login']); }); Route::get('/logout', [AuthController::class, 'logout'])->name('logout'); // ============================================================ // Protected Routes (require authentication) // ============================================================ Route::middleware('auth')->group(function () { // ---------- Dashboard ---------- Route::get('/', [DashboardController::class, 'index'])->name('dashboard'); // ---------- Profile ---------- Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); Route::post('/profile/update', [ProfileController::class, 'update'])->name('profile.update'); // ---------- Parties ---------- Route::middleware(['permission:view-parties'])->group(function () { Route::get('parties/data', [PartyController::class, 'getData'])->name('parties.data'); Route::resource('parties', PartyController::class); }); // ---------- Vehicles ---------- Route::middleware(['permission:view-vehicles'])->group(function () { Route::get('vehicles/data', [VehicleController::class, 'getData'])->name('vehicles.data'); Route::resource('vehicles', VehicleController::class); }); // ---------- Vehicle Types ---------- Route::middleware(['permission:view-vehicles'])->group(function () { Route::get('vehicle-types/data', [\App\Http\Controllers\VehicleTypeController::class, 'getData'])->name('vehicle-types.data'); Route::resource('vehicle-types', \App\Http\Controllers\VehicleTypeController::class); }); // ---------- Fixed Assets ---------- Route::middleware(['permission:view-assets'])->group(function () { Route::get('fixed-assets/data', [AssetController::class, 'getData'])->name('fixed-assets.data'); Route::get('fixed-assets/register', [AssetController::class, 'assetRegister'])->name('fixed-assets.register'); Route::get('fixed-assets/register/pdf', [AssetController::class, 'exportAssetRegisterPdf'])->name('fixed-assets.register.pdf'); Route::get('fixed-assets/depreciation-schedule', [AssetController::class, 'depreciationSchedule'])->name('fixed-assets.depreciation-schedule'); Route::post('fixed-assets/{fixed_asset}/transfer', [AssetController::class, 'transfer'])->name('fixed-assets.transfer'); Route::post('fixed-assets/{fixed_asset}/dispose', [AssetController::class, 'dispose'])->name('fixed-assets.dispose'); Route::resource('fixed-assets', AssetController::class); Route::get('asset-categories/data', [AssetCategoryController::class, 'getData'])->name('asset-categories.data'); Route::resource('asset-categories', AssetCategoryController::class)->except(['show', 'create', 'edit']); Route::get('depreciation', [DepreciationController::class, 'index'])->name('depreciation.index'); Route::post('depreciation/run', [DepreciationController::class, 'run'])->name('depreciation.run'); }); // ---------- Sales Orders ---------- Route::middleware(['permission:view-sales-orders'])->group(function () { Route::get('sales-orders/data', [SalesOrderController::class, 'getData'])->name('sales-orders.data'); Route::resource('sales-orders', SalesOrderController::class)->only(['index', 'store', 'show', 'update', 'destroy']); }); // ---------- LR Entry ---------- Route::middleware(['permission:view-lrs'])->group(function () { Route::get('lrs/data', [LrController::class, 'getData'])->name('lrs.data'); Route::get('lrs/{id}/print', [LrController::class, 'printReceipt'])->name('lrs.print'); Route::get('lrs/{id}/signature', [LrController::class, 'getSignature'])->name('lrs.signature'); Route::post('lrs/{id}/sign', [LrController::class, 'storeSignature'])->name('lrs.sign'); Route::resource('lrs', LrController::class); }); // ---------- Receipts ---------- Route::middleware(['permission:view-lrs'])->group(function () { Route::get('receipts/data', [ReceiptController::class, 'getData'])->name('receipts.data'); Route::resource('receipts', ReceiptController::class)->only(['index', 'show', 'destroy']); }); // ---------- Invoices ---------- Route::middleware(['permission:view-invoices'])->group(function () { Route::get('invoices/data', [InvoiceController::class, 'getData'])->name('invoices.data'); Route::get('amount-in-words', [InvoiceController::class, 'amountInWords']); Route::resource('invoices', InvoiceController::class); }); // ---------- Ledgers ---------- Route::middleware(['permission:view-ledgers'])->group(function () { Route::get('ledgers/data', [LedgerController::class, 'getData'])->name('ledgers.data'); Route::resource('ledgers', LedgerController::class); }); // ---------- Payments ---------- Route::middleware(['permission:view-payments'])->group(function () { Route::get('payments/data', [PaymentController::class, 'getData'])->name('payments.data'); Route::resource('payments', PaymentController::class); }); // ---------- Chart of Accounts ---------- Route::middleware(['permission:view-accounts'])->group(function () { Route::get('accounts', [AccountController::class, 'index'])->name('accounts.index'); Route::get('accounts/data', [AccountController::class, 'getData'])->name('accounts.data'); Route::get('accounts/groups', [AccountController::class, 'groups'])->name('accounts.groups'); Route::post('accounts', [AccountController::class, 'store'])->name('accounts.store'); Route::put('accounts/{id}', [AccountController::class, 'update'])->name('accounts.update'); Route::delete('accounts/{id}', [AccountController::class, 'destroy'])->name('accounts.destroy'); }); // ---------- Reports ---------- Route::middleware(['permission:view-reports'])->group(function () { Route::get('reports/daily-lr', [ReportController::class, 'dailyLr'])->name('reports.daily-lr'); Route::get('reports/monthly-freight', [ReportController::class, 'monthlyFreight'])->name('reports.monthly-freight'); Route::get('reports/outstanding', [ReportController::class, 'outstanding'])->name('reports.outstanding'); Route::get('reports/ledger', [ReportController::class, 'ledgerReport'])->name('reports.ledger'); Route::get('reports/closing-balance', [ReportController::class, 'closingBalance'])->name('reports.closing-balance'); Route::get('reports/closing-balance/pdf', [ReportController::class, 'exportClosingBalancePdf'])->name('reports.closing-balance.pdf'); Route::get('reports/vehicle', [ReportController::class, 'vehicleReport'])->name('reports.vehicle'); Route::get('reports/profit-loss', [ReportController::class, 'profitLoss'])->name('reports.profit-loss'); Route::get('reports/profit-loss/csv', [ReportController::class, 'exportProfitLossCsv'])->name('reports.profit-loss.csv'); Route::get('reports/profit-loss/pdf', [ReportController::class, 'exportProfitLossPdf'])->name('reports.profit-loss.pdf'); Route::get('reports/bank-book', [ReportController::class, 'bankBook'])->name('reports.bank-book'); Route::get('reports/bank-book/pdf', [ReportController::class, 'exportBankBookPdf'])->name('reports.bank-book.pdf'); Route::get('reports/bank-transactions', [ReportController::class, 'bankWiseTransactions'])->name('reports.bank-transactions'); Route::get('reports/order-outstanding', [ReportController::class, 'orderOutstanding'])->name('reports.order-outstanding'); Route::get('reports/customer-wise-orders', [ReportController::class, 'customerWiseOrders'])->name('reports.customer-wise-orders'); Route::get('reports/supplier-wise-orders', [ReportController::class, 'supplierWiseOrders'])->name('reports.supplier-wise-orders'); Route::get('reports/item-wise-orders', [ReportController::class, 'itemWiseOrders'])->name('reports.item-wise-orders'); Route::get('reports/bill-wise-outstanding', [ReportController::class, 'billWiseOutstanding'])->name('reports.bill-wise-outstanding'); Route::get('reports/customer-outstanding', [ReportController::class, 'customerOutstanding'])->name('reports.customer-outstanding'); Route::get('reports/interest-calculation', [ReportController::class, 'interestCalculation'])->name('reports.interest-calculation'); Route::get('reports/supplier-outstanding', [ReportController::class, 'supplierOutstanding'])->name('reports.supplier-outstanding'); Route::get('reports/day-book', [ReportController::class, 'dayBook'])->name('reports.day-book'); Route::get('reports/trial-balance', [ReportController::class, 'trialBalance'])->name('reports.trial-balance'); Route::get('reports/trial-balance/pdf', [ReportController::class, 'exportTrialBalancePdf'])->name('reports.trial-balance.pdf'); Route::get('reports/balance-sheet', [ReportController::class, 'balanceSheet'])->name('reports.balance-sheet'); Route::get('reports/balance-sheet/pdf', [ReportController::class, 'exportBalanceSheetPdf'])->name('reports.balance-sheet.pdf'); Route::get('reports/cash-flow', [ReportController::class, 'cashFlow'])->name('reports.cash-flow'); Route::get('reports/fund-flow', [ReportController::class, 'fundFlow'])->name('reports.fund-flow'); Route::get('reports/ratio-analysis', [ReportController::class, 'ratioAnalysis'])->name('reports.ratio-analysis'); Route::get('reports/sales-purchase', [ReportController::class, 'salesPurchaseHub'])->name('reports.sales-purchase-hub'); Route::get('reports/sales-register', [ReportController::class, 'salesRegister'])->name('reports.sales-register'); Route::get('reports/customer-sales', [ReportController::class, 'customerSales'])->name('reports.customer-sales'); Route::get('reports/item-sales', [ReportController::class, 'itemSales'])->name('reports.item-sales'); Route::get('reports/salesman-sales', [ReportController::class, 'salesmanSales'])->name('reports.salesman-sales'); Route::get('reports/sales-return', [ReportController::class, 'salesReturn'])->name('reports.sales-return'); Route::get('reports/sales-profit', [ReportController::class, 'salesProfit'])->name('reports.sales-profit'); Route::get('reports/purchase-register', [ReportController::class, 'purchaseRegister'])->name('reports.purchase-register'); Route::get('reports/purchase-return', [ReportController::class, 'purchaseReturn'])->name('reports.purchase-return'); Route::get('payment-reminders', [PaymentReminderController::class, 'index'])->name('payment-reminders.index'); Route::post('payment-reminders/{party}/send', [PaymentReminderController::class, 'send'])->name('payment-reminders.send'); Route::get('reports/daily-lr/csv', [ReportController::class, 'exportDailyLrCsv'])->name('reports.daily-lr.csv'); Route::get('reports/daily-lr/pdf', [ReportController::class, 'exportDailyLrPdf'])->name('reports.daily-lr.pdf'); Route::get('reports/monthly-freight/csv', [ReportController::class, 'exportMonthlyFreightCsv'])->name('reports.monthly-freight.csv'); Route::get('reports/monthly-freight/pdf', [ReportController::class, 'exportMonthlyFreightPdf'])->name('reports.monthly-freight.pdf'); Route::get('reports/outstanding/csv', [ReportController::class, 'exportOutstandingCsv'])->name('reports.outstanding.csv'); Route::get('reports/outstanding/pdf', [ReportController::class, 'exportOutstandingPdf'])->name('reports.outstanding.pdf'); Route::get('reports/ledger/csv', [ReportController::class, 'exportLedgerCsv'])->name('reports.ledger.csv'); Route::get('reports/ledger/pdf', [ReportController::class, 'exportLedgerPdf'])->name('reports.ledger.pdf'); Route::get('reports/vehicle/csv', [ReportController::class, 'exportVehicleCsv'])->name('reports.vehicle.csv'); Route::get('reports/vehicle/pdf', [ReportController::class, 'exportVehiclePdf'])->name('reports.vehicle.pdf'); Route::resource('reports', ReportController::class); }); // ---------- PDF Export / Backup ---------- Route::get('/export/lr-pdf', [PdfController::class, 'lrPdf']); Route::get('/export/invoice-pdf', [PdfController::class, 'invoicePdf']); Route::get('/export/ledger-pdf', [PdfController::class, 'ledgerPdf']); Route::get('/export/excel', [ExcelController::class, 'export']); Route::get('/backup/database', [BackupController::class, 'backup']); // ---------- Settings ---------- Route::middleware(['permission:view-settings'])->group(function () { Route::get('/settings', [SettingsController::class, 'index']); Route::post('/settings', [SettingsController::class, 'store']); }); // ---------- GST Master ---------- Route::middleware(['permission:view-gst-rates'])->group(function () { Route::get('gst-rates/data', [GstRateController::class, 'getData'])->name('gst-rates.data'); Route::resource('gst-rates', GstRateController::class); }); Route::middleware(['permission:view-hsn-codes'])->group(function () { Route::get('hsn-codes/data', [HsController::class, 'getData'])->name('hsn-codes.data'); Route::resource('hsn-codes', HsController::class); }); Route::middleware(['permission:view-sac-codes'])->group(function () { Route::get('sac-codes/data', [SacController::class, 'getData'])->name('sac-codes.data'); Route::resource('sac-codes', SacController::class); }); Route::middleware(['permission:view-tax-categories'])->group(function () { Route::get('tax-categories/data', [TaxCategoryController::class, 'getData'])->name('tax-categories.data'); Route::resource('tax-categories', TaxCategoryController::class); }); Route::middleware(['permission:view-gst-classifications'])->group(function () { Route::get('gst-classifications/data', [GstClassificationController::class, 'getData'])->name('gst-classifications.data'); Route::resource('gst-classifications', GstClassificationController::class); }); Route::middleware(['permission:view-gst-registrations'])->group(function () { Route::get('gst-registrations/data', [GstRegistrationController::class, 'getData'])->name('gst-registrations.data'); Route::resource('gst-registrations', GstRegistrationController::class); }); // ---------- GST Transactions ---------- Route::middleware(['permission:view-gst-transactions'])->group(function () { Route::get('gst-transactions/data', [GstTransactionController::class, 'getData'])->name('gst-transactions.data'); Route::get('gst-transactions/input-gst', [GstTransactionController::class, 'inputGst'])->name('gst-transactions.input-gst'); Route::get('gst-transactions/output-gst', [GstTransactionController::class, 'outputGst'])->name('gst-transactions.output-gst'); Route::get('gst-transactions/reverse-charge', [GstTransactionController::class, 'reverseCharge'])->name('gst-transactions.reverse-charge'); Route::get('gst-transactions/summary', [GstTransactionController::class, 'summary'])->name('gst-transactions.summary'); Route::get('gst-transactions/{gstTransaction}', [GstTransactionController::class, 'show'])->name('gst-transactions.show'); Route::resource('gst-transactions', GstTransactionController::class)->only(['index']); }); // ---------- GST Reports ---------- Route::middleware(['permission:view-gst-reports'])->group(function () { Route::get('gst-reports', [GstReportController::class, 'index'])->name('gst-reports.index'); Route::get('gst-reports/gstr1', [GstReportController::class, 'gstr1'])->name('gst-reports.gstr1'); Route::get('gst-reports/gstr3b', [GstReportController::class, 'gstr3b'])->name('gst-reports.gstr3b'); Route::get('gst-reports/gstr2b', [GstReportController::class, 'gstr2b'])->name('gst-reports.gstr2b'); Route::get('gst-reports/reconciliation', [GstReportController::class, 'reconciliation'])->name('gst-reports.reconciliation'); Route::get('gst-reports/input-tax-credit', [GstReportController::class, 'inputTaxCredit'])->name('gst-reports.input-tax-credit'); Route::get('gst-reports/liability', [GstReportController::class, 'liability'])->name('gst-reports.liability'); Route::get('gst-reports/payment', [GstReportController::class, 'payment'])->name('gst-reports.payment'); Route::get('gst-reports/summary', [GstReportController::class, 'summary'])->name('gst-reports.summary'); }); // ---------- GST Compliance ---------- Route::prefix('compliance')->name('compliance.')->group(function () { // e-Invoices Route::middleware(['permission:view-gst-reports'])->prefix('e-invoices')->name('einvoices.')->group(function () { Route::get('/', [EinvoiceController::class, 'index'])->name('index'); Route::get('/data', [EinvoiceController::class, 'getData'])->name('data'); Route::post('/{eInvoice}/generate', [EinvoiceController::class, 'generate'])->name('generate'); Route::get('/{eInvoice}/qr-code', [EinvoiceController::class, 'showQrCode'])->name('qr-code'); }); // e-Way Bills Route::middleware(['permission:view-gst-reports'])->prefix('eway-bills')->name('eway-bills.')->group(function () { Route::get('/', [EwayBillController::class, 'index'])->name('index'); Route::get('/data', [EwayBillController::class, 'getData'])->name('data'); Route::post('/{ewayBill}/generate', [EwayBillController::class, 'generate'])->name('generate'); Route::get('/{ewayBill}/print', [EwayBillController::class, 'print'])->name('print'); }); // GST Reconciliation Route::middleware(['permission:view-gst-reports'])->prefix('reconciliation')->name('reconciliation.')->group(function () { Route::get('/', [GstReconciliationController::class, 'index'])->name('index'); Route::get('/data', [GstReconciliationController::class, 'getData'])->name('data'); Route::get('/run', [GstReconciliationController::class, 'run'])->name('run'); Route::post('/run', [GstReconciliationController::class, 'run'])->name('run.post'); Route::get('/{reconciliation}', [GstReconciliationController::class, 'show'])->name('show'); }); }); // ---------- GST Master & Returns ---------- Route::prefix('gst')->name('gst.')->group(function () { Route::middleware(['permission:view-gst-reports'])->group(function () { // Exemptions Route::get('/exemptions', [ExemptionController::class, 'index'])->name('exemptions.index'); Route::get('/exemptions/data', [ExemptionController::class, 'getData'])->name('exemptions.data'); Route::get('/exemptions/create', [ExemptionController::class, 'create'])->name('exemptions.create'); Route::post('/exemptions', [ExemptionController::class, 'store'])->name('exemptions.store'); Route::get('/exemptions/{exemption}/edit', [ExemptionController::class, 'edit'])->name('exemptions.edit'); Route::put('/exemptions/{exemption}', [ExemptionController::class, 'update'])->name('exemptions.update'); Route::delete('/exemptions/{exemption}', [ExemptionController::class, 'destroy'])->name('exemptions.destroy'); // GST Returns Route::get('/returns', [GstReturnController::class, 'index'])->name('returns.index'); Route::get('/returns/data', [GstReturnController::class, 'getData'])->name('returns.data'); Route::get('/returns/create', [GstReturnController::class, 'create'])->name('returns.create'); Route::post('/returns', [GstReturnController::class, 'store'])->name('returns.store'); Route::get('/returns/{gstReturn}/edit', [GstReturnController::class, 'edit'])->name('returns.edit'); Route::put('/returns/{gstReturn}', [GstReturnController::class, 'update'])->name('returns.update'); Route::delete('/returns/{gstReturn}', [GstReturnController::class, 'destroy'])->name('returns.destroy'); // ITC Route::get('/itc', [ItcController::class, 'index'])->name('itc.index'); Route::get('/itc/data', [ItcController::class, 'getData'])->name('itc.data'); Route::get('/itc/create', [ItcController::class, 'create'])->name('itc.create'); Route::post('/itc', [ItcController::class, 'store'])->name('itc.store'); Route::get('/itc/{itc}/edit', [ItcController::class, 'edit'])->name('itc.edit'); Route::put('/itc/{itc}', [ItcController::class, 'update'])->name('itc.update'); Route::delete('/itc/{itc}', [ItcController::class, 'destroy'])->name('itc.destroy'); // ITC Reversals Route::get('/itc-reversals', [ItcReversalController::class, 'index'])->name('itc-reversals.index'); Route::get('/itc-reversals/data', [ItcReversalController::class, 'getData'])->name('itc-reversals.data'); Route::get('/itc-reversals/create', [ItcReversalController::class, 'create'])->name('itc-reversals.create'); Route::post('/itc-reversals', [ItcReversalController::class, 'store'])->name('itc-reversals.store'); Route::get('/itc-reversals/{itcReversal}/edit', [ItcReversalController::class, 'edit'])->name('itc-reversals.edit'); Route::put('/itc-reversals/{itcReversal}', [ItcReversalController::class, 'update'])->name('itc-reversals.update'); Route::delete('/itc-reversals/{itcReversal}', [ItcReversalController::class, 'destroy'])->name('itc-reversals.destroy'); // 2B Reconciliation Route::get('/2b-reconciliation', [TwoBReconciliationController::class, 'index'])->name('2b-reconciliation.index'); Route::get('/2b-reconciliation/data', [TwoBReconciliationController::class, 'getData'])->name('2b-reconciliation.data'); Route::get('/2b-reconciliation/create', [TwoBReconciliationController::class, 'create'])->name('2b-reconciliation.create'); Route::post('/2b-reconciliation', [TwoBReconciliationController::class, 'store'])->name('2b-reconciliation.store'); Route::get('/2b-reconciliation/{twoBReconciliation}/edit', [TwoBReconciliationController::class, 'edit'])->name('2b-reconciliation.edit'); Route::put('/2b-reconciliation/{twoBReconciliation}', [TwoBReconciliationController::class, 'update'])->name('2b-reconciliation.update'); Route::delete('/2b-reconciliation/{twoBReconciliation}', [TwoBReconciliationController::class, 'destroy'])->name('2b-reconciliation.destroy'); // IMS Route::get('/ims', [ImsController::class, 'index'])->name('ims.index'); Route::get('/ims/data', [ImsController::class, 'getData'])->name('ims.data'); Route::get('/ims/create', [ImsController::class, 'create'])->name('ims.create'); Route::post('/ims', [ImsController::class, 'store'])->name('ims.store'); Route::get('/ims/{ims}/edit', [ImsController::class, 'edit'])->name('ims.edit'); Route::put('/ims/{ims}', [ImsController::class, 'update'])->name('ims.update'); Route::delete('/ims/{ims}', [ImsController::class, 'destroy'])->name('ims.destroy'); }); }); // ---------- TDS ---------- Route::prefix('tds')->name('tds.')->group(function () { Route::middleware(['permission:view-gst-reports'])->group(function () { Route::get('/configurations', [TdsConfigurationController::class, 'index'])->name('configurations.index'); Route::get('/configurations/data', [TdsConfigurationController::class, 'getData'])->name('configurations.data'); Route::get('/configurations/create', [TdsConfigurationController::class, 'create'])->name('configurations.create'); Route::post('/configurations', [TdsConfigurationController::class, 'store'])->name('configurations.store'); Route::get('/configurations/{configuration}/edit', [TdsConfigurationController::class, 'edit'])->name('configurations.edit'); Route::put('/configurations/{configuration}', [TdsConfigurationController::class, 'update'])->name('configurations.update'); Route::delete('/configurations/{configuration}', [TdsConfigurationController::class, 'destroy'])->name('configurations.destroy'); Route::get('/deductions', [TdsDeductionController::class, 'index'])->name('deductions.index'); Route::get('/deductions/data', [TdsDeductionController::class, 'getData'])->name('deductions.data'); Route::get('/deductions/create', [TdsDeductionController::class, 'create'])->name('deductions.create'); Route::post('/deductions', [TdsDeductionController::class, 'store'])->name('deductions.store'); Route::get('/deductions/{deduction}', [TdsDeductionController::class, 'show'])->name('deductions.show'); Route::get('/payables', [TdsPayableController::class, 'index'])->name('payables.index'); Route::get('/payables/data', [TdsPayableController::class, 'getData'])->name('payables.data'); Route::get('/payables/{payable}', [TdsPayableController::class, 'show'])->name('payables.show'); Route::get('/payables/{payable}/pay', [TdsPayableController::class, 'pay'])->name('payables.pay'); Route::post('/payables/{payable}/pay', [TdsPayableController::class, 'makePayment'])->name('payables.make-payment'); Route::get('/payments', [TdsPaymentController::class, 'index'])->name('payments.index'); Route::get('/payments/data', [TdsPaymentController::class, 'getData'])->name('payments.data'); Route::get('/payments/{payment}', [TdsPaymentController::class, 'show'])->name('payments.show'); Route::get('/certificates', [TdsCertificateController::class, 'index'])->name('certificates.index'); Route::get('/certificates/data', [TdsCertificateController::class, 'getData'])->name('certificates.data'); Route::get('/certificates/create', [TdsCertificateController::class, 'create'])->name('certificates.create'); Route::post('/certificates', [TdsCertificateController::class, 'store'])->name('certificates.store'); Route::get('/certificates/{certificate}', [TdsCertificateController::class, 'show'])->name('certificates.show'); Route::post('/certificates/{certificate}/issue', [TdsCertificateController::class, 'issue'])->name('certificates.issue'); Route::delete('/certificates/{certificate}/cancel', [TdsCertificateController::class, 'cancel'])->name('certificates.cancel'); // TDS Reports Route::get('/reports', [TdsReportController::class, 'index'])->name('reports.index'); Route::get('/reports/quarterly', [TdsReportController::class, 'quarterly'])->name('reports.quarterly'); Route::get('/reports/certificate', [TdsReportController::class, 'certificate'])->name('reports.certificate'); Route::get('/reports/payment', [TdsReportController::class, 'payment'])->name('reports.payment'); Route::get('/reports/summary', [TdsReportController::class, 'summary'])->name('reports.summary'); }); }); // ---------- TCS ---------- Route::prefix('tcs')->name('tcs.')->group(function () { Route::middleware(['permission:view-gst-reports'])->group(function () { Route::get('/configurations', [TcsConfigurationController::class, 'index'])->name('configurations.index'); Route::get('/configurations/data', [TcsConfigurationController::class, 'getData'])->name('configurations.data'); Route::get('/configurations/create', [TcsConfigurationController::class, 'create'])->name('configurations.create'); Route::post('/configurations', [TcsConfigurationController::class, 'store'])->name('configurations.store'); Route::get('/configurations/{configuration}/edit', [TcsConfigurationController::class, 'edit'])->name('configurations.edit'); Route::put('/configurations/{configuration}', [TcsConfigurationController::class, 'update'])->name('configurations.update'); Route::delete('/configurations/{configuration}', [TcsConfigurationController::class, 'destroy'])->name('configurations.destroy'); Route::get('/collections', [TcsCollectionController::class, 'index'])->name('collections.index'); Route::get('/collections/data', [TcsCollectionController::class, 'getData'])->name('collections.data'); Route::get('/collections/create', [TcsCollectionController::class, 'create'])->name('collections.create'); Route::post('/collections', [TcsCollectionController::class, 'store'])->name('collections.store'); Route::get('/collections/{collection}', [TcsCollectionController::class, 'show'])->name('collections.show'); Route::get('/payables', [TcsPayableController::class, 'index'])->name('payables.index'); Route::get('/payables/data', [TcsPayableController::class, 'getData'])->name('payables.data'); Route::get('/payables/{payable}', [TcsPayableController::class, 'show'])->name('payables.show'); Route::get('/payables/{payable}/pay', [TcsPayableController::class, 'pay'])->name('payables.pay'); Route::post('/payables/{payable}/pay', [TcsPayableController::class, 'makePayment'])->name('payables.make-payment'); Route::get('/payments', [TcsPaymentController::class, 'index'])->name('payments.index'); Route::get('/payments/data', [TcsPaymentController::class, 'getData'])->name('payments.data'); Route::get('/payments/{payment}', [TcsPaymentController::class, 'show'])->name('payments.show'); // TCS Reports Route::get('/reports', [TcsReportController::class, 'index'])->name('reports.index'); Route::get('/reports/quarterly', [TcsReportController::class, 'quarterly'])->name('reports.quarterly'); Route::get('/reports/payment', [TcsReportController::class, 'payment'])->name('reports.payment'); Route::get('/reports/summary', [TcsReportController::class, 'summary'])->name('reports.summary'); }); }); // ---------- Expense Categories ---------- Route::middleware(['permission:view-expenses'])->group(function () { Route::get('expense-categories/data', [ExpenseCategoryController::class, 'getData'])->name('expense-categories.data'); Route::resource('expense-categories', ExpenseCategoryController::class); }); // ---------- Expenses ---------- Route::middleware(['permission:view-expenses'])->group(function () { Route::get('expenses/data', [ExpenseController::class, 'getData'])->name('expenses.data'); Route::resource('expenses', ExpenseController::class); }); // ---------- Payroll ---------- Route::prefix('payroll')->name('payroll.')->group(function () { Route::middleware(['permission:view-employees'])->group(function () { // Departments Route::get('/departments', [DepartmentController::class, 'index'])->name('departments.index'); Route::get('/departments/data', [DepartmentController::class, 'getData'])->name('departments.data'); Route::get('/departments/create', [DepartmentController::class, 'create'])->name('departments.create'); Route::post('/departments', [DepartmentController::class, 'store'])->name('departments.store'); Route::get('/departments/{department}/edit', [DepartmentController::class, 'edit'])->name('departments.edit'); Route::put('/departments/{department}', [DepartmentController::class, 'update'])->name('departments.update'); Route::delete('/departments/{department}', [DepartmentController::class, 'destroy'])->name('departments.destroy'); // Designations Route::get('/designations', [DesignationController::class, 'index'])->name('designations.index'); Route::get('/designations/data', [DesignationController::class, 'getData'])->name('designations.data'); Route::get('/designations/create', [DesignationController::class, 'create'])->name('designations.create'); Route::post('/designations', [DesignationController::class, 'store'])->name('designations.store'); Route::get('/designations/{designation}/edit', [DesignationController::class, 'edit'])->name('designations.edit'); Route::put('/designations/{designation}', [DesignationController::class, 'update'])->name('designations.update'); Route::delete('/designations/{designation}', [DesignationController::class, 'destroy'])->name('designations.destroy'); // Employee Groups Route::get('/employee-groups', [EmployeeGroupController::class, 'index'])->name('employee-groups.index'); Route::get('/employee-groups/data', [EmployeeGroupController::class, 'getData'])->name('employee-groups.data'); Route::get('/employee-groups/create', [EmployeeGroupController::class, 'create'])->name('employee-groups.create'); Route::post('/employee-groups', [EmployeeGroupController::class, 'store'])->name('employee-groups.store'); Route::get('/employee-groups/{group}/edit', [EmployeeGroupController::class, 'edit'])->name('employee-groups.edit'); Route::put('/employee-groups/{group}', [EmployeeGroupController::class, 'update'])->name('employee-groups.update'); Route::delete('/employee-groups/{group}', [EmployeeGroupController::class, 'destroy'])->name('employee-groups.destroy'); // Employees Route::get('/employees', [EmployeeController::class, 'index'])->name('employees.index'); Route::get('/employees/data', [EmployeeController::class, 'getData'])->name('employees.data'); Route::get('/employees/create', [EmployeeController::class, 'create'])->name('employees.create'); Route::post('/employees', [EmployeeController::class, 'store'])->name('employees.store'); Route::get('/employees/{employee}', [EmployeeController::class, 'show'])->name('employees.show'); Route::get('/employees/{employee}/edit', [EmployeeController::class, 'edit'])->name('employees.edit'); Route::put('/employees/{employee}', [EmployeeController::class, 'update'])->name('employees.update'); Route::delete('/employees/{employee}', [EmployeeController::class, 'destroy'])->name('employees.destroy'); // Employee Documents Route::get('/employees/{employee}/documents', [EmployeeDocumentController::class, 'index'])->name('employees.documents'); Route::get('/employees/{employee}/documents/data', [EmployeeDocumentController::class, 'getData'])->name('employees.documents.data'); Route::get('/employees/{employee}/documents/create', [EmployeeDocumentController::class, 'create'])->name('employees.documents.create'); Route::post('/employees/{employee}/documents', [EmployeeDocumentController::class, 'store'])->name('employees.documents.store'); Route::delete('/employees/{employee}/documents/{document}', [EmployeeDocumentController::class, 'destroy'])->name('employees.documents.destroy'); // Attendance Route::get('/attendance', [AttendanceController::class, 'index'])->name('attendance.index'); Route::get('/attendance/data', [AttendanceController::class, 'getData'])->name('attendance.data'); Route::get('/attendance/create', [AttendanceController::class, 'create'])->name('attendance.create'); Route::post('/attendance', [AttendanceController::class, 'store'])->name('attendance.store'); Route::get('/attendance/bulk', [AttendanceController::class, 'bulkCreate'])->name('attendance.bulk'); Route::post('/attendance/bulk', [AttendanceController::class, 'bulkStore'])->name('attendance.bulk-store'); // Leaves Route::get('/leaves', [LeaveController::class, 'index'])->name('leaves.index'); Route::get('/leaves/data', [LeaveController::class, 'getData'])->name('leaves.data'); Route::get('/leaves/create', [LeaveController::class, 'create'])->name('leaves.create'); Route::post('/leaves', [LeaveController::class, 'store'])->name('leaves.store'); Route::get('/leaves/{leave}', [LeaveController::class, 'show'])->name('leaves.show'); Route::post('/leaves/{leave}/approve', [LeaveController::class, 'approve'])->name('leaves.approve'); Route::post('/leaves/{leave}/reject', [LeaveController::class, 'reject'])->name('leaves.reject'); // Holidays Route::get('/holidays', [HolidayController::class, 'index'])->name('holidays.index'); Route::get('/holidays/data', [HolidayController::class, 'getData'])->name('holidays.data'); Route::get('/holidays/create', [HolidayController::class, 'create'])->name('holidays.create'); Route::post('/holidays', [HolidayController::class, 'store'])->name('holidays.store'); Route::get('/holidays/{holiday}/edit', [HolidayController::class, 'edit'])->name('holidays.edit'); Route::put('/holidays/{holiday}', [HolidayController::class, 'update'])->name('holidays.update'); Route::delete('/holidays/{holiday}', [HolidayController::class, 'destroy'])->name('holidays.destroy'); // Salary Structures Route::get('/salary-structures', [SalaryStructureController::class, 'index'])->name('salary-structures.index'); Route::get('/salary-structures/create', [SalaryStructureController::class, 'create'])->name('salary-structures.create'); Route::post('/salary-structures', [SalaryStructureController::class, 'store'])->name('salary-structures.store'); Route::get('/salary-structures/{salaryStructure}', [SalaryStructureController::class, 'show'])->name('salary-structures.show'); Route::get('/salary-structures/{salaryStructure}/edit', [SalaryStructureController::class, 'edit'])->name('salary-structures.edit'); Route::put('/salary-structures/{salaryStructure}', [SalaryStructureController::class, 'update'])->name('salary-structures.update'); // Salary Deductions Route::get('/salary-deductions', [SalaryDeductionController::class, 'index'])->name('salary-deductions.index'); Route::get('/salary-deductions/data', [SalaryDeductionController::class, 'getData'])->name('salary-deductions.data'); Route::get('/salary-deductions/create', [SalaryDeductionController::class, 'create'])->name('salary-deductions.create'); Route::post('/salary-deductions', [SalaryDeductionController::class, 'store'])->name('salary-deductions.store'); Route::get('/salary-deductions/{deduction}/edit', [SalaryDeductionController::class, 'edit'])->name('salary-deductions.edit'); Route::put('/salary-deductions/{deduction}', [SalaryDeductionController::class, 'update'])->name('salary-deductions.update'); // Payslips Route::get('/payslips', [PayslipController::class, 'index'])->name('payslips.index'); Route::get('/payslips/data', [PayslipController::class, 'getData'])->name('payslips.data'); Route::get('/payslips/create', [PayslipController::class, 'create'])->name('payslips.create'); Route::post('/payslips', [PayslipController::class, 'store'])->name('payslips.store'); Route::get('/payslips/{payslip}', [PayslipController::class, 'show'])->name('payslips.show'); Route::get('/payslips/{payslip}/print', [PayslipController::class, 'print'])->name('payslips.print'); Route::post('/payslips/{payslip}/approve', [PayslipController::class, 'approve'])->name('payslips.approve'); Route::get('/payslips/generate', [PayslipController::class, 'generate'])->name('payslips.generate'); // Payroll Reports Route::get('/reports', [PayrollReportController::class, 'index'])->name('reports.index'); Route::get('/reports/salary-register', [PayrollReportController::class, 'salaryRegister'])->name('reports.salary-register'); Route::get('/reports/attendance-register', [PayrollReportController::class, 'attendanceRegister'])->name('reports.attendance-register'); Route::get('/reports/pf', [PayrollReportController::class, 'pfReport'])->name('reports.pf'); Route::get('/reports/esi', [PayrollReportController::class, 'esiReport'])->name('reports.esi'); Route::get('/reports/tds', [PayrollReportController::class, 'tdsReport'])->name('reports.tds'); Route::get('/reports/employee-cost', [PayrollReportController::class, 'employeeCost'])->name('reports.employee-cost'); }); }); // ---------- Banking ---------- Route::prefix('bank')->name('bank.')->group(function () { Route::middleware(['permission:view-payments'])->group(function () { // Bank Accounts Route::get('/accounts', [BankAccountController::class, 'index'])->name('accounts.index'); Route::get('/accounts/data', [BankAccountController::class, 'getData'])->name('accounts.data'); Route::get('/accounts/create', [BankAccountController::class, 'create'])->name('accounts.create'); Route::post('/accounts', [BankAccountController::class, 'store'])->name('accounts.store'); Route::get('/accounts/{account}/edit', [BankAccountController::class, 'edit'])->name('accounts.edit'); Route::put('/accounts/{account}', [BankAccountController::class, 'update'])->name('accounts.update'); Route::delete('/accounts/{account}', [BankAccountController::class, 'destroy'])->name('accounts.destroy'); Route::get('/accounts/{account}/ledger', [BankAccountController::class, 'ledger'])->name('accounts.ledger'); Route::get('/accounts/{account}/transactions', [BankAccountController::class, 'transactions'])->name('accounts.transactions'); Route::get('/accounts/{account}/reconciliation', [BankAccountController::class, 'reconciliation'])->name('accounts.reconciliation'); // Bank Transactions Route::get('/transactions', [BankTransactionController::class, 'index'])->name('transactions.index'); Route::get('/transactions/data', [BankTransactionController::class, 'getData'])->name('transactions.data'); Route::get('/transactions/create', [BankTransactionController::class, 'create'])->name('transactions.create'); Route::post('/transactions', [BankTransactionController::class, 'store'])->name('transactions.store'); Route::get('/transactions/{transaction}', [BankTransactionController::class, 'show'])->name('transactions.show'); // Bank Reconciliation Route::get('/reconciliations', [BankReconciliationController::class, 'index'])->name('reconciliations.index'); Route::get('/reconciliations/data', [BankReconciliationController::class, 'getData'])->name('reconciliations.data'); Route::get('/reconciliations/create', [BankReconciliationController::class, 'create'])->name('reconciliations.create'); Route::post('/reconciliations', [BankReconciliationController::class, 'store'])->name('reconciliations.store'); Route::get('/reconciliations/{reconciliation}', [BankReconciliationController::class, 'show'])->name('reconciliations.show'); // Bank Statement Import Route::get('/imports', [BankStatementImportController::class, 'index'])->name('imports.index'); Route::get('/imports/data', [BankStatementImportController::class, 'getData'])->name('imports.data'); Route::get('/imports/create', [BankStatementImportController::class, 'create'])->name('imports.create'); Route::post('/imports', [BankStatementImportController::class, 'store'])->name('imports.store'); Route::get('/imports/{import}', [BankStatementImportController::class, 'show'])->name('imports.show'); // Cheques Route::get('/cheques', [ChequeController::class, 'index'])->name('cheques.index'); Route::get('/cheques/data', [ChequeController::class, 'getData'])->name('cheques.data'); Route::get('/cheques/create', [ChequeController::class, 'create'])->name('cheques.create'); Route::post('/cheques', [ChequeController::class, 'store'])->name('cheques.store'); Route::get('/cheques/{cheque}/print', [ChequeController::class, 'print'])->name('cheques.print'); Route::post('/cheques/{cheque}/cancel', [ChequeController::class, 'cancel'])->name('cheques.cancel'); Route::post('/cheques/{cheque}/clear', [ChequeController::class, 'clear'])->name('cheques.clear'); // Deposit Slips Route::get('/deposit-slips', [DepositSlipController::class, 'index'])->name('deposit-slips.index'); Route::get('/deposit-slips/data', [DepositSlipController::class, 'getData'])->name('deposit-slips.data'); Route::get('/deposit-slips/create', [DepositSlipController::class, 'create'])->name('deposit-slips.create'); Route::post('/deposit-slips', [DepositSlipController::class, 'store'])->name('deposit-slips.store'); Route::get('/deposit-slips/{depositSlip}', [DepositSlipController::class, 'show'])->name('deposit-slips.show'); Route::get('/deposit-slips/{depositSlip}/print', [DepositSlipController::class, 'print'])->name('deposit-slips.print'); // Payment Advices Route::get('/payment-advices', [PaymentAdviceController::class, 'index'])->name('payment-advices.index'); Route::get('/payment-advices/data', [PaymentAdviceController::class, 'getData'])->name('payment-advices.data'); Route::get('/payment-advices/create', [PaymentAdviceController::class, 'create'])->name('payment-advices.create'); Route::post('/payment-advices', [PaymentAdviceController::class, 'store'])->name('payment-advices.store'); Route::get('/payment-advices/{paymentAdvice}', [PaymentAdviceController::class, 'show'])->name('payment-advices.show'); Route::get('/payment-advices/{paymentAdvice}/print', [PaymentAdviceController::class, 'print'])->name('payment-advices.print'); }); }); // ---------- Manufacturing ---------- Route::prefix('manufacturing')->name('manufacturing.')->group(function () { Route::middleware(['permission:view-employees'])->group(function () { // Production Units Route::get('/production-units', [ProductionUnitController::class, 'index'])->name('production-units.index'); Route::get('/production-units/data', [ProductionUnitController::class, 'getData'])->name('production-units.data'); Route::get('/production-units/create', [ProductionUnitController::class, 'create'])->name('production-units.create'); Route::post('/production-units', [ProductionUnitController::class, 'store'])->name('production-units.store'); Route::get('/production-units/{productionUnit}/edit', [ProductionUnitController::class, 'edit'])->name('production-units.edit'); Route::put('/production-units/{productionUnit}', [ProductionUnitController::class, 'update'])->name('production-units.update'); Route::delete('/production-units/{productionUnit}', [ProductionUnitController::class, 'destroy'])->name('production-units.destroy'); // Raw Materials Route::get('/raw-materials', [RawMaterialController::class, 'index'])->name('raw-materials.index'); Route::get('/raw-materials/data', [RawMaterialController::class, 'getData'])->name('raw-materials.data'); Route::get('/raw-materials/create', [RawMaterialController::class, 'create'])->name('raw-materials.create'); Route::post('/raw-materials', [RawMaterialController::class, 'store'])->name('raw-materials.store'); Route::get('/raw-materials/{rawMaterial}/edit', [RawMaterialController::class, 'edit'])->name('raw-materials.edit'); Route::put('/raw-materials/{rawMaterial}', [RawMaterialController::class, 'update'])->name('raw-materials.update'); Route::delete('/raw-materials/{rawMaterial}', [RawMaterialController::class, 'destroy'])->name('raw-materials.destroy'); // Finished Goods Route::get('/finished-goods', [FinishedGoodController::class, 'index'])->name('finished-goods.index'); Route::get('/finished-goods/data', [FinishedGoodController::class, 'getData'])->name('finished-goods.data'); Route::get('/finished-goods/create', [FinishedGoodController::class, 'create'])->name('finished-goods.create'); Route::post('/finished-goods', [FinishedGoodController::class, 'store'])->name('finished-goods.store'); Route::get('/finished-goods/{finishedGood}/edit', [FinishedGoodController::class, 'edit'])->name('finished-goods.edit'); Route::put('/finished-goods/{finishedGood}', [FinishedGoodController::class, 'update'])->name('finished-goods.update'); Route::delete('/finished-goods/{finishedGood}', [FinishedGoodController::class, 'destroy'])->name('finished-goods.destroy'); // Semi Finished Goods Route::get('/semi-finished-goods', [SemiFinishedGoodController::class, 'index'])->name('semi-finished-goods.index'); Route::get('/semi-finished-goods/data', [SemiFinishedGoodController::class, 'getData'])->name('semi-finished-goods.data'); Route::get('/semi-finished-goods/create', [SemiFinishedGoodController::class, 'create'])->name('semi-finished-goods.create'); Route::post('/semi-finished-goods', [SemiFinishedGoodController::class, 'store'])->name('semi-finished-goods.store'); Route::get('/semi-finished-goods/{semiFinishedGood}/edit', [SemiFinishedGoodController::class, 'edit'])->name('semi-finished-goods.edit'); Route::put('/semi-finished-goods/{semiFinishedGood}', [SemiFinishedGoodController::class, 'update'])->name('semi-finished-goods.update'); Route::delete('/semi-finished-goods/{semiFinishedGood}', [SemiFinishedGoodController::class, 'destroy'])->name('semi-finished-goods.destroy'); // By Products Route::get('/by-products', [ByProductController::class, 'index'])->name('by-products.index'); Route::get('/by-products/data', [ByProductController::class, 'getData'])->name('by-products.data'); Route::get('/by-products/create', [ByProductController::class, 'create'])->name('by-products.create'); Route::post('/by-products', [ByProductController::class, 'store'])->name('by-products.store'); Route::get('/by-products/{byProduct}/edit', [ByProductController::class, 'edit'])->name('by-products.edit'); Route::put('/by-products/{byProduct}', [ByProductController::class, 'update'])->name('by-products.update'); Route::delete('/by-products/{byProduct}', [ByProductController::class, 'destroy'])->name('by-products.destroy'); // Co Products Route::get('/co-products', [CoProductController::class, 'index'])->name('co-products.index'); Route::get('/co-products/data', [CoProductController::class, 'getData'])->name('co-products.data'); Route::get('/co-products/create', [CoProductController::class, 'create'])->name('co-products.create'); Route::post('/co-products', [CoProductController::class, 'store'])->name('co-products.store'); Route::get('/co-products/{coProduct}/edit', [CoProductController::class, 'edit'])->name('co-products.edit'); Route::put('/co-products/{coProduct}', [CoProductController::class, 'update'])->name('co-products.update'); Route::delete('/co-products/{coProduct}', [CoProductController::class, 'destroy'])->name('co-products.destroy'); // Scraps Route::get('/scraps', [ScrapController::class, 'index'])->name('scraps.index'); Route::get('/scraps/data', [ScrapController::class, 'getData'])->name('scraps.data'); Route::get('/scraps/create', [ScrapController::class, 'create'])->name('scraps.create'); Route::post('/scraps', [ScrapController::class, 'store'])->name('scraps.store'); Route::get('/scraps/{scrap}/edit', [ScrapController::class, 'edit'])->name('scraps.edit'); Route::put('/scraps/{scrap}', [ScrapController::class, 'update'])->name('scraps.update'); Route::delete('/scraps/{scrap}', [ScrapController::class, 'destroy'])->name('scraps.destroy'); // BOMs Route::get('/boms', [BomController::class, 'index'])->name('boms.index'); Route::get('/boms/data', [BomController::class, 'getData'])->name('boms.data'); Route::get('/boms/create', [BomController::class, 'create'])->name('boms.create'); Route::post('/boms', [BomController::class, 'store'])->name('boms.store'); Route::get('/boms/{bom}', [BomController::class, 'show'])->name('boms.show'); Route::get('/boms/{bom}/edit', [BomController::class, 'edit'])->name('boms.edit'); Route::put('/boms/{bom}', [BomController::class, 'update'])->name('boms.update'); Route::delete('/boms/{bom}', [BomController::class, 'destroy'])->name('boms.destroy'); // Production Orders Route::get('/production-orders', [ProductionOrderController::class, 'index'])->name('production-orders.index'); Route::get('/production-orders/data', [ProductionOrderController::class, 'getData'])->name('production-orders.data'); Route::get('/production-orders/create', [ProductionOrderController::class, 'create'])->name('production-orders.create'); Route::post('/production-orders', [ProductionOrderController::class, 'store'])->name('production-orders.store'); Route::get('/production-orders/{productionOrder}', [ProductionOrderController::class, 'show'])->name('production-orders.show'); Route::get('/production-orders/{productionOrder}/edit', [ProductionOrderController::class, 'edit'])->name('production-orders.edit'); Route::put('/production-orders/{productionOrder}', [ProductionOrderController::class, 'update'])->name('production-orders.update'); Route::delete('/production-orders/{productionOrder}', [ProductionOrderController::class, 'destroy'])->name('production-orders.destroy'); // Material Consumptions Route::get('/material-consumptions', [MaterialConsumptionController::class, 'index'])->name('material-consumptions.index'); Route::get('/material-consumptions/data', [MaterialConsumptionController::class, 'getData'])->name('material-consumptions.data'); Route::get('/material-consumptions/create', [MaterialConsumptionController::class, 'create'])->name('material-consumptions.create'); Route::post('/material-consumptions', [MaterialConsumptionController::class, 'store'])->name('material-consumptions.store'); Route::get('/material-consumptions/{materialConsumption}', [MaterialConsumptionController::class, 'show'])->name('material-consumptions.show'); // Production Entries Route::get('/production-entries', [ProductionEntryController::class, 'index'])->name('production-entries.index'); Route::get('/production-entries/data', [ProductionEntryController::class, 'getData'])->name('production-entries.data'); Route::get('/production-entries/create', [ProductionEntryController::class, 'create'])->name('production-entries.create'); Route::post('/production-entries', [ProductionEntryController::class, 'store'])->name('production-entries.store'); Route::get('/production-entries/{productionEntry}', [ProductionEntryController::class, 'show'])->name('production-entries.show'); }); }); // ---------- Job Work ---------- Route::prefix('job-work')->name('job-work.')->group(function () { Route::middleware(['permission:view-job-workers'])->group(function () { Route::get('/job-workers', [JobWorkerController::class, 'index'])->name('job-workers.index'); Route::get('/job-workers/data', [JobWorkerController::class, 'getData'])->name('job-workers.data'); Route::get('/job-workers/create', [JobWorkerController::class, 'create'])->name('job-workers.create'); Route::post('/job-workers', [JobWorkerController::class, 'store'])->name('job-workers.store'); Route::get('/job-workers/{jobWorker}/edit', [JobWorkerController::class, 'edit'])->name('job-workers.edit'); Route::put('/job-workers/{jobWorker}', [JobWorkerController::class, 'update'])->name('job-workers.update'); Route::delete('/job-workers/{jobWorker}', [JobWorkerController::class, 'destroy'])->name('job-workers.destroy'); Route::get('/job-work-orders', [JobWorkOrderController::class, 'index'])->name('job-work-orders.index'); Route::get('/job-work-orders/data', [JobWorkOrderController::class, 'getData'])->name('job-work-orders.data'); Route::get('/job-work-orders/create', [JobWorkOrderController::class, 'create'])->name('job-work-orders.create'); Route::post('/job-work-orders', [JobWorkOrderController::class, 'store'])->name('job-work-orders.store'); Route::get('/job-work-orders/{jobWorkOrder}', [JobWorkOrderController::class, 'show'])->name('job-work-orders.show'); Route::get('/job-work-orders/{jobWorkOrder}/edit', [JobWorkOrderController::class, 'edit'])->name('job-work-orders.edit'); Route::put('/job-work-orders/{jobWorkOrder}', [JobWorkOrderController::class, 'update'])->name('job-work-orders.update'); Route::delete('/job-work-orders/{jobWorkOrder}', [JobWorkOrderController::class, 'destroy'])->name('job-work-orders.destroy'); Route::get('/job-work-consumptions', [JobWorkConsumptionController::class, 'index'])->name('job-work-consumptions.index'); Route::get('/job-work-consumptions/data', [JobWorkConsumptionController::class, 'getData'])->name('job-work-consumptions.data'); Route::get('/job-work-consumptions/create', [JobWorkConsumptionController::class, 'create'])->name('job-work-consumptions.create'); Route::post('/job-work-consumptions', [JobWorkConsumptionController::class, 'store'])->name('job-work-consumptions.store'); Route::get('/job-work-consumptions/{jobWorkConsumption}', [JobWorkConsumptionController::class, 'show'])->name('job-work-consumptions.show'); Route::get('/job-work-receipts', [JobWorkReceiptController::class, 'index'])->name('job-work-receipts.index'); Route::get('/job-work-receipts/data', [JobWorkReceiptController::class, 'getData'])->name('job-work-receipts.data'); Route::get('/job-work-receipts/create', [JobWorkReceiptController::class, 'create'])->name('job-work-receipts.create'); Route::post('/job-work-receipts', [JobWorkReceiptController::class, 'store'])->name('job-work-receipts.store'); Route::get('/job-work-receipts/{jobWorkReceipt}', [JobWorkReceiptController::class, 'show'])->name('job-work-receipts.show'); Route::get('/job-work-charges', [JobWorkChargeController::class, 'index'])->name('job-work-charges.index'); Route::get('/job-work-charges/data', [JobWorkChargeController::class, 'getData'])->name('job-work-charges.data'); Route::get('/job-work-charges/create', [JobWorkChargeController::class, 'create'])->name('job-work-charges.create'); Route::post('/job-work-charges', [JobWorkChargeController::class, 'store'])->name('job-work-charges.store'); Route::get('/job-work-charges/{jobWorkCharge}/edit', [JobWorkChargeController::class, 'edit'])->name('job-work-charges.edit'); Route::put('/job-work-charges/{jobWorkCharge}', [JobWorkChargeController::class, 'update'])->name('job-work-charges.update'); Route::delete('/job-work-charges/{jobWorkCharge}', [JobWorkChargeController::class, 'destroy'])->name('job-work-charges.destroy'); }); }); // ---------- Cost Centre & Costing ---------- Route::prefix('costing')->name('costing.')->group(function () { Route::middleware(['permission:view-expenses'])->group(function () { // Cost Centres Route::get('/cost-centres', [CostCentreController::class, 'index'])->name('cost-centres.index'); Route::get('/cost-centres/data', [CostCentreController::class, 'getData'])->name('cost-centres.data'); Route::get('/cost-centres/create', [CostCentreController::class, 'create'])->name('cost-centres.create'); Route::post('/cost-centres', [CostCentreController::class, 'store'])->name('cost-centres.store'); Route::get('/cost-centres/{costCentre}/edit', [CostCentreController::class, 'edit'])->name('cost-centres.edit'); Route::put('/cost-centres/{costCentre}', [CostCentreController::class, 'update'])->name('cost-centres.update'); Route::delete('/cost-centres/{costCentre}', [CostCentreController::class, 'destroy'])->name('cost-centres.destroy'); // Cost Categories Route::get('/cost-categories', [CostCategoryController::class, 'index'])->name('cost-categories.index'); Route::get('/cost-categories/data', [CostCategoryController::class, 'getData'])->name('cost-categories.data'); Route::get('/cost-categories/create', [CostCategoryController::class, 'create'])->name('cost-categories.create'); Route::post('/cost-categories', [CostCategoryController::class, 'store'])->name('cost-categories.store'); Route::get('/cost-categories/{costCategory}/edit', [CostCategoryController::class, 'edit'])->name('cost-categories.edit'); Route::put('/cost-categories/{costCategory}', [CostCategoryController::class, 'update'])->name('cost-categories.update'); Route::delete('/cost-categories/{costCategory}', [CostCategoryController::class, 'destroy'])->name('cost-categories.destroy'); // Projects Route::get('/projects', [ProjectController::class, 'index'])->name('projects.index'); Route::get('/projects/data', [ProjectController::class, 'getData'])->name('projects.data'); Route::get('/projects/create', [ProjectController::class, 'create'])->name('projects.create'); Route::post('/projects', [ProjectController::class, 'store'])->name('projects.store'); Route::get('/projects/{project}/edit', [ProjectController::class, 'edit'])->name('projects.edit'); Route::put('/projects/{project}', [ProjectController::class, 'update'])->name('projects.update'); Route::delete('/projects/{project}', [ProjectController::class, 'destroy'])->name('projects.destroy'); // Expense Allocations Route::get('/expense-allocations', [ExpenseAllocationController::class, 'index'])->name('expense-allocations.index'); Route::get('/expense-allocations/data', [ExpenseAllocationController::class, 'getData'])->name('expense-allocations.data'); Route::get('/expense-allocations/create', [ExpenseAllocationController::class, 'create'])->name('expense-allocations.create'); Route::post('/expense-allocations', [ExpenseAllocationController::class, 'store'])->name('expense-allocations.store'); Route::get('/expense-allocations/{expenseAllocation}/edit', [ExpenseAllocationController::class, 'edit'])->name('expense-allocations.edit'); Route::put('/expense-allocations/{expenseAllocation}', [ExpenseAllocationController::class, 'update'])->name('expense-allocations.update'); Route::delete('/expense-allocations/{expenseAllocation}', [ExpenseAllocationController::class, 'destroy'])->name('expense-allocations.destroy'); // Revenue Allocations Route::get('/revenue-allocations', [RevenueAllocationController::class, 'index'])->name('revenue-allocations.index'); Route::get('/revenue-allocations/data', [RevenueAllocationController::class, 'getData'])->name('revenue-allocations.data'); Route::get('/revenue-allocations/create', [RevenueAllocationController::class, 'create'])->name('revenue-allocations.create'); Route::post('/revenue-allocations', [RevenueAllocationController::class, 'store'])->name('revenue-allocations.store'); Route::get('/revenue-allocations/{revenueAllocation}/edit', [RevenueAllocationController::class, 'edit'])->name('revenue-allocations.edit'); Route::put('/revenue-allocations/{revenueAllocation}', [RevenueAllocationController::class, 'update'])->name('revenue-allocations.update'); Route::delete('/revenue-allocations/{revenueAllocation}', [RevenueAllocationController::class, 'destroy'])->name('revenue-allocations.destroy'); }); }); // ---------- Notifications & Activity Logs ---------- Route::get('/notifications', [NotificationController::class, 'index']); Route::get('/activity-logs', [ActivityLogController::class, 'index']); // ---------- Health, Audit, Maintenance ---------- Route::get('/health-check', [HealthController::class, 'index']); Route::get('/audit-logs', [AuditController::class, 'index']); Route::get('/maintenance/on', [MaintenanceController::class, 'enable']); Route::get('/maintenance/off', [MaintenanceController::class, 'disable']); // ---------- Print Routes ---------- Route::get('/print/lr/{id}', [PrintController::class, 'lr']); Route::get('/print/receipt/{id}', [PrintController::class, 'receipt']); Route::get('/print/invoice/{id}', [PrintController::class, 'invoice']); Route::get('/print/ledger/{id}', [PrintController::class, 'ledger']); // ---------- Analytics ---------- Route::get('/analytics', [AnalyticsController::class, 'index']); // ---------- Fleet & GPS ---------- Route::get('/fleet', [FleetController::class, 'index']); Route::get('/gps-tracking', [GpsController::class, 'index']); // ---------- Employees, Attendance, Payroll ---------- Route::middleware(['permission:view-employees'])->group(function () { Route::get('employees/data', [EmployeeController::class, 'getData'])->name('employees.data'); Route::resource('employees', EmployeeController::class); Route::get('attendance/data', [AttendanceController::class, 'getData'])->name('attendance.data'); Route::resource('attendance', AttendanceController::class); Route::get('payroll/data', [PayrollController::class, 'getData'])->name('payroll.data'); Route::resource('payroll', PayrollController::class); }); // ---------- CRM, Support Tickets, Client Portal ---------- Route::middleware(['permission:view-support-tickets'])->group(function () { Route::get('/crm', [CrmController::class, 'index']); Route::get('support-tickets/data', [SupportTicketController::class, 'getData'])->name('support-tickets.data'); Route::resource('support-tickets', SupportTicketController::class); }); Route::prefix('client')->name('client.')->group(function () { Route::get('/portal', [ClientPortalController::class, 'index'])->name('portal'); Route::get('/lrs', [ClientPortalController::class, 'lrs'])->name('lrs'); Route::get('/invoices', [ClientPortalController::class, 'invoices'])->name('invoices'); Route::get('/ledger', [ClientPortalController::class, 'ledger'])->name('ledger'); }); // ---------- AI & Chatbot ---------- Route::get('/ai-dashboard', [AiController::class, 'index']); Route::get('/chatbot', [ChatbotController::class, 'index']); // ---------- Permissions ---------- Route::middleware(['permission:view-permissions'])->group(function () { Route::get('permissions/data', [\App\Http\Controllers\PermissionController::class, 'getData'])->name('permissions.data'); Route::resource('permissions', \App\Http\Controllers\PermissionController::class); }); // ---------- Roles ---------- Route::middleware(['permission:view-roles'])->group(function () { Route::get('roles/{role}/assign', [\App\Http\Controllers\RoleController::class, 'assign'])->name('roles.assign'); Route::resource('roles', \App\Http\Controllers\RoleController::class); }); // ---------- Users ---------- Route::middleware(['permission:view-users'])->group(function () { Route::get('users/data', [UserController::class, 'getData'])->name('users.data'); Route::resource('users', UserController::class); }); // ---------- Branches & Companies ---------- Route::middleware(['permission:view-branches|view-companies'])->group(function () { Route::get('branches/data', [BranchController::class, 'getData'])->name('branches.data'); Route::resource('branches', BranchController::class); Route::get('companies/data', [CompanyController::class, 'getData'])->name('companies.data'); Route::resource('companies', CompanyController::class); }); // ---------- Tenants & Subscriptions ---------- Route::middleware(['permission:view-tenants|view-subscriptions'])->group(function () { Route::get('tenants/data', [TenantController::class, 'getData'])->name('tenants.data'); Route::resource('tenants', TenantController::class); Route::get('subscriptions/data', [SubscriptionController::class, 'getData'])->name('subscriptions.data'); Route::resource('subscriptions', SubscriptionController::class); }); // ---------- Documents & Compliance ---------- Route::middleware(['permission:view-documents'])->group(function () { Route::get('documents/data', [DocumentController::class, 'getData'])->name('documents.data'); Route::get('documents/records/{type}', [DocumentController::class, 'getRecordsByType'])->name('documents.records'); Route::resource('documents', DocumentController::class); Route::get('/compliance-dashboard', [ComplianceController::class, 'index']); }); // ---------- Warehouses & Inventory ---------- Route::middleware(['permission:view-warehouses|view-inventory'])->group(function () { Route::get('warehouses/data', [WarehouseController::class, 'getData'])->name('warehouses.data'); Route::resource('warehouses', WarehouseController::class); Route::get('inventory/data', [InventoryController::class, 'getData'])->name('inventory.data'); Route::resource('inventory', InventoryController::class); }); // ---------- Dispatch ---------- Route::middleware(['permission:view-dispatches'])->group(function () { Route::get('dispatch/data', [DispatchController::class, 'getData'])->name('dispatch.data'); Route::resource('dispatch', DispatchController::class); }); // ---------- Vendors, Purchase Orders, Procurement ---------- Route::middleware(['permission:view-vendors|view-purchase-orders'])->group(function () { Route::get('vendors/data', [VendorController::class, 'getData'])->name('vendors.data'); Route::resource('vendors', VendorController::class); Route::get('purchase-orders/data', [PurchaseOrderController::class, 'getData'])->name('purchase-orders.data'); Route::post('purchase-orders/{purchase_order}/receive', [PurchaseOrderController::class, 'receive'])->name('purchase-orders.receive'); Route::post('purchase-orders/{purchase_order}/return', [PurchaseOrderController::class, 'returnItems'])->name('purchase-orders.return'); Route::resource('purchase-orders', PurchaseOrderController::class); Route::get('/procurement-dashboard', [ProcurementController::class, 'index']); }); // ---------- Workflows & Approvals ---------- Route::middleware(['permission:view-workflows|view-approvals'])->group(function () { Route::get('workflows/data', [WorkflowController::class, 'getData'])->name('workflows.data'); Route::resource('workflows', WorkflowController::class); Route::get('approvals/data', [ApprovalController::class, 'getData'])->name('approvals.data'); Route::get('approvals/records/{type}', [ApprovalController::class, 'getRecordsByType'])->name('approvals.records'); Route::resource('approvals', ApprovalController::class); }); // ---------- Command Center & Executive Reports ---------- Route::get('/command-center', [CommandCenterController::class, 'index']); Route::get('/executive-reports', [ExecutiveReportController::class, 'index']); // ---------- AI Control Tower & Predictive ---------- Route::get('/ai-control-tower', [AiControlTowerController::class, 'index']); Route::get('/predictive-insights', [PredictiveController::class, 'index']); // ---------- Autonomous Operations & Quantum Analytics ---------- Route::get('/autonomous-operations', [AutonomousController::class, 'index']); Route::get('/quantum-analytics', [QuantumAnalyticsController::class, 'index']); // ---------- Digital Twin & Simulation ---------- Route::get('/digital-twin', [DigitalTwinController::class, 'index']); Route::get('/simulation-engine', [SimulationController::class, 'index']); // ---------- Hyper Automation & Neural Dashboard ---------- Route::get('/hyper-automation', [HyperAutomationController::class, 'index']); Route::get('/neural-dashboard', [NeuralDashboardController::class, 'index']); // ---------- Vouchers (Payment / Receipt / Contra / Journal) ---------- Route::middleware(['permission:view-vouchers'])->group(function () { Route::get('vouchers/payment', [VoucherController::class, 'paymentIndex'])->name('vouchers.payment'); Route::get('vouchers/receipt', [VoucherController::class, 'receiptIndex'])->name('vouchers.receipt'); Route::get('vouchers/contra', [VoucherController::class, 'contraIndex'])->name('vouchers.contra'); Route::get('vouchers/journal', [VoucherController::class, 'journalIndex'])->name('vouchers.journal'); Route::get('vouchers/data/{type}', [VoucherController::class, 'getData'])->name('vouchers.data'); Route::post('vouchers', [VoucherController::class, 'store'])->name('vouchers.store'); Route::delete('vouchers/{voucher}', [VoucherController::class, 'destroy'])->name('vouchers.destroy'); Route::post('vouchers/{voucher}/reverse', [VoucherController::class, 'reversePayment'])->name('vouchers.reverse'); }); // ---------- Bank Accounts ---------- Route::middleware(['permission:view-bank-accounts'])->group(function () { Route::get('bank-accounts/data', [BankAccountController::class, 'getData'])->name('bank-accounts.data'); Route::resource('bank-accounts', BankAccountController::class); }); // ---------- Bulk Import / Export ---------- $supportedTypes = 'parties|vehicles|vehicle_types|expense_categories|lrs|invoices|ledgers|payments|expenses|employees|attendance|payroll|support-tickets|branches|companies|tenants|subscriptions|documents|warehouses|inventory|dispatch|vendors|purchase-orders|workflows|approvals|users|permissions|gst_rates|hsn_codes|sac_codes|tax_categories|gst_classifications|gst_registrations|gst_transactions'; Route::get('{entityType}/export/csv', [ImportExportController::class, 'export'])->where('entityType', $supportedTypes)->name('entities.export.csv'); Route::get('{entityType}/export/sample', [ImportExportController::class, 'downloadSample'])->where('entityType', $supportedTypes)->name('entities.export.sample'); Route::post('{entityType}/import', [ImportExportController::class, 'import'])->where('entityType', $supportedTypes)->name('entities.import'); }); // End of auth middleware group