Aprobación de Agencias
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
// app/controllers/proveedores.php
|
||||
require_once __DIR__ . '/../helpers/session.php';
|
||||
require_once __DIR__ . '/../../config/database.php';
|
||||
// 1) Composer autoload (phpdotenv y demás libs)
|
||||
@@ -28,11 +29,11 @@ function getApiToken(): ?string
|
||||
|
||||
// 2) Sí o sí hacemos login en la API
|
||||
$url = rtrim($_ENV['API_URL'] ?? '', '/') . '/auth/login';
|
||||
$user = $_ENV['API_USER'] ?? '';
|
||||
$pass = $_ENV['API_PASS'] ?? '';
|
||||
$user = $_ENV['API_USER'] ?? '';
|
||||
$pass = $_ENV['API_PASS'] ?? '';
|
||||
$body = json_encode(['username' => $user, 'password' => $pass]);
|
||||
|
||||
error_log("[getApiToken] POST $url → $body");
|
||||
error_log("[getApiToken] POST $url");
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, [
|
||||
@@ -46,7 +47,7 @@ function getApiToken(): ?string
|
||||
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
error_log("[getApiToken] HTTP $http → $resp");
|
||||
error_log("[getApiToken] HTTP $http");
|
||||
|
||||
if ($http === 200 && ($data = json_decode($resp, true)) && !empty($data['token'])) {
|
||||
// 3) Guardamos token y tiempo actual
|
||||
@@ -87,62 +88,82 @@ function ajax_lista()
|
||||
$token = getApiToken();
|
||||
if (!$token) {
|
||||
error_log('[ajax_lista] Sin token válido');
|
||||
// Devolvemos estructura vacía
|
||||
echo json_encode(['data' => []]);
|
||||
echo json_encode(['data' => [], 'error' => 'No se pudo obtener token de autenticación']);
|
||||
return;
|
||||
}
|
||||
|
||||
// 3) Construimos la URL de la API
|
||||
// CORRECCIÓN: Usar la misma estructura de URL que en otras funciones
|
||||
$apiBase = rtrim($_ENV['API_URL'] ?? '', '/');
|
||||
$url = $apiBase . '/proveedores';
|
||||
$url = $apiBase . '/api/proveedores'; // Cambié para que sea consistente
|
||||
error_log("[ajax_lista] GET $url");
|
||||
|
||||
// 4) Ejecutamos cURL
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_HTTPHEADER => ["Authorization: $token", 'Accept: application/json'],
|
||||
// CORRECCIÓN: Agregar "Bearer" al token
|
||||
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", 'Accept: application/json'],
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_TIMEOUT => 5,
|
||||
CURLOPT_TIMEOUT => 10, // Aumenté el timeout
|
||||
]);
|
||||
$resp = curl_exec($ch);
|
||||
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$curlError = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
error_log("[ajax_lista] HTTP $status → $resp");
|
||||
error_log("[ajax_lista] HTTP $status");
|
||||
|
||||
// MEJORA: Verificar errores de cURL
|
||||
if ($curlError) {
|
||||
error_log("[ajax_lista] cURL Error: $curlError");
|
||||
echo json_encode(['data' => [], 'error' => 'Error de conexión con la API']);
|
||||
return;
|
||||
}
|
||||
|
||||
// MEJORA: Mejor manejo de errores
|
||||
if ($status !== 200) {
|
||||
error_log("[ajax_lista] Error HTTP $status: $resp");
|
||||
echo json_encode(['data' => [], 'error' => "Error HTTP $status"]);
|
||||
return;
|
||||
}
|
||||
|
||||
$json = json_decode($resp, true);
|
||||
if (!is_array($json)) {
|
||||
error_log("[ajax_lista] Respuesta no es un array válido: $resp");
|
||||
echo json_encode(['data' => [], 'error' => 'Respuesta inválida de la API']);
|
||||
return;
|
||||
}
|
||||
|
||||
error_log("[ajax_lista] Procesando " . count($json) . " proveedores");
|
||||
|
||||
// 5) Parseamos y formateamos
|
||||
$dataList = [];
|
||||
if ($status === 200 && ($json = json_decode($resp, true)) && is_array($json)) {
|
||||
foreach ($json as $p) {
|
||||
$clave = htmlspecialchars($p['Clave'] ?? '', ENT_QUOTES);
|
||||
foreach ($json as $p) {
|
||||
$clave = htmlspecialchars($p['Clave'] ?? '', ENT_QUOTES);
|
||||
|
||||
// Construir dirección
|
||||
$direccion = trim(implode(', ', array_filter([
|
||||
$p['Calles'] ?? '',
|
||||
'Num. Ext: ' . ($p['NumExt'] ?? ''),
|
||||
'Num. Int: ' . ($p['NumInt'] ?? ''),
|
||||
$p['Colonia'] ?? '',
|
||||
$p['Municipio'] ?? '',
|
||||
$p['Ciudad'] ?? '',
|
||||
'C.P. ' . ($p['CodigoPostal'] ?? ''),
|
||||
$p['EntidadFederativa'] ?? '',
|
||||
$p['Pais'] ?? ''
|
||||
])));
|
||||
// Construir dirección de forma más robusta
|
||||
$direccionParts = array_filter([
|
||||
$p['Calles'] ?? '',
|
||||
($p['NumExt'] ?? '') ? 'Num. Ext: ' . $p['NumExt'] : '',
|
||||
($p['NumInt'] ?? '') ? 'Num. Int: ' . $p['NumInt'] : '',
|
||||
$p['Colonia'] ?? '',
|
||||
$p['Municipio'] ?? '',
|
||||
$p['Ciudad'] ?? '',
|
||||
($p['CodigoPostal'] ?? '') ? 'C.P. ' . $p['CodigoPostal'] : '',
|
||||
$p['EntidadFederativa'] ?? '',
|
||||
$p['Pais'] ?? ''
|
||||
]);
|
||||
|
||||
$direccion = implode(', ', $direccionParts);
|
||||
|
||||
$dataList[] = [
|
||||
$clave,
|
||||
htmlspecialchars($p['Nombre'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['RFC'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['Ciudad'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['Telefono'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($direccion ?? '', ENT_QUOTES),
|
||||
// Acciones
|
||||
"<a href=\"/IMPORTADORES/proveedores/editar?clave=" . rawurlencode($clave) . "\" class=\"btn btn-sm btn-primary\">✏️</a>
|
||||
<button class=\"btn btn-sm btn-danger\" onclick=\"confirmDelete('{$clave}')\">🗑️</button>"
|
||||
];
|
||||
}
|
||||
} else {
|
||||
error_log('[ajax_lista] Respuesta inválida o status != 200');
|
||||
$dataList[] = [
|
||||
$clave,
|
||||
htmlspecialchars($p['Nombre'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['RFC'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['Ciudad'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($p['Telefono'] ?? '', ENT_QUOTES),
|
||||
htmlspecialchars($direccion, ENT_QUOTES),
|
||||
"<a href=\"/IMPORTADORES/proveedores/editar?clave=" . rawurlencode($clave) . "\" class=\"btn btn-sm btn-primary\">✏️</a>
|
||||
<button class=\"btn btn-sm btn-danger\" onclick=\"confirmDelete('{$clave}')\">🗑️</button>"
|
||||
];
|
||||
}
|
||||
|
||||
// 6) Devolvemos siempre HTTP 200 con data (posiblemente vacío)
|
||||
@@ -161,20 +182,24 @@ function eliminar()
|
||||
exit;
|
||||
}
|
||||
|
||||
// CORRECCIÓN: Usar la misma URL base y corregir el Authorization header
|
||||
$url = rtrim($_ENV['API_URL'] ?? '', '/') . '/api/proveedores/' . urlencode($clave);
|
||||
error_log("[eliminar] DELETE $url");
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_CUSTOMREQUEST => 'DELETE',
|
||||
CURLOPT_HTTPHEADER => ["Authorization: $token",'Accept: application/json'],
|
||||
// CORRECCIÓN: Quitar el espacio extra y agregar Bearer
|
||||
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", 'Accept: application/json'],
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_TIMEOUT => 5,
|
||||
]);
|
||||
curl_exec($ch);
|
||||
$resp = curl_exec($ch);
|
||||
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
error_log("[eliminar] HTTP $status: $resp");
|
||||
|
||||
header('Location: /IMPORTADORES/proveedores?deleted=' . ($status===200||$status===204 ? 'ok':'error'));
|
||||
exit;
|
||||
}
|
||||
@@ -203,16 +228,16 @@ function guardar()
|
||||
|
||||
// 2) Recoger datos del formulario
|
||||
$payload = [
|
||||
'Clave' => trim($_POST['Clave'] ?? ''),
|
||||
'Nombre' => trim($_POST['Nombre'] ?? ''),
|
||||
'RFC' => trim($_POST['RFC'] ?? ''),
|
||||
'Ciudad' => trim($_POST['Ciudad'] ?? ''),
|
||||
'Telefono' => trim($_POST['Telefono'] ?? ''),
|
||||
'Pais' => trim($_POST['Pais'] ?? ''),
|
||||
'Colonia' => trim($_POST['Colonia'] ?? ''),
|
||||
'Municipio' => trim($_POST['Municipio'] ?? ''),
|
||||
'CodigoPostal' => trim($_POST['CodigoPostal'] ?? ''),
|
||||
'EntidadFederativa' => trim($_POST['EntidadFederativa'] ?? ''),
|
||||
'Clave' => trim($_POST['Clave'] ?? ''),
|
||||
'Nombre' => trim($_POST['Nombre'] ?? ''),
|
||||
'RFC' => trim($_POST['RFC'] ?? ''),
|
||||
'Ciudad' => trim($_POST['Ciudad'] ?? ''),
|
||||
'Telefono' => trim($_POST['Telefono'] ?? ''),
|
||||
'Pais' => trim($_POST['Pais'] ?? ''),
|
||||
'Colonia' => trim($_POST['Colonia'] ?? ''),
|
||||
'Municipio' => trim($_POST['Municipio'] ?? ''),
|
||||
'CodigoPostal' => trim($_POST['CodigoPostal'] ?? ''),
|
||||
'EntidadFederativa' => trim($_POST['EntidadFederativa'] ?? ''),
|
||||
];
|
||||
|
||||
// 3) Validar campos obligatorios
|
||||
@@ -232,7 +257,7 @@ function guardar()
|
||||
|
||||
// 5) Llamada a la API para crear el proveedor
|
||||
$url = rtrim($_ENV['API_URL'] ?? '', '/') . '/api/proveedores';
|
||||
$ch = curl_init($url);
|
||||
$ch = curl_init($url);
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_HTTPHEADER => [
|
||||
|
||||
Reference in New Issue
Block a user