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 »

< Neuer Magento-Blog

Anlegen neuer Magento-Bestellungen per Quellcode

10.05.2010 21:01

Im Rahmen der Erstellung eines Abonnement-Systems für Magento stellte sich mir auch die Aufgabe, automatisiert neue Bestellungen anzulegen, die auf einer bestehenden Bestellung basieren. Der Vorgang ist dabei wie folgt:

  1. Neues "Quote"-Objekt anlegen (dieses repräsentiert eine Bestellung vor der Bestätigung)
  2. Hinzufügen von Adressdaten, Zahlungs- und Versandinformationen und den entsprechenden Produkten auf Basis der alten Bestellung
  3. Automatisches Konvertieren des Quote-Objektes in ein Order-Objekt
  4. Versenden der Bestellbestätigung

Der dazugehörige Quellcode sieht wie folgt aus:

 

protected function copyOrder($baseOrder) {
if ($quote = $this->prepareOrder($baseOrder)) {

$service = Mage::getModel('sales/service_quote', $quote);
$order = $service->submit();
$order->sendNewOrderEmail();

return $order;
}
}

protected function prepareOrder($baseOrder) {

// create quote
$quote=Mage::getModel('sales/quote');

// assign customer
$customer=Mage::getModel('customer/customer')->load($baseOrder->getCustomerId());
$storeId=$customer->getStoreId();
$quote->assignCustomer($customer); //sets ship/bill address

// add billing address
$quoteBillingAddress = Mage::getModel('sales/quote_address')->importOrderAddress($baseOrder->getBillingAddress());
$quote->setBillingAddress($quoteBillingAddress);

// add shipping address
$quoteShippingAddress = Mage::getModel('sales/quote_address')->importOrderAddress($baseOrder->getShippingAddress());
$quote->setShippingAddress($quoteShippingAddress);

// define store
$store=$quote->getStore()->load($storeId);
$quote->setStore($store);

// add products
foreach($baseOrder->getAllItems() as $baseOrderItem) {

if ($baseOrderItem->getParentItem()) continue;

$product = Mage::getModel('catalog/product')->load($baseOrderItem->getProductId());
$productOptions = $baseOrderItem->getProductOptions();

$request = array('qty' => $baseOrderItem->getOrderedQty());

// manage configurable products
if (isset($productOptions['info_buyRequest']['super_attribute'])) {

foreach($productOptions['info_buyRequest']['super_attribute'] as $attributeKey => $attributeValue) {

$request['super_attribute'][$attributeKey] = $attributeValue;
}
}
try {

$quote->addProduct($product, new Varien_Object($request));
}
catch (Exception $e) {

// TODO: send notification mail
return false;
}
}

// set shipping method
$quote->getShippingAddress()->setShippingMethod($baseOrder->getShippingMethod());
$quote->getShippingAddress()->setCollectShippingRates(true)->save();

// set payment method
$quote->getPayment()->addData($baseOrder->getPayment()->getData());

// calculate totals
$quote->collectTotals();

$quote->save();
return $quote;
}

Kommentare