Hi,
I have been using Magento for my online store for more than 4 years without any problems. My current version is 1.9.2.2 and in the past, my orders would automatically generate an invoice after payment.
I have now discovered that that is no longer the case. I can confirm that nothing has been edited and no settings have been changed but I now have to covert each order to an invoice. How do I get that functionality back?
Solved! Go to Solution.
Hello @izette_groenewald1 ,
We don't know about your implemented functionality, For generate invoice, Please create a small module for it. I hope that you have experienced to create a module in Magento 1
Step1: Insert below event to your config.xml
<events> <sales_order_place_after> <observers> <yourmodule_autoinvoice> <class>yourmodule_autoinvoice/observer</class> <method>autoInvoice</method> </yourmodule_autoinvoice> </observers> </sales_order_place_after> </events>
then in observer event function use the logic to generate invoice and update order status.
class Yourmodule_Autoinvoice_Model_Observer { public function autoInvoice($observer) { // loading placed order using observer. $order = $observer->getEvent()->getOrder(); $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; } try { // checking the order can invoice or not. if(!$order->canInvoice()) { $order->addStatusHistoryComment('AutoInvoice: Order cannot be invoiced.', false); $order->save(); } else { $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice(); // below capture method depends on your payment method. // here I used CAPTURE_OFFLINE method. $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE); $invoice->register(); $transactionSave = Mage::getModel('core/resource_transaction') ->addObject($invoice) ->addObject($invoice->getOrder()); $transactionSave->save(); // Now its setting the status to processing. // for virtual products this might not required. // please test only with invoice generate code. $invoice->getOrder()->setIsInProcess(true); $order->addStatusHistoryComment(Mage::helper('yourmodule')->__('Auto Invoice generated.'), Mage_Sales_Model_Order::STATE_PROCESSING)->setIsCustomerNotified(true); $invoice->sendEmail(true, ''); $order->save(); } } catch (Exception $e) { $order->addStatusHistoryComment('AutoInvoice: Exception occurred during autoInvoice action. Exception message: '.$e->getMessage(), false); $order->save(); } return $this; } }
--
If my answer is useful, please Accept as Solution & give Kudos
Hello @izette_groenewald1 ,
We don't know about your implemented functionality, For generate invoice, Please create a small module for it. I hope that you have experienced to create a module in Magento 1
Step1: Insert below event to your config.xml
<events> <sales_order_place_after> <observers> <yourmodule_autoinvoice> <class>yourmodule_autoinvoice/observer</class> <method>autoInvoice</method> </yourmodule_autoinvoice> </observers> </sales_order_place_after> </events>
then in observer event function use the logic to generate invoice and update order status.
class Yourmodule_Autoinvoice_Model_Observer { public function autoInvoice($observer) { // loading placed order using observer. $order = $observer->getEvent()->getOrder(); $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; } try { // checking the order can invoice or not. if(!$order->canInvoice()) { $order->addStatusHistoryComment('AutoInvoice: Order cannot be invoiced.', false); $order->save(); } else { $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice(); // below capture method depends on your payment method. // here I used CAPTURE_OFFLINE method. $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE); $invoice->register(); $transactionSave = Mage::getModel('core/resource_transaction') ->addObject($invoice) ->addObject($invoice->getOrder()); $transactionSave->save(); // Now its setting the status to processing. // for virtual products this might not required. // please test only with invoice generate code. $invoice->getOrder()->setIsInProcess(true); $order->addStatusHistoryComment(Mage::helper('yourmodule')->__('Auto Invoice generated.'), Mage_Sales_Model_Order::STATE_PROCESSING)->setIsCustomerNotified(true); $invoice->sendEmail(true, ''); $order->save(); } } catch (Exception $e) { $order->addStatusHistoryComment('AutoInvoice: Exception occurred during autoInvoice action. Exception message: '.$e->getMessage(), false); $order->save(); } return $this; } }
--
If my answer is useful, please Accept as Solution & give Kudos