PI_Selectstore - Version 0.1.2

Version Notes

This is a stable version.

Download this release

Release Info

Developer pureimagination
Extension PI_Selectstore
Version 0.1.2
Comparing to
See all releases


Version 0.1.2

Files changed (42) hide show
  1. app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore.php +15 -0
  2. app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore/Edit.php +46 -0
  3. app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore/Edit/Form.php +19 -0
  4. app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore/Edit/Tab/Store.php +35 -0
  5. app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore/Edit/Tabs.php +24 -0
  6. app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore/Grid.php +74 -0
  7. app/code/local/PI/Stepincheckout/Block/Checkout/Onepage.php +21 -0
  8. app/code/local/PI/Stepincheckout/Block/Checkout/Onepage/Selectstore.php +12 -0
  9. app/code/local/PI/Stepincheckout/Block/Sales/Order/Total.php +69 -0
  10. app/code/local/PI/Stepincheckout/Helper/Data.php +4 -0
  11. app/code/local/PI/Stepincheckout/Model/Checkout/Type/Onepage.php +19 -0
  12. app/code/local/PI/Stepincheckout/Model/Observer.php +12 -0
  13. app/code/local/PI/Stepincheckout/Model/Resource/Selectstore.php +9 -0
  14. app/code/local/PI/Stepincheckout/Model/Resource/Selectstore/Collection.php +10 -0
  15. app/code/local/PI/Stepincheckout/Model/Sales/Order/Pdf/Selectedstore.php +28 -0
  16. app/code/local/PI/Stepincheckout/Model/Sales/Order/Total/Creditmemo/Price.php +20 -0
  17. app/code/local/PI/Stepincheckout/Model/Sales/Order/Total/Invoice/Price.php +21 -0
  18. app/code/local/PI/Stepincheckout/Model/Sales/Quote/Address/Total/Price.php +49 -0
  19. app/code/local/PI/Stepincheckout/Model/Selectstore.php +8 -0
  20. app/code/local/PI/Stepincheckout/controllers/Adminhtml/SitestoreController.php +121 -0
  21. app/code/local/PI/Stepincheckout/controllers/Checkout/OnepageController.php +36 -0
  22. app/code/local/PI/Stepincheckout/controllers/IndexController.php +34 -0
  23. app/code/local/PI/Stepincheckout/etc/adminhtml.xml +35 -0
  24. app/code/local/PI/Stepincheckout/etc/config.xml +168 -0
  25. app/code/local/PI/Stepincheckout/sql/stepincheckout_setup/mysql4-install-0.1.0.php +40 -0
  26. app/code/local/PI/Stepincheckout/sql/stepincheckout_setup/upgrade-0.1.0-0.1.1.php +10 -0
  27. app/code/local/PI/Stepincheckout/sql/stepincheckout_setup/upgrade-0.1.1-0.1.2.php +12 -0
  28. app/design/adminhtml/default/default/layout/stepincheckout.xml +71 -0
  29. app/design/adminhtml/default/default/template/stepincheckout/sales/order/invoice/create/form.phtml +148 -0
  30. app/design/adminhtml/default/default/template/stepincheckout/sales/order/invoice/view/form.phtml +120 -0
  31. app/design/adminhtml/default/default/template/stepincheckout/sales/order/refunded.phtml +14 -0
  32. app/design/adminhtml/default/default/template/stepincheckout/sales/order/total.phtml +14 -0
  33. app/design/adminhtml/default/default/template/stepincheckout/sales/order/view/tab/info.phtml +163 -0
  34. app/design/frontend/base/default/layout/stepincheckout.xml +90 -0
  35. app/design/frontend/base/default/template/stepincheckout/checkout/onepage.phtml +61 -0
  36. app/design/frontend/base/default/template/stepincheckout/checkout/onepage/progress.phtml +65 -0
  37. app/design/frontend/base/default/template/stepincheckout/checkout/onepage/progress/select_store.phtml +55 -0
  38. app/design/frontend/base/default/template/stepincheckout/checkout/onepage/selectstore.phtml +44 -0
  39. app/etc/modules/PI_Stepincheckout.xml +9 -0
  40. package.xml +20 -0
  41. skin/frontend/base/default/js/stepincheckout/opcheckout.js +929 -0
  42. skin/frontend/base/default/js/stepincheckout/store.js +76 -0
