Zahlungsziel auf der PDF Rechnung

Hallo zusammen,

ich habe ein kleines Problem mit dem Rechnungsformular ( myorder.php )

Wenn ein Kunde bestellt hat und ich die Rechnung ausdrucke wird dort zwar - je nach Bezahlart - die richtige Zahlungsweise angegeben, also z.B.

“Ihre gewählte Zahlungsweise: Rechnung” oder
"Ihre gewählte Zahlungsweise: Kreditkarte" oder
"Ihre gewählte Zahlungsweise: Vorrauskasse" oder
"Ihre gewählte Zahlungsweise: Nachnahme" usw. … also dies wird alles richtig angezeigt, aber darunter steht dann [B]immer[/B] die Zeile “Zahlbar bis zum XX.XX.2010” auch mit dem richtigen Datum, welches ich über die myorder.php schon angepasst habe.

Allerdings müsste dort doch - je nach Zahlungsweise immer ein angepasster Text stehen.

also z.B.
“Der Betrag wird nach dem Versand der Ware abgebucht” oder
"Versand der Ware erfolgt nach Zahlungseingang" usw.

Mache ich hier etwas falsch oder wo kann ich diese Option einstellen bzw. müsste hier eine ( IF ) Abfrage in der myorder.php gemacht werden und wie müsste diese Abfrgage vom PHP-Code her aussehen?

Das nächste Problem mit dem Rechnungsformular wäre die Kunden-Nr oben rechts auf der Rechnung bzw. dem Lieferschein …

Standardmäßig steht dort ja:

Bei Zahlungen bitte immer angeben:
Kundennummer 10001

Wenn ein Kunde aber ohne Registrierung bestellt, erhält er ja auch keine Kunden-Nr. und auf RE und LS wird dann gedruckt:

Bei Zahlungen bitte immer angeben:
Kundennummer

Also müsste hier ja eigentlich noch eine IF-Abfrage hinzu, dass die Kunden-Nr nur dann ausgegeben wird, wenn es auch eine Kunden-Nr gibt … und ansonsten die Zeile leer bleibt.
Als kleine Abhilfe habe ich jetzt im Formular oberhalb der Zeile mit der Kunden-Nr. schon die Bestell- bzw. Auftrags-Nr. eingefügt (für Rückfragen) aber für eine “optisch” saubere Rechnung müsste dort eben noch eine IF-Abfrage rein …

Gibt es zu dem PD-Modul für Rechnung / Lieferschein irgendeine Form der Dokumentation oder Anleitung mit Beschreibung der Möglichkeiten ond / oder der Variablen?

Dieses Problem hat doch eigentlich jeder OXID-Shop … oder?

Hallo Heidelbär,

also in der Version 4.3.2 wird die Kundennummer bei einem Kauf ohne Konto sowohl generiert als auch angezeigt.
Hast du das mal im Demo-Shop getestet ? Wenn es dort genauso ist wie bei dir würde ich auf Bugverdacht tippen.

aber darunter steht dann immer die Zeile “Zahlbar bis zum XX.XX.2010” auch mit dem richtigen Datum, welches ich über die myorder.php schon angepasst habe.

Ist mir damals auch aufgefallen und konnte es zum Glück rausnehmen, da ich es nicht benötigt habe. Eine Abfrage, dass nur bei bestimmten Zahlungsarten ein Zahlbar bis steht ist auf jeden Fall sinvoll. Leider ein nur Feature.
Wenn es etwas angelaufen ist macht sowieso eine Wawi (inkl. Rechnungsdruck) Sinn, dann liegt die Rechnungsdruck Option in OXID eh brach.

CYA

Die Anpassungen musst Du direkt in der myorder.php vornehmen.

Mit einer if-Abfrage über

$this->_oData->oxorder__oxpaymenttype->value

könntest Du doch individuelle Texte pro Zahlungsart erreichen.

Entweder du änderst dann z. B. die Methode _setPaymentMethodInfo oder erstellst eine neue Methode ähnlich dieser die Du dann in generate aufrufst.

