Kurzinfo


Andreas von Studnitz

mehr »

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

Kontakt

Bitte kontaktieren Sie mich über die Website von integer_net.

mehr »

< 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;
}

Kommentare