182 lines
8.4 KiB
PHP
182 lines
8.4 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\App\BundleController;
|
|
use App\Http\Controllers\App\CashRegisterController;
|
|
use App\Http\Controllers\App\CategoryController;
|
|
use App\Http\Controllers\App\ClientController;
|
|
use App\Http\Controllers\App\ClientTierController;
|
|
use App\Http\Controllers\App\ExcelController;
|
|
use App\Http\Controllers\App\InventoryController;
|
|
use App\Http\Controllers\App\PriceController;
|
|
use App\Http\Controllers\App\ReportController;
|
|
use App\Http\Controllers\App\SaleController;
|
|
use App\Http\Controllers\App\ReturnController;
|
|
use App\Http\Controllers\App\InvoiceController;
|
|
use App\Http\Controllers\App\InventorySerialController;
|
|
use App\Http\Controllers\App\InvoiceRequestController;
|
|
use App\Http\Controllers\App\InventoryMovementController;
|
|
use App\Http\Controllers\App\KardexController;
|
|
use App\Http\Controllers\App\SupplierController;
|
|
use App\Http\Controllers\App\UnitOfMeasurementController;
|
|
use App\Http\Controllers\App\WarehouseController;
|
|
use App\Http\Controllers\App\WhatsappController;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
/**
|
|
* Rutas del núcleo de la aplicación.
|
|
*
|
|
* Se recomienda que no se modifiquen estas rutas a menos que sepa lo que está haciendo.
|
|
*/
|
|
require('core.php');
|
|
|
|
/**
|
|
* Rutas de tu aplicación.
|
|
*
|
|
* Estas rutas son de la aplicación AP I que desarrollarás. Siéntete libre de agregar lo que consideres necesario.
|
|
* Procura revisar que no existan rutas que entren en conflicto con las rutas del núcleo.
|
|
*/
|
|
|
|
/** Rutas protegidas (requieren autenticación) */
|
|
Route::middleware('auth:api')->group(function() {
|
|
// Tus rutas protegidas
|
|
|
|
//INVENTARIO
|
|
Route::get('inventario/almacen/{warehouse}', [InventoryController::class, 'getProductsByWarehouse']);
|
|
Route::post('inventario/import', [InventoryController::class, 'import']);
|
|
Route::get('inventario/template/download', [InventoryController::class, 'downloadTemplate']);
|
|
Route::resource('inventario', InventoryController::class);
|
|
|
|
// NÚMEROS DE SERIE DE INVENTARIO
|
|
Route::resource('inventario.serials', InventorySerialController::class)->only(['index', 'show', 'destroy']);
|
|
Route::get('serials/search', [InventorySerialController::class, 'search']);
|
|
|
|
// ALMACENES
|
|
Route::resource('almacenes', WarehouseController::class)->except(['create', 'edit']);
|
|
|
|
// MOVIMIENTOS DE INVENTARIO
|
|
Route::prefix('movimientos')->group(function () {
|
|
Route::get('/', [InventoryMovementController::class, 'index']);
|
|
Route::get('/{id}', [InventoryMovementController::class, 'show']);
|
|
Route::put('/{id}', [InventoryMovementController::class, 'update']);
|
|
Route::post('/entrada', [InventoryMovementController::class, 'entry']);
|
|
Route::post('/salida', [InventoryMovementController::class, 'exit']);
|
|
Route::post('/traspaso', [InventoryMovementController::class, 'transfer']);
|
|
});
|
|
|
|
// UNIDADES DE MEDIDA
|
|
Route::prefix('unidades-medida')->group(function () {
|
|
Route::get('/', [UnitOfMeasurementController::class, 'index']);
|
|
Route::get('/active', [UnitOfMeasurementController::class, 'active']);
|
|
Route::get('/{unidad}', [UnitOfMeasurementController::class, 'show']);
|
|
Route::post('/', [UnitOfMeasurementController::class, 'store']);
|
|
Route::put('/{unidad}', [UnitOfMeasurementController::class, 'update']);
|
|
Route::delete('/{unidad}', [UnitOfMeasurementController::class, 'destroy']);
|
|
});
|
|
|
|
//CATEGORIAS
|
|
Route::resource('categorias', CategoryController::class);
|
|
|
|
//BUNDLES/KITS
|
|
Route::prefix('bundles')->group(function () {
|
|
Route::get('/', [BundleController::class, 'index']);
|
|
Route::get('/{bundle}', [BundleController::class, 'show']);
|
|
Route::post('/', [BundleController::class, 'store']);
|
|
Route::put('/{bundle}', [BundleController::class, 'update']);
|
|
Route::delete('/{bundle}', [BundleController::class, 'destroy']);
|
|
Route::get('/{bundle}/check-stock', [BundleController::class, 'checkStock']);
|
|
});
|
|
|
|
//PRECIOS
|
|
Route::resource('precios', PriceController::class);
|
|
|
|
//VENTAS
|
|
Route::resource('/sales', SaleController::class);
|
|
Route::put('/sales/{sale}/cancel', [SaleController::class, 'cancel']);
|
|
|
|
// DEVOLUCIONES
|
|
Route::prefix('returns')->group(function () {
|
|
Route::get('/', [ReturnController::class, 'index']);
|
|
Route::get('/{return}', [ReturnController::class, 'show']);
|
|
Route::post('/', [ReturnController::class, 'store']);
|
|
Route::put('/{return}/cancel', [ReturnController::class, 'cancel']);
|
|
});
|
|
|
|
// Items que pueden ser devueltos de una venta
|
|
Route::get('/sales/{sale}/returnable', [ReturnController::class, 'returnable']);
|
|
|
|
// Rutas de caja
|
|
Route::prefix('cash-registers')->group(function () {
|
|
Route::get('/', [CashRegisterController::class, 'index']);
|
|
Route::get('/current', [CashRegisterController::class, 'current']);
|
|
Route::get('/{register}', [CashRegisterController::class, 'show']);
|
|
Route::post('/open', [CashRegisterController::class, 'open']);
|
|
Route::put('/{register}/close', [CashRegisterController::class, 'close']);
|
|
});
|
|
|
|
// REPORTES
|
|
Route::prefix('reports')->group(function () {
|
|
Route::get('top-selling-product', [ReportController::class, 'topSellingProduct']);
|
|
Route::get('products-without-movement', [ReportController::class, 'productsWithoutMovement']);
|
|
Route::get('client-discounts/excel', [ExcelController::class, 'clientDiscountsReport']);
|
|
Route::get('sales/excel', [ExcelController::class, 'salesReport']);
|
|
Route::get('inventory/excel', [ExcelController::class, 'inventoryReport']);
|
|
Route::get('kardex/excel', [KardexController::class, 'export']);
|
|
});
|
|
|
|
//CLIENTES
|
|
Route::resource('clients', ClientController::class);
|
|
|
|
// ESTADÍSTICAS Y DESCUENTOS DE CLIENTES
|
|
Route::prefix('clients')->group(function () {
|
|
Route::get('/{client}/stats', [ClientController::class, 'stats']);
|
|
Route::get('/{client}/tier-history', [ClientController::class, 'tierHistory']);
|
|
Route::get('/{client}/sales-with-discounts', [ClientController::class, 'salesWithDiscounts']);
|
|
});
|
|
|
|
// RANGOS DE CLIENTES
|
|
Route::prefix('client-tiers')->group(function () {
|
|
Route::get('/', [ClientTierController::class, 'index']);
|
|
Route::get('/active', [ClientTierController::class, 'active']);
|
|
Route::get('/{tier}', [ClientTierController::class, 'show']);
|
|
Route::post('/', [ClientTierController::class, 'store']);
|
|
Route::put('/{tier}', [ClientTierController::class, 'update']);
|
|
Route::delete('/{tier}', [ClientTierController::class, 'destroy']);
|
|
Route::patch('/{tier}/toggle-active', [ClientTierController::class, 'toggleActive']);
|
|
});
|
|
|
|
// SOLICITUDES DE FACTURACIÓN
|
|
Route::prefix('invoice-requests')->group(function () {
|
|
Route::get('/', [InvoiceRequestController::class, 'index']);
|
|
Route::get('/stats', [InvoiceRequestController::class, 'stats']);
|
|
Route::get('/{id}', [InvoiceRequestController::class, 'show']);
|
|
Route::put('/{id}/process', [InvoiceRequestController::class, 'process']);
|
|
Route::put('/{id}/reject', [InvoiceRequestController::class, 'reject']);
|
|
Route::post('/{id}/upload', [InvoiceRequestController::class, 'uploadInvoiceFile']);
|
|
});
|
|
|
|
Route::prefix('proveedores')->group(function () {
|
|
Route::get('/', [SupplierController::class, 'index']);
|
|
Route::post('/', [SupplierController::class, 'store']);
|
|
Route::get('/{supplier}', [SupplierController::class, 'show']);
|
|
Route::put('/{supplier}', [SupplierController::class, 'update']);
|
|
Route::delete('/{supplier}', [SupplierController::class, 'destroy']);
|
|
Route::get('/{supplier}/productos', [SupplierController::class, 'products']);
|
|
Route::get('/{supplier}/compras', [SupplierController::class, 'purchases']);
|
|
});
|
|
|
|
// WHATSAPP
|
|
Route::prefix('whatsapp')->group(function () {
|
|
Route::post('/send-document', [WhatsappController::class, 'sendDocument']);
|
|
Route::post('/send-invoice', [WhatsappController::class, 'sendInvoice']);
|
|
Route::post('/send-ticket', [WhatsappController::class, 'sendSaleTicket']);
|
|
});
|
|
});
|
|
|
|
/** Rutas públicas */
|
|
// Formulario de datos fiscales para facturación
|
|
Route::prefix('facturacion')->group(function () {
|
|
Route::get('/check-rfc', [InvoiceController::class, 'checkRfc']);
|
|
Route::get('/{invoiceNumber}', [InvoiceController::class, 'show']);
|
|
Route::post('/{invoiceNumber}', [InvoiceController::class, 'store']);
|
|
});
|