Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
loteo
:
guardar.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php require_once 'connection.php'; if ($_SERVER['REQUEST_METHOD'] !== 'POST') { header("Location: registrar.php?error=metodo_no_valido"); exit; } // Validar campos requeridos $required = ['fecha', 'beneficio', 'area', 'observacion', 'firma_entrega', 'firma_recibe']; foreach ($required as $field) { if (empty($_POST[$field])) { header("Location: registrar.php?error=campo_requerido&campo=".$field); exit; } } // Validar que haya al menos un ítem if (empty($_POST['items']) || empty($_POST['cantidades'])) { header("Location: registrar.php?error=items_requeridos"); exit; } // Validar firmas if (!preg_match('/^data:image\/(png|jpeg);base64,/', $_POST['firma_entrega']) || !preg_match('/^data:image\/(png|jpeg);base64,/', $_POST['firma_recibe'])) { header("Location: registrar.php?error=formato_firma_invalido"); exit; } try { $conn = connection(); if ($conn->connect_error) { throw new Exception("Error de conexión a la base de datos: " . $conn->connect_error); } // Iniciar transacción $conn->begin_transaction(); $beneficio = $_POST['beneficio']; $proceso = $_POST['proceso'] ?? ''; $item_names = $_POST['items']; $cantidades = $_POST['cantidades']; // Validar que tengamos la misma cantidad de items y cantidades if (count($item_names) !== count($cantidades)) { throw new Exception("No coincide el número de items con las cantidades"); } // Determinar la tabla de items según el beneficio $tabla_items = ($beneficio === 'Beneficio Pollo') ? 'items' : 'items_Pavos'; // Preparar la consulta de verificación de items en la tabla correspondiente $stmt_check = $conn->prepare("SELECT item, descripcion FROM $tabla_items WHERE item = ?"); if (!$stmt_check) { throw new Exception("Error al preparar consulta de verificación: " . $conn->error); } // Preparar la consulta de inserción $sql = "INSERT INTO entregas (fecha, beneficio, proceso, item, descripcion, cantidad, area, observacion, firma_entrega, firma_recibe, tipoMV) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $stmt_insert = $conn->prepare($sql); if (!$stmt_insert) { throw new Exception("Error al preparar la consulta de inserción: " . $conn->error); } $tipoMV = 'Entrega'; $registros_insertados = 0; // Procesar cada ítem foreach ($item_names as $index => $item_name) { $cantidad = isset($cantidades[$index]) ? intval($cantidades[$index]) : 0; if ($cantidad <= 0) { continue; // Saltar items sin cantidad válida } // Verificar que el item existe en la tabla correcta $stmt_check->bind_param("s", $item_name); $stmt_check->execute(); $result = $stmt_check->get_result(); if ($item_data = $result->fetch_assoc()) { // Insertar registro individual $stmt_insert->bind_param("sssssssssss", $_POST['fecha'], $beneficio, $proceso, $item_data['item'], $item_data['descripcion'], $cantidad, $_POST['area'], $_POST['observacion'], $_POST['firma_entrega'], $_POST['firma_recibe'], $tipoMV ); if (!$stmt_insert->execute()) { throw new Exception("Error al insertar item " . $item_name . ": " . $stmt_insert->error); } $registros_insertados++; } else { throw new Exception("Item no encontrado en la tabla $tabla_items: " . $item_name); } } if ($registros_insertados === 0) { throw new Exception("No se insertó ningún registro válido"); } // Confirmar transacción $conn->commit(); // Redirigir con mensaje de éxito, incluyendo la cantidad de registros header("Location: registrar.php?success=1®istros=" . $registros_insertados); exit; } catch (Exception $e) { // Revertir transacción if (isset($conn)) { $conn->rollback(); } error_log("Error en guardar.php: " . $e->getMessage()); header("Location: registrar.php?error=error_bd&message=".urlencode($e->getMessage())); exit; } finally { if (isset($stmt_check) && $stmt_check !== false) { $stmt_check->close(); } if (isset($stmt_insert) && $stmt_insert !== false) { $stmt_insert->close(); } if (isset($conn)) { $conn->close(); } } ?>