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: Rechnungsnummer und -datum mit Suchfunktion und Sortierung

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Hello Community.

    Ich habe mir mal erlaubt folgende Erweiterung komplett zu überarbeiten:
    MODUL: Rechnungsnummer und Rechnungsdatum (ohne PDF-Rechnung)

    Screenshots:

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

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

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

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

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

    Neu ist:
    • Es gibt nun in der Admin-Search-Bar ein neues Feld um nach Rechnungsnummern zu suchen,
      ein absolut notwendiges Feature, möchte man diese Erweiterung sinnvoll einsetzen.
    • Weiterhin gibt es nun in der Bestellübersicht (/admin/orders.php) die Möglichkeit nach Bestellnummer und nach Rechnungsnummer zu sortieren, eine ebenfalls nützliche Erweiterung.
    • Die Button zum Bearbeiten einer Bestellung werden nicht ausgeblendet nach Generierung einer Rechnungsnummer.
      Statt dessen wird lediglich der Button zur Generierung der Rechnungsnummer deaktiviert und dies auch durch Styles farblich kenntlich gemacht.
    • Natürlich kann eine Rechnung jederzeit nachgedruckt werden.
    • Alles was mit der Rechnungsnummer zu tun hat, ist nun farblich gekennzeichnet und somit auf einen Blick erfassbar.
      Ausnahme: Die gedruckte Rechnung.
      Hier wurde die Rechnungsnummer und das Rechnungsdatum lediglich unter der Bestellnummer und dem Bestelldatum implementiert.

    Für Shopbetreiber die kein Warenwirtschaftssytem einsetzen und  ein solches auch nicht benötigen und bislang die Bestellnummer als Rechnungsnummer verwendet haben, ist diese Erweiterung sehr praktisch,
    insbesondere weil stornierte Bestellungen nun nicht mehr um der fortlaufenden Nummern willen ausgedruckt und aufbewahrt werden müssen.

    noRiddle wünscht viel Freude mit der Erweiterung.

    [- RechnungsnummerUndDatum_advanced_v1.zip | sortiert nach Datum]
    [- RechnungsnummerUndDatum_advanced_v2.zip | sortiert nach Rechnungsnummer - empfohlen]

    [EDIT Tomcraft 03.04.2012: Screenshots ergänzt.]
    [EDIT h-h-h 19.04.2012: Neue Modulversion angehängt, Danke an noRiddle]

    Linkback: https://www.modified-shop.org/forum/index.php?topic=19244.0

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Da die Änderungen am System für diese Erweiterung etwas umfangreicher sind, könnten sich Fehler in der Anleitung eingeschlichen haben.
    Bitte deshalb um Testbereichte.
    Danke.

    noRiddle

    h-h-h

    • modified Team
    • Beiträge: 4.563
    Hi noRiddle,

    danke für's Teilen des verbesserten Modules.

     :thx:

    Gruß

    h-h-h

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Damit man sich besser vorstellen kann worum es genau geht, hier noch die Screenshots aus der Anleitung.

    Grüsse,
    noRiddle

    [EDIT Tomcraft 03.04.2014: Screenshots in Beitrag 1 ergänzt.]

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Ich habe festgestellt, daß die Sortierung nach Rechnungsnummer in der orders.php nicht korrekt funktioniert.
    Verstehe nicht ganz warum, kann aber an der alphanumerischen Rechnungsnummer liegen (wegen Suffix (per default RE-)).
    Deshalb lasse ich jetzt nach Rechnungsdatum sortieren da das neueste Datum ja automatisch auch mit der neuesten Rechnungsnummer korrespondiert.
    Deshalb hier die verbesserte Anleitung.

    Wer die erste Version schon eingebaut hatte, hier die Änderungen:
    in /admin/orders.php in folgendem
    Code: PHP  [Auswählen]
        $orders_query_raw = "select o.orders_id, o.invoice_id, o.invoice_date, o.orders_status, o.afterbuy_success, o.afterbuy_id,
                                    o.customers_name, o.payment_method, o.date_purchased, o.last_modified,
                                    o.currency, o.currency_value, s.orders_status_name, ot.text as order_total
                               from "
    .TABLE_ORDERS." o
                          left join "
    .TABLE_ORDERS_TOTAL." ot on (o.orders_id = ot.orders_id),
                                    "
    .TABLE_ORDERS_STATUS." s
                              where (o.orders_status = s.orders_status_id and s.language_id = '"
    .$_SESSION['languages_id']."' and ot.class = 'ot_total')
                                 or (o.orders_status = '0' and ot.class = 'ot_total' and  s.orders_status_id = '1' and s.language_id = '"
    .$_SESSION['languages_id']."')
                           "
    .$sort;  //order by o.orders_id DESC";

    hinter o.invoice_id, o.invoice_date, eintragen.

    und hier
    Code: PHP  [Auswählen]
    if ($_GET['sorting']) {
                    switch ($_GET['sorting']) {

                            case 'invoice_id' :
                                    $sort = 'order by o.invoice_id';
                                    break;
                            case 'invoice_id-desc' :
                                    $sort = 'order by o.invoice_id DESC';
                                    break;
                            case 'orders_id' :
                                    $sort = 'order by o.orders_id';
                                    break;
                            case 'orders_id-desc' :
                                    $sort = 'order by o.orders_id DESC';
                                    break;
                    }
    }

    o.invoice_id mit o.invoice_date ersetzen.

    Danke und Gruß,
    noRiddle

    [EDIT Tomcraft 19.04.2012: Verbesserung in Modulversion v2 aus Beitrag 1 bereits umgesetzt!]

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Noch 'ne kleine "Verbesserung":

    Wer unbedingt nach Rechnungsnummer sortieren können will und nicht, wie im vorangegangenen Post, nach Rechnungsdatum, der macht folgendes:

    in /admin/orders.php statt folgendem
    Code: PHP  [Auswählen]
        if ($_GET['sorting']) {
                        switch ($_GET['sorting']) {
         
                                case 'invoice_id' :
                                        $sort = 'order by o.invoice_id';
                                        break;
                                case 'invoice_id-desc' :
                                        $sort = 'order by o.invoice_id DESC';
                                        break;
                                case 'orders_id' :
                                        $sort = 'order by o.orders_id';
                                        break;
                                case 'orders_id-desc' :
                                        $sort = 'order by o.orders_id DESC';
                                        break;
                        }
        }

    folgendes nehmen:
    Code: PHP  [Auswählen]
        if ($_GET['sorting']) {
                        switch ($_GET['sorting']) {
         
                                case 'invoice_id' :
                                        $sort = 'order by LPAD(REPLACE(o.invoice_id, \'".INVOICE_NUMBER_SUFFIX."\', \'\'),10,\'0\')';
                                        break;
                                case 'invoice_id-desc' :
                                        $sort = 'order by LPAD(REPLACE(o.invoice_id, \'".INVOICE_NUMBER_SUFFIX."\', \'\'),10,\'0\') DESC';
                                        break;
                                case 'orders_id' :
                                        $sort = 'order by o.orders_id';
                                        break;
                                case 'orders_id-desc' :
                                        $sort = 'order by o.orders_id DESC';
                                        break;
                        }
        }

    Zum Verständnis:
    Es wird einfach für die Sortierung das Suffix (per default "RE-", kann ja aber auch anders lauten) gegen einen leeren String ausgetauscht. Dann wird die verbleibende Nummer links mit Nullen aufgefüllt bis zu 10 Stellen.
    Damit funktioniert die Sortierung nach Rechnungsnummer dann perfekt.

    Gruß,
    noRiddle

    [EDIT Tomcraft 19.04.2012: Verbesserung in Modulversion v2 aus Beitrag 1 bereits umgesetzt!]

    martin63

    • Fördermitglied
    • Beiträge: 41
    • Geschlecht:
    Danke für dieses praktische Tool,
    ich glaube um die Sortierung nutzen zu können, muss man in der admin/module/functions/html_output.php den Code
    Code: PHP  [Auswählen]
              case FILENAME_ORDERS:

              $nav='<br /><a href="'.xtc_href_link(FILENAME_ORDERS,'sorting='.$sort.'&'.xtc_get_all_get_params(array('action','sorting'))).'">';
              $nav.=xtc_image(DIR_WS_ICONS . 'sort_down.gif', '', '20' ,'20').'</a>';
              $nav.='<a href="'.xtc_href_link(FILENAME_ORDERS,'sorting='.$sort.'-desc&'.xtc_get_all_get_params(array('action','sorting'))).'">';
              $nav.= xtc_image(DIR_WS_ICONS . 'sort_up.gif', '', '20' ,'20').'</a>';

              break;
    einfügen. (Zumindest funktioniert es bei mir so)

    Kann man eigentlich die Rechnungsnummer ohne Suffix auch suchen (z.B. 12345 statt RE-12345)?

    Danke und Gruß Martin

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Lieber martin63.

    Hättest du meine Anleitung gelesen, hättest du bemerkt, daß dies natürlich längst in dieser steht.
    Das Problem war, daß die normale "order by" Funktion mit alphanumerischen Einträgen nicht umgehen kann.
    Deshalb hatte ich nach invoice_date sortiert, weil dies ja mit der invoice_id korrespondiert.
    Nun aber habe ich die Lösung gepostet um nach invoice_id zu sortieren.

    Und nein, du kannst nicht nur nach invoice_id ohne Suffix suchen.
    Du brauchst das Suffix aber ja  nicht zu vergeben, also Feld in Konfiguration => Mein Shop leer lassen.
    Dann gibt es auch kein Problem mehr mit "order by".

    Gruß,
    noRiddle

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Hier nochmal die angepasste Anleitung mit der Option nach Rechnungsdatum oder nach Rechnungsnummer sortieren zu können.
    Dann muß man sich nicht alles zusammensuchen...

    Gruß,
    noRiddle

    [EDIT h-h-h 19.04.2012: Modul in Beitrag 1 hinzugefügt]

    WayneTsun

    • Fördermitglied
    • Beiträge: 1.084
    • Geschlecht:
    Hallo noRiddle,

    eine wie von Dir gewohnt sehr gute Anleitung und eine sehr hilfreiche Anpassung! Das erspart einem wirklich erst einmal das WW-Programm und damit Zeit und Geld.

    Kleine Korrekturen habe ich für Deine Anleitung:

    1. In admin/orders.php schreibst Du, folgendes einfügen:

    Code: PHP  [Auswählen]
    <?php //BOC billing-no, noRiddle ?>
      <tr class="inv_no">
        <td class="main"><strong><?php echo ENTRY_INVOICE_ID; ?>%lt;/strong%gt;</td>
        <td class="main"><strong><?php echo $order->customer['invoice_id']; ?></strong></td>
      </tr>
    <?php //EOC billing-no, noRiddle ?>

    richtig ist:
    Code: PHP  [Auswählen]
    <?php //BOC billing-no, noRiddle ?>
      <tr class="inv_no">
        <td class="main"><strong><?php echo ENTRY_INVOICE_ID; ?></strong></td>
        <td class="main"><strong><?php echo $order->customer['invoice_id']; ?></strong></td>
      </tr>
    <?php //EOC billing-no, noRiddle ?>

    Nur ein Schönheitsfehler, ich weiß.  :roll:

    2. Wenn man das Gutscheinsystem aktiviert hat, dann gibt es auch den Button "Gutschein versenden". Dadurch bricht der Button "Rechnungsnummer vergeben" um. Ich habe das sehr simpel damit gelöst, dass ich in der /lang/german/admin/buttons.php statt dem obigen Titel "RE-Nr. vergeben" eingesetzt habe. Nun klappt es auch mit der Breite.

    Nochmals vielen Dank für Deine tolle Arbeit hier! :wayne:

    Beste Grüße,
    Wayne

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Hey WayneTsun.
    Lustigerweise baue ich gerade jemandem die Erweiterung zum ersten mal nach meiner eigenen Anleitung ein,
    normalerweise benutze ich die selbst nicht.
    Dabei fiel mir der Fehler auch auf, bin auf die verkehrte Taste gekommen statt & war's dann ein % (kommt davon wenn man 'ne Anleitung als HTML-Seite schreibt).
    Danke für die Mitteilung.

    Übrigens gab es auf der Version die ich auf meinem Rechner noch habe noch einen kleinen Fehler.
    Irgendwo steht da wohl
    "In gleicher Datei /lang/german/admin/german.php folgendes suchen"
    Das muß heißen
    "In /lang/german/admin/german.php folgendes suchen"
    da es nicht die gleiche Datei ist wie die vorherige.

    Allerdings frage ich mich gerade auch ob martin63 ein paar Posts vorher nicht recht hatte.
    In der Anleitung die ich auf meinem Rechner gespeichert hatte, fehlt in der Tat der Eintrag in der /admin/includes/functions/html_output.php (nicht admin/module/functions/html_output.php, wie martin63 schrieb).

    Weiß nicht mehr welche Version ich hier hochgeladen hatte.
    Deshalb entschuldige ich mich vorsorglich bei martin63 und bei allen anderen die evtl. eine Anleitung ohne den Code für die html_output.php runtergeladen haben sollten.

    Also hier sicherheitshalber nochmal die korrekte Version.

    Sorry nochmals für die Fehler.

    Gruß,
    noRiddle

    *NACHTRAG*
    Das mit dem Umbruch verstehe ich allerdings nicht.
    Mach mal die Tabellenzelle mit align="center".

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Und weil ein entdeckter Bug selten alleine kommt:
    Ich habe das Datum in der /templates/DEIN_TEMPLATE/admin/print_order.html ja gekürzt, damit nicht immer der blöde Tagesname dabei steht.
    Das geht aber natürlich nur wenn man in /admin/print_order.php die Funktion xtc_date_long entfernt.
    Also statt
    Code: PHP  [Auswählen]
    $smarty->assign('DATE', xtc_date_long($order->info['date_purchased']));

    so
    Code: PHP  [Auswählen]
    $smarty->assign('DATE', $order->info['date_purchased']); //took of xtc_date_long function because of formatting in print_order.html, noRiddle

    Wie's bislang in der Anleitung steht, wird anstelle des Bestelldatums das aktuelle Datum ausgeworfen, was ja besch... ist.

    Also:
    Man kann entscheiden, ob man date_long oder "date_short" haben will.
    date-long sieht so aus: Donnerstag, 3. Mai 2012
    "date_short" sieht so aus: 3. Mai 2012

    Will man beide Daten, also auch das für die Rechnung, im langen Format, muß man die function auch bei folgendem einfügen.
    Also in der /admin/print_order.php statt:
    Code: PHP  [Auswählen]
    $smarty->assign('invoice_date', $order->customer['invoice_date']);

    das
    Code: PHP  [Auswählen]
    $smarty->assign('invoice_date', xtc_date_long($order->customer['invoice_date']));

    Dann aber in der print_order.html im Template den Modifier weglassen,
    also das
    Code: PHP  [Auswählen]
    |date_format:"%d. %B %Y"

    Habe nochmals die überarbeitete Anleitung angehängt.
    Diesmal ohne Fehlerchen,... hoffe ich ;-)

    Gruß,
    noRiddle

    WayneTsun

    • Fördermitglied
    • Beiträge: 1.084
    • Geschlecht:
    ...
    *NACHTRAG*
    Das mit dem Umbruch verstehe ich allerdings nicht.
    Mach mal die Tabellenzelle mit align="center".

    Sorry, mein Fehler. Da hat mir der cache dazwischengefunkt. Werde ich auch nie verstehen, das Teil. Obwohl eigentlich nicht an, muss man ihn doch immer wieder mal leeren. Wie auch hier.  :wohow:

    Geht natürlich so, wie Du das gemacht hattest.

    Danke auch für die zeitnahen Anpassungen!

    Beste Grüße,
    Wayne

    WayneTsun

    • Fördermitglied
    • Beiträge: 1.084
    • Geschlecht:
    Hallo noRiddle und alle zusammen!

    Ich habe da noch eine Frage nach einem Freitext-Feld in der Rechnung. Kann man sowas einbauen und wenn ja, wie könnte das gehen?

    Der Hintergrund ist, dass wir auch Rechnungen nach Erhalt der Zahlung in das Paket an den Kunden legen und dann in diese Rechnung einfach so etwas, wie "bereits bezahlt per..." eingefügt werden sollte.

    Ist frech, ich weiß, aber wollte halt mal fragen, ob Du/Ihr da eine Idee habt.  :blower:

    Danke schon mal und beste Grüße,
    Wayne

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Hallo WayneTsun.
    Habe gerade Stress und viel zu tun.
    Das bekommst du doch selbst hin.
    In der orders.php definierst du so ein Feld trägst den Inhalt (den du da ja dann reinschreiben wirst) in die Datenbank ein bei Aktualsierung und fragst die Daten in print_order.php ab, definierst dort eine Smarty-Variable und fügst die in print_order.html im Template an gewünschter Stelle ein.
    Vorbild könnte das Kommentarfeld sein, nur daß du keine Textarea sondern nur ein iput type="text" benötigst.
    Oder du benutzt Kommentarvorlagen (MODUL: Kommentarvorlagen, Textvorlagen für E-Mails an Kunden aus Bestellung) als eine Art Vorbild um zu sehen wie man Daten in die Datenbank schreibt, dann hättest du sogar ein Drop-Down mit Textauswahlen.
    Natürlich fällt die Sendung der Mail weg und du benötigst, wie gesagt, nur ein input-Feld.
    Will sagen, wenn man sich da rein denkt, bekommt man's schon hin.
    Kannst auch nicht allzuviel kaputt machen, da du ja 1. eine Sicherung der Dateien machen wirst und 2. auch sowas und sowas hilft.

    Gruß,
    noRiddle
    rechtstexte für onlineshop
    1 Antworten
    2110 Aufrufe
    18. März 2014, 10:19:57 von voodoopupp
    2 Antworten
    3410 Aufrufe
    17. November 2012, 13:36:28 von wooodys
    2 Antworten
    835 Aufrufe
    03. Mai 2022, 18:58:27 von Bonner