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 »

< Anlegen neuer Magento-Bestellungen per Quellcode

Magento: Versand zu einer Bestellung per Quellcode erzeugen

11.05.2010 00:04

Vor allem beim Zusammenspiel mit Schnittstellen kommt es immer wieder vor, dass ein Versand zu einer Bestellung per Skript ausgelöst werden soll. Hierbei hilft folgender Code:

 

/**
* Creates a shipment for an order
*
* @param Mage_Sales_Model_Order $order
* @return Mage_Sales_Model_Order_Shipment
*/
protected function createShipment($order) {

$convertor = Mage::getModel('sales/convert_order');
$shipment = $convertor->toShipment($order);

// count items
$savedQtys = array();
$items = $order->getAllItems();
foreach($items as $item) {

$savedQtys[$item->getId()] = $item->getQtyOrdered();
}

// add items to shipment
foreach ($order->getAllItems() as $orderItem) {
if (!$orderItem->isDummy(true) && !$orderItem->getQtyToShip()) {
continue;
}
if ($orderItem->isDummy(true) && !$this->_needToAddDummy($orderItem, $savedQtys)) {
continue;
}
if ($orderItem->getIsVirtual()) {
continue;
}
$item = $convertor->itemToShipmentItem($orderItem);
if (isset($savedQtys[$orderItem->getId()])) {
if ($savedQtys[$orderItem->getId()] > 0) {
$qty = $savedQtys[$orderItem->getId()];
} else {
continue;
}
}
else {
if ($orderItem->isDummy(true)) {
$qty = 1;
} else {
$qty = $orderItem->getQtyToShip();
}
}
$item->setQty($qty);
$shipment->addItem($item);
}
$shipment->register();
$shipment->setEmailSent(true);

// save shipment and order
$order->setCustomerNoteNotify(true);
$order->setIsInProcess(true);

$transactionSave = Mage::getModel('core/resource_transaction')
->addObject($shipment)
->addObject($order)
->save();

// send email
$shipment->sendEmail(true, '');

return $shipment;
}

Kommentare