Mejorar Balance General con detalle de conceptos especiales y filtro por año

This commit is contained in:
Administrador Ibiza
2025-12-30 23:36:51 -06:00
parent d629526485
commit 5e714ebae9
4 changed files with 327 additions and 32 deletions

View File

@@ -533,6 +533,8 @@ switch ($page) {
$balance = Report::getGeneralBalance();
$expensesByCategory = Report::getExpensesByCategory();
$accessibleHouseIds = Auth::getAccessibleHouseIds();
$filterYear = $_GET['filter_year'] ?? null;
$conceptDetails = Report::getConceptDetailsByYear($filterYear);
if ($reportType == 'water-debtors') {
$filters = [
@@ -754,6 +756,8 @@ switch ($page) {
// Requerimos el modelo Report
require_once __DIR__ . '/models/Report.php';
$balance = Report::getGeneralBalance();
$filterYear = $_GET['filter_year'] ?? null;
$conceptDetails = Report::getConceptDetailsByYear($filterYear);
include __DIR__ . '/views/reports/pdf_balance.php';
break;
}
@@ -763,25 +767,63 @@ switch ($page) {
exit;
case 'export_csv_balance':
// Lógica para exportar CSV de balance
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="Balance_General_IBIZA_' . date('Y') . '.csv"');
fputs(fopen('php://output', 'w'), $bom = (chr(0xEF) . chr(0xBB) . chr(0xBF))); // BOM for UTF-8 in Excel
// Requerimos el modelo Report
Auth::requireAdmin();
require_once __DIR__ . '/models/Report.php';
$filterYear = $_GET['filter_year'] ?? null;
$balance = Report::getGeneralBalance();
$conceptDetails = Report::getConceptDetailsByYear($filterYear);
header('Content-Type: text/csv');
$filename = 'Balance_General_IBIZA';
if ($filterYear) {
$filename .= '_' . $filterYear;
}
header('Content-Disposition: attachment; filename="' . $filename . '.csv"');
fputs(fopen('php://output', 'w'), $bom = (chr(0xEF) . chr(0xBB) . chr(0xBF)));
$output = fopen('php://output', 'w');
fputcsv($output, ['Condominio IBIZA-Cto Sierra Morena 152 - Balance General ' . date('Y')]);
fputcsv($output, ['Condominio IBIZA-Cto Sierra Morena 152 - Balance General']);
if ($filterYear) {
fputcsv($output, ['Año: ' . $filterYear]);
}
fputcsv($output, ['']); // Blank line
fputcsv($output, ['Descripción', 'Monto']);
fputcsv($output, ['Total Ingresos (Conceptos)', $balance['total_incomes']]);
if (!Auth::isLector()) {
fputcsv($output, ['Total Egresos', $balance['total_expenses']]);
fputcsv($output, ['Balance Neto', $balance['balance']]);
fputcsv($output, ['Total Egresos', $balance['total_expenses']]);
fputcsv($output, ['Balance Neto', $balance['balance']]);
fputcsv($output, ['']); // Blank line
if (!empty($conceptDetails['concepts'])) {
fputcsv($output, ['Detalle de Conceptos Especiales']);
fputcsv($output, ['']); // Blank line
fputcsv($output, ['Concepto', 'Descripción', 'Esperado', 'Recaudado', 'Pendiente', 'Gastos', 'Balance']);
foreach ($conceptDetails['concepts'] as $cd) {
fputcsv($output, [
$cd['concept']['name'],
$cd['concept']['description'] ?? '-',
$cd['expected'],
$cd['collected'],
$cd['pending'],
$cd['expenses'],
$cd['balance']
]);
}
fputcsv($output, ['']); // Blank line
fputcsv($output, [
'TOTALES',
'',
$conceptDetails['totals']['expected'],
$conceptDetails['totals']['collected'],
$conceptDetails['totals']['pending'],
$conceptDetails['totals']['expenses'],
$conceptDetails['totals']['balance']
]);
}
fclose($output);
exit;