prefix('connector/api/v2') ->name('connector.api.v2.') ->group(function () { // Auth Route::get('me', [Modules\Connector\Http\Controllers\Api\V2\AuthController::class, 'me']); Route::post('logout', [Modules\Connector\Http\Controllers\Api\V2\AuthController::class, 'logout']); // Dashboard Route::get('dashboard', [Modules\Connector\Http\Controllers\Api\V2\DashboardController::class, 'index']); // Core resources Route::get('products/search-pos', [Modules\Connector\Http\Controllers\Api\V2\ProductController::class, 'searchForPos']); Route::apiResource('products', Modules\Connector\Http\Controllers\Api\V2\ProductController::class)->only(['index', 'show']); Route::apiResource('contacts', Modules\Connector\Http\Controllers\Api\V2\ContactController::class)->only(['index', 'show', 'store', 'update']); Route::post('contacts/payment', [Modules\Connector\Http\Controllers\Api\V2\ContactController::class, 'contactPay']); Route::apiResource('sells', Modules\Connector\Http\Controllers\Api\V2\SellController::class)->only(['index', 'show', 'store', 'update', 'destroy']); Route::post('sells/return', [Modules\Connector\Http\Controllers\Api\V2\SellController::class, 'addSellReturn']); Route::get('sells/returns', [Modules\Connector\Http\Controllers\Api\V2\SellController::class, 'listSellReturn']); Route::apiResource('purchases', Modules\Connector\Http\Controllers\Api\V2\PurchaseController::class)->only(['index', 'show']); Route::apiResource('expenses', Modules\Connector\Http\Controllers\Api\V2\ExpenseController::class)->only(['index', 'store', 'show', 'update']); Route::apiResource('cash-registers', Modules\Connector\Http\Controllers\Api\V2\CashRegisterController::class)->only(['index', 'store', 'show']); // Stock Route::get('stock/transfers', [Modules\Connector\Http\Controllers\Api\V2\StockController::class, 'transfers']); Route::get('stock/adjustments', [Modules\Connector\Http\Controllers\Api\V2\StockController::class, 'adjustments']); Route::get('stock/opening', [Modules\Connector\Http\Controllers\Api\V2\StockController::class, 'openingStock']); // Reports Route::get('reports/profit-loss', [Modules\Connector\Http\Controllers\Api\V2\ReportController::class, 'profitLoss']); Route::get('reports/product-stock', [Modules\Connector\Http\Controllers\Api\V2\ReportController::class, 'productStock']); Route::get('reports/sales', [Modules\Connector\Http\Controllers\Api\V2\ReportController::class, 'sales']); Route::get('reports/purchases', [Modules\Connector\Http\Controllers\Api\V2\ReportController::class, 'purchases']); // Reference data (delegate v1) Route::get('business-locations', [Modules\Connector\Http\Controllers\Api\V2\ReferenceController::class, 'businessLocations']); Route::get('brands', [Modules\Connector\Http\Controllers\Api\V2\ReferenceController::class, 'brands']); Route::get('categories', [Modules\Connector\Http\Controllers\Api\V2\ReferenceController::class, 'categories']); Route::get('units', [Modules\Connector\Http\Controllers\Api\V2\ReferenceController::class, 'units']); Route::get('taxes', [Modules\Connector\Http\Controllers\Api\V2\ReferenceController::class, 'taxes']); Route::get('payment-methods', [Modules\Connector\Http\Controllers\Api\V2\ReferenceController::class, 'paymentMethods']); Route::get('payment-accounts', [Modules\Connector\Http\Controllers\Api\V2\ReferenceController::class, 'paymentAccounts']); Route::get('business-details', [Modules\Connector\Http\Controllers\Api\V2\ReferenceController::class, 'businessDetails']); // Generic lookup for remaining entities Route::get('lookup/{resource}', [Modules\Connector\Http\Controllers\Api\V2\LookupController::class, 'index']); // Users & roles Route::get('users', [Modules\Connector\Http\Controllers\Api\V2\UserController::class, 'index']); Route::get('users/{id}', [Modules\Connector\Http\Controllers\Api\V2\UserController::class, 'show']); Route::get('roles', [Modules\Connector\Http\Controllers\Api\V2\UserController::class, 'roles']); // HRM (Essentials) Route::prefix('hrm')->group(function () { Route::get('dashboard', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'dashboard']); Route::get('reports/sales-targets', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'salesTargetsReport']); Route::get('leave-resources', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'leaveResources']); Route::get('leaves', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'leaves']); Route::post('leaves', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'storeLeave']); Route::get('leaves/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'showLeave']); Route::put('leaves/{id}/status', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'updateLeaveStatus']); Route::delete('leaves/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'destroyLeave']); Route::get('leave-types', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'leaveTypes']); Route::post('leave-types', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'storeLeaveType']); Route::put('leave-types/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'updateLeaveType']); Route::delete('leave-types/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'destroyLeaveType']); Route::get('holidays', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'holidays']); Route::post('holidays', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'storeHoliday']); Route::get('holidays/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'showHoliday']); Route::put('holidays/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'updateHoliday']); Route::delete('holidays/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'destroyHoliday']); Route::get('attendances', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'attendances']); Route::get('attendance-employees', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'attendanceEmployees']); Route::post('attendances', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'storeAttendance']); Route::post('attendances/import', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'importAttendance']); Route::get('payroll-employees', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'payrollEmployees']); Route::get('payrolls/preview', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'payrollPreview']); Route::post('payroll-groups', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'storePayrollGroup']); Route::post('payroll-groups/{id}/payments', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'payPayrollGroup']); Route::get('shifts', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'shifts']); Route::post('shifts', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'storeShift']); Route::get('shifts/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'showShift']); Route::put('shifts/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'updateShift']); Route::delete('shifts/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'destroyShift']); Route::get('shifts/{id}/users', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'shiftUsers']); Route::post('shifts/{id}/users', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'assignShiftUsers']); Route::get('payrolls', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'payrolls']); Route::get('payrolls/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'showPayroll']); Route::get('payroll-groups', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'payrollGroups']); Route::get('payroll-groups/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'showPayrollGroup']); Route::get('allowance-deductions', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'allowanceDeductions']); Route::post('allowance-deductions', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'storeAllowanceDeduction']); Route::put('allowance-deductions/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'updateAllowanceDeduction']); Route::delete('allowance-deductions/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'destroyAllowanceDeduction']); Route::get('sales-targets/users', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'salesTargetUsers']); Route::get('sales-targets/{userId}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'userSalesTargets']); Route::post('sales-targets/{userId}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'saveUserSalesTargets']); Route::get('todos', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'todos']); Route::post('todos', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'storeTodo']); Route::put('todos/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'updateTodo']); Route::delete('todos/{id}', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'destroyTodo']); Route::get('settings', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'settings']); Route::post('settings', [Modules\Connector\Http\Controllers\Api\V2\HrmExtendedController::class, 'updateSettings']); }); Route::get('attendance/{user_id}', [Modules\Connector\Http\Controllers\Api\V2\HrmController::class, 'attendance']); Route::post('attendance/clock-in', [Modules\Connector\Http\Controllers\Api\V2\HrmController::class, 'clockIn']); Route::post('attendance/clock-out', [Modules\Connector\Http\Controllers\Api\V2\HrmController::class, 'clockOut']); Route::get('holidays', [Modules\Connector\Http\Controllers\Api\V2\HrmController::class, 'holidays']); // CRM Route::prefix('crm')->group(function () { Route::get('dashboard', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'dashboard']); Route::apiResource('follow-ups', Modules\Connector\Http\Controllers\Api\V2\CrmController::class)->only(['index', 'store', 'show', 'update']); Route::get('leads', [Modules\Connector\Http\Controllers\Api\V2\CrmController::class, 'leads']); Route::post('leads', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'storeLead']); Route::get('leads/{id}', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'showLead']); Route::put('leads/{id}', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'updateLead']); Route::get('follow-up-resources', [Modules\Connector\Http\Controllers\Api\V2\CrmController::class, 'followUpResources']); Route::post('call-logs', [Modules\Connector\Http\Controllers\Api\V2\CrmController::class, 'callLogs']); Route::get('call-logs', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'callLogs']); Route::get('follow-up-logs', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'followUpLogs']); Route::get('campaigns', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'campaigns']); Route::post('campaigns', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'storeCampaign']); Route::get('campaigns/{id}', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'showCampaign']); Route::put('campaigns/{id}', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'updateCampaign']); Route::delete('campaigns/{id}', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'destroyCampaign']); Route::get('proposals', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'proposals']); Route::get('proposals/{id}', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'showProposal']); Route::get('proposal-templates', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'proposalTemplates']); Route::get('contact-logins', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'contactLogins']); Route::get('commissions', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'commissions']); Route::get('taxonomies/{type}', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'taxonomies']); Route::get('reports/follow-ups-by-user', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'reportFollowUpsByUser']); Route::get('reports/follow-ups-by-contact', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'reportFollowUpsByContact']); Route::get('reports/lead-to-customer', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'reportLeadToCustomer']); Route::get('settings', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'settings']); Route::post('settings', [Modules\Connector\Http\Controllers\Api\V2\CrmExtendedController::class, 'updateSettings']); Route::prefix('telemarketing')->group(function () { Route::get('queue/next', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'queueNext']); Route::post('queue/{id}/release', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'queueRelease']); Route::post('sessions/start', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'sessionStart']); Route::post('sessions/{id}/end', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'sessionEnd']); Route::get('sessions/active', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'sessionActive']); Route::get('workspace/{phone_id}', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'workspaceData']); Route::get('companies', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'companies']); Route::post('companies', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'companies']); Route::get('companies/{id}', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'showCompany']); Route::put('companies/{id}', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'updateCompany']); Route::get('companies/{id}/completion', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'companyCompletion']); Route::post('companies/{id}/contacts', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'storeCompanyContact']); Route::get('offers/catalog', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'offerCatalog']); Route::get('offers/match/{company_id}', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'matchOffers']); Route::post('offers/send', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'sendOffers']); Route::get('offers/company/{company_id}', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'companyOffers']); Route::get('dashboard/stats', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'dashboardStats']); Route::get('reports/agent-performance', [Modules\Connector\Http\Controllers\Api\V2\TelemarketingController::class, 'reportAgentPerformance']); }); }); // Restaurant Route::get('restaurant/tables', [Modules\Connector\Http\Controllers\Api\V2\RestaurantController::class, 'tables']); Route::get('restaurant/bookings', [Modules\Connector\Http\Controllers\Api\V2\RestaurantController::class, 'bookings']); // Manufacturing Route::prefix('modules/manufacturing')->group(function () { Route::get('dashboard', [Modules\Connector\Http\Controllers\Api\V2\ModuleExtendedController::class, 'manufacturingDashboard']); Route::get('resources', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'resources']); Route::get('settings', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'settings']); Route::post('settings', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'updateSettings']); Route::get('recipe-dropdown', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'recipeDropdown']); Route::get('recipe-details', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'recipeDetails']); Route::get('recipes/check/{variation_id}', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'isRecipeExist']); Route::get('recipes/by-variation/{variation_id}', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'recipeByVariation']); Route::get('recipes', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'recipes']); Route::post('recipes', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'storeRecipe']); Route::post('recipes/update-prices', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'updateRecipePrices']); Route::get('recipes/{id}', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'showRecipe']); Route::delete('recipes/{id}', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'destroyRecipe']); Route::get('report', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'manufacturingReport']); Route::get('production', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'productions']); Route::post('production', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'storeProduction']); Route::get('production/{id}/edit', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'editProduction']); Route::put('production/{id}', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'updateProduction']); Route::get('production/{id}', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'showProduction']); Route::delete('production/{id}', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'destroyProduction']); }); // Industrial Engineering / PLM Route::prefix('modules/industrial-engineering')->group(function () { Route::get('boms/{id}/tree', [Modules\IndustrialEngineering\Http\Controllers\Api\V1\IndustrialEngineeringApiController::class, 'bomTree']); Route::post('cost-scenarios', [Modules\IndustrialEngineering\Http\Controllers\Api\V1\IndustrialEngineeringApiController::class, 'buildCostScenario']); Route::post('cost-scenarios/compare', [Modules\IndustrialEngineering\Http\Controllers\Api\V1\IndustrialEngineeringApiController::class, 'compareScenarios']); Route::get('lookup', [Modules\IndustrialEngineering\Http\Controllers\Api\V1\IndustrialEngineeringApiController::class, 'lookup']); Route::get('stock/search', [Modules\IndustrialEngineering\Http\Controllers\Api\V1\IndustrialEngineeringApiController::class, 'findStock']); Route::get('installed-assets/{id}', [Modules\IndustrialEngineering\Http\Controllers\Api\V1\IndustrialEngineeringApiController::class, 'installedAsset']); }); // Module proxies Route::prefix('modules')->group(function () { Route::get('manufacturing/recipes', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'recipes']); Route::get('manufacturing/production', [Modules\Connector\Http\Controllers\Api\V2\ManufacturingExtendedController::class, 'productions']); Route::get('repair/dashboard', [Modules\Connector\Http\Controllers\Api\V2\ModuleExtendedController::class, 'repairDashboard']); Route::get('repair/jobs', [Modules\Connector\Http\Controllers\Api\V2\ModuleController::class, 'repairJobs']); Route::get('project/dashboard', [Modules\Connector\Http\Controllers\Api\V2\ModuleExtendedController::class, 'projectDashboard']); Route::prefix('project')->group(function () { Route::get('resources', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'resources']); Route::get('projects/kanban', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'projectsKanban']); Route::post('projects', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'storeProject']); Route::get('projects/{id}', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'showProject']); Route::put('projects/{id}', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'updateProject']); Route::put('projects/{id}/status', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'updateProjectStatus']); Route::get('projects/{projectId}/tasks/{id}', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'showTask']); Route::post('projects/{projectId}/tasks', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'storeTask']); Route::put('projects/{projectId}/tasks/{id}', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'updateTask']); Route::post('projects/{projectId}/tasks/{taskId}/comments', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'storeTaskComment']); Route::delete('projects/{projectId}/tasks/{taskId}/comments/{commentId}', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'destroyTaskComment']); Route::get('projects/{projectId}/time-logs', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'timeLogs']); Route::post('projects/{projectId}/time-logs', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'storeTimeLog']); Route::delete('projects/{projectId}/time-logs/{id}', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'destroyTimeLog']); Route::get('tasks/kanban', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'tasksKanban']); Route::put('tasks/{id}/status', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'updateTaskStatus']); Route::post('upload-comment-media', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'uploadCommentMedia']); Route::get('invoice-resources', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'invoiceResources']); Route::get('reports/employee-timelog', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'employeeTimeLogReport']); Route::get('reports/project-timelog', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'projectTimeLogReport']); Route::get('projects/{projectId}/invoices', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'projectInvoices']); Route::post('projects/{projectId}/invoices', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'storeProjectInvoice']); Route::put('projects/{projectId}/invoices/{id}', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'updateProjectInvoice']); Route::post('projects/{projectId}/invoices/{id}/payments', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'storeProjectInvoicePayment']); Route::get('projects/{projectId}/invoices/{id}', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'showProjectInvoice']); Route::delete('projects/{projectId}/invoices/{id}', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'destroyProjectInvoice']); Route::get('projects/{projectId}/documents', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'projectDocuments']); Route::post('projects/{projectId}/documents', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'storeProjectDocument']); Route::delete('projects/{projectId}/documents/{id}', [Modules\Connector\Http\Controllers\Api\V2\ProjectExtendedController::class, 'destroyProjectDocument']); }); Route::get('project/projects', [Modules\Connector\Http\Controllers\Api\V2\ModuleController::class, 'projects']); Route::get('project/tasks', [Modules\Connector\Http\Controllers\Api\V2\ModuleController::class, 'tasks']); Route::get('accounting/dashboard', [Modules\Connector\Http\Controllers\Api\V2\ModuleExtendedController::class, 'accountingDashboard']); Route::get('accounting/accounts', [Modules\Connector\Http\Controllers\Api\V2\ModuleController::class, 'accountingAccounts']); Route::get('assets/dashboard', [Modules\Connector\Http\Controllers\Api\V2\ModuleExtendedController::class, 'assetsDashboard']); Route::get('assets', [Modules\Connector\Http\Controllers\Api\V2\ModuleController::class, 'assets']); Route::get('inventory/dashboard', [Modules\Connector\Http\Controllers\Api\V2\ModuleExtendedController::class, 'inventoryDashboard']); Route::get('inventory/counts', [Modules\Connector\Http\Controllers\Api\V2\ModuleController::class, 'inventoryCounts']); Route::get('spreadsheets/dashboard', [Modules\Connector\Http\Controllers\Api\V2\ModuleExtendedController::class, 'spreadsheetDashboard']); Route::get('spreadsheets', [Modules\Connector\Http\Controllers\Api\V2\ModuleController::class, 'spreadsheets']); Route::get('woocommerce/settings', [Modules\Connector\Http\Controllers\Api\V2\ModuleController::class, 'woocommerceSettings']); }); // Maintenance (CMMS) Route::prefix('maintenance')->group(function () { Route::get('dashboard', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceDashboardController::class, 'index']); Route::get('calendar', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceDashboardController::class, 'calendar']); Route::get('equipment-categories', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentCategoryController::class, 'index']); Route::post('equipment-categories', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentCategoryController::class, 'store']); Route::put('equipment-categories/{category}', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentCategoryController::class, 'update']); Route::delete('equipment-categories/{category}', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentCategoryController::class, 'destroy']); Route::get('equipment', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentController::class, 'index']); Route::post('equipment', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentController::class, 'store']); Route::get('equipment/scan/{qrCode}', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentController::class, 'scan']); Route::get('equipment/{equipment}', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentController::class, 'show']); Route::put('equipment/{equipment}', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentController::class, 'update']); Route::delete('equipment/{equipment}', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentController::class, 'destroy']); Route::get('equipment/{equipment}/parts', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentPartController::class, 'index']); Route::post('equipment/{equipment}/parts', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentPartController::class, 'store']); Route::put('equipment/{equipment}/parts/{part}', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentPartController::class, 'update']); Route::delete('equipment/{equipment}/parts/{part}', [Modules\Maintenance\Http\Controllers\Api\V1\EquipmentPartController::class, 'destroy']); Route::get('production-lines', [Modules\Maintenance\Http\Controllers\Api\V1\ProductionLineController::class, 'index']); Route::post('production-lines', [Modules\Maintenance\Http\Controllers\Api\V1\ProductionLineController::class, 'store']); Route::put('production-lines/{productionLine}', [Modules\Maintenance\Http\Controllers\Api\V1\ProductionLineController::class, 'update']); Route::delete('production-lines/{productionLine}', [Modules\Maintenance\Http\Controllers\Api\V1\ProductionLineController::class, 'destroy']); Route::get('part-catalogs', [Modules\Maintenance\Http\Controllers\Api\V1\PartCatalogController::class, 'index']); Route::post('part-catalogs', [Modules\Maintenance\Http\Controllers\Api\V1\PartCatalogController::class, 'store']); Route::get('part-catalogs/{partCatalog}', [Modules\Maintenance\Http\Controllers\Api\V1\PartCatalogController::class, 'show']); Route::put('part-catalogs/{partCatalog}', [Modules\Maintenance\Http\Controllers\Api\V1\PartCatalogController::class, 'update']); Route::delete('part-catalogs/{partCatalog}', [Modules\Maintenance\Http\Controllers\Api\V1\PartCatalogController::class, 'destroy']); Route::get('service-providers', [Modules\Maintenance\Http\Controllers\Api\V1\ServiceProviderController::class, 'index']); Route::post('service-providers', [Modules\Maintenance\Http\Controllers\Api\V1\ServiceProviderController::class, 'store']); Route::put('service-providers/{serviceProvider}', [Modules\Maintenance\Http\Controllers\Api\V1\ServiceProviderController::class, 'update']); Route::delete('service-providers/{serviceProvider}', [Modules\Maintenance\Http\Controllers\Api\V1\ServiceProviderController::class, 'destroy']); Route::get('asset-documents', [Modules\Maintenance\Http\Controllers\Api\V1\AssetDocumentController::class, 'index']); Route::post('asset-documents', [Modules\Maintenance\Http\Controllers\Api\V1\AssetDocumentController::class, 'store']); Route::delete('asset-documents/{assetDocument}', [Modules\Maintenance\Http\Controllers\Api\V1\AssetDocumentController::class, 'destroy']); Route::get('inspection-visits', [Modules\Maintenance\Http\Controllers\Api\V1\InspectionVisitController::class, 'index']); Route::post('inspection-visits', [Modules\Maintenance\Http\Controllers\Api\V1\InspectionVisitController::class, 'store']); Route::get('inspection-visits/{inspectionVisit}', [Modules\Maintenance\Http\Controllers\Api\V1\InspectionVisitController::class, 'show']); Route::delete('inspection-visits/{inspectionVisit}', [Modules\Maintenance\Http\Controllers\Api\V1\InspectionVisitController::class, 'destroy']); Route::get('service-records', [Modules\Maintenance\Http\Controllers\Api\V1\ServiceRecordController::class, 'index']); Route::post('service-records', [Modules\Maintenance\Http\Controllers\Api\V1\ServiceRecordController::class, 'store']); Route::get('service-records/{serviceRecord}', [Modules\Maintenance\Http\Controllers\Api\V1\ServiceRecordController::class, 'show']); Route::delete('service-records/{serviceRecord}', [Modules\Maintenance\Http\Controllers\Api\V1\ServiceRecordController::class, 'destroy']); Route::get('part-replacements', [Modules\Maintenance\Http\Controllers\Api\V1\PartReplacementController::class, 'index']); Route::post('part-replacements', [Modules\Maintenance\Http\Controllers\Api\V1\PartReplacementController::class, 'store']); Route::delete('part-replacements/{partReplacement}', [Modules\Maintenance\Http\Controllers\Api\V1\PartReplacementController::class, 'destroy']); Route::get('preventive-schedules', [Modules\Maintenance\Http\Controllers\Api\V1\PreventiveScheduleController::class, 'index']); Route::post('preventive-schedules', [Modules\Maintenance\Http\Controllers\Api\V1\PreventiveScheduleController::class, 'store']); Route::put('preventive-schedules/{schedule}', [Modules\Maintenance\Http\Controllers\Api\V1\PreventiveScheduleController::class, 'update']); Route::delete('preventive-schedules/{schedule}', [Modules\Maintenance\Http\Controllers\Api\V1\PreventiveScheduleController::class, 'destroy']); Route::get('overhauls', [Modules\Maintenance\Http\Controllers\Api\V1\OverhaulController::class, 'index']); Route::post('overhauls', [Modules\Maintenance\Http\Controllers\Api\V1\OverhaulController::class, 'store']); Route::get('overhauls/{overhaul}', [Modules\Maintenance\Http\Controllers\Api\V1\OverhaulController::class, 'show']); Route::put('overhauls/{overhaul}', [Modules\Maintenance\Http\Controllers\Api\V1\OverhaulController::class, 'update']); Route::delete('overhauls/{overhaul}', [Modules\Maintenance\Http\Controllers\Api\V1\OverhaulController::class, 'destroy']); Route::get('work-orders', [Modules\Maintenance\Http\Controllers\Api\V1\WorkOrderController::class, 'index']); Route::post('work-orders', [Modules\Maintenance\Http\Controllers\Api\V1\WorkOrderController::class, 'store']); Route::get('work-orders/{workOrder}', [Modules\Maintenance\Http\Controllers\Api\V1\WorkOrderController::class, 'show']); Route::put('work-orders/{workOrder}', [Modules\Maintenance\Http\Controllers\Api\V1\WorkOrderController::class, 'update']); Route::post('work-orders/{workOrder}/consume-part', [Modules\Maintenance\Http\Controllers\Api\V1\WorkOrderController::class, 'consumePart']); Route::delete('work-orders/{workOrder}', [Modules\Maintenance\Http\Controllers\Api\V1\WorkOrderController::class, 'destroy']); Route::get('spare-parts', [Modules\Maintenance\Http\Controllers\Api\V1\SparePartController::class, 'index']); Route::post('spare-parts', [Modules\Maintenance\Http\Controllers\Api\V1\SparePartController::class, 'store']); Route::put('spare-parts/{sparePart}', [Modules\Maintenance\Http\Controllers\Api\V1\SparePartController::class, 'update']); Route::delete('spare-parts/{sparePart}', [Modules\Maintenance\Http\Controllers\Api\V1\SparePartController::class, 'destroy']); Route::get('failure-reports', [Modules\Maintenance\Http\Controllers\Api\V1\FailureReportController::class, 'index']); Route::post('failure-reports', [Modules\Maintenance\Http\Controllers\Api\V1\FailureReportController::class, 'store']); Route::put('failure-reports/{failureReport}', [Modules\Maintenance\Http\Controllers\Api\V1\FailureReportController::class, 'update']); Route::delete('failure-reports/{failureReport}', [Modules\Maintenance\Http\Controllers\Api\V1\FailureReportController::class, 'destroy']); Route::get('checklists', [Modules\Maintenance\Http\Controllers\Api\V1\ChecklistController::class, 'indexTemplates']); Route::post('checklists', [Modules\Maintenance\Http\Controllers\Api\V1\ChecklistController::class, 'storeTemplate']); Route::get('checklists/{checklist}', [Modules\Maintenance\Http\Controllers\Api\V1\ChecklistController::class, 'showTemplate']); Route::put('checklists/{checklist}', [Modules\Maintenance\Http\Controllers\Api\V1\ChecklistController::class, 'updateTemplate']); Route::delete('checklists/{checklist}', [Modules\Maintenance\Http\Controllers\Api\V1\ChecklistController::class, 'destroyTemplate']); Route::post('checklists/responses', [Modules\Maintenance\Http\Controllers\Api\V1\ChecklistController::class, 'submitResponse']); Route::get('reports/equipment-cost', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceReportController::class, 'equipmentCost']); Route::get('reports/downtime', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceReportController::class, 'downtime']); Route::get('reports/technician-performance', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceReportController::class, 'technicianPerformance']); Route::get('reports/spare-parts-consumption', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceReportController::class, 'sparePartsConsumption']); Route::get('reports/monthly', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceReportController::class, 'monthly']); Route::get('reports/failure-analysis', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceReportController::class, 'failureAnalysis']); Route::get('equipment/{equipmentId}/history', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceReportController::class, 'history']); Route::get('notifications', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceNotificationController::class, 'index']); Route::get('notifications/unread', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceNotificationController::class, 'unread']); Route::post('notifications/{notification}/read', [Modules\Maintenance\Http\Controllers\Api\V1\MaintenanceNotificationController::class, 'markRead']); Route::get('iot', [Modules\Maintenance\Http\Controllers\Api\V1\IotController::class, 'index']); Route::post('iot/ingest', [Modules\Maintenance\Http\Controllers\Api\V1\IotController::class, 'ingest']); }); // Enterprise modules (QMS, MES, SCM, APS, Integration Hub, CPQ, WMS) Route::prefix('enterprise')->group(function () { Route::get('quality/dashboard', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'qualityDashboard']); Route::get('quality/ncr', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'qualityNcrIndex']); Route::post('quality/ncr', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'storeQualityNcr']); Route::get('shop-floor/dashboard', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'shopFloorDashboard']); Route::get('shop-floor/oee', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'shopFloorOee']); Route::post('shop-floor/production-events', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'storeProductionEvent']); Route::get('supply-chain/dashboard', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'supplyChainDashboard']); Route::get('supply-chain/scorecards', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'supplyChainScorecards']); Route::post('supply-chain/rfq/{id}/respond', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'submitRfqResponse']); Route::get('advanced-planning/dashboard', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'advancedPlanningDashboard']); Route::get('integration-hub/dashboard', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'integrationHubDashboard']); Route::get('cpq/configurations', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'cpqIndex']); Route::get('wms/dashboard', [Modules\Connector\Http\Controllers\Api\V2\EnterpriseModulesController::class, 'wmsDashboard']); }); // Superadmin Route::prefix('superadmin')->group(function () { Route::get('dashboard', [Modules\Connector\Http\Controllers\Api\V2\ModuleExtendedController::class, 'superadminDashboard']); Route::get('stats', [Modules\Connector\Http\Controllers\Api\V2\ModuleExtendedController::class, 'superadminStats']); Route::get('subscription', [Modules\Connector\Http\Controllers\Api\V2\SuperadminController::class, 'subscription']); Route::get('packages', [Modules\Connector\Http\Controllers\Api\V2\SuperadminController::class, 'packages']); Route::get('businesses', [Modules\Connector\Http\Controllers\Api\V2\SuperadminController::class, 'businesses']); }); // Public catalogue Route::get('catalogue/{business_id}/{location_id}', [Modules\Connector\Http\Controllers\Api\V2\CatalogueController::class, 'show']); });