diff --git a/assets/uploads/vouchers/69824251c8eb4-WhatsApp Image 2026-02-03 at 9.18.01 AM.jpeg b/assets/uploads/vouchers/69824251c8eb4-WhatsApp Image 2026-02-03 at 9.18.01 AM.jpeg deleted file mode 100644 index c378ec3..0000000 Binary files a/assets/uploads/vouchers/69824251c8eb4-WhatsApp Image 2026-02-03 at 9.18.01 AM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/698242913efc3-WhatsApp Image 2026-02-03 at 10.18.56 AM.jpeg b/assets/uploads/vouchers/698242913efc3-WhatsApp Image 2026-02-03 at 10.18.56 AM.jpeg deleted file mode 100644 index 4569c38..0000000 Binary files a/assets/uploads/vouchers/698242913efc3-WhatsApp Image 2026-02-03 at 10.18.56 AM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/698242b1a3e1b-WhatsApp Image 2026-02-02 at 7.25.19 PM.jpeg b/assets/uploads/vouchers/698242b1a3e1b-WhatsApp Image 2026-02-02 at 7.25.19 PM.jpeg deleted file mode 100644 index a62ec62..0000000 Binary files a/assets/uploads/vouchers/698242b1a3e1b-WhatsApp Image 2026-02-02 at 7.25.19 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/698242e9bbe5d-WhatsApp Image 2026-02-03 at 10.47.06 AM.jpeg b/assets/uploads/vouchers/698242e9bbe5d-WhatsApp Image 2026-02-03 at 10.47.06 AM.jpeg deleted file mode 100644 index 3a582c2..0000000 Binary files a/assets/uploads/vouchers/698242e9bbe5d-WhatsApp Image 2026-02-03 at 10.47.06 AM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/698255538903a-WhatsApp Image 2026-02-03 at 2.33.42 PM.jpeg b/assets/uploads/vouchers/698255538903a-WhatsApp Image 2026-02-03 at 2.33.42 PM.jpeg deleted file mode 100644 index a79efa0..0000000 Binary files a/assets/uploads/vouchers/698255538903a-WhatsApp Image 2026-02-03 at 2.33.42 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/6983c48e55dd7-WhatsApp Image 2026-02-03 at 6.33.32 PM.jpeg b/assets/uploads/vouchers/6983c48e55dd7-WhatsApp Image 2026-02-03 at 6.33.32 PM.jpeg deleted file mode 100644 index 3486119..0000000 Binary files a/assets/uploads/vouchers/6983c48e55dd7-WhatsApp Image 2026-02-03 at 6.33.32 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/6983c4c27f416-WhatsApp Image 2026-02-04 at 3.49.15 PM.jpeg b/assets/uploads/vouchers/6983c4c27f416-WhatsApp Image 2026-02-04 at 3.49.15 PM.jpeg deleted file mode 100644 index b232f70..0000000 Binary files a/assets/uploads/vouchers/6983c4c27f416-WhatsApp Image 2026-02-04 at 3.49.15 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/6983c4ff9424a-WhatsApp Image 2026-02-04 at 1.16.31 PM.jpeg b/assets/uploads/vouchers/6983c4ff9424a-WhatsApp Image 2026-02-04 at 1.16.31 PM.jpeg deleted file mode 100644 index 364af3a..0000000 Binary files a/assets/uploads/vouchers/6983c4ff9424a-WhatsApp Image 2026-02-04 at 1.16.31 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/6983c544a2f3c-WhatsApp Image 2026-02-03 at 4.37.06 PM.jpeg b/assets/uploads/vouchers/6983c544a2f3c-WhatsApp Image 2026-02-03 at 4.37.06 PM.jpeg deleted file mode 100644 index 879218a..0000000 Binary files a/assets/uploads/vouchers/6983c544a2f3c-WhatsApp Image 2026-02-03 at 4.37.06 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/6983c57c49201-WhatsApp Image 2026-02-04 at 4.41.12 PM.jpeg b/assets/uploads/vouchers/6983c57c49201-WhatsApp Image 2026-02-04 at 4.41.12 PM.jpeg deleted file mode 100644 index 475cfd7..0000000 Binary files a/assets/uploads/vouchers/6983c57c49201-WhatsApp Image 2026-02-04 at 4.41.12 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/6983cf375d8a4-WhatsApp Image 2026-01-31 at 6.01.08 PM.jpeg b/assets/uploads/vouchers/6983cf375d8a4-WhatsApp Image 2026-01-31 at 6.01.08 PM.jpeg deleted file mode 100644 index fef34e2..0000000 Binary files a/assets/uploads/vouchers/6983cf375d8a4-WhatsApp Image 2026-01-31 at 6.01.08 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/69850f4a60ea1-WhatsApp Image 2026-02-05 at 1.53.41 PM.jpeg b/assets/uploads/vouchers/69850f4a60ea1-WhatsApp Image 2026-02-05 at 1.53.41 PM.jpeg deleted file mode 100644 index 3fe8dd9..0000000 Binary files a/assets/uploads/vouchers/69850f4a60ea1-WhatsApp Image 2026-02-05 at 1.53.41 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/69850f84c9d12-WhatsApp Image 2026-02-05 at 4.15.56 PM.jpeg b/assets/uploads/vouchers/69850f84c9d12-WhatsApp Image 2026-02-05 at 4.15.56 PM.jpeg deleted file mode 100644 index 49f9017..0000000 Binary files a/assets/uploads/vouchers/69850f84c9d12-WhatsApp Image 2026-02-05 at 4.15.56 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/69850fb073975-WhatsApp Image 2026-02-05 at 10.13.42 AM.jpeg b/assets/uploads/vouchers/69850fb073975-WhatsApp Image 2026-02-05 at 10.13.42 AM.jpeg deleted file mode 100644 index ec2357d..0000000 Binary files a/assets/uploads/vouchers/69850fb073975-WhatsApp Image 2026-02-05 at 10.13.42 AM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/69850fee80de5-WhatsApp Image 2026-02-05 at 11.42.31 AM.jpeg b/assets/uploads/vouchers/69850fee80de5-WhatsApp Image 2026-02-05 at 11.42.31 AM.jpeg deleted file mode 100644 index ab619d4..0000000 Binary files a/assets/uploads/vouchers/69850fee80de5-WhatsApp Image 2026-02-05 at 11.42.31 AM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/6985102b7a584-WhatsApp Image 2026-02-05 at 8.06.26 AM.jpeg b/assets/uploads/vouchers/6985102b7a584-WhatsApp Image 2026-02-05 at 8.06.26 AM.jpeg deleted file mode 100644 index 63bad9a..0000000 Binary files a/assets/uploads/vouchers/6985102b7a584-WhatsApp Image 2026-02-05 at 8.06.26 AM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/698663382b0d8-WhatsApp Image 2026-02-06 at 10.59.55 AM.jpeg b/assets/uploads/vouchers/698663382b0d8-WhatsApp Image 2026-02-06 at 10.59.55 AM.jpeg deleted file mode 100644 index 820b5ac..0000000 Binary files a/assets/uploads/vouchers/698663382b0d8-WhatsApp Image 2026-02-06 at 10.59.55 AM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/6986637dd2f3c-WhatsApp Image 2026-02-06 at 2.17.43 PM.jpeg b/assets/uploads/vouchers/6986637dd2f3c-WhatsApp Image 2026-02-06 at 2.17.43 PM.jpeg deleted file mode 100644 index cf8a3f1..0000000 Binary files a/assets/uploads/vouchers/6986637dd2f3c-WhatsApp Image 2026-02-06 at 2.17.43 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/698663bdeb021-WhatsApp Image 2026-02-05 at 6.05.27 PM.jpeg b/assets/uploads/vouchers/698663bdeb021-WhatsApp Image 2026-02-05 at 6.05.27 PM.jpeg deleted file mode 100644 index f1f2703..0000000 Binary files a/assets/uploads/vouchers/698663bdeb021-WhatsApp Image 2026-02-05 at 6.05.27 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/698663ede9f60-WhatsApp Image 2026-02-06 at 3.44.17 PM.jpeg b/assets/uploads/vouchers/698663ede9f60-WhatsApp Image 2026-02-06 at 3.44.17 PM.jpeg deleted file mode 100644 index 5ea76c1..0000000 Binary files a/assets/uploads/vouchers/698663ede9f60-WhatsApp Image 2026-02-06 at 3.44.17 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/6987b11d6011a-WhatsApp Image 2026-02-07 at 4.13.51 PM.jpeg b/assets/uploads/vouchers/6987b11d6011a-WhatsApp Image 2026-02-07 at 4.13.51 PM.jpeg deleted file mode 100644 index f869ead..0000000 Binary files a/assets/uploads/vouchers/6987b11d6011a-WhatsApp Image 2026-02-07 at 4.13.51 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/6987b14dd5479-WhatsApp Image 2026-02-07 at 4.38.21 PM.jpeg b/assets/uploads/vouchers/6987b14dd5479-WhatsApp Image 2026-02-07 at 4.38.21 PM.jpeg deleted file mode 100644 index 4aad278..0000000 Binary files a/assets/uploads/vouchers/6987b14dd5479-WhatsApp Image 2026-02-07 at 4.38.21 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/6987b1bf42b8b-WhatsApp Image 2026-02-07 at 4.06.05 PM.jpeg b/assets/uploads/vouchers/6987b1bf42b8b-WhatsApp Image 2026-02-07 at 4.06.05 PM.jpeg deleted file mode 100644 index 2a68552..0000000 Binary files a/assets/uploads/vouchers/6987b1bf42b8b-WhatsApp Image 2026-02-07 at 4.06.05 PM.jpeg and /dev/null differ diff --git a/assets/uploads/vouchers/698e051acfbd1-024.png b/assets/uploads/vouchers/698e051acfbd1-024.png new file mode 100644 index 0000000..3cac75b Binary files /dev/null and b/assets/uploads/vouchers/698e051acfbd1-024.png differ diff --git a/assets/uploads/vouchers/698e05480d32b-533.png b/assets/uploads/vouchers/698e05480d32b-533.png new file mode 100644 index 0000000..bfb0f29 Binary files /dev/null and b/assets/uploads/vouchers/698e05480d32b-533.png differ diff --git a/assets/uploads/vouchers/698e057e8a398-705.png b/assets/uploads/vouchers/698e057e8a398-705.png new file mode 100644 index 0000000..081c12c Binary files /dev/null and b/assets/uploads/vouchers/698e057e8a398-705.png differ diff --git a/assets/uploads/vouchers/698e064676305-658.png b/assets/uploads/vouchers/698e064676305-658.png new file mode 100644 index 0000000..37d1123 Binary files /dev/null and b/assets/uploads/vouchers/698e064676305-658.png differ diff --git a/assets/uploads/vouchers/698e06756f564-967.png b/assets/uploads/vouchers/698e06756f564-967.png new file mode 100644 index 0000000..a8e0f39 Binary files /dev/null and b/assets/uploads/vouchers/698e06756f564-967.png differ diff --git a/assets/uploads/vouchers/698e06ce0f979-210.png b/assets/uploads/vouchers/698e06ce0f979-210.png new file mode 100644 index 0000000..c3fe363 Binary files /dev/null and b/assets/uploads/vouchers/698e06ce0f979-210.png differ diff --git a/assets/uploads/vouchers/698e06f48e8c8-495.png b/assets/uploads/vouchers/698e06f48e8c8-495.png new file mode 100644 index 0000000..0db42a8 Binary files /dev/null and b/assets/uploads/vouchers/698e06f48e8c8-495.png differ diff --git a/assets/uploads/vouchers/698e0720e7499-620.png b/assets/uploads/vouchers/698e0720e7499-620.png new file mode 100644 index 0000000..f27d950 Binary files /dev/null and b/assets/uploads/vouchers/698e0720e7499-620.png differ diff --git a/assets/uploads/vouchers/698e07521d053-833.png b/assets/uploads/vouchers/698e07521d053-833.png new file mode 100644 index 0000000..635d0b9 Binary files /dev/null and b/assets/uploads/vouchers/698e07521d053-833.png differ diff --git a/assets/uploads/vouchers/698e07d091e66-615.png b/assets/uploads/vouchers/698e07d091e66-615.png new file mode 100644 index 0000000..fa2833d Binary files /dev/null and b/assets/uploads/vouchers/698e07d091e66-615.png differ diff --git a/assets/uploads/vouchers/698e07f8d9647-586.png b/assets/uploads/vouchers/698e07f8d9647-586.png new file mode 100644 index 0000000..6a871d2 Binary files /dev/null and b/assets/uploads/vouchers/698e07f8d9647-586.png differ diff --git a/assets/uploads/vouchers/698e082738c1d-076.png b/assets/uploads/vouchers/698e082738c1d-076.png new file mode 100644 index 0000000..0bb9aeb Binary files /dev/null and b/assets/uploads/vouchers/698e082738c1d-076.png differ diff --git a/assets/uploads/vouchers/698e08cf2dae2-269.png b/assets/uploads/vouchers/698e08cf2dae2-269.png new file mode 100644 index 0000000..8aa38e1 Binary files /dev/null and b/assets/uploads/vouchers/698e08cf2dae2-269.png differ diff --git a/assets/uploads/vouchers/698e090dc9c47-338.png b/assets/uploads/vouchers/698e090dc9c47-338.png new file mode 100644 index 0000000..3cde1b7 Binary files /dev/null and b/assets/uploads/vouchers/698e090dc9c47-338.png differ diff --git a/assets/uploads/vouchers/698e093e0e322-259.png b/assets/uploads/vouchers/698e093e0e322-259.png new file mode 100644 index 0000000..f3a4b9f Binary files /dev/null and b/assets/uploads/vouchers/698e093e0e322-259.png differ diff --git a/assets/uploads/vouchers/698e0982c5392-538.png b/assets/uploads/vouchers/698e0982c5392-538.png new file mode 100644 index 0000000..d1894f4 Binary files /dev/null and b/assets/uploads/vouchers/698e0982c5392-538.png differ diff --git a/assets/uploads/vouchers/698e09a26f28e-887.png b/assets/uploads/vouchers/698e09a26f28e-887.png new file mode 100644 index 0000000..d50b748 Binary files /dev/null and b/assets/uploads/vouchers/698e09a26f28e-887.png differ diff --git a/assets/uploads/vouchers/698e09e09c30f-324.png b/assets/uploads/vouchers/698e09e09c30f-324.png new file mode 100644 index 0000000..4fc5562 Binary files /dev/null and b/assets/uploads/vouchers/698e09e09c30f-324.png differ diff --git a/assets/uploads/vouchers/698e0a2902f1a-269.png b/assets/uploads/vouchers/698e0a2902f1a-269.png new file mode 100644 index 0000000..b790098 Binary files /dev/null and b/assets/uploads/vouchers/698e0a2902f1a-269.png differ diff --git a/assets/uploads/vouchers/698e0a577751e-097.png b/assets/uploads/vouchers/698e0a577751e-097.png new file mode 100644 index 0000000..267d52f Binary files /dev/null and b/assets/uploads/vouchers/698e0a577751e-097.png differ diff --git a/assets/uploads/vouchers/698e0a7f17082-260.png b/assets/uploads/vouchers/698e0a7f17082-260.png new file mode 100644 index 0000000..e278bc9 Binary files /dev/null and b/assets/uploads/vouchers/698e0a7f17082-260.png differ diff --git a/assets/uploads/vouchers/698e0af95fa3b-003.png b/assets/uploads/vouchers/698e0af95fa3b-003.png new file mode 100644 index 0000000..2c23527 Binary files /dev/null and b/assets/uploads/vouchers/698e0af95fa3b-003.png differ diff --git a/assets/uploads/vouchers/698e0b1ce2357-443.png b/assets/uploads/vouchers/698e0b1ce2357-443.png new file mode 100644 index 0000000..491bdb3 Binary files /dev/null and b/assets/uploads/vouchers/698e0b1ce2357-443.png differ diff --git a/inventario_por_sede.php b/inventario_por_sede.php new file mode 100644 index 0000000..ee6c1f9 --- /dev/null +++ b/inventario_por_sede.php @@ -0,0 +1,95 @@ +query("SELECT id, nombre FROM sedes ORDER BY nombre ASC")->fetchAll(PDO::FETCH_ASSOC); + +$selected_sede_id = isset($_GET['sede_id']) ? (int)$_GET['sede_id'] : 0; +$inventory = []; +$sede_name = ''; + +if ($selected_sede_id) { + $stmt = $db->prepare("SELECT nombre FROM sedes WHERE id = ?"); + $stmt->execute([$selected_sede_id]); + $sede_name = $stmt->fetchColumn(); + + $stmt = $db->prepare(" + SELECT p.nombre, p.sku, ss.quantity + FROM products p + JOIN stock_sedes ss ON p.id = ss.product_id + WHERE ss.sede_id = ? AND ss.quantity > 0 + ORDER BY p.nombre ASC + "); + $stmt->execute([$selected_sede_id]); + $inventory = $stmt->fetchAll(PDO::FETCH_ASSOC); +} +?> + +
+
+
+

