cancel
Showing results for 
Search instead for 
Did you mean: 

Customizing magento onepage checkout is not working

   Did you know you can see the translated content as per your choice?

Translation is in progress. Please check again after few minutes.

Customizing magento onepage checkout is not working

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.