Productos frecuenes

This commit is contained in:
2025-07-16 12:43:21 -06:00
parent 8a3e174894
commit cf86fc21cd
10 changed files with 981 additions and 624 deletions

View File

@@ -5,8 +5,61 @@ require_once __DIR__ . '/../../config/database.php';
require_once __DIR__ . '/../../vendor/autoload.php';
// 2) Carga nuestro helper de entorno y dispara la carga de .env
require_once __DIR__ . '/../helpers/env.php';
loadEnv();
/** Obtiene (y cachea en sesión) el JWT de la API usando las credenciales de $_ENV **/
/** Obtiene (y cachea) el JWT de la API usando credenciales de $_ENV
* Gestiona expiración: asume 1 hora de vida y renueva si ha pasado. **/
function getApiToken(): ?string
{
// Duración en segundos del token (60 min)
$ttl = 3600;
// 1) Si ya tenemos token y no ha expirado, lo devolvemos
if (!empty($_SESSION['api_token']) && !empty($_SESSION['api_token_time'])) {
$age = time() - $_SESSION['api_token_time'];
if ($age < $ttl) {
error_log("[getApiToken] Usando token en caché (edad: {$age}s)");
return $_SESSION['api_token'];
}
error_log("[getApiToken] Token expirado (edad: {$age}s), obteniendo uno nuevo");
}
// 2) Sí o sí hacemos login en la API
$url = rtrim($_ENV['API_URL'] ?? '', '/') . '/auth/login';
$user = $_ENV['API_USER'] ?? '';
$pass = $_ENV['API_PASS'] ?? '';
$body = json_encode(['username' => $user, 'password' => $pass]);
error_log("[getApiToken] POST $url");
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => $body,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
]);
$resp = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
error_log("[getApiToken] HTTP $http");
if ($http === 200 && ($data = json_decode($resp, true)) && !empty($data['token'])) {
// 3) Guardamos token y tiempo actual
$_SESSION['api_token'] = $data['token'];
$_SESSION['api_token_time'] = time();
return $data['token'];
}
// 4) Si no se pudo obtener, devolvemos null
error_log('[getApiToken] No se pudo obtener token de la API');
return null;
}
/** GET /IMPORTADORES/productos_frecuentes
* Muestra el listado **/
function index()
@@ -14,6 +67,90 @@ function index()
lista();
}
function lista()
{
if (empty($_SESSION['usuario_id'])) {
header('Location: /IMPORTADORES/login');
exit;
}
$conn = getConnection();
// === Obtener proveedores desde API ===
$token = getApiToken();
$proveedoresApi = [];
if ($token) {
$apiBase = rtrim($_ENV['API_URL'] ?? '', '/');
$url = $apiBase . '/proveedores';
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", 'Accept: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
]);
$resp = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status === 200 && ($json = json_decode($resp, true)) && is_array($json)) {
foreach ($json as $p) {
$clave = $p['Clave'] ?? '';
$nombre = $p['Nombre'] ?? '';
if ($clave) {
$proveedoresApi[$clave] = $nombre;
}
}
}
}
// === Consulta de productos frecuentes ===
$sql = "SELECT
pf.id_producto_frecuente,
pf.sinonimo,
pf.fraccion,
pf.nico,
pf.numero_parte,
pf.proveedor AS proveedor_guardado,
u.descripcion AS unidad_de_medida,
por.nombre AS pais_origen_destino,
pc.nombre AS pais_comprador_vendedor,
pf.uso_mercancia,
pf.estado_mercancia,
pf.preferencia,
pf.frecuencia_uso
FROM dbo.productos_frecuentes pf
LEFT JOIN dbo.unidades_medida_apendice7 u
ON pf.umc_id = u.id
LEFT JOIN dbo.paises por
ON pf.pais_origen_destino = por.nombre
LEFT JOIN dbo.paises pc
ON pf.pais_comprador_vendedor = pc.nombre
WHERE pf.id_importador = ?
AND pf.status = 1
ORDER BY pf.fecha_alta DESC
";
$stmt = sqlsrv_query($conn, $sql, [$_SESSION['usuario_id']]);
if ($stmt === false) {
echo '<pre>', print_r(sqlsrv_errors(), true), '</pre>';
exit;
}
// === Construir arreglo de productos con nombre de proveedor ===
$productos = [];
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$clave = $row['proveedor_guardado'];
$row['nombre_proveedor'] = $proveedoresApi[$clave] ?? 'N/D';
$productos[] = $row;
}
// === Cargar la vista con productos y nombres de proveedor ===
include __DIR__ . '/../../views/productos_frecuentes/lista.php';
}
function ajax_paises()
{
// Sólo importadores pueden usarlo
@@ -58,7 +195,7 @@ function ajax_proveedores()
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: $token", 'Accept: application/json'],
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", 'Accept: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
]);
@@ -84,14 +221,30 @@ function ajax_proveedores()
exit;
}
function lista()
function ajax_unidades()
{
if (empty($_SESSION['usuario_id'])) {
header('Location: /IMPORTADORES/login');
// Sólo importadores pueden usarlo
if (empty($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
http_response_code(401);
echo json_encode(['results' => []]);
exit;
}
include __DIR__ . '/../../views/productos_frecuentes/lista.php';
$conn = getConnection();
$sql = "SELECT id, descripcion FROM dbo.unidades_medida_apendice7 ORDER BY descripcion";
$stmt = sqlsrv_query($conn, $sql);
$out = ['results' => []];
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$out['results'][] = [
'id' => $row['id'],
'text' => $row['descripcion']
];
}
echo json_encode($out);
exit;
}
/** GET /IMPORTADORES/productos_frecuentes/alta
@@ -117,38 +270,118 @@ function guardar()
$conn = getConnection();
$errores = [];
$id_importador = $_SESSION['usuario_id'];
// Recoger y sanear
$sinonimo = trim($_POST['sinonimo'] ?? '');
$fraccion = trim($_POST['fraccion'] ?? '');
$nico = trim($_POST['nico'] ?? '');
$numero_parte = trim($_POST['numero_parte'] ?? null);
$descripcion = trim($_POST['descripcion'] ?? null);
$numero_parte = trim($_POST['numero_parte'] ?? '');
$descripcion = trim($_POST['descripcion'] ?? '');
$umc_id = intval($_POST['umc_id'] ?? 0);
$pais_origen_destino = trim($_POST['pais_origen_destino'] ?? null);
$pais_comprador_vendedor = trim($_POST['pais_comprador_vendedor'] ?? null);
$uso_mercancia = trim($_POST['uso_mercancia'] ?? null);
$estado_mercancia = trim($_POST['estado_mercancia'] ?? null);
$vinculacion = trim($_POST['vinculacion'] ?? null);
$observaciones = trim($_POST['observaciones'] ?? null);
$preferencia = trim($_POST['preferencia'] ?? null);
$criterio_preferencia = trim($_POST['criterio_preferencia'] ?? null);
$uso_producto = trim($_POST['uso_producto'] ?? null);
$descripcion_producto = trim($_POST['descripcion_producto'] ?? null);
$certificado_origen = isset($_POST['certificado_origen']) ? 1 : 0;
$tipo_mercancia = trim($_POST['tipo_mercancia'] ?? null);
$pais_origen_destino = trim($_POST['pais_origen_destino'] ?? '');
$pais_comprador_vendedor = trim($_POST['pais_comprador_vendedor'] ?? '');
$uso_mercancia = trim($_POST['uso_mercancia'] ?? '');
$estado_mercancia = trim($_POST['estado_mercancia'] ?? '');
$vinculacion = trim($_POST['vinculacion'] ?? '');
$observaciones = trim($_POST['observaciones'] ?? '');
$preferencia = trim($_POST['preferencia'] ?? '');
$criterio_preferencia = trim($_POST['criterio_preferencia'] ?? '');
$uso_producto = trim($_POST['uso_producto'] ?? '');
$descripcion_producto = trim($_POST['descripcion_producto'] ?? '');
$certificado_origen = trim($_POST['certificado_origen'] ?? '');
$tipo_mercancia = trim($_POST['tipo_mercancia'] ?? '');
$documento_en_original = isset($_POST['documento_en_original']) ? 1 : 0;
$proveedor = trim($_POST['proveedor'] ?? null);
$id_importador = intval($_SESSION['usuario_id']);
$status = 1;
$proveedor = trim($_POST['proveedor'] ?? '');
$status = intval($_POST['status'] ?? 1);
$frecuencia_uso = intval($_POST['frecuencia_uso'] ?? 1);
// Validación mínima
if ($sinonimo === '' || $fraccion === '' || $nico === '' || $umc_id <= 0) {
$_SESSION['flash_error'] = 'Sinónimo, Fracción, NICO y Unidad de Medida son obligatorios.';
// Validación de campos obligatorios (según tu formulario)
if ($sinonimo === '') {
$errores[] = 'El sinónimo es obligatorio';
}
if ($fraccion === '') {
$errores[] = 'La fracción es obligatoria';
}
if ($nico === '') {
$errores[] = 'El NICO es obligatorio';
}
if ($numero_parte === '') {
$errores[] = 'El número de parte es obligatorio';
}
if ($pais_origen_destino === '') {
$errores[] = 'El país de origen/destino es obligatorio';
}
if ($pais_comprador_vendedor === '') {
$errores[] = 'El país comprador/vendedor es obligatorio';
}
if ($umc_id <= 0) {
$errores[] = 'La unidad de medida es obligatoria';
}
// Validar que NICO solo contenga números
if (!preg_match('/^[0-9]+$/', $nico)) {
$errores[] = 'El NICO solo puede contener números';
}
// **SOLUCIÓN PRINCIPAL: Convertir IDs de países a nombres**
$pais_origen_nombre = null;
$pais_comprador_nombre = null;
if (!empty($pais_origen_destino)) {
$sql_pais = "SELECT nombre FROM dbo.paises WHERE id_pais = ?";
$stmt_pais = sqlsrv_query($conn, $sql_pais, [intval($pais_origen_destino)]);
if ($stmt_pais && $row = sqlsrv_fetch_array($stmt_pais, SQLSRV_FETCH_ASSOC)) {
$pais_origen_nombre = $row['nombre'];
} else {
$errores[] = 'País de origen/destino no válido';
}
}
if (!empty($pais_comprador_vendedor)) {
$sql_pais = "SELECT nombre FROM dbo.paises WHERE id_pais = ?";
$stmt_pais = sqlsrv_query($conn, $sql_pais, [intval($pais_comprador_vendedor)]);
if ($stmt_pais && $row = sqlsrv_fetch_array($stmt_pais, SQLSRV_FETCH_ASSOC)) {
$pais_comprador_nombre = $row['nombre'];
} else {
$errores[] = 'País comprador/vendedor no válido';
}
}
// Validar que existe la unidad de medida
$sql_umc = "SELECT COUNT(*) as count FROM dbo.unidades_medida_apendice7 WHERE id = ?";
$stmt_umc = sqlsrv_query($conn, $sql_umc, [$umc_id]);
if ($stmt_umc && $row = sqlsrv_fetch_array($stmt_umc, SQLSRV_FETCH_ASSOC)) {
if ($row['count'] == 0) {
$errores[] = 'Unidad de medida no válida';
}
}
// Si hay errores, regresar
if (!empty($errores)) {
$_SESSION['flash_error'] = implode('. ', $errores);
header('Location: /IMPORTADORES/productos_frecuentes/alta');
exit;
}
// Convertir valores vacíos a NULL para campos opcionales
if ($numero_parte === '') $numero_parte = null;
if ($descripcion === '') $descripcion = null;
if ($uso_mercancia === '') $uso_mercancia = null;
if ($estado_mercancia === '') $estado_mercancia = null;
if ($vinculacion === '') $vinculacion = null;
if ($observaciones === '') $observaciones = null;
if ($preferencia === '') $preferencia = null;
if ($criterio_preferencia === '') $criterio_preferencia = null;
if ($uso_producto === '') $uso_producto = null;
if ($descripcion_producto === '') $descripcion_producto = null;
if ($tipo_mercancia === '') $tipo_mercancia = null;
if ($proveedor === '') $proveedor = null;
// INSERT
$sql = "INSERT INTO dbo.productos_frecuentes
(sinonimo, fraccion, nico, numero_parte, descripcion, umc_id,
@@ -160,20 +393,26 @@ function guardar()
";
$params = [
$sinonimo, $fraccion, $nico, $numero_parte, $descripcion, $umc_id,
$pais_origen_destino, $pais_comprador_vendedor, $uso_mercancia, $estado_mercancia, $vinculacion,
$pais_origen_nombre, $pais_comprador_nombre, $uso_mercancia, $estado_mercancia, $vinculacion,
$observaciones, $preferencia, $criterio_preferencia, $uso_producto, $descripcion_producto,
$certificado_origen, $tipo_mercancia, $documento_en_original, $proveedor,
$id_importador, $status, $frecuencia_uso
];
// Para debug - remover en producción
error_log("Datos a insertar: " . print_r($params, true));
$stmt = sqlsrv_query($conn, $sql, $params);
if ($stmt === false) {
$_SESSION['flash_error'] = 'Error al guardar el producto frecuente.';
$errors = sqlsrv_errors();
error_log("Error en SQL: " . print_r($errors, true));
$_SESSION['flash_error'] = 'Error al guardar el producto.';
header('Location: /IMPORTADORES/productos_frecuentes/alta');
exit;
}
$_SESSION['flash_success'] = 'Producto frecuente registrado correctamente.';
$_SESSION['flash_success'] = 'Producto registrado correctamente.';
header('Location: /IMPORTADORES/productos_frecuentes');
exit;
}
@@ -205,6 +444,17 @@ function editar()
exit;
}
// Recuperar IDs reales desde nombres de país
foreach (['pais_origen_destino', 'pais_comprador_vendedor'] as $campo) {
$nombre = $producto[$campo];
$stmtPais = sqlsrv_query($conn, "SELECT id_pais FROM dbo.paises WHERE nombre = ?", [$nombre]);
if ($stmtPais && ($row = sqlsrv_fetch_array($stmtPais, SQLSRV_FETCH_ASSOC))) {
$producto[$campo] = $row['id_pais'];
} else {
$producto[$campo] = null;
}
}
include __DIR__ . '/../../views/productos_frecuentes/editar.php';
}
@@ -219,29 +469,91 @@ function actualizar()
$conn = getConnection();
$id = intval($_POST['id_producto_frecuente'] ?? 0);
$sinonimo = trim($_POST['sinonimo'] ?? '');
$errores = [];
$id = intval($_POST['id_producto_frecuente'] ?? 0);
$sinonimo = trim($_POST['sinonimo'] ?? '');
$fraccion = trim($_POST['fraccion'] ?? '');
$nico = trim($_POST['nico'] ?? '');
$numero_parte = trim($_POST['numero_parte'] ?? '');
$descripcion = trim($_POST['descripcion'] ?? '');
$umc_id = intval($_POST['umc_id'] ?? 0);
$pais_origen_destino = trim($_POST['pais_origen_destino'] ?? '');
$pais_comprador_vendedor = trim($_POST['pais_comprador_vendedor'] ?? '');
$uso_mercancia = trim($_POST['uso_mercancia'] ?? '');
$estado_mercancia = trim($_POST['estado_mercancia'] ?? '');
$vinculacion = trim($_POST['vinculacion'] ?? '');
$observaciones = trim($_POST['observaciones'] ?? '');
$preferencia = trim($_POST['preferencia'] ?? '');
$criterio_preferencia = trim($_POST['criterio_preferencia'] ?? '');
$uso_producto = trim($_POST['uso_producto'] ?? '');
$descripcion_producto = trim($_POST['descripcion_producto'] ?? '');
$certificado_origen = trim($_POST['certificado_origen'] ?? '');
$tipo_mercancia = trim($_POST['tipo_mercancia'] ?? '');
$documento_en_original = isset($_POST['documento_en_original']) ? 1 : 0;
$proveedor = trim($_POST['proveedor'] ?? '');
// Validar países
$pais_origen_nombre = null;
$pais_comprador_nombre = null;
if (!empty($pais_origen_destino)) {
$sql_pais = "SELECT nombre FROM dbo.paises WHERE id_pais = ?";
$stmt_pais = sqlsrv_query($conn, $sql_pais, [intval($pais_origen_destino)]);
if ($stmt_pais && ($row = sqlsrv_fetch_array($stmt_pais, SQLSRV_FETCH_ASSOC))) {
$pais_origen_nombre = $row['nombre'];
} else {
$errores[] = 'País de origen/destino no válido';
}
}
if (!empty($pais_comprador_vendedor)) {
$sql_pais = "SELECT nombre FROM dbo.paises WHERE id_pais = ?";
$stmt_pais = sqlsrv_query($conn, $sql_pais, [intval($pais_comprador_vendedor)]);
if ($stmt_pais && ($row = sqlsrv_fetch_array($stmt_pais, SQLSRV_FETCH_ASSOC))) {
$pais_comprador_nombre = $row['nombre'];
} else {
$errores[] = 'País comprador/vendedor no válido';
}
}
// Validar unidad
$sql_umc = "SELECT COUNT(*) as count FROM dbo.unidades_medida_apendice7 WHERE id = ?";
$stmt_umc = sqlsrv_query($conn, $sql_umc, [$umc_id]);
if (!$stmt_umc || ($row = sqlsrv_fetch_array($stmt_umc, SQLSRV_FETCH_ASSOC))['count'] == 0) {
$errores[] = 'Unidad de medida no válida';
}
// Si hay errores
if (!empty($errores)) {
$_SESSION['flash_error'] = implode('. ', $errores);
header("Location: /IMPORTADORES/productos_frecuentes/editar?id=$id");
exit;
}
// UPDATE
$sql = "UPDATE dbo.productos_frecuentes SET
sinonimo = ?, fraccion = ?, nico = ?, numero_parte = ?, descripcion = ?, umc_id = ?,
pais_origen_destino = ?, pais_comprador_vendedor = ?, uso_mercancia = ?, estado_mercancia = ?, vinculacion = ?,
observaciones = ?, preferencia = ?, criterio_preferencia = ?, uso_producto = ?, descripcion_producto = ?,
certificado_origen = ?, tipo_mercancia = ?, documento_en_original = ?, proveedor = ?
sinonimo = ?, fraccion = ?, nico = ?, numero_parte = ?, descripcion = ?,
umc_id = ?, pais_origen_destino = ?, pais_comprador_vendedor = ?,
uso_mercancia = ?, estado_mercancia = ?, vinculacion = ?, observaciones = ?,
preferencia = ?, criterio_preferencia = ?, uso_producto = ?, descripcion_producto = ?,
certificado_origen = ?, tipo_mercancia = ?, documento_en_original = ?, proveedor = ?
WHERE id_producto_frecuente = ?
";
$params = [
$sinonimo, $fraccion, $nico, $numero_parte, $descripcion, $umc_id,
$pais_origen_destino, $pais_comprador_vendedor, $uso_mercancia, $estado_mercancia, $vinculacion,
$observaciones, $preferencia, $criterio_preferencia, $uso_producto, $descripcion_producto,
$certificado_origen, $tipo_mercancia, $documento_en_original, $proveedor, $id
$sinonimo, $fraccion, $nico, $numero_parte, $descripcion, $umc_id,
$pais_origen_nombre, $pais_comprador_nombre, $uso_mercancia, $estado_mercancia, $vinculacion,
$observaciones, $preferencia, $criterio_preferencia, $uso_producto, $descripcion_producto,
$certificado_origen, $tipo_mercancia, $documento_en_original, $proveedor, $id
];
$stmt = sqlsrv_query($conn, $sql, $params);
if ($stmt === false) {
$_SESSION['flash_error'] = 'Error al actualizar el producto frecuente.';
$_SESSION['flash_error'] = 'Error al actualizar el producto.';
} else {
$_SESSION['flash_success'] = 'Producto frecuente actualizado correctamente.';
$_SESSION['flash_success'] = 'Producto actualizado correctamente.';
}
header('Location: /IMPORTADORES/productos_frecuentes');
exit;
}
@@ -258,32 +570,6 @@ function importacion_csv()
include __DIR__ . '/../../views/productos_frecuentes/importacion_csv.php';
}
function ajax_unidades()
{
// Sólo importadores pueden usarlo
if (empty($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador') {
http_response_code(401);
echo json_encode(['results' => []]);
exit;
}
$conn = getConnection();
$sql = "SELECT id, descripcion FROM dbo.unidades_medida_apendice7 ORDER BY descripcion";
$stmt = sqlsrv_query($conn, $sql);
$out = ['results' => []];
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$out['results'][] = [
'id' => $row['id'],
'text' => $row['descripcion']
];
}
echo json_encode($out);
exit;
}
/** POST /IMPORTADORES/productos_frecuentes/procesar_csv
* Procesa el upload y la inserción de CSV **/
function procesar_csv()
@@ -320,4 +606,34 @@ function procesar_csv()
$_SESSION['flash_success'] = 'Importación completada.';
header('Location: /IMPORTADORES/productos_frecuentes');
exit;
}
function eliminar()
{
if (empty($_SESSION['usuario_id'])) {
header('Location: /IMPORTADORES/login');
exit;
}
$id = $_GET['id'] ?? null;
if (!$id || !is_numeric($id)) {
http_response_code(400);
echo "ID inválido";
return;
}
$conn = getConnection();
$sql = "UPDATE productos_frecuentes SET status = 0 WHERE id_producto_frecuente = ? AND id_importador = ?";
$params = [$id, $_SESSION['usuario_id']];
$stmt = sqlsrv_query($conn, $sql, $params);
if ($stmt === false) {
echo '<pre>', print_r(sqlsrv_errors(), true), '</pre>';
exit;
}
header('Location: /IMPORTADORES/productos_frecuentes?deleted=ok');
exit;
}

