/** * Submit the quote. Quote submit process will create the order based on quote data * * @return Mage_Sales_Model_Order */ public function submitOrder() { $this->_deleteNominalItems(); $this->_validate(); $quote = $this->_quote; $isVirtual = $quote->isVirtual(); $transaction = Mage::getModel('core/resource_transaction'); if ($quote->getCustomerId()) { $transaction->addObject($quote->getCustomer()); } $transaction->addObject($quote); $quote->reserveOrderId(); if ($isVirtual) { $order = $this->_convertor->addressToOrder($quote->getBillingAddress()); } else { $order = $this->_convertor->addressToOrder($quote->getShippingAddress()); } $order->setBillingAddress($this->_convertor->addressToOrderAddress($quote->getBillingAddress())); if (!$isVirtual) { $order->setShippingAddress($this->_convertor->addressToOrderAddress($quote->getShippingAddress())); } $order->setPayment($this->_convertor->paymentToOrderPayment($quote->getPayment())); foreach ($this->_orderData as $key => $value) { $order->setData($key, $value); } foreach ($quote->getAllItems() as $item) { $orderItem = $this->_convertor->itemToOrderItem($item); if ($item->getParentItem()) { $orderItem->setParentItem($order->getItemByQuoteItemId($item->getParentItem()->getId())); } $order->addItem($orderItem); } $order->setQuote($quote); $transaction->addObject($order); $transaction->addCommitCallback(array($order, 'place')); $transaction->addCommitCallback(array($order, 'save')); /** * We can use configuration data for declare new order status */ Mage::dispatchEvent('checkout_type_onepage_save_order', array('order' => $order, 'quote' => $quote)); Mage::dispatchEvent('sales_model_service_quote_submit_before', array('order' => $order, 'quote' => $quote)); try { $transaction->save(); $this->_inactivateQuote(); Mage::dispatchEvent('sales_model_service_quote_submit_success', array('order' => $order, 'quote' => $quote)); } catch (Exception $e) { //reset order ID's on exception, because order not saved $order->setId(null); /** @var $item Mage_Sales_Model_Order_Item */ foreach ($order->getItemsCollection() as $item) { $item->setOrderId(null); $item->setItemId(null); } Mage::dispatchEvent('sales_model_service_quote_submit_failure', array('order' => $order, 'quote' => $quote)); throw $e; } Mage::dispatchEvent('sales_model_service_quote_submit_after', array('order' => $order, 'quote' => $quote)); $this->_order = $order; return $order; }
/** * Submit the quote. Quote submit process will create the order based on quote data * * @return Mage_Sales_Model_Order */ public function submit() { $this->_validate(); $quote = $this->_quote; $isVirtual = $quote->isVirtual(); $transaction = Mage::getModel('core/resource_transaction'); if ($quote->getCustomerId()) { $transaction->addObject($quote->getCustomer()); } $transaction->addObject($quote); $quote->reserveOrderId(); if ($isVirtual) { $order = $this->_convertor->addressToOrder($quote->getBillingAddress()); } else { $order = $this->_convertor->addressToOrder($quote->getShippingAddress()); } $order->setBillingAddress($this->_convertor->addressToOrderAddress($quote->getBillingAddress())); if (!$isVirtual) { $order->setShippingAddress($this->_convertor->addressToOrderAddress($quote->getShippingAddress())); } $order->setPayment($this->_convertor->paymentToOrderPayment($quote->getPayment())); foreach ($this->_orderData as $key => $value) { $order->setData($key, $value); } foreach ($quote->getAllItems() as $item) { $orderItem = $this->_convertor->itemToOrderItem($item); if ($item->getParentItem()) { $orderItem->setParentItem($order->getItemByQuoteItemId($item->getParentItem()->getId())); } $order->addItem($orderItem); } $quote->setIsActive(false); $transaction->addObject($order); $transaction->addCommitCallback(array($order, 'place')); $transaction->addCommitCallback(array($order, 'save')); /** * We can use configuration data for declare new order status */ Mage::dispatchEvent('checkout_type_onepage_save_order', array('order' => $order, 'quote' => $quote)); Mage::dispatchEvent('sales_model_service_quote_submit_before', array('order' => $order, 'quote' => $quote)); $transaction->save(); Mage::dispatchEvent('sales_model_service_quote_submit_after', array('order' => $order, 'quote' => $quote)); return $order; }
/** * Convert quote payment to order payment * * @param Mage_Sales_Model_Quote_Payment $payment * @return Mage_Sales_Model_Quote_Payment */ public function paymentToOrderPayment(Mage_Sales_Model_Quote_Payment $payment) { $orderPayment = parent::paymentToOrderPayment($payment); $orderPayment->setSuAccountNumber($payment->getSuAccountNumber())->setSuBankCode($payment->getSuBankCode())->setSuNlBankCode($payment->getSuNlBankCode())->setSuPaycode($payment->getSuPaycode())->setSuSecurity($payment->getSuSecurity())->setSuIban($payment->getSuIban())->setSuBic($payment->getSuBic())->setSuHolder($payment->getSuHolder()); return $orderPayment; }