Version Notes
* Added country filter
Download this release
Release Info
Developer | Magento Core Team |
Extension | Thebod_Shippingrates |
Version | 1.0.3 |
Comparing to | |
See all releases |
Code changes from version 1.0.2 to 1.0.3
- app/code/community/Thebod/Shippingrates/Block/Adminhtml/Config.php +41 -25
- app/code/community/Thebod/Shippingrates/Helper/Data.php +35 -3
- app/code/community/Thebod/Shippingrates/Model/Carrier.php +54 -56
- app/code/community/Thebod/Shippingrates/Model/Email.php +12 -9
- app/code/community/Thebod/Shippingrates/Model/Observer.php +8 -5
- app/code/community/Thebod/Shippingrates/Model/System/Config.php +13 -7
- app/code/community/Thebod/Shippingrates/etc/config.xml +1 -1
- app/code/community/Thebod/Shippingrates/etc/system.xml +1 -1
- app/etc/modules/Thebod_Shippingrates.xml +4 -1
- package.xml +5 -7
app/code/community/Thebod/Shippingrates/Block/Adminhtml/Config.php
CHANGED
@@ -17,21 +17,29 @@
|
|
17 |
* @copyright Copyright (c) 2012 Bastian Ike (http://thebod.de/)
|
18 |
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
* @license http://creativecommons.org/licenses/by/3.0/ CC-BY 3.0
|
20 |
-
* @todo move inline html into templates
|
21 |
*/
|
22 |
-
|
23 |
-
|
24 |
-
|
|
|
|
|
25 |
protected $_addRowButtonHtml = array();
|
|
|
|
|
|
|
|
|
26 |
protected $_removeRowButtonHtml = array();
|
27 |
|
28 |
/**
|
29 |
* basic template for shipping rates configurator
|
30 |
*
|
|
|
|
|
31 |
* @param Varien_Data_Form_Element_Abstract $element
|
32 |
* @return string
|
33 |
*/
|
34 |
-
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
|
|
35 |
$this->setElement($element);
|
36 |
|
37 |
$html = '<div id="shippingconfig_template" style="display:none">';
|
@@ -48,7 +56,7 @@ class Thebod_Shippingrates_Block_Adminhtml_Config extends Mage_Adminhtml_Block_S
|
|
48 |
filter_btn = btn;
|
49 |
$(\'shippingconfig_filter_name\').update($(btn).up(1).down(\'.name\').value);
|
50 |
if($(btn).up(1).down(\'.filter\').value == \'\') {
|
51 |
-
$(btn).up(1).down(\'.filter\').value = \'min_qty:;max_qty:;min_subtotal:;max_subtotal:;min_weight:;max_weight:;\';
|
52 |
}
|
53 |
|
54 |
filter = $(btn).up(1).down(\'.filter\').value.split(\';\').each(function(e,i) {
|
@@ -70,6 +78,7 @@ class Thebod_Shippingrates_Block_Adminhtml_Config extends Mage_Adminhtml_Block_S
|
|
70 |
filter += \'max_subtotal:\' + $(\'shippingconfig_filter_max_subtotal\').value + \';\';
|
71 |
filter += \'min_weight:\' + $(\'shippingconfig_filter_min_weight\').value + \';\';
|
72 |
filter += \'max_weight:\' + $(\'shippingconfig_filter_max_weight\').value + \';\';
|
|
|
73 |
|
74 |
$(btn).up(1).down(\'.filter\').value = filter;
|
75 |
|
@@ -92,6 +101,9 @@ class Thebod_Shippingrates_Block_Adminhtml_Config extends Mage_Adminhtml_Block_S
|
|
92 |
<td>' . $this->__('min. weight:') . '</td><td><input class="input-text" style="width: 100px;" id="shippingconfig_filter_min_weight"/></td>
|
93 |
<td>' . $this->__('max. weight:') . '</td><td><input class="input-text" style="width: 100px;" id="shippingconfig_filter_max_weight"/></td>
|
94 |
</tr>
|
|
|
|
|
|
|
95 |
</table>
|
96 |
<div style="text-align: right;">
|
97 |
<button onclick="shippingconfig_filter_hide()" type="button">' . $this->__('save filter') . '</button>
|
@@ -128,7 +140,8 @@ class Thebod_Shippingrates_Block_Adminhtml_Config extends Mage_Adminhtml_Block_S
|
|
128 |
* @param int $key
|
129 |
* @return string
|
130 |
*/
|
131 |
-
protected function _getRowTemplateHtml($key = 0)
|
|
|
132 |
$html = '<li style="display: block; width: 550px;">';
|
133 |
$html .= '<div style="float: left;">';
|
134 |
$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) . '"/>';
|
@@ -149,7 +162,8 @@ class Thebod_Shippingrates_Block_Adminhtml_Config extends Mage_Adminhtml_Block_S
|
|
149 |
*
|
150 |
* @return string
|
151 |
*/
|
152 |
-
protected function _getDisabled()
|
|
|
153 |
return $this->getElement()->getDisabled() ? ' disabled' : '';
|
154 |
}
|
155 |
|
@@ -159,27 +173,29 @@ class Thebod_Shippingrates_Block_Adminhtml_Config extends Mage_Adminhtml_Block_S
|
|
159 |
* @param string $key
|
160 |
* @return string
|
161 |
*/
|
162 |
-
protected function _getValue($key)
|
|
|
163 |
return $this->getElement()->getData('value/' . $key);
|
164 |
}
|
165 |
|
166 |
/**
|
167 |
* returns 'add' button html code
|
168 |
*
|
169 |
-
* @param $container
|
170 |
-
* @param $template
|
171 |
* @param string $title
|
172 |
* @return string
|
173 |
*/
|
174 |
-
protected function _getAddRowButtonHtml($container, $template, $title = 'Add')
|
|
|
175 |
if (!isset($this->_addRowButtonHtml[$container])) {
|
176 |
$this->_addRowButtonHtml[$container] = $this->getLayout()->createBlock('adminhtml/widget_button')
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
}
|
184 |
return $this->_addRowButtonHtml[$container];
|
185 |
}
|
@@ -191,16 +207,16 @@ class Thebod_Shippingrates_Block_Adminhtml_Config extends Mage_Adminhtml_Block_S
|
|
191 |
* @param string $title
|
192 |
* @return array
|
193 |
*/
|
194 |
-
protected function _getRemoveRowButtonHtml($selector = 'li', $title = 'Delete')
|
|
|
195 |
if (!$this->_removeRowButtonHtml) {
|
196 |
$this->_removeRowButtonHtml = $this->getLayout()->createBlock('adminhtml/widget_button')
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
}
|
203 |
return $this->_removeRowButtonHtml;
|
204 |
}
|
205 |
-
|
206 |
}
|
17 |
* @copyright Copyright (c) 2012 Bastian Ike (http://thebod.de/)
|
18 |
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
* @license http://creativecommons.org/licenses/by/3.0/ CC-BY 3.0
|
|
|
20 |
*/
|
21 |
+
class Thebod_Shippingrates_Block_Adminhtml_Config extends Mage_Adminhtml_Block_System_Config_Form_Field
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* @var array Add buttons
|
25 |
+
*/
|
26 |
protected $_addRowButtonHtml = array();
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @var array Remove buttons
|
30 |
+
*/
|
31 |
protected $_removeRowButtonHtml = array();
|
32 |
|
33 |
/**
|
34 |
* basic template for shipping rates configurator
|
35 |
*
|
36 |
+
* @todo move inline html into templates
|
37 |
+
*
|
38 |
* @param Varien_Data_Form_Element_Abstract $element
|
39 |
* @return string
|
40 |
*/
|
41 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
42 |
+
{
|
43 |
$this->setElement($element);
|
44 |
|
45 |
$html = '<div id="shippingconfig_template" style="display:none">';
|
56 |
filter_btn = btn;
|
57 |
$(\'shippingconfig_filter_name\').update($(btn).up(1).down(\'.name\').value);
|
58 |
if($(btn).up(1).down(\'.filter\').value == \'\') {
|
59 |
+
$(btn).up(1).down(\'.filter\').value = \'min_qty:;max_qty:;min_subtotal:;max_subtotal:;min_weight:;max_weight:;countries:;\';
|
60 |
}
|
61 |
|
62 |
filter = $(btn).up(1).down(\'.filter\').value.split(\';\').each(function(e,i) {
|
78 |
filter += \'max_subtotal:\' + $(\'shippingconfig_filter_max_subtotal\').value + \';\';
|
79 |
filter += \'min_weight:\' + $(\'shippingconfig_filter_min_weight\').value + \';\';
|
80 |
filter += \'max_weight:\' + $(\'shippingconfig_filter_max_weight\').value + \';\';
|
81 |
+
filter += \'countries:\' + $(\'shippingconfig_filter_countries\').value + \';\';
|
82 |
|
83 |
$(btn).up(1).down(\'.filter\').value = filter;
|
84 |
|
101 |
<td>' . $this->__('min. weight:') . '</td><td><input class="input-text" style="width: 100px;" id="shippingconfig_filter_min_weight"/></td>
|
102 |
<td>' . $this->__('max. weight:') . '</td><td><input class="input-text" style="width: 100px;" id="shippingconfig_filter_max_weight"/></td>
|
103 |
</tr>
|
104 |
+
<tr>
|
105 |
+
<td colspan="2">' . $this->__('limit to countries: (2-characters, comma-separated, e.g. "DE" or "DE,AT,CH")') . '</td><td colspan="2"><input class="input-text" style="width: 100px;" id="shippingconfig_filter_countries"/></td>
|
106 |
+
</tr>
|
107 |
</table>
|
108 |
<div style="text-align: right;">
|
109 |
<button onclick="shippingconfig_filter_hide()" type="button">' . $this->__('save filter') . '</button>
|
140 |
* @param int $key
|
141 |
* @return string
|
142 |
*/
|
143 |
+
protected function _getRowTemplateHtml($key = 0)
|
144 |
+
{
|
145 |
$html = '<li style="display: block; width: 550px;">';
|
146 |
$html .= '<div style="float: left;">';
|
147 |
$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) . '"/>';
|
162 |
*
|
163 |
* @return string
|
164 |
*/
|
165 |
+
protected function _getDisabled()
|
166 |
+
{
|
167 |
return $this->getElement()->getDisabled() ? ' disabled' : '';
|
168 |
}
|
169 |
|
173 |
* @param string $key
|
174 |
* @return string
|
175 |
*/
|
176 |
+
protected function _getValue($key)
|
177 |
+
{
|
178 |
return $this->getElement()->getData('value/' . $key);
|
179 |
}
|
180 |
|
181 |
/**
|
182 |
* returns 'add' button html code
|
183 |
*
|
184 |
+
* @param string $container
|
185 |
+
* @param string $template
|
186 |
* @param string $title
|
187 |
* @return string
|
188 |
*/
|
189 |
+
protected function _getAddRowButtonHtml($container, $template, $title = 'Add')
|
190 |
+
{
|
191 |
if (!isset($this->_addRowButtonHtml[$container])) {
|
192 |
$this->_addRowButtonHtml[$container] = $this->getLayout()->createBlock('adminhtml/widget_button')
|
193 |
+
->setType('button')
|
194 |
+
->setClass('add ' . $this->_getDisabled())
|
195 |
+
->setLabel($this->__($title))
|
196 |
+
->setOnClick("Element.insert($('" . $container . "'), {bottom: $('" . $template . "').innerHTML})")
|
197 |
+
->setDisabled($this->_getDisabled())
|
198 |
+
->toHtml();
|
199 |
}
|
200 |
return $this->_addRowButtonHtml[$container];
|
201 |
}
|
207 |
* @param string $title
|
208 |
* @return array
|
209 |
*/
|
210 |
+
protected function _getRemoveRowButtonHtml($selector = 'li', $title = 'Delete')
|
211 |
+
{
|
212 |
if (!$this->_removeRowButtonHtml) {
|
213 |
$this->_removeRowButtonHtml = $this->getLayout()->createBlock('adminhtml/widget_button')
|
214 |
+
->setType('button')
|
215 |
+
->setClass('delete ' . $this->_getDisabled())
|
216 |
+
->setOnClick("Element.remove($(this).up('" . $selector . "'))")
|
217 |
+
->setDisabled($this->_getDisabled())
|
218 |
+
->toHtml();
|
219 |
}
|
220 |
return $this->_removeRowButtonHtml;
|
221 |
}
|
|
|
222 |
}
|
app/code/community/Thebod/Shippingrates/Helper/Data.php
CHANGED
@@ -18,6 +18,38 @@
|
|
18 |
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
* @license http://creativecommons.org/licenses/by/3.0/ CC-BY 3.0
|
20 |
*/
|
21 |
-
|
22 |
-
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
* @license http://creativecommons.org/licenses/by/3.0/ CC-BY 3.0
|
20 |
*/
|
21 |
+
class Thebod_Shippingrates_Helper_Data extends Mage_Core_Helper_Abstract
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Rearranges the complete shipping rates array
|
25 |
+
*
|
26 |
+
* @param array $data array(
|
27 |
+
* code => array('', 'a', 'b'),
|
28 |
+
* price => array('', 10, 20),
|
29 |
+
* description => array('', 'desc1', 'desc2')
|
30 |
+
* )
|
31 |
+
* @return array array(
|
32 |
+
* methodid => array(
|
33 |
+
* code => 'a',
|
34 |
+
* price => 10,
|
35 |
+
* description => 'desc1'
|
36 |
+
* )
|
37 |
+
* )
|
38 |
+
*/
|
39 |
+
public function rearrangeShippingRates($data)
|
40 |
+
{
|
41 |
+
$methods = array();
|
42 |
+
foreach ($data as $key => $value) {
|
43 |
+
/*
|
44 |
+
* $methodId => id of this method
|
45 |
+
* $methodValue => value of this entry
|
46 |
+
*/
|
47 |
+
foreach ($value as $methodId => $methodValue) {
|
48 |
+
/* we ignore this if $methodId == 0 */
|
49 |
+
if ($methodId) {
|
50 |
+
$methods[$methodId][$key] = $methodValue;
|
51 |
+
}
|
52 |
+
}
|
53 |
+
}
|
54 |
+
}
|
55 |
+
}
|
app/code/community/Thebod/Shippingrates/Model/Carrier.php
CHANGED
@@ -18,8 +18,11 @@
|
|
18 |
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
* @license http://creativecommons.org/licenses/by/3.0/ CC-BY 3.0
|
20 |
*/
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
23 |
protected $_code = 'shippingrates';
|
24 |
|
25 |
/**
|
@@ -28,16 +31,17 @@ class Thebod_Shippingrates_Model_Carrier extends Mage_Shipping_Model_Carrier_Abs
|
|
28 |
* @param string $code
|
29 |
* @return string
|
30 |
*/
|
31 |
-
public function getNotificationMail($code)
|
|
|
32 |
$data = $this->getConfigData('shippingconfig');
|
33 |
|
34 |
-
if(!is_array($data)) {
|
35 |
$data = unserialize(base64_decode($data));
|
36 |
}
|
37 |
|
38 |
/* searches correct mail address */
|
39 |
-
foreach($data['code'] as $k => $v) {
|
40 |
-
if(($this->_code . '_' . $v) == $code) {
|
41 |
return $data['email'][$k];
|
42 |
}
|
43 |
}
|
@@ -50,59 +54,71 @@ class Thebod_Shippingrates_Model_Carrier extends Mage_Shipping_Model_Carrier_Abs
|
|
50 |
* @param Mage_Shipping_Model_Rate_Request $request
|
51 |
* @return boolean
|
52 |
*/
|
53 |
-
public function checkRate(array $rate, Mage_Shipping_Model_Rate_Request $request)
|
54 |
-
|
|
|
55 |
return true;
|
56 |
}
|
57 |
|
58 |
-
if(!isset($rate['filter'])) {
|
59 |
return true;
|
60 |
}
|
61 |
|
62 |
$filters = explode(';', $rate['filter']);
|
63 |
$passed = true;
|
64 |
-
foreach($filters as $filter) {
|
65 |
$filter = explode(':', $filter);
|
66 |
$condition = $filter[0];
|
67 |
$value = isset($filter[1]) && $filter[1] ? $filter[1] : false;
|
68 |
|
69 |
-
if($value === false) {
|
70 |
continue;
|
71 |
}
|
72 |
|
73 |
-
switch($condition) {
|
74 |
case 'min_qty':
|
75 |
-
if($request->getPackageQty() < $value) {
|
76 |
$passed = false;
|
77 |
}
|
78 |
break;
|
79 |
|
80 |
case 'max_qty':
|
81 |
-
if($request->getPackageQty() > $value) {
|
82 |
$passed = false;
|
83 |
}
|
84 |
break;
|
85 |
|
86 |
case 'min_subtotal':
|
87 |
-
if($request->getPackageValueWithDiscount() < $value) {
|
88 |
$passed = false;
|
89 |
}
|
90 |
break;
|
91 |
|
92 |
case 'max_subtotal':
|
93 |
-
if($request->getPackageValueWithDiscount() > $value) {
|
94 |
$passed = false;
|
95 |
}
|
96 |
break;
|
97 |
|
98 |
case 'min_weight':
|
99 |
-
if($request->getPackageWeight() < $value) {
|
100 |
$passed = false;
|
101 |
}
|
102 |
break;
|
103 |
|
104 |
case 'max_weight':
|
105 |
-
if($request->getPackageWeight() > $value) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
$passed = false;
|
107 |
}
|
108 |
break;
|
@@ -118,23 +134,22 @@ class Thebod_Shippingrates_Model_Carrier extends Mage_Shipping_Model_Carrier_Abs
|
|
118 |
* @param Mage_Shipping_Model_Rate_Request $request
|
119 |
* @return Mage_Shipping_Model_Rate_Result
|
120 |
*/
|
121 |
-
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
|
122 |
-
|
|
|
123 |
return false;
|
124 |
}
|
125 |
|
126 |
-
$result = Mage::getModel('shipping/rate_result');
|
127 |
-
|
128 |
$rates = $this->getRates($this->getConfigData('shippingconfig'));
|
129 |
|
130 |
-
|
131 |
-
|
|
|
132 |
$method = Mage::getModel('shipping/rate_result_method');
|
133 |
|
134 |
$method->setCarrier($this->_code);
|
135 |
$method->setCarrierTitle($this->getConfigData('title'));
|
136 |
|
137 |
-
//$method->setMethod($this->_code . '_' . $rate['code']);
|
138 |
$method->setMethod($rate['code']);
|
139 |
$method->setMethodTitle($rate['title']);
|
140 |
|
@@ -143,7 +158,6 @@ class Thebod_Shippingrates_Model_Carrier extends Mage_Shipping_Model_Carrier_Abs
|
|
143 |
$result->append($method);
|
144 |
}
|
145 |
}
|
146 |
-
|
147 |
return $result;
|
148 |
}
|
149 |
|
@@ -153,42 +167,27 @@ class Thebod_Shippingrates_Model_Carrier extends Mage_Shipping_Model_Carrier_Abs
|
|
153 |
* @param Mage_Shipping_Model_Rate_Request $data
|
154 |
* @return array
|
155 |
*/
|
156 |
-
public function getRates($data)
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
if(!is_array($data)) {
|
161 |
$data = unserialize(base64_decode($data));
|
162 |
}
|
163 |
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
foreach($value as $methodid => $methodvalue) {
|
170 |
-
/* we ignore this if methodid == 0 */
|
171 |
-
if($methodid) {
|
172 |
-
/* methods = array(methodid => array(code => 'a', price => 10, description => 'desc1')) ... */
|
173 |
-
$methods[$methodid][$key] = $methodvalue;
|
174 |
-
}
|
175 |
-
}
|
176 |
-
}
|
177 |
-
|
178 |
-
foreach($methods as $method) {
|
179 |
-
$code = trim($method['code']);
|
180 |
-
$price = trim($method['price']);
|
181 |
$filter = trim($method['filter']);
|
182 |
-
$title
|
183 |
|
184 |
$rates[] = array(
|
185 |
-
'code'
|
186 |
-
'title'
|
187 |
-
'price'
|
188 |
'filter' => $filter,
|
189 |
);
|
190 |
}
|
191 |
-
|
192 |
krsort($rates);
|
193 |
|
194 |
return $rates;
|
@@ -202,9 +201,8 @@ class Thebod_Shippingrates_Model_Carrier extends Mage_Shipping_Model_Carrier_Abs
|
|
202 |
public function getAllowedMethods()
|
203 |
{
|
204 |
$allowedMethods = array(
|
205 |
-
$this->_code => $this->getConfigData('name')
|
206 |
);
|
207 |
-
|
208 |
return $allowedMethods;
|
209 |
}
|
210 |
-
}
|
18 |
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
* @license http://creativecommons.org/licenses/by/3.0/ CC-BY 3.0
|
20 |
*/
|
21 |
+
class Thebod_Shippingrates_Model_Carrier extends Mage_Shipping_Model_Carrier_Abstract
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* @var string Shipping Method Code
|
25 |
+
*/
|
26 |
protected $_code = 'shippingrates';
|
27 |
|
28 |
/**
|
31 |
* @param string $code
|
32 |
* @return string
|
33 |
*/
|
34 |
+
public function getNotificationMail($code)
|
35 |
+
{
|
36 |
$data = $this->getConfigData('shippingconfig');
|
37 |
|
38 |
+
if (!is_array($data)) {
|
39 |
$data = unserialize(base64_decode($data));
|
40 |
}
|
41 |
|
42 |
/* searches correct mail address */
|
43 |
+
foreach ($data['code'] as $k => $v) {
|
44 |
+
if (($this->_code . '_' . $v) == $code) {
|
45 |
return $data['email'][$k];
|
46 |
}
|
47 |
}
|
54 |
* @param Mage_Shipping_Model_Rate_Request $request
|
55 |
* @return boolean
|
56 |
*/
|
57 |
+
public function checkRate(array $rate, Mage_Shipping_Model_Rate_Request $request)
|
58 |
+
{
|
59 |
+
if (!Mage::getSingleton('checkout/session')->hasQuote()) {
|
60 |
return true;
|
61 |
}
|
62 |
|
63 |
+
if (!isset($rate['filter'])) {
|
64 |
return true;
|
65 |
}
|
66 |
|
67 |
$filters = explode(';', $rate['filter']);
|
68 |
$passed = true;
|
69 |
+
foreach ($filters as $filter) {
|
70 |
$filter = explode(':', $filter);
|
71 |
$condition = $filter[0];
|
72 |
$value = isset($filter[1]) && $filter[1] ? $filter[1] : false;
|
73 |
|
74 |
+
if ($value === false) {
|
75 |
continue;
|
76 |
}
|
77 |
|
78 |
+
switch ($condition) {
|
79 |
case 'min_qty':
|
80 |
+
if ($request->getPackageQty() < $value) {
|
81 |
$passed = false;
|
82 |
}
|
83 |
break;
|
84 |
|
85 |
case 'max_qty':
|
86 |
+
if ($request->getPackageQty() > $value) {
|
87 |
$passed = false;
|
88 |
}
|
89 |
break;
|
90 |
|
91 |
case 'min_subtotal':
|
92 |
+
if ($request->getPackageValueWithDiscount() < $value) {
|
93 |
$passed = false;
|
94 |
}
|
95 |
break;
|
96 |
|
97 |
case 'max_subtotal':
|
98 |
+
if ($request->getPackageValueWithDiscount() > $value) {
|
99 |
$passed = false;
|
100 |
}
|
101 |
break;
|
102 |
|
103 |
case 'min_weight':
|
104 |
+
if ($request->getPackageWeight() < $value) {
|
105 |
$passed = false;
|
106 |
}
|
107 |
break;
|
108 |
|
109 |
case 'max_weight':
|
110 |
+
if ($request->getPackageWeight() > $value) {
|
111 |
+
$passed = false;
|
112 |
+
}
|
113 |
+
break;
|
114 |
+
|
115 |
+
case 'countries':
|
116 |
+
$dest = strtolower($request->getDestCountryId());
|
117 |
+
$allowed = explode(',', strtolower($value));
|
118 |
+
foreach($allowed as $k => $v) {
|
119 |
+
$allowed[$k] = trim($v);
|
120 |
+
}
|
121 |
+
if(!in_array($dest, $allowed) && count($allowed)) {
|
122 |
$passed = false;
|
123 |
}
|
124 |
break;
|
134 |
* @param Mage_Shipping_Model_Rate_Request $request
|
135 |
* @return Mage_Shipping_Model_Rate_Result
|
136 |
*/
|
137 |
+
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
|
138 |
+
{
|
139 |
+
if (!$this->getConfigFlag('active')) {
|
140 |
return false;
|
141 |
}
|
142 |
|
|
|
|
|
143 |
$rates = $this->getRates($this->getConfigData('shippingconfig'));
|
144 |
|
145 |
+
$result = Mage::getModel('shipping/rate_result');
|
146 |
+
foreach ($rates as $rate) {
|
147 |
+
if ($this->checkRate($rate, $request)) {
|
148 |
$method = Mage::getModel('shipping/rate_result_method');
|
149 |
|
150 |
$method->setCarrier($this->_code);
|
151 |
$method->setCarrierTitle($this->getConfigData('title'));
|
152 |
|
|
|
153 |
$method->setMethod($rate['code']);
|
154 |
$method->setMethodTitle($rate['title']);
|
155 |
|
158 |
$result->append($method);
|
159 |
}
|
160 |
}
|
|
|
161 |
return $result;
|
162 |
}
|
163 |
|
167 |
* @param Mage_Shipping_Model_Rate_Request $data
|
168 |
* @return array
|
169 |
*/
|
170 |
+
public function getRates($data)
|
171 |
+
{
|
172 |
+
if (!is_array($data)) {
|
|
|
|
|
173 |
$data = unserialize(base64_decode($data));
|
174 |
}
|
175 |
|
176 |
+
$methods = Mage::helper('shippingrates')->rearrangeShippingRates($data);
|
177 |
+
$rates = array();
|
178 |
+
foreach ($methods as $method) {
|
179 |
+
$code = trim($method['code']);
|
180 |
+
$price = trim($method['price']);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
$filter = trim($method['filter']);
|
182 |
+
$title = nl2br(trim($method['description']));
|
183 |
|
184 |
$rates[] = array(
|
185 |
+
'code' => $code,
|
186 |
+
'title' => $title,
|
187 |
+
'price' => $price,
|
188 |
'filter' => $filter,
|
189 |
);
|
190 |
}
|
|
|
191 |
krsort($rates);
|
192 |
|
193 |
return $rates;
|
201 |
public function getAllowedMethods()
|
202 |
{
|
203 |
$allowedMethods = array(
|
204 |
+
$this->_code => $this->getConfigData('name')
|
205 |
);
|
|
|
206 |
return $allowedMethods;
|
207 |
}
|
208 |
+
}
|
app/code/community/Thebod/Shippingrates/Model/Email.php
CHANGED
@@ -18,24 +18,26 @@
|
|
18 |
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
* @license http://creativecommons.org/licenses/by/3.0/ CC-BY 3.0
|
20 |
*/
|
21 |
-
|
22 |
-
|
23 |
-
/* code based on Mage_Sales_Model_Order::sendNewOrderEmail() */
|
24 |
/**
|
25 |
-
*
|
|
|
|
|
26 |
*
|
27 |
* @param Mage_Sales_Model_Order $order
|
28 |
* @return boolean
|
29 |
* @throws Exception
|
30 |
* @see Mage_Sales_Model_Order
|
31 |
*/
|
32 |
-
public function sendEmailNotification($order)
|
33 |
-
|
|
|
34 |
return false;
|
35 |
}
|
36 |
|
37 |
$notificationMail = $order->getShippingCarrier()->getNotificationMail($order->getShippingMethod());
|
38 |
-
if(!strlen(trim($notificationMail))) {
|
39 |
return false;
|
40 |
}
|
41 |
|
@@ -80,7 +82,8 @@ class Thebod_Shippingrates_Model_Email extends Mage_Core_Model_Abstract {
|
|
80 |
$mailer->setSender(Mage::getStoreConfig(Mage_Sales_Model_Order::XML_PATH_EMAIL_IDENTITY, $storeId));
|
81 |
$mailer->setStoreId($storeId);
|
82 |
$mailer->setTemplateId($templateId);
|
83 |
-
$mailer->setTemplateParams(
|
|
|
84 |
'order' => $order,
|
85 |
'billing' => $order->getBillingAddress(),
|
86 |
'payment_html' => $paymentBlockHtml
|
@@ -90,4 +93,4 @@ class Thebod_Shippingrates_Model_Email extends Mage_Core_Model_Abstract {
|
|
90 |
|
91 |
return true;
|
92 |
}
|
93 |
-
}
|
18 |
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
* @license http://creativecommons.org/licenses/by/3.0/ CC-BY 3.0
|
20 |
*/
|
21 |
+
class Thebod_Shippingrates_Model_Email extends Mage_Core_Model_Abstract
|
22 |
+
{
|
|
|
23 |
/**
|
24 |
+
* Sends notification mail for selected shipping rate
|
25 |
+
*
|
26 |
+
* The code for this functionality is based on Mage_Sales_Model_Order::sendNewOrderEmail()
|
27 |
*
|
28 |
* @param Mage_Sales_Model_Order $order
|
29 |
* @return boolean
|
30 |
* @throws Exception
|
31 |
* @see Mage_Sales_Model_Order
|
32 |
*/
|
33 |
+
public function sendEmailNotification($order)
|
34 |
+
{
|
35 |
+
if (strncmp($order->getShippingMethod(), 'shippingrates_', 14) != 0) {
|
36 |
return false;
|
37 |
}
|
38 |
|
39 |
$notificationMail = $order->getShippingCarrier()->getNotificationMail($order->getShippingMethod());
|
40 |
+
if (!strlen(trim($notificationMail))) {
|
41 |
return false;
|
42 |
}
|
43 |
|
82 |
$mailer->setSender(Mage::getStoreConfig(Mage_Sales_Model_Order::XML_PATH_EMAIL_IDENTITY, $storeId));
|
83 |
$mailer->setStoreId($storeId);
|
84 |
$mailer->setTemplateId($templateId);
|
85 |
+
$mailer->setTemplateParams(
|
86 |
+
array(
|
87 |
'order' => $order,
|
88 |
'billing' => $order->getBillingAddress(),
|
89 |
'payment_html' => $paymentBlockHtml
|
93 |
|
94 |
return true;
|
95 |
}
|
96 |
+
}
|
app/code/community/Thebod/Shippingrates/Model/Observer.php
CHANGED
@@ -18,15 +18,18 @@
|
|
18 |
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
* @license http://creativecommons.org/licenses/by/3.0/ CC-BY 3.0
|
20 |
*/
|
21 |
-
|
22 |
-
|
23 |
/**
|
24 |
* observer to send mail notification
|
25 |
*
|
26 |
-
* @param $
|
|
|
27 |
*/
|
28 |
-
public function checkoutTypeOnepageSaveOrderAfter($
|
|
|
|
|
29 |
$shippingModel = Mage::getModel('shippingrates/email');
|
30 |
-
$shippingModel->sendEmailNotification($
|
31 |
}
|
32 |
}
|
18 |
* @author Bastian Ike <b-ike@b-ike.de>
|
19 |
* @license http://creativecommons.org/licenses/by/3.0/ CC-BY 3.0
|
20 |
*/
|
21 |
+
class Thebod_Shippingrates_Model_Observer
|
22 |
+
{
|
23 |
/**
|
24 |
* observer to send mail notification
|
25 |
*
|
26 |
+
* @param Varien_Event_Observer $observer
|
27 |
+
* @return void
|
28 |
*/
|
29 |
+
public function checkoutTypeOnepageSaveOrderAfter(Varien_Event_Observer $observer)
|
30 |
+
{
|
31 |
+
/* @var $shippingModel Thebod_Shippingrates_Model_Email */
|
32 |
$shippingModel = Mage::getModel('shippingrates/email');
|
33 |
+
$shippingModel->sendEmailNotification($observer->getOrder());
|
34 |
}
|
35 |
}
|
app/code/community/Thebod/Shippingrates/Model/System/Config.php
CHANGED
@@ -16,14 +16,17 @@
|
|
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://
|
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 |
}
|
@@ -31,11 +34,14 @@ class Thebod_Shippingrates_Model_System_Config extends Mage_Core_Model_Config_Da
|
|
31 |
|
32 |
/**
|
33 |
* unserializes array after loading
|
|
|
|
|
34 |
*/
|
35 |
-
protected function _afterLoad()
|
36 |
-
|
|
|
37 |
$value = $this->getValue();
|
38 |
$this->setValue(empty($value) ? false : unserialize(base64_decode($value)));
|
39 |
}
|
40 |
}
|
41 |
-
}
|
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://creativecommons.org/licenses/by/3.0/ CC-BY 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 |
+
* @return void
|
27 |
*/
|
28 |
+
protected function _beforeSave()
|
29 |
+
{
|
30 |
if (is_array($this->getValue())) {
|
31 |
$this->setValue(base64_encode(serialize($this->getValue())));
|
32 |
}
|
34 |
|
35 |
/**
|
36 |
* unserializes array after loading
|
37 |
+
*
|
38 |
+
* @return void
|
39 |
*/
|
40 |
+
protected function _afterLoad()
|
41 |
+
{
|
42 |
+
if (!is_array($this->getValue())) {
|
43 |
$value = $this->getValue();
|
44 |
$this->setValue(empty($value) ? false : unserialize(base64_decode($value)));
|
45 |
}
|
46 |
}
|
47 |
+
}
|
app/code/community/Thebod/Shippingrates/etc/config.xml
CHANGED
@@ -53,4 +53,4 @@
|
|
53 |
</shippingrates>
|
54 |
</carriers>
|
55 |
</default>
|
56 |
-
</config>
|
53 |
</shippingrates>
|
54 |
</carriers>
|
55 |
</default>
|
56 |
+
</config>
|
app/code/community/Thebod/Shippingrates/etc/system.xml
CHANGED
@@ -55,4 +55,4 @@
|
|
55 |
</groups>
|
56 |
</carriers>
|
57 |
</sections>
|
58 |
-
</config>
|
55 |
</groups>
|
56 |
</carriers>
|
57 |
</sections>
|
58 |
+
</config>
|
app/etc/modules/Thebod_Shippingrates.xml
CHANGED
@@ -4,6 +4,9 @@
|
|
4 |
<Thebod_Shippingrates>
|
5 |
<active>true</active>
|
6 |
<codePool>community</codePool>
|
|
|
|
|
|
|
7 |
</Thebod_Shippingrates>
|
8 |
</modules>
|
9 |
-
</config>
|
4 |
<Thebod_Shippingrates>
|
5 |
<active>true</active>
|
6 |
<codePool>community</codePool>
|
7 |
+
<depends>
|
8 |
+
<Mage_Shipping />
|
9 |
+
</depends>
|
10 |
</Thebod_Shippingrates>
|
11 |
</modules>
|
12 |
+
</config>
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Thebod_Shippingrates</name>
|
4 |
-
<version>1.0.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://creativecommons.org/licenses/by/3.0/">CC-BY 3.0</license>
|
7 |
<channel>community</channel>
|
@@ -15,13 +15,11 @@ This simple module lets you define as many shipping methods as you need, with an
|
|
15 |
Very useful for 'pickup-at-store' or if you need a few self-specified fixed rates shipping methods.
|
16 |

|
17 |
Fork me on Github https://github.com/thebod/Thebod_Shippingrates !</description>
|
18 |
-
<notes>*
|
19 |
-

|
20 |
-
* Tested on 1.6, should work on Magento >= 1.4</notes>
|
21 |
<authors><author><name>Bastian Ike</name><user>auto-converted</user><email>thebod@thebod.de</email></author></authors>
|
22 |
-
<date>2012-03-
|
23 |
-
<time>
|
24 |
-
<contents><target name="magecommunity"><dir name="Thebod"><dir name="Shippingrates"><dir name="Block"><dir name="Adminhtml"><file name="Config.php" hash="
|
25 |
<compatible/>
|
26 |
<dependencies/>
|
27 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Thebod_Shippingrates</name>
|
4 |
+
<version>1.0.3</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://creativecommons.org/licenses/by/3.0/">CC-BY 3.0</license>
|
7 |
<channel>community</channel>
|
15 |
Very useful for 'pickup-at-store' or if you need a few self-specified fixed rates shipping methods.
|
16 |

|
17 |
Fork me on Github https://github.com/thebod/Thebod_Shippingrates !</description>
|
18 |
+
<notes>* Added country filter</notes>
|
|
|
|
|
19 |
<authors><author><name>Bastian Ike</name><user>auto-converted</user><email>thebod@thebod.de</email></author></authors>
|
20 |
+
<date>2012-03-26</date>
|
21 |
+
<time>11:51:37</time>
|
22 |
+
<contents><target name="magecommunity"><dir name="Thebod"><dir name="Shippingrates"><dir name="Block"><dir name="Adminhtml"><file name="Config.php" hash="8f644c12b096bc7549f9dfec3b676817"/></dir></dir><dir name="Helper"><file name="Data.php" hash="7b42da8b04f0fd02601694911ee7045d"/></dir><dir name="Model"><dir name="System"><file name="Config.php" hash="bf385822d37c0566d8b3cccf4edb9d59"/></dir><file name="Carrier.php" hash="c5130bdcb828461c3381b0dba4d6f0dc"/><file name="Email.php" hash="b38b57d3c7b5a4ab87dbcb5d2ad00ac1"/><file name="Observer.php" hash="44895836ace80675104b471380bb4497"/></dir><dir name="etc"><file name="config.xml" hash="8f2fd361b067a00a8441233e5870f224"/><file name="system.xml" hash="9d342162dceeebcdeacbfd544dddd350"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Thebod_Shippingrates.xml" hash="3696db1933b77f5e792c2bcc82d8216f"/></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>
|
23 |
<compatible/>
|
24 |
<dependencies/>
|
25 |
</package>
|