Mejorar Balance General con detalle de conceptos especiales y filtro por año
This commit is contained in:
@@ -66,6 +66,92 @@ class Report {
|
||||
];
|
||||
}
|
||||
|
||||
public static function getConceptDetailsByYear($year = null) {
|
||||
$db = Database::getInstance();
|
||||
$concepts = $db->fetchAll(
|
||||
"SELECT c.id, c.name, c.amount_per_house, c.concept_date, c.description
|
||||
FROM finance_collection_concepts c
|
||||
WHERE c.is_active = 1
|
||||
ORDER BY c.concept_date DESC"
|
||||
);
|
||||
|
||||
$conceptsData = [];
|
||||
$totalExpected = 0;
|
||||
$totalCollected = 0;
|
||||
$totalExpenses = 0;
|
||||
|
||||
foreach ($concepts as $concept) {
|
||||
$conceptYear = date('Y', strtotime($concept['concept_date']));
|
||||
|
||||
if ($year && $conceptYear != $year) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$activeHousesCount = $db->fetchOne(
|
||||
"SELECT COUNT(*) as count FROM houses WHERE status = 'activa'"
|
||||
);
|
||||
$activeHousesCount = $activeHousesCount['count'] ?? 0;
|
||||
|
||||
$expected = $concept['amount_per_house'] * $activeHousesCount;
|
||||
|
||||
$whereClause = "WHERE cp.concept_id = ?";
|
||||
$params = [$concept['id']];
|
||||
|
||||
if ($year) {
|
||||
$whereClause .= " AND YEAR(cp.payment_date) = ?";
|
||||
$params[] = $year;
|
||||
}
|
||||
|
||||
$collected = $db->fetchOne(
|
||||
"SELECT COALESCE(SUM(cp.amount), 0) as total
|
||||
FROM finance_collection_payments cp
|
||||
$whereClause",
|
||||
$params
|
||||
);
|
||||
$collectedAmount = $collected['total'] ?? 0;
|
||||
|
||||
$expenses = $db->fetchOne(
|
||||
"SELECT COALESCE(SUM(ec.amount), 0) as total
|
||||
FROM expense_concept_allocations ec
|
||||
JOIN expenses e ON ec.expense_id = e.id
|
||||
WHERE ec.concept_id = ?
|
||||
" . ($year ? "AND YEAR(e.expense_date) = ?" : ""),
|
||||
$year ? [$concept['id'], $year] : [$concept['id']]
|
||||
);
|
||||
$expensesAmount = $expenses['total'] ?? 0;
|
||||
|
||||
$balance = $collectedAmount - $expensesAmount;
|
||||
|
||||
$conceptsData[] = [
|
||||
'concept' => $concept,
|
||||
'year' => $conceptYear,
|
||||
'expected' => $expected,
|
||||
'collected' => $collectedAmount,
|
||||
'expenses' => $expensesAmount,
|
||||
'balance' => $balance,
|
||||
'pending' => max(0, $expected - $collectedAmount)
|
||||
];
|
||||
|
||||
$totalExpected += $expected;
|
||||
$totalCollected += $collectedAmount;
|
||||
$totalExpenses += $expensesAmount;
|
||||
}
|
||||
|
||||
$totalBalance = $totalCollected - $totalExpenses;
|
||||
|
||||
return [
|
||||
'concepts' => $conceptsData,
|
||||
'totals' => [
|
||||
'expected' => $totalExpected,
|
||||
'collected' => $totalCollected,
|
||||
'expenses' => $totalExpenses,
|
||||
'balance' => $totalBalance,
|
||||
'pending' => max(0, $totalExpected - $totalCollected)
|
||||
],
|
||||
'year' => $year
|
||||
];
|
||||
}
|
||||
|
||||
public static function getHouseStatement($houseId, $year = null) {
|
||||
$db = Database::getInstance();
|
||||
$house = House::findById($houseId);
|
||||
|
||||
Reference in New Issue
Block a user