From 971c77b56a3c349dba42e3ad91055b9b00355209 Mon Sep 17 00:00:00 2001 From: DanielHaefliger Date: Fri, 5 Dec 2025 11:28:48 +0100 Subject: [PATCH] no message --- Abrechnung/module.php | 227 ++++++++++++++++-------------------------- 1 file changed, 85 insertions(+), 142 deletions(-) diff --git a/Abrechnung/module.php b/Abrechnung/module.php index 0c463d1..34f7366 100644 --- a/Abrechnung/module.php +++ b/Abrechnung/module.php @@ -108,144 +108,82 @@ class Abrechnung extends IPSModule private function BuildUserInvoice($pdf, $user, $power, $water, $tariffs, $from, $to) { $pdf->AddPage(); - $pdf->SetFont('dejavusans', '', 8); - // Titel - $html = " -

Elektro- und Nebenkostenabrechnung

-

Zählpunkte:
"; + // Kopfbereich + $html = " +

Elektro- und Nebenkostenabrechnung

+
+ + + + + +
+ Zählpunkte:
"; - foreach ($power as $pm) { - if ($pm['user_id'] == $user['id']) { - $html .= "• " . htmlspecialchars($pm['name']) . "
"; + // Alle Zählerpunkte des Users auflisten + foreach ($power as $m) { + if ($m['user_id'] == $user['id']) { + $html .= htmlspecialchars($m['name']) . "
"; } } - foreach ($water as $wm) { - if ($wm['user_id'] == $user['id']) { - $html .= "• " . htmlspecialchars($wm['name']) . "
"; + foreach ($water as $m) { + if ($m['user_id'] == $user['id']) { + $html .= htmlspecialchars($m['name']) . "
"; } } - $html .= "

-

Rechnungsadresse:
" - . htmlspecialchars($user['name']) . "
" - . htmlspecialchars($user['address']) . "
" - . htmlspecialchars($user['city']) . "

-

Zeitraum: " . date('d.m.Y', $from) . " – " . date('d.m.Y', $to) . "

-

Elektrizität

"; - - // Stromkosten - $powerResult = $this->GetCalculatedPowerCosts($user['id']); - $html .= $this->FormatPowerTable($powerResult); - - // Nebenkosten - $html .= "

Nebenkosten

"; - $additionalResult = $this->CalculateAdditionalCosts($water, $tariffs, $user['id'], $from, $to); - $html .= $this->FormatAdditionalTable($additionalResult); - - // Gesamtsumme - $grand = $powerResult['sum'] + $additionalResult['sum']; $html .= " - - - - - -
Gesamttotal:" . number_format($grand, 2) . " CHF
"; +
+ Rechnungsadresse:
+ {$user['name']}
+ {$user['address']}
+ {$user['city']}
+
+

+ Abrechnungszeitraum: " . date('d.m.Y', $from) . " – " . date('d.m.Y', $to) . " +

+

+ "; + + // ========================= Elektrizität ========================= + $html .= "

Elektrizität

"; + + $powerResult = $this->GetCalculatedPowerCosts($user['id']); + $html .= $powerResult['html']; + $totalPower = $powerResult['sum']; + + // ========== Stromtarife anzeigen ========== + $appliedTariffs = $this->CollectTariffsForUser($tariffs, ['Netztarif','Solartarif','Einspeisetarif']); + if (!empty($appliedTariffs)) { + $html .= "

Angewendete Elektrizitätstarife:



"; + } + + // ========================= Nebenkosten ========================= + $html .= "

Nebenkosten

"; + + $additionalResult = $this->CalculateAdditionalCosts($water, $tariffs, $user['id'], $from, $to); + $html .= $additionalResult['html']; + $totalAdditional = $additionalResult['sum']; + + // ========================= Gesamttotal ========================= + $grandTotal = $totalPower + $totalAdditional; + $html .= " +

+ Gesamttotal: " . number_format($grandTotal, 2) . " CHF +

+ "; - // Render PDF $pdf->writeHTML($html, true, false, true, false, ''); } -/* ============================ STROM – SCHÖNE TABELLE ============================ */ - -private function FormatPowerTable($result) -{ - $html = " - - - - - - - - - - - - - - "; - - foreach ($result['data'] ?? $this->powerCostCache as $user => $meters) { - foreach ($meters as $m) { - $total = $m['cost_grid'] + $m['cost_solar'] - $m['rev_feedin']; - - $html .= " - - - - - - - - - - - - - "; - } - break; - } - - $html .= "
ZählerImport (kWh)Export (kWh)Solarbezug (kWh)Netzbezug (kWh)Solareinspeisung (kWh)Solarverkauf (kWh)Kosten Solar (CHF)Kosten Netz (CHF)Einnahmen (CHF)Total (CHF)
{$m['name']}" . number_format($m['imp'], 3) . "" . number_format($m['exp'], 3) . "" . number_format($m['solar_bezug'], 3) . "" . number_format($m['netz_bezug'], 3) . "" . number_format($m['solareinspeisung'], 3) . "" . number_format($m['solarverkauf'], 3) . "" . number_format($m['cost_solar'], 2) . "" . number_format($m['cost_grid'], 2) . "" . number_format($m['rev_feedin'], 2) . "" . number_format($total, 2) . "
"; - - // Total in separater Tabelle - $html .= " - - - - - -
Total Elektrizität:" . number_format($result['sum'], 2) . " CHF
"; - - return $html; -} - -/* ========================== NEBENKOSTEN – SCHÖNE TABELLE ========================== */ - -private function FormatAdditionalTable($result) -{ - $html = " - - - - - - - - - - - - - " . $result['html'] . " -
ZählerTypStartEndeZähler StartZähler EndeVerbrauchTarif (Rp)Kosten (CHF)
"; - - // Total - $html .= " - - - - - -
Total Nebenkosten:" . number_format($result['sum'], 2) . " CHF
"; - - return $html; -} - - // ====================== Stromkosten (15-Minuten, alle User) ====================== private function CalculateAllPowerCosts($powerMeters, $tariffs, $from, $to) @@ -388,13 +326,13 @@ private function FormatAdditionalTable($result) $html = " - + - - - - + + + + @@ -428,10 +366,13 @@ $html = " "; } - $html .= " - - -
ZählerID Import ExportSolarbez.Netzbez.Solar Eins.Solarverk.SolarbezugNetzbezugSolar EinspeisungSolarverkauf Solar CHF Netz CHF Einspeis. CHF
Total Elektrizität:" . number_format($sum, 2) . " CHF

"; + $html .= " + + + + + +
Total Elektrizität:" . number_format($result['sum'], 2) . " CHF

"; return ['html' => $html, 'sum' => $sum]; } @@ -443,7 +384,7 @@ $html = " $html = " - + @@ -469,11 +410,13 @@ $html = " $usedTariffs = array_merge($usedTariffs, $cost['tariffs']); } - $html .= " - - - -
ZählerID Typ Start Ende
Total Nebenkosten:" . number_format($total, 2) . " CHF

"; + $html .= " + + + + + +
Total Nebenkosten:" . number_format($result['sum'], 2) . " CHF

"; if (!empty($usedTariffs)) { $html .= "

Angewendete Nebenkostentarife:


"; + $html .= "

"; } return ['html' => $html, 'sum' => $total];