actividades
This commit is contained in:
@@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user