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

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Okay, es gibt zu viele Versionen im ersten Post, ich habe dann wohl eine andere Version, da ist das nicht auskommentiert.
    Da ich mir das Ganze sowieso angepasst habe, halte ich mich mal lieber zurück mit Behauptungen wo was im Code steht ;-).

    Gruß,
    noRiddle
    Trade Republic - Provisionsfrei Aktien handeln

    halunke

    • Frisch an Board
    • Beiträge: 56
    Hallo,

    mein Problem mit dem Rechnungsnummer Format konnte ich wie folgt lösen:

    In der Datei /admin_xyz/includes/modules/invoice_number/invoice_number_functions.php
    die Funktion function add_btn_ibillnr($order,$oID)  ändern von:

    Code: PHP  [Auswählen]
    //$html = '              <a class="button ibillnr-btn" href="'.xtc_href_link(FILENAME_ORDERS, 'page='.$_GET['page'].'&oID='.$oID.'&action=edit&action2=set_ibillnr').'">'. BUTTON_BILL .'</a>'.PHP_EOL;
            $html = '              <a class="button ibillnr-btn" href="Javascript:void(0)" onclick="window.open(\''.xtc_href_link(FILENAME_PDF_BILL_NR, 'oID='.$_GET['oID']).'\', \'popup\', \'toolbar=0, width=400, height=250\')'.'">'. BUTTON_BILL .'</a>'.PHP_EOL;
     

    zu
     
    Code: PHP  [Auswählen]
    $html = '              <a class="button ibillnr-btn" href="'.xtc_href_link(FILENAME_ORDERS, 'page='.$_GET['page'].'&oID='.$oID.'&action=edit&action2=set_ibillnr').'">'. BUTTON_BILL .'</a>'.PHP_EOL;
            //$html = '              <a class="button ibillnr-btn" href="Javascript:void(0)" onclick="window.open(\''.xtc_href_link(FILENAME_PDF_BILL_NR, 'oID='.$_GET['oID']).'\', \'popup\', \'toolbar=0, width=400, height=250\')'.'">'. BUTTON_BILL .'</a>'.PHP_EOL;

    Quelle: aus diesem Thread von 2018 -> https://www.modified-shop.org/forum/index.php?topic=12939.msg355240#msg355240

    Gruß
    Steven

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Mit dem Modul habe ich mich auch schon etwas auseinandergesetzt....

    An dem Modul gibt es allerdings ohnehin zig Ungereimtheiten und Flaws, wollte ich immer mal überarbeiten, kam nur noch nicht dazu.
    Ich hatte im Post 1756 dazu auch ein paar Anmerkungen. Dazu waren mir das ein paar Klicks zu viel bis zur Rechnung und die Rechnung wurde jedes mal neu erstellt. Die Buttons habe ich dann auch etwas verschoben, weil ich das scrollen total nervig finde. Sieht jetzt so aus:
    [ Für Gäste sind keine Dateianhänge sichtbar ] [ Für Gäste sind keine Dateianhänge sichtbar ]
    Beim Klick auf den Button mit der ReNr. wird dann das pdf-File heruntergeladen.

    Auch würde ich das Modul unabhängig vom modified-eigenen System-Modul invoice_number.php machen
    Gibt es dazu einen bestimmten Grund? Ich habe das Modul zwar auch etwas angepasst, aber vielleicht lässt sich das mit einem Ticket mit Verbesserungsvorschlag (z.B. auto-include oder anderem) von vornherein schon so anpassen, dass man damit mehr anfangen kann.

    Für das vorliegende Modul habe ich mir eine eigene /admin/includes/modules/invoice_number/invoicepdf_number_functions.php gebaut
    Die Datei habe ich auch umgebaut und ein paar PDFBill-Moduldateien mit Funktionen dafür rausgeschmissen. Wollte das ganze etwas "übersichtlicher" gestalten, musste dann aber die weiße Fahne hissen. Hab da irgendwo die Übersicht verloren und habe mich nur noch auf die Funktionen beschränkt, die ich erstmal ändern wollte. Automatisches Statusupdate und E-Mail-Versand waren nicht dabei.

    @halunke:
    Wenn du Code in einem Forumbeitrag schreibst, setzt das bitte in Code-tags. Dazu gibt es oberhalb des Eingabefeldes Buttons für php, xml, sql, css und js.
    edit webald

    *EDIT*: Bild korrigiert

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Ich möchte gerade nicht alles erklären was ich schrieb.
    Wenn ich dazu kommen sollte das Modul zu überarbeiten und update-sicher zu machen (bis auf die Funktion "Rechnung senden bei Statusänderung") sowie die Fehler auszumerzen, werde ich es hier einstellen und Erklärungen dazu schreiben.
    Nur so viel:
    Ich bin der Meinung, daß es keine zwei System-Module geben darf die voneinander abhängen, in unserem Fall also das PDFBillNext und das modified-eigene Modul "Neue Rechnungsnummer", vor allem dann nicht, wenn sie auch noch dieselben hinzugefügten DB-Tabellen-Felder benutzen. Da ist doch ein "Unfall", zumindest aber sind Ungereimtheiten, vorprogrammiert.

    Gruß,
    noRiddle

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Ich bin der Meinung, daß es keine zwei System-Module geben darf die voneinander abhängen, in unserem Fall also das PDFBillNext und das modified-eigene Modul "Neue Rechnungsnummer", vor allem dann nicht, wenn sie auch noch dieselben hinzugefügten DB-Tabellen-Felder benutzen.

     :thx:
     :mhhh: ist bestimmt spannend das ordentlich zu trennen. Darf ich dir meine kleinen Änderungen mit den Gedanken dahinter per Mail schicken?

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Nee, bringt erstmal nichts, dafür ist das Modul zu komplex und ich müsste Code-Analyse betreiben. Genau das aber kann ich zeitlich mom. nicht.
    Wenn ich das Modul überarbeiten sollte, melde ich mich nochmal,

    Gruß,
    noRiddle

    Q

    • Fördermitglied
    • Beiträge: 1.502
    :thumbs:

    Q

    • Fördermitglied
    • Beiträge: 1.502
    (Dateianhang Link)

    Vielleicht kann mir da noch jemand helfen.

    Mit klick auf den Button und
    Code: PHP  [Auswählen]
           // generate bill

           xtc_pdf_bill ($oID, $send=false, $deliverSlip=false);
           xtc_redirect(xtc_href_link(FILENAME_ORDERS, 'page=1&oID='.(int)$oID.'&action=edit'));

    erstelle ich die PDF-Rechnung und lade die Seite neu, damit der Button sich ändert und ich die Rechnung herunterladen kann.

    Kann man das soweit erweitern, dass zwischen Erstellung der PDF-Rechnung und der Weiterleitung auf die Seite direkt der Download der Datei veranlasst wird? Oder brauche ich dazu zwei redirects mit ggf. einer separaten "action" (z.B. action=download) die dann erst wieder auf die "action=edit" weiterleitet? Hab schon nach einer Lösung per Java-Script gesucht, sehe aber vor lauter Bäume den Wald nicht.

    Also kurz. Download und Weiterleitung mit einem Klick.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Verstehe nicht ganz. Mit Klick auf den Button "Rechnung PDF" (heißt der so ?) öffnet sich in einem Popup-Window die /admin/print_order_pdf.php wo man sinnvollerweise wählen kann die Rechnung bei Erstellung zu versenden oder lediglich herunterladen zu können. Die Wahl würde ja wegfallen mit Umsetzung deines Wunsches, oder was verstehe ich nicht.
    Außerdem bewirkt die Leitung auf die /admin/print_order_pdf.php nach Klick, daß das Ganze update-sicher einzubauen ist, insofern man auf automatische Rechnungserstellung bei Statusänderung der Bestellung verzichtet.

    Aber, wie bereits gesagt, es gibt so viele Versionen im ersten Post...

    Mmh, ich lese gerade nochmals was du geschrieben hast. Meinst du mit "Mit klick auf den Button und ... erstelle ich die PDF-Rechnung..." nicht eigtl. das Generieren der Rechnungsnummer ? Ansonsten verstehe ich die Zusammenhänge nicht.

    Gruß,
    noRiddle

    Q

    • Fördermitglied
    • Beiträge: 1.502
    Ich hab einiges an dem Modul angepasst, weil mir das zu viel geklicke und gescrolle war, bis dann endlich die Rechnung da war. Außerdem hat mich gestört, dass jedesmal beim Download die Datei neu erstellt wurde und somit die Datei einen neuen "Zeitstempel" hatte. Den E-Mail-Versand will ich gerade nicht, weswegen der Schritt mit der Option bei mir wegfallen kann. Persönliches empfinden  :nixweiss:

    Zumindest habe ich das so umgebaut, dass wenn man auf den Button "Neue Rechnungsnummer vergeben: xxxxxxx" klickt, das PDF-File erstellt und in einem Unterordner von ~/admin/ abgelegt wird. Der Button ändert sich dahingehend, dass dann nur noch die ReNr. darin steht und mit klick darauf die Datei heruntergeladen wird. (siehe Bilder im Post #1788 .

    Also zwei Kicks von ReNr. vergeben bis sie auf meinem Rechner ist. Ich hätte jetzt gerne, dass ein Klick reicht. Die Datei wurde erstellt und soll direkt heruntergeladen werden + ich komme wieder auf die Seite mit der Bestellung [orders.php] (auf dem jetzt der Button nur noch mit der ReNr. zu sehen ist).
    Ich bekomme es hin, dass die Re erstellt und heruntergeladen wird, dann fehlt mir aber die Weiterleitung / Reload (wobei reload falsch, weil sonst die action2 zum Erstellen der Rechnung nochmal ausgeführt wird) der Bestellseite (orders.php?action=edit), damit der geänderte Button zu sehen ist.

    Vielleicht leichter mit ein paar Codeschnipsel:
    invoice_number_functions.php
    Um die Anzeige ReNr und Datum zu ändern [EDIT*falscher Schnipsel*]:
    Code: PHP  [Auswählen]
    function add_table_infos_ibillnr($order)
    {
        $html = '';
        if (defined('MODULE_INVOICE_NUMBER_STATUS') && MODULE_INVOICE_NUMBER_STATUS == 'True') {
            $html .= '<tr>'.PHP_EOL;
            $html .= '  <td class="main"><b>'.ENTRY_INVOICE_NUMBER.'</b></td>'.PHP_EOL;
            $html .= '  <td class="main">'.($order->info['ibn_billnr'] == '' ? add_btn_ibillnr($order,$oID) : '<a class="button" href="'. xtc_href_link('invoice/' . get_pdf_filename($oID) . '.pdf', ''). '">' . $order->info['ibn_billnr']) . '</a></td>'.PHP_EOL;
            $html .= '</tr>'.PHP_EOL;
            $html .= '<tr>'.PHP_EOL;
            $html .= '  <td class="main"><b>'.ENTRY_INVOICE_DATE.'</b></td>'.PHP_EOL;
            $html .= '  <td class="main">'. ($order->info['ibn_billdate'] == '0000-00-00'? '<span class="not_assigned">'.NOT_ASSIGNED.'<span>' : xtc_date_short($order->info['ibn_billdate'])).'</td>'.PHP_EOL;
            $html .= '</tr>'.PHP_EOL;
        }
        return $html;
    }

    function add_btn_ibillnr($order,$oID)
    {
        $html = '';
        if (defined('MODULE_INVOICE_NUMBER_STATUS') && MODULE_INVOICE_NUMBER_STATUS == 'True') {
          if ($order->info['ibn_billnr'] == '') {
            $ibillnr = get_next_ibillnr();
            $html = '              <a class="button ibillnr-btn" href="'.xtc_href_link(FILENAME_ORDERS, 'page='.$_GET['page'].'&oID='.$_GET['oID'].'&action=edit&action2=set_ibillnr').'">'. BUTTON_BILL . ': ' . $ibillnr . '</a>'.PHP_EOL;
          }elseif ($order->info['ibn_billnr'] !== ''){
            $filePrefix = get_pdf_filename($oID);
            $html = '              <a class="button" href="'. xtc_href_link('invoice/' . $filePrefix . '.pdf', ''). '">'. BUTTON_INVOICE_PDF . '</a>'.PHP_EOL;
          }
        }
        return $html;
    }

    und oben direkt noch
    Code: PHP  [Auswählen]
    require_once('includes/modules/invoice_number/pdf_invoice_functions.php');
    eingefügt.

    Die pdf_invoice_functions.php sieht dann so aus:
    Code: PHP  [Auswählen]
    function generate_pdf_invoice($oID)
    {
        if( (isset($_GET['action2']) && $_GET['action2']=='set_ibillnr') && ($order->info['ibn_billnr'] == '') ) {
           require_once(DIR_FS_CATALOG . DIR_WS_CLASSES . 'FPDF/PdfRechnung.php');
           require_once(DIR_FS_INC . 'xtc_get_order_data.inc.php');
           require_once(DIR_FS_INC . 'xtc_get_attributes_model.inc.php');
           require_once(DIR_FS_INC . 'xtc_not_null.inc.php');
           require_once(DIR_FS_INC . 'xtc_format_price_order.inc.php');
           require_once(DIR_FS_INC . 'xtc_utf8_decode.inc.php');
           require_once(DIR_FS_INC . 'xtc_pdf_bill.inc.php');


           // generate bill

           xtc_pdf_bill ($oID, $send=false, $deliverSlip=false);
           xtc_redirect(xtc_href_link(FILENAME_ORDERS, 'page=1&oID='.(int)$oID.'&action=edit'));
           }
    }


    //get pdf invoice filename
    function get_pdf_filename($oID)
    {
            // replace Variables for filePrefix{
            $oID = $_GET['oID'];
            $sqlODetail = "
            SELECT
                customers_id,
                customers_cid,
                ibn_billnr
            FROM  "
    . TABLE_ORDERS . "
            WHERE orders_id = '"
    . $oID . "'
            "
    ;
            $resODetail = xtc_db_query($sqlODetail);
            $rowODetail = xtc_db_fetch_array($resODetail);

            // use customers_id as the real id?
            if (PDF_USE_CUSTOMER_ID == 'true') {
                $customers_id = $rowODetail['customers_id'];
            } else {
                $customers_id = $rowODetail['customers_cid'];
            }
            $ibn_billnr = $rowODetail['ibn_billnr'];
            // create FilePrefix
            $filePrefix = trim(PDF_FILENAME);
            $filePrefix = str_replace('{oID}', $oID, $filePrefix);
            $filePrefix = str_replace('{bill}', $ibn_billnr, $filePrefix);
            $filePrefix = str_replace('{cID}', $customers_id, $filePrefix);
            $filePrefix = str_replace(' ', '_', $filePrefix);
            if ($filePrefix == '') $filePrefix = $oID;
            return $filePrefix;
    }

    Vermutlich alles etwas verwirrend. Ist auch schon wieder ein paar Monate her, dass ich da intensiv dran war. Ist auch noch nicht sauber und updatesicher gelöst. Ich habe u.a. noch das Problem die functions ordentlich aufzuteilen und überall dort verfügbar zu machen wo man sie braucht.  :paperbag:

    Dachte es gäbe eine relativ einfache Lösung für "Download + Weiterleitung". Ähnlich wie man es ein paar Softwareanbietern hat, die nach dem klick auf den Download-Button eine "Danke das Sie sich für unser Produkt interessieren und freuen uns auf Ihre Spende" - Seite weiterleiten.

    Michael.TB

    • Mitglied
    • Beiträge: 180
    Ich nutze Shopversion v2.0.4.2 und habe entsprechend auch das Modul "1.1.8d für Shopversion 2.0.1.0 bis 2.0.4.2 korrigiert für PHP 7" verwendet. Nutze PHP 7.4.

    Bei klick auf Rechnung PDF oder Lieferscheion PDF erscheint jedoch nur eine weiße Seite. Die Dateien  print_order_pdf und print_packingslip_pdf sind neue Datein, also unverändert.

    Auch bekomme ich bei der Bestellübersicht unter Admin rote Felder hervor gehoben, siehe Screenshot. Ganz untem im Feld wird die korrekte Rechnungsnummer angezeigt.

    Michael.TB

    • Mitglied
    • Beiträge: 180
    Leider kann ich meinen Beitrag eins darüber nicht editieren. Das weiße Popup Fenster ist gelöst, aber die roten Felder existieren immer noch. Ich vergebe keine anderen Rechnungsnummer, so dass diese im Prinzip immer direkt gesetzt werden kann. Bestellnummer = Rechnungsnummer.  Der extra Klick auf "Rechnungsnummer vergeben" ist also überflüssig. Im Menü steht "Bestellnummer als Rechnungsnummer" auf "JA".

    Michael.TB

    • Mitglied
    • Beiträge: 180
    Irgendwo wird anscheinend die Länge der Artikelnummer beschränkt. Platz ist genug und auch das herabsetzen der Schriftgröße brachte keine Änderung, nach 7 Zeichen ist Schluß. Wo kann ich das ändern?

    karsta.de

    • Experte
    • Beiträge: 3.048
    Schau mal in der Admin > PDF-Konfiguration, da sollte es extra dafür ein Feld geben.

    BG Karsta

    Michael.TB

    • Mitglied
    • Beiträge: 180
    :doh: es kann so einfach sein und ich such stundelang in der Brief und Rechnung.php. Danke
    24 Antworten
    8863 Aufrufe
    22. Dezember 2020, 09:36:22 von karsta.de
    24 Antworten
    5344 Aufrufe
    18. November 2020, 21:02:35 von little-key
    3 Antworten
    4673 Aufrufe
    09. Oktober 2013, 15:33:09 von kaisa