Modul Rechnungs-/Lieferscheinkommentare

Thema wurde von HolgerNils (xycons.de), 28. September 2012 erstellt.

  1. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    #1 HolgerNils (xycons.de), 28. September 2012
    Zuletzt bearbeitet: 4. Oktober 2012
    Wir wollten ganz gerne z. B. Seriennummern etc. in und auf der Rechnung verewigen.
    Leider gibt es aber keine entsprechend (missbrauchbare) Funktion.
    Wer Spass an einer einfachen Lösung hat, here we go...

    Sieht so aus:
    In den Bestell-Dateils ein entsprechendes Eingabefeld.
    inv_cmmt1.JPG

    Dieses erscheint ganz einfach unterhalb der Rechnung:
    inv_cmmt2.JPG

    So in etwa gehts:

    SQLs, Tabelle anlegen, Statis anlegen:

    CREATE TABLE IF NOT EXISTS `orders_invoice_comments` (
    `orders_id` int(11) NOT NULL,
    `orders_invoice_comment` text COLLATE latin1_german1_ci NOT NULL,
    PRIMARY KEY (`orders_id`)
    );

    INSERT INTO `orders_status` (`orders_status_id`, `language_id`, `orders_status_name`) VALUES(1010, 2, 'RG-Kommentar erfasst');
    INSERT INTO `orders_status` (`orders_status_id`, `language_id`, `orders_status_name`) VALUES(1010, 3, 'Invoicecomment entered');

    ----------------------------------------------------------------------------------------------
    Änderungen in /admin/orders.php:

    Einfügen ca. an Zeile 30:
    //Rechnungskommentare-GX2 (Start)
    define('TABLE_ORDERS_INVOICE_COMMENTS', 'orders_invoice_comments');
    //Rechnungskommentare-GX2 (Ende)

    --------------------------------------------------------------
    Suchen nach
    if (!isset($lang)) $lang=$_SESSION['languages_id'];

    $orders_statuses = array ();
    $orders_status_array = array ();

    Davor einfügen:
    //Rechnungskommentare-GX2 (Start)
    if (isset($oID)) {
    $oID = xtc_db_input($_GET['oID']);
    $invcmmt_query = xtc_db_query("select orders_invoice_comment from " . TABLE_ORDERS_INVOICE_COMMENTS . " where orders_id = '" .xtc_db_input($oID). "'");
    $invcmmt = xtc_db_fetch_array($invcmmt_query);
    $invcmmt_val = xtc_db_prepare_input($invcmmt['orders_invoice_comment']);
    }
    //Rechnungskommentare-GX2 (Ende)

    --------------------------------------------------------------
    Suchen nach
    if(defined('EMAIL_SIGNATURE')) {
    $smarty->assign('EMAIL_SIGNATURE_HTML', nl2br(EMAIL_SIGNATURE));
    $smarty->assign('EMAIL_SIGNATURE_TEXT', EMAIL_SIGNATURE);
    }
    Davor einfügen; es gibt 2 Fundstellen!
    //Rechnungskommentare-GX2 (Start)
    $smarty->assign('INVOICE_COMMENT', $invcmmt_val);
    //Rechnungskommentare-GX2 (Start)

    --------------------------------------------------------------
    Suchen nach:
    case 'resendordermail':
    break;

    Dahinter einfügen:
    //Rechnungskommentare-GX2 (Start)
    case 'update_oserials':
    $invcmmt_val = xtc_db_prepare_input($_POST['gm_invcmmt']);
    xtc_db_query("INSERT INTO " . TABLE_ORDERS_INVOICE_COMMENTS . " (orders_id, orders_invoice_comment)
    VALUES ('".xtc_db_input($_GET['oID'])."', '".xtc_db_input($invcmmt_val)."')
    ON DUPLICATE KEY UPDATE orders_invoice_comment = '".xtc_db_input($invcmmt_val)."'");
    $gm_status_entry = 'Rechnungskommentar: ' .$invcmmt_val. ')';
    $gm_status = '1010'; //Fixwert für 'Rechnungkommentar erfasst'
    $customer_notified = '0';
    xtc_db_query("INSERT INTO " . TABLE_ORDERS_STATUS_HISTORY . " (orders_id, orders_status_id, date_added, customer_notified, comments) values ('".xtc_db_input($oID)."', '".xtc_db_input($gm_status)."', now(), '".$customer_notified."', '".xtc_db_input($gm_status_entry)."')");
    $messageStack->add_session(SUCCESS_ORDER_UPDATED, 'success');
    xtc_redirect(xtc_href_link(FILENAME_ORDERS, xtc_get_all_get_params(array ('action')).'action=edit'));
    break;
    //Rechnungskommentare-GX2 (Ende)

    --------------------------------------------------------------
    Suchen nach:
    <!-- ORDERS - STATUS SEND -->
    <table border="0" width="100%" cellspacing="0" cellpadding="0" class="pdf_menu">

    Davor einfügen:
    <!-- Rechnungskommentare-GX2 (Start) -->
    <table border="0" width="100%" cellspacing="0" cellpadding="0" class="pdf_menu">
    <tr>
    <td class="dataTableHeadingContent" style="border-right: 0px;">
    <?php echo 'RECHNUNGS-KOMMENTAR'; ?> </td>
    </tr>
    </table>
    <?php echo xtc_draw_form('oserials', FILENAME_ORDERS, xtc_get_all_get_params(array('action')) . 'action=update_oserials'); ?>
    <table border="0" width="100%" cellspacing="0" cellpadding="2" class="gm_border dataTableRow">
    <tr>
    <td width="160" class="main" valign="top">
    <?php echo 'RG-Kommentar:'; ?>
    </td>
    <td class="main" valign="top">
    <?php echo xtc_draw_textarea_field('gm_invcmmt', 'soft', '50', '3', $invcmmt_val); ?>
    </td>
    </tr>
    <tr>
    <td colspan="2" class="main" valign="top">
    <input type="submit" class="button" value="Speichern">
    </td>
    </tr>
    </form>
    <!-- Rechnungskommentare-GX2 (Ende) -->

    ==========================================================================================================
    Änderungen in /admin/gm_pdf_order.php:

    Suchen nach:
    /*
    * -> CANCEL
    */

    Davor einfügen:
    //Rechnungskommentare-GX2 (Start)
    if($_GET['type'] == 'invoice') {
    $invcmmt_query = xtc_db_query("SELECT orders_invoice_comment FROM orders_invoice_comments WHERE orders_id='".(int)$_GET['oID']."'");
    $invcmmt= xtc_db_fetch_array($invcmmt_query);
    $gm_order_pdf_values['INVOICE_COMMENT'] = $invcmmt['orders_invoice_comment'];
    }
    //Rechnungskommentare-GX2 (Ende


    ==========================================================================================================
    Änderungen (Layout) in /admin/gm/classes/gmOrderPDF.php:

    Suchen nach und dahinter einfügen:
    $this->pdf_cancel = $gm_order_pdf_values['GM_PDF_CANCEL'];
    $this->pdf_use_products_model = $gm_use_products_model;
    //Rechnungskommentare(Start)
    $this->pdf_invcmmt = $gm_order_pdf_values['INVOICE_COMMENT'];
    //Rechnungskommentare(Ende)

    --------------------------------------------------------------
    Suchen nach und dahinter einfügen:
    function Body() {

    parent::AddPage();

    // -> check if header not fixed on every page, then put it out once a time
    if($this->pdf_fix_header == 0 && $this->pdf_use_header == 1) {
    // -> call function of daughter class
    $this->getHeader();
    }
    $this->getOrderHeader();
    $this->getBody();
    //Rechnungskommentare-GX2 (Start)
    $this->getInvoiceComment();
    //Rechnungskommentare-GX2 (Ende)

    --------------------------------------------------------------
    Suchen nach und dahinter einfügen:
    function getMaxHeight($order, $table_size) {
    foreach($order as $value) {
    $count++;
    for($j = 0; $j < count($value); $j++) {
    $string_width = parent::GetStringWidth($value[$j]);
    if($string_width + 1 > $table_size[$j]) {
    //echo $table_size[$j] . " - " . $string_width . " - " . $value[$j] . "<br>";
    $count = $count + parent::countMaxHeight($string_width, $table_size[$j]);
    }
    }
    }
    return($count * parent::getCellHeight());
    }

    //Rechnungskommentare-GX2 (Start)
    function getInvoiceComment() {
    if ($this->pdf_invcmmt != ''){
    // -> font face/style/size/color
    parent::Ln(2);
    $y = $y + 3;
    parent::getFont($this->pdf_fonts['CONDITIONS']);
    parent::SetY(parent::GetY());
    parent::SetX(parent::getLeftMargin());
    parent::MultiCell(parent::getInnerWidth(), parent::getCellHeight(), $this->pdf_invcmmt, 0, 'L', 0);
    return;
    }
    }
    //Rechnungskommentare-GX2 (Ende)

    --------------------------------------------------------------

    Fertig.

    Das Ganze Geraffel nochmals als TXT-Datei im Anhang.
     

    Anhänge:

  2. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Achso...
    Wer den Kommentar auch im Lieferschein haben will verändert die /admin/gm_pdf_order.php nochmal und lässt die roten Zeilen weg...

    Suchen nach:
    /*
    * -> CANCEL
    */

    Davor einfügen:
    //Rechnungskommentare-GX2 (Start)
    if($_GET['type'] == 'invoice') {
    $invcmmt_query = xtc_db_query("SELECT orders_invoice_comment FROM orders_invoice_comments WHERE orders_id='".(int)$_GET['oID']."'");
    $invcmmt= xtc_db_fetch_array($invcmmt_query);
    $gm_order_pdf_values['INVOICE_COMMENT'] = $invcmmt['orders_invoice_comment'];
    }
    //Rechnungskommentare-GX2 (Ende
     
  3. Teelirium

    Teelirium Erfahrener Benutzer

    Registriert seit:
    13. Juni 2012
    Beiträge:
    287
    Danke erhalten:
    22
    Danke vergeben:
    141
    OK, sehr cool und eine Funktion, auf die ich schon lange warte. Denn wir beliefern Kunden, die auf verschiedene Arten zahlen. Stammkunden können auf Rechnung zahlen und ich möchte gerne bei diesen Kunden den Hinweis
    mit draufschreiben. Bei den anderen Kunden, die bspw. per PayPal bezahlen, soll jedoch der Text drauf:
    ... usw...

    Das ist ja - wenn ich das richtig verstanden habe - mit Deiner Lösung oben möglich!?!

    Kann man dieses Rechnungskommentarfeld auch mit den sehr coolen,von Dir programmierten Bestellkommentarbuttons erweitern? Das wäre das obergeilste :)

    Wenn ich die Funktion von oben einbaue, kann ich dann in Konfiguration > Rechnung/Lieferschein > Hinweistexte > Hinweistext Rechnung den dort enthaltenen Text komplett rausnehmen? Ja, schon, oder?
     
  4. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Hi Florian,
    wenn Du bisher sozusagen pauschale Kommentare in den Hinweistechten hattest könntest Du die sicherlich über die Rechnungskommentare situativ anwenden, gerade da wo es notwendig ist anstatt pauschal, yepp.
    Die Idee mit den Buttons für "Standardkommentare" gefällt mir, allerdings sollte man dafür eine eigene Verwaltung und einen eigenen Inhalt und somit eigene Buttons anlegen, schliesslich sind die Texte meist andere und nicht so Versandlastig wie im Rahmen der Statusänderung.
    Ich denk mal drüber nach. ;-)
     
  5. Teelirium

    Teelirium Erfahrener Benutzer

    Registriert seit:
    13. Juni 2012
    Beiträge:
    287
    Danke erhalten:
    22
    Danke vergeben:
    141
    Mal noch 'ne Frage zur Sicherheit: Bei den einzusetzenden Codeblöcken steht bei dem einen dabei:
    Muss ich den einzufügenden Block vor beide Fundstellen einbauen oder nur vor die erste oder nur vor die zweite Fundstelle?
    Danke für die Antwort vorab!
     
  6. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    An beiden!
     
  7. Teelirium

    Teelirium Erfahrener Benutzer

    Registriert seit:
    13. Juni 2012
    Beiträge:
    287
    Danke erhalten:
    22
    Danke vergeben:
    141
    mmmhhh, ich muss schon wieder nerven:

    Hab es jetzt anhand der txt Datei in die drei betroffenen php Dateien eingebaut (auch an beiden Stellen) und auch den SQL Befehl erfolgreich ausgeführt. Aber leider erscheinen keine Rechnungskommentare auf der Rechnung. Gebe ich Text in das entsprechende Feld ein und klicke auf "Speichern", gibt es einen Reload der Seite und das Feld ist wieder leer. Erstelle ich dann eine Rechnung oder versende eine per Mail, stehen leider keine Kommentare drauf. Alle Caches natürlich auch vorher ordentlich gelöscht. Habe es jetzt nur mit einer alten Bestellung ausprobiert, kann es sein, dass das nur bei neuen Bestellungen funktioniert?
     
  8. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Dann fehlt möglicherweise irgendwo etwas. Schick mir die 3 geänderten Dateien bitte mal zu, dann schau ich da mal rein ;-)
    holgernils@web.de