Hallo zusammen,
heute gab es mal wieder ein problem zu lösen das evtl. auch andere interessieren könnte. Zumindest jeden der einen PrestaShop im einsatz hat.
Das problem: Wenn ein kunde etwas im shop bestellt dann erhält er natürlich eine bestellbestätigung per email. Nur wird hier die rechnung nicht mitgeschickt.
Die lösung: Recht einfach, nur nicht einfach zu finden. :-)
Schritt 1) In den administrationsbereich des shops gehen und hier auf „orders“ -> „statuses“ klicken (sorry, ist bei mir die englische version). Dann in der tabelle bei „invoice“ alles anklicken außer „Chanceled“ und „Payment error“. – Das müssen wir machen da sonst die rechnung nicht direkt bei der bestellung generiert wird.
Schritt 2) Jetzt müssen wir ein bisschen in den quellcode. Suche die datei „/classes/paymentmodule.php“ und suchen sie die folgende passage (ungefähr bei zeile 350):
// Join PDF invoice
if (intval(Configuration::get('PS_INVOICE')) AND Validate::isLoadedObject($orderStatus) AND $orderStatus->invoice AND $order->invoice_number)
{
$fileAttachment['content'] = PDF::invoice($order, 'S');
$fileAttachment['name'] = Configuration::get('PS_INVOICE_PREFIX', intval($order->id_lang)).sprintf('%06d', $order->invoice_number).'.pdf';
$fileAttachment['mime'] = 'application/pdf';
}
else
$fileAttachment = NULL;
und mache daraus:
// Join PDF invoice
//if (intval(Configuration::get('PS_INVOICE')) AND Validate::isLoadedObject($orderStatus) AND $orderStatus->invoice AND $order->invoice_number)
//{
$fileAttachment['content'] = PDF::invoice($order, 'S');
$fileAttachment['name'] = Configuration::get('PS_INVOICE_PREFIX', intval($order->id_lang)).sprintf('%06d', $order->invoice_number).'.pdf';
$fileAttachment['mime'] = 'application/pdf';
//}
//else
// $fileAttachment = NULL;
Jetzt wird immer eine Rechnung an die mail angehängt. Es gibt aber noch einen kleinen schönheitsfehler. Den bügeln wir so aus… ca. zeile 300 suchen… sieht in etwa so aus.
...
// Send an e-mail to customer
if ($id_order_state != _PS_OS_ERROR_ AND $id_order_state != _PS_OS_CANCELED_ AND $customer->id)
{
$invoice = new Address(intval($order->id_address_invoice));
$delivery = new Address(intval($order->id_address_delivery));
$carrier = new Carrier(intval($order->id_carrier));
$delivery_state = $delivery->id_state ? new State(intval($delivery->id_state)) : false;
$invoice_state = $invoice->id_state ? new State(intval($invoice->id_state)) : false;
...
und hängen da einfach die folgende (letzte) zeile dran
...
// Send an e-mail to customer
if ($id_order_state != _PS_OS_ERROR_ AND $id_order_state != _PS_OS_CANCELED_ AND $customer->id)
{
$invoice = new Address(intval($order->id_address_invoice));
$delivery = new Address(intval($order->id_address_delivery));
$carrier = new Carrier(intval($order->id_carrier));
$delivery_state = $delivery->id_state ? new State(intval($delivery->id_state)) : false;
$invoice_state = $invoice->id_state ? new State(intval($invoice->id_state)) : false;
$order = new Order(intval($order->id));
...
Damit sollte es funktionieren und schön aussehen :-)
Wer nun, wie ich, noch änderungen an der rechnung selbst vornehmen möchte der muss leider auch in den code. Die datei ist „/classes/PDF.php“. Aber bitte nur für änderungen die sonst nicht vorgenommen werden können. Adresse und footer und so kann alles im admin eingestellt werden ;)
Soweit erst einmal dazu. Bei fragen, bitte gleich fragen… bevor ich wieder vergessen hab wie das war :-)
Achso… prestashop 1.3.0.10
Letzte Kommentare