Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: MODUL: PDFBill Next - PDF Rechnung/Lieferschein - Inklusive Mailversand

    Schreinermeister

    • Fördermitglied
    • Beiträge: 413
    • Geschlecht:
    Hallo oneQ,

    ich erfasse die Rücklieferungen in der ursprünglichen Bestellung.

    Es wird aber eine neue Rechnung als "Korrektur-Rechnung" erstellt.
    Trade Republic - Provisionsfrei Aktien handeln

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Ah. Ok. Bei der Korrekturrechnung stehen die Artikel dann einmal wie bestellt drin und dann nochmal negiert, was zurück ging? Finde den Lösungsansatz interessant. ;)

    swolfram [templatix]

    • Fördermitglied
    • Beiträge: 1.168
    • Geschlecht:
    Ich weiß ja nicht, wie schnell du die 10.000 voll bekommst, aber im Archiv hast Du dann das gleiche Problem wieder.
    Vielleicht kann man die Dateiauflistung im Backend um eine Ordnernavigation erweitern, dann wären mehrere "Archivordner" (z.B. nach Jahr/zehnt aufgeteilt) möglich.
    Bin ich letztens auch drüber gestolpert. Wer jeden Monate hunderte Bestellungen hat, erreicht das Ziel schnell. Zudem haben verschiedene Hoster ja auch verschiedene Beschränkungen per FTP oder Dateianzahl.

    Eine Ordnerstruktur ähnlich Wordpress wäre hilfreich, wo alles nach Jahr und Monat abgelegt wird. Damit ließe sich auch Monate später eine Rechnung schnell wiederfinden.

    Rechnungen manuell zu verschieben oder zu löschen ist kontraproduktiv, da der Kunde dann keinen Zugriff mehr darauf hat bzw man quasi eine "neue" Rechnung erstellt auf Grund der aktuellen Vorlage.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Das lässt sich doch ganz einfach bewerkstelligen.
    Schau mal in die /inc/xtc_pdf_bill.inc.php nach dieser Zeile (oder so ähnlich, gibt ja mehrere Versionen):
    Code: PHP  [Auswählen]
    $filename = DIR_FS_DOCUMENT_ROOT.DIR_ADMIN  . 'invoice/' . $filePrefix . '.pdf';

    Daraus könntest du z.B. das machen:
    Code: PHP  [Auswählen]
    $filename = DIR_FS_DOCUMENT_ROOT.DIR_ADMIN  . 'invoice/' . date('Y') . '/' . date('m') . '/' . $filePrefix . '.pdf';

    Dann würden die Rechnungen in /invoice/JAHR_VIERSTELLIG/MONAT_ZWEISTELLIG/DATEI_NAME.pdf gespeichert.
    Kannst du ja nach Gusto anpassen.

    Gruß,
    noRiddle

    *NACHTRAG*
    Achso, es fehlt noch was, sorry.
    Die Ordnerstruktur muß ja noch angelegt werden.
    Suche also in /includes/classes/FPDF/fpdf.php das
    Code: PHP  [Auswählen]
                    case 'F':
                            // Save to local file
                            $f = fopen($name,'wb');
                            if(!$f)
                                    $this->Error('Unable to create output file: '.$name);
                            fwrite($f,$this->buffer,strlen($this->buffer));
                            fclose($f);
                            break;

    und mache daraus das
    Code: PHP  [Auswählen]
                    case 'F':
                            //create dir structure first if needed, 04-2021, noRiddle
                $dedicated_dir_struct = dirname($name);
                if(!is_dir($dedicated_dir_struct)) {
                    mkdir($dedicated_dir_struct, 0755, true);
                }
               
                // Save to local file
                            $f = fopen($name,'wb');
                            if(!$f)
                                    $this->Error('Unable to create output file: '.$name);
                            fwrite($f,$this->buffer,strlen($this->buffer));
                            fclose($f);
                            break;

    Nicht getestet ! (aber dafür haben wir ja dich :-D)

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Sehe gerade, daß es noch ein Problemchen gibt mit dem Lesen der Rechnung aus dem Backend heraus.
    In /admin/print_order_pdf.php und /admin/print_packingslip_pdf.php wird ja noch ein readfile() gemacht auf den Pfad zur Rechnung. Der Pfad ist dort aber hard-codiert. Da muß uns noch etwas einfallen.

    Das Problem dabei ist, daß im Falle man die Rechnung auch senden möchte diese neu generiert wird und folglich auch der Pfad. Möchte man also einem Kunden eine Rechnung noch einmal senden in einem Monat in welchem die ursprüngliche Rechnung nicht generiert wurde wird ein neuer Ordner mit dem momentanen Monat angelegt und die Rechnung dort gespeichert, womit man zwei Rechnungen in jeweils einem anderen Monats-Ordner hätte.

    Interessiert mich jetzt wie man das lösen könnte, überlege mir eine Lösung...
    Wer eine Idee hat, her damit.

    Gruß,
    noRiddle

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Tendenziell prüfen, ob es für die order eine Rechnungsnummer gibt und dann Y und M aus dem Rechnungsdatum aus der orders generieren. Wäre grob mein Ansatz.

    *edit* mich hat in dem Modul gestört, dass bei jedem Aufruf der Rechnung über die Bestellübersicht, die Rechnung neu erstellt wird. Zwar mit altem ReDatum, aber der Zeitstempel der Datei war damit geändert. Hatte ich dann bei mir angepasst.

    swolfram [templatix]

    • Fördermitglied
    • Beiträge: 1.168
    • Geschlecht:
    Nicht getestet ! (aber dafür haben wir ja dich :-D)
    Danke für Deine schnelle Antwort, aber ich werde auch die nächste Zeit nicht zum testen kommen  :-|
    Mir kam das letztens nur in den Sinn, als ich bei einem Kunden über gute 36.000 Dateien im Ordner gestolpert bin. Und einfach löschen kannste die ja auch nicht, aus Gründen. Sind ja nicht nur die Rechnungen, sondern auch die Lieferscheine, welche dort abgelegt werden und das summiert sich irre schnell.

    @oneQ
    Der Zeitstempel der Datei ist noch das geringere Übel. Wenn sich aber an der Vorlage was geändert hat, dann hat man plötzlich eine ganz andere Rechnung in der Hand. Ist ja nicht ungewöhnlich, dass sich im Laufe der Zeit ein Firmenname oder Adresse mal ändert, oder auch nur das Shoplogo.

    Das Modul selber ist wirklich super und läuft in diversen Shops seit Jahren ohne Probleme. Nur was die Langzeithaltung, Konsistenz und Archivierung angeht, da gibt es eben noch Potential.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Völlig d'accord mit euren Ausagen.
    Und ja,
    ...
    mich hat in dem Modul gestört, dass bei jedem Aufruf der Rechnung über die Bestellübersicht, die Rechnung neu erstellt wird. Zwar mit altem ReDatum, aber der Zeitstempel der Datei war damit geändert. Hatte ich dann bei mir angepasst.
    stört mich ebenfalls.

    Dann werde ich das beizeiten mal komplett überarbeiten, mir gefällt da so einiges nicht.

    Und bevor jetzt wieder jemand damit kommt, daß FPDF veraltet ist und man im Falle des Überarbeitens eine neuere Bibliothek/Klasse nehmen sollte, bitte, er möge das in die Hand nehmen.

    Gruß,
    noRiddle

    Schreinermeister

    • Fördermitglied
    • Beiträge: 413
    • Geschlecht:
    Hallo zusammen,

    ich nutze dieses Modul schon seit längerem und habe auch die ein oder andere kleinere Anpassung "programmiert" 8-)
    (naja eher etwas geschrieben und dann so lange herumexperimentiert und gegoogelt bis halbwegs das herauskommt was man möchte oder meine Geduld am Ende war).

    Ev. kann folgendes Vorgehen helfen.

    in der PDFBill Konfiguration kann zur Rechnungsnummer auch der Monat und das Jahr "angehängt" werden.
    [ Für Gäste sind keine Dateianhänge sichtbar ]
    dies könnte doch zur Identifizierung der Ordnerstruktur verwendet werden, Oder?

    @oneQ
    die vorhandene Rechnung kann über das PDF-Symbol heruntergeladen werden. Dadurch wird keine neue Rechnung, mit anderem Zeitstempel, erzeugt.
    [ Für Gäste sind keine Dateianhänge sichtbar ]

    gruß Chris

    Schreinermeister

    • Fördermitglied
    • Beiträge: 413
    • Geschlecht:
    EDIT
    falsches Bild. kann dies leider nicht mehr ändern.
    Das erste sollte dieses sein.

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Q

    • Fördermitglied
    • Beiträge: 1.502
    die vorhandene Rechnung kann über das PDF-Symbol heruntergeladen werden. Dadurch wird keine neue Rechnung, mit anderem Zeitstempel, erzeugt.
    Kann mich nicht mehr voll daran erinnern, wie es in der Version aussah die ich hier runtergeladen habe. Da wurde jedesmal wenn man auf "Rechnung PDF" geklickt hat die Rechnung neu erstellt.

    Die Idee über die Konfiguration, dass diese auch die Angabe von Unterverzeichnissen mit Variablen zulässt (/{y}/{m}/{n}) klingt auch interessant.

    Schreinermeister

    • Fördermitglied
    • Beiträge: 413
    • Geschlecht:
    Hallo  oneQ,

    ich hatte das nicht auf dem Schirm.
    Die Möglichkeit bereits erstellte Rechnungen oder Lieferscheine durch einen "klick" herunterzuladen ist eine Anpassung durch Karsta.
    Ist in der hier verfügbaren Version anscheinend so nicht beinhaltet.

    Gruß Chris

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    So, wir haben doch das Rechnungs-Datum in der Datenbank, ist also doch einfach zu lösen.
    Okay, dann müssen die die die von mir in Post #1834 vorgeschlagene File-Struktur verwenden möchten in /admin/print_order_pdf.php und /admin/print_packingslip_pdf.php den Pfad-/Dateinamen für readfile()  anders definieren.
    ("die die die" iss auch nich schlecht :-))
    Man müsste folgendes machen (ich erkläre es anhand Hetfields Version):
    In der Query
    Code: PHP  [Auswählen]
    $sqlODetail = "
    SELECT
        customers_id,
        customers_cid,
        ibn_billnr
    FROM  "
    . TABLE_ORDERS . "
    WHERE orders_id = '"
    . $oID . "'
    "
    ;

    holen wir uns auch das Erstellungs-Datum der Rechnung
    Code: PHP  [Auswählen]
    $sqlODetail = "
    SELECT
        customers_id,
        customers_cid,
        ibn_billnr,
        ibn_billdate
    FROM  "
    . TABLE_ORDERS . "
    WHERE orders_id = '"
    . $oID . "'
    "
    ;

    Und für den Datei-Pfad nehmen wir $rowODetail['ibn_billdate'] auseinander (mit Fallback für alte Rechnungen ohne die neue Ordner-Struktur):
    Code: PHP  [Auswählen]
    //BOC we will use a new file path (see /inc/xtc_pdf_bill.inc.php), 04-2021, noRiddle
    //$pdf_bill = DIR_FS_ADMIN . 'invoice/' . $filePrefix . '.pdf';
    $pdfbillnext_path_arr = explode('-', $rowODetail['ibn_billdate']);
    if(file_exists(DIR_FS_ADMIN . 'invoice/' . $filePrefix . '.pdf')) {
        $pdf_bill = DIR_FS_ADMIN . 'invoice/' . $filePrefix . '.pdf';
    } else {
        $pdf_bill = DIR_FS_ADMIN . 'invoice/' . $pdfbillnext_path_arr[0] .'/' . $pdfbillnext_path_arr[1] . '/' . $filePrefix . '.pdf';
    }
    //EOC we will use a new file path, 04-2021, noRiddle
     

    Wer kann der teste mal.

    Ach, die Änderung in der Haupt-Klasse aus Post #1834 /includes/classes/FPDF/fpdf.php würde ich übrigens in die /inc/xtc_pdf_bill.inc.php verlagern:
    Code: PHP  [Auswählen]
      // Filename for BILL or SLIP
      //$filename = DIR_FS_DOCUMENT_ROOT.DIR_ADMIN  . 'invoice/' . $filePrefix . '.pdf';
      $filename = DIR_FS_DOCUMENT_ROOT.DIR_ADMIN  . 'invoice/' . date('Y') . '/' . date('m') . '/' . $filePrefix . '.pdf'; //new directory structure, 04-2021, noRiddle
      //BOC create dir structure first if needed, 04-2021, noRiddle
      $dedicated_dir_struct = dirname($filename);
      if(!is_dir($dedicated_dir_struct)) {
          mkdir($dedicated_dir_struct, 0755, true);
      }
      //EOC create dir structure first if needed, 04-2021, noRiddle

    womit wir hier in vorliegendem Post alle nötigen Änderungen dokumentiert hätten.

    Um die anderen Unzulänglichkeiten im Modul zu fixen und ein neues Paket zu schnüren fehlt mir die Zeit, sorry.

    Gruß,
    noRiddle

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Was mir gerade noch auffällt:
    Das Löschen von Rechnungen über /admin/pdfbill_del.php müßt Ihr euch selbst anpassen, insofern das überhaupt benutzt wird.

    Gruß,
    noRiddle

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Und bevor jetzt wieder jemand damit kommt, daß FPDF veraltet ist und man im Falle des Überarbeitens eine neuere Bibliothek/Klasse nehmen sollte, bitte, er möge das in die Hand nehmen.

     :lol1: :thumbs:

    Funktioniert doch noch.

    Um die anderen Unzulänglichkeiten im Modul zu fixen und ein neues Paket zu schnüren fehlt mir die Zeit, sorry.
    Der Threas ist schon ziemlich lang. Hattest Du die irgendwo schon aufgelistet? Vielleicht kann man die "ToDo´s" irgenwo sammeln? Eignet sich da das Wiki oder ein neuer Thread? Falls sich dann mal jemand an die Arbeit macht hätte derjenige eine kleine Übersicht....  :whistle:

    Meine "Weh-wehchen" hatte ich glaub hier mal erwähnt:
    Post 1756
    Post 1788
    24 Antworten
    8860 Aufrufe
    22. Dezember 2020, 09:36:22 von karsta.de
    24 Antworten
    5339 Aufrufe
    18. November 2020, 21:02:35 von little-key
    3 Antworten
    4673 Aufrufe
    09. Oktober 2013, 15:33:09 von kaisa
               
    anything