feat: Agregar filtros avanzados a reporte de Deudores de Conceptos

- Filtros por casas: selección múltiple con opción 'Todas las casas'
- Filtros por conceptos: selección múltiple con opción 'Todos los conceptos'
- Estado inicial: todos los filtros marcados por defecto (muestra toda la info)
- Exportación PDF: incluye solo datos filtrados según selección
- JavaScript interactivo: lógica de checkboxes con estados intermedios
- Modelo actualizado: método getConceptDebtorsFiltered para filtrado avanzado
- Interfaz intuitiva: scrollable containers para listas largas
- Preserva permisos: respeta restricciones de acceso por casas
This commit is contained in:
2026-01-05 16:12:24 -06:00
parent 5d5f81c325
commit 535f7c5963
13 changed files with 1944 additions and 3 deletions

View File

@@ -596,7 +596,25 @@ switch ($page) {
}
$waterDebtors = Report::getWaterDebtors($filters);
} elseif ($reportType == 'concept-debtors') {
$conceptDebtors = Report::getConceptDebtors($accessibleHouseIds);
// Procesar filtros de casas y conceptos
$houseFilters = $_GET['filter_houses'] ?? ['all'];
$conceptFilters = $_GET['filter_concepts'] ?? ['all'];
// Determinar casas a filtrar
if (in_array('all', $houseFilters) || empty($houseFilters)) {
$filteredHouses = $accessibleHouseIds;
} else {
$filteredHouses = array_intersect($houseFilters, $accessibleHouseIds);
}
// Determinar conceptos a filtrar
if (in_array('all', $conceptFilters) || empty($conceptFilters)) {
$filteredConcepts = null; // Todos los conceptos
} else {
$filteredConcepts = $conceptFilters;
}
$conceptDebtors = Report::getConceptDebtorsFiltered($filteredHouses, $filteredConcepts);
}
$view = 'reports/index';
@@ -896,7 +914,26 @@ switch ($page) {
case 'concept-debtors':
// Requerimos el modelo Report
require_once __DIR__ . '/models/Report.php';
$conceptDebtors = Report::getConceptDebtors($accessibleHouseIds);
// Procesar filtros para exportación
$houseFilters = $_GET['filter_houses'] ?? ['all'];
$conceptFilters = $_GET['filter_concepts'] ?? ['all'];
// Determinar casas a filtrar para exportación
if (in_array('all', $houseFilters) || empty($houseFilters)) {
$filteredHouses = $accessibleHouseIds;
} else {
$filteredHouses = array_intersect($houseFilters, $accessibleHouseIds);
}
// Determinar conceptos a filtrar para exportación
if (in_array('all', $conceptFilters) || empty($conceptFilters)) {
$filteredConcepts = null; // Todos los conceptos
} else {
$filteredConcepts = $conceptFilters;
}
$conceptDebtors = Report::getConceptDebtorsFiltered($filteredHouses, $filteredConcepts);
include __DIR__ . '/views/reports/pdf_concept_debtors.php';
break;
case 'expenses':