FUNCION UPDATE STATUS
This commit is contained in:
@@ -774,30 +774,223 @@ function ajax_lista()
|
||||
}
|
||||
|
||||
function update_status() {
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['error'=>'No autorizado']);
|
||||
exit;
|
||||
http_response_code(401);
|
||||
echo json_encode(['error' => 'No autorizado']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$id = intval($_POST['id'] ?? 0);
|
||||
$status = intval($_POST['status'] ?? 0);
|
||||
|
||||
// 1) Conexión a la BD
|
||||
$conn = getConnection();
|
||||
|
||||
// 2) Actualizar el status en la tabla solicitud_importacion_factura
|
||||
$sql = "UPDATE dbo.solicitud_importacion_factura
|
||||
SET status=?
|
||||
WHERE id_solicitud=? AND id_importador=?";
|
||||
$params = [$status, $id, $_SESSION['usuario_id']];
|
||||
$stmt = sqlsrv_query($conn, $sql, $params);
|
||||
if ($stmt === false) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error'=>'Error al actualizar status']);
|
||||
exit;
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'Error al actualizar status']);
|
||||
exit;
|
||||
}
|
||||
echo json_encode(['success'=>true]);
|
||||
|
||||
// 3) Si el status actualizado es 2, hacer POST a /pedimentos/crearPedimento
|
||||
if ($status === 2) {
|
||||
// 3.1) Obtener o renovar el token de la API
|
||||
$token = getApiToken();
|
||||
if (!$token) {
|
||||
error_log("[update_status] No se pudo obtener token para crearPedimento");
|
||||
// Podemos optar por responder con éxito local y solo loguear el error:
|
||||
echo json_encode(['success' => true, 'warning' => 'No se generó pedimento: sin token']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 3.2) Leer de la BD todos los campos de la cabecera de la solicitud
|
||||
$sqlSel = "
|
||||
SELECT
|
||||
s.id_solicitud,
|
||||
s.id_importador,
|
||||
s.aduana,
|
||||
s.numero_pedimento,
|
||||
s.anexo22_apendice,
|
||||
s.numero_factura,
|
||||
s.fecha_factura,
|
||||
s.incoterm,
|
||||
s.pais_proveedor,
|
||||
s.tipo_moneda,
|
||||
s.valor_factura,
|
||||
s.vinculacion,
|
||||
s.transportista_id,
|
||||
s.chofer_id,
|
||||
s.foto_solicitud_url,
|
||||
s.proveedor_clave,
|
||||
s.created_at,
|
||||
s.updated_at
|
||||
-- Si existe columna ‘patente’ agréga aquí:
|
||||
, s.patente
|
||||
FROM dbo.solicitud_importacion_factura s
|
||||
WHERE s.id_solicitud = ? AND s.id_importador = ?
|
||||
";
|
||||
$stmtSel = sqlsrv_query($conn, $sqlSel, [$id, $_SESSION['usuario_id']]);
|
||||
if ($stmtSel === false) {
|
||||
error_log("[update_status] Error al consultar solicitud: " . print_r(sqlsrv_errors(), true));
|
||||
echo json_encode(['success' => true, 'warning' => 'Status actualizado, fallo al leer datos para pedimento']);
|
||||
exit;
|
||||
}
|
||||
$solicitud = sqlsrv_fetch_array($stmtSel, SQLSRV_FETCH_ASSOC);
|
||||
sqlsrv_free_stmt($stmtSel);
|
||||
|
||||
if (!$solicitud) {
|
||||
error_log("[update_status] No se encontró la solicitud para id={$id}");
|
||||
echo json_encode(['success' => true, 'warning' => 'Status actualizado, solicitud no encontrada para pedimento']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 3.3) Formatear fechas (si vienen como DateTime) antes de construir JSON
|
||||
// La API espera "YYYY-MM-DD" para fecha_factura y tipo ISO 8601 para created_at/updated_at.
|
||||
$fechaFactura = null;
|
||||
if ($solicitud['fecha_factura'] instanceof DateTime) {
|
||||
$fechaFactura = $solicitud['fecha_factura']->format('Y-m-d');
|
||||
} else {
|
||||
$fechaFactura = $solicitud['fecha_factura']; // en caso de que ya venga como string
|
||||
}
|
||||
|
||||
$createdAt = null;
|
||||
if ($solicitud['created_at'] instanceof DateTime) {
|
||||
// Por ejemplo: "2025-05-16T07:48:15"
|
||||
$createdAt = $solicitud['created_at']->format('Y-m-d\TH:i:s');
|
||||
} else {
|
||||
$createdAt = $solicitud['created_at'];
|
||||
}
|
||||
|
||||
$updatedAt = null;
|
||||
if ($solicitud['updated_at'] instanceof DateTime) {
|
||||
$updatedAt = $solicitud['updated_at']->format('Y-m-d\TH:i:s');
|
||||
} else {
|
||||
$updatedAt = $solicitud['updated_at'];
|
||||
}
|
||||
|
||||
// 3.4) Obtener todas las partidas asociadas a esta solicitud
|
||||
$sqlPart = "
|
||||
SELECT
|
||||
p.id_partida,
|
||||
p.id_solicitud,
|
||||
p.descripcion,
|
||||
p.creado_en,
|
||||
p.cantidad_comercial,
|
||||
p.cantidad_tarifa,
|
||||
p.valor_factura,
|
||||
p.peso_bruto,
|
||||
p.unidad_comercial_id,
|
||||
p.tasa_preferencial
|
||||
FROM dbo.solicitud_importacion_partidas p
|
||||
WHERE p.id_solicitud = ?
|
||||
ORDER BY p.id_partida
|
||||
";
|
||||
$stmtPart = sqlsrv_query($conn, $sqlPart, [$id]);
|
||||
if ($stmtPart === false) {
|
||||
error_log("[update_status] Error al consultar partidas: " . print_r(sqlsrv_errors(), true));
|
||||
echo json_encode(['success' => true, 'warning' => 'Status actualizado, fallo al leer partidas para pedimento']);
|
||||
exit;
|
||||
}
|
||||
$partidas = [];
|
||||
while ($row = sqlsrv_fetch_array($stmtPart, SQLSRV_FETCH_ASSOC)) {
|
||||
// Formatear creado_en si es DateTime
|
||||
if ($row['creado_en'] instanceof DateTime) {
|
||||
$row['creado_en'] = $row['creado_en']->format('Y-m-d\TH:i:s');
|
||||
}
|
||||
// Asegurarnos de que los valores numéricos sean del tipo correcto
|
||||
$row['cantidad_comercial'] = floatval($row['cantidad_comercial']);
|
||||
$row['cantidad_tarifa'] = floatval($row['cantidad_tarifa']);
|
||||
$row['valor_factura'] = floatval($row['valor_factura']);
|
||||
$row['peso_bruto'] = floatval($row['peso_bruto']);
|
||||
$row['unidad_comercial_id']= intval($row['unidad_comercial_id']);
|
||||
$partidas[] = $row;
|
||||
}
|
||||
sqlsrv_free_stmt($stmtPart);
|
||||
|
||||
// 3.5) Construir el arreglo PHP con la misma estructura JSON que envías
|
||||
$payload = [
|
||||
"id_solicitud" => intval($solicitud['id_solicitud']),
|
||||
"id_importador" => intval($solicitud['id_importador']),
|
||||
"aduana" => strval($solicitud['aduana']),
|
||||
// Si en tu tabla tienes “patente”, la incluyes; si no, puedes dejar cadena vacía o null
|
||||
"patente" => isset($solicitud['patente']) ? strval($solicitud['patente']) : "",
|
||||
"anexo22_apendice" => strval($solicitud['anexo22_apendice']),
|
||||
"numero_factura" => strval($solicitud['numero_factura']),
|
||||
"fecha_factura" => $fechaFactura,
|
||||
// Si tu tabla tiene columna "numero_pedimento", úsala directamente
|
||||
"numero_pedimento" => isset($solicitud['numero_pedimento'])
|
||||
? strval($solicitud['numero_pedimento'])
|
||||
: "",
|
||||
"incoterm" => strval($solicitud['incoterm']),
|
||||
"pais_proveedor" => strval($solicitud['pais_proveedor']),
|
||||
"tipo_moneda" => strval($solicitud['tipo_moneda']),
|
||||
"valor_factura" => floatval($solicitud['valor_factura']),
|
||||
"vinculacion" => intval($solicitud['vinculacion']),
|
||||
"transportista_id" => intval($solicitud['transportista_id']),
|
||||
"status" => intval($solicitud['status']), // =2
|
||||
"created_at" => $createdAt,
|
||||
"updated_at" => $updatedAt,
|
||||
// Si en BD se usa “transporte_id” en lugar de “transportista_id”, ajústalo. Aquí lo ponemos null si no existe.
|
||||
"transporte_id" => null,
|
||||
"chofer_id" => intval($solicitud['chofer_id']),
|
||||
"foto_solicitud_url"=> strval($solicitud['foto_solicitud_url']),
|
||||
"proveedor_clave" => strval($solicitud['proveedor_clave']),
|
||||
"partidas" => $partidas
|
||||
];
|
||||
|
||||
// 3.6) Convertir a JSON
|
||||
$jsonPayload = json_encode($payload);
|
||||
|
||||
// 3.7) Preparar cURL para hacer POST a /pedimentos/crearPedimento
|
||||
$apiBase = rtrim($_ENV['API_URL'] ?? '', '/');
|
||||
$urlPed = $apiBase . '/pedimentos/crearPedimento';
|
||||
|
||||
$ch = curl_init($urlPed);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_CUSTOMREQUEST => 'POST',
|
||||
CURLOPT_HTTPHEADER => [
|
||||
"Authorization: $token",
|
||||
'Content-Type: application/json'
|
||||
],
|
||||
CURLOPT_POSTFIELDS => $jsonPayload,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_TIMEOUT => 10,
|
||||
]);
|
||||
$respPed = curl_exec($ch);
|
||||
$httpPed = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$curlErr = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
// 3.8) Verificar respuesta del endpoint pedimentos
|
||||
if ($httpPed === 201 || $httpPed === 200) {
|
||||
// Suponiendo que el endpoint devuelve 201 o 200 cuando se crea correctamente
|
||||
error_log("[update_status] Pedimento creado con éxito para solicitud $id → HTTP $httpPed → $respPed");
|
||||
echo json_encode(['success' => true, 'pedimento' => json_decode($respPed, true)]);
|
||||
exit;
|
||||
} else {
|
||||
error_log("[update_status] Error al crear pedimento (HTTP $httpPed): $respPed · cURL error: $curlErr");
|
||||
// Devolvemos estado local ok, pero avisamos que falló el POST
|
||||
echo json_encode([
|
||||
'success' => true,
|
||||
'warning' => "Status actualizado, pero fallo al crear pedimento (HTTP $httpPed)"
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
// 4) Si el status no es 2, devolvemos normal
|
||||
echo json_encode(['success' => true]);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
// Función para generar el PDF
|
||||
use Dompdf\Dompdf;
|
||||
use Dompdf\Options;
|
||||
|
||||
Reference in New Issue
Block a user