Vielleicht so ähnlich:


       protected function _deineMethode( &$iStartPos )
    {
		if ( $this->_oData->oxorder__oxpaymenttype->value == 'oxidpayadvance') {
			$text = 'Dein Text'; }
		elseif ( $this->_oData->oxorder__oxpaymenttype->value == 'oxidcashondel') {
			$text = 'Dein anderer Text';}
		else {
			$text = 'Dein ganz anderer Text'; }
        $this->font( 'Arial', '', 10 );
        $this->text( 15, $iStartPos + 4, $text );
        $iStartPos += 4;
    }
    

[QUOTE=stefanwesop;41170]Die Anpassungen musst Du direkt in der myorder.php vornehmen.[/QUOTE]

Hallo … und erstmal vielen Dank für die Info und Hilfestellung, die ich direkt mal versuchen werde umzusetzen.

Sind die ganzen Variablen, die ich hier abfragen kann irgendwo (zum nachlesen) auch definiert bzw. dokumentiert?

Also die Klassen des pdf-Moduls sind in der normalen Oxid-Dokumentation enthalten.

Die Variable

$this->_oData->oxorder__oxpaymenttype->value

hat aber nicht direkt etwas mit dem pdf-Modul zu tun, sondern allgemein mit den Daten eines Objektes, in dem Fall mit oxorder-Objekt. Hier erfolgt der Zugriff auf den Inhalt des Feldes oxpaymenttype der Tabelle oxorder in der MySQL-Datenbank. Insofern ist hier vielleicht auch das Datenbankschema aufschlußreich.

[QUOTE=stefanwesop;41182]Also die Klassen des pdf-Moduls sind in der normalen Oxid-Dokumentation enthalten.[/QUOTE]

Das funktioniert super … und auch der Tipp mit den Klassen. :slight_smile:

Jetzt hab ich aber noch das kleine Problem, dass ich in einer Zeile:

            $text = 'Rechnungsbetrag zz.Nachnahmegebühr bei Lieferung';}

stehen habe und im ausgegebenen PDF natürlich das “ü” nicht dargestellt wird.

Wahrscheinlich ein Zeichensatzproblem, aber in der myorder.php finde ich nirgends einen Hinweis bezgl. des verwendeten Zeichensatzes …

Die Texte werden in myorder.php aus dem Languagefile unter out\admin\de\lang.php gezogen. Hier ist bei mir als Zeichensatz ISO-8859-15 eingetragen. Du könntest Deine Texte ja auch in dieser Datei bzw. besser in cust_lang.php hinterlegen und in der myorder.php entsprechend ansprechen:

$this->translate( 'DEIN_TEXT_IN_CUSTLANG' )

Dann sollte es mit den Umlauten auch funktionieren, sofern es nicht ein generelles Umlautproblem bei Dir gibt.

[QUOTE=stefanwesop;41247]Die Texte werden in myorder.php aus dem Languagefile unter out\admin\de\lang.php gezogen.[/QUOTE]

Danke, so langsam beginne ich die Struktur (und WAS WO gespeichert ist) zu verstehen.

Kann ich in den Texten auch einen Zeilenumbruch “generieren” … und wenn ja mit welchem Zeichen?