app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PI_Stepincheckout_Block_Adminhtml_Selectstore extends Mage_Adminhtml_Block_Widget_Grid_Container {
4
+
5
+ public function __construct() {
6
+
7
+ $this->_controller = 'adminhtml_selectstore';
8
+ $this->_blockGroup = 'stepincheckout';
9
+ $this->_headerText = Mage::helper('stepincheckout')->__('Manage Store');
10
+ $this->_addButtonLabel = Mage::helper('stepincheckout')->__('Add New Store');
11
+
12
+ parent::__construct();
13
+ }
14
+
15
+ }
app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore/Edit.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PI_Stepincheckout_Block_Adminhtml_Selectstore_Edit extends Mage_Adminhtml_Block_Widget_Form_Container {
4
+
5
+ public function __construct() {
6
+ parent::__construct();
7
+
8
+ $this->_objectId = 'id';
9
+ $this->_blockGroup = 'stepincheckout';
10
+ $this->_controller = 'adminhtml_selectstore';
11
+
12
+ $this->_updateButton('delete', 'label', Mage::helper('stepincheckout')->__('Delete'));
13
+
14
+
15
+
16
+ $this->_addButton('saveandcontinue', array(
17
+ 'label' => Mage::helper('adminhtml')->__('Save And Continue Edit'),
18
+ 'onclick' => 'saveAndContinueEdit()',
19
+ 'class' => 'save',
20
+ ), -100);
21
+
22
+ $this->_formScripts[] = "
23
+ function toggleEditor() {
24
+ if (tinyMCE.getInstanceById('edge_content') == null) {
25
+ tinyMCE.execCommand('mceAddControl', false, 'edge_content');
26
+ } else {
27
+ tinyMCE.execCommand('mceRemoveControl', false, 'edge_content');
28
+ }
29
+ }
30
+
31
+ function saveAndContinueEdit(){
32
+ editForm.submit($('edit_form').action+'back/edit/');
33
+
34
+ }
35
+ ";
36
+ }
37
+
38
+ public function getHeaderText() {
39
+ if (Mage::registry('selectstore_data') && Mage::registry('selectstore_data')->getId()) {
40
+ return Mage::helper('stepincheckout')->__("Edit Store '%s'", $this->htmlEscape(Mage::registry('selectstore_data')->getName()));
41
+ } else {
42
+ return Mage::helper('stepincheckout')->__('Add Store');
43
+ }
44
+ }
45
+
46
+ }
app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore/Edit/Form.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PI_Stepincheckout_Block_Adminhtml_Selectstore_Edit_Form extends Mage_Adminhtml_Block_Widget_Form {
4
+
5
+ protected function _prepareForm() {
6
+ $form = new Varien_Data_Form(array(
7
+ 'id' => 'edit_form',
8
+ 'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
9
+ 'method' => 'post',
10
+ 'enctype' => 'multipart/form-data'
11
+ )
12
+ );
13
+
14
+ $form->setUseContainer(true);
15
+ $this->setForm($form);
16
+ return parent::_prepareForm();
17
+ }
18
+
19
+ }
app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore/Edit/Tab/Store.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PI_Stepincheckout_Block_Adminhtml_Selectstore_Edit_Tab_Store extends Mage_Adminhtml_Block_Widget_Form {
4
+
5
+ protected function _prepareForm() {
6
+ $form = new Varien_Data_Form();
7
+ $this->setForm($form);
8
+ $fieldset = $form->addFieldset('selectstore_form', array('legend' => Mage::helper('stepincheckout')->__('Store Details')));
9
+
10
+ $fieldset->addField('name', 'text', array(
11
+ 'label' => Mage::helper('stepincheckout')->__('Store Name'),
12
+ 'class' => 'required-entry',
13
+ 'required' => true,
14
+ 'name' => 'name',
15
+ ));
16
+
17
+ $fieldset->addField('price', 'text', array(
18
+ 'label' => Mage::helper('stepincheckout')->__('Price'),
19
+ 'class' => 'required-entry',
20
+ 'required' => true,
21
+ 'name' => 'price',
22
+ ));
23
+
24
+
25
+
26
+ if (Mage::getSingleton('adminhtml/session')->getSelectstoreData()) {
27
+ $form->setValues(Mage::getSingleton('adminhtml/session')->getSelectstoreData());
28
+ Mage::getSingleton('adminhtml/session')->setDriverData(null);
29
+ } elseif (Mage::registry('selectstore_data')) {
30
+ $form->setValues(Mage::registry('selectstore_data')->getData());
31
+ }
32
+ return parent::_prepareForm();
33
+ }
34
+
35
+ }
app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore/Edit/Tabs.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PI_Stepincheckout_Block_Adminhtml_Selectstore_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
4
+ {
5
+
6
+ public function __construct()
7
+ {
8
+ parent::__construct();
9
+ $this->setId('selectstore_tabs');
10
+ $this->setDestElementId('edit_form');
11
+ $this->setTitle(Mage::helper('stepincheckout')->__('Store Informations'));
12
+ }
13
+
14
+ protected function _beforeToHtml()
15
+ {
16
+ $this->addTab('form_section', array(
17
+ 'label' => Mage::helper('stepincheckout')->__('Store Informations'),
18
+ 'title' => Mage::helper('stepincheckout')->__('Store Informations'),
19
+ 'content' => $this->getLayout()->createBlock('stepincheckout/adminhtml_selectstore_edit_tab_store')->toHtml(),
20
+ ));
21
+
22
+ return parent::_beforeToHtml();
23
+ }
24
+ }
app/code/local/PI/Stepincheckout/Block/Adminhtml/Selectstore/Grid.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PI_Stepincheckout_Block_Adminhtml_Selectstore_Grid extends Mage_Adminhtml_Block_Widget_Grid {
4
+
5
+ public function __construct() {
6
+ parent::__construct();
7
+ $this->setId('storeGrid');
8
+ $this->setDefaultSort('store_id');// sorting according to which colunm name
9
+ }
10
+
11
+ protected function _prepareCollection() {
12
+
13
+ $collection = Mage::getModel('stepincheckout/selectstore')->getCollection();
14
+ $this->setCollection($collection);
15
+
16
+
17
+ return parent::_prepareCollection();
18
+ }
19
+
20
+ protected function _prepareColumns() {
21
+ $this->addColumn('store_id', array(
22
+ 'header' => Mage::helper('stepincheckout')->__('ID'),
23
+ 'width' => '25%',
24
+ 'index' => 'store_id',
25
+ ));
26
+
27
+ $this->addColumn('name', array(
28
+ 'header' => Mage::helper('stepincheckout')->__('Store Name'),
29
+ 'width' => '25%',
30
+ 'index' => 'name',
31
+ ));
32
+
33
+
34
+ $this->addColumn('action', array(
35
+ 'header' => Mage::helper('stepincheckout')->__('Action'),
36
+ 'width' => '100',
37
+ 'type' => 'action',
38
+ 'getter' => 'getId',
39
+ 'actions' => array(
40
+ array(
41
+ 'caption' => Mage::helper('stepincheckout')->__('Edit'),
42
+ 'url' => array('base' => '*/*/edit'),
43
+ 'field' => 'id'
44
+ )
45
+ ),
46
+ 'filter' => false,
47
+ 'sortable' => false,
48
+ 'index' => 'stores',
49
+ 'is_system' => true,
50
+ ));
51
+
52
+ return parent::_prepareColumns();
53
+ }
54
+
55
+ protected function _prepareMassaction() {
56
+
57
+ $this->setMassactionIdField('store_id');
58
+ $this->getMassactionBlock()->setFormFieldName('store_id');
59
+
60
+ $this->getMassactionBlock()->addItem('delete', array(
61
+ 'label' => Mage::helper('stepincheckout')->__('Delete'),
62
+ 'url' => $this->getUrl('*/*/massDelete'),
63
+ 'confirm' => Mage::helper('stepincheckout')->__('Are you sure?')
64
+ ));
65
+
66
+ return $this;
67
+ }
68
+
69
+ public function getRowUrl($row) {
70
+ return $this->getUrl('*/*/edit', array('id' => $row->getId()));
71
+ }
72
+
73
+ }
74
+
app/code/local/PI/Stepincheckout/Block/Checkout/Onepage.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PI_Stepincheckout_Block_Checkout_Onepage extends Mage_Checkout_Block_Onepage{
3
+
4
+ public function getSteps()
5
+ {
6
+ $steps = array();
7
+
8
+ if (!$this->isCustomerLoggedIn()) {
9
+ $steps['login'] = $this->getCheckout()->getStepData('login');
10
+ }
11
+
12
+ //New Code Adding step excellence here
13
+ $stepCodes = array('billing', 'shipping', 'shipping_method','select_store', 'payment', 'review');
14
+
15
+ foreach ($stepCodes as $step) {
16
+ $steps[$step] = $this->getCheckout()->getStepData($step);
17
+ }
18
+ return $steps;
19
+ }
20
+
21
+ }
app/code/local/PI/Stepincheckout/Block/Checkout/Onepage/Selectstore.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PI_Stepincheckout_Block_Checkout_Onepage_Selectstore extends Mage_Checkout_Block_Onepage_Abstract{
3
+ protected function _construct()
4
+ {
5
+ $this->getCheckout()->setStepData('select_store', array(
6
+ 'label' => Mage::helper('checkout')->__('Select A Store'),
7
+ 'is_show' => $this->isShow()
8
+ ));
9
+
10
+ parent::_construct();
11
+ }
12
+ }
app/code/local/PI/Stepincheckout/Block/Sales/Order/Total.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PI_Stepincheckout_Block_Sales_Order_Total extends Mage_Core_Block_Template
3
+ {
4
+ /**
5
+ * Get label cell tag properties
6
+ *
7
+ * @return string
8
+ */
9
+ public function getLabelProperties()
10
+ {
11
+ return $this->getParentBlock()->getLabelProperties();
12
+ }
13
+
14
+ /**
15
+ * Get order store object
16
+ *
17
+ * @return Mage_Sales_Model_Order
18
+ */
19
+ public function getOrder()
20
+ {
21
+ return $this->getParentBlock()->getOrder();
22
+ }
23
+
24
+ /**
25
+ * Get totals source object
26
+ *
27
+ * @return Mage_Sales_Model_Order
28
+ */
29
+ public function getSource()
30
+ {
31
+ return $this->getParentBlock()->getSource();
32
+ }
33
+
34
+ /**
35
+ * Get value cell tag properties
36
+ *
37
+ * @return string
38
+ */
39
+ public function getValueProperties()
40
+ {
41
+ return $this->getParentBlock()->getValueProperties();
42
+ }
43
+
44
+ /**
45
+ * Initialize reward points totals
46
+ *
47
+ * @return Enterprise_Reward_Block_Sales_Order_Total
48
+ */
49
+ public function initTotals()
50
+ {
51
+ if ((float) $this->getOrder()->getSelectedStore()) {
52
+ $source = $this->getSource();
53
+
54
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($source->getSelectedStore());
55
+
56
+ $value = $storeDetail->getPrice();
57
+
58
+
59
+ $this->getParentBlock()->addTotal(new Varien_Object(array(
60
+ 'code' => 'selected_store',
61
+ 'strong' => false,
62
+ 'label' => Mage::helper('stepincheckout')->__('Selected Store'),
63
+ 'value' => $value
64
+ )));
65
+ }
66
+
67
+ return $this;
68
+ }
69
+ }
app/code/local/PI/Stepincheckout/Helper/Data.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ class PI_Stepincheckout_Helper_Data extends Mage_Core_Helper_Abstract{
3
+
4
+ }
app/code/local/PI/Stepincheckout/Model/Checkout/Type/Onepage.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PI_Stepincheckout_Model_Checkout_Type_Onepage extends Mage_Checkout_Model_Type_Onepage{
3
+
4
+ public function saveSelectedStore($data){
5
+ if (empty($data)) {
6
+ return array('error' => -1, 'message' => $this->_helper->__('Invalid data.'));
7
+ }
8
+ $this->getQuote()->setSelectedStore($data['selected_store']);
9
+ $this->getQuote()->collectTotals();
10
+ $this->getQuote()->save();
11
+
12
+ $this->getCheckout()
13
+ ->setStepData('select_store', 'allow', true)
14
+ ->setStepData('select_store', 'complete', true)
15
+ ->setStepData('payment', 'allow', true);
16
+
17
+ return array();
18
+ }
19
+ }
app/code/local/PI/Stepincheckout/Model/Observer.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class PI_Stepincheckout_Model_Observer {
5
+ /**
6
+ * Code for "select_store"
7
+ **/
8
+ public function convertSelectedStore($observer)
9
+ {
10
+ return $this;
11
+ }
12
+ }
app/code/local/PI/Stepincheckout/Model/Resource/Selectstore.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PI_Stepincheckout_Model_Resource_Selectstore extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ $this->_init('stepincheckout/store', 'store_id');
8
+ }
9
+ }
app/code/local/PI/Stepincheckout/Model/Resource/Selectstore/Collection.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PI_Stepincheckout_Model_Resource_Selectstore_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('stepincheckout/selectstore');
9
+ }
10
+ }
app/code/local/PI/Stepincheckout/Model/Sales/Order/Pdf/Selectedstore.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PI_Stepincheckout_Model_Sales_Order_Pdf_Selectedstore extends Mage_Sales_Model_Order_Pdf_Total_Default
3
+ {
4
+ public function getTotalsForDisplay()
5
+ {
6
+ // getAmount is defined in the parent class and should read
7
+ // the value from the defined source_field in your config.xml
8
+ $order = $this->getOrder();
9
+ $selectedStore = $order->getSelectedStore();
10
+
11
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($selectedStore);
12
+ $value = $storeDetail->getPrice();
13
+ //if($value>0)
14
+ //{
15
+ $label = Mage::helper('stepincheckout')->__('Selected Store');
16
+ $fontSize = $this->getFontSize() ? $this->getFontSize() : 7;
17
+ $total = array(
18
+ 'amount' => $order->formatPriceTxt($value),
19
+ 'label' => $label,
20
+ 'font_size' => $fontSize
21
+ );
22
+
23
+ //}
24
+
25
+ return array($total);
26
+ }
27
+ }
28
+ ?>
app/code/local/PI/Stepincheckout/Model/Sales/Order/Total/Creditmemo/Price.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PI_Stepincheckout_Model_Sales_Order_Total_Creditmemo_Price extends Mage_Sales_Model_Order_Creditmemo_Total_Abstract
3
+ {
4
+ public function collect(Mage_Sales_Model_Order_Creditmemo $creditmemo)
5
+ {
6
+ $order = $creditmemo->getOrder();
7
+
8
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($order->getSelectedStore());
9
+
10
+ $value = $storeDetail->getPrice();
11
+
12
+ if ($value > 0) {
13
+ $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $value);
14
+ $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $value);
15
+ $creditmemo->setSelectedStore($order->getSelectedStore());
16
+ //$creditmemo->setBaseFeeAmount($basefeeAmountLeft);
17
+ }
18
+ return $this;
19
+ }
20
+ }
app/code/local/PI/Stepincheckout/Model/Sales/Order/Total/Invoice/Price.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PI_Stepincheckout_Model_Sales_Order_Total_Invoice_Price extends Mage_Sales_Model_Order_Invoice_Total_Abstract
3
+ {
4
+ public function collect(Mage_Sales_Model_Order_Invoice $invoice)
5
+ {
6
+ $order = $invoice->getOrder();
7
+
8
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($order->getSelectedStore());
9
+
10
+ $value = $storeDetail->getPrice();
11
+
12
+ if ($value>0) {
13
+ $invoice->setGrandTotal($invoice->getGrandTotal() + $value);
14
+ $invoice->setBaseGrandTotal($invoice->getBaseGrandTotal() + $value);
15
+ }
16
+
17
+ $invoice->setSelectedStore($order->getSelectedStore());
18
+ //$invoice->setSelectedStore($order->getSelectedStore());
19
+ return $this;
20
+ }
21
+ }
app/code/local/PI/Stepincheckout/Model/Sales/Quote/Address/Total/Price.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class PI_Stepincheckout_Model_Sales_Quote_Address_Total_Price extends Mage_Sales_Model_Quote_Address_Total_Abstract{
3
+ protected $_code = 'selected_store';
4
+
5
+ public function collect(Mage_Sales_Model_Quote_Address $address)
6
+ {
7
+ parent::collect($address);
8
+
9
+ $this->_setAmount(0);
10
+ $this->_setBaseAmount(0);
11
+
12
+ $items = $this->_getAddressItems($address);
13
+ if (!count($items)) {
14
+ return $this; //this makes only address type shipping to come through
15
+ }
16
+
17
+
18
+ $quote = $address->getQuote();
19
+
20
+ if($quote->getSelectedStore()!=''){
21
+
22
+
23
+ $selectedStore = $quote->getSelectedStore();
24
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($selectedStore);
25
+
26
+
27
+ $address->setGrandTotal($address->getGrandTotal() + $storeDetail->getPrice());
28
+ $address->setBaseGrandTotal($address->getBaseGrandTotal() + $storeDetail->getPrice());
29
+ }
30
+ }
31
+
32
+ public function fetch(Mage_Sales_Model_Quote_Address $address)
33
+ {
34
+ $quote = $address->getQuote();
35
+ if($quote->getSelectedStore()!=''){
36
+
37
+ $selectedStore = $quote->getSelectedStore();
38
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($selectedStore);
39
+
40
+ $amt = $storeDetail->getPrice()/2;
41
+ $address->addTotal(array(
42
+ 'code'=> $this->getCode(),
43
+ 'title'=> $storeDetail->getName(),
44
+ 'value'=> $amt
45
+ ));
46
+ }
47
+ return $this;
48
+ }
49
+ }
app/code/local/PI/Stepincheckout/Model/Selectstore.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PI_Stepincheckout_Model_Selectstore extends Mage_Core_Model_Abstract {
4
+ public function _construct() {
5
+ parent::_construct();
6
+ $this->_init('stepincheckout/selectstore');
7
+ }
8
+ }
app/code/local/PI/Stepincheckout/controllers/Adminhtml/SitestoreController.php ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class PI_Stepincheckout_Adminhtml_SitestoreController extends Mage_Adminhtml_Controller_Action {
4
+
5
+ public function indexAction() {
6
+ $this->loadLayout();
7
+
8
+ /** set active menu* */
9
+ $this->_setActiveMenu('pistores/stores');
10
+ $this->_addContent($this->getLayout()->createBlock('stepincheckout/adminhtml_selectstore'));
11
+ $this->renderLayout();
12
+ }
13
+
14
+ public function editAction()
15
+ {
16
+ $id = $this->getRequest()->getParam('id');
17
+ $model = Mage::getModel('stepincheckout/selectstore')->load($id);
18
+
19
+ if ($model->getId() || $id == 0) {
20
+ $data = Mage::getSingleton('adminhtml/session')->getFormData(true);
21
+ if (!empty($data)) {
22
+ $model->setData($data);
23
+ }
24
+
25
+
26
+ Mage::register('selectstore_data', $model);
27
+
28
+ $this->loadLayout();
29
+ $this->_setActiveMenu('ggpfast/store');
30
+
31
+ $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item Manager'), Mage::helper('adminhtml')->__('Item Manager'));
32
+ $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item News'), Mage::helper('adminhtml')->__('Item News'));
33
+
34
+ $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
35
+
36
+ $this->_addContent($this->getLayout()->createBlock('stepincheckout/adminhtml_selectstore_edit'))
37
+ ->_addLeft($this->getLayout()->createBlock('stepincheckout/adminhtml_selectstore_edit_tabs'));
38
+
39
+ $this->renderLayout();
40
+ } else {
41
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('stepincheckout')->__('Store not exist'));
42
+ $this->_redirect('*/*/');
43
+ }
44
+ }
45
+
46
+ public function newAction() {
47
+ $this->_forward('edit');
48
+ }
49
+
50
+ public function saveAction() {
51
+ $id = $this->getRequest()->getParam('id');
52
+ if ($data = $this->getRequest()->getPost()) {
53
+ try {
54
+
55
+ $model = Mage::getModel('stepincheckout/selectstore');
56
+ $model->setData($data)
57
+ ->setId($id);
58
+
59
+ $model->save();
60
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('stepincheckout')->__('Store saved successfully'));
61
+ Mage::getSingleton('adminhtml/session')->setFormData(false);
62
+
63
+ if ($this->getRequest()->getParam('back')) {
64
+ $this->_redirect('*/*/edit', array('id' => $model->getId()));
65
+ return;
66
+ }
67
+ $this->_redirect('*/*/');
68
+ return;
69
+ } catch (Exception $e) {
70
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
71
+ Mage::getSingleton('adminhtml/session')->setFormData($data);
72
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
73
+ return;
74
+ }
75
+
76
+ }
77
+
78
+ $this->_redirect('*/*/');
79
+ }
80
+
81
+ public function deleteAction() {
82
+ if ($this->getRequest()->getParam('id') > 0) {
83
+ try {
84
+ $model = Mage::getModel('stepincheckout/selectstore');
85
+
86
+ $model->setId($this->getRequest()->getParam('id'))
87
+ ->delete();
88
+
89
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Store successfully deleted'));
90
+ $this->_redirect('*/*/');
91
+ } catch (Exception $e) {
92
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
93
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
94
+ }
95
+ }
96
+ $this->_redirect('*/*/');
97
+ }
98
+
99
+ public function massDeleteAction() {
100
+ $storeIds = $this->getRequest()->getParam('store_id');
101
+ if (!is_array($storeIds)) {
102
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Please select Store(s)'));
103
+ } else {
104
+ try {
105
+ foreach ($storeIds as $storeId) {
106
+ $store = Mage::getModel('stepincheckout/selectstore')->load($storeId);
107
+ $store->delete();
108
+ }
109
+ Mage::getSingleton('adminhtml/session')->addSuccess(
110
+ Mage::helper('adminhtml')->__(
111
+ 'Total of %d record(s) is successfully deleted', count($storeIds)
112
+ )
113
+ );
114
+ } catch (Exception $e) {
115
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
116
+ }
117
+ }
118
+ $this->_redirect('*/*/index');
119
+ }
120
+
121
+ }
app/code/local/PI/Stepincheckout/controllers/Checkout/OnepageController.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once ('Mage/Checkout/controllers/OnepageController.php');
4
+
5
+ class PI_Stepincheckout_Checkout_OnepageController extends Mage_Checkout_OnepageController {
6
+
7
+
8
+
9
+ /**
10
+ * Shipping method save action
11
+ */
12
+ public function saveShippingMethodAction() {
13
+ if ($this->_expireAjax()) {
14
+ return;
15
+ }
16
+ if ($this->getRequest()->isPost()) {
17
+ $data = $this->getRequest()->getPost('shipping_method', '');
18
+ $result = $this->getOnepage()->saveShippingMethod($data);
19
+ // $result will contain error data if shipping method is empty
20
+ if (!$result) {
21
+ Mage::dispatchEvent(
22
+ 'checkout_controller_onepage_save_shipping_method', array(
23
+ 'request' => $this->getRequest(),
24
+ 'quote' => $this->getOnepage()->getQuote()));
25
+ $this->getOnepage()->getQuote()->collectTotals();
26
+ $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
27
+
28
+ $result['goto_section'] = 'select_store'; //add new code for new step store
29
+
30
+ }
31
+ $this->getOnepage()->getQuote()->collectTotals()->save();
32
+ $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
33
+ }
34
+ }
35
+
36
+ }
app/code/local/PI/Stepincheckout/controllers/IndexController.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once ('Mage/Checkout/controllers/OnepageController.php');
4
+
5
+ class PI_Stepincheckout_IndexController extends Mage_Checkout_OnepageController
6
+ {
7
+ public function indexAction()
8
+ {
9
+ //echo 1;
10
+ }
11
+
12
+ public function saveStoreAction()
13
+ {
14
+ if ($this->_expireAjax()) {
15
+ return;
16
+ }
17
+ if ($this->getRequest()->isPost()) {
18
+ $data = $this->getRequest()->getPost();
19
+
20
+ $result = $this->getOnepage()->saveSelectedStore($data);
21
+
22
+ if (!isset($result['error'])) {
23
+ $result['goto_section'] = 'payment';
24
+ $result['update_section'] = array(
25
+ 'name' => 'payment-method',
26
+ 'html' => $this->_getPaymentMethodsHtml()
27
+ );
28
+ }
29
+
30
+
31
+ $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
32
+ }
33
+ }
34
+ }
app/code/local/PI/Stepincheckout/etc/adminhtml.xml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <menu>
5
+ <pistores translate="title">
6
+ <title>Manage stores</title>
7
+ <sort_order>77</sort_order>
8
+ <children>
9
+ <stores translate="title">
10
+ <title>stores</title>
11
+ <sort_order>6</sort_order>
12
+ <action>adminhtml/sitestore</action>
13
+ <!--on click i.e on action our controller inside the adminhtml will call.-->
14
+ </stores>
15
+ </children>
16
+ </pistores>
17
+ </menu>
18
+ <acl>
19
+ <resources>
20
+ <admin>
21
+ <children>
22
+ <pistores translate="title" module="stepincheckout">
23
+ <title>Manage stores</title>
24
+ <sort_order>76</sort_order>
25
+ <children>
26
+ <stores translate="title" module="stepincheckout">
27
+ <title>stores</title>
28
+ </stores>
29
+ </children>
30
+ </pistores>
31
+ </children>
32
+ </admin>
33
+ </resources>
34
+ </acl>
35
+ </config>
app/code/local/PI/Stepincheckout/etc/config.xml ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <modules>
3
+ <PI_Stepincheckout>
4
+ <version>0.1.2</version>
5
+ </PI_Stepincheckout>
6
+ </modules>
7
+ <admin>
8
+ <routers>
9
+ <adminhtml>
10
+ <args>
11
+ <modules>
12
+ <PI_Stepincheckout before="Mage_Adminhtml">PI_Stepincheckout_Adminhtml</PI_Stepincheckout>
13
+ </modules>
14
+ </args>
15
+ </adminhtml>
16
+ </routers>
17
+ </admin>
18
+ <frontend>
19
+ <routers>
20
+ <stepincheckout>
21
+ <use>standard</use>
22
+ <args>
23
+ <module>PI_Stepincheckout</module>
24
+ <frontName>stepincheckout</frontName>
25
+ </args>
26
+ </stepincheckout>
27
+ <checkout>
28
+ <args>
29
+ <modules>
30
+ <PI_Stepincheckout before="Mage_Checkout">PI_Stepincheckout_Checkout</PI_Stepincheckout>
31
+ </modules>
32
+ </args>
33
+ </checkout>
34
+ </routers>
35
+ <layout>
36
+ <updates>
37
+ <stepincheckout>
38
+ <file>stepincheckout.xml</file>
39
+ </stepincheckout>
40
+ </updates>
41
+ </layout>
42
+ <events>
43
+ <sales_convert_quote_to_order>
44
+ <observers>
45
+ <convertSelectedStore_observer>
46
+ <type>singleton</type>
47
+ <class>PI_Stepincheckout_Model_Observer</class>
48
+ <method>convertSelectedStore</method>
49
+ </convertSelectedStore_observer>
50
+ </observers>
51
+ </sales_convert_quote_to_order>
52
+ </events>
53
+ </frontend>
54
+ <adminhtml>
55
+ <layout>
56
+ <updates>
57
+ <stepincheckout>
58
+ <file>stepincheckout.xml</file>
59
+ </stepincheckout>
60
+ </updates>
61
+ </layout>
62
+ </adminhtml>
63
+ <global>
64
+ <blocks>
65
+ <stepincheckout>
66
+ <class>PI_Stepincheckout_Block</class>
67
+ </stepincheckout>
68
+ <checkout>
69
+ <rewrite>
70
+ <onepage>PI_Stepincheckout_Block_Checkout_Onepage</onepage>
71
+ </rewrite>
72
+ </checkout>
73
+ </blocks>
74
+ <models>
75
+ <checkout>
76
+ <rewrite>
77
+ <type_onepage>PI_Stepincheckout_Model_Checkout_Type_Onepage</type_onepage>
78
+ </rewrite>
79
+ </checkout>
80
+ <stepincheckout>
81
+ <class>PI_Stepincheckout_Model</class>
82
+ <resourceModel>stepincheckout_resource</resourceModel>
83
+ </stepincheckout>
84
+ <stepincheckout_resource>
85
+ <class>PI_Stepincheckout_Model_Resource</class>
86
+ <entities>
87
+ <store>
88
+ <table>stepincheckout_store</table>
89
+ </store>
90
+ </entities>
91
+ </stepincheckout_resource>
92
+ </models>
93
+ <resources>
94
+ <stepincheckout_setup>
95
+ <setup>
96
+ <module>PI_Stepincheckout</module>
97
+ </setup>
98
+ <connection>
99
+ <use>core_setup</use>
100
+ </connection>
101
+ </stepincheckout_setup>
102
+ </resources>
103
+ <helpers>
104
+ <stepincheckout>
105
+ <class>PI_Stepincheckout_Helper</class>
106
+ </stepincheckout>
107
+ </helpers>
108
+
109
+ <fieldsets>
110
+ <sales_convert_quote>
111
+ <selected_store>
112
+ <to_order>*</to_order>
113
+ </selected_store>
114
+ <select_substitution>
115
+ <to_order>*</to_order>
116
+ </select_substitution>
117
+ </sales_convert_quote>
118
+ <sales_convert_order>
119
+ <selected_store>
120
+ <to_quote>*</to_quote>
121
+ </selected_store>
122
+ <select_substitution>
123
+ <to_quote>*</to_quote>
124
+ </select_substitution>
125
+ </sales_convert_order>
126
+ </fieldsets>
127
+
128
+
129
+ <pdf>
130
+ <totals>
131
+ <selected_store translate="title">
132
+ <title>Selected Store</title>
133
+ <source_field>selected_store</source_field>
134
+ <model>stepincheckout/sales_order_pdf_selectedstore</model>
135
+ <font_size>7</font_size>
136
+ <display_zero>0</display_zero>
137
+ <sort_order>650</sort_order>
138
+ </selected_store>
139
+ </totals>
140
+ </pdf>
141
+
142
+
143
+ <!--Add selected store price in total-->
144
+ <sales>
145
+ <quote>
146
+ <totals>
147
+ <selected_store>
148
+ <class>stepincheckout/sales_quote_address_total_price</class>
149
+ </selected_store>
150
+ </totals>
151
+ </quote>
152
+ <order_invoice>
153
+ <totals>
154
+ <selected_store>
155
+ <class>stepincheckout/sales_order_total_invoice_price</class>
156
+ </selected_store>
157
+ </totals>
158
+ </order_invoice>
159
+ <order_creditmemo>
160
+ <totals>
161
+ <selected_store>
162
+ <class>stepincheckout/sales_order_total_creditmemo_price</class>
163
+ </selected_store>
164
+ </totals>
165
+ </order_creditmemo>
166
+ </sales>
167
+ </global>
168
+ </config>
app/code/local/PI/Stepincheckout/sql/stepincheckout_setup/mysql4-install-0.1.0.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $this->startSetup();
3
+ $table = new Varien_Db_Ddl_Table();
4
+ $table->setName($this->getTable('stepincheckout/store'));
5
+ $table->addColumn(
6
+ 'store_id',
7
+ Varien_Db_Ddl_Table::TYPE_INTEGER,
8
+ 10,
9
+ array(
10
+ 'auto_increment' => true,
11
+ 'unsigned' => true,
12
+ 'nullable'=> false,
13
+ 'primary' => true
14
+ )
15
+ );
16
+
17
+ $table->addColumn(
18
+ 'name',
19
+ Varien_Db_Ddl_Table::TYPE_VARCHAR,
20
+ 255,
21
+ array(
22
+ 'nullable' => false,
23
+ )
24
+ );
25
+
26
+ $table->addColumn(
27
+ 'price',
28
+ Varien_Db_Ddl_Table::TYPE_FLOAT,
29
+ 10,
30
+ array(
31
+ 'nullable' => false,
32
+ )
33
+ );
34
+
35
+
36
+ $table->setOption('type', 'InnoDB');
37
+ $table->setOption('charset', 'utf8');
38
+ $this->getConnection()->createTable($table);
39
+
40
+ $this->endSetup();
app/code/local/PI/Stepincheckout/sql/stepincheckout_setup/upgrade-0.1.0-0.1.1.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $installer = $this;
3
+ $installer->startSetup();
4
+
5
+ //Add Column to sales table
6
+ $this->_conn->addColumn($this->getTable('sales/quote'), 'selected_store', 'float');
7
+
8
+ $this->_conn->addColumn($this->getTable('sales/order'), 'selected_store', 'float');
9
+
10
+ $installer->endSetup();
app/code/local/PI/Stepincheckout/sql/stepincheckout_setup/upgrade-0.1.1-0.1.2.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $installer = $this;
3
+ $installer->startSetup();
4
+
5
+ //Add Column to sales table
6
+ $this->_conn->addColumn($this->getTable('sales/invoice'), 'selected_store', 'float');
7
+
8
+ $this->_conn->addColumn($this->getTable('sales/shipment'), 'selected_store', 'float');
9
+
10
+ $this->_conn->addColumn($this->getTable('sales/creditmemo'), 'selected_store', 'float');
11
+
12
+ $installer->endSetup();
app/design/adminhtml/default/default/layout/stepincheckout.xml ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <adminhtml_sales_order_view>
4
+ <reference name="order_totals">
5
+ <block type="adminhtml/sales_order_totals_item" name="selectedStore" template="stepincheckout/sales/order/total.phtml">
6
+ </block>
7
+ <block type="adminhtml/sales_order_totals_item" name="selectedStore.refunded" template="stepincheckout/sales/order/refunded.phtml">
8
+ <action method="setDisplayArea"><area>footer</area></action>
9
+ <action method="setAfterCondition"><condition>last</condition></action>
10
+ </block>
11
+ </reference>
12
+ <reference name="order_tab_info">
13
+ <action method="setTemplate">
14
+ <template>stepincheckout/sales/order/view/tab/info.phtml</template>
15
+ </action>
16
+ </reference>
17
+ </adminhtml_sales_order_view>
18
+
19
+ <adminhtml_sales_order_invoice_new>
20
+ <reference name="invoice_totals">
21
+ <block type="adminhtml/sales_order_totals_item" name="selectedStore" template="stepincheckout/sales/order/total.phtml">
22
+ </block>
23
+ </reference>
24
+ <reference name="form">
25
+ <action method="setTemplate">
26
+ <template>stepincheckout/sales/order/invoice/create/form.phtml</template>
27
+ </action>
28
+ </reference>
29
+ </adminhtml_sales_order_invoice_new>
30
+
31
+ <adminhtml_sales_order_invoice_updateqty>
32
+ <reference name="invoice_totals">
33
+ <block type="adminhtml/sales_order_totals_item" name="selectedStore" template="stepincheckout/sales/order/total.phtml">
34
+ </block>
35
+ </reference>
36
+ </adminhtml_sales_order_invoice_updateqty>
37
+
38
+ <adminhtml_sales_order_invoice_view>
39
+ <reference name="invoice_totals">
40
+ <block type="adminhtml/sales_order_totals_item" name="selectedStore" template="stepincheckout/sales/order/total.phtml">
41
+ </block>
42
+ </reference>
43
+ <reference name="form">
44
+ <action method="setTemplate">
45
+ <template>stepincheckout/sales/order/invoice/view/form.phtml</template>
46
+ </action>
47
+ </reference>
48
+ </adminhtml_sales_order_invoice_view>
49
+
50
+ <adminhtml_sales_order_creditmemo_new>
51
+ <reference name="creditmemo_totals">
52
+ <block type="adminhtml/sales_order_totals_item" name="selectedStore" template="stepincheckout/sales/order/total.phtml">
53
+ </block>
54
+ </reference>
55
+ </adminhtml_sales_order_creditmemo_new>
56
+
57
+ <adminhtml_sales_order_creditmemo_updateqty>
58
+ <reference name="creditmemo_totals">
59
+ <block type="adminhtml/sales_order_totals_item" name="selectedStore" template="stepincheckout/sales/order/total.phtml">
60
+ </block>
61
+ </reference>
62
+ </adminhtml_sales_order_creditmemo_updateqty>
63
+
64
+ <adminhtml_sales_order_creditmemo_view>
65
+ <reference name="creditmemo_totals">
66
+ <block type="adminhtml/sales_order_totals_item" name="selectedStore.refunded" template="stepincheckout/sales/order/refunded.phtml">
67
+ <action method="setDisplayArea"><area>footer</area></action>
68
+ </block>
69
+ </reference>
70
+ </adminhtml_sales_order_creditmemo_view>
71
+ </layout>
app/design/adminhtml/default/default/template/stepincheckout/sales/order/invoice/create/form.phtml ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magento.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magento.com for more information.
20
+ *
21
+ * @category design
22
+ * @package default_default
23
+ * @copyright Copyright (c) 2006-2014 X.commerce, Inc. (http://www.magento.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <form id="edit_form" method="post" action="<?php echo $this->getSaveUrl() ?>">
28
+ <?php echo $this->getBlockHtml('formkey')?>
29
+ <?php $_order = $this->getInvoice()->getOrder() ?>
30
+ <?php echo $this->getChildHtml('order_info') ?>
31
+ <?php if (!$_order->getIsVirtual()): ?>
32
+ <div class="box-left">
33
+ <?php else: ?>
34
+ <div class="box-right">
35
+ <?php endif; ?>
36
+
37
+ <div class="entry-edit">
38
+ <div class="entry-edit-head">
39
+ <h4 class="icon-head head-payment-method"><?php echo Mage::helper('sales')->__('Payment Information') ?></h4>
40
+ </div>
41
+ <fieldset>
42
+ <div><?php echo $this->getChildHtml('order_payment') ?></div>
43
+ <div><?php echo Mage::helper('sales')->__('Order was placed using %s', $_order->getOrderCurrencyCode()) ?></div>
44
+ </fieldset>
45
+ </div>
46
+ </div>
47
+ <?php if (!$_order->getIsVirtual()): ?>
48
+ <div class="box-right">
49
+ <!--Shipping Address-->
50
+ <div class="entry-edit">
51
+ <div class="entry-edit-head">
52
+ <h4 class="icon-head head-shipping-method"><?php echo Mage::helper('sales')->__('Shipping Information') ?></h4>
53
+ </div>
54
+ <fieldset>
55
+ <div>
56
+ <strong><?php echo $this->escapeHtml($_order->getShippingDescription()) ?></strong>
57
+ <?php echo $this->helper('sales')->__('Total Shipping Charges'); ?>:
58
+
59
+ <?php if ($this->helper('tax')->displayShippingPriceIncludingTax()): ?>
60
+ <?php $_excl = $this->displayShippingPriceInclTax($_order); ?>
61
+ <?php else: ?>
62
+ <?php $_excl = $this->displayPriceAttribute('shipping_amount', false, ' '); ?>
63
+ <?php endif; ?>
64
+ <?php $_incl = $this->displayShippingPriceInclTax($_order); ?>
65
+
66
+ <?php echo $_excl; ?>
67
+ <?php if ($this->helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?>
68
+ (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
69
+ <?php endif; ?>
70
+ </div>
71
+ <?php if ($this->canCreateShipment() && $this->canShipPartiallyItem()): ?>
72
+ <p class="nm">
73
+ <label for="invoice_do_shipment" class="normal"><?php echo Mage::helper('sales')->__('Create Shipment') ?></label>
74
+ <input type="checkbox" name="invoice[do_shipment]" id="invoice_do_shipment" value="1" <?php echo $this->hasInvoiceShipmentTypeMismatch()?' disabled="disabled"':'' ?> />
75
+ </p>
76
+ <?php if ($this->hasInvoiceShipmentTypeMismatch()): ?>
77
+ <small><?php echo $this->__('Some items in this order have different invoice and shipment types. You can create shipment only after the invoice is created.') ?></small>
78
+ <?php endif; ?>
79
+ <?php endif; ?>
80
+ <div id="tracking" style="display:none;"><?php echo $this->getChildHtml('tracking',false) ?></div>
81
+ </fieldset>
82
+ </div>
83
+ </div>
84
+ <?php endif; ?>
85
+ <div class="clear"></div>
86
+ <!--Display Selected Store-->
87
+ <?php if($_order->getSelectedStore()):?>
88
+ <?php
89
+ $storeId = $_order->getSelectedStore();
90
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($storeId);
91
+ ?>
92
+ <div class="box-left">
93
+ <div class="entry-edit">
94
+ <div class="entry-edit-head">
95
+ <h4><?php echo Mage::helper('sales')->__('Selected Store') ?></h4>
96
+ </div>
97
+ <fieldset>
98
+ <?php if($storeDetail->getPrice()!=0):?>
99
+ <div>
100
+ <strong><?php echo $storeDetail->getName()?> - </strong>
101
+ <span><?php echo Mage::helper('core')->currency($storeDetail->getPrice(), true, false);?></span>
102
+ </div>
103
+ <?php else:?>
104
+ <div>
105
+ <strong><?php echo $storeDetail->getName()?> - </strong>
106
+ <span><?php echo $this->__('Free');?></span>
107
+ </div>
108
+ <?php endif;?>
109
+ </fieldset>
110
+ </div>
111
+ </div>
112
+ <div class="clear"></div>
113
+ <?php endif;?>
114
+ <div class="entry-edit">
115
+ <div class="entry-edit-head">
116
+ <?php
117
+ $_itemsGridLabel = $this->getForcedShipmentCreate()?'Items to Invoice and Ship':'Items to Invoice';
118
+ ?>
119
+ <h4 class="icon-head head-products"><?php echo Mage::helper('sales')->__('%s', $_itemsGridLabel) ?></h4>
120
+ </div>
121
+ </div>
122
+ <div id="invoice_item_container">
123
+ <?php echo $this->getChildHtml('order_items') ?>
124
+ </div>
125
+ </form>
126
+ <script type="text/javascript">
127
+ //<![CDATA[
128
+ var createShipment = $('invoice_do_shipment');
129
+ if (createShipment) {
130
+ createShipment.observe('click', function(e){
131
+ if (createShipment.checked) {
132
+ document.getElementById('tracking').style.display = 'block';
133
+ } else {
134
+ document.getElementById('tracking').style.display = 'none'
135
+ }
136
+ })
137
+ }
138
+
139
+ /*forced creating of shipment*/
140
+ var forcedShipmentCreate = <?php echo $this->getForcedShipmentCreate() ?>;
141
+ var shipmentElement = $('invoice_do_shipment');
142
+ if (forcedShipmentCreate && shipmentElement) {
143
+ shipmentElement.checked = true;
144
+ shipmentElement.disabled = true;
145
+ document.getElementById('tracking').style.display = 'block';
146
+ }
147
+ //]]>
148
+ </script>
app/design/adminhtml/default/default/template/stepincheckout/sales/order/invoice/view/form.phtml ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magento.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magento.com for more information.
20
+ *
21
+ * @category design
22
+ * @package default_default
23
+ * @copyright Copyright (c) 2006-2014 X.commerce, Inc. (http://www.magento.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <?php $_invoice = $this->getInvoice() ?>
28
+ <?php $_order = $_invoice->getOrder() ?>
29
+ <?php echo $this->getChildHtml('order_info') ?>
30
+ <?php if (!$_order->getIsVirtual()): ?>
31
+ <div class="box-left">
32
+ <?php else: ?>
33
+ <div class="box-right">
34
+ <?php endif; ?>
35
+ <!--Billing Address-->
36
+ <div class="entry-edit">
37
+ <div class="entry-edit-head">
38
+ <h4 class="icon-head head-payment-method"><?php echo $this->helper('sales')->__('Payment Information') ?></h4>
39
+ </div>
40
+ <fieldset>
41
+ <div><?php echo $this->getChildHtml('order_payment') ?></div>
42
+ <div><?php echo Mage::helper('sales')->__('Order was placed using %s', $_order->getOrderCurrencyCode()) ?></div>
43
+ </fieldset>
44
+ </div>
45
+ </div>
46
+ <?php if (!$_order->getIsVirtual()): ?>
47
+ <div class="box-right">
48
+ <!--Shipping Address-->
49
+ <div class="entry-edit">
50
+ <div class="entry-edit-head">
51
+ <h4 class="icon-head head-shipping-method"><?php echo $this->helper('sales')->__('Shipping Information') ?></h4>
52
+ </div>
53
+ <fieldset>
54
+ <strong><?php echo $this->escapeHtml($_order->getShippingDescription()) ?></strong>
55
+ <?php echo $this->helper('sales')->__('Total Shipping Charges'); ?>:
56
+
57
+ <?php if ($this->helper('tax')->displayShippingPriceIncludingTax()): ?>
58
+ <?php $_excl = $this->displayShippingPriceInclTax($_order); ?>
59
+ <?php else: ?>
60
+ <?php $_excl = $this->displayPriceAttribute('shipping_amount', false, ' '); ?>
61
+ <?php endif; ?>
62
+ <?php $_incl = $this->displayShippingPriceInclTax($_order); ?>
63
+
64
+ <?php echo $_excl; ?>
65
+ <?php if ($this->helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?>
66
+ (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
67
+ <?php endif; ?>
68
+ <div><?php echo $this->getChildHtml('shipment_tracking') ?></div>
69
+ </fieldset>
70
+ </div>
71
+ <?php endif; ?>
72
+ </div>
73
+ <div class="clear"></div>
74
+ <!--Display Selected Store-->
75
+ <?php if($_order->getSelectedStore()):?>
76
+ <?php
77
+ $storeId = $_order->getSelectedStore();
78
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($storeId);
79
+ ?>
80
+ <div class="box-left">
81
+ <div class="entry-edit">
82
+ <div class="entry-edit-head">
83
+ <h4><?php echo Mage::helper('sales')->__('Selected Store') ?></h4>
84
+ </div>
85
+ <fieldset>
86
+ <?php if($storeDetail->getPrice()!=0):?>
87
+ <div>
88
+ <strong><?php echo $storeDetail->getName()?> - </strong>
89
+ <span><?php echo Mage::helper('core')->currency($storeDetail->getPrice(), true, false);?></span>
90
+ </div>
91
+ <?php else:?>
92
+ <div>
93
+ <strong><?php echo $storeDetail->getName()?> - </strong>
94
+ <span><?php echo $this->__('Free');?></span>
95
+ </div>
96
+ <?php endif;?>
97
+ </fieldset>
98
+ </div>
99
+ </div>
100
+ <div class="clear"></div>
101
+ <?php endif;?>
102
+ <div class="entry-edit">
103
+ <div class="entry-edit-head">
104
+ <h4 class="icon-head head-products"><?php echo $this->helper('sales')->__('Items Invoiced') ?></h4>
105
+ </div>
106
+ <div id="invoice_item_container">
107
+ <?php echo $this->getChildHtml('invoice_items') ?>
108
+ </div>
109
+ </div>
110
+
111
+ <div class="box-left entry-edit">
112
+ <div class="entry-edit-head"><h4><?php echo $this->__('Invoice History') ?></h4></div>
113
+ <fieldset><?php echo $this->getChildHtml('order_comments') ?></fieldset>
114
+ </div>
115
+
116
+ <div class="box-right entry-edit" id="history_form">
117
+ <div class="entry-edit-head"><h4><?php echo $this->__('Invoice Totals') ?></h4></div>
118
+ <div class="order-totals"><?php echo $this->getChildHtml('invoice_totals') ?></div>
119
+ </div>
120
+ <div class="clear"></div>
app/design/adminhtml/default/default/template/stepincheckout/sales/order/refunded.phtml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $this->setPriceDataObject($this->getSource()) ?>
2
+ <?php if ((float) $this->getSource()->getSelectedStore()): ?>
3
+ <?php
4
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($this->getSource()->getSelectedStore());
5
+
6
+ $amt = $storeDetail->getPrice();
7
+ ?>
8
+ <tr>
9
+ <td class="label"><?php echo Mage::helper('stepincheckout')->__('Selected Store') ?></td>
10
+ <td>
11
+ <?php echo $this->displayPrices($amt, $amt); ?>
12
+ </td>
13
+ </tr>
14
+ <?php endif; ?>
app/design/adminhtml/default/default/template/stepincheckout/sales/order/total.phtml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $this->setPriceDataObject($this->getSource()) ?>
2
+ <?php if ((float) $this->getSource()->getSelectedStore()): ?>
3
+ <?php
4
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($this->getSource()->getSelectedStore());
5
+
6
+ $amt = $storeDetail->getPrice();
7
+ ?>
8
+ <tr>
9
+ <td class="label"><?php echo Mage::helper('stepincheckout')->__('Selected Store') ?></td>
10
+ <td>
11
+ <?php echo $this->displayPrices($amt, $amt); ?>
12
+ </td>
13
+ </tr>
14
+ <?php endif; ?>
app/design/adminhtml/default/default/template/stepincheckout/sales/order/view/tab/info.phtml ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magento.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magento.com for more information.
20
+ *
21
+ * @category design
22
+ * @package default_default
23
+ * @copyright Copyright (c) 2006-2014 X.commerce, Inc. (http://www.magento.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <?php /** @var $this Mage_Adminhtml_Block_Sales_Order_View_Tab_Info */ ?>
28
+ <?php $_order = $this->getOrder() ?>
29
+ <div>
30
+ <div id="order-messages">
31
+ <?php echo $this->getChildHtml('order_messages') ?>
32
+ </div>
33
+ <?php echo $this->getChildHtml('order_info') ?>
34
+ <input type="hidden" name="order_id" value="<?php echo $_order->getId() ?>"/>
35
+ <?php if ($_order->getIsVirtual()): ?>
36
+ <div class="box-right">
37
+ <?php else: ?>
38
+ <div class="box-left">
39
+ <?php endif; ?>
40
+ <!--Payment Method-->
41
+ <div class="entry-edit">
42
+ <div class="entry-edit-head">
43
+ <h4 class="icon-head head-payment-method"><?php echo Mage::helper('sales')->__('Payment Information') ?></h4>
44
+ </div>
45
+ <fieldset>
46
+ <?php echo $this->getPaymentHtml() ?>
47
+ <div><?php echo Mage::helper('sales')->__('Order was placed using %s', $_order->getOrderCurrencyCode()) ?></div>
48
+ </fieldset>
49
+ </div>
50
+ </div>
51
+ <?php if (!$_order->getIsVirtual()): ?>
52
+ <div class="box-right">
53
+ <!--Shipping Method-->
54
+ <div class="entry-edit">
55
+ <div class="entry-edit-head">
56
+ <h4 class="icon-head head-shipping-method"><?php echo Mage::helper('sales')->__('Shipping &amp; Handling Information') ?></h4>
57
+ </div>
58
+ <fieldset>
59
+ <?php if ($_order->getTracksCollection()->count()) : ?>
60
+ <a href="#" id="linkId" onclick="popWin('<?php echo $this->helper('shipping')->getTrackingPopupUrlBySalesModel($_order) ?>','trackorder','width=800,height=600,resizable=yes,scrollbars=yes')" title="<?php echo $this->__('Track Order') ?>"><?php echo $this->__('Track Order') ?></a>
61
+ <br/>
62
+ <?php endif; ?>
63
+ <?php if ($_order->getShippingDescription()): ?>
64
+ <strong><?php echo $this->escapeHtml($_order->getShippingDescription()) ?></strong>
65
+
66
+ <?php if ($this->helper('tax')->displayShippingPriceIncludingTax()): ?>
67
+ <?php $_excl = $this->displayShippingPriceInclTax($_order); ?>
68
+ <?php else: ?>
69
+ <?php $_excl = $this->displayPriceAttribute('shipping_amount', false, ' '); ?>
70
+ <?php endif; ?>
71
+ <?php $_incl = $this->displayShippingPriceInclTax($_order); ?>
72
+
73
+ <?php echo $_excl; ?>
74
+ <?php if ($this->helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?>
75
+ (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
76
+ <?php endif; ?>
77
+ <?php else: ?>
78
+ <?php echo $this->helper('sales')->__('No shipping information available'); ?>
79
+ <?php endif; ?>
80
+ </fieldset>
81
+ </div>
82
+ </div>
83
+ <?php endif; ?>
84
+ <div class="clear"></div>
85
+ <!--Display Selected Store-->
86
+ <?php if($_order->getSelectedStore()):?>
87
+ <?php
88
+ $storeId = $_order->getSelectedStore();
89
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($storeId);
90
+ ?>
91
+ <div class="box-left">
92
+ <div class="entry-edit">
93
+ <div class="entry-edit-head">
94
+ <h4><?php echo Mage::helper('sales')->__('Selected Store') ?></h4>
95
+ </div>
96
+ <fieldset>
97
+ <?php if($storeDetail->getPrice()!=0):?>
98
+ <div>
99
+ <strong><?php echo $storeDetail->getName()?> - </strong>
100
+ <span><?php echo Mage::helper('core')->currency($storeDetail->getPrice(), true, false);?></span>
101
+ </div>
102
+ <?php else:?>
103
+ <div>
104
+ <strong><?php echo $storeDetail->getName()?> - </strong>
105
+ <span><?php echo $this->__('Free');?></span>
106
+ </div>
107
+ <?php endif;?>
108
+ </fieldset>
109
+ </div>
110
+ </div>
111
+ <div class="clear"></div>
112
+ <?php endif;?>
113
+ <?php echo $this->getGiftOptionsHtml() ?>
114
+ <div class="clear"></div>
115
+ <div class="entry-edit">
116
+ <div class="entry-edit-head">
117
+ <h4 class="icon-head head-products"><?php echo Mage::helper('sales')->__('Items Ordered') ?></h4>
118
+ </div>
119
+ </div>
120
+ <?php echo $this->getItemsHtml() ?>
121
+ <div class="clear"></div>
122
+
123
+ <div class="box-left">
124
+ <div class="entry-edit">
125
+ <div class="entry-edit-head">
126
+ <h4><?php echo Mage::helper('sales')->__('Comments History') ?></h4>
127
+ </div>
128
+ <fieldset><?php echo $this->getChildHtml('order_history') ?></fieldset>
129
+ </div>
130
+ </div>
131
+ <div class="box-right entry-edit">
132
+ <div class="entry-edit-head"><h4><?php echo Mage::helper('sales')->__('Order Totals') ?></h4></div>
133
+ <div class="order-totals"><?php echo $this->getChildHtml('order_totals') ?></div>
134
+ </div>
135
+ <div class="clear"></div>
136
+ </div>
137
+
138
+ <?php echo $this->getChildHtml('popup_window');?>
139
+ <script type="text/javascript">
140
+ //<![CDATA[
141
+ /**
142
+ * Retrieve gift options tooltip content
143
+ */
144
+ function getGiftOptionsTooltipContent(itemId) {
145
+ var contentLines = [];
146
+ var headerLine = null;
147
+ var contentLine = null;
148
+
149
+ $$('#gift_options_data_' + itemId + ' .gift-options-tooltip-content').each(function (element) {
150
+ if (element.down(0)) {
151
+ headerLine = element.down(0).innerHTML;
152
+ contentLine = element.down(0).next().innerHTML;
153
+ if (contentLine.length > 30) {
154
+ contentLine = contentLine.slice(0,30) + '...';
155
+ }
156
+ contentLines.push(headerLine + ' ' + contentLine);
157
+ }
158
+ });
159
+ return contentLines.join('<br/>');
160
+ }
161
+ giftOptionsTooltip.setTooltipContentLoaderFunction(getGiftOptionsTooltipContent);
162
+ //]]>
163
+ </script>
app/design/frontend/base/default/layout/stepincheckout.xml ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <checkout_onepage_index> <!-- Adding our new step to onepage block -->
4
+ <reference name="head">
5
+ <action method="addItem"><type>skin_js</type><name>js/stepincheckout/store.js</name></action>
6
+ </reference>
7
+ <reference name="checkout.onepage">
8
+ <action method="setTemplate">
9
+ <name>stepincheckout/checkout/onepage.phtml</name>
10
+ </action>
11
+ <block type="stepincheckout/checkout_onepage_selectstore" name="stepincheckout.checkout.onepage.selectstore" as="select_store" template="stepincheckout/checkout/onepage/selectstore.phtml"/>
12
+ </reference>
13
+ <reference name="checkout.progress">
14
+ <action method="setTemplate">
15
+ <name>stepincheckout/checkout/onepage/progress.phtml</name>
16
+ </action>
17
+ <block type="checkout/onepage_progress" name="selectstore.progress" template="stepincheckout/checkout/onepage/progress/select_store.phtml"></block>
18
+ </reference>
19
+ </checkout_onepage_index>
20
+ <checkout_onepage_progress>
21
+ <reference name="root">
22
+ <action method="setTemplate">
23
+ <name>stepincheckout/checkout/onepage/progress.phtml</name>
24
+ </action>
25
+ <block type="checkout/onepage_progress" name="selectstore.progress" template="stepincheckout/checkout/onepage/progress/select_store.phtml"></block>
26
+ </reference>
27
+ </checkout_onepage_progress>
28
+
29
+ <checkout_onepage_progress_select_store>
30
+ <!-- Mage_Checkout -->
31
+ <remove name="right"/>
32
+ <remove name="left"/>
33
+
34
+ <block type="checkout/onepage_progress" name="root" output="toHtml" template="stepincheckout/checkout/onepage/progress/select_store.phtml">
35
+ <action method="setInfoTemplate"><method></method><template></template></action>
36
+ </block>
37
+ </checkout_onepage_progress_select_store>
38
+
39
+
40
+
41
+
42
+ <sales_order_view>
43
+ <reference name="order_totals">
44
+ <block type="stepincheckout/sales_order_total" name="stepincheckout.sales.order.total" />
45
+ </reference>
46
+ </sales_order_view>
47
+ <sales_order_print>
48
+ <reference name="order_totals">
49
+ <block type="stepincheckout/sales_order_total" name="stepincheckout.sales.order.total" />
50
+ </reference>
51
+ </sales_order_print>
52
+ <sales_email_order_items>
53
+ <reference name="order_totals">
54
+ <block type="stepincheckout/sales_order_total" name="stepincheckout.sales.order.total" />
55
+ </reference>
56
+ </sales_email_order_items>
57
+
58
+ <sales_order_invoice>
59
+ <reference name="invoice_totals">
60
+ <block type="stepincheckout/sales_order_total" name="stepincheckout.sales.order.total" />
61
+ </reference>
62
+ </sales_order_invoice>
63
+ <sales_order_printinvoice>
64
+ <reference name="invoice_totals">
65
+ <block type="stepincheckout/sales_order_total" name="stepincheckout.sales.order.total" />
66
+ </reference>
67
+ </sales_order_printinvoice>
68
+ <sales_email_order_invoice_items>
69
+ <reference name="invoice_totals">
70
+ <block type="stepincheckout/sales_order_total" name="stepincheckout.sales.order.total" />
71
+ </reference>
72
+ </sales_email_order_invoice_items>
73
+
74
+ <sales_order_creditmemo>
75
+ <reference name="creditmemo_totals">
76
+ <block type="stepincheckout/sales_order_total" name="stepincheckout.sales.order.total" />
77
+ </reference>
78
+ </sales_order_creditmemo>
79
+ <sales_order_printcreditmemo>
80
+ <reference name="creditmemo_totals">
81
+ <block type="stepincheckout/sales_order_total" name="stepincheckout.sales.order.total" />
82
+ </reference>
83
+ </sales_order_printcreditmemo>
84
+ <sales_email_order_creditmemo_items>
85
+ <reference name="creditmemo_totals">
86
+ <block type="stepincheckout/sales_order_total" name="stepincheckout.sales.order.total" />
87
+ </reference>
88
+ </sales_email_order_creditmemo_items>
89
+
90
+ </layout>
app/design/frontend/base/default/template/stepincheckout/checkout/onepage.phtml ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package rwd_default
23
+ * @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <div class="page-title">
28
+ <h1><?php echo $this->__('Checkout') ?></h1>
29
+ </div>
30
+ <script type="text/javascript" src="<?php echo $this->getJsUrl('varien/accordion.js') ?>"></script>
31
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl('js/stepincheckout/opcheckout.js') ?>"></script>
32
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl('js/opcheckout_rwd.js') ?>"></script>
33
+ <ol class="opc opc-firststep-<?php echo $this->getActiveStep() ?>" id="checkoutSteps">
34
+ <?php $i=0; foreach($this->getSteps() as $_stepId => $_stepInfo): ?>
35
+ <?php if (!$this->getChild($_stepId) || !$this->getChild($_stepId)->isShow()): continue; endif; $i++ ?>
36
+ <li id="opc-<?php echo $_stepId ?>" class="section<?php echo !empty($_stepInfo['allow'])?' allow':'' ?><?php echo !empty($_stepInfo['complete'])?' saved':'' ?>">
37
+ <div class="step-title">
38
+ <span class="number"><?php echo $i ?></span>
39
+ <h2><?php echo $_stepInfo['label'] ?></h2>
40
+ <a href="#"><?php echo $this->__('Edit') ?></a>
41
+ </div>
42
+ <div id="checkout-step-<?php echo $_stepId ?>" class="step a-item" style="display:none;">
43
+ <?php echo $this->getChildHtml($_stepId) ?>
44
+ </div>
45
+ </li>
46
+ <?php endforeach ?>
47
+ </ol>
48
+ <script type="text/javascript">
49
+ //<![CDATA[
50
+ var accordion = new Accordion('checkoutSteps', '.step-title', true);
51
+ <?php if($this->getActiveStep()): ?>
52
+ accordion.openSection('opc-<?php echo $this->getActiveStep() ?>');
53
+ <?php endif ?>
54
+ var checkout = new Checkout(accordion,{
55
+ progress: '<?php echo $this->getUrl('checkout/onepage/progress') ?>',
56
+ review: '<?php echo $this->getUrl('checkout/onepage/review') ?>',
57
+ saveMethod: '<?php echo $this->getUrl('checkout/onepage/saveMethod') ?>',
58
+ failure: '<?php echo $this->getUrl('checkout/cart') ?>'}
59
+ );
60
+ //]]>
61
+ </script>
app/design/frontend/base/default/template/stepincheckout/checkout/onepage/progress.phtml ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package rwd_default
23
+ * @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <div class="block block-progress opc-block-progress<?php if (!$this->isCustomerLoggedIn()/* && !$this->getCheckout()->getStepData('billing', 'is_show')*/): ?> opc-block-progress-step-login<?php endif; ?>">
28
+ <div class="block-title">
29
+ <strong><span><?php echo $this->__('Your Checkout Progress') ?></span></strong>
30
+ </div>
31
+ <div class="block-content">
32
+ <dl>
33
+ <?php if ($this->getCheckout()->getStepData('billing', 'is_show')): ?>
34
+ <div id="billing-progress-opcheckout">
35
+ <?php echo $this->getChildHtml('billing.progress') ?>
36
+ </div>
37
+ <?php endif; ?>
38
+
39
+ <?php if ($this->getCheckout()->getStepData('shipping', 'is_show')): ?>
40
+ <div id="shipping-progress-opcheckout">
41
+ <?php echo $this->getChildHtml('shipping.progress') ?>
42
+ </div>
43
+ <?php endif; ?>
44
+
45
+ <?php if ($this->getCheckout()->getStepData('shipping_method', 'is_show')): ?>
46
+ <div id="shipping_method-progress-opcheckout">
47
+ <?php echo $this->getChildHtml('shippingmethod.progress') ?>
48
+ </div>
49
+ <?php endif; ?>
50
+
51
+ <?php if ($this->getCheckout()->getStepData('select_store', 'is_show')): ?>
52
+ <div id="select_store-progress-opcheckout">
53
+ <?php echo $this->getChildHtml('selectstore.progress') ?>
54
+ </div>
55
+ <?php endif; ?>
56
+
57
+ <?php if ($this->getCheckout()->getStepData('payment', 'is_show')): ?>
58
+ <div id="payment-progress-opcheckout">
59
+ <?php echo $this->getChildHtml('payment.progress') ?>
60
+ </div>
61
+ <?php endif; ?>
62
+ </dl>
63
+ </div>
64
+ </div>
65
+
app/design/frontend/base/default/template/stepincheckout/checkout/onepage/progress/select_store.phtml ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package base_default
23
+ * @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <?php if ($this->getCheckout()->getStepData('select_store', 'complete')): ?>
28
+ <dt class="complete">
29
+ <?php echo $this->__('Selected Store') ?> <span class="changelink"><span class="separator">|</span> <a
30
+ href="#select_store"
31
+ onclick="checkout.changeSection('opc-select_store'); return false;"><?php echo $this->__('Change') ?></a></span>
32
+ </dt>
33
+ <dd class="complete">
34
+ <?php
35
+ $selectedStore = $this->getQuote()->getSelectedStore();
36
+ $storeDetail = Mage::getModel('stepincheckout/selectstore')->load($selectedStore);
37
+ ?>
38
+ <?php if($storeDetail->getPrice()!=0):?>
39
+ <div>
40
+ <strong><?php echo $storeDetail->getName()?> - </strong>
41
+ <span><?php echo Mage::helper('core')->currency($storeDetail->getPrice(), true, false);?></span>
42
+ </div>
43
+ <?php else:?>
44
+ <div>
45
+ <strong><?php echo $storeDetail->getName()?> - </strong>
46
+ <span><?php echo $this->__('Free');?></span>
47
+ </div>
48
+ <?php endif;?>
49
+ </dd>
50
+ <?php else: ?>
51
+ <dt>
52
+ <?php echo $this->__('Selected Store') ?>
53
+ </dt>
54
+ <?php endif; ?>
55
+
app/design/frontend/base/default/template/stepincheckout/checkout/onepage/selectstore.phtml ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $stores = Mage::getModel('stepincheckout/selectstore')->getCollection();
3
+ ?>
4
+ <form id="co-select-store-form" action="">
5
+ <div class="fieldset">
6
+ <ul class="form-list">
7
+ <li id="store-form">
8
+ <div class="fieldset">
9
+ <ul>
10
+ <li class="wide">
11
+ <label for="select-store" class="required"><em>*</em><?php echo $this->__('Select a store') ?></label>
12
+ <div class="input-box">
13
+ <select name="selected_store" class="required-select">
14
+ <?php foreach ($stores as $store): ?>
15
+ <?php if($store->getPrice()!=0):?>
16
+ <?php $price = Mage::helper('core')->currency($store->getPrice(), true, false)?>
17
+ <?php else:?>
18
+ <?php $price = $this->__('Free')?>
19
+ <?php endif;?>
20
+ <option value="<?php echo $store->getId() ?>" <?php if ($this->getQuote()->getSelectedStore() == $store->getId()): ?>selected="selected"<?php endif; ?>><?php echo $store->getName() ?> - <?php echo $price;?></option>
21
+ <?php endforeach; ?>
22
+ </select>
23
+ </div>
24
+ </li>
25
+ </ul>
26
+ </div>
27
+ </li>
28
+ </ul>
29
+
30
+ <div class="buttons-set" id="select-store-buttons-container">
31
+ <p class="required"><?php echo $this->__('* Required Fields') ?></p>
32
+ <button type="button" title="<?php echo $this->__('Continue') ?>" class="button" onclick="selectStore.save()"><span><span><?php echo $this->__('Continue') ?></span></span></button>
33
+ <span class="please-wait" id="select-store-please-wait" style="display:none;">
34
+ <img src="<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif') ?>" alt="<?php echo $this->__('Loading next step...') ?>" title="<?php echo $this->__('Loading next step...') ?>" class="v-middle" /> <?php echo $this->__('Loading next step...') ?>
35
+ </span>
36
+ </div>
37
+ </div>
38
+ </form>
39
+ <script type="text/javascript">
40
+ //<![CDATA[
41
+ var selectStore = new selectStore('co-select-store-form', "<?php echo $this->getUrl('stepincheckout/index/saveStore') ?>");
42
+ var storeForm = new VarienForm('co-select-store-form');
43
+ //]]>
44
+ </script>
app/etc/modules/PI_Stepincheckout.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <PI_Stepincheckout>
5
+ <active>true</active>
6
+ <codePool>local</codePool>
7
+ </PI_Stepincheckout>
8
+ </modules>
9
+ </config>
package.xml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>PI_Selectstore</name>
4
+ <version>0.1.2</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>You can use this extension in order to add store, so that customer's can select their require store at the of checkout.</summary>
10
+ <description>This extension has a feature in admin so that you can add stores from admin with their prices.&#xD;
11
+ After that customer can select their require store at the time of checkout.&#xD;
12
+ </description>
13
+ <notes>This is a stable version.</notes>
14
+ <authors><author><name>pureimagination</name><user>pureimagination</user><email>johncarter15oct@gmail.com</email></author></authors>
15
+ <date>2015-06-04</date>
16
+ <time>09:36:23</time>
17
+ <contents><target name="magelocal"><dir name="PI"><dir name="Stepincheckout"><dir name="Block"><dir name="Adminhtml"><dir name="Selectstore"><dir name="Edit"><file name="Form.php" hash="4f3cbbe6e93557e5b2aeaa2cc38af69e"/><dir name="Tab"><file name="Store.php" hash="4dfa7b04921ee2c351c405e28bda16ff"/></dir><file name="Tabs.php" hash="babe0815a7d20bde78cadb4d15896442"/></dir><file name="Edit.php" hash="5e6190d2a50e49a56e4b4b410c1e445c"/><file name="Grid.php" hash="42a45ad5964e7b955af3f1a87489134c"/></dir><file name="Selectstore.php" hash="483312d24adc6f821f3709712787bb37"/></dir><dir name="Checkout"><dir name="Onepage"><file name="Selectstore.php" hash="48ae54e7d4e39bd0790c75b1b9ecf120"/></dir><file name="Onepage.php" hash="7c1c9929ad2125e998c06ca75b56f9a1"/></dir><dir name="Sales"><dir name="Order"><file name="Total.php" hash="dc83ea9019724ec20aa0fab5c00ea1ed"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="117ff13fd61786daf42ed461bd94e12d"/></dir><dir name="Model"><dir name="Checkout"><dir name="Type"><file name="Onepage.php" hash="d5fb14b341e01df35dcd63c70c3b0223"/></dir></dir><file name="Observer.php" hash="c64aaf86ab769b9cb531f10cf89a5611"/><dir name="Resource"><dir name="Selectstore"><file name="Collection.php" hash="d6ba76d27e2219dd7b550adea56efd9d"/></dir><file name="Selectstore.php" hash="511eccdc8938f4de8a654a6c7f05b841"/></dir><dir name="Sales"><dir name="Order"><dir name="Pdf"><file name="Selectedstore.php" hash="741192b47b9fada32daf55b980bb6211"/></dir><dir name="Total"><dir name="Creditmemo"><file name="Price.php" hash="c18c3ac9391bd1268c29310e26c0207e"/></dir><dir name="Invoice"><file name="Price.php" hash="ffb11ecb3da2ba0024ab9774c7e01b8a"/></dir></dir></dir><dir name="Quote"><dir name="Address"><dir name="Total"><file name="Price.php" hash="c5cefd18f3bbb0cf0761f44d30082037"/></dir></dir></dir></dir><file name="Selectstore.php" hash="927454f35eb44108f526ebb81e22b3ae"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="SitestoreController.php" hash="5abcea7ed45f23ae9a49788dcf38aea6"/></dir><dir name="Checkout"><file name="OnepageController.php" hash="0a7bea1d139cbd133ce5315440b59f11"/></dir><file name="IndexController.php" hash="45c2ab168601df03f91f79d8d3732c2b"/></dir><dir name="etc"><file name="adminhtml.xml" hash="21527005680ef3d2f62ab03c81b6a45b"/><file name="config.xml" hash="527040acc407771e2d98a32cf22dc68d"/></dir><dir name="sql"><dir name="stepincheckout_setup"><file name="mysql4-install-0.1.0.php" hash="6a75df70d6c005fd7ac5dfaaff9a5863"/><file name="upgrade-0.1.0-0.1.1.php" hash="6d4ddffb21c7b1d4669e7b1515f5f6b5"/><file name="upgrade-0.1.1-0.1.2.php" hash="6d7ba6b42d2e435608031de4cbfb1e83"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="PI_Stepincheckout.xml" hash="73201f9076d5dfae4f5c9868b4252393"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="stepincheckout"><dir name="sales"><dir name="order"><dir name="invoice"><dir name="create"><file name="form.phtml" hash="df88f18e7ace9fc5d7451b1a74c06968"/></dir><dir name="view"><file name="form.phtml" hash="2784c5626b926bcf12451752ab418ea5"/></dir></dir><file name="refunded.phtml" hash="baeb7c0872e649c427bb7140a870df57"/><file name="total.phtml" hash="586d0a7a53e82bc24b99a644553addff"/><dir name="view"><dir name="tab"><file name="info.phtml" hash="2565b525fffb3ca417ea6f838e9bf486"/></dir></dir></dir></dir></dir></dir><dir name="layout"><file name="stepincheckout.xml" hash="a40e4e26cc562e5c66e363c4aaffd71e"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="stepincheckout"><dir name="checkout"><dir name="onepage"><dir name="progress"><file name="select_store.phtml" hash="f5b1367484ac4fbf04c34e1835cdcd7f"/></dir><file name="progress.phtml" hash="bc06147f3a4b1d2603cb2fd219a29de5"/><file name="selectstore.phtml" hash="b7d92008b1e1726a849f96181b466103"/></dir><file name="onepage.phtml" hash="82d0d14c769363e3fa7c9e787f8760b3"/></dir></dir></dir><dir name="layout"><file name="stepincheckout.xml" hash="4f7a2dc7af3346340821ecc7b6d43c80"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="js"><dir name="stepincheckout"><file name="opcheckout.js" hash="3812c59ed43c32e10a2a1d14d1813470"/><file name="store.js" hash="1716fd76416c7489cab4a06701f2259a"/></dir></dir></dir></dir></dir></target></contents>
18
+ <compatible/>
19
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
20
+ </package>
skin/frontend/base/default/js/stepincheckout/opcheckout.js ADDED
@@ -0,0 +1,929 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Magento
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Academic Free License (AFL 3.0)
7
+ * that is bundled with this package in the file LICENSE_AFL.txt.
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/afl-3.0.php
10
+ * If you did not receive a copy of the license and are unable to
11
+ * obtain it through the world-wide-web, please send an email
12
+ * to license@magentocommerce.com so we can send you a copy immediately.
13
+ *
14
+ * DISCLAIMER
15
+ *
16
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
17
+ * versions in the future. If you wish to customize Magento for your
18
+ * needs please refer to http://www.magentocommerce.com for more information.
19
+ *
20
+ * @category design
21
+ * @package base_default
22
+ * @copyright Copyright (c) 2014 Magento Inc. (http://www.magentocommerce.com)
23
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
24
+ */
25
+ var Checkout = Class.create();
26
+ Checkout.prototype = {
27
+ initialize: function(accordion, urls) {
28
+ this.accordion = accordion;
29
+ this.progressUrl = urls.progress;
30
+ this.reviewUrl = urls.review;
31
+ this.saveMethodUrl = urls.saveMethod;
32
+ this.failureUrl = urls.failure;
33
+ this.billingForm = false;
34
+ this.shippingForm = false;
35
+ this.syncBillingShipping = false;
36
+ this.method = '';
37
+ this.payment = '';
38
+ this.loadWaiting = false;
39
+ this.steps = ['login', 'billing', 'shipping', 'shipping_method','select_store', 'payment', 'review'];//add new code for new step store
40
+ //We use billing as beginning step since progress bar tracks from billing
41
+ this.currentStep = 'billing';
42
+
43
+ this.accordion.sections.each(function(section) {
44
+ Event.observe($(section).down('.step-title'), 'click', this._onSectionClick.bindAsEventListener(this));
45
+ }.bind(this));
46
+
47
+ this.accordion.disallowAccessToNextSections = true;
48
+ },
49
+ /**
50
+ * Section header click handler
51
+ *
52
+ * @param event
53
+ */
54
+ _onSectionClick: function(event) {
55
+ var section = $(Event.element(event).up().up());
56
+ if (section.hasClassName('allow')) {
57
+ Event.stop(event);
58
+ this.gotoSection(section.readAttribute('id').replace('opc-', ''), false);
59
+ return false;
60
+ }
61
+ },
62
+ ajaxFailure: function() {
63
+ location.href = this.failureUrl;
64
+ },
65
+ reloadProgressBlock: function(toStep) {
66
+ this.reloadStep(toStep);
67
+ if (this.syncBillingShipping) {
68
+ this.syncBillingShipping = false;
69
+ this.reloadStep('shipping');
70
+ }
71
+ },
72
+ reloadStep: function(prevStep) {
73
+ var updater = new Ajax.Updater(prevStep + '-progress-opcheckout', this.progressUrl, {
74
+ method: 'get',
75
+ onFailure: this.ajaxFailure.bind(this),
76
+ onComplete: function() {
77
+ this.checkout.resetPreviousSteps();
78
+ },
79
+ parameters: prevStep ? {prevStep: prevStep} : null
80
+ });
81
+ },
82
+ reloadReviewBlock: function() {
83
+ var updater = new Ajax.Updater('checkout-review-load', this.reviewUrl, {method: 'get', onFailure: this.ajaxFailure.bind(this)});
84
+ },
85
+ _disableEnableAll: function(element, isDisabled) {
86
+ var descendants = element.descendants();
87
+ for (var k in descendants) {
88
+ descendants[k].disabled = isDisabled;
89
+ }
90
+ element.disabled = isDisabled;
91
+ },
92
+ setLoadWaiting: function(step, keepDisabled) {
93
+ if (step) {
94
+ if (this.loadWaiting) {
95
+ this.setLoadWaiting(false);
96
+ }
97
+ var container = $(step + '-buttons-container');
98
+ container.addClassName('disabled');
99
+ container.setStyle({opacity: .5});
100
+ this._disableEnableAll(container, true);
101
+ Element.show(step + '-please-wait');
102
+ } else {
103
+ if (this.loadWaiting) {
104
+ var container = $(this.loadWaiting + '-buttons-container');
105
+ var isDisabled = (keepDisabled ? true : false);
106
+ if (!isDisabled) {
107
+ container.removeClassName('disabled');
108
+ container.setStyle({opacity: 1});
109
+ }
110
+ this._disableEnableAll(container, isDisabled);
111
+ Element.hide(this.loadWaiting + '-please-wait');
112
+ }
113
+ }
114
+ this.loadWaiting = step;
115
+ },
116
+ gotoSection: function(section, reloadProgressBlock) {
117
+
118
+ if (reloadProgressBlock) {
119
+ this.reloadProgressBlock(this.currentStep);
120
+ }
121
+ this.currentStep = section;
122
+ var sectionElement = $('opc-' + section);
123
+ sectionElement.addClassName('allow');
124
+ this.accordion.openSection('opc-' + section);
125
+ if (!reloadProgressBlock) {
126
+ this.resetPreviousSteps();
127
+ }
128
+ },
129
+ resetPreviousSteps: function() {
130
+ var stepIndex = this.steps.indexOf(this.currentStep);
131
+
132
+ //Clear other steps if already populated through javascript
133
+ for (var i = stepIndex; i < this.steps.length; i++) {
134
+ var nextStep = this.steps[i];
135
+ var progressDiv = nextStep + '-progress-opcheckout';
136
+ if ($(progressDiv)) {
137
+ //Remove the link
138
+ $(progressDiv).select('.changelink').each(function(item) {
139
+ item.remove();
140
+ });
141
+ $(progressDiv).select('dt').each(function(item) {
142
+ item.removeClassName('complete');
143
+ });
144
+ //Remove the content
145
+ $(progressDiv).select('dd.complete').each(function(item) {
146
+ item.remove();
147
+ });
148
+ }
149
+ }
150
+ },
151
+ changeSection: function(section) {
152
+ var changeStep = section.replace('opc-', '');
153
+ this.gotoSection(changeStep, false);
154
+ },
155
+ setMethod: function() {
156
+ if ($('login:guest') && $('login:guest').checked) {
157
+ this.method = 'guest';
158
+ var request = new Ajax.Request(
159
+ this.saveMethodUrl,
160
+ {method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method: 'guest'}}
161
+ );
162
+ Element.hide('register-customer-password');
163
+ this.gotoSection('billing', true);
164
+ }
165
+ else if ($('login:register') && ($('login:register').checked || $('login:register').type == 'hidden')) {
166
+ this.method = 'register';
167
+ var request = new Ajax.Request(
168
+ this.saveMethodUrl,
169
+ {method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method: 'register'}}
170
+ );
171
+ Element.show('register-customer-password');
172
+ this.gotoSection('billing', true);
173
+ }
174
+ else {
175
+ alert(Translator.translate('Please choose to register or to checkout as a guest').stripTags());
176
+ return false;
177
+ }
178
+ document.body.fire('login:setMethod', {method: this.method});
179
+ },
180
+ setBilling: function() {
181
+ if (($('billing:use_for_shipping_yes')) && ($('billing:use_for_shipping_yes').checked)) {
182
+ shipping.syncWithBilling();
183
+ $('opc-shipping').addClassName('allow');
184
+ this.gotoSection('shipping_method', true);
185
+ } else if (($('billing:use_for_shipping_no')) && ($('billing:use_for_shipping_no').checked)) {
186
+ $('shipping:same_as_billing').checked = false;
187
+ this.gotoSection('shipping', true);
188
+ } else {
189
+ $('shipping:same_as_billing').checked = true;
190
+ this.gotoSection('shipping', true);
191
+ }
192
+
193
+ // this refreshes the checkout progress column
194
+
195
+ // if ($('billing:use_for_shipping') && $('billing:use_for_shipping').checked){
196
+ // shipping.syncWithBilling();
197
+ // //this.setShipping();
198
+ // //shipping.save();
199
+ // $('opc-shipping').addClassName('allow');
200
+ // this.gotoSection('shipping_method');
201
+ // } else {
202
+ // $('shipping:same_as_billing').checked = false;
203
+ // this.gotoSection('shipping');
204
+ // }
205
+ // this.reloadProgressBlock();
206
+ // //this.accordion.openNextSection(true);
207
+ },
208
+ setShipping: function() {
209
+ //this.nextStep();
210
+ this.gotoSection('shipping_method', true);
211
+ //this.accordion.openNextSection(true);
212
+ },
213
+ setShippingMethod: function() {
214
+ //this.nextStep();
215
+ this.gotoSection('select_store', true);//add new code for new step store
216
+ //this.accordion.openNextSection(true);
217
+ },
218
+ setSelectStore: function() {
219
+ //this.nextStep();
220
+ this.gotoSection('payment', true);//add new code for new step store
221
+ //this.accordion.openNextSection(true);
222
+ },
223
+ setPayment: function() {
224
+ //this.nextStep();
225
+ this.gotoSection('review', true);
226
+ //this.accordion.openNextSection(true);
227
+ },
228
+ setReview: function() {
229
+ this.reloadProgressBlock();
230
+ //this.nextStep();
231
+ //this.accordion.openNextSection(true);
232
+ },
233
+ back: function() {
234
+ if (this.loadWaiting)
235
+ return;
236
+ //Navigate back to the previous available step
237
+ var stepIndex = this.steps.indexOf(this.currentStep);
238
+ var section = this.steps[--stepIndex];
239
+ var sectionElement = $('opc-' + section);
240
+
241
+ //Traverse back to find the available section. Ex Virtual product does not have shipping section
242
+ while (sectionElement === null && stepIndex > 0) {
243
+ --stepIndex;
244
+ section = this.steps[stepIndex];
245
+ sectionElement = $('opc-' + section);
246
+ }
247
+ this.changeSection('opc-' + section);
248
+ },
249
+ setStepResponse: function(response) {
250
+ if (response.update_section) {
251
+ $('checkout-' + response.update_section.name + '-load').update(response.update_section.html);
252
+ }
253
+ if (response.allow_sections) {
254
+ response.allow_sections.each(function(e) {
255
+ $('opc-' + e).addClassName('allow');
256
+ });
257
+ }
258
+
259
+ if (response.duplicateBillingInfo)
260
+ {
261
+ this.syncBillingShipping = true;
262
+ shipping.setSameAsBilling(true);
263
+ }
264
+
265
+ if (response.goto_section) {
266
+ this.gotoSection(response.goto_section, true);
267
+ return true;
268
+ }
269
+ if (response.redirect) {
270
+ location.href = response.redirect;
271
+ return true;
272
+ }
273
+ return false;
274
+ }
275
+ }
276
+
277
+ // billing
278
+ var Billing = Class.create();
279
+ Billing.prototype = {
280
+ initialize: function(form, addressUrl, saveUrl) {
281
+ this.form = form;
282
+ if ($(this.form)) {
283
+ $(this.form).observe('submit', function(event) {
284
+ this.save();
285
+ Event.stop(event);
286
+ }.bind(this));
287
+ }
288
+ this.addressUrl = addressUrl;
289
+ this.saveUrl = saveUrl;
290
+ this.onAddressLoad = this.fillForm.bindAsEventListener(this);
291
+ this.onSave = this.nextStep.bindAsEventListener(this);
292
+ this.onComplete = this.resetLoadWaiting.bindAsEventListener(this);
293
+ },
294
+ setAddress: function(addressId) {
295
+ if (addressId) {
296
+ request = new Ajax.Request(
297
+ this.addressUrl + addressId,
298
+ {method: 'get', onSuccess: this.onAddressLoad, onFailure: checkout.ajaxFailure.bind(checkout)}
299
+ );
300
+ }
301
+ else {
302
+ this.fillForm(false);
303
+ }
304
+ },
305
+ newAddress: function(isNew) {
306
+ if (isNew) {
307
+ this.resetSelectedAddress();
308
+ Element.show('billing-new-address-form');
309
+ } else {
310
+ Element.hide('billing-new-address-form');
311
+ }
312
+ },
313
+ resetSelectedAddress: function() {
314
+ var selectElement = $('billing-address-select')
315
+ if (selectElement) {
316
+ selectElement.value = '';
317
+ }
318
+ },
319
+ fillForm: function(transport) {
320
+ var elementValues = {};
321
+ if (transport && transport.responseText) {
322
+ try {
323
+ elementValues = eval('(' + transport.responseText + ')');
324
+ }
325
+ catch (e) {
326
+ elementValues = {};
327
+ }
328
+ }
329
+ else {
330
+ this.resetSelectedAddress();
331
+ }
332
+ arrElements = Form.getElements(this.form);
333
+ for (var elemIndex in arrElements) {
334
+ if (arrElements[elemIndex].id) {
335
+ var fieldName = arrElements[elemIndex].id.replace(/^billing:/, '');
336
+ arrElements[elemIndex].value = elementValues[fieldName] ? elementValues[fieldName] : '';
337
+ if (fieldName == 'country_id' && billingForm) {
338
+ billingForm.elementChildLoad(arrElements[elemIndex]);
339
+ }
340
+ }
341
+ }
342
+ },
343
+ setUseForShipping: function(flag) {
344
+ $('shipping:same_as_billing').checked = flag;
345
+ },
346
+ save: function() {
347
+ if (checkout.loadWaiting != false)
348
+ return;
349
+
350
+ var validator = new Validation(this.form);
351
+ if (validator.validate()) {
352
+ checkout.setLoadWaiting('billing');
353
+
354
+ // if ($('billing:use_for_shipping') && $('billing:use_for_shipping').checked) {
355
+ // $('billing:use_for_shipping').value=1;
356
+ // }
357
+
358
+ var request = new Ajax.Request(
359
+ this.saveUrl,
360
+ {
361
+ method: 'post',
362
+ onComplete: this.onComplete,
363
+ onSuccess: this.onSave,
364
+ onFailure: checkout.ajaxFailure.bind(checkout),
365
+ parameters: Form.serialize(this.form)
366
+ }
367
+ );
368
+ }
369
+ },
370
+ resetLoadWaiting: function(transport) {
371
+ checkout.setLoadWaiting(false);
372
+ document.body.fire('billing-request:completed', {transport: transport});
373
+ },
374
+ /**
375
+ This method recieves the AJAX response on success.
376
+ There are 3 options: error, redirect or html with shipping options.
377
+ */
378
+ nextStep: function(transport) {
379
+ if (transport && transport.responseText) {
380
+ try {
381
+ response = eval('(' + transport.responseText + ')');
382
+ }
383
+ catch (e) {
384
+ response = {};
385
+ }
386
+ }
387
+
388
+ if (response.error) {
389
+ if ((typeof response.message) == 'string') {
390
+ alert(response.message);
391
+ } else {
392
+ if (window.billingRegionUpdater) {
393
+ billingRegionUpdater.update();
394
+ }
395
+
396
+ alert(response.message.join("\n"));
397
+ }
398
+
399
+ return false;
400
+ }
401
+
402
+ checkout.setStepResponse(response);
403
+ payment.initWhatIsCvvListeners();
404
+ // DELETE
405
+ //alert('error: ' + response.error + ' / redirect: ' + response.redirect + ' / shipping_methods_html: ' + response.shipping_methods_html);
406
+ // This moves the accordion panels of one page checkout and updates the checkout progress
407
+ //checkout.setBilling();
408
+ }
409
+ }
410
+
411
+ // shipping
412
+ var Shipping = Class.create();
413
+ Shipping.prototype = {
414
+ initialize: function(form, addressUrl, saveUrl, methodsUrl) {
415
+ this.form = form;
416
+ if ($(this.form)) {
417
+ $(this.form).observe('submit', function(event) {
418
+ this.save();
419
+ Event.stop(event);
420
+ }.bind(this));
421
+ }
422
+ this.addressUrl = addressUrl;
423
+ this.saveUrl = saveUrl;
424
+ this.methodsUrl = methodsUrl;
425
+ this.onAddressLoad = this.fillForm.bindAsEventListener(this);
426
+ this.onSave = this.nextStep.bindAsEventListener(this);
427
+ this.onComplete = this.resetLoadWaiting.bindAsEventListener(this);
428
+ },
429
+ setAddress: function(addressId) {
430
+ if (addressId) {
431
+ request = new Ajax.Request(
432
+ this.addressUrl + addressId,
433
+ {method: 'get', onSuccess: this.onAddressLoad, onFailure: checkout.ajaxFailure.bind(checkout)}
434
+ );
435
+ }
436
+ else {
437
+ this.fillForm(false);
438
+ }
439
+ },
440
+ newAddress: function(isNew) {
441
+ if (isNew) {
442
+ this.resetSelectedAddress();
443
+ Element.show('shipping-new-address-form');
444
+ } else {
445
+ Element.hide('shipping-new-address-form');
446
+ }
447
+ shipping.setSameAsBilling(false);
448
+ },
449
+ resetSelectedAddress: function() {
450
+ var selectElement = $('shipping-address-select')
451
+ if (selectElement) {
452
+ selectElement.value = '';
453
+ }
454
+ },
455
+ fillForm: function(transport) {
456
+ var elementValues = {};
457
+ if (transport && transport.responseText) {
458
+ try {
459
+ elementValues = eval('(' + transport.responseText + ')');
460
+ }
461
+ catch (e) {
462
+ elementValues = {};
463
+ }
464
+ }
465
+ else {
466
+ this.resetSelectedAddress();
467
+ }
468
+ arrElements = Form.getElements(this.form);
469
+ for (var elemIndex in arrElements) {
470
+ if (arrElements[elemIndex].id) {
471
+ var fieldName = arrElements[elemIndex].id.replace(/^shipping:/, '');
472
+ arrElements[elemIndex].value = elementValues[fieldName] ? elementValues[fieldName] : '';
473
+ if (fieldName == 'country_id' && shippingForm) {
474
+ shippingForm.elementChildLoad(arrElements[elemIndex]);
475
+ }
476
+ }
477
+ }
478
+ },
479
+ setSameAsBilling: function(flag) {
480
+ $('shipping:same_as_billing').checked = flag;
481
+ // #5599. Also it hangs up, if the flag is not false
482
+ // $('billing:use_for_shipping_yes').checked = flag;
483
+ if (flag) {
484
+ this.syncWithBilling();
485
+ }
486
+ },
487
+ syncWithBilling: function() {
488
+ $('billing-address-select') && this.newAddress(!$('billing-address-select').value);
489
+ $('shipping:same_as_billing').checked = true;
490
+ if (!$('billing-address-select') || !$('billing-address-select').value) {
491
+ arrElements = Form.getElements(this.form);
492
+ for (var elemIndex in arrElements) {
493
+ if (arrElements[elemIndex].id) {
494
+ var sourceField = $(arrElements[elemIndex].id.replace(/^shipping:/, 'billing:'));
495
+ if (sourceField) {
496
+ arrElements[elemIndex].value = sourceField.value;
497
+ }
498
+ }
499
+ }
500
+ //$('shipping:country_id').value = $('billing:country_id').value;
501
+ shippingRegionUpdater.update();
502
+ $('shipping:region_id').value = $('billing:region_id').value;
503
+ $('shipping:region').value = $('billing:region').value;
504
+ //shippingForm.elementChildLoad($('shipping:country_id'), this.setRegionValue.bind(this));
505
+ } else {
506
+ $('shipping-address-select').value = $('billing-address-select').value;
507
+ }
508
+ },
509
+ setRegionValue: function() {
510
+ $('shipping:region').value = $('billing:region').value;
511
+ },
512
+ save: function() {
513
+
514
+ if (checkout.loadWaiting != false)
515
+ return;
516
+ var validator = new Validation(this.form);
517
+ if (validator.validate()) {
518
+ checkout.setLoadWaiting('shipping');
519
+ var request = new Ajax.Request(
520
+ this.saveUrl,
521
+ {
522
+ method: 'post',
523
+ onComplete: this.onComplete,
524
+ onSuccess: this.onSave,
525
+ onFailure: checkout.ajaxFailure.bind(checkout),
526
+ parameters: Form.serialize(this.form)
527
+ }
528
+ );
529
+ }
530
+ },
531
+ resetLoadWaiting: function(transport) {
532
+ checkout.setLoadWaiting(false);
533
+ },
534
+ nextStep: function(transport) {
535
+ if (transport && transport.responseText) {
536
+ try {
537
+ response = eval('(' + transport.responseText + ')');
538
+ }
539
+ catch (e) {
540
+ response = {};
541
+ }
542
+ }
543
+ if (response.error) {
544
+ if ((typeof response.message) == 'string') {
545
+ alert(response.message);
546
+ } else {
547
+ if (window.shippingRegionUpdater) {
548
+ shippingRegionUpdater.update();
549
+ }
550
+ alert(response.message.join("\n"));
551
+ }
552
+
553
+ return false;
554
+ }
555
+
556
+ checkout.setStepResponse(response);
557
+
558
+ /*
559
+ var updater = new Ajax.Updater(
560
+ 'checkout-shipping-method-load',
561
+ this.methodsUrl,
562
+ {method:'get', onSuccess: checkout.setShipping.bind(checkout)}
563
+ );
564
+ */
565
+ //checkout.setShipping();
566
+ }
567
+ }
568
+
569
+ // shipping method
570
+ var ShippingMethod = Class.create();
571
+ ShippingMethod.prototype = {
572
+ initialize: function(form, saveUrl) {
573
+ this.form = form;
574
+ if ($(this.form)) {
575
+ $(this.form).observe('submit', function(event) {
576
+ this.save();
577
+ Event.stop(event);
578
+ }.bind(this));
579
+ }
580
+ this.saveUrl = saveUrl;
581
+ this.validator = new Validation(this.form);
582
+ this.onSave = this.nextStep.bindAsEventListener(this);
583
+ this.onComplete = this.resetLoadWaiting.bindAsEventListener(this);
584
+ },
585
+ validate: function() {
586
+ var methods = document.getElementsByName('shipping_method');
587
+ if (methods.length == 0) {
588
+ alert(Translator.translate('Your order cannot be completed at this time as there is no shipping methods available for it. Please make necessary changes in your shipping address.').stripTags());
589
+ return false;
590
+ }
591
+
592
+ if (!this.validator.validate()) {
593
+ return false;
594
+ }
595
+
596
+
597
+ for (var i = 0; i < methods.length; i++) {
598
+ if (methods[i].checked) {
599
+ return true;
600
+ }
601
+ }
602
+ alert(Translator.translate('Please specify shipping method.').stripTags());
603
+ return false;
604
+ },
605
+ save: function() {
606
+
607
+ if (checkout.loadWaiting != false)
608
+ return;
609
+ if (this.validate()) {
610
+ checkout.setLoadWaiting('shipping-method');
611
+ var request = new Ajax.Request(
612
+ this.saveUrl,
613
+ {
614
+ method: 'post',
615
+ onComplete: this.onComplete,
616
+ onSuccess: this.onSave,
617
+ onFailure: checkout.ajaxFailure.bind(checkout),
618
+ parameters: Form.serialize(this.form)
619
+ }
620
+ );
621
+ }
622
+ },
623
+ resetLoadWaiting: function(transport) {
624
+ checkout.setLoadWaiting(false);
625
+ },
626
+ nextStep: function(transport) {
627
+ if (transport && transport.responseText) {
628
+ try {
629
+ response = eval('(' + transport.responseText + ')');
630
+ }
631
+ catch (e) {
632
+ response = {};
633
+ }
634
+ }
635
+
636
+ if (response.error) {
637
+ alert(response.message);
638
+ return false;
639
+ }
640
+
641
+ if (response.update_section) {
642
+ $('checkout-' + response.update_section.name + '-load').update(response.update_section.html);
643
+ }
644
+
645
+ payment.initWhatIsCvvListeners();
646
+
647
+ if (response.goto_section) {
648
+ checkout.gotoSection(response.goto_section, true);
649
+ checkout.reloadProgressBlock();
650
+ return;
651
+ }
652
+
653
+ if (response.payment_methods_html) {
654
+ $('checkout-payment-method-load').update(response.payment_methods_html);
655
+ }
656
+
657
+ checkout.setShippingMethod();
658
+ }
659
+ }
660
+
661
+
662
+ // payment
663
+ var Payment = Class.create();
664
+ Payment.prototype = {
665
+ beforeInitFunc: $H({}),
666
+ afterInitFunc: $H({}),
667
+ beforeValidateFunc: $H({}),
668
+ afterValidateFunc: $H({}),
669
+ initialize: function(form, saveUrl) {
670
+ this.form = form;
671
+ this.saveUrl = saveUrl;
672
+ this.onSave = this.nextStep.bindAsEventListener(this);
673
+ this.onComplete = this.resetLoadWaiting.bindAsEventListener(this);
674
+ },
675
+ addBeforeInitFunction: function(code, func) {
676
+ this.beforeInitFunc.set(code, func);
677
+ },
678
+ beforeInit: function() {
679
+ (this.beforeInitFunc).each(function(init) {
680
+ (init.value)();
681
+ ;
682
+ });
683
+ },
684
+ init: function() {
685
+ this.beforeInit();
686
+ var elements = Form.getElements(this.form);
687
+ if ($(this.form)) {
688
+ $(this.form).observe('submit', function(event) {
689
+ this.save();
690
+ Event.stop(event);
691
+ }.bind(this));
692
+ }
693
+ var method = null;
694
+ for (var i = 0; i < elements.length; i++) {
695
+ if (elements[i].name == 'payment[method]') {
696
+ if (elements[i].checked) {
697
+ method = elements[i].value;
698
+ }
699
+ } else {
700
+ elements[i].disabled = true;
701
+ }
702
+ elements[i].setAttribute('autocomplete', 'off');
703
+ }
704
+ if (method)
705
+ this.switchMethod(method);
706
+ this.afterInit();
707
+ },
708
+ addAfterInitFunction: function(code, func) {
709
+ this.afterInitFunc.set(code, func);
710
+ },
711
+ afterInit: function() {
712
+ (this.afterInitFunc).each(function(init) {
713
+ (init.value)();
714
+ });
715
+ },
716
+ switchMethod: function(method) {
717
+ if (this.currentMethod && $('payment_form_' + this.currentMethod)) {
718
+ this.changeVisible(this.currentMethod, true);
719
+ $('payment_form_' + this.currentMethod).fire('payment-method:switched-off', {method_code: this.currentMethod});
720
+ }
721
+ if ($('payment_form_' + method)) {
722
+ this.changeVisible(method, false);
723
+ $('payment_form_' + method).fire('payment-method:switched', {method_code: method});
724
+ } else {
725
+ //Event fix for payment methods without form like "Check / Money order"
726
+ document.body.fire('payment-method:switched', {method_code: method});
727
+ }
728
+ if (method) {
729
+ this.lastUsedMethod = method;
730
+ }
731
+ this.currentMethod = method;
732
+ },
733
+ changeVisible: function(method, mode) {
734
+ var block = 'payment_form_' + method;
735
+ [block + '_before', block, block + '_after'].each(function(el) {
736
+ element = $(el);
737
+ if (element) {
738
+ element.style.display = (mode) ? 'none' : '';
739
+ element.select('input', 'select', 'textarea', 'button').each(function(field) {
740
+ field.disabled = mode;
741
+ });
742
+ }
743
+ });
744
+ },
745
+ addBeforeValidateFunction: function(code, func) {
746
+ this.beforeValidateFunc.set(code, func);
747
+ },
748
+ beforeValidate: function() {
749
+ var validateResult = true;
750
+ var hasValidation = false;
751
+ (this.beforeValidateFunc).each(function(validate) {
752
+ hasValidation = true;
753
+ if ((validate.value)() == false) {
754
+ validateResult = false;
755
+ }
756
+ }.bind(this));
757
+ if (!hasValidation) {
758
+ validateResult = false;
759
+ }
760
+ return validateResult;
761
+ },
762
+ validate: function() {
763
+ var result = this.beforeValidate();
764
+ if (result) {
765
+ return true;
766
+ }
767
+ var methods = document.getElementsByName('payment[method]');
768
+ if (methods.length == 0) {
769
+ alert(Translator.translate('Your order cannot be completed at this time as there is no payment methods available for it.').stripTags());
770
+ return false;
771
+ }
772
+ for (var i = 0; i < methods.length; i++) {
773
+ if (methods[i].checked) {
774
+ return true;
775
+ }
776
+ }
777
+ result = this.afterValidate();
778
+ if (result) {
779
+ return true;
780
+ }
781
+ alert(Translator.translate('Please specify payment method.').stripTags());
782
+ return false;
783
+ },
784
+ addAfterValidateFunction: function(code, func) {
785
+ this.afterValidateFunc.set(code, func);
786
+ },
787
+ afterValidate: function() {
788
+ var validateResult = true;
789
+ var hasValidation = false;
790
+ (this.afterValidateFunc).each(function(validate) {
791
+ hasValidation = true;
792
+ if ((validate.value)() == false) {
793
+ validateResult = false;
794
+ }
795
+ }.bind(this));
796
+ if (!hasValidation) {
797
+ validateResult = false;
798
+ }
799
+ return validateResult;
800
+ },
801
+ save: function() {
802
+ if (checkout.loadWaiting != false)
803
+ return;
804
+ var validator = new Validation(this.form);
805
+ if (this.validate() && validator.validate()) {
806
+ checkout.setLoadWaiting('payment');
807
+ var request = new Ajax.Request(
808
+ this.saveUrl,
809
+ {
810
+ method: 'post',
811
+ onComplete: this.onComplete,
812
+ onSuccess: this.onSave,
813
+ onFailure: checkout.ajaxFailure.bind(checkout),
814
+ parameters: Form.serialize(this.form)
815
+ }
816
+ );
817
+ }
818
+ },
819
+ resetLoadWaiting: function() {
820
+ checkout.setLoadWaiting(false);
821
+ },
822
+ nextStep: function(transport) {
823
+ if (transport && transport.responseText) {
824
+ try {
825
+ response = eval('(' + transport.responseText + ')');
826
+ }
827
+ catch (e) {
828
+ response = {};
829
+ }
830
+ }
831
+ /*
832
+ * if there is an error in payment, need to show error message
833
+ */
834
+ if (response.error) {
835
+ if (response.fields) {
836
+ var fields = response.fields.split(',');
837
+ for (var i = 0; i < fields.length; i++) {
838
+ var field = null;
839
+ if (field = $(fields[i])) {
840
+ Validation.ajaxError(field, response.error);
841
+ }
842
+ }
843
+ return;
844
+ }
845
+ alert(response.error);
846
+ return;
847
+ }
848
+
849
+ checkout.setStepResponse(response);
850
+
851
+ //checkout.setPayment();
852
+ },
853
+ initWhatIsCvvListeners: function() {
854
+ $$('.cvv-what-is-this').each(function(element) {
855
+ Event.observe(element, 'click', toggleToolTip);
856
+ });
857
+ }
858
+ }
859
+
860
+ var Review = Class.create();
861
+ Review.prototype = {
862
+ initialize: function(saveUrl, successUrl, agreementsForm) {
863
+ this.saveUrl = saveUrl;
864
+ this.successUrl = successUrl;
865
+ this.agreementsForm = agreementsForm;
866
+ this.onSave = this.nextStep.bindAsEventListener(this);
867
+ this.onComplete = this.resetLoadWaiting.bindAsEventListener(this);
868
+ },
869
+ save: function() {
870
+ if (checkout.loadWaiting != false)
871
+ return;
872
+ checkout.setLoadWaiting('review');
873
+ var params = Form.serialize(payment.form);
874
+ if (this.agreementsForm) {
875
+ params += '&' + Form.serialize(this.agreementsForm);
876
+ }
877
+ params.save = true;
878
+ var request = new Ajax.Request(
879
+ this.saveUrl,
880
+ {
881
+ method: 'post',
882
+ parameters: params,
883
+ onComplete: this.onComplete,
884
+ onSuccess: this.onSave,
885
+ onFailure: checkout.ajaxFailure.bind(checkout)
886
+ }
887
+ );
888
+ },
889
+ resetLoadWaiting: function(transport) {
890
+ checkout.setLoadWaiting(false, this.isSuccess);
891
+ },
892
+ nextStep: function(transport) {
893
+ if (transport && transport.responseText) {
894
+ try {
895
+ response = eval('(' + transport.responseText + ')');
896
+ }
897
+ catch (e) {
898
+ response = {};
899
+ }
900
+ if (response.redirect) {
901
+ this.isSuccess = true;
902
+ location.href = response.redirect;
903
+ return;
904
+ }
905
+ if (response.success) {
906
+ this.isSuccess = true;
907
+ window.location = this.successUrl;
908
+ }
909
+ else {
910
+ var msg = response.error_messages;
911
+ if (typeof(msg) == 'object') {
912
+ msg = msg.join("\n");
913
+ }
914
+ if (msg) {
915
+ alert(msg);
916
+ }
917
+ }
918
+
919
+ if (response.update_section) {
920
+ $('checkout-' + response.update_section.name + '-load').update(response.update_section.html);
921
+ }
922
+
923
+ if (response.goto_section) {
924
+ checkout.gotoSection(response.goto_section, true);
925
+ }
926
+ }
927
+ },
928
+ isSuccess: false
929
+ }
skin/frontend/base/default/js/stepincheckout/store.js ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // shipping method
2
+ var selectStore = Class.create();
3
+ selectStore.prototype = {
4
+ initialize: function(form, saveUrl) {
5
+ this.form = form;
6
+ if ($(this.form)) {
7
+ $(this.form).observe('submit', function(event) {
8
+ this.save();
9
+ Event.stop(event);
10
+ }.bind(this));
11
+ }
12
+ this.saveUrl = saveUrl;
13
+ this.validator = new Validation(this.form);
14
+ this.onSave = this.nextStep.bindAsEventListener(this);
15
+ this.onComplete = this.resetLoadWaiting.bindAsEventListener(this);
16
+ },
17
+ validate: function() {
18
+ if(!this.validator.validate()) {
19
+ return false;
20
+ }
21
+ return true;
22
+ },
23
+ save: function() {
24
+
25
+ if (checkout.loadWaiting != false)
26
+ return;
27
+ if (this.validate()) {
28
+ checkout.setLoadWaiting('select-store');
29
+ var request = new Ajax.Request(
30
+ this.saveUrl,
31
+ {
32
+ method: 'post',
33
+ onComplete: this.onComplete,
34
+ onSuccess: this.onSave,
35
+ onFailure: checkout.ajaxFailure.bind(checkout),
36
+ parameters: Form.serialize(this.form)
37
+ }
38
+ );
39
+ }
40
+ },
41
+ resetLoadWaiting: function(transport) {
42
+ checkout.setLoadWaiting(false);
43
+ },
44
+ nextStep: function(transport) {
45
+ if (transport && transport.responseText) {
46
+ try {
47
+ response = eval('(' + transport.responseText + ')');
48
+ }
49
+ catch (e) {
50
+ response = {};
51
+ }
52
+ }
53
+
54
+ if (response.error) {
55
+ alert(response.message);
56
+ return false;
57
+ }
58
+
59
+ if (response.update_section) {
60
+ $('checkout-' + response.update_section.name + '-load').update(response.update_section.html);
61
+ }
62
+
63
+ payment.initWhatIsCvvListeners();
64
+
65
+ if (response.goto_section) {
66
+ checkout.gotoSection(response.goto_section, true);
67
+ checkout.reloadProgressBlock();
68
+ return;
69
+ }
70
+
71
+
72
+ checkout.setSelectStore();
73
+ }
74
+ }
75
+
76
+