lab_formularios

This commit is contained in:
Lizandro Guarnizo
2026-04-07 15:12:22 -05:00
parent 58f420e7ce
commit ded060e161
3 changed files with 147 additions and 184 deletions
+27 -5
View File
@@ -173,7 +173,7 @@ class Formulario {
/**
* Listar envíos (admin/enfermero).
*/
public function listarEnvios(array $filtros = []): array {
public function listarEnvios(array $filtros = [], int $pagina = 1, int $porPagina = 20): array {
$where = ['1=1'];
$params = [];
if (!empty($filtros['formulario_id'])) { $where[] = 'e.formulario_id = ?'; $params[] = $filtros['formulario_id']; }
@@ -181,8 +181,22 @@ class Formulario {
if (!empty($filtros['enviado_por'])) { $where[] = 'e.enviado_por = ?'; $params[] = $filtros['enviado_por']; }
if (!empty($filtros['estado'])) { $where[] = 'e.estado = ?'; $params[] = $filtros['estado']; }
if (!empty($filtros['fecha_desde'])) { $where[] = 'DATE(e.created_at) >= ?'; $params[] = $filtros['fecha_desde']; }
$w = implode(' AND ', $where);
return $this->db->fetchAll("
if (!empty($filtros['fecha_hasta'])) { $where[] = 'DATE(e.created_at) <= ?'; $params[] = $filtros['fecha_hasta']; }
if (!empty($filtros['paciente'])) { $where[] = 'p.nombre_completo LIKE ?'; $params[] = '%' . $filtros['paciente'] . '%'; }
$w = implode(' AND ', $where);
$offset = ($pagina - 1) * $porPagina;
$total = $this->db->fetch(
"SELECT COUNT(*) AS n
FROM lab_form_envios e
JOIN lab_formularios f ON f.id = e.formulario_id
LEFT JOIN lab_pacientes p ON p.id = e.paciente_id
LEFT JOIN admin_users u ON u.id = e.enviado_por
WHERE $w",
$params
)['n'] ?? 0;
$rows = $this->db->fetchAll("
SELECT e.*, f.nombre AS form_nombre, f.categoria, f.esquema,
p.nombre_completo AS paciente_nombre,
u.full_name AS enviado_por_nombre
@@ -192,8 +206,16 @@ class Formulario {
LEFT JOIN admin_users u ON u.id = e.enviado_por
WHERE $w
ORDER BY e.created_at DESC
LIMIT 200
", $params);
LIMIT ? OFFSET ?
", array_merge($params, [$porPagina, $offset]));
return [
'data' => $rows,
'total' => (int)$total,
'pagina' => $pagina,
'por_pagina' => $porPagina,
'paginas' => (int)ceil($total / max(1, $porPagina)),
];
}
// ─────────────────────────────────────────────────────────────────────────