CAMBIOS PARA EDITAR PROVEEDOR, CAMBIO DE SELECTOR CLAVE PROVEEDOR
This commit is contained in:
@@ -805,7 +805,6 @@ function update_status() {
|
|||||||
$token = getApiToken();
|
$token = getApiToken();
|
||||||
if (!$token) {
|
if (!$token) {
|
||||||
error_log("[update_status] No se pudo obtener token para crearPedimento");
|
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']);
|
echo json_encode(['success' => true, 'warning' => 'No se generó pedimento: sin token']);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
@@ -830,9 +829,8 @@ function update_status() {
|
|||||||
s.foto_solicitud_url,
|
s.foto_solicitud_url,
|
||||||
s.proveedor_clave,
|
s.proveedor_clave,
|
||||||
s.created_at,
|
s.created_at,
|
||||||
s.updated_at
|
s.updated_at,
|
||||||
-- Si existe columna ‘patente’ agréga aquí:
|
'9999' as patente
|
||||||
, s.patente
|
|
||||||
FROM dbo.solicitud_importacion_factura s
|
FROM dbo.solicitud_importacion_factura s
|
||||||
WHERE s.id_solicitud = ? AND s.id_importador = ?
|
WHERE s.id_solicitud = ? AND s.id_importador = ?
|
||||||
";
|
";
|
||||||
@@ -852,28 +850,17 @@ function update_status() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 3.3) Formatear fechas (si vienen como DateTime) antes de construir JSON
|
// 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 = ($solicitud['fecha_factura'] instanceof DateTime)
|
||||||
$fechaFactura = null;
|
? $solicitud['fecha_factura']->format('Y-m-d')
|
||||||
if ($solicitud['fecha_factura'] instanceof DateTime) {
|
: $solicitud['fecha_factura'];
|
||||||
$fechaFactura = $solicitud['fecha_factura']->format('Y-m-d');
|
|
||||||
} else {
|
|
||||||
$fechaFactura = $solicitud['fecha_factura']; // en caso de que ya venga como string
|
|
||||||
}
|
|
||||||
|
|
||||||
$createdAt = null;
|
$createdAt = ($solicitud['created_at'] instanceof DateTime)
|
||||||
if ($solicitud['created_at'] instanceof DateTime) {
|
? $solicitud['created_at']->format('Y-m-d\TH:i:s')
|
||||||
// Por ejemplo: "2025-05-16T07:48:15"
|
: $solicitud['created_at'];
|
||||||
$createdAt = $solicitud['created_at']->format('Y-m-d\TH:i:s');
|
|
||||||
} else {
|
|
||||||
$createdAt = $solicitud['created_at'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$updatedAt = null;
|
$updatedAt = ($solicitud['updated_at'] instanceof DateTime)
|
||||||
if ($solicitud['updated_at'] instanceof DateTime) {
|
? $solicitud['updated_at']->format('Y-m-d\TH:i:s')
|
||||||
$updatedAt = $solicitud['updated_at']->format('Y-m-d\TH:i:s');
|
: $solicitud['updated_at'];
|
||||||
} else {
|
|
||||||
$updatedAt = $solicitud['updated_at'];
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3.4) Obtener todas las partidas asociadas a esta solicitud
|
// 3.4) Obtener todas las partidas asociadas a esta solicitud
|
||||||
$sqlPart = "
|
$sqlPart = "
|
||||||
@@ -900,16 +887,14 @@ function update_status() {
|
|||||||
}
|
}
|
||||||
$partidas = [];
|
$partidas = [];
|
||||||
while ($row = sqlsrv_fetch_array($stmtPart, SQLSRV_FETCH_ASSOC)) {
|
while ($row = sqlsrv_fetch_array($stmtPart, SQLSRV_FETCH_ASSOC)) {
|
||||||
// Formatear creado_en si es DateTime
|
|
||||||
if ($row['creado_en'] instanceof DateTime) {
|
if ($row['creado_en'] instanceof DateTime) {
|
||||||
$row['creado_en'] = $row['creado_en']->format('Y-m-d\TH:i:s');
|
$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_comercial'] = floatval($row['cantidad_comercial']);
|
$row['cantidad_tarifa'] = floatval($row['cantidad_tarifa']);
|
||||||
$row['cantidad_tarifa'] = floatval($row['cantidad_tarifa']);
|
$row['valor_factura'] = floatval($row['valor_factura']);
|
||||||
$row['valor_factura'] = floatval($row['valor_factura']);
|
$row['peso_bruto'] = floatval($row['peso_bruto']);
|
||||||
$row['peso_bruto'] = floatval($row['peso_bruto']);
|
$row['unidad_comercial_id'] = intval($row['unidad_comercial_id']);
|
||||||
$row['unidad_comercial_id']= intval($row['unidad_comercial_id']);
|
|
||||||
$partidas[] = $row;
|
$partidas[] = $row;
|
||||||
}
|
}
|
||||||
sqlsrv_free_stmt($stmtPart);
|
sqlsrv_free_stmt($stmtPart);
|
||||||
@@ -919,36 +904,29 @@ function update_status() {
|
|||||||
"id_solicitud" => intval($solicitud['id_solicitud']),
|
"id_solicitud" => intval($solicitud['id_solicitud']),
|
||||||
"id_importador" => intval($solicitud['id_importador']),
|
"id_importador" => intval($solicitud['id_importador']),
|
||||||
"aduana" => strval($solicitud['aduana']),
|
"aduana" => strval($solicitud['aduana']),
|
||||||
// Si en tu tabla tienes “patente”, la incluyes; si no, puedes dejar cadena vacía o null
|
"patente" => strval($solicitud['patente']),
|
||||||
"patente" => isset($solicitud['patente']) ? strval($solicitud['patente']) : "",
|
|
||||||
"anexo22_apendice" => strval($solicitud['anexo22_apendice']),
|
"anexo22_apendice" => strval($solicitud['anexo22_apendice']),
|
||||||
"numero_factura" => strval($solicitud['numero_factura']),
|
"numero_factura" => strval($solicitud['numero_factura']),
|
||||||
"fecha_factura" => $fechaFactura,
|
"fecha_factura" => $fechaFactura,
|
||||||
// Si tu tabla tiene columna "numero_pedimento", úsala directamente
|
"numero_pedimento" => "", // La API lo rellenará
|
||||||
"numero_pedimento" => isset($solicitud['numero_pedimento'])
|
|
||||||
? strval($solicitud['numero_pedimento'])
|
|
||||||
: "",
|
|
||||||
"incoterm" => strval($solicitud['incoterm']),
|
"incoterm" => strval($solicitud['incoterm']),
|
||||||
"pais_proveedor" => strval($solicitud['pais_proveedor']),
|
"pais_proveedor" => strval($solicitud['pais_proveedor']),
|
||||||
"tipo_moneda" => strval($solicitud['tipo_moneda']),
|
"tipo_moneda" => strval($solicitud['tipo_moneda']),
|
||||||
"valor_factura" => floatval($solicitud['valor_factura']),
|
"valor_factura" => floatval($solicitud['valor_factura']),
|
||||||
"vinculacion" => intval($solicitud['vinculacion']),
|
"vinculacion" => intval($solicitud['vinculacion']),
|
||||||
"transportista_id" => intval($solicitud['transportista_id']),
|
"transportista_id" => intval($solicitud['transportista_id']),
|
||||||
"status" => intval($solicitud['status']), // =2
|
|
||||||
"created_at" => $createdAt,
|
"created_at" => $createdAt,
|
||||||
"updated_at" => $updatedAt,
|
"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,
|
"transporte_id" => null,
|
||||||
"chofer_id" => intval($solicitud['chofer_id']),
|
"chofer_id" => intval($solicitud['chofer_id']),
|
||||||
"foto_solicitud_url"=> strval($solicitud['foto_solicitud_url']),
|
"foto_solicitud_url"=> strval($solicitud['foto_solicitud_url']),
|
||||||
"proveedor_clave" => strval($solicitud['proveedor_clave']),
|
"proveedor_clave" => strval($solicitud['proveedor_clave']),
|
||||||
"partidas" => $partidas
|
"partidas" => $partidas
|
||||||
];
|
];
|
||||||
|
|
||||||
// 3.6) Convertir a JSON
|
|
||||||
$jsonPayload = json_encode($payload);
|
$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'] ?? '', '/');
|
$apiBase = rtrim($_ENV['API_URL'] ?? '', '/');
|
||||||
$urlPed = $apiBase . '/pedimentos/crearPedimento';
|
$urlPed = $apiBase . '/pedimentos/crearPedimento';
|
||||||
|
|
||||||
@@ -968,15 +946,39 @@ function update_status() {
|
|||||||
$curlErr = curl_error($ch);
|
$curlErr = curl_error($ch);
|
||||||
curl_close($ch);
|
curl_close($ch);
|
||||||
|
|
||||||
// 3.8) Verificar respuesta del endpoint pedimentos
|
// 3.7) Verificar respuesta del endpoint pedimentos
|
||||||
if ($httpPed === 201 || $httpPed === 200) {
|
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");
|
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;
|
exit;
|
||||||
} else {
|
} else {
|
||||||
error_log("[update_status] Error al crear pedimento (HTTP $httpPed): $respPed · cURL error: $curlErr");
|
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([
|
echo json_encode([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'warning' => "Status actualizado, pero fallo al crear pedimento (HTTP $httpPed)"
|
'warning' => "Status actualizado, pero fallo al crear pedimento (HTTP $httpPed)"
|
||||||
|
|||||||
@@ -269,6 +269,7 @@
|
|||||||
// ✅ 2. FUNCIÓN PARA CARGAR PROVEEDORES (CON PROMESA)
|
// ✅ 2. FUNCIÓN PARA CARGAR PROVEEDORES (CON PROMESA)
|
||||||
function cargarProveedores() {
|
function cargarProveedores() {
|
||||||
const proveedorEl = document.getElementById('proveedor_id');
|
const proveedorEl = document.getElementById('proveedor_id');
|
||||||
|
// Obtenemos la cadena con la ID del proveedor guardado
|
||||||
const proveedorActual = '<?= htmlspecialchars($proveedor_clave_actual ?? '') ?>';
|
const proveedorActual = '<?= htmlspecialchars($proveedor_clave_actual ?? '') ?>';
|
||||||
|
|
||||||
return fetch('/IMPORTADORES/solicitud_importacion/ajax_proveedores')
|
return fetch('/IMPORTADORES/solicitud_importacion/ajax_proveedores')
|
||||||
@@ -287,8 +288,8 @@
|
|||||||
opt.value = item.id;
|
opt.value = item.id;
|
||||||
opt.textContent = item.text;
|
opt.textContent = item.text;
|
||||||
|
|
||||||
// ✅ Pre-seleccionar si coincide con el proveedor actual
|
// Comparar forzando a cadena para que coincida con proveedorActual
|
||||||
if (item.id === proveedorActual && proveedorActual !== '') {
|
if (String(item.id) === proveedorActual && proveedorActual !== '') {
|
||||||
opt.selected = true;
|
opt.selected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -395,4 +396,4 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -151,29 +151,42 @@
|
|||||||
// $row.find('.status-select').prop('disabled', disable);
|
// $row.find('.status-select').prop('disabled', disable);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Al cambiar el select de status
|
// Al cambiar el select de status
|
||||||
$('#tabla-solicitudes').on('change', '.status-select', function () {
|
$('#tabla-solicitudes').on('change', '.status-select', function () {
|
||||||
const $sel = $(this);
|
const $sel = $(this);
|
||||||
const id = $sel.data('id');
|
const id = $sel.data('id');
|
||||||
const status = $sel.val();
|
const status = $sel.val();
|
||||||
const $row = $sel.closest('tr');
|
const $row = $sel.closest('tr');
|
||||||
// Bloquear botones localmente
|
// Bloquear botones localmente
|
||||||
updateRowStatus($row, status);
|
updateRowStatus($row, status);
|
||||||
|
|
||||||
|
// Llamada AJAX
|
||||||
|
$.post(
|
||||||
|
'/IMPORTADORES/solicitud_importacion/update_status',
|
||||||
|
{ id: id, status: status },
|
||||||
|
null,
|
||||||
|
'json'
|
||||||
|
)
|
||||||
|
.done(function(res) {
|
||||||
|
if (!res.success) {
|
||||||
|
Swal.fire('Error', 'No se pudo actualizar status', 'error');
|
||||||
|
} else if (res.numeroPedimentoLocal) {
|
||||||
|
// Si vino numeroPedimentoLocal, mostramos alerta específica
|
||||||
|
Swal.fire(
|
||||||
|
'Importación solicitada',
|
||||||
|
'Se generó el número de pedimento: ' + res.numeroPedimentoLocal,
|
||||||
|
'success'
|
||||||
|
);
|
||||||
|
// Además podrías actualizar en la tabla la celda de "Pedimento" si quieres:
|
||||||
|
$row.find('td:nth-child(4)').text(res.numeroPedimentoLocal);
|
||||||
|
}
|
||||||
|
// Si success pero no viene numeroPedimentoLocal, no hacemos nada especial.
|
||||||
|
})
|
||||||
|
.fail(function() {
|
||||||
|
Swal.fire('Error', 'No se pudo conectar al servidor', 'error');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// Llamada AJAX
|
|
||||||
$.post(
|
|
||||||
'/IMPORTADORES/solicitud_importacion/update_status',
|
|
||||||
{ id: id, status: status },
|
|
||||||
function(res) {
|
|
||||||
if (!res.success) {
|
|
||||||
Swal.fire('Error','No se pudo actualizar status','error');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'json'
|
|
||||||
).fail(() => {
|
|
||||||
Swal.fire('Error','No se pudo conectar al servidor','error');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Al cargar, aplica bloqueo si ya está en “Solicitar importación”
|
// Al cargar, aplica bloqueo si ya está en “Solicitar importación”
|
||||||
$('#tabla-solicitudes tbody tr').each(function () {
|
$('#tabla-solicitudes tbody tr').each(function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user