I would like on the event sales_order_place_before
to make some custom verification and to cancel the placing of the order.
What i have tried:
public function saleOrderPlaceBefore(Varien_Event_Observer $observer){
if(!VerificationSuccess()){
RemoveProduct();
Mage::throwException(Mage::helper('sales')->__('Product has expired.'));
//how to redirect after error?
}
}
The problem with this approach is that the product is removed from the cart, but the error is shown as an alert box and i would like to redirect the user to some custom page.
After this, i tried directly to redirect to a custom page with something like:
public function saleOrderPlaceBefore(Varien_Event_Observer $observer){
if(!VerificationSuccess()){
RemoveProduct();
$session = Mage::getSingleton('checkout/session');
$session->addError(Mage::helper('checkout')->__("Product expired!"));
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('product-error'));
Mage::app()->getResponse()->sendResponse();
exit;
}
}
Using this code, i receive the error:
User Error: Some transactions have not been committed or rolled back in PathToMagento\lib\Varien\Db\Adapter\Pdo\Mysql.php on line 4039
Any ideas on how to manage to cancel the placing of the order, remove the expired product and redirect from this observer(i can use other events also) to a custom page?