actividades

This commit is contained in:
Lizandro Guarnizo
2026-04-08 09:02:32 -05:00
parent 3d252efbdd
commit d38b5936ca
12 changed files with 427 additions and 11 deletions
+71
View File
@@ -129,4 +129,75 @@ class ActividadAdmin {
ORDER BY modulo, total DESC
", [$desde, $hasta]);
}
/**
* Filtrado avanzado con paginación.
*
* @param array $opts {desde, hasta, modulo, accion, admin_id, buscar, page, per_page}
* @return array {data, total, paginas, pagina}
*/
public function filtrar(array $opts = []): array {
$where = [];
$params = [];
if (!empty($opts['desde'])) {
$where[] = 'DATE(a.created_at) >= ?';
$params[] = $opts['desde'];
}
if (!empty($opts['hasta'])) {
$where[] = 'DATE(a.created_at) <= ?';
$params[] = $opts['hasta'];
}
if (!empty($opts['modulo'])) {
$where[] = 'a.modulo = ?';
$params[] = $opts['modulo'];
}
if (!empty($opts['accion'])) {
$where[] = 'a.accion = ?';
$params[] = $opts['accion'];
}
if (!empty($opts['admin_id'])) {
$where[] = 'a.admin_id = ?';
$params[] = (int)$opts['admin_id'];
}
if (!empty($opts['buscar'])) {
$where[] = '(a.admin_nombre LIKE ? OR a.detalle LIKE ?)';
$like = '%' . $opts['buscar'] . '%';
$params[] = $like;
$params[] = $like;
}
$whereStr = $where ? 'WHERE ' . implode(' AND ', $where) : '';
$total = (int)($this->db->fetch(
"SELECT COUNT(*) AS n FROM lab_actividad_admin a $whereStr",
$params
)['n'] ?? 0);
$pp = max(1, (int)($opts['per_page'] ?? 50));
$pag = max(1, (int)($opts['page'] ?? 1));
$off = ($pag - 1) * $pp;
$pParams = $params;
$pParams[] = $pp;
$pParams[] = $off;
$data = $this->db->fetchAll("
SELECT
a.*,
u.username AS admin_username
FROM lab_actividad_admin a
LEFT JOIN admin_users u ON u.id = a.admin_id
$whereStr
ORDER BY a.created_at DESC
LIMIT ? OFFSET ?
", $pParams);
return [
'data' => $data,
'total' => $total,
'paginas' => (int)ceil($total / $pp),
'pagina' => $pag,
];
}
}