| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- <?php
- use App\Http\Controllers\AreaController;
- use App\Http\Controllers\ClearDataController;
- use App\Http\Controllers\YearDataController;
- use App\Http\Controllers\ContractController;
- use App\Http\Controllers\FilterController;
- use App\Http\Controllers\ImportController;
- use App\Http\Controllers\MafOrderController;
- use App\Http\Controllers\OrderController;
- use App\Http\Controllers\PricingCodeController;
- use App\Http\Controllers\ProductController;
- use App\Http\Controllers\ProductSKUController;
- use App\Http\Controllers\ReclamationController;
- use App\Http\Controllers\ReportController;
- use App\Http\Controllers\ResponsibleController;
- use App\Http\Controllers\ScheduleController;
- use App\Http\Controllers\SparePartController;
- use App\Http\Controllers\SparePartInventoryController;
- use App\Http\Controllers\SparePartOrderController;
- use App\Http\Controllers\SparePartReservationController;
- use App\Http\Controllers\UserController;
- use App\Models\PricingCode;
- use App\Models\Role;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Route;
- Route::get('/', function () {
- return redirect()->route('home');
- });
- Auth::routes(['register' => false, 'reset' => false, 'verify' => false, 'confirm' => false]);
- Route::post('keep-token-alive', function() {
- return 'Session extended.';
- });
- Route::get('/home', function () {
- return redirect()->route('order.index');
- })->name('home');
- Route::middleware('auth:web')->group(function () {
- // set current year for display
- Route::get('set-year', function (Request $request) {
- if ($request->has('year')) {
- session(['year' => $request->year]);
- }
- return redirect()->route('order.index');
- })->name('set-year');
- // admin routes
- Route::middleware('role:' . Role::ADMIN)->prefix('admin')->group(function (){
- Route::prefix('users')->group(function (){
- Route::get('', [UserController::class, 'index'])->name('user.index');
- Route::get('create', [UserController::class, 'create'])->name('user.create');
- Route::get('{user}', [UserController::class, 'show'])->name('user.show');
- Route::post('', [UserController::class, 'store'])->name('user.store');
- Route::put('{user}', [UserController::class, 'update'])->name('user.update');
- Route::delete('{user}', [UserController::class, 'destroy'])->name('user.destroy');
- Route::post('undelete/{user}', [UserController::class, 'undelete'])->name('user.undelete');
- });
- Route::prefix('import')->group(function (){
- Route::get('', [ImportController::class, 'index'])->name('import.index');
- Route::get('{import}', [ImportController::class, 'show'])->name('import.show');
- Route::post('', [ImportController::class, 'store'])->name('import.create');
- });
- Route::prefix('clear-data')->group(function (){
- Route::get('', [ClearDataController::class, 'index'])->name('clear-data.index');
- Route::get('stats', [ClearDataController::class, 'stats'])->name('clear-data.stats');
- Route::delete('', [ClearDataController::class, 'destroy'])->name('clear-data.destroy');
- });
- Route::prefix('year-data')->group(function (){
- Route::get('', [YearDataController::class, 'index'])->name('year-data.index');
- Route::get('stats', [YearDataController::class, 'stats'])->name('year-data.stats');
- Route::post('export', [YearDataController::class, 'export'])->name('year-data.export');
- Route::post('import', [YearDataController::class, 'import'])->name('year-data.import');
- Route::get('download/{file}', [YearDataController::class, 'download'])->name('year-data.download');
- });
- });
- // profile
- Route::get('profile', [UserController::class, 'profile'])->name('user.profile');
- Route::post('profile/store', [UserController::class, 'storeProfile'])->name('profile.store');
- Route::delete('profile', [UserController::class, 'deleteProfile'])->name('profile.delete');
- Route::get('get-filters', [FilterController::class, 'getFilters'])->name('getFilters');
- Route::middleware('role:admin,manager')->group(function () {
- Route::prefix('responsibles')->group(function (){
- Route::get('', [ResponsibleController::class, 'index'])->name('responsible.index');
- Route::get('{responsible}', [ResponsibleController::class, 'show'])->name('responsible.show');
- Route::post('store', [ResponsibleController::class, 'store'])->name('responsible.store');
- Route::post('update/{responsible}', [ResponsibleController::class, 'update'])->name('responsible.update');
- Route::delete('delete/{responsible}', [ResponsibleController::class, 'destroy'])->name('responsible.destroy');
- });
- // catalog
- Route::get('catalog', [ProductController::class, 'index'])->name('catalog.index');
- Route::get('catalog/{product}', [ProductController::class, 'show'])->name('catalog.show')->where('product', '[0-9]+') ;
- // contracts
- Route::get('contract', [ContractController::class, 'index'])->name('contract.index');
- Route::get('contract/create', [ContractController::class, 'create'])->name('contract.create');
- Route::get('contract/{contract}', [ContractController::class, 'show'])->name('contract.show');
- Route::post('contract', [ContractController::class, 'store'])->name('contract.store');
- Route::post('contract/{contract}', [ContractController::class, 'update'])->name('contract.update');
- Route::delete('contract/{contract}', [ContractController::class, 'delete'])->name('contract.delete');
- // orders
- Route::get('order/edit/{order}', [OrderController::class, 'edit'])->name('order.edit');
- Route::post('order/store', [OrderController::class, 'store'])->name('order.store');
- Route::post('order/update', [OrderController::class, 'store'])->name('order.update');
- Route::delete('order/delete/{order}', [OrderController::class, 'destroy'])->name('order.destroy')->middleware('role:' . Role::ADMIN);
- Route::post('order/{order}/upload-document', [OrderController::class, 'uploadDocument'])->name('order.upload-document');
- Route::post('order/{order}/upload-statement', [OrderController::class, 'uploadStatement'])->name('order.upload-statement');
- Route::post('catalog/{product}/upload-certificate', [ProductController::class, 'uploadCertificate'])->name('catalog.upload-certificate');
- Route::post('product_sku/{product_sku}/upload-passport', [ProductSKUController::class, 'uploadPassport'])->name('product-sku.upload-passport');
- Route::get('order/generate-installation-pack/{order}', [OrderController::class, 'generateInstallationPack'])->name('order.generate-installation-pack');
- Route::get('order/generate-handover-pack/{order}', [OrderController::class, 'generateHandoverPack'])->name('order.generate-handover-pack');
- Route::get('reclamation/generate-reclamation-pack/{reclamation}', [ReclamationController::class, 'generateReclamationPack'])->name('order.generate-reclamation-pack');
- Route::get('reclamation/generate-photos-before-pack/{reclamation}', [ReclamationController::class, 'generatePhotosBeforePack'])->name('reclamation.generate-photos-before-pack');
- Route::get('reclamation/generate-photos-after-pack/{reclamation}', [ReclamationController::class, 'generatePhotosAfterPack'])->name('reclamation.generate-photos-after-pack');
- // Склад (МАФ)
- Route::get('product_sku', [ProductSKUController::class, 'index'])->name('product_sku.index');
- Route::get('product_sku/{product_sku}', [ProductSKUController::class, 'show'])->name('product_sku.show');
- Route::post('product_sku/update/{product_sku}', [ProductSKUController::class, 'update'])->name('product_sku.update');
- // рекламации
- Route::post('reclamations/create/{order}', [ReclamationController::class, 'create'])->name('reclamations.create');
- Route::post('reclamations/update/{reclamation}', [ReclamationController::class, 'update'])->name('reclamations.update');
- Route::post('reclamations/{reclamation}/upload-document', [ReclamationController::class, 'uploadDocument'])->name('reclamations.upload-document');
- Route::post('reclamations/{reclamation}/upload-act', [ReclamationController::class, 'uploadAct'])->name('reclamations.upload-act');
- Route::post('reclamations/{reclamation}/update-details', [ReclamationController::class, 'updateDetails'])->name('reclamations.update-details');
- Route::post('reclamations/{reclamation}/update-spare-parts', [ReclamationController::class, 'updateSpareParts'])->name('reclamations.update-spare-parts');
- Route::delete('reclamations/{reclamation}', [ReclamationController::class, 'delete'])->name('reclamations.delete')->middleware('role:' . Role::ADMIN);
- Route::get('reports', [ReportController::class, 'index'])->name('reports.index');
- });
- // orders for all
- Route::get('order', [OrderController::class, 'index'])->name('order.index');
- Route::get('order/show/{order}', [OrderController::class, 'show'])->name('order.show');
- Route::post('order/{order}/upload-photo', [OrderController::class, 'uploadPhoto'])->name('order.upload-photo');
- Route::get('order/generate-photos-pack/{order}', [OrderController::class, 'generatePhotosPack'])->name('order.generate-photos-pack');
- Route::middleware('role:' . Role::ADMIN)->group(function () {
- Route::get('catalog/create', [ProductController::class, 'create'])->name('catalog.create');
- Route::post('catalog', [ProductController::class, 'store'])->name('catalog.store');
- Route::post('catalog/{product}', [ProductController::class, 'update'])->name('catalog.update');
- Route::delete('catalog/{product}', [ProductController::class, 'delete'])->name('catalog.delete');
- Route::post('catalog-export', [ProductController::class, 'export'])->name('catalog.export');
- Route::post('mafs-import', [ProductSKUController::class, 'importMaf'])->name('mafs.import');
- Route::post('mafs-export', [ProductSKUController::class, 'exportMaf'])->name('mafs.export');
- // Склад заказы МАФ
- Route::get('maf_orders', [MafOrderController::class, 'index'])->name('maf_order.index');
- Route::get('maf_orders/{maf_order}', [MafOrderController::class, 'show'])->name('maf_order.show');
- Route::post('maf_orders/store', [MafOrderController::class, 'store'])->name('maf_order.store');
- Route::post('maf_orders/update/{maf_order}', [MafOrderController::class, 'update'])->name('maf_order.update');
- Route::delete('maf_orders/delete/{maf_order}', [MafOrderController::class, 'destroy'])->name('maf_order.delete');
- Route::post('maf_orders/set_in_stock/{maf_order}', [MafOrderController::class, 'setInStock'])->name('maf_order.set_in_stock');
- // график
- Route::post('schedule/create_from_order', [ScheduleController::class, 'createFromOrder'])->name('schedule.create-from-order');
- Route::post('schedule/create_from_reclamation', [ScheduleController::class, 'createFromReclamation'])->name('schedule.create-from-reclamation');
- Route::post('schedule/update', [ScheduleController::class, 'update'])->name('schedule.update');
- Route::post('schedule/export', [ScheduleController::class, 'export'])->name('schedule.export');
- Route::delete('schedule/delete/{schedule}', [ScheduleController::class, 'delete'])->name('schedule.delete');
- Route::get('order/create', [OrderController::class, 'create'])->name('order.create');
- Route::post('order/export', [OrderController::class, 'export'])->name('order.export');
- Route::post('order/export-one/{order}', [OrderController::class, 'exportOne'])->name('order.export-one');
- Route::get('order/{order}/get-maf', [OrderController::class, 'getMafToOrder'])->name('order.get-maf');
- Route::get('order/revert-maf/{order}', [OrderController::class, 'revertMaf'])->name('order.revert-maf');
- Route::post('order/move-maf', [OrderController::class, 'moveMaf'])->name('order.move-maf');
- Route::post('order/create-ttn', [OrderController::class, 'createTtn'])->name('order.create-ttn');
- Route::delete('order/delete-photo/{order}/{file}', [OrderController::class, 'deletePhoto'])->name('order.delete-photo');
- Route::delete('order/delete-document/{order}/{file}', [OrderController::class, 'deleteDocument'])->name('order.delete-document');
- Route::delete('order/delete-statement/{order}/{file}', [OrderController::class, 'deleteStatement'])->name('order.delete-statement');
- Route::delete('order/delete-all-photos/{order}', [OrderController::class, 'deleteAllPhotos'])->name('order.delete-all-photos');
- Route::delete('order/delete-all-documents/{order}', [OrderController::class, 'deleteAllDocuments'])->name('order.delete-all-documents');
- Route::delete('order/delete-all-statements/{order}', [OrderController::class, 'deleteAllStatements'])->name('order.delete-all-statements');
- Route::delete('catalog/delete-certificate/{product}/{file}', [ProductController::class, 'deleteCertificate'])->name('catalog.delete-certificate');
- Route::delete('product_sku/delete-passport/{product_sku}/{file}', [ProductSKUController::class, 'deletePassport'])->name('product-sku.delete-passport');
- Route::delete('reclamations/delete-photo-before/{reclamation}/{file}', [ReclamationController::class, 'deletePhotoBefore'])->name('reclamations.delete-photo-before');
- Route::delete('reclamations/delete-photo-after/{reclamation}/{file}', [ReclamationController::class, 'deletePhotoAfter'])->name('reclamations.delete-photo-after');
- Route::delete('reclamations/delete-document/{reclamation}/{file}', [ReclamationController::class, 'deleteDocument'])->name('reclamations.delete-document');
- Route::delete('reclamations/delete-act/{reclamation}/{file}', [ReclamationController::class, 'deleteAct'])->name('reclamations.delete-act');
- });
- Route::get('reclamations', [ReclamationController::class, 'index'])->name('reclamations.index');
- Route::get('reclamations/show/{reclamation}', [ReclamationController::class, 'show'])->name('reclamations.show');
- Route::post('reclamations/{reclamation}/upload-photo-before', [ReclamationController::class, 'uploadPhotoBefore'])->name('reclamations.upload-photo-before');
- Route::post('reclamations/{reclamation}/upload-photo-after', [ReclamationController::class, 'uploadPhotoAfter'])->name('reclamations.upload-photo-after');
- Route::get('schedule', [ScheduleController::class, 'index'])->name('schedule.index');
- // ajax search products
- Route::get('product/search', [ProductController::class, 'search'])->name('product.search');
- // ajax search products
- Route::get('order-search', [OrderController::class, 'search'])->name('order.search');
- // ajax get areas by district
- Route::get('areas/{district_id?}', [AreaController::class, 'ajaxGetAreasByDistrict'])->name('area.ajax-get-areas-by-district');
- // Каталог запчастей
- Route::prefix('spare-parts')->name('spare_parts.')->group(function () {
- Route::get('/', [SparePartController::class, 'index'])->name('index');
- Route::get('/help', [SparePartController::class, 'help'])->name('help');
- Route::get('/search', [SparePartController::class, 'search'])->name('search');
- Route::get('/create', [SparePartController::class, 'create'])->name('create')->middleware('role:admin');
- Route::get('/{sparePart}', [SparePartController::class, 'show'])->name('show');
- Route::post('/', [SparePartController::class, 'store'])->name('store')->middleware('role:admin');
- Route::put('/{sparePart}', [SparePartController::class, 'update'])->name('update')->middleware('role:admin');
- Route::delete('/{sparePart}', [SparePartController::class, 'destroy'])->name('destroy')->middleware('role:admin');
- Route::post('/export', [SparePartController::class, 'export'])->name('export')->middleware('role:admin');
- Route::post('/import', [SparePartController::class, 'import'])->name('import')->middleware('role:admin');
- Route::post('/{sparePart}/upload-image', [SparePartController::class, 'uploadImage'])->name('upload_image')->middleware('role:admin');
- });
- // Заказы деталей
- Route::prefix('spare-part-orders')->name('spare_part_orders.')->group(function () {
- Route::get('/', [SparePartOrderController::class, 'index'])->name('index');
- Route::get('/create', [SparePartOrderController::class, 'create'])->name('create')->middleware('role:admin,manager');
- Route::get('/{sparePartOrder}', [SparePartOrderController::class, 'show'])->name('show');
- Route::post('/', [SparePartOrderController::class, 'store'])->name('store')->middleware('role:admin,manager');
- Route::put('/{sparePartOrder}', [SparePartOrderController::class, 'update'])->name('update')->middleware('role:admin,manager');
- Route::delete('/{sparePartOrder}', [SparePartOrderController::class, 'destroy'])->name('destroy')->middleware('role:admin');
- Route::post('/{sparePartOrder}/ship', [SparePartOrderController::class, 'ship'])->name('ship')->middleware('role:admin,manager');
- Route::post('/{sparePartOrder}/set-in-stock', [SparePartOrderController::class, 'setInStock'])->name('set_in_stock')->middleware('role:admin,manager');
- Route::post('/{sparePartOrder}/correct', [SparePartOrderController::class, 'correct'])->name('correct')->middleware('role:admin');
- });
- // Резервы запчастей
- Route::prefix('spare-part-reservations')->name('spare_part_reservations.')->middleware('role:admin,manager')->group(function () {
- Route::get('/reclamation/{reclamationId}', [SparePartReservationController::class, 'forReclamation'])->name('for_reclamation');
- Route::get('/shortages/{reclamationId}', [SparePartReservationController::class, 'shortagesForReclamation'])->name('shortages_for_reclamation');
- Route::post('/{reservation}/cancel', [SparePartReservationController::class, 'cancel'])->name('cancel');
- Route::post('/{reservation}/issue', [SparePartReservationController::class, 'issue'])->name('issue');
- Route::post('/issue-all/{reclamationId}', [SparePartReservationController::class, 'issueAllForReclamation'])->name('issue_all');
- Route::post('/cancel-all/{reclamationId}', [SparePartReservationController::class, 'cancelAllForReclamation'])->name('cancel_all');
- });
- // Контроль наличия
- Route::get('/spare-part-inventory', [SparePartInventoryController::class, 'index'])->name('spare_part_inventory.index');
- // API для получения расшифровки кодов (без ограничения по роли, должны быть ПЕРЕД группой с prefix)
- Route::get('/pricing-codes/get-description', [PricingCodeController::class, 'getDescription'])->name('pricing_codes.get_description');
- Route::get('/pricing-codes/search', [PricingCodeController::class, 'search'])->name('pricing_codes.search');
- // Справочник расшифровок (admin only)
- Route::prefix('pricing-codes')->name('pricing_codes.')->middleware('role:admin')->group(function () {
- Route::get('/', [PricingCodeController::class, 'index'])->name('index');
- Route::post('/', [PricingCodeController::class, 'store'])->name('store');
- Route::put('/{pricingCode}', [PricingCodeController::class, 'update'])->name('update');
- Route::delete('/{pricingCode}', [PricingCodeController::class, 'destroy'])->name('destroy');
- });
- });
|