diff --git a/Abrechnung/module.php b/Abrechnung/module.php
index b157d65..afb0b6a 100644
--- a/Abrechnung/module.php
+++ b/Abrechnung/module.php
@@ -399,64 +399,26 @@ class Abrechnung extends IPSModule
}
private function GetCalculatedPowerCosts($userId)
{
+ // Inline-styles + TCPDF-kompatible Struktur
$html = "
-
-
-
+
- | ID |
- Import (kWh) |
- Export (kWh) |
- ZEV-Haus (kWh) |
- Netz-Haus (kWh) |
- Solar-Netz (kWh) |
- Solar-ZEV (kWh) |
- Kauf Solar (CHF) |
- Kauf Netz (CHF) |
- Verkauf Netz (CHF) |
- Verkauf ZEV (CHF) |
- Total CHF |
+ ID |
+ Import (kWh) |
+ Export (kWh) |
+ ZEV-Haus (kWh) |
+ Netz-Haus (kWh) |
+ Solar-Netz (kWh) |
+ Solar-ZEV (kWh) |
+ Kauf Solar (CHF) |
+ Kauf Netz (CHF) |
+ Verkauf Netz (CHF) |
+ Verkauf ZEV (CHF) |
+ Total CHF |
";
if (empty($this->powerCostCache) || !isset($this->powerCostCache[$userId])) {
- $html .= "| Keine Stromzähler für diesen Benutzer |
";
+ $html .= "| Keine Stromzähler für diesen Benutzer |
";
return ['html' => $html, 'sum' => 0.0];
}
@@ -468,36 +430,94 @@ private function GetCalculatedPowerCosts($userId)
$subtotal = $a['cost_grid'] + $a['cost_solar'] - ($a['rev_feedin'] + $a['rev_zev']);
$sum += $subtotal;
- $rowClass = ($rowIndex % 2 === 0) ? "row-even" : "row-odd";
+ // Alternierende Hintergrundfarbe (einfach über inline style)
+ $bg = ($rowIndex % 2 === 0) ? '#f7f7f7' : '#ffffff';
$rowIndex++;
- // Datenzeile
- $html .= "
- | {$a['name']} |
- " . number_format($a['imp'], 3) . " |
- " . number_format($a['exp'], 3) . " |
- " . number_format($a['solar_bezug'], 3) . " |
- " . number_format($a['netz_bezug'], 3) . " |
- " . number_format($a['solareinspeisung'], 3) . " |
- " . number_format($a['solarverkauf'], 3) . " |
- " . number_format($a['cost_solar'], 2) . " |
- " . number_format($a['cost_grid'], 2) . " |
- " . number_format($a['rev_feedin'], 2) . " |
- " . number_format($a['rev_zev'], 2) . " |
- " . number_format($subtotal, 2) . " |
+ // Funktion zum formatieren mit monospace-alignment (Breite anpassen falls nötig)
+ $fmtKwh = function($v) { return number_format($v, 3, '.', "'"); }; // Tausendertrenner ' optional
+ $fmtChf = function($v) { return number_format($v, 2, '.', "'"); };
+
+ $html .= "
+ | {$a['name']} |
+
+
+ " . $fmtKwh($a['imp']) . "
+ |
+
+
+ " . $fmtKwh($a['exp']) . "
+ |
+
+
+ " . $fmtKwh($a['solar_bezug']) . "
+ |
+
+
+ " . $fmtKwh($a['netz_bezug']) . "
+ |
+
+
+ " . $fmtKwh($a['solareinspeisung']) . "
+ |
+
+
+ " . $fmtKwh($a['solarverkauf']) . "
+ |
+
+
+ " . $fmtChf($a['cost_solar']) . "
+ |
+
+
+ " . $fmtChf($a['cost_grid']) . "
+ |
+
+
+ " . $fmtChf($a['rev_feedin']) . "
+ |
+
+
+ " . $fmtChf($a['rev_zev']) . "
+ |
+
+
+ " . $fmtChf($subtotal) . "
+ |
";
- // Leerzeile
- $html .= " |
";
+ // Leerzeile zwischen Zählern (leichter grauer Hintergrund)
+ $html .= " |
";
}
- // Gesamttotal
+ // Subtotal - einzeilige obere Linie (in gleicher Spalte wie subtotal)
$html .= "
-
- | Gesamttotal |
- " . number_format($sum, 2) . " |
-
- ";
+
+ | Subtotal |
+
+ " . number_format($sum, 2, '.', "'") . "
+ |
+
";
+
+ // Doppel-Linie: wir fügen eine sehr dünne Linie und direkt darunter eine dickere Linie ein,
+ // da 'double' nicht immer zuverlässig in TCPDF gerendert wird.
+ $html .= "
+
+ |
+
+
+ |
+
";
+
+ // Gesamttotal-Zeile (gleich Spalte wie Subtotal)
+ $html .= "
+
+ | Gesamttotal |
+
+ " . number_format($sum, 2, '.', "'") . "
+ |
+
+ ";
return ['html' => $html, 'sum' => $sum];
}