From 485e249dab60a6c416e9a1ea6e25ed840be8a74d Mon Sep 17 00:00:00 2001 From: ernestohc21 Date: Mon, 12 May 2025 12:09:10 -0600 Subject: [PATCH] conexion con api winsaai --- .env | 5 + app/controllers/proveedores.php | 163 ++++++++++++++++++++++++++ views/partials/sidebar_importador.php | 18 +-- views/proveedores/lista.php | 110 +++++++++++++++++ 4 files changed, 288 insertions(+), 8 deletions(-) create mode 100644 app/controllers/proveedores.php create mode 100644 views/proveedores/lista.php diff --git a/.env b/.env index dfa3694..410ea17 100644 --- a/.env +++ b/.env @@ -10,3 +10,8 @@ ENCRYPTION_IV=7c9f4a2d1e3b5f7a RECAPTCHA_SECRET=6LfkMB8rAAAAAFWMAZmIqtN0ocDzg9t1g0_xbkkN SMTP_PASS=N036p7y! + + +API_URL=http://50.21.176.205:3000 +API_USER=adminAS +API_PASS=zC?K.Z5o2tiLN4gE diff --git a/app/controllers/proveedores.php b/app/controllers/proveedores.php new file mode 100644 index 0000000..f88309c --- /dev/null +++ b/app/controllers/proveedores.php @@ -0,0 +1,163 @@ +$user,'password'=>$pass]); + + error_log("[getApiToken] POST $url → body: $body"); + + $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 → resp: $resp"); + + if ($http === 200 && ($data = json_decode($resp, true)) && !empty($data['token'])) { + $_SESSION['api_token'] = $data['token']; + return $data['token']; + } + + return null; +} + +/** + * GET /IMPORTADORES/proveedores + * Muestra la vista de listado + */ +function index() +{ + lista(); +} + +function lista() +{ + if (empty($_SESSION['usuario_id'])) { + header('Location: /IMPORTADORES/login'); + exit; + } + include __DIR__ . '/../../views/proveedores/lista.php'; +} + +/** + * GET /IMPORTADORES/proveedores/ajax_lista + * Devuelve JSON para DataTables + */ +/** + * GET /IMPORTADORES/proveedores/ajax_lista + * Devuelve JSON para DataTables (siempre HTTP 200) + */ +function ajax_lista() +{ + // 1) Fijamos el header JSON + header('Content-Type: application/json; charset=utf-8'); + + // 2) Obtener o renovar token + $token = getApiToken(); + if (!$token) { + error_log('[ajax_lista] Sin token válido'); + // Devolvemos estructura vacía + echo json_encode(['data' => []]); + return; + } + + // 3) Construimos la URL de la API + $apiBase = rtrim($_ENV['API_URL'] ?? '', '/'); + $url = $apiBase . '/proveedores'; + error_log("[ajax_lista] GET $url"); + + // 4) Ejecutamos cURL + $ch = curl_init($url); + curl_setopt_array($ch, [ + CURLOPT_HTTPHEADER => ["Authorization: $token", 'Accept: application/json'], + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 5, + ]); + $resp = curl_exec($ch); + $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + error_log("[ajax_lista] HTTP $status → $resp"); + + // 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); + $dataList[] = [ + $clave, + htmlspecialchars($p['Nombre'] ?? '', ENT_QUOTES), + htmlspecialchars($p['RFC'] ?? '', ENT_QUOTES), + htmlspecialchars($p['Ciudad'] ?? '', ENT_QUOTES), + htmlspecialchars($p['Telefono']?? '', ENT_QUOTES), + // Acciones + "✏️ + " + ]; + } + } else { + error_log('[ajax_lista] Respuesta inválida o status != 200'); + } + + // 6) Devolvemos siempre HTTP 200 con data (posiblemente vacío) + echo json_encode(['data' => $dataList]); +} + + +/** + * GET /IMPORTADORES/proveedores/eliminar + * Llama a DELETE /api/proveedores/:clave y redirige + */ +function eliminar() +{ + $token = getApiToken(); + $clave = $_GET['clave'] ?? ''; + if (!$token || !$clave) { + header('Location: /IMPORTADORES/proveedores'); + exit; + } + + $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: Bearer $token",'Accept: application/json'], + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 5, + ]); + curl_exec($ch); + $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + header('Location: /IMPORTADORES/proveedores?deleted=' . ($status===200||$status===204 ? 'ok':'error')); + exit; +} diff --git a/views/partials/sidebar_importador.php b/views/partials/sidebar_importador.php index 2712c48..a967e71 100644 --- a/views/partials/sidebar_importador.php +++ b/views/partials/sidebar_importador.php @@ -93,30 +93,31 @@ if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'importador -🏭 Proveedores + 🏭 Proveedores 2 + + + + + 📄 Listado de Proveedores + + + + + + + + + + +
+

+

📄 Listado de Proveedores

+
+ + + + + + + + + + + +
ClaveNombreRFCCiudadTeléfonoAcciones
+
+
+ + + + + + + + + +