fix: Corregir envío de filtros en exportación PDF de Deudores de Conceptos

- Filtrar valores 'all' cuando hay opciones específicas seleccionadas
- Evitar envío de arrays mixtos ['all', '11'] que causaban incluir todas las casas
- Aplicar misma lógica en formulario de filtros y exportación
- Limpiar logs de debug temporales
This commit is contained in:
2026-01-05 16:25:17 -06:00
parent cd64582c99
commit a1e67a8a0b
3 changed files with 134 additions and 83 deletions

View File

@@ -925,19 +925,7 @@ switch ($page) {
$houseFilters = $_GET['filter_houses'] ?? [];
$conceptFilters = $_GET['filter_concepts'] ?? [];
// Debug: mostrar todos los parámetros GET y qué filtros se están recibiendo
error_log("DEBUG - All GET params: " . print_r($_GET, true));
error_log("DEBUG - House filters: " . print_r($houseFilters, true));
error_log("DEBUG - Concept filters: " . print_r($conceptFilters, true));
// Debug temporal: escribir a archivo para ver logs
$debugFile = __DIR__ . '/debug_concept_filters.log';
$debugData = date('Y-m-d H:i:s') . "\n";
$debugData .= "All GET params: " . print_r($_GET, true) . "\n";
$debugData .= "House filters: " . print_r($houseFilters, true) . "\n";
$debugData .= "Concept filters: " . print_r($conceptFilters, true) . "\n";
$debugData .= "------------------------\n";
file_put_contents($debugFile, $debugData, FILE_APPEND);
// Determinar casas a filtrar para exportación
if (empty($houseFilters) || in_array('all', $houseFilters)) {

View File

@@ -527,16 +527,8 @@ class Report {
ORDER BY cc.name, h.number, cc.concept_date DESC
";
error_log("DEBUG - SQL Query: " . $query);
error_log("DEBUG - SQL Params: " . print_r($params, true));
$results = $db->fetchAll($query, $params);
error_log("DEBUG - SQL Results count: " . count($results));
if (count($results) > 0) {
error_log("DEBUG - First result sample: " . print_r($results[0], true));
}
// Group by concept like the original method
$debtors = [];
$grandTotal = 0;

View File

@@ -252,7 +252,7 @@ function exportWaterDebtorsPDF() {
<h5 class="mb-0"><i class="bi bi-funnel"></i> Filtros</h5>
</div>
<div class="card-body">
<form method="GET" class="row g-3">
<form method="GET" class="row g-3" id="conceptFiltersForm">
<input type="hidden" name="page" value="reportes">
<input type="hidden" name="type" value="concept-debtors">
@@ -384,12 +384,28 @@ function exportConceptDebtorsPDF() {
const houseCheckboxes = document.querySelectorAll('input[name="filter_houses[]"]:checked');
const conceptCheckboxes = document.querySelectorAll('input[name="filter_concepts[]"]:checked');
// Debug: mostrar qué checkboxes están marcados
const selectedHouses = Array.from(houseCheckboxes).map(cb => cb.value);
const selectedConcepts = Array.from(conceptCheckboxes).map(cb => cb.value);
// Filtrar: excluir 'all' si hay opciones específicas seleccionadas
let selectedHouses = Array.from(houseCheckboxes)
.map(cb => cb.value)
.filter(value => {
if (value === 'all') {
// Solo incluir 'all' si no hay otras opciones seleccionadas
return houseCheckboxes.length === 1;
}
return true;
});
let selectedConcepts = Array.from(conceptCheckboxes)
.map(cb => cb.value)
.filter(value => {
if (value === 'all') {
// Solo incluir 'all' si no hay otras opciones seleccionadas
return conceptCheckboxes.length === 1;
}
return true;
});
console.log('DEBUG - Selected houses:', selectedHouses);
console.log('DEBUG - Selected concepts:', selectedConcepts);
let url = '/dashboard.php?page=reportes_actions&action=export_pdf_report&type=concept-debtors';
@@ -411,6 +427,61 @@ function exportConceptDebtorsPDF() {
window.open(url, '_blank');
}
// Procesar formulario de filtros antes de enviar
document.addEventListener('DOMContentLoaded', function() {
const form = document.getElementById('conceptFiltersForm');
if (form) {
form.addEventListener('submit', function(e) {
// Filtrar los valores antes de enviar
const houseCheckboxes = form.querySelectorAll('input[name="filter_houses[]"]:checked');
const conceptCheckboxes = form.querySelectorAll('input[name="filter_concepts[]"]:checked');
// Limpiar valores existentes
const existingHouses = form.querySelectorAll('input[name="filter_houses[]"]');
const existingConcepts = form.querySelectorAll('input[name="filter_concepts[]"]');
existingHouses.forEach(input => input.remove());
existingConcepts.forEach(input => input.remove());
// Agregar solo los valores filtrados
let selectedHouses = Array.from(houseCheckboxes)
.map(cb => cb.value)
.filter(value => {
if (value === 'all') {
return houseCheckboxes.length === 1;
}
return true;
});
let selectedConcepts = Array.from(conceptCheckboxes)
.map(cb => cb.value)
.filter(value => {
if (value === 'all') {
return conceptCheckboxes.length === 1;
}
return true;
});
// Crear inputs hidden con los valores filtrados
selectedHouses.forEach(house => {
const input = document.createElement('input');
input.type = 'hidden';
input.name = 'filter_houses[]';
input.value = house;
form.appendChild(input);
});
selectedConcepts.forEach(concept => {
const input = document.createElement('input');
input.type = 'hidden';
input.name = 'filter_concepts[]';
input.value = concept;
form.appendChild(input);
});
});
}
});
// Lógica para checkboxes de casas
document.addEventListener('DOMContentLoaded', function() {
const houseAllCheckbox = document.getElementById('house-all');