… und dann hab ich jetzt z.B: die Zeile:


        if ( $this->_oData->oxorder__oxpaymenttype->value == 'oxidinvoice') {
        $text = $this->_oData->translate( 'ORDER_OVERVIEW_PDF_PAYUPTO' ).date( 'd.m.Y', mktime( 0, 0, 0, date ( 'm' ), date ( 'd' ) + 14, date( 'Y' ) ) );

was in der Rechnung später als:

“Zahlbar bis zum 06.10.2010” erscheint.

Wenn ich dort z.B. noch was anhängen möchte z.B. “auf das Konto XXXXXXXX BLZ XXXXXX” … wo oder wie füge ich das an der Zeile


        if ( $this->_oData->oxorder__oxpaymenttype->value == 'oxidinvoice') {
        $text = $this->_oData->translate( 'ORDER_OVERVIEW_PDF_PAYUPTO' ).date( 'd.m.Y', mktime( 0, 0, 0, date ( 'm' ), date ( 'd' ) + 14, date( 'Y' ) ) );

noch an?

So wie ich es sehe wird mit dem zweiten Parameter die vertikale Position im Dokument gesteuert

$this->text( 15, $iStartPos + 4, $text );

Also dürfte es mit einer entsprechenden Erhöhung von $iStartPos funktionieren.

Das habe ich aber nicht getestet, müsste aber nach meinem Dafürhalten so klappen.

mhm … also das mit der 2. Zeile funktioniert noch nicht so ganz … aber ich hab noch ein anderes Problem mit dem Logo in der PDF-Rechnung bzw. dem PDF-Lieferschein:

Mein Logo hat einen weißen Hintergrund und sollte daher auf der PDF Datei dann ohne einen sichtbaren Rand gedruckt werden.
Allerdings erscheint das Logo im Ausdruck mit einem leicht grauen Hintergrund und von der Qualität auch wesentlich schlechter, als wenn ich die Grafik direkt auf meinem Drucker ausgebe.
Ich habe jetzt auch schon mit verschiedenen Qualitäten die Datei (PNG und JPG) im Shop ausprobiert (75 dpi, 150 dpi und 300 dpi) - das Ergebnis ist immer das gleiche … und auch die Schrift ist im PDF Ausdruck verpixxelter als ich das möchte …

Mein Code:


        //logo
        $myConfig = $this->getConfig();
        $aSize    = getimagesize( $myConfig->getAbsImageDir().'/faktura_logo.png' );
        $iMargin  = 195 - $aSize[0] * 0.2;
        $oPdf->setLink( $oShop->oxshops__oxurl->value );
        $oPdf->image( $myConfig->getAbsImageDir().'/faktura_logo.png', $iMargin, 10, $aSize[0] * 0.2, $aSize[1] * 0.2, '', $oShop->oxshops__oxurl->value );
        return 14 + $aSize[1] * 0.2;

Mit MARGIN wird ja ein Randabstand definiert … aber warum werden alle SIZE-Werte mit 0.2 multipliziert?
Gibt es keine Möglichkeit, die Grafikdatei dort wirklich 1:1 einzubinden, damit die Qualität des Ausdrucks besser wird? (Evtl. wäre dann auch das Problem mit dem Grauschleier im Hintergrund behoben …)

Ich habe noch ein Problem in meiner Rechnung / Lieferschein:

Bei der Anschrift wird als Anrede entweder MR oder MRS eingetragen …

In meiner Datenbank (Tabelle: oxorder) steht auch im Feld OXBILLSAL der Wert MR bzw. MRS bei den Bestellungen.
Also hab ich in der myorder.php als Abfrage eingetragen:


    protected function _setBillingAddressToPdf( $oPdf )
    {
        $oPdf->setFont( 'Arial', '', 10 );
		if ( $this->_oData->oxorder__oxbillsal->value == MR ) {$text = 'Herr';} else {$text = 'Frau';}
        $oPdf->text( 25, 59, $text );
        $oPdf->text( 25, 63, $this->oxorder__oxbillfname->value.' '.$this->oxorder__oxbilllname->value );
        $oPdf->text( 25, 67, $this->oxorder__oxbillcompany->value );
        $oPdf->text( 25, 71, $this->oxorder__oxbillstreet->value.' '.$this->oxorder__oxbillstreetnr->value );
        $oPdf->setFont( 'Arial', 'B', 10 );
        $oPdf->text( 25, 75, $this->oxorder__oxbillzip->value.' '.$this->oxorder__oxbillcity->value );
        $oPdf->setFont( 'Arial', '', 10 );
        $oPdf->text( 25, 79, $this->oxorder__oxbillcountry->value );
    }

Jetzt erhalte ich in jeder Rechnung “Frau” als Anrede … auch wenn im Datensatz ein “MR” eingetragen ist.

[B]Wo ist mein Denk- oder Schreibfehler in der IF-Abfrage?[/B]

PS: ansonsten gibt es im ganzen Shop keine Probleme mit der Anrede und auch bei allen Mails wird die Anrede immer korrekt eingetragen …

Versuch es mal mit Anführungszeichen bei ‘MR’.

Das hatte ich auch schon probiert …

Egal ob value == ‘MR’ steht oder value == MR … das Ergebnis ist das gleiche.
(es wird aber - egal bei welcher Schreibweise kein Fehler etc. angezeigt)

Ich denke mal, dass es ein Fehler in meiner Abfrage sein muß …

Wenn ich:


if ( $this->_oData->oxorder__oxbillsal->value == 'MR' ) {$text = 'Herr';} else {$text = 'Frau';}
$oPdf->text( 25, 59, $text );

in der PHP Datei habe, steht immer “Frau” in der Rechnung … dreh ich das ganze “um” … also:


if ( $this->_oData->oxorder__oxbillsal->value == 'MRS' ) {$text = 'Frau';} else {$text = 'Herr';}
$oPdf->text( 25, 59, $text );

Dann steht immer “Herr” in der Rechnung … es wird also immer der Wert nach dem “else” genommen …

Hatte auch das “MR”- und “MRS”-Problem. Geholfen hat folgendes:


protected function _setBillingAddressToPdf( $oPdf )
    {
        $oPdf->setFont( 'Arial', '', 10 );
		$oPdf->text( 25, 67, $this->oxorder__oxbillcompany->value );
        if (strtolower($this->oxorder__oxbillsal->value) == 'mr')
            $sText = $this->translate( 'GENERAL_SALUTATION_MR' );
        elseif (strtolower($this->oxorder__oxbillsal->value) == 'mrs')
            $sText = $this->translate( 'GENERAL_SALUTATION_MRS' );
        else $sText = $this->oxorder__oxbillsal->value;
        $oPdf->text( 25, 59, $sText );
        $oPdf->text( 25, 63, $this->oxorder__oxbillfname->value.' '.$this->oxorder__oxbilllname->value );        
        $oPdf->text( 25, 67, $this->oxorder__oxbillstreet->value.' '.$this->oxorder__oxbillstreetnr->value );
        $oPdf->setFont( 'Arial', 'B', 10 );
        $oPdf->text( 25, 71, $this->oxorder__oxbillzip->value.' '.$this->oxorder__oxbillcity->value );
        $oPdf->setFont( 'Arial', '', 10 );
        $oPdf->text( 25, 79, $this->oxorder__oxbillcountry->value );
    }

Und das Prinzip natürlich auch bei der

protected function _setDeliveryAddressToPdf( $oPdf )

Hi, ist das Mr Mrs Problem nicht ein “Bug” der sich irgenwann mal eingeschlichen hat und über die CMS Bausteine gelöst wird ?

Sucht mal im Forum danach. Kommt mir komisch vor was Ihr da hart verdrahten wollt.

CYA

[QUOTE=Firefax;41570]Hi, ist das Mr Mrs Problem nicht ein “Bug” der sich irgenwann mal eingeschlichen hat und über die CMS Bausteine gelöst wird ?[/QUOTE]

Ich bin mir nicht sicher, ob dies ein grundlegender Bug ist, wir hatten das Problem mit den Anreden im PDF aber auch bevor wir die Rechnungen und Lieferscheinen mit unserem ERP-System erstellt haben …

[QUOTE=HeidelBÄR;41564]Ich denke mal, dass es ein Fehler in meiner Abfrage sein muß …[/QUOTE]

Ob es ein Fehler in der Abfrage ist weiß ich nicht aber ich konnte es bei uns so lösen:


if ( $this->oxorder__oxdelsal->value == 'MRS' ) {$text = 'Frau';} else {$text = 'Herr';}
$oPdf->text( 25, 91, $text );

Nimm also in Deiner Abfrage einfach das “_oData->” raus, dann sollte es funktionieren.

Moin !
Muss diese Thema bitte noch einmal aufkochen, da ich jetzt selber davor stehe, die PDF Rechnungstexte anpassen zu müssen…In dem Thread wird das Coding nur in Bruchstücken erwähnt…
Hat jemand es soweit bereits angepasst, das die Zahlungstexte den jeweilgen Zahlung entsprechen.
Also Abholung z.b. "Zahlbar vor Ort bei Abholung"
bei Bankeinzug "wir buchen ab…
etc.
Würde mich sehr freuen, wenn jemand das Coding bereitstellen kann, der dieses schon einsetzt.

So long
Franky