View File

@@ -931,7 +931,7 @@ function generarPedimentoDesdeSolicitud($conn, $id, $usuarioId, $token)
$ch = curl_init($urlPed);
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ["Authorization: $token", 'Content-Type: application/json'],
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => $jsonPayload,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
@@ -1025,7 +1025,7 @@ function ajax_lista()
// 4) Ejecutamos cURL
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: $token", 'Accept: application/json'],
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", 'Accept: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
]);
@@ -1332,7 +1332,7 @@ function update_status()
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
"Authorization: $token",
"Authorization: Bearer $token",
'Content-Type: application/json'
],
CURLOPT_POSTFIELDS => $jsonPayload,
@@ -1448,15 +1448,15 @@ function enviarNotificacionCambioStatus($email, $nombreCompleto, $datosSolicitud
/** Obtiene información del status (descripción y emoji) **/
function obtenerInfoStatus($status) {
$statusMap = [
1 => ['emoji' => '🔄', 'descripcion' => 'En proceso', 'color' => '#17a2b8'],
1 => ['emoji' => '🔄', 'descripcion' => 'En proceso', 'color' => '#17a2b8'],
2 => ['emoji' => '📋', 'descripcion' => 'Solicitar importación', 'color' => '#ffc107'],
3 => ['emoji' => '🏢', 'descripcion' => 'Con agencia aduana', 'color' => '#6f42c1'],
4 => ['emoji' => '💳', 'descripcion' => 'En proceso de pago', 'color' => '#fd7e14'],
5 => ['emoji' => '✅', 'descripcion' => 'Pedimento generado', 'color' => '#28a745'],
6 => ['emoji' => '📦', 'descripcion' => 'En tránsito', 'color' => '#007bff'],
7 => ['emoji' => '🏁', 'descripcion' => 'Entregado', 'color' => '#28a745'],
8 => ['emoji' => '❌', 'descripcion' => 'Cancelado', 'color' => '#dc3545'],
9 => ['emoji' => '⏸️', 'descripcion' => 'Suspendido', 'color' => '#6c757d']
3 => ['emoji' => '🏢', 'descripcion' => 'Con agencia aduanal', 'color' => '#6f42c1'],
4 => ['emoji' => '💳', 'descripcion' => 'En proceso de pago', 'color' => '#fd7e14'],
5 => ['emoji' => '✅', 'descripcion' => 'Pedimento generado', 'color' => '#28a745'],
6 => ['emoji' => '📦', 'descripcion' => 'En tránsito', 'color' => '#007bff'],
7 => ['emoji' => '🏁', 'descripcion' => 'Entregado', 'color' => '#28a745'],
8 => ['emoji' => '❌', 'descripcion' => 'Cancelado', 'color' => '#dc3545'],
9 => ['emoji' => '⏸️', 'descripcion' => 'Suspendido', 'color' => '#6c757d']
];
return $statusMap[$status] ?? [
@@ -1703,7 +1703,7 @@ function obtenerProveedorPorClave($clave) {
// Ejecutar cURL para obtener todos los proveedores
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: $token", 'Accept: application/json'],
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", 'Accept: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);