Mostrando {productosFiltrados.length} de {productos.length} productos
{productosFiltrados.some(p => !p.tiene_ubicacion) && (
@@ -82,38 +116,51 @@ const ListaInventario = ({
productosFiltrados.map((p) => (
onEstanteriaClick(p.estanteria)}
>
-
+
{p.descripcion || `${p.tipo_producto} ${p.color_nombre} ${p.tamanio}`}
{!p.tiene_ubicacion && (
- ⚠️ Sin ubicación
+ ⚠️
)}
-
+
{p.tipo_producto} • {p.color_nombre} • {p.tamanio}
-
{p.estanteria}
-
{p.stock_total} unidades
+
{p.stock_total}u
))
) : (
-
+
No se encontraron productos con los filtros aplicados
)}
+
+ {/* Botón flotante para contraer (alternativo) */}
+
+
+
);
};
diff --git a/resources/js/components/BL/PlanoAlmacen.jsx b/resources/js/components/BL/PlanoAlmacen.jsx
new file mode 100644
index 0000000..80c5074
--- /dev/null
+++ b/resources/js/components/BL/PlanoAlmacen.jsx
@@ -0,0 +1,338 @@
+// resources/js/components/BL/PlanoAlmacen.jsx
+import React from 'react';
+
+const PlanoAlmacen = ({ onEstanteriaClick, productos }) => {
+ // Calcular productos por estantería
+ const productosPorEstanteria = (nombreEstanteria) => {
+ return productos.filter(p => p.estanteria === nombreEstanteria).length;
+ };
+
+ return (
+
+ {/* Título del plano */}
+
📋 Plano del Almacén
+
+ {/* Contenedor principal del plano */}
+
+
+ {/* LÍNEA DIVISORIA VERTICAL EN EL CENTRO */}
+
+
+ {/* PARTE SUPERIOR (20% de altura) - NO TOCAR */}
+
+ {/* MITAD IZQUIERDA SUPERIOR: E1 + C JUNTOS */}
+
+ {/* E1 */}
+
+
onEstanteriaClick("Estantería 1")}
+ >
+ E1
+ Estantería 1
+
+ {productosPorEstanteria("Estantería 1")} productos
+
+
+
+
+ {/* C */}
+
+
onEstanteriaClick("Zona de Computadores")}
+ >
+ C
+ 💻 Computadores
+ Área de trabajo
+
+
+
+
+ {/* MITAD DERECHA SUPERIOR: VACÍA */}
+
+
+
📭
+
ZONA DE EMPAQUETACIÓN
+
+
+
+
+ {/* PARTE INFERIOR (80% de altura) - NO TOCAR */}
+
+ {/* MITAD IZQUIERDA INFERIOR */}
+
+ {/* RACK 10 (R10) - OCUPA TODA LA ALTURA */}
+
+
onEstanteriaClick("Rack 10")}
+ >
+ R10
+ Rack 10
+
+ {productosPorEstanteria("Rack 10")} productos
+
+
+
+
+ {/* ZONA DERECHA DE R10 */}
+
+
+ {/* ESPACIO VACÍO (7%) */}
+
+
+ {/* E2 (12%) */}
+
+
onEstanteriaClick("Estantería 2")}
+ >
+ E2
+ Estantería 2
+
+ {productosPorEstanteria("Estantería 2")} productos
+
+
+
+
+ {/* E3 (12%) */}
+
+
onEstanteriaClick("Estantería 3")}
+ >
+ E3
+ Estantería 3
+
+ {productosPorEstanteria("Estantería 3")} productos
+
+
+
+
+ {/* ESPACIO VACÍO (7%) */}
+
+
+ {/* E5 (12%) */}
+
+
onEstanteriaClick("Estantería 5")}
+ >
+ E5
+ Estantería 5
+
+ {productosPorEstanteria("Estantería 5")} productos
+
+
+
+
+ {/* E4 (12%) */}
+
+
onEstanteriaClick("Estantería 4")}
+ >
+ E4
+ Estantería 4
+
+ {productosPorEstanteria("Estantería 4")} productos
+
+
+
+
+ {/* ESPACIO VACÍO (7%) */}
+
+
+ {/* E6 (resto de altura) */}
+
+
onEstanteriaClick("Estantería 6")}
+ >
+ E6
+ Estantería 6
+
+ {productosPorEstanteria("Estantería 6")} productos
+
+
+
+
+
+
+ {/* MITAD DERECHA INFERIOR: VACÍA */}
+ {/* MITAD DERECHA INFERIOR */}
+
+
+ {/* Zona superior de racks */}
+
+
+ {/* Rack 9 */}
+
+
onEstanteriaClick("Rack 9")}
+ >
+ R9
+ Rack 9
+
+ {productosPorEstanteria("Rack 9")} productos
+
+
+
+
+ {/* Espacio 5% */}
+
+
+ {/* Rack 8 */}
+
+
onEstanteriaClick("Rack 8")}
+ >
+ R8
+ Rack 8
+
+ {productosPorEstanteria("Rack 8")} productos
+
+
+
+
+ {/* Rack 7 */}
+
+
onEstanteriaClick("Rack 7")}
+ >
+ R7
+ Rack 7
+
+ {productosPorEstanteria("Rack 7")} productos
+
+
+
+
+ {/* Espacio 5% */}
+
+
+ {/* Rack 6 */}
+
+
onEstanteriaClick("Rack 6")}
+ >
+ R6
+ Rack 6
+
+ {productosPorEstanteria("Rack 6")} productos
+
+
+
+
+ {/* Rack 5 */}
+
+
onEstanteriaClick("Rack 5")}
+ >
+ R5
+ Rack 5
+
+ {productosPorEstanteria("Rack 5")} productos
+
+
+
+
+ {/* Espacio 5% */}
+
+
+ {/* Rack 4 */}
+
+
onEstanteriaClick("Rack 4")}
+ >
+ R4
+ Rack 4
+
+ {productosPorEstanteria("Rack 4")} productos
+
+
+
+
+ {/* Rack 3 */}
+
+
onEstanteriaClick("Rack 3")}
+ >
+ R3
+ Rack 3
+
+ {productosPorEstanteria("Rack 3")} productos
+
+
+
+
+ {/* Espacio 5% */}
+
+
+ {/* Rack 2 */}
+
+
onEstanteriaClick("Rack 2")}
+ >
+ R2
+ Rack 2
+
+ {productosPorEstanteria("Rack 2")} productos
+
+
+
+
+
+ {/* Estantería 7 abajo */}
+
+
onEstanteriaClick("Estantería 7")}
+ >
+ E7
+ Estantería 7
+
+ {productosPorEstanteria("Estantería 7")} productos
+
+
+
+
+
+
+
+
+ {/* ÁREA SIN UBICACIÓN (ESQUINA INFERIOR DERECHA) */}
+ {productos.some(p => p.estanteria === "Sin ubicación") && (
+
onEstanteriaClick("Sin ubicación")}
+ >
+
+ 📦 Sin ubicación
+
+ {productosPorEstanteria("Sin ubicación")} productos
+
+
+
+ )}
+
+
+ );
+};
+
+export default PlanoAlmacen;
\ No newline at end of file
diff --git a/resources/js/pages/BLCuentaCobro.jsx b/resources/js/pages/BLCuentaCobro.jsx
index e5709e5..6aab828 100644
--- a/resources/js/pages/BLCuentaCobro.jsx
+++ b/resources/js/pages/BLCuentaCobro.jsx
@@ -493,7 +493,7 @@ export default function CuentasCobroCards({ user, cuentas = datosPrueba, cuentas
Items incluidos:
{cuenta.items.slice(0, 30).map((item, index) => {
- const descripcion = item.marcacion.pedido.items[0]?.empaque?.producto?.descripcion ?? "Sin descripción";
+ const descripcion = item?.marcacion?.pedido?.items[0]?.empaque?.producto?.descripcion ?? "Sin descripción";
const cantidad = item.marcacion.cantidad ?? 'sin cantidad'
const total = item.marcacion.costo_total ?? 'Sin costo total'
diff --git a/resources/js/pages/BLInventario.jsx b/resources/js/pages/BLInventario.jsx
index 5746558..a7e4be5 100644
--- a/resources/js/pages/BLInventario.jsx
+++ b/resources/js/pages/BLInventario.jsx
@@ -3,7 +3,7 @@ import React from 'react';
import AppLayout from '@/layouts/app-layout';
import { Head } from '@inertiajs/react';
import ListaInventario from '@/components/BL/ListaInventario';
-// import { useFiltrosInventario } from '@/Hooks/useFiltrosInventario';
+import PlanoAlmacen from '@/components/BL/PlanoAlmacen';
import { useDispositivo } from '@/components/BL/Hooks/useDispositivo';
import { useFiltrosInventario } from '@/components/BL/Hooks/useFiltrosInventario';
@@ -33,41 +33,11 @@ export default function PlanoInventario({ productos }) {
setFiltro(filtro === estanteria ? null : estanteria);
};
- // Componente de placeholder para el plano (por ahora)
- const PlanoPlaceholder = () => (
-
-
-
🏗️
-
Plano en construcción
-
El plano visual del almacén estará disponible pronto
-
-
- );
-
- return (
-
-
-
- {!isMobile ? (
- // Vista Desktop
-
- ) : (
- // Vista Móvil (solo lista)
+ // Vista móvil simplificada (solo lista)
+ if (isMobile) {
+ return (
+
+
- )}
+
+ );
+ }
+
+ // Vista desktop completa
+ return (
+
+
+
+
+ {/* Plano del almacén */}
+
+
+ {/* Lista de inventario */}
+
+
);
}
\ No newline at end of file