171 lines
6.1 KiB
PHP
171 lines
6.1 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../../config/database.php';
|
|
require_once __DIR__ . '/../helpers/session.php';
|
|
|
|
/**
|
|
* GET /IMPORTADORES/cove/ajax_estado_facturas?pedimento_id=123
|
|
* Devuelve estado de COVE por factura del pedimento actual del usuario.
|
|
*/
|
|
function ajax_estado_facturas()
|
|
{
|
|
if (!($_SESSION['usuario_id'] ?? false)) {
|
|
http_response_code(403);
|
|
echo json_encode(['success' => false, 'message' => 'No autorizado']);
|
|
exit;
|
|
}
|
|
|
|
$usuario_id = (int)$_SESSION['usuario_id'];
|
|
$pedimento_id = isset($_GET['pedimento_id']) ? (int)$_GET['pedimento_id'] : 0;
|
|
if ($pedimento_id <= 0) {
|
|
http_response_code(400);
|
|
echo json_encode(['success' => false, 'message' => 'ID inválido']);
|
|
exit;
|
|
}
|
|
|
|
$conn = getConnection();
|
|
// Verificar propiedad del pedimento
|
|
$chk = sqlsrv_query($conn, "SELECT 1 FROM pedimentos WHERE id = ? AND usuario_id = ?", [$pedimento_id, $usuario_id]);
|
|
$own = $chk && sqlsrv_fetch_array($chk) ? true : false;
|
|
if ($chk) sqlsrv_free_stmt($chk);
|
|
if (!$own) {
|
|
http_response_code(404);
|
|
echo json_encode(['success' => false, 'message' => 'Pedimento no encontrado']);
|
|
exit;
|
|
}
|
|
|
|
$sql = "SELECT f.id AS factura_id,
|
|
CASE WHEN cr.id IS NULL THEN 0 ELSE 1 END AS respondido,
|
|
cr.estado AS estado,
|
|
cr.fecha_actualizacion AS fecha
|
|
FROM pedimento_facturas f
|
|
LEFT JOIN cove_respuestas cr
|
|
ON cr.factura_id = f.id AND cr.usuario_id = ?
|
|
WHERE f.pedimento_id = ?
|
|
ORDER BY f.id";
|
|
$stmt = sqlsrv_query($conn, $sql, [$usuario_id, $pedimento_id]);
|
|
if ($stmt === false) {
|
|
http_response_code(500);
|
|
echo json_encode(['success' => false, 'message' => 'Error de base de datos']);
|
|
exit;
|
|
}
|
|
$data = [];
|
|
while ($r = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
|
|
if (isset($r['fecha']) && $r['fecha'] instanceof DateTime) {
|
|
$r['fecha'] = $r['fecha']->format('Y-m-d H:i:s');
|
|
}
|
|
$data[] = $r;
|
|
}
|
|
sqlsrv_free_stmt($stmt);
|
|
|
|
echo json_encode(['success' => true, 'data' => $data]);
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* POST /IMPORTADORES/cove/ajax_guardar_respuestas
|
|
* Guarda/actualiza respuestas de COVE para una factura concreta.
|
|
* Body: pedimento_id, factura_id, respuestas (JSON string), estado (opcional)
|
|
*/
|
|
function ajax_guardar_respuestas()
|
|
{
|
|
if (!($_SESSION['usuario_id'] ?? false)) {
|
|
http_response_code(403);
|
|
echo json_encode(['success' => false, 'message' => 'No autorizado']);
|
|
exit;
|
|
}
|
|
|
|
$usuario_id = (int)$_SESSION['usuario_id'];
|
|
$pedimento_id = isset($_POST['pedimento_id']) ? (int)$_POST['pedimento_id'] : 0;
|
|
$factura_id = isset($_POST['factura_id']) ? (int)$_POST['factura_id'] : 0;
|
|
$respuestas = $_POST['respuestas'] ?? '{}';
|
|
$estado = $_POST['estado'] ?? 'respondido';
|
|
if ($pedimento_id <= 0 || $factura_id <= 0) {
|
|
http_response_code(400);
|
|
echo json_encode(['success' => false, 'message' => 'Parámetros inválidos']);
|
|
exit;
|
|
}
|
|
|
|
$conn = getConnection();
|
|
// Verificar propiedad del pedimento
|
|
$chk = sqlsrv_query($conn, "SELECT 1 FROM pedimentos WHERE id = ? AND usuario_id = ?", [$pedimento_id, $usuario_id]);
|
|
$own = $chk && sqlsrv_fetch_array($chk) ? true : false;
|
|
if ($chk) sqlsrv_free_stmt($chk);
|
|
if (!$own) {
|
|
http_response_code(404);
|
|
echo json_encode(['success' => false, 'message' => 'Pedimento no encontrado']);
|
|
exit;
|
|
}
|
|
|
|
// Upsert manual: si existe update, si no insert
|
|
$sel = sqlsrv_query($conn, "SELECT id FROM cove_respuestas WHERE factura_id = ? AND usuario_id = ?", [$factura_id, $usuario_id]);
|
|
$row = $sel ? sqlsrv_fetch_array($sel, SQLSRV_FETCH_ASSOC) : null;
|
|
if ($sel) sqlsrv_free_stmt($sel);
|
|
|
|
if ($row) {
|
|
$sql = "UPDATE cove_respuestas
|
|
SET respuestas = ?, estado = ?, fecha_actualizacion = SYSDATETIME()
|
|
WHERE id = ?";
|
|
$stmt = sqlsrv_query($conn, $sql, [$respuestas, $estado, $row['id']]);
|
|
} else {
|
|
$sql = "INSERT INTO cove_respuestas (pedimento_id, factura_id, usuario_id, respuestas, estado, fecha_creacion)
|
|
VALUES (?, ?, ?, ?, ?, SYSDATETIME())";
|
|
$stmt = sqlsrv_query($conn, $sql, [$pedimento_id, $factura_id, $usuario_id, $respuestas, $estado]);
|
|
}
|
|
|
|
if ($stmt === false) {
|
|
http_response_code(500);
|
|
echo json_encode(['success' => false, 'message' => 'No se pudieron guardar las respuestas']);
|
|
exit;
|
|
}
|
|
|
|
echo json_encode(['success' => true]);
|
|
exit;
|
|
}
|
|
|
|
// Estado agregado por pedimento: total de facturas vs respondidas/solicitadas
|
|
function ajax_estado_pedimentos()
|
|
{
|
|
if (!($_SESSION['usuario_id'] ?? false)) {
|
|
http_response_code(403);
|
|
echo json_encode(['success' => false, 'message' => 'No autorizado']);
|
|
exit;
|
|
}
|
|
|
|
$usuario_id = (int)$_SESSION['usuario_id'];
|
|
$conn = getConnection();
|
|
|
|
$sql = "
|
|
SELECT p.id AS pedimento_id,
|
|
COUNT(f.id) AS total_facturas,
|
|
SUM(CASE WHEN cr.estado IN ('respondido','solicitado') THEN 1 ELSE 0 END) AS respondidas
|
|
FROM pedimentos p
|
|
LEFT JOIN pedimento_facturas f ON f.pedimento_id = p.id
|
|
LEFT JOIN cove_respuestas cr ON cr.factura_id = f.id AND cr.usuario_id = p.usuario_id
|
|
WHERE p.usuario_id = ?
|
|
GROUP BY p.id
|
|
";
|
|
$stmt = sqlsrv_query($conn, $sql, [$usuario_id]);
|
|
if ($stmt === false) {
|
|
http_response_code(500);
|
|
echo json_encode(['success' => false, 'message' => 'Error de base de datos']);
|
|
exit;
|
|
}
|
|
|
|
$data = [];
|
|
while ($r = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
|
|
$total = (int)($r['total_facturas'] ?? 0);
|
|
$resp = (int)($r['respondidas'] ?? 0);
|
|
$completo = ($total > 0 && $resp >= $total) ? 1 : 0;
|
|
$data[] = [
|
|
'pedimento_id' => (int)$r['pedimento_id'],
|
|
'total_facturas' => $total,
|
|
'respondidas' => $resp,
|
|
'completo' => $completo
|
|
];
|
|
}
|
|
sqlsrv_free_stmt($stmt);
|
|
|
|
echo json_encode(['success' => true, 'data' => $data]);
|
|
exit;
|
|
}
|