diff --git a/completados.php b/completados.php
index 5e596135..997f9025 100644
--- a/completados.php
+++ b/completados.php
@@ -206,8 +206,14 @@ include 'layout_header.php';
}
?>
-
- Ver
+
+
+ Ver
+
+ No disponible
N/A
diff --git a/listos_para_recojo.php b/listos_para_recojo.php
index b1f817ea..64b94177 100644
--- a/listos_para_recojo.php
+++ b/listos_para_recojo.php
@@ -234,8 +234,14 @@ include 'layout_header.php';
| |
|
-
- Ver
+
+
+ Ver
+
+ No disponible
N/A
diff --git a/pedido_form.php b/pedido_form.php
index 4d6ee9b8..519309c1 100644
--- a/pedido_form.php
+++ b/pedido_form.php
@@ -323,18 +323,34 @@ include 'layout_header.php';
-
+
+
+
+
+ Voucher no disponible (archivo no encontrado).
-
+
+
+
+
+ Voucher no disponible (archivo no encontrado).
diff --git a/pedidos.php b/pedidos.php
index c219cc69..4b093bf2 100644
--- a/pedidos.php
+++ b/pedidos.php
@@ -235,8 +235,14 @@ include 'layout_header.php';
| |
|
-
- Ver
+
+
+ Ver
+
+ No disponible
N/A
diff --git a/pedidos_en_transito.php b/pedidos_en_transito.php
index aaf94910..4e1da209 100644
--- a/pedidos_en_transito.php
+++ b/pedidos_en_transito.php
@@ -274,10 +274,16 @@ include 'layout_header.php';
| |
|
-
- Ver
- N/A
+
+
+ Ver
+
+ No disponible
+
+ N/A
|
@@ -565,16 +571,27 @@ document.addEventListener('DOMContentLoaded', function() {
fetch(`shalom_api.php?orderNumber=${encodeURIComponent(orderNumber)}&orderCode=${encodeURIComponent(orderCode)}`)
.then(async response => {
+ let rawText = '';
+ try { rawText = await response.text(); } catch (e) { /* ignore */ }
+
let data = null;
- try { data = await response.json(); } catch (e) { /* ignore */ }
+ if (rawText) {
+ try { data = JSON.parse(rawText); } catch (e) { /* ignore */ }
+ }
if (!response.ok) {
- const msg = (data && data.error) ? data.error : `HTTP ${response.status}`;
- const details = (data && data.details) ? data.details : '';
+ const msg =
+ (data && data.error) ? data.error :
+ rawText ? (rawText.length > 140 ? rawText.slice(0, 140) + '…' : rawText) :
+ `HTTP ${response.status}`;
+
let detailsText = '';
- if (details) {
+ if (data && Object.prototype.hasOwnProperty.call(data, 'details') && data.details !== undefined && data.details !== null && data.details !== '') {
+ const details = data.details;
detailsText = typeof details === 'string' ? details : JSON.stringify(details);
+ } else if (rawText) {
+ detailsText = rawText;
}
// Devolvemos el error dentro de JSON para que el siguiente then lo pinte como Error
@@ -607,8 +624,12 @@ document.addEventListener('DOMContentLoaded', function() {
badgeText = `Shalom ${codeMatch2[1]}`;
} else {
const isTimeout = /timed out|timeout/i.test(errText) || /timed out|timeout/i.test(details);
+ const httpMatch = errText.match(/HTTP\s*(\d{3})/i);
+
if (isTimeout) {
badgeText = 'Shalom timeout';
+ } else if (httpMatch) {
+ badgeText = `Shalom HTTP ${httpMatch[1]}`;
} else if (/comunicaci[oó]n/i.test(errText)) {
badgeText = 'Error API Shalom';
} else {
diff --git a/save_pedido.php b/save_pedido.php
index c64b0593..93d3089e 100644
--- a/save_pedido.php
+++ b/save_pedido.php
@@ -9,23 +9,32 @@ require_once 'db/config.php';
function handle_upload($file_key, $current_path = null) {
if (isset($_FILES[$file_key]) && $_FILES[$file_key]['error'] === UPLOAD_ERR_OK) {
- $upload_dir = 'assets/uploads/vouchers/';
- if (!is_dir($upload_dir)) {
- mkdir($upload_dir, 0775, true);
- }
+ $upload_dir_rel = 'assets/uploads/vouchers/';
+ $upload_dir_abs = __DIR__ . '/' . $upload_dir_rel;
- if ($current_path && file_exists($current_path)) {
- unlink($current_path);
+ if (!is_dir($upload_dir_abs)) {
+ mkdir($upload_dir_abs, 0775, true);
}
$filename = uniqid() . '-' . basename($_FILES[$file_key]['name']);
- $path = $upload_dir . $filename;
+ $path_abs = $upload_dir_abs . $filename;
+ $path_rel = $upload_dir_rel . $filename;
- if (move_uploaded_file($_FILES[$file_key]['tmp_name'], $path)) {
- return $path;
+ // Move first; only delete the previous file after a successful upload.
+ if (move_uploaded_file($_FILES[$file_key]['tmp_name'], $path_abs)) {
+ if (!empty($current_path)) {
+ $current_abs = __DIR__ . '/' . $current_path;
+ if (file_exists($current_abs)) {
+ unlink($current_abs);
+ }
+ }
+ return $path_rel;
}
+
+ // Upload failed: keep the previous path (if any)
return $current_path;
}
+
return $current_path;
}
diff --git a/shalom_api.php b/shalom_api.php
index 2dd3f5c4..538d753b 100644
--- a/shalom_api.php
+++ b/shalom_api.php
@@ -1,14 +1,26 @@
'Número de orden y código de orden son requeridos.']);
- exit;
+ respond_json(400, ['error' => 'Número de orden y código de orden son requeridos.'], $jsonOptions);
}
// Load env from executor/.env (helps when Apache/PHP doesn't export .env vars)
@@ -36,7 +48,6 @@ function load_dotenv_if_needed(array $keys): void {
// Strip potential surrounding quotes
$v = trim($v, "\"' ");
-
// Do not override existing process env
if (getenv($k) === false || getenv($k) === '') {
putenv("{$k}={$v}");
@@ -70,11 +81,9 @@ if (!$apiKey) {
}
if (!$apiKey) {
- http_response_code(500);
- echo json_encode([
+ respond_json(500, [
'error' => 'Falta SHALOM_API_KEY. Configura la clave en Configuración General (Administrador) o en tu .env para poder consultar el tracking.',
- ]);
- exit;
+ ], $jsonOptions);
}
$url = 'https://shalom-api.lat/api/track';
@@ -86,9 +95,7 @@ $postData = [
$jsonData = json_encode($postData, JSON_UNESCAPED_UNICODE);
if ($jsonData === false) {
- http_response_code(500);
- echo json_encode(['error' => 'Error serializando la solicitud a Shalom.']);
- exit;
+ respond_json(500, ['error' => 'Error serializando la solicitud a Shalom.'], $jsonOptions);
}
$ch = curl_init();
@@ -116,27 +123,21 @@ $curlError = curl_error($ch);
curl_close($ch);
if ($curlError) {
- http_response_code(502);
- echo json_encode([
+ respond_json(502, [
'error' => 'Error en la comunicación con la API de Shalom',
'details' => $curlError,
- ]);
- exit;
+ ], $jsonOptions);
}
if ($response === false || $response === null || $response === '') {
- http_response_code(502);
- echo json_encode([
+ respond_json(502, [
'error' => 'Shalom no devolvió respuesta',
'http_code' => $httpCode ?: null,
- ]);
- exit;
+ ], $jsonOptions);
}
// Error HTTP del proveedor
if ($httpCode >= 400) {
- http_response_code($httpCode);
-
$errorBody = json_decode($response, true);
$shMessage = null;
@@ -145,20 +146,19 @@ if ($httpCode >= 400) {
}
if ($shMessage) {
- echo json_encode([
+ respond_json($httpCode, [
'error' => "Error de la API de Shalom: {$shMessage}",
'http_code' => $httpCode,
'details' => $errorBody ?: $response,
- ]);
- } else {
- echo json_encode([
- 'error' => "Error de la API de Shalom (código {$httpCode}).",
- 'http_code' => $httpCode,
- 'details' => $response,
- ]);
+ ], $jsonOptions);
}
- exit;
+
+ respond_json($httpCode, [
+ 'error' => "Error de la API de Shalom (código {$httpCode}).",
+ 'http_code' => $httpCode,
+ 'details' => $response,
+ ], $jsonOptions);
}
-// OK: devolvemos tal cual lo que responde Shalom (la UI espera JSON con search/statuses)
+// OK: devolvemos tal cual lo que responde Shalom (la UI espera JSON)
echo $response;
|