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