Preparando proyecto para migración a repositorio MVE
This commit is contained in:
170
app/controllers/cove.php
Normal file
170
app/controllers/cove.php
Normal file
@@ -0,0 +1,170 @@
|
||||
<?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;
|
||||
}
|
||||
Reference in New Issue
Block a user