From fccb4257813c2d2873dab4cabcba04e23afe5bc0 Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Thu, 26 Feb 2026 22:05:17 -0600 Subject: [PATCH] =?UTF-8?q?feat:=20agregar=20selecci=C3=B3n=20de=20seriale?= =?UTF-8?q?s=20en=20movimientos=20y=20mejorar=20gesti=C3=B3n=20de=20catego?= =?UTF-8?q?r=C3=ADas=20y=20subcategor=C3=ADas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/POS/SerialSelector.vue | 15 ++- src/pages/POS/Inventory/CreateModal.vue | 25 ++-- src/pages/POS/Inventory/EditModal.vue | 153 ++++++++++++++++++------ src/pages/POS/Movements/Edit.vue | 101 +++++++++++++++- 4 files changed, 244 insertions(+), 50 deletions(-) diff --git a/src/components/POS/SerialSelector.vue b/src/components/POS/SerialSelector.vue index 3a5fc5c..285265d 100644 --- a/src/components/POS/SerialSelector.vue +++ b/src/components/POS/SerialSelector.vue @@ -21,6 +21,10 @@ const props = defineProps({ warehouseId: { type: Number, default: null + }, + preSelectedSerials: { + type: Array, + default: () => [] } }); @@ -59,10 +63,16 @@ const loadSerials = async () => { loading.value = true; try { const response = await serialService.getAvailableSerials(props.product.id, props.warehouseId); - // Filtrar seriales que ya están en el carrito - availableSerials.value = (response.serials?.data || []).filter( + const fetched = (response.serials?.data || []).filter( serial => !props.excludeSerials.includes(serial.serial_number) ); + const fetchedIds = new Set(fetched.map(s => s.id)); + const extras = props.preSelectedSerials.filter(s => !fetchedIds.has(s.id)); + availableSerials.value = [...extras, ...fetched]; + + selectedSerials.value = props.preSelectedSerials.filter(s => + availableSerials.value.some(a => a.id === s.id) + ); } catch (error) { console.error('Error loading serials:', error); availableSerials.value = []; @@ -94,6 +104,7 @@ const clearSelection = () => { const handleConfirm = () => { emit('confirm', { + serials: selectedSerials.value, serialNumbers: selectedSerials.value.map(s => s.serial_number), quantity: selectedSerials.value.length }); diff --git a/src/pages/POS/Inventory/CreateModal.vue b/src/pages/POS/Inventory/CreateModal.vue index 54ead43..40990ca 100644 --- a/src/pages/POS/Inventory/CreateModal.vue +++ b/src/pages/POS/Inventory/CreateModal.vue @@ -1,6 +1,6 @@