WooCommerce gehört zu den beliebtesten Shop-Systemen, auch wenn es im Grunde nur ein kostenloses Plugin für WordPress ist. Mit wenigen Handgriffen lässt es sich an das deutsche Recht anpassen und ist mit unzähligen Plugins nahezu unbegrenzt erweiterbar. In diesem Artikel geht es um das Schreiben von Rechnungen und Lieferscheinen, sowie den Ausdruck von Versandaufklebern direkt aus der Bestellübersicht.
Da ich WordPress sowohl als Basis für Blogs als auch für die Erstellung von Firmenwebseiten nutze, liegt es natürlich nahe, WooCommerce als Online-Shopssystem einzubinden. Selbst für einen reinen Online-Shop, macht es Sinn, da die Kombination mit einem Blog viele Vorteile bietet.
Da alle erforderlichen Daten bereits mit der Bestellung über WooCommerce erfasst werden, möchte ich diese nicht erneut in meine Buchhaltung eingeben. Zwar könnte ich den Datensatz auch exportieren und dann in die Buchhaltung importieren, aber ich möchte meine Rechnungen lieber direkt während der Bearbeitung einer Bestellung ausdrucken. Die gedruckten Rechnungen werden einmal wöchentlich gesammelt importiert und direkt als Einnahme verbucht. Wie das genau funktioniert, beschreibe ich später noch detailliert.
Rechnungen und Lieferscheine mit WooCommerce PDF Invoices & Packing Slips
Das Plugin kann kostenlos über die WordPress Administration oder über die WordPress Webseite geladen werden. Nach der Installation werden bei jeder Bestellung 2 weitere Buttons angezeigt, über die eine Rechnung oder ein Lieferschein ausgedruckt werden kann. Nachdem eine Rechnung als PDF erstellt wurde, kann sie automatisch mit der Status-Email für erledigte Bestellungen versandt werden. Auch im Kundenbereich steht sie dem Kunden als Download zur Verfügung.
Das Aussehen der Rechnung lässt sich im begrenzten Rahmen direkt in der Administration anpassen. Hier lassen sich die anzuzeigenden Daten wie Adresse, Name des Shop, Fußzeile und weitere bestimmen. Auch die Rechnungsnummer samt Präfix, sofern gewünscht, werden hier definiert.
Eine echte Anpassung ist so jedoch nicht möglich. Dazu ist es erforderlich, die Templates von Rechnung und Lieferschein von /wp-content/plugins/woocommerce-pdf-invoices-packing-slips/templates/pdf/templatename/ nach /wp-content/themes/meintheme/woocommerce/pdf/templatename/ zu kopieren. Dieses kann dann direkt bearbeitet werden und wird bei Updates auch nicht überschrieben. Allerdings sollte dann eine Grundwissen in HTML und PHP vorhanden sein. Das Template besteht nicht nur aus einem HTML Gerüst und einigen Platzhaltern, sondern reichlich PHP Code, der direkt auf Funktionen von WordPress und WooCommerce zugreift. Wer damit umgehen kann, der kann das Layout exakt an die Rechnungen aus seiner Buchhaltung anpassen.
Zusätzlich zur Anpassung habe ich noch eine Ergänzung im Rechnungstemplate vorgenommen. Sämtliche Daten, die meine Buchhaltung bei einem Import erwartet, werden in eine eigens dafür angelegte Tabelle der WordPress Datenbank geschrieben. Einmal wöchentlich exportiere ich diese in eine CSV Datei und importiere sie in meine Buchhaltung. Wie dieser Import und die Datensätze auszusehen haben, hängt von der verwendeten Buchhaltung ab. In meinem Fall ist das die Online Buchhaltung von Collmex und so sieht der Code aus, der die verschiedenen Zahlungsarten berücksichtigt und auch eine geschriebene Rechnung korrigieren kann. Andere Buchhaltungssoftware braucht natürlich auch andere Felder.
$thebill = $wpdb->get_results( $wpdb->prepare("SELECT ID,Rechnungsnummer FROM wp_invoices WHERE Rechnungsnummer = '%s'",$renum) ); $redate = date("Ymd",time()); if($wpo_wcpdf->get_payment_method() == "Überweisung") $repay = "1210"; else $repay = "1250"; if($thebill) { $wpdb->query( "UPDATE wp_invoices SET Satzart = 'CMXUMS', Rechnungsdatum = ".$redate.", Rechnungsnummer = '".$renum."', Nettobetrag = '".($sum_net+$sum_ship_net)."', Steuer = 19, Waehrung = 'EUR', Gegenkonto = ".$repay.", Rechnungsart = 0, Belegtext = 'Shopbestellung ".get_post_meta($wpo_wcpdf->export->order->id,'_billing_first_name',true)." ".get_post_meta($wpo_wcpdf->export->order->id,'_billing_last_name',true)." / ".$renum."', Zahlungsbedingung = 0, Kontonummer = 8420, Systemname = 'Woocommerce' WHERE Rechnungsnummer = '".$renum."'" ); } else { $wpdb->insert( 'wp_invoices', array("Satzart" => "CMXUMS", "Rechnungsdatum" => $redate, "Rechnungsnummer" => $renum, "Nettobetrag" => $sum_net+$sum_ship_net, "Steuer" => '19', "Waehrung" => 'EUR', "Gegenkonto" => $repay, "Rechnungsart" => '0', "Belegtext" => 'Shopbestellung '.get_post_meta($wpo_wcpdf->export->order->id,'_billing_first_name',true).' '.get_post_meta($wpo_wcpdf->export->order->id,'_billing_last_name',true).' / '.$renum, "Zahlungsbedingung" => '0', "Kontonummer" => '8420', "Systemname" => 'Woocommerce' ) ); } ob_start(); //var_dump(get_object_vars($wpo_wcpdf)); echo "UPDATE wp_invoices SET Satzart = 'CMXUMS', Rechnungsdatum = ".$redate.", Rechnungsnummer = '".$renum."', Nettobetrag = ".$sum_net+$sum_ship_net.", Steuer = 19, Waehrung = 'EUR', Gegenkonto = ".$repay.", Rechnungsart = 0, Belegtext = 'Shopbestellung ".get_post_meta($wpo_wcpdf->export->order->id,'_billing_first_name',true)." ".get_post_meta($wpo_wcpdf->export->order->id,'_billing_last_name',true)." / ".$renum."', Zahlungsbedingung = 0, Kontonummer = 8420, Systemname = 'Woocommerce' WHERE Rechnungsnummer = '".$renum."'"; $result = ob_get_clean();
Auch wenn dieser Code nicht direkt übertragbar ist, zeigt er zumindest, wie man an die erforderlichen Parameter gelangt.
Versandetiketten bietet dieses Plugin leider nicht an, dennoch nutze ich es für meinen Shop. Wie ich trotzdem an meine Versandaufkleber komme, zeigt der nächste Abschnitt.
Print Invoice, Packing Slip, Delivery Note & Label Plugin for WooCommerce (Basic)
Dieses Plugin ist etwas umfangreicher als das von mir verwendete, hat aber in der kostenlosen Version einen großen Nachteil. Die Templates lassen sich nicht in das Theme Verzeichnis verschieben. Änderungen gehen also nach einem Update verloren. Das lässt sich nur umgehen, indem die Templates zwar in das Theme Verzeichnis oder einen anderen Ort kopiert und dort bearbeitet werden. Nach Abschluss aller Änderungen muss das original Template im Plugin Verzeichnis überschrieben werden. Die möglichen Änderungen über die Administration sind extrem begrenzt.
Dafür lässt sich über dieses Plugin nicht nur eine Rechnung oder Lieferschein drucken, sondern auch ein Versandetikett. Wer bereit ist, etwas Geld für die Pro Version auszugeben, der bekommt ein komplettes Paket, das sich recht einfach konfigurieren lässt. Sowohl in der Bestellübersicht als auch in den Details einer Bestellung erscheinen Buttons zum direkten Drucken und auch zum Download der PDF Versionen von Rechnung, Lieferschein, Versandetikett und Versandbenachrichtigung.
Da ich bereits das erste Plugin für meine Rechnungen genutzt habe und die Templates umfangreich umgeschrieben habe, musste nur noch ein Plugin für die Versandetiketten her. Die im zweiten Plugin enthaltenen Versandetiketten gibt es auch als Standalone Version und nennt sich WooCommerce Shipping Label (BASIC)
Durch die Kombination dieser beiden Plugins habe ich genau das, was ich für meinen Shop benötige. WooCommerce PDF Invoices & Packing Slips ist wesentlich komfortabler und bietet auch in der kostenlosen Variante viele Möglichkeiten, das Layout mit wenigen Klicks zu personalisieren. Da die Templates in das Theme Verzeichnis kopiert werden können, konnte ich sie problemlos mit meinem eigenen Code anpassen, ohne das Plugin immer wieder zu überschreiben und bei einem Update schnell reagieren zu müssen.
Bei den Versandetiketten muss ich das zwar auf diese Weise lösen. Da diese aber immer nur manuell ausgedruckt werden, ist der Weg des Überschreibens im Templateverzeichnis vertretbar.