This commit is contained in:
2025-06-09 08:50:28 -06:00
3 changed files with 88 additions and 72 deletions

View File

@@ -820,7 +820,6 @@ function update_status() {
$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;
}
@@ -845,9 +844,8 @@ function update_status() {
s.foto_solicitud_url,
s.proveedor_clave,
s.created_at,
s.updated_at
-- Si existe columna patente agréga aquí:
, s.patente
s.updated_at,
'9999' as patente
FROM dbo.solicitud_importacion_factura s
WHERE s.id_solicitud = ? AND s.id_importador = ?
";
@@ -867,28 +865,17 @@ function update_status() {
}
// 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
}
$fechaFactura = ($solicitud['fecha_factura'] instanceof DateTime)
? $solicitud['fecha_factura']->format('Y-m-d')
: $solicitud['fecha_factura'];
$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'];
}
$createdAt = ($solicitud['created_at'] instanceof DateTime)
? $solicitud['created_at']->format('Y-m-d\TH:i:s')
: $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'];
}
$updatedAt = ($solicitud['updated_at'] instanceof DateTime)
? $solicitud['updated_at']->format('Y-m-d\TH:i:s')
: $solicitud['updated_at'];
// 3.4) Obtener todas las partidas asociadas a esta solicitud
$sqlPart = "
@@ -915,16 +902,14 @@ function update_status() {
}
$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']);
$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);
@@ -934,36 +919,29 @@ function update_status() {
"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']) : "",
"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'])
: "",
"numero_pedimento" => "", // La API lo rellenará
"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
// 3.6) Preparar cURL para hacer POST a /pedimentos/crearPedimento
$apiBase = rtrim($_ENV['API_URL'] ?? '', '/');
$urlPed = $apiBase . '/pedimentos/crearPedimento';
@@ -983,15 +961,39 @@ function update_status() {
$curlErr = curl_error($ch);
curl_close($ch);
// 3.8) Verificar respuesta del endpoint pedimentos
// 3.7) Verificar respuesta del endpoint pedimentos
if ($httpPed === 201 || $httpPed === 200) {
// Suponiendo que el endpoint devuelve 201 o 200 cuando se crea correctamente
$decoded = json_decode($respPed, true);
// Si existe PEDIMENTO dentro de la clave 'pedimento'
if (isset($decoded['pedimento']['PEDIMENTO'])) {
$numeroPedimento = $decoded['pedimento']['PEDIMENTO'];
// 3.8) Actualizar localmente el campo numero_pedimento
$sqlUpdPed = "
UPDATE dbo.solicitud_importacion_factura
SET numero_pedimento = ?
WHERE id_solicitud = ?
AND id_importador = ?
";
$stmtUpdPed = sqlsrv_query(
$conn,
$sqlUpdPed,
[$numeroPedimento, $id, $_SESSION['usuario_id']]
);
if ($stmtUpdPed === false) {
error_log("[update_status] Error al actualizar numero_pedimento en BD: " . print_r(sqlsrv_errors(), true));
}
}
error_log("[update_status] Pedimento creado con éxito para solicitud $id → HTTP $httpPed$respPed");
echo json_encode(['success' => true, 'pedimento' => json_decode($respPed, true)]);
echo json_encode([
'success' => true,
'pedimento' => $decoded['pedimento'],
'numeroPedimentoLocal' => $numeroPedimento
]);
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)"