Auditoría de Inventario por Sede

+

Selecciona una sede para ver el detalle de su stock.

+
+
+
+
+
+ + +
+
+ +
+
+
+ + +
+ +

Inventario de:

+ 0): ?> +
+ + + + + + + + + + + + + + + + + +
ProductoSKUCantidad en Stock
+
+ + + + + + + +
+
+
+ + diff --git a/layout_header.php b/layout_header.php index 77766d7..4215687 100644 --- a/layout_header.php +++ b/layout_header.php @@ -97,6 +97,12 @@ $navItems = [ 'text' => 'Inventario General', 'roles' => ['Administrador', 'admin', 'Control Logistico'] ], + 'inventario_por_sede' => [ + 'url' => 'inventario_por_sede.php', + 'icon' => 'fa-search-location', + 'text' => 'Auditoría por Sede', + 'roles' => ['Administrador', 'admin', 'Control Logistico'] + ], 'generar_etiquetas' => [ 'url' => 'generar_etiquetas.php', 'icon' => 'fa-barcode', diff --git a/registrar_salida_manual_api.php b/registrar_salida_manual_api.php new file mode 100644 index 0000000..4c3a106 --- /dev/null +++ b/registrar_salida_manual_api.php @@ -0,0 +1,76 @@ + false, 'message' => 'Petición inválida.']; + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $sede_id = isset($_POST['sede_id']) ? trim($_POST['sede_id']) : ''; + $product_id_raw = isset($_POST['product_id']) ? trim($_POST['product_id']) : ''; + $quantity_to_remove = isset($_POST['quantity']) ? (int)$_POST['quantity'] : 0; + + // Extraer el ID numérico del producto + $product_id_parts = explode('-', $product_id_raw); + $product_id = end($product_id_parts); + + if (empty($sede_id) || !is_numeric($product_id) || $quantity_to_remove <= 0) { + $response['message'] = 'Por favor, complete todos los campos correctamente.'; + echo json_encode($response); + exit; + } + + $pdo = db(); + $pdo->beginTransaction(); + + try { + // 1. Obtener el stock actual y bloquear la fila para evitar concurrencia + $stmt = $pdo->prepare("SELECT quantity FROM stock_sedes WHERE sede_id = :sede_id AND product_id = :product_id FOR UPDATE"); + $stmt->execute(['sede_id' => $sede_id, 'product_id' => $product_id]); + $stock = $stmt->fetch(PDO::FETCH_ASSOC); + + $current_quantity = $stock ? (int)$stock['quantity'] : 0; + + if ($current_quantity < $quantity_to_remove) { + $response['message'] = "No se puede retirar más stock del disponible. Stock actual: {$current_quantity}."; + $pdo->rollBack(); + echo json_encode($response); + exit; + } + + // 2. Calcular la nueva cantidad + $new_quantity = $current_quantity - $quantity_to_remove; + + // 3. Actualizar la tabla de stock + $update_stmt = $pdo->prepare( + "UPDATE stock_sedes SET quantity = :new_quantity WHERE sede_id = :sede_id AND product_id = :product_id" + ); + $update_stmt->execute([ + 'new_quantity' => $new_quantity, + 'sede_id' => $sede_id, + 'product_id' => $product_id + ]); + + // 4. (Opcional pero recomendado) Registrar el movimiento + $movement_stmt = $pdo->prepare( + "INSERT INTO stock_movements (product_id, sede_id, quantity, type, movement_date) VALUES (:product_id, :sede_id, :quantity, 'salida', NOW())" + ); + $movement_stmt->execute([ + 'product_id' => $product_id, + 'sede_id' => $sede_id, + 'quantity' => $quantity_to_remove + ]); + + $pdo->commit(); + $response['success'] = true; + $response['message'] = "Salida manual registrada con éxito. Stock actualizado a {$new_quantity} unidades."; + + } catch (PDOException $e) { + $pdo->rollBack(); + // En un entorno de producción, no deberías exponer el mensaje de error detallado. + // Considera registrar el error en un archivo de logs. + $response['message'] = 'Error en la base de datos al procesar la solicitud.'; // Mensaje genérico para el usuario + } +} + +echo json_encode($response); +?> \ No newline at end of file diff --git a/registro_salida.php b/registro_salida.php index 0a81a11..9b2b2fb 100644 --- a/registro_salida.php +++ b/registro_salida.php @@ -24,6 +24,15 @@ try { } catch (PDOException $e) { $error_page_load = "Error al cargar datos: " . $e->getMessage(); } + +// Obtener productos para el dropdown manual +$products = []; +try { + $products_stmt = $pdo->query("SELECT id, nombre, sku FROM products ORDER BY nombre ASC"); + $products = $products_stmt->fetchAll(PDO::FETCH_ASSOC); +} catch (PDOException $e) { + $error_page_load .= " Error al cargar productos: " . $e->getMessage(); +} ?>
@@ -73,6 +82,43 @@ try {
+ +
+
+ Salida Manual de Stock +
+
+

Utilice este formulario para ajustar el inventario y poner en cero el stock de productos antiguos o sin SKU.

+
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
+ @@ -245,14 +291,62 @@ document.addEventListener('DOMContentLoaded', (event) => { }); }); + // --- LÓGICA DEL FORMULARIO MANUAL --- + const manualExitForm = document.getElementById('manual-exit-form'); + if (manualExitForm) { + manualExitForm.addEventListener('submit', function(e) { + e.preventDefault(); + + const sedeId = document.getElementById('manual_sede').value; + const productId = document.getElementById('manual_product').value; + const quantity = document.getElementById('manual_quantity').value; + + if (!sedeId || !productId || !quantity) { + showNotification("Por favor, complete todos los campos del formulario manual.", false); + return; + } + + if (parseInt(quantity, 10) <= 0) { + showNotification("La cantidad debe ser un número positivo.", false); + return; + } + + if (!confirm(`¿Está seguro de que desea retirar ${quantity} unidad(es) de este producto? Esta acción ajustará el inventario.`)) { + return; + } + + const formData = new FormData(); + formData.append('sede_id', sedeId); + formData.append('product_id', productId); + formData.append('quantity', quantity); + + fetch('registrar_salida_manual_api.php', { + method: 'POST', + body: formData + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + showNotification(data.message, true); + manualExitForm.reset(); + } else { + throw new Error(data.message || 'Error desconocido al registrar la salida manual.'); + } + }) + .catch(error => { + showNotification(error.message, false); + }); + }); + } + // Mantener el foco en el input barcodeInput.focus(); document.body.addEventListener('click', (e) => { - if (!['INPUT', 'SELECT', 'BUTTON', 'A'].includes(e.target.tagName) && !e.target.closest('button, a')) { + if (!['INPUT', 'SELECT', 'BUTTON', 'A'].includes(e.target.tagName) && !e.target.closest('button, a, .modal')) { barcodeInput.focus(); } }); }); - \ No newline at end of file +