Jörg: Warum wird die falsche Endsumme ausgegeben?

Beitrag lesen

Hallo,

ich drucke eine Rechnung als PDF aus, mithilfe von fpdf. Auf mehrseitigen Rechn ungen drucke ich hierbei Zwischensummen aus, die auf der letzten Seite ggf. noch um einen Gesamtrabatt oder geleistete Anzahlungen reduziert werden kann.

Meine Funktion für das Setzen und die Ausgabe der Zwischensummen:

function myArrayZwischensumme($set_get,$Art,$betrag,$page)
{

    $ergebnis = 0;
    $overwrite = 0;
    if(!isset($arrPage)) {
        static $arrPage = [];
    }

    if($set_get == 'set') {
        $arrPage[$page] = $arrPage[$page] + $betrag;
        logge('Ergebnis Seite '.$page.' :'.$arrPage[$page],'__test.txt');
    } elseif($set_get == 'overwrite') {
        $arrPage[$page] = $betrag;
        $overwrite++;
    } elseif($set_get == 'get') {
        logge('Get Seite '.$page.' :'.$arrPage[$page],'__test.txt');
        if($overwrite == 0) {
            for($i = 1;$i <= $page;$i++) {
                $ergebnis = $ergebnis + $arrPage[$i];
            }
        } else {
            $ergebnis = $betrag;
        }
        logge('return Seite '.$page.' = '.$ergebnis, '__test.txt');
        return number_format($ergebnis,2,".","");

    }
    return;
}

Das Endergebnis fordere ich wie folgt an:

 logge('Endergebnis anfordern','__test.txt');
 $pdf->MultiCell(30,5,myArrayZwischensumme('get','Endsumme',0,$pdf->PageNo()),0,'L',0);

Und ich erhalte folgende Logdatei:

23.11.2022 12:06:24.756200: Ergebnis Seite  :0
23.11.2022 12:06:24.764400: Ergebnis Seite  :0
23.11.2022 12:06:24.789200: Ergebnis Seite 1 :3545
23.11.2022 12:06:24.796600: Ergebnis Seite 1 :3545
23.11.2022 12:06:24.801400: Ergebnis Seite 1 :7000
23.11.2022 12:06:24.806100: Get Seite 1 :7000
23.11.2022 12:06:24.811800: return Seite 1 = 7000
23.11.2022 12:06:24.862400: Endergebnis anfordern
23.11.2022 12:06:24.866600: Get Seite 2 :0
23.11.2022 12:06:24.870800: return Seite 2 = 7000

Die ersten beiden Einträge der Logdatei bedeuten, dass in 2 Arten von Dienstleistungen keine Leistung geflossen ist. Erst im der 3. Art von Dienstleistung sind 2 Posten in die Rechnung eingeflossen. Beide mit einem Betrag von 3545 Euro. Beide stehen auf Seite 1 der Rechnung. Dann wird das Zwischenergebnis der Seite 1 angefordert und auch returniert.
Auf Seite 2 stehen weitere Informatijonen und es werden 2 Anzahlungen in Gesamthöhe von 7000,- Euro abgezogen (aus der Logdatei nicht ersichtlich, aber mit Parameter "overwrite" an die Funktion übergeben)

Somit steht leider im PDF in Seite 2 nicht 0.00 als Ergebnis, sondern 7000. Und das ist ja definitiv falsch.

Liegt wohl daran, dass $overwrite bei jedem Funktionsaufruf wieder auf 0 gesetzt wird. Aber es kann doch nicht die Lösung sein, hieraus eine statische Variable zu sein, oder?

Ich habe vielmehr den Eindruck, dass meine Funktion selber nicht ganz optimal ist. Kann da mal jemand von Euch mit drüber schauen? Ich hoffe, mein Input hierfür reicht aus. Falls nicht, bitte danach fragen.

Jörg