Route::has('login'), 'canRegister' => Route::has('register'), 'laravelVersion' => Application::VERSION, 'phpVersion' => PHP_VERSION, ]); }); Route::get('/dashboard', function () { return Inertia::render('Dashboard'); })->middleware(['auth', 'verified'])->name('dashboard'); Route::middleware('auth')->group(function () { Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); }); Route::middleware(['auth'])->group(function () { Route::get('/production-orders', [ProductionOrderController::class, 'index']) ->name('production-orders.index'); Route::get('/production-orders/create', [ProductionOrderController::class, 'create']) ->name('production-orders.create'); Route::get('/production-orders/formula/{type}/{id}', [ProductionOrderController::class, 'formula']) ->name('production-orders.formula'); Route::post('/production-orders', [ProductionOrderController::class, 'store']) ->name('production-orders.store'); }); Route::middleware(['auth'])->group(function () { Route::resource('raw-materials', RawMaterialController::class) ->except(['show']) ->parameters(['raw-materials' => 'raw_material']); Route::resource('raw-materials', RawMaterialController::class) ->parameters(['raw-materials' => 'raw_material']); Route::resource('products', ProductController::class)->except(['show']); Route::delete('/product-images/{image}', [ProductController::class, 'destroyImage'])->name('product-images.destroy'); Route::patch('/product-images/{image}/cover', [ProductController::class, 'setCoverImage'])->name('product-images.cover'); Route::get('/products/{product}', [ProductController::class, 'show'])->name('products.show'); Route::resource('products', ProductController::class)->except(['show']); Route::post('/products/{product}/recalculate-cost', [ProductController::class, 'recalculateCost']) ->name('products.recalculate-cost'); Route::get('/formula/candidates', [FormulaController::class, 'candidates'])->name('formula.candidates'); Route::get('/formula/{type}/{id}', [FormulaController::class, 'index'])->name('formula.index'); Route::post('/formula/{type}/{id}', [FormulaController::class, 'store'])->name('formula.store'); Route::delete('/formula/{formula}', [FormulaController::class, 'destroy'])->name('formula.destroy'); }); Route::middleware(['auth'])->group(function () { Route::resource('master-formulas', MasterFormulaController::class) ->except(['show']) ->parameters(['master-formulas' => 'master_formula']); Route::get('/master-formulas/{master_formula}/items', [MasterFormulaController::class, 'items'])->name('master-formula-items.index'); Route::post('/master-formulas/{master_formula}/items', [MasterFormulaController::class, 'storeItem'])->name('master-formula-items.store'); Route::delete('/master-formula-items/{item}', [MasterFormulaController::class, 'destroyItem'])->name('master-formula-items.destroy'); Route::get('/master-formulas/candidates/list', [MasterFormulaController::class, 'candidates'])->name('master-formulas.candidates'); Route::get('/formulable-master-formulas/catalog', [FormulableMasterFormulaController::class, 'catalog'])->name('formulable-master-formulas.catalog'); Route::get('/formulable-master-formulas/{type}/{id}', [FormulableMasterFormulaController::class, 'index'])->name('formulable-master-formulas.index'); Route::post('/formulable-master-formulas/{type}/{id}', [FormulableMasterFormulaController::class, 'store'])->name('formulable-master-formulas.store'); Route::delete('/formulable-master-formulas/{assignment}', [FormulableMasterFormulaController::class, 'destroy'])->name('formulable-master-formulas.destroy'); }); Route::middleware(['auth'])->group(function () { Route::get('/inventory-transfers', [InventoryTransferController::class, 'index'])->name('inventory-transfers.index'); Route::get('/inventory-transfers/create', [InventoryTransferController::class, 'create'])->name('inventory-transfers.create'); Route::post('/inventory-transfers', [InventoryTransferController::class, 'store'])->name('inventory-transfers.store'); }); Route::delete('/images/{image}', [ImageController::class, 'destroy'])->name('images.destroy'); Route::patch('/images/{image}/cover', [ImageController::class, 'setCover'])->name('images.cover'); Route::middleware(['auth'])->group(function () { Route::get('/products/{product}/kardex', [StockMovementController::class, 'productKardex'])->name('products.kardex'); Route::post('/products/{product}/movements', [StockMovementController::class, 'storeProductMovement'])->name('products.movements.store'); Route::get('/raw-materials/{raw_material}/kardex', [StockMovementController::class, 'rawMaterialKardex'])->name('raw-materials.kardex'); Route::post('/raw-materials/{raw_material}/movements', [StockMovementController::class, 'storeRawMaterialMovement'])->name('raw-materials.movements.store'); }); Route::middleware(['auth'])->group(function () { Route::resource('customers', CustomerController::class); Route::get('/customers/{customer}/addresses', [CustomerAddressController::class, 'index'])->name('customer-addresses.index'); Route::post('/customers/{customer}/addresses', [CustomerAddressController::class, 'store'])->name('customer-addresses.store'); Route::put('/customer-addresses/{address}', [CustomerAddressController::class, 'update'])->name('customer-addresses.update'); Route::delete('/customer-addresses/{address}', [CustomerAddressController::class, 'destroy'])->name('customer-addresses.destroy'); }); Route::middleware(['auth'])->group(function () { Route::get('/orders/sellables/search', [OrderController::class, 'sellablesSearch'])->name('orders.sellables.search'); Route::post('/orders/{order}/mark-delivered', [OrderController::class, 'markAsDelivered'])->name('orders.mark-delivered'); Route::post('/orders/{order}/cancel', [OrderController::class, 'cancel'])->name('orders.cancel'); Route::resource('orders', OrderController::class); }); Route::middleware(['auth'])->group(function () { // Configuración Route::resource('payment-methods', PaymentMethodController::class) ->except(['show']) ->parameters(['payment-methods' => 'payment_method']); Route::resource('invoice-resolutions', InvoiceResolutionController::class) ->except(['show']) ->parameters(['invoice-resolutions' => 'invoice_resolution']); Route::get('/business-setting', [BusinessSettingController::class, 'edit'])->name('business-setting.edit'); Route::put('/business-setting', [BusinessSettingController::class, 'update'])->name('business-setting.update'); // Caja Route::resource('cash-registers', CashRegisterController::class) ->only(['index', 'store', 'update', 'destroy']) ->parameters(['cash-registers' => 'cash_register']); Route::get('/cash-sessions', [CashSessionController::class, 'index'])->name('cash-sessions.index'); Route::get('/cash-sessions/current', [CashSessionController::class, 'currentOpen'])->name('cash-sessions.current'); Route::get('/cash-sessions/{cash_session}', [CashSessionController::class, 'show'])->name('cash-sessions.show'); Route::post('/cash-sessions/open', [CashSessionController::class, 'open'])->name('cash-sessions.open'); Route::post('/cash-sessions/{cash_session}/close', [CashSessionController::class, 'close'])->name('cash-sessions.close'); Route::post('/cash-sessions/{cash_session}/movements', [CashMovementController::class, 'store'])->name('cash-movements.store'); // Facturas Route::get('/invoices', [InvoiceController::class, 'index'])->name('invoices.index'); Route::get('/invoices/{invoice}', [InvoiceController::class, 'show'])->name('invoices.show'); Route::post('/invoices/{invoice}/anular', [InvoiceController::class, 'anular'])->name('invoices.anular'); // Facturar pedido Route::get('/orders/{order}/bill', [InvoiceController::class, 'billFromOrder'])->name('orders.bill'); Route::post('/orders/{order}/bill', [InvoiceController::class, 'storeFromOrder'])->name('orders.bill.store'); Route::post('/orders/{order}/payments', [InvoiceController::class, 'recordOrderPayment'])->name('orders.payments.store'); }); Route::middleware(['auth'])->group(function () { // POS Route::get('/pos', [PosController::class, 'index'])->name('pos.index'); Route::get('/pos/search', [PosController::class, 'search'])->name('pos.search'); Route::post('/pos/sale', [PosController::class, 'store'])->name('pos.store'); // Acciones sobre factura Route::get('/invoices/{invoice}/pdf', [InvoiceController::class, 'pdf'])->name('invoices.pdf'); Route::get('/invoices/{invoice}/pdf-stream', [InvoiceController::class, 'pdfStream'])->name('invoices.pdf-stream'); Route::get('/invoices/{invoice}/whatsapp', [InvoiceController::class, 'whatsappLink'])->name('invoices.whatsapp'); Route::post('/invoices/{invoice}/email', [InvoiceController::class, 'sendByEmail'])->name('invoices.email'); Route::resource('raw-material-categories', RawMaterialCategoryController::class) ->only(['index', 'store', 'update', 'destroy']) ->parameters(['raw-material-categories' => 'raw_material_category']); }); require __DIR__.'/auth.php';