• Resolved PascalBajorat

    (@pascalbajorat)


    Hallo, in der Pro Version von WooCommerce Germanized ist es problemlos möglich die Rechnung als PDF-Datei automatisch an den Kunden via E-Mail zu senden. Für eine Sonderfunktion müsste dies jedoch etwas erweitert werden.

    Der Kunde soll neben der PDF-Rechnung ebenfalls den Lieferschein als PDF erhalten, in der selben E-Mail, lässt sich dies irgendwie realisieren?

    https://wordpress.org/plugins/woocommerce-germanized/

Viewing 12 replies - 1 through 12 (of 12 total)
  • Plugin Author vendidero

    (@vendidero)

    Hi,

    auch wenn das meiner Meinung nach nicht sonderlich viel Sinn macht (warum sollte ein Lieferschein per Mail verschickt werden) ist das natürlich problemlos möglich. Grundsätzlich könntest du dafür den von WooCommerce eingeführten Filter für die Attachments nutzen:
    apply_filters( ‘woocommerce_email_attachments’, array(), $this->id, $this->object );

    In deinem Filter testest du einfach, ob es sich um die Rechnungs-Mail handelt (über den Parameter id) und kannst dann folgendermaßen den Lieferschein “abholen” – insofern vorab generiert:

    function child_send_packing_slip( $attachments, $id, $object ) {
        if ( 'customer_invoice' !== $id ) {
           return $attachments;
        }
        $order = wc_get_order( $object->order );
        $slips = wc_gzdp_get_invoices_by_order( $order, 'packing_slip' );
        if (  ! empty( $slips ) ) {
           $attachments[] = $slips[0]->get_pdf_path();
        }
        return $attachments;
    }
    add_filter( 'woocommerce_email_attachments', 'child_send_packing_slip', 10, 3 );

    Evtl. musst du noch ein wenig feintunen aber das müsste in die richtige Richtung gehen.

    Grüße

    Thread Starter PascalBajorat

    (@pascalbajorat)

    Besten Dank! Das werde ich auf jeden Fall mal testen. Der Lieferschein wird angepasst zu einem Zertifikat, dann ergibt das ganze auch mehr Sinn 😉

    Thread Starter PascalBajorat

    (@pascalbajorat)

    Hallo,

    noch eine nachträgliche Frage: Das besagte Zertifikat, welches aus dem Lieferschein-Template entstehen soll, wird aktuell noch nicht an die E-Mails angehängt, obwohl ich den obigen Code eingebunden habe.

    Die Produkte im Warenkorb waren alle virtuelle / digitale Produkte, vermutlich wird daher auch kein Lieferschein generiert. Besteht die Möglichkeit mit dem obigen Code den Lieferschein auszugeben und mit Artikelliste zu generieren, auch wenn es sich nur um digitale Produkte handelt?

    Wenn ich das noch gelöst bekomme, sollte ich den Rest auf Basis der PDF-Templates zusammengebaut bekommen, wäre super wenn es dafür noch eine Lösung gibt.

    Besten Dank im Voraus.

    Plugin Author vendidero

    (@vendidero)

    Hi,

    der Lieferschein sollte eigentlich unabhängig von der Art der Produkte erstellt werden. Die Frage ist eben, ob der Lieferschein schon generiert wurde, bevor die E-Mail versendet werden soll. Alternativ müsstest du u.U. eine Abfrage implementieren, ob ein Lieferschein existiert und falls nicht müsstest du diesen vorher generieren, etwa so:

    $slips = wc_gzdp_get_invoices_by_order( $order, 'packing_slip' );
    if ( empty( $slips ) ) {
          // Generate packing slips
          $args = apply_filters( 'woocommerce_gzdp_packing_slips_defaults', array( 'invoice_status' => 'wc-gzdp-pending' ) );
          $invoice = wc_gzdp_get_invoice( false, 'packing_slip' );
          $invoice->refresh( $args, $order );
          // Recheck for packing slips
          $slips = wc_gzdp_get_invoices_by_order( $order, 'packing_slip' );
    }
    Thread Starter PascalBajorat

    (@pascalbajorat)

    Vielen Dank für das schnelle Feedback. Ich habe die Funktion jetzt wie folgt in der functions.php des Themes implementiert:

    function child_send_packing_slip( $attachments, $id, $object ) {
    	if ( 'customer_invoice' !== $id ) {
    		return $attachments;
    	}
    
    	$order = wc_get_order( $object->order );
    	$slips = wc_gzdp_get_invoices_by_order( $order, 'packing_slip' );
    
    	if ( empty( $slips ) ) {
    		// Generate packing slips
    		$args = apply_filters( 'woocommerce_gzdp_packing_slips_defaults', array( 'invoice_status' => 'wc-gzdp-pending' ) );
    		$invoice = wc_gzdp_get_invoice( false, 'packing_slip' );
    		$invoice->refresh( $args, $order );
    
    		// Recheck for packing slips
    		$slips = wc_gzdp_get_invoices_by_order( $order, 'packing_slip' );
    	}
    
    	if (  ! empty( $slips ) ) {
    		$attachments[] = $slips[0]->get_pdf_path();
    	}
    
    	return $attachments;
    }
    
    add_filter( 'woocommerce_email_attachments', 'child_send_packing_slip', 10, 3 );

    Leider führt die aktuelle Version zu einem Fehler im Bestellablauf. Im letzten Schritt, nach dem Klick auf “jetzt kaufen”, kann die Bestellung nicht erfolgreich abgeschlossen werden:

    https://www.dropbox.com/s/dmkckfwyqx8bj9i/Screenshot%202016-06-02%2011.20.32.png?dl=0

    Habt ihr da noch eine Idee woran das jetzt liegen könnte? Gewählte Zahlungsmethode war “Rechnung” daher wird die Rechnung direkt nach / während der Bestellung generiert und hier auch die Action ausgeführt.

    Plugin Author vendidero

    (@vendidero)

    Hi,

    du solltest unbedingt mal WP_DEBUG anstellen, damit dir eine konkrete Fehlermeldung ausgegeben wird. Wahrscheinlich liegt das an deiner Implementierung der o.g. Funktionalität.

    Grüße

    Thread Starter PascalBajorat

    (@pascalbajorat)

    Die Fehlermeldung die bei Ausführung des obigen Filters ausgelöst wird lautet wie folgt:

    Notice: Trying to get property of non-object in /wp-content/plugins/woocommerce-germanized-pro/includes/abstracts/abstract-wc-gzdp-invoice.php on line 240

    Fatal error: Call to a member function get_formatted_billing_address() on boolean in /wp-content/plugins/woocommerce-germanized-pro/includes/abstracts/abstract-wc-gzdp-invoice.php on line 253

    Plugin Author vendidero

    (@vendidero)

    Hi,

    scheinbar gibt es irgendwelche Probleme, das order-Object zu initialisieren. Am besten du lässt dir mal testweise das $order-Objekt sowie die $object-Variable ausgeben, damit du siehst, was da konkret übergeben wird.

    Grüße

    Thread Starter PascalBajorat

    (@pascalbajorat)

    Hi,

    bin alle Variablen und Objekte einmal durchgegangen und habe die Probleme gefunden. An deiner Vorlage waren ein paar kleine Anpassungen notwendig, jetzt funktioniert es.

    Vielen Dank für die Unterstützung und die Ansätze zu dem Thema, ich lasse euch später noch eine 5 Sterne Bewertung für den tollen Service da, top.

    Eine letzte Frage noch: Gibt es einen Filter um den Dateinamen zu bestimmen, dass der Dateianhang nicht “Lieferschein-2016-XXXX.pdf” heißt.

    Der Vollständigkeit halber stelle ich anbei noch den funktionierenden Code zur Verfügung, welcher jetzt in meinem technischen Umfeld funktioniert:

    function child_send_packing_slip( $attachments, $id, $object ) {
    	if ( 'customer_invoice' !== $id ) {
    		return $attachments;
    	}
    
    	$order = wc_get_order( $object->post );
    	$slips = wc_gzdp_get_invoices_by_order( $order, 'packing_slip' );
    
    	if ( empty( $slips ) ) {
    		// Generate packing slips
    		$args = apply_filters( 'woocommerce_gzdp_packing_slips_defaults', array( 'invoice_status' => 'wc-gzdp-pending' ) );
    		$invoice = wc_gzdp_get_invoice( false, 'packing_slip' );
    		$invoice->refresh( $args, $order );
    
    		// Recheck for packing slips
    		$slips = wc_gzdp_get_invoices_by_order( $order, 'packing_slip' );
    	}
    
    	if (  ! empty( $slips ) ) {
    		$slips = array_values($slips);
    		$attachments[] = $slips[0]->get_pdf_path();
    	}
    
    	return $attachments;
    }
    
    add_filter( 'woocommerce_email_attachments', 'child_send_packing_slip', 10, 3 );
    Thread Starter PascalBajorat

    (@pascalbajorat)

    Hey,

    ich frage nur noch einmal nach, weil ihr sonst immer sehr schnell geantwortet habt: Ihr habt gesehen, dass ich in dem Text oben noch eine kleine Frage hatte? Falls das bereits auf dem Schirm ist, einfach ignorieren.

    Eine letzte Frage noch: Gibt es einen Filter um den Dateinamen zu bestimmen, dass der Dateianhang nicht “Lieferschein-2016-XXXX.pdf” heißt.

    Danke

    Plugin Author vendidero

    (@vendidero)

    Hi,

    sorry, ist etwas untergegangen. Du kannst einfach diesen Filter verwenden:
    woocommerce_gzdp_invoice_unique_filename
    Der Filter erhält den Dateinamen und als 2. Parameter das $invoice Object.

    Grüße

    Thread Starter PascalBajorat

    (@pascalbajorat)

    Besten Dank, funktioniert perfekt.

Viewing 12 replies - 1 through 12 (of 12 total)
  • The topic ‘PDF von Lieferschein und Rechnung via E-Mail versenden’ is closed to new replies.