Guys, can any of you point out how we can "complete" an Order programmatically? Basically, create both the order's invoice and shipment.
I found this code, I would like to know instead if this is the correct way of completing an order:
$order = $this->getOm()->create('Magento\Sales\Model\Order')->load($order_id); if ($order->getId()) { $order->setStatus('complete')->save(); }
Its based on the order cancellation code below:
$order = $this->getOm()->create('Magento\Sales\Model\Order')->load($order_id); if ($order->getId()) { $order->cancel()->save(); }
I am not quite sure how or what the process is to complete an Order. I also need to add a comment onto the Invoice as well as the shipment for the said order.
How does \Magento\Sales\Model\ResourceModel\Order\Handler\State::check() work? https://mage2.pro/t/1409
Hello rayzorMamon,
According to your example, you want your answer for Magento 1.9.x.
Here is example check it out and let me know if there is any issue.
$order = Mage::getModel('sales/order')->load($orderId); $totalpaid = $order->getGrandTotal(); $order->setTotalDue(0); $orders = Mage::getModel('sales/order_invoice')->getCollection() ->addAttributeToFilter('order_id', array('eq'=>$order->getId())); $orders->getSelect()->limit(1); if ((int)$orders->count() !== 0) { return $this; } if ($order->getState() == Mage_Sales_Model_Order::STATE_NEW || $order->getState() == Mage_Sales_Model_Order::STATE_PROCESSING) { try { if(!$order->canInvoice()) { $order->addStatusHistoryComment('Order cannot be invoiced.', false); $order->save(); } //START Handle Invoice $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice(); $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE); $invoice->register(); $invoice->getOrder()->setCustomerNoteNotify(false); $invoice->getOrder()->setIsInProcess(true); $order->addStatusHistoryComment('Automatically INVOICED by Automation tool.', false); $transactionSave = Mage::getModel('core/resource_transaction') ->addObject($invoice) ->addObject($invoice->getOrder()); $transactionSave->save(); //END Handle Invoice //START Handle Shipment $shipment = $order->prepareShipment(); $shipment->register(); $order->setIsInProcess(true); $order->addStatusHistoryComment('Automatically SHIPPED by Automation tool.', false); $transactionSave = Mage::getModel('core/resource_transaction') ->addObject($shipment) ->addObject($shipment->getOrder()) ->save(); //END Handle Shipment } catch (Exception $e) { $order->addStatusHistoryComment('Exception occurred during automaticallyInvoiceShipCompleteOrder action. Exception message: '.$e->getMessage(), false); $order->save(); }
Manish Kumar