diff --git a/.env b/.env index e427a09..b16b6a0 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ -DB_HOST=DESKTOP-22T88B6 +DB_HOST=localhost DB_DATABASE=Importaciones_HC DB_USERNAME=sa DB_PASSWORD=Soluciones01 diff --git a/app/controllers/solicitud_importacion.php b/app/controllers/solicitud_importacion.php index 04be6c0..458a38c 100644 --- a/app/controllers/solicitud_importacion.php +++ b/app/controllers/solicitud_importacion.php @@ -310,8 +310,22 @@ function editar() { // Partidas existentes $partidas=[]; - $stmtPar=sqlsrv_query($conn,"SELECT id_partida,descripcion,precio_unitario FROM dbo.solicitud_importacion_partidas WHERE id_solicitud=? ORDER BY id_partida",[(int)$id_solicitud]); - while($r=sqlsrv_fetch_array($stmtPar,SQLSRV_FETCH_ASSOC)) $partidas[]=$r; + $stmtPar = sqlsrv_query($conn, + "SELECT + id_partida, + descripcion, + cantidad_comercial, + cantidad_tarifa, + valor_factura, + peso_bruto, + unidad_comercial_id, + tasa_preferencial + FROM dbo.solicitud_importacion_partidas + WHERE id_solicitud=? + ORDER BY id_partida", + [(int)$id_solicitud] +); +while($r=sqlsrv_fetch_array($stmtPar,SQLSRV_FETCH_ASSOC)) $partidas[]=$r; include __DIR__ . '/../../views/solicitud_importacion/editar.php'; } @@ -320,27 +334,158 @@ function editar() { * Procesa la actualización de una factura y sus partidas */ function actualizar() { - if (!($_SESSION['usuario_id'] ?? false)) die("⚠️ No autorizado."); - $id_solicitud=(int)($_POST['id_solicitud']??0); - // Validaciones similares a guardar() - // ... omito por brevedad, copia de guardar() + UPDATE ... + session_start(); + if (!($_SESSION['usuario_id'] ?? false)) { + die("⚠️ No autorizado."); + } - $conn=getConnection(); - // Actualizar factura - $sqlU = "UPDATE dbo.solicitud_importacion_factura SET - aduana=?,anexo22_apendice=?,numero_factura=?,fecha_factura=?,incoterm=?,pais_proveedor=?,tipo_moneda=?,valor_factura=?,vinculacion=?,transportista_id=?,chofer_id=?,foto_solicitud_url=?,status=?,updated_at=GETDATE() - WHERE id_solicitud=? AND id_importador=?"; - // Ejecutar UPDATE con parámetros - // ... + $id_solicitud = (int)($_POST['id_solicitud'] ?? 0); + if ($id_solicitud <= 0) { + die("❌ ID inválido."); + } - // Borrar partidas previas - sqlsrv_query($conn,"DELETE FROM dbo.solicitud_importacion_partidas WHERE id_solicitud=?",[$id_solicitud]); - // Reinsertar partidas igual que guardar() - // ... + // 1) Conexión + $conn = getConnection(); - header('Location: /IMPORTADORES/solicitud_importacion/lista?updated=ok'); exit; + // 2) Obtener URL de foto actual desde BD para conservar si no suben nueva + $fotoUrl = null; + $stmtFoto = sqlsrv_query( + $conn, + "SELECT foto_solicitud_url + FROM dbo.solicitud_importacion_factura + WHERE id_solicitud = ? AND id_importador = ?", + [ $id_solicitud, $_SESSION['usuario_id'] ] + ); + if ($stmtFoto !== false && ($row = sqlsrv_fetch_array($stmtFoto, SQLSRV_FETCH_ASSOC))) { + $fotoUrl = $row['foto_solicitud_url']; + } + + // 3) Procesar posible nueva foto + if (!empty($_FILES['foto_solicitud']['tmp_name']) + && $_FILES['foto_solicitud']['error'] === UPLOAD_ERR_OK) { + $ext = pathinfo($_FILES['foto_solicitud']['name'], PATHINFO_EXTENSION); + $dest = __DIR__ . '/../../public/uploads/solicitud_' . uniqid() . ".$ext"; + if (!is_dir(dirname($dest))) { + mkdir(dirname($dest), 0755, true); + } + if (move_uploaded_file($_FILES['foto_solicitud']['tmp_name'], $dest)) { + $fotoUrl = "/IMPORTADORES/public/uploads/" . basename($dest); + } + } + + // 4) Extraer campos del formulario + $aduana_seccion = $_POST['anexo22_apendice'] ?? null; + $num_factura = trim($_POST['numero_factura'] ?? ''); + $fecha = $_POST['fecha_factura'] ?? null; + $incoterm = $_POST['incoterm'] ?? null; + $pais_proveedor = $_POST['pais_proveedor'] ?? null; + $tipo_moneda = $_POST['tipo_moneda'] ?? null; + $valor_factura = $_POST['valor_factura'] ?? null; + $vinculacion = $_POST['vinculacion'] ?? 0; + $transportista_id = (int)($_POST['transportista_id'] ?? 0); + $chofer_id = (int)($_POST['chofer_id'] ?? 0); + $status = isset($_POST['status']) ? 1 : 0; + + // 5) Validar obligatorios + if (empty($num_factura) || empty($fecha) || $transportista_id <= 0 || $chofer_id <= 0) { + die("❌ Faltan campos obligatorios."); + } + + // 6) UPDATE de la cabecera + $sqlU = " + UPDATE dbo.solicitud_importacion_factura + SET aduana = ?, + anexo22_apendice = ?, + numero_factura = ?, + fecha_factura = ?, + incoterm = ?, + pais_proveedor = ?, + tipo_moneda = ?, + valor_factura = ?, + vinculacion = ?, + transportista_id = ?, + chofer_id = ?, + foto_solicitud_url = ?, + status = ?, + updated_at = GETDATE() + WHERE id_solicitud = ? + AND id_importador = ? + "; + $paramsU = [ + $aduana_seccion, + $aduana_seccion, + $num_factura, + $fecha, + $incoterm, + $pais_proveedor, + $tipo_moneda, + $valor_factura, + $vinculacion, + $transportista_id, + $chofer_id, + $fotoUrl, + $status, + $id_solicitud, + $_SESSION['usuario_id'] + ]; + $stmtU = sqlsrv_query($conn, $sqlU, $paramsU); + if ($stmtU === false) { + die("❌ Error ejecutando UPDATE: " . print_r(sqlsrv_errors(), true)); + } + + // 7) Borrar partidas anteriores + $del = sqlsrv_query( + $conn, + "DELETE FROM dbo.solicitud_importacion_partidas WHERE id_solicitud = ?", + [ $id_solicitud ] + ); + if ($del === false) { + die("❌ Error borrando partidas previas: " . print_r(sqlsrv_errors(), true)); + } + + // 8) Reinsertar partidas desde el formulario + if (!empty($_POST['partidas']) && is_array($_POST['partidas'])) { + $sqlP = " + INSERT INTO dbo.solicitud_importacion_partidas + (id_solicitud, descripcion, cantidad_comercial, cantidad_tarifa, + valor_factura, peso_bruto, unidad_comercial_id, tasa_preferencial) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + "; + foreach ($_POST['partidas'] as $i => $p) { + $desc = trim($p['descripcion'] ?? ''); + $cantCom = floatval($p['cantidad_comercial'] ?? 0); + $cantTar = floatval($p['cantidad_tarifa'] ?? 0); + $valPart = floatval($p['valor_factura'] ?? 0); + $peso = floatval($p['peso_bruto'] ?? 0); + $umId = intval($p['unidad_comercial_id'] ?? 0) ?: null; + $tasaPref = trim($p['tasa_preferencial'] ?? ''); + + // Sólo inserta si descripción y cantidad comercial válidos + if ($desc !== '' && $cantCom > 0) { + $paramsP = [ + $id_solicitud, + $desc, + $cantCom, + $cantTar, + $valPart, + $peso, + $umId, + $tasaPref + ]; + $stmtP = sqlsrv_query($conn, $sqlP, $paramsP); + if ($stmtP === false) { + die("❌ Error insertando partida #$i: " . print_r(sqlsrv_errors(), true)); + } + } + } + } + + // 9) Redirigir + header('Location: /IMPORTADORES/solicitud_importacion/lista?updated=ok'); + exit; } + /** * “Soft-delete” de una factura */ diff --git a/emails_tables.txt b/emails_tables.txt index 522cc39..45ca74c 100644 --- a/emails_tables.txt +++ b/emails_tables.txt @@ -8,6 +8,7 @@ CREATE TABLE verificaciones ( FOREIGN KEY (id_usuario) REFERENCES usuarios_sistema(id_usuario) ); + CREATE TABLE correo_extra ( id INT IDENTITY(1,1) PRIMARY KEY, id_usuario INT NOT NULL, diff --git a/views/expediente/subir.php b/views/expediente/subir.php index b40f18d..e31357f 100644 --- a/views/expediente/subir.php +++ b/views/expediente/subir.php @@ -3,7 +3,9 @@