Neueste Blog-Einträge
Kurzinfo

Andreas von Studnitz
- Diplom-Informatiker
- 6 Jahre Entwicklungs- und Projektleitungserfahrung in einer Internet-Agentur
- Magento-Freelancer
- Magento Certified Developer
- 4 Jahre Magento-Erfahrung
Kontakt
Telefon:
02408 937 965 1 oder
0170 486 0 464
E-Mail:
avs(at)avs-webentwicklung.de
Twitter: twitter.com/avstudnitz
< 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:
- Neues "Quote"-Objekt anlegen (dieses repräsentiert eine Bestellung vor der Bestätigung)
- Hinzufügen von Adressdaten, Zahlungs- und Versandinformationen und den entsprechenden Produkten auf Basis der alten Bestellung
- Automatisches Konvertieren des Quote-Objektes in ein Order-Objekt
- 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;
}

Arbeite an einem ähnlichen Projekt. Habs mittlerweilen soweit, dass ich die Quote speichern kann, wie aber funktioniert die Übernahme von Quote in Order, mit$order = $service->submit(); erhalte ich einen Fehler.
"no such file or directory in lib/Varien/Autoload.php on line 93"?
Kannst du mir hier vielleicht weiterhelfen.
hierzu wäre interessant zu wissen, welche Datei nicht gefunden wird (sollte auch bei der Fehlermeldung dabeistehen), und auch, mit welcher Magento-Version du arbeitest. Dann kann ich vielleicht weiterhelfen.
Kommentar hinzufügen