For my Code flow , I am trying to change below files
'login', 'billing', 'shipping', 'shipping_method', 'payment', 'review' -> 'login', 'billing', 'shipping', 'shipping_method', 'review' , 'payment'
I have changed the below things, All the changes has been done by taking a copy to local/**/**method, not directly to magento core files. e.g app/code/local/Mage/Checkout/Block
Mage_Checkout_Block_Onepage_Abstract
protected function _getStepCodes()
{
// return array('login', 'billing', 'shipping', 'shipping_method', 'payment', 'review');
//changes to display order review before payment.
return array('login', 'billing', 'shipping', 'shipping_method', 'review', 'payment');
}Mage_Checkout_OnepageController
public function saveShippingMethodAction()
{
if ($this->_expireAjax()) {
return;
}
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost('shipping_method', '');
$result = $this->getOnepage()->saveShippingMethod($data);
// $result will contain error data if shipping method is empty
if (!$result) {
Mage::dispatchEvent(
'checkout_controller_onepage_save_shipping_method',
array(
'request' => $this->getRequest(),
'quote' => $this->getOnepage()->getQuote()));
$this->getOnepage()->getQuote()->collectTotals();
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
$this->loadLayout('checkout_onepage_review');
$result['goto_section'] = 'review';
$result['update_section'] = array(
'name' => 'review',
'html' => $this->_getReviewHtml()
);
//commented for process change
// $result['goto_section'] = 'payment';
// $result['update_section'] = array(
// 'name' => 'payment-method',
// 'html' => $this->_getPaymentMethodsHtml()
// );
}
$this->getOnepage()->getQuote()->collectTotals()->save();
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
}
public function savePaymentAction()
{
if ($this->_expireAjax()) {
return;
}
try {
if (!$this->getRequest()->isPost()) {
$this->_ajaxRedirectResponse();
return;
}
$data = $this->getRequest()->getPost('payment', array());
$result = $this->getOnepage()->savePayment($data);
// get section and redirect data
$redirectUrl = $this->getOnepage()->getQuote()->getPayment()->getCheckoutRedirectUrl();
if (empty($result['error']) && !$redirectUrl) {
//commeted for process change
// $this->loadLayout('checkout_onepage_review');
// $result['goto_section'] = 'review';
// $result['update_section'] = array(
// 'name' => 'review',
// 'html' => $this->_getReviewHtml()
// );
}
if ($redirectUrl) {
$result['redirect'] = $redirectUrl;
}
} catch (Mage_Payment_Exception $e) {
if ($e->getFields()) {
$result['fields'] = $e->getFields();
}
$result['error'] = $e->getMessage();
} catch (Mage_Core_Exception $e) {
$result['error'] = $e->getMessage();
} catch (Exception $e) {
Mage::logException($e);
$result['error'] = $this->__('Unable to set Payment Method.');
}
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}skin/frontend/theme/default/js/opcheckout.js
Checkout.prototype = {
initialize: function(accordion, urls){
this.accordion = accordion;
this.progressUrl = urls.progress;
this.reviewUrl = urls.review;
this.saveMethodUrl = urls.saveMethod;
this.failureUrl = urls.failure;
this.billingForm = false;
this.shippingForm= false;
this.syncBillingShipping = false;
this.method = '';
this.payment = '';
this.loadWaiting = false;
//this.steps = ['login', 'billing', 'shipping', 'shipping_method', 'payment', 'review'];
//changes to change steps in checkout process
this.steps = ['login', 'billing', 'shipping', 'shipping_method', 'review', 'payment'];
//We use billing as beginning step since progress bar tracks from billing
this.currentStep = 'billing';
this.accordion.sections.each(function(section) {
Event.observe($(section).down('.step-title'), 'click', this._onSectionClick.bindAsEventListener(this));
}.bind(this));
this.accordion.disallowAccessToNextSections = true;
}
setShippingMethod: function() {
//this.nextStep();
//removed for process change
// this.gotoSection('payment', true);
//this.accordion.openNextSection(true);
//added for process change
this.gotoSection('review', true);
alert("method invoked");
},
setPayment: function() {
//this.nextStep();
//removed for process change
// this.gotoSection('review', true);
//this.accordion.openNextSection(true);
//added for process change
this.reloadProgressBlock();
},
setReview: function() {
//removed for process change
//this.reloadProgressBlock();
//addded for process change
this.gotoSection('payment', true);
//this.nextStep();
//this.accordion.openNextSection(true);
},Not sure what us wrong or what I am missing, the steps are displayed in peroper order as expected by after shipping method, the next button takes to payment instead of review.
any help would be appreciated.