Version Notes
* Tested on 1.6, should work on Magento >= 1.4
Download this release
Release Info
Developer | Magento Core Team |
Extension | Thebod_Shippingrates |
Version | 1.0.0 |
Comparing to | |
See all releases |
Version 1.0.0
- app/code/community/Thebod/Shippingrates/Block/Adminhtml/Config.php +166 -0
- app/code/community/Thebod/Shippingrates/Helper/Data.php +23 -0
- app/code/community/Thebod/Shippingrates/Model/Carrier.php +214 -0
- app/code/community/Thebod/Shippingrates/Model/Email.php +82 -0
- app/code/community/Thebod/Shippingrates/Model/Observer.php +26 -0
- app/code/community/Thebod/Shippingrates/Model/System/Config.php +41 -0
- app/code/community/Thebod/Shippingrates/etc/config.xml +56 -0
- app/code/community/Thebod/Shippingrates/etc/system.xml +58 -0
- app/etc/modules/Thebod_Shippingrates.xml +9 -0
- app/locale/de_DE/Thebod_Shippingrates.csv +22 -0
- app/locale/pt_PT/Thebod_Shippingrates.csv +14 -0
- package.xml +23 -0
app/code/community/Thebod/Shippingrates/Block/Adminhtml/Config.php
ADDED
@@ -0,0 +1,166 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-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 |
+
* @category Thebod
|
16 |
+
* @package Thebod_Shippingrates
|
17 |
+
* @copyright Copyright (c) 2012 Bastian Ike (http://thebod.de/)
|
18 |
+
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class Thebod_Shippingrates_Block_Adminhtml_Config extends Mage_Adminhtml_Block_System_Config_Form_Field {
|
22 |
+
|
23 |
+
protected $_addRowButtonHtml = array();
|
24 |
+
protected $_removeRowButtonHtml = array();
|
25 |
+
|
26 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element) {
|
27 |
+
$this->setElement($element);
|
28 |
+
|
29 |
+
$html = '<div id="shippingconfig_template" style="display:none">';
|
30 |
+
$html .= $this->_getRowTemplateHtml();
|
31 |
+
$html .= '</div>';
|
32 |
+
|
33 |
+
$html .= '
|
34 |
+
<script type="text/javascript">
|
35 |
+
/* sorry, i\'m not a js-wizard :( */
|
36 |
+
|
37 |
+
var filter_btn;
|
38 |
+
|
39 |
+
function shippingconfig_filter_show(btn) {
|
40 |
+
filter_btn = btn;
|
41 |
+
$(\'shippingconfig_filter_name\').update($(btn).up(1).down(\'.name\').value);
|
42 |
+
if($(btn).up(1).down(\'.filter\').value == \'\') {
|
43 |
+
$(btn).up(1).down(\'.filter\').value = \'min_qty:;max_qty:;min_subtotal:;max_subtotal:;min_weight:;max_weight:;\';
|
44 |
+
}
|
45 |
+
|
46 |
+
filter = $(btn).up(1).down(\'.filter\').value.split(\';\').each(function(e,i) {
|
47 |
+
e = e.split(\':\');
|
48 |
+
if($(\'shippingconfig_filter_\' + e[0])) {
|
49 |
+
$(\'shippingconfig_filter_\' + e[0]).value = e[1];
|
50 |
+
}
|
51 |
+
} );
|
52 |
+
$(\'shippingconfig_filter\').show();
|
53 |
+
}
|
54 |
+
|
55 |
+
function shippingconfig_filter_hide() {
|
56 |
+
btn = filter_btn;
|
57 |
+
$(\'shippingconfig_filter\').hide();
|
58 |
+
|
59 |
+
filter = \'min_qty:\' + $(\'shippingconfig_filter_min_qty\').value + \';\';
|
60 |
+
filter += \'max_qty:\' + $(\'shippingconfig_filter_max_qty\').value + \';\';
|
61 |
+
filter += \'min_subtotal:\' + $(\'shippingconfig_filter_min_subtotal\').value + \';\';
|
62 |
+
filter += \'max_subtotal:\' + $(\'shippingconfig_filter_max_subtotal\').value + \';\';
|
63 |
+
filter += \'min_weight:\' + $(\'shippingconfig_filter_min_weight\').value + \';\';
|
64 |
+
filter += \'max_weight:\' + $(\'shippingconfig_filter_max_weight\').value + \';\';
|
65 |
+
|
66 |
+
$(btn).up(1).down(\'.filter\').value = filter;
|
67 |
+
|
68 |
+
}
|
69 |
+
</script>
|
70 |
+
<div id="shippingconfig_filter" style="width:500px;position:absolute;z-index:999;display: none;">
|
71 |
+
<div class="entry-edit-head"><strong>' . $this->__('configure filter') . ' <span id="shippingconfig_filter_name"></span></strong></div>
|
72 |
+
<div class="box">
|
73 |
+
' . $this->__('(empty fields will be ignored)') . '<br/>
|
74 |
+
<table border="0">
|
75 |
+
<tr>
|
76 |
+
<td>' . $this->__('min. QTY:') . '</td><td><input class="input-text" style="width: 100px;" id="shippingconfig_filter_min_qty"/></td>
|
77 |
+
<td>' . $this->__('max. QTY:') . '</td><td><input class="input-text" style="width: 100px;" id="shippingconfig_filter_max_qty"/></td>
|
78 |
+
</tr>
|
79 |
+
<tr>
|
80 |
+
<td>' . $this->__('min. subtotal:') . '</td><td><input class="input-text" style="width: 100px;" id="shippingconfig_filter_min_subtotal"/></td>
|
81 |
+
<td>' . $this->__('max. subtotal:') . '</td><td><input class="input-text" style="width: 100px;" id="shippingconfig_filter_max_subtotal"/></td>
|
82 |
+
</tr>
|
83 |
+
<tr>
|
84 |
+
<td>' . $this->__('min. weight:') . '</td><td><input class="input-text" style="width: 100px;" id="shippingconfig_filter_min_weight"/></td>
|
85 |
+
<td>' . $this->__('max. weight:') . '</td><td><input class="input-text" style="width: 100px;" id="shippingconfig_filter_max_weight"/></td>
|
86 |
+
</tr>
|
87 |
+
</table>
|
88 |
+
<div style="text-align: right;">
|
89 |
+
<button onclick="shippingconfig_filter_hide()" type="button">' . $this->__('save filter') . '</button>
|
90 |
+
</div>
|
91 |
+
</div>
|
92 |
+
</div>';
|
93 |
+
|
94 |
+
$html .= $this->_getAddRowButtonHtml('shippingconfig_container', 'shippingconfig_template', $this->__('Add'));
|
95 |
+
|
96 |
+
$html .= '<ul id="shippingconfig_container">';
|
97 |
+
$html .= '<li style="width: 500px;">
|
98 |
+
<span style="border-left: dotted 1px #888; padding: 0 5px;margin: 0 2px;width: 100px;display: inline-block;">' . $this->__('code') . '</span>
|
99 |
+
<span style="border-left: dotted 1px #888; padding: 0 5px;margin: 0 2px;width: 30px;display: inline-block;">' . $this->__('price') . '</span>
|
100 |
+
<span style="border-left: dotted 1px #888; padding: 0 5px;margin: 0 2px;width: 150px;display: inline-block;">' . $this->__('description') . '</span>
|
101 |
+
<span style="border-left: dotted 1px #888; padding: 0 5px;margin: 0 2px;width: 100px;display: inline-block;">' . $this->__('notification mail (optional)') . '</span>
|
102 |
+
<span style="border-left: dotted 1px #888; padding: 0 5px;margin: 0 2px;width: 100px;display: none;">' . $this->__('filter') . '</span>
|
103 |
+
</li>';
|
104 |
+
|
105 |
+
if ($this->_getValue('code')) {
|
106 |
+
foreach ($this->_getValue('code') as $k => $v) {
|
107 |
+
if ($k) {
|
108 |
+
$html .= $this->_getRowTemplateHtml($k);
|
109 |
+
}
|
110 |
+
}
|
111 |
+
}
|
112 |
+
$html .= '</ul>';
|
113 |
+
|
114 |
+
return $html;
|
115 |
+
}
|
116 |
+
|
117 |
+
protected function _getRowTemplateHtml($key = 0) {
|
118 |
+
$html = '<li style="display: block; width: 550px;">';
|
119 |
+
$html .= '<div style="float: left;">';
|
120 |
+
$html .= '<input class="name input-text ' . $this->_getDisabled() . '" style="vertical-align: top; width: 100px; margin: 0 6px;" name="' . $this->getElement()->getName() . '[code][]" value="' . $this->_getValue('code/' . $key) . '"/>';
|
121 |
+
$html .= '<input class="input-text ' . $this->_getDisabled() . '" style="vertical-align: top; width: 30px; margin: 0 6px;" name="' . $this->getElement()->getName() . '[price][]" value="' . $this->_getValue('price/' . $key) . '"/>';
|
122 |
+
$html .= '<textarea onfocus="this.style.height=\'100px\'" onblur="this.style.height=\'16px\'" style="vertical-align: top; width: 150px; margin: 0 6px; height:16px;" name="' . $this->getElement()->getName() . '[description][]" class="' . $this->_getDisabled() . '">' . $this->_getValue('description/' . $key) . '</textarea>';
|
123 |
+
$html .= '<input class="input-text ' . $this->_getDisabled() . '" style="vertical-align: top; width: 100px; margin: 0 6px;" name="' . $this->getElement()->getName() . '[email][]" value="' . $this->_getValue('email/' . $key) . '" />';
|
124 |
+
$html .= '<input style="display:none" class="filter" name="' . $this->getElement()->getName() . '[filter][]" value="' . $this->_getValue('filter/' . $key) . '" />';
|
125 |
+
$html .= '<button class="show-hide v-middle ' . $this->_getDisabled() . '" type="button" onclick="shippingconfig_filter_show(this)"><span></span></button> ';
|
126 |
+
$html .= $this->_getRemoveRowButtonHtml();
|
127 |
+
$html .= '</div>';
|
128 |
+
$html .= '</li>';
|
129 |
+
|
130 |
+
return $html;
|
131 |
+
}
|
132 |
+
|
133 |
+
protected function _getDisabled() {
|
134 |
+
return $this->getElement()->getDisabled() ? ' disabled' : '';
|
135 |
+
}
|
136 |
+
|
137 |
+
protected function _getValue($key) {
|
138 |
+
return $this->getElement()->getData('value/' . $key);
|
139 |
+
}
|
140 |
+
|
141 |
+
protected function _getAddRowButtonHtml($container, $template, $title = 'Add') {
|
142 |
+
if (!isset($this->_addRowButtonHtml[$container])) {
|
143 |
+
$this->_addRowButtonHtml[$container] = $this->getLayout()->createBlock('adminhtml/widget_button')
|
144 |
+
->setType('button')
|
145 |
+
->setClass('add ' . $this->_getDisabled())
|
146 |
+
->setLabel($this->__($title))
|
147 |
+
->setOnClick("Element.insert($('" . $container . "'), {bottom: $('" . $template . "').innerHTML})")
|
148 |
+
->setDisabled($this->_getDisabled())
|
149 |
+
->toHtml();
|
150 |
+
}
|
151 |
+
return $this->_addRowButtonHtml[$container];
|
152 |
+
}
|
153 |
+
|
154 |
+
protected function _getRemoveRowButtonHtml($selector = 'li', $title = 'Delete') {
|
155 |
+
if (!$this->_removeRowButtonHtml) {
|
156 |
+
$this->_removeRowButtonHtml = $this->getLayout()->createBlock('adminhtml/widget_button')
|
157 |
+
->setType('button')
|
158 |
+
->setClass('delete ' . $this->_getDisabled())
|
159 |
+
->setOnClick("Element.remove($(this).up('" . $selector . "'))")
|
160 |
+
->setDisabled($this->_getDisabled())
|
161 |
+
->toHtml();
|
162 |
+
}
|
163 |
+
return $this->_removeRowButtonHtml;
|
164 |
+
}
|
165 |
+
|
166 |
+
}
|
app/code/community/Thebod/Shippingrates/Helper/Data.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-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 |
+
* @category Thebod
|
16 |
+
* @package Thebod_Shippingrates
|
17 |
+
* @copyright Copyright (c) 2012 Bastian Ike (http://thebod.de/)
|
18 |
+
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class Thebod_Shippingrates_Helper_Data extends Mage_Core_Helper_Abstract {
|
22 |
+
|
23 |
+
}
|
app/code/community/Thebod/Shippingrates/Model/Carrier.php
ADDED
@@ -0,0 +1,214 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-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 |
+
* @category Thebod
|
16 |
+
* @package Thebod_Shippingrates
|
17 |
+
* @copyright Copyright (c) 2012 Bastian Ike (http://thebod.de/)
|
18 |
+
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class Thebod_Shippingrates_Model_Carrier extends Mage_Shipping_Model_Carrier_Abstract {
|
22 |
+
protected $_code = 'shippingrates';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* returns notification mail address for given rate
|
26 |
+
*
|
27 |
+
* @param string $code
|
28 |
+
* @return string
|
29 |
+
*/
|
30 |
+
public function getNotificationMail($code) {
|
31 |
+
$data = $this->getConfigData('shippingconfig');
|
32 |
+
|
33 |
+
if(!is_array($data)) {
|
34 |
+
$data = unserialize(base64_decode($data));
|
35 |
+
}
|
36 |
+
|
37 |
+
foreach($data['code'] as $k => $v) {
|
38 |
+
if($this->_code . '_' . $v == $code) {
|
39 |
+
return $data['email'][$k];
|
40 |
+
}
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* applies filters for rate on request
|
46 |
+
*
|
47 |
+
* @param array $rate
|
48 |
+
* @param Mage_Shipping_Model_Rate_Request $request
|
49 |
+
* @return boolean
|
50 |
+
*/
|
51 |
+
public function checkRate(array $rate, Mage_Shipping_Model_Rate_Request $request) {
|
52 |
+
if(!Mage::getSingleton('checkout/session')->hasQuote()) {
|
53 |
+
return true;
|
54 |
+
}
|
55 |
+
|
56 |
+
if(!isset($rate['filter'])) {
|
57 |
+
return true;
|
58 |
+
}
|
59 |
+
|
60 |
+
$filter = explode(';', $rate['filter']);
|
61 |
+
$passed = true;
|
62 |
+
foreach($filter as $f) {
|
63 |
+
$f = explode(':', $f);
|
64 |
+
$condition = $f[0];
|
65 |
+
$value = isset($f[1]) && $f[1] ? $f[1] : false;
|
66 |
+
|
67 |
+
if($value === false) {
|
68 |
+
continue;
|
69 |
+
}
|
70 |
+
|
71 |
+
switch($condition) {
|
72 |
+
case 'min_qty':
|
73 |
+
if($request->getPackageQty() < $value) {
|
74 |
+
$passed = false;
|
75 |
+
}
|
76 |
+
break;
|
77 |
+
|
78 |
+
case 'max_qty':
|
79 |
+
if($request->getPackageQty() > $value) {
|
80 |
+
$passed = false;
|
81 |
+
}
|
82 |
+
break;
|
83 |
+
|
84 |
+
case 'min_subtotal':
|
85 |
+
Mage::getSingleton('checkout/session')->getQuote()->collectTotals();
|
86 |
+
$subtotal = Mage::getSingleton('checkout/session')->getQuote()->getSubtotal();
|
87 |
+
if($subtotal < $value) {
|
88 |
+
$passed = false;
|
89 |
+
}
|
90 |
+
break;
|
91 |
+
|
92 |
+
case 'max_subtotal':
|
93 |
+
Mage::getSingleton('checkout/session')->getQuote()->collectTotals();
|
94 |
+
$subtotal = Mage::getSingleton('checkout/session')->getQuote()->getSubtotal();
|
95 |
+
if($subtotal > $value) {
|
96 |
+
$passed = false;
|
97 |
+
}
|
98 |
+
break;
|
99 |
+
|
100 |
+
case 'min_weight':
|
101 |
+
if($request->getPackageWeight() < $value) {
|
102 |
+
$passed = false;
|
103 |
+
}
|
104 |
+
break;
|
105 |
+
|
106 |
+
case 'max_weight':
|
107 |
+
if($request->getPackageWeight() > $value) {
|
108 |
+
$passed = false;
|
109 |
+
}
|
110 |
+
break;
|
111 |
+
}
|
112 |
+
}
|
113 |
+
return $passed;
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* collect shipping rates
|
118 |
+
*
|
119 |
+
* @param Mage_Shipping_Model_Rate_Request $request
|
120 |
+
* @return Mage_Shipping_Model_Rate_Result
|
121 |
+
*/
|
122 |
+
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
|
123 |
+
{
|
124 |
+
if(!$this->getConfigFlag('active')) {
|
125 |
+
return false;
|
126 |
+
}
|
127 |
+
|
128 |
+
$result = Mage::getModel('shipping/rate_result');
|
129 |
+
|
130 |
+
$rates = $this->getRate($this->getConfigData('shippingconfig'));
|
131 |
+
|
132 |
+
foreach($rates as $rate) {
|
133 |
+
if($this->checkRate($rate, $request)) {
|
134 |
+
$method = Mage::getModel('shipping/rate_result_method');
|
135 |
+
|
136 |
+
$method->setCarrier($this->_code);
|
137 |
+
$method->setCarrierTitle($this->getConfigData('title'));
|
138 |
+
|
139 |
+
//$method->setMethod($this->_code . '_' . $rate['code']);
|
140 |
+
$method->setMethod($rate['code']);
|
141 |
+
$method->setMethodTitle($rate['title']);
|
142 |
+
|
143 |
+
$method->setPrice($rate['price']);
|
144 |
+
|
145 |
+
$result->append($method);
|
146 |
+
}
|
147 |
+
}
|
148 |
+
|
149 |
+
return $result;
|
150 |
+
}
|
151 |
+
|
152 |
+
/**
|
153 |
+
* return shipping table rates
|
154 |
+
*
|
155 |
+
* @param Mage_Shipping_Model_Rate_Request $data
|
156 |
+
* @return array
|
157 |
+
*/
|
158 |
+
public function getRate($data) {
|
159 |
+
$rates = array();
|
160 |
+
$methods = array();
|
161 |
+
|
162 |
+
if(!is_array($data)) {
|
163 |
+
$data = unserialize(base64_decode($data));
|
164 |
+
}
|
165 |
+
|
166 |
+
/* rearrange array */
|
167 |
+
/* $data: array(code => array('', 'a', 'b'), price => array('', 10, 20), description => array('', 'desc1', 'desc2')) */
|
168 |
+
/* $key: code, then price, then data - $value: array*/
|
169 |
+
foreach($data as $key => $value) {
|
170 |
+
/* $value: array, $methodid: id of this method, $methodvalue: value of this entry */
|
171 |
+
foreach($value as $methodid => $methodvalue) {
|
172 |
+
/* we ignore this if methodid == 0 */
|
173 |
+
if($methodid) {
|
174 |
+
/* methods = array(methodid => array(code => 'a', price => 10, description => 'desc1')) ... */
|
175 |
+
$methods[$methodid][$key] = $methodvalue;
|
176 |
+
}
|
177 |
+
}
|
178 |
+
}
|
179 |
+
|
180 |
+
foreach($methods as $method) {
|
181 |
+
$code = trim($method['code']);
|
182 |
+
$price = trim($method['price']);
|
183 |
+
$filter = trim($method['filter']);
|
184 |
+
$title = nl2br(trim($method['description']));
|
185 |
+
|
186 |
+
$title = str_replace(array('=>', '<='), array('<strong>', '</strong>'), $title);
|
187 |
+
|
188 |
+
$rates[] = array(
|
189 |
+
'code' => $code,
|
190 |
+
'title' => $title,
|
191 |
+
'price' => $price,
|
192 |
+
'filter' => $filter,
|
193 |
+
);
|
194 |
+
}
|
195 |
+
|
196 |
+
krsort($rates);
|
197 |
+
|
198 |
+
return $rates;
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
* return allowed shipping methods
|
203 |
+
*
|
204 |
+
* @return array
|
205 |
+
*/
|
206 |
+
public function getAllowedMethods()
|
207 |
+
{
|
208 |
+
$allowedMethods = array(
|
209 |
+
$this->_code => $this->getConfigData('name'),
|
210 |
+
);
|
211 |
+
|
212 |
+
return $allowedMethods;
|
213 |
+
}
|
214 |
+
}
|
app/code/community/Thebod/Shippingrates/Model/Email.php
ADDED
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-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 |
+
* @category Thebod
|
16 |
+
* @package Thebod_Shippingrates
|
17 |
+
* @copyright Copyright (c) 2012 Bastian Ike (http://thebod.de/)
|
18 |
+
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class Thebod_Shippingrates_Model_Email extends Mage_Core_Model_Abstract {
|
22 |
+
/* code based on Mage_Sales_Model_Order::sendNewOrderEmail() */
|
23 |
+
public function sendEmailNotification($order) {
|
24 |
+
if(strncmp($order->getShippingMethod(), 'shippingrates_', 14) != 0) {
|
25 |
+
return;
|
26 |
+
}
|
27 |
+
|
28 |
+
$notificationMail = $order->getShippingCarrier()->getNotificationMail($order->getShippingMethod());
|
29 |
+
if(!strlen(trim($notificationMail))) {
|
30 |
+
return;
|
31 |
+
}
|
32 |
+
|
33 |
+
$storeId = $order->getStore()->getId();
|
34 |
+
|
35 |
+
// Start store emulation process
|
36 |
+
$appEmulation = Mage::getSingleton('core/app_emulation');
|
37 |
+
$initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
|
38 |
+
|
39 |
+
try {
|
40 |
+
// Retrieve specified view block from appropriate design package (depends on emulated store)
|
41 |
+
$paymentBlock = Mage::helper('payment')->getInfoBlock($order->getPayment())
|
42 |
+
->setIsSecureMode(true);
|
43 |
+
$paymentBlock->getMethod()->setStore($storeId);
|
44 |
+
$paymentBlockHtml = $paymentBlock->toHtml();
|
45 |
+
} catch (Exception $exception) {
|
46 |
+
// Stop store emulation process
|
47 |
+
$appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
|
48 |
+
throw $exception;
|
49 |
+
}
|
50 |
+
|
51 |
+
// Stop store emulation process
|
52 |
+
$appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
|
53 |
+
|
54 |
+
// Retrieve corresponding email template id and customer name
|
55 |
+
if ($order->getCustomerIsGuest()) {
|
56 |
+
$templateId = Mage::getStoreConfig(Mage_Sales_Model_Order::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
|
57 |
+
$customerName = $order->getBillingAddress()->getName();
|
58 |
+
} else {
|
59 |
+
$templateId = Mage::getStoreConfig(Mage_Sales_Model_Order::XML_PATH_EMAIL_TEMPLATE, $storeId);
|
60 |
+
$customerName = $order->getCustomerName();
|
61 |
+
}
|
62 |
+
|
63 |
+
$mailer = Mage::getModel('core/email_template_mailer');
|
64 |
+
$emailInfo = Mage::getModel('core/email_info');
|
65 |
+
|
66 |
+
$emailInfo->addTo($notificationMail);
|
67 |
+
|
68 |
+
$mailer->addEmailInfo($emailInfo);
|
69 |
+
|
70 |
+
// Set all required params and send emails
|
71 |
+
$mailer->setSender(Mage::getStoreConfig(Mage_Sales_Model_Order::XML_PATH_EMAIL_IDENTITY, $storeId));
|
72 |
+
$mailer->setStoreId($storeId);
|
73 |
+
$mailer->setTemplateId($templateId);
|
74 |
+
$mailer->setTemplateParams(array(
|
75 |
+
'order' => $order,
|
76 |
+
'billing' => $order->getBillingAddress(),
|
77 |
+
'payment_html' => $paymentBlockHtml
|
78 |
+
)
|
79 |
+
);
|
80 |
+
$mailer->send();
|
81 |
+
}
|
82 |
+
}
|
app/code/community/Thebod/Shippingrates/Model/Observer.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-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 |
+
* @category Thebod
|
16 |
+
* @package Thebod_Shippingrates
|
17 |
+
* @copyright Copyright (c) 2012 Bastian Ike (http://thebod.de/)
|
18 |
+
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class Thebod_Shippingrates_Model_Observer {
|
22 |
+
public function checkout_type_onepage_save_order_after($event) {
|
23 |
+
$shippingModel = Mage::getModel('shippingrates/email');
|
24 |
+
$shippingModel->sendEmailNotification($event->getOrder());
|
25 |
+
}
|
26 |
+
}
|
app/code/community/Thebod/Shippingrates/Model/System/Config.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-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 |
+
* @category Thebod
|
16 |
+
* @package Thebod_Shippingrates
|
17 |
+
* @copyright Copyright (c) 2012 Bastian Ike (http://thebod.de/)
|
18 |
+
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
20 |
+
*/
|
21 |
+
class Thebod_Shippingrates_Model_System_Config extends Mage_Core_Model_Config_Data {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* serializes array before saving
|
25 |
+
*/
|
26 |
+
protected function _beforeSave() {
|
27 |
+
if (is_array($this->getValue())) {
|
28 |
+
$this->setValue(base64_encode(serialize($this->getValue())));
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* unserializes array after loading
|
34 |
+
*/
|
35 |
+
protected function _afterLoad() {
|
36 |
+
if(!is_array($this->getValue())) {
|
37 |
+
$value = $this->getValue();
|
38 |
+
$this->setValue(empty($value) ? false : unserialize(base64_decode($value)));
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
app/code/community/Thebod/Shippingrates/etc/config.xml
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<global>
|
4 |
+
<models>
|
5 |
+
<shippingrates>
|
6 |
+
<class>Thebod_Shippingrates_Model</class>
|
7 |
+
</shippingrates>
|
8 |
+
</models>
|
9 |
+
|
10 |
+
<helpers>
|
11 |
+
<shippingrates>
|
12 |
+
<class>Thebod_Shippingrates_Helper</class>
|
13 |
+
</shippingrates>
|
14 |
+
</helpers>
|
15 |
+
|
16 |
+
<blocks>
|
17 |
+
<shippingrates>
|
18 |
+
<class>Thebod_Shippingrates_Block</class>
|
19 |
+
</shippingrates>
|
20 |
+
</blocks>
|
21 |
+
|
22 |
+
<events>
|
23 |
+
<checkout_type_onepage_save_order_after>
|
24 |
+
<observers>
|
25 |
+
<shippingrates>
|
26 |
+
<type>singleton</type>
|
27 |
+
<class>shippingrates/observer</class>
|
28 |
+
<method>checkout_type_onepage_save_order_after</method>
|
29 |
+
</shippingrates>
|
30 |
+
</observers>
|
31 |
+
</checkout_type_onepage_save_order_after>
|
32 |
+
</events>
|
33 |
+
</global>
|
34 |
+
|
35 |
+
<adminhtml>
|
36 |
+
<translate>
|
37 |
+
<modules>
|
38 |
+
<Thebod_Shippingrates>
|
39 |
+
<files>
|
40 |
+
<default>Thebod_Shippingrates.csv</default>
|
41 |
+
</files>
|
42 |
+
</Thebod_Shippingrates>
|
43 |
+
</modules>
|
44 |
+
</translate>
|
45 |
+
</adminhtml>
|
46 |
+
|
47 |
+
<default>
|
48 |
+
<carriers>
|
49 |
+
<shippingrates>
|
50 |
+
<active>1</active>
|
51 |
+
<model>shippingrates/carrier</model>
|
52 |
+
<title>Shippingrates</title>
|
53 |
+
</shippingrates>
|
54 |
+
</carriers>
|
55 |
+
</default>
|
56 |
+
</config>
|
app/code/community/Thebod/Shippingrates/etc/system.xml
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<sections>
|
4 |
+
<carriers>
|
5 |
+
<groups>
|
6 |
+
<shippingrates translate="label" module="shippingrates">
|
7 |
+
<label>Thebod Shippingrates</label>
|
8 |
+
<sort_order>1</sort_order>
|
9 |
+
<show_in_default>1</show_in_default>
|
10 |
+
<show_in_website>1</show_in_website>
|
11 |
+
<show_in_store>1</show_in_store>
|
12 |
+
<fields>
|
13 |
+
<active translate="label comment" module="shippingrates">
|
14 |
+
<label>Enabled</label>
|
15 |
+
<frontend_type>select</frontend_type>
|
16 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
17 |
+
<sort_order>10</sort_order>
|
18 |
+
<show_in_default>1</show_in_default>
|
19 |
+
<show_in_website>1</show_in_website>
|
20 |
+
<show_in_store>1</show_in_store>
|
21 |
+
<comment>Enable Shippingrates?</comment>
|
22 |
+
</active>
|
23 |
+
|
24 |
+
<title translate="label comment" module="shippingrates">
|
25 |
+
<label>Method name</label>
|
26 |
+
<frontend_type>text</frontend_type>
|
27 |
+
<sort_order>20</sort_order>
|
28 |
+
<show_in_default>1</show_in_default>
|
29 |
+
<show_in_website>1</show_in_website>
|
30 |
+
<show_in_store>1</show_in_store>
|
31 |
+
<comment>Displayed above shipping rates</comment>
|
32 |
+
</title>
|
33 |
+
|
34 |
+
<shippingconfig translate="label tooltip" module="shippingrates">
|
35 |
+
<label>Shipping methods</label>
|
36 |
+
<frontend_model>shippingrates/adminhtml_config</frontend_model>
|
37 |
+
<backend_model>shippingrates/system_config</backend_model>
|
38 |
+
<sort_order>30</sort_order>
|
39 |
+
<show_in_default>1</show_in_default>
|
40 |
+
<show_in_website>1</show_in_website>
|
41 |
+
<show_in_store>1</show_in_store>
|
42 |
+
<tooltip><![CDATA[<b>code</b>: internal code, must be unique<br/><b>price</b>: price for this shipping method<br/><b>description</b>: description shown at checkout, html code supported, or use => and <= to bold text<br/><b>notification mail</b>: optional, if set a mail is send to this address after an order is placed using this shipping rate (useful for pickup-at-store configurations)]]></tooltip>
|
43 |
+
</shippingconfig>
|
44 |
+
|
45 |
+
<sort_order translate="label" module="shippingrates">
|
46 |
+
<label>Sort order</label>
|
47 |
+
<frontend_type>text</frontend_type>
|
48 |
+
<sort_order>100</sort_order>
|
49 |
+
<show_in_default>1</show_in_default>
|
50 |
+
<show_in_website>1</show_in_website>
|
51 |
+
<show_in_store>1</show_in_store>
|
52 |
+
</sort_order>
|
53 |
+
</fields>
|
54 |
+
</shippingrates>
|
55 |
+
</groups>
|
56 |
+
</carriers>
|
57 |
+
</sections>
|
58 |
+
</config>
|
app/etc/modules/Thebod_Shippingrates.xml
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Thebod_Shippingrates>
|
5 |
+
<active>true</active>
|
6 |
+
<codePool>community</codePool>
|
7 |
+
</Thebod_Shippingrates>
|
8 |
+
</modules>
|
9 |
+
</config>
|
app/locale/de_DE/Thebod_Shippingrates.csv
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"Thebod Shippingrates","Thebod Shippingrates"
|
2 |
+
"Enabled","Aktiv"
|
3 |
+
"Enable Shippingrates?","Shippingrates aktivieren?"
|
4 |
+
"Method name","Name der Versandart"
|
5 |
+
"Displayed above shipping rates","Anzeige oberhalb der Versandkosten"
|
6 |
+
"Shipping methods","Versandarten"
|
7 |
+
"<b>code</b>: internal code, must be unique<br/><b>price</b>: price for this shipping method<br/><b>description</b>: description shown at checkout, html code supported, or use => and <= to bold text<br/><b>notification mail</b>: optional, if set a mail is send to this address after an order is placed using this shipping rate (useful for pickup-at-store configurations)","<b>Code</b>: Interner Code, muss einmalig sein<br/><b>Preis</b>: Preis der Versandart<br/><b>Beschreibung</b>: Beschreibung wird beim Checkout angezeigt, HTML Code wird unterstützt, benutze => und <= für Fett-Text<br/><b>Benachrichtigungs E-Mail</b>: Optional, falls spezifiziert wird eine Email nach Abschluss eine Bestellung mit der Versandart dorthin geschickt (nützlich für Laden-Abholung)"
|
8 |
+
"Sort order","Sortierreihenfolge"
|
9 |
+
"Add","Hinzufügen"
|
10 |
+
"Delete","Delete"
|
11 |
+
"code","Code"
|
12 |
+
"price","Preis"
|
13 |
+
"description","Beschreibung"
|
14 |
+
"notification mail (optional)","Benachrichtigungs E-Mail (Optional)"
|
15 |
+
"configure filter","Konfiguriere Filter"
|
16 |
+
"min. QTY:","min. Menge"
|
17 |
+
"max. QTY:","max. Menge"
|
18 |
+
"min. subtotal","min. Bestellwert"
|
19 |
+
"max. subtotal","max. Bestellwert"
|
20 |
+
"min. weight","min. Gewicht"
|
21 |
+
"max. weight","max. Gewicht"
|
22 |
+
"save filter","Filter speichern"
|
app/locale/pt_PT/Thebod_Shippingrates.csv
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"Thebod Shippingrates","Thebod Shippingrates"
|
2 |
+
"Enabled","Activo"
|
3 |
+
"Enable Shippingrates?","Activar Portes de Envio?"
|
4 |
+
"Method name","Método"
|
5 |
+
"Displayed above shipping rates","Apresentar por cima dos portes de envio"
|
6 |
+
"Shipping methods","Métodos de envio"
|
7 |
+
"<b>code</b>: internal code, must be unique<br/><b>price</b>: price for this shipping method<br/><b>description</b>: description shown at checkout, html code supported, or use => and <= to bold text<br/><b>notification mail</b>: optional, if set a mail is send to this address after an order is placed using this shipping rate (useful for pickup-at-store configurations)","<b>código</b>: código interno, tem que ser único<br/><b>preço</b>: preço para este método de envio<br/><b>descrição</b>: descrição apresentada no checkout, suporta código html, ou o uso de => e <= para que o texto fique a negrito<br/><b>email para notificação</b>: opcional, se atribuído será enviado um email sempre que for efectuada uma encomenda com este método de envio (útil para configurações levantar na loja)"
|
8 |
+
"Sort order","Ordenação"
|
9 |
+
"Add","Adicionar"
|
10 |
+
"Delete","Apagar"
|
11 |
+
"code","código"
|
12 |
+
"price","preço"
|
13 |
+
"description","descrição"
|
14 |
+
"notification mail (optional)","notificação de email (opcional)"
|
package.xml
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>Thebod_Shippingrates</name>
|
4 |
+
<version>1.0.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL 3.0)</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Simple configurable shippingrates for Magento</summary>
|
10 |
+
<description>Thebod_Shippingrates
|
11 |
+

|
12 |
+
Simple configurable shippingrates for Magento.
|
13 |
+

|
14 |
+
This simple module lets you define as many shipping methods as you need, with an optional 'notification e-mail'.
|
15 |
+
Very useful for 'pickup-at-store' or if you need a few self-specified fixed rates shipping methods.</description>
|
16 |
+
<notes>* Tested on 1.6, should work on Magento >= 1.4</notes>
|
17 |
+
<authors><author><name>Bastian Ike</name><user>auto-converted</user><email>thebod@thebod.de</email></author></authors>
|
18 |
+
<date>2012-02-03</date>
|
19 |
+
<time>07:44:50</time>
|
20 |
+
<contents><target name="magecommunity"><dir name="Thebod"><dir name="Shippingrates"><dir name="Block"><dir name="Adminhtml"><file name="Config.php" hash="e5b88b7f739ef069d4a5c0a915105714"/></dir></dir><dir name="Helper"><file name="Data.php" hash="5a0d2237d0cb5c658c431216005b8443"/></dir><dir name="Model"><dir name="System"><file name="Config.php" hash="d5cc2bc66d01f10939f86fade97d2f12"/></dir><file name="Carrier.php" hash="83c71ed3668963c6742b9f675f8353b7"/><file name="Email.php" hash="4ca850ca6a5de4d9a4b7d3f704ce055d"/><file name="Observer.php" hash="5730e4b8e21425a8545a3ee12f854e73"/></dir><dir name="etc"><file name="config.xml" hash="74172e5d3095c124373e2a11efdf6190"/><file name="system.xml" hash="1b5ed3db08ed13d21c7686705f5f193d"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Thebod_Shippingrates.xml" hash="f4baeb06eea903395d8ef19b187961e0"/></dir></target><target name="magelocale"><dir name="de_DE"><file name="Thebod_Shippingrates.csv" hash="c0e42c61094aa36c8b699b909581615f"/></dir><dir name="pt_PT"><file name="Thebod_Shippingrates.csv" hash="7873741ed92a4370a7280d4c76e7c1ee"/></dir></target></contents>
|
21 |
+
<compatible/>
|
22 |
+
<dependencies/>
|
23 |
+
</package>
|