Files
SGF/routes/web.php
T

120 lines
13 KiB
PHP

<?php
use Illuminate\Support\Facades\Route;
use App\Modules\Identity\Http\RequireCompanyContext;
use App\Modules\Identity\Http\IdentityController;
use App\Modules\Identity\Http\RequireValidSession;
if (app()->environment('browser-testing')) {
require base_path('scripts/product-demo-entry.php');
}
Route::get('/', function () {
return view('app');
});
Route::get('/api/session', [IdentityController::class, 'session']);
// Read-only diagnostic for the explicitly isolated manual proof; no business data or secrets.
Route::get('/api/industrial-budget-proof/environment', function () {
abort_unless(app()->environment('browser-testing'),404);
\App\Modules\Industry\IndustrialBudgets::guard();
$db=\Illuminate\Support\Facades\DB::selectOne('SELECT current_database() AS database,current_user AS role,inet_server_port() AS port');
abort_unless($db->database==='sgf_tempo_test'&&$db->role==='sgf_test_runner'&&(int)$db->port===55432,403);
return response()->json(['environment'=>app()->environment(),'database'=>$db->database,'role'=>$db->role,'database_port'=>(int)$db->port,'session_driver'=>config('session.driver'),'session_cookie'=>config('session.cookie'),'cache_store'=>config('cache.default'),'synthetic_only'=>true])->header('Cache-Control','no-store, private');
});
Route::post('/api/login', [IdentityController::class, 'login']);
Route::middleware(['auth', RequireValidSession::class])->group(function (): void {
Route::post('/api/logout', [IdentityController::class, 'logout']);
Route::post('/api/context', [IdentityController::class, 'select']);
Route::middleware(RequireCompanyContext::class)->group(function (): void {
Route::get('/api/module-records', [\App\Modules\Identity\Http\ModuleRecordsController::class,'index']);
Route::post('/api/module-records/preview', [\App\Modules\Identity\Http\ModuleRecordsController::class,'preview']);
Route::post('/api/module-records', [\App\Modules\Identity\Http\ModuleRecordsController::class,'associate']);
Route::get('/supplier-payables', [\App\Modules\Purchasing\SupplierPayablesController::class,'page']);
Route::get('/supplier-payments', [\App\Modules\Purchasing\SupplierPaymentsController::class,'page']);
Route::get('/api/supplier-payments', [\App\Modules\Purchasing\SupplierPaymentsController::class,'index']);
Route::post('/api/supplier-payments/{action}', [\App\Modules\Purchasing\SupplierPaymentsController::class,'command'])->whereIn('action',['payment-prepare','payment-decide','allocation-prepare','allocation-decide','reversal-prepare','reversal-confirm']);
Route::get('/api/supplier-payables', [\App\Modules\Purchasing\SupplierPayablesController::class,'index']);
Route::post('/api/supplier-payables/{action}', [\App\Modules\Purchasing\SupplierPayablesController::class,'command'])->whereIn('action',['prepare','validate']);
Route::get('/api/purchasing-budget', [\App\Modules\Purchasing\BudgetController::class, 'index']);
Route::post('/api/purchasing-budget/{action}', [\App\Modules\Purchasing\BudgetController::class, 'command'])->whereIn('action', ['create', 'approve', 'movement', 'consume', 'reinforcement', 'review']);
Route::get('/api/workshop-corrections', [\App\Modules\Workshop\Http\WorkshopCorrectionsController::class,'index']);
Route::post('/api/workshop-corrections/{id}/requests', [\App\Modules\Workshop\Http\WorkshopCorrectionsController::class,'request'])->whereNumber('id');
Route::post('/api/workshop-corrections/{id}/reviews', [\App\Modules\Workshop\Http\WorkshopCorrectionsController::class,'review'])->whereNumber('id');
Route::post('/api/workshop-corrections/{id}/applications', [\App\Modules\Workshop\Http\WorkshopCorrectionsController::class,'apply'])->whereNumber('id');
Route::get('/api/workshop-billing', [\App\Modules\Workshop\Http\WorkshopBillingController::class,'index']);
Route::post('/api/workshop-billing/orders/{id}/proposals', [\App\Modules\Workshop\Http\WorkshopBillingController::class,'prepare'])->whereNumber('id');
Route::post('/api/workshop-billing/orders/{id}/reviews', [\App\Modules\Workshop\Http\WorkshopBillingController::class,'review'])->whereNumber('id');
Route::post('/api/workshop-billing/orders/{id}/generations', [\App\Modules\Workshop\Http\WorkshopBillingController::class,'generate'])->whereNumber('id');
Route::get('/api/workshop', [\App\Modules\Workshop\Http\WorkshopController::class,'index']);
Route::get('/api/direct-costs', [\App\Modules\Workshop\Http\DirectCostsController::class,'index']);
Route::get('/api/industrial-budgets', [\App\Modules\Industry\Http\IndustrialBudgetsController::class,'index']);
Route::post('/api/industrial-budgets/lots/{id}/proposals', [\App\Modules\Industry\Http\IndustrialBudgetsController::class,'propose'])->whereNumber('id');
Route::post('/api/industrial-budgets/lots/{id}/decisions', [\App\Modules\Industry\Http\IndustrialBudgetsController::class,'decide'])->whereNumber('id');
Route::post('/api/industrial-budgets/lots/{id}/comparisons', [\App\Modules\Industry\Http\IndustrialBudgetsController::class,'compare'])->whereNumber('id');
Route::get('/api/industrial-costs', [\App\Modules\Industry\Http\IndustrialCostsController::class,'index']);
Route::post('/api/industrial-costs/lots', [\App\Modules\Industry\Http\IndustrialCostsController::class,'open']);
Route::post('/api/industrial-costs/lots/{id}/inputs', [\App\Modules\Industry\Http\IndustrialCostsController::class,'input'])->whereNumber('id');
Route::post('/api/industrial-costs/lots/{id}/calculations', [\App\Modules\Industry\Http\IndustrialCostsController::class,'calculate'])->whereNumber('id');
Route::post('/api/industrial-costs/lots/{id}/decisions', [\App\Modules\Industry\Http\IndustrialCostsController::class,'decide'])->whereNumber('id');
Route::post('/api/direct-costs/orders/{id}/rates', [\App\Modules\Workshop\Http\DirectCostsController::class,'rate'])->whereNumber('id');
Route::post('/api/direct-costs/orders/{id}/calculations', [\App\Modules\Workshop\Http\DirectCostsController::class,'calculate'])->whereNumber('id');
Route::post('/api/direct-costs/orders/{id}/decisions', [\App\Modules\Workshop\Http\DirectCostsController::class,'decide'])->whereNumber('id');
Route::post('/api/workshop/orders', [\App\Modules\Workshop\Http\WorkshopController::class,'open']);
Route::post('/api/workshop/orders/{id}/entries', [\App\Modules\Workshop\Http\WorkshopController::class,'record'])->whereNumber('id');
Route::post('/api/workshop/entries/{id}/verification', [\App\Modules\Workshop\Http\WorkshopController::class,'verify'])->whereNumber('id');
Route::get('/api/service-receivables', [\App\Modules\Services\Http\ServiceReceivablesController::class,'index']);
Route::post('/api/service-receivables/proposals', [\App\Modules\Services\Http\ServiceReceivablesController::class,'propose']);
Route::post('/api/service-receivables/{id}/decision', [\App\Modules\Services\Http\ServiceReceivablesController::class,'decide'])->whereNumber('id');
Route::post('/api/service-receivables/{id}/allocate', [\App\Modules\Services\Http\ServiceReceivablesController::class,'allocate'])->whereNumber('id');
Route::get('/api/service-invoices', [\App\Modules\Services\Http\ServiceInvoiceController::class,'index']);
Route::post('/api/service-invoices/proposals', [\App\Modules\Services\Http\ServiceInvoiceController::class,'propose']);
Route::post('/api/service-invoices/proposals/{id}/decision', [\App\Modules\Services\Http\ServiceInvoiceController::class,'decide'])->whereNumber('id');
Route::post('/api/service-invoices/drafts/{id}/review', [\App\Modules\Services\Http\ServiceInvoiceController::class,'review'])->whereNumber('id');
Route::post('/api/service-invoices/drafts/{id}/issue', [\App\Modules\Services\Http\ServiceInvoiceController::class,'issue'])->whereNumber('id');
Route::get('/api/service-invoices/{id}', [\App\Modules\Services\Http\ServiceInvoiceController::class,'show'])->whereNumber('id');
Route::get('/api/service-invoices/{id}/pdf', [\App\Modules\Services\Http\ServiceInvoiceController::class,'pdf'])->whereNumber('id');
Route::post('/api/service-invoices/{id}/corrections', [\App\Modules\Services\Http\ServiceInvoiceController::class,'correction'])->whereNumber('id');
Route::get('/api/service-fiscal', [\App\Modules\Services\Http\ServiceFiscalController::class,'index']);
Route::post('/api/service-fiscal/proposals', [\App\Modules\Services\Http\ServiceFiscalController::class,'propose']);
Route::post('/api/service-fiscal/proposals/{id}/decision', [\App\Modules\Services\Http\ServiceFiscalController::class,'decide'])->whereNumber('id');
Route::post('/api/service-fiscal/drafts/{id}/calculate', [\App\Modules\Services\Http\ServiceFiscalController::class,'calculate'])->whereNumber('id');
Route::get('/api/service-fiscal/drafts/{id}/history', [\App\Modules\Services\Http\ServiceFiscalController::class,'history'])->whereNumber('id');
Route::get('/api/catalogue-accounting', [\App\Modules\Services\Http\CatalogueAccountingController::class,'index']);
Route::post('/api/catalogue-accounting/proposals', [\App\Modules\Services\Http\CatalogueAccountingController::class,'propose']);
Route::post('/api/catalogue-accounting/proposals/{id}/submit', [\App\Modules\Services\Http\CatalogueAccountingController::class,'submit'])->whereNumber('id');
Route::post('/api/catalogue-accounting/proposals/{id}/decision', [\App\Modules\Services\Http\CatalogueAccountingController::class,'decide'])->whereNumber('id');
Route::get('/api/catalogue-accounting/services/{service}/resolve', [\App\Modules\Services\Http\CatalogueAccountingController::class,'resolve'])->whereNumber('service');
Route::post('/api/catalogue-accounting/resolutions', [\App\Modules\Services\Http\CatalogueAccountingController::class,'capture']);
Route::get('/api/catalogue-accounting/history/{area}/{record}', [\App\Modules\Services\Http\CatalogueAccountingController::class,'history'])->whereNumber('record');
Route::post('/api/service-calculations/{id}', [\App\Modules\Services\Http\DocumentPreviewController::class, 'calculate'])->whereNumber('id');
Route::get('/api/document-preview/model', [\App\Modules\Services\Http\DocumentPreviewController::class, 'model']);
Route::patch('/api/document-preview/model', [\App\Modules\Services\Http\DocumentPreviewController::class, 'configure']);
Route::get('/api/document-preview/draft/{id}', [\App\Modules\Services\Http\DocumentPreviewController::class, 'draft'])->whereNumber('id');
Route::get('/api/document-preview/history/{id}', [\App\Modules\Services\Http\DocumentPreviewController::class, 'historical'])->whereNumber('id');
Route::get('/api/document-preview/{mode}/{id}/revision', [\App\Modules\Services\Http\DocumentPreviewController::class, 'revision'])->whereNumber('id');
Route::get('/api/document-preparation/{kind}', [\App\Modules\Services\Http\DocumentPreparationController::class, 'index']);
Route::get('/api/document-preparation/{kind}/{id}', [\App\Modules\Services\Http\DocumentPreparationController::class, 'show'])->whereNumber('id');
Route::patch('/api/document-preparation/{kind}/{id}', [\App\Modules\Services\Http\DocumentPreparationController::class, 'save'])->whereNumber('id');
Route::post('/api/b1/billing-drafts/{id}/confirm-internal', [\App\Modules\Services\Http\ServiceController::class, 'confirmInternal'])->whereNumber('id');
Route::prefix('api/a/{area}')->group(function (): void {
$controller = \App\Modules\Services\Http\ServiceController::class;
Route::get('access', [$controller, 'accesses']);
Route::post('access', [$controller, 'changeAccess']);
Route::get('', [$controller, 'index']);
Route::post('', [$controller, 'create']);
Route::get('{id}', [$controller, 'show'])->whereNumber('id');
Route::patch('{id}', [$controller, 'update'])->whereNumber('id');
});
Route::get('/api/context', fn (\App\Shared\Context\CompanyContext $context) => response()->json($context->identifiers() + ['unit_id' => $context->unitId()]));
Route::patch('/api/companies/{company}', [IdentityController::class, 'renameCompany']);
Route::get('/api/companies/{company}', [IdentityController::class, 'company']);
Route::get('/api/units/{unit}', [IdentityController::class, 'unit']);
Route::patch('/api/units/{unit}', [IdentityController::class, 'renameUnit']);
Route::post('/api/units', [IdentityController::class, 'createUnit']);
Route::get('/api/accesses', [IdentityController::class, 'accesses']);
Route::post('/api/accesses', [IdentityController::class, 'grant']);
Route::post('/api/accesses/revoke', [IdentityController::class, 'revoke']);
});
});