Neueste Blog-Einträge
Kurzinfo
Andreas von Studnitz
- Diplom-Informatiker
- 6 Jahre Entwicklungs- und Projektleitungserfahrung in einer Internet-Agentur
- Magento-Freelancer
- Magento Certified Developer
- Magento Certified Solution Specialist
- 6 Jahre Magento-Erfahrung
Andreas von Studnitz arbeitet seit 2012 als Geschäftsführer und Entwickler für die Magento-Agentur integer_net GmbH. Aktuelle Informationen finden Sie unter www.integer-net.de
< Magento: Versand zu einer Bestellung per Quellcode erzeugen
Magento: Anlegen einer Rechnung zu einer Bestellung
14.05.2010 09:21
Mit der folgenden Funktion kann zu einer Magento-Bestellung per Skript eine Rechnung ausgelöst werden. Hier werden alle Produkte berechnet - sollte das nicht gewünscht sein, muss die Funktion angepasst werden. Anhand des Parameters $pay kann noch bestimmt werden, ob die Rechnung als "offen" oder als "bezahlt" markiert werden soll. Nur mit einer bezahlten Rechnung stellt sich der Bestellstatus auf "vollständig" - und natürlich muss auch der Versand dafür erfolgt sein.
/**
* creates an invoice for an order, regarding all ordered products
*
* @param Mage_Sales_Model_Order $order
* @param boolean $pay decides whether the invoice should be markes as "paid"
* @return Mage_Sales_Model_Order_Invoice
*/
protected function createInvoice($order, $pay = false) {
// create invoice
$convertOrderObj = Mage::getSingleton('sales/convert_order');
$invoice = $convertOrderObj->toInvoice($order);
// add all order items (products) to invoice
foreach ($order->getAllItems() as $item) {
$invoiceItem = $convertOrderObj->itemToInvoiceItem($item);
if ($item->getParentItem()) {
$invoiceItem->setParentItem($invoice->getItemById($item->getParentItem()->getId()));
}
$invoiceItem->setQty($item->getQtyToInvoice());
$invoice->addItem($invoiceItem);
}
// calculate totals
$invoice->collectTotals();
$invoice->register();
$orderPayment = $order->getPayment();
$orderPayment->pay($invoice);
if ($pay) {
// mark invoice as "paid"
$invoice->pay();
}
// save order and invoice
$order->setIsInProcess(true);
$transactionObj = Mage::getModel('core/resource_transaction');
$transactionObj->addObject($invoice);
$transactionObj->addObject($invoice->getOrder());
$transactionObj->save();
$invoiceId = $invoice->getId();
return $invoice;
}