=================================================================== ALIGANT ERP V5 - MÓDULO MAESTROS (Productos / Categorías / Unidades de medida / Conversiones de producto) =================================================================== Solo el MAESTRO de productos, preparado para la lógica real Supermar/Samag. NO incluye compras, recepción, inventario, traspasos, ventas ni producción (eso vendrá después; el diseño ya queda listo para conectarlos). ------------------------------------------------------------------- 1) DÓNDE PEGA CADA ARCHIVO (raíz: C:\xampp2\htdocs\aligant_erp_v5\) ------------------------------------------------------------------- NUEVOS: config\permisos.php (REEMPLAZA: agrega módulos maestros) database\migrations\2025_04_01_000001_create_categorias_table.php database\migrations\2025_04_01_000002_create_unidades_medida_table.php database\migrations\2025_04_01_000003_create_productos_table.php database\migrations\2025_04_01_000004_create_producto_conversiones_table.php database\seeders\MaestrosSeeder.php app\Models\Categoria.php app\Models\UnidadMedida.php app\Models\Producto.php app\Models\ProductoConversion.php app\Http\Controllers\ProductoController.php app\Http\Controllers\CategoriaController.php app\Http\Controllers\UnidadMedidaController.php app\Http\Controllers\ProductoConversionController.php app\Http\Requests\ProductoRequest.php app\Http\Requests\CategoriaRequest.php app\Http\Requests\UnidadMedidaRequest.php app\Http\Requests\ProductoConversionRequest.php resources\views\productos\{index,create,edit,show,_form}.blade.php resources\views\categorias\{index,create,edit,show,_form}.blade.php resources\views\unidades\{index,create,edit,show,_form}.blade.php resources\views\conversiones\{index,create,edit,_form}.blade.php REEMPLAZAN: routes\web.php (agrega rutas de maestros) resources\views\layouts\sidebar.blade.php (nueva sección "Maestros") NO se toca: Empresas, Sucursales, Usuarios, Roles, Permisos, layout/paleta. ------------------------------------------------------------------- 2) COMANDOS PARA QUE SURJAN LOS CAMBIOS ------------------------------------------------------------------- php artisan migrate php artisan db:seed --class=Database\\Seeders\\MaestrosSeeder php artisan optimize:clear -> recarga con Ctrl+F5 (Opcional) Para que el rol Super Administrador tome los permisos de los nuevos módulos de maestros: php artisan db:seed --class=Database\\Seeders\\SuperAdminSeeder ------------------------------------------------------------------- 3) CÓMO MODELA EL CASO REAL (merluza) ------------------------------------------------------------------- - Unidad de COMPRA: Caja (unidad_compra_id) - Unidad de STOCK: Kg (unidad_stock_id) <- el stock se controla aquí - Unidad de VENTA: Kg (unidad_venta_id) - Unidad de PRODUCCIÓN: Bandeja/Un (unidad_produccion_id, opcional) - factor_compra_stock: 10 (1 caja = 10 kg estimados) - peso_estimado_por_unidad_compra:10 (kg estimados por caja) - permite_peso_variable: Sí (al recibir se pesa el real, ej. 96 kg) - Tipo: * Merluza a granel -> materia_prima (se_compra, se_vende, controla_stock) * Bandeja de merluza-> producto_elaborado (se_procesa / se_vende) - Conversiones de producto: equivalencias extra por producto (ej. 1 Caja = 10 Kg), en el módulo Conversiones. Diferencia materia prima vs elaborado se resuelve con el campo "tipo" y los flags se_compra / se_vende / se_procesa / controla_stock. ------------------------------------------------------------------- 4) REGLAS APLICADAS ------------------------------------------------------------------- - codigo_interno único; codigo_barras único solo si existe (nullable). - No se elimina un producto si tiene movimientos: hoy el método Producto::tieneMovimientos() devuelve false (aún no hay módulos de movimiento). Cuando existan compras/inventario/etc., se agregan ahí sus comprobaciones y el borrado queda bloqueado automáticamente. - No se elimina una categoría con productos, ni una unidad usada por productos o conversiones (integridad por FK + validación). - Laravel 12 + MySQL. Paleta Ocean Executive (clases aerp-) intacta. ===================================================================