From d8729628141eedd3a557384f68180784edf89501 Mon Sep 17 00:00:00 2001 From: Reinhold Kainhofer <reinhold@kainhofer.com> Date: Tue, 22 Jan 2013 14:01:42 +0100 Subject: [PATCH] Version 1.1.0pre: Implement (max|min)(Length|Width|Height|Volume) and volume variables --- Makefile | 2 +- .../en-GB.plg_vmshipment_rules_shipping.ini | 4 +- ...hipment_rules_shipping_advanced_v1.1.0.zip | Bin 0 -> 15406 bytes .../plg_vmshipment_rules_shipping_v1.1.0.zip | Bin 0 -> 12356 bytes rules_shipping.php | 97 +++++++++++++----- rules_shipping.xml | 2 +- rules_shipping_advanced.xml | 2 +- 7 files changed, 75 insertions(+), 32 deletions(-) create mode 100644 releases/plg_vmshipment_rules_shipping_advanced_v1.1.0.zip create mode 100644 releases/plg_vmshipment_rules_shipping_v1.1.0.zip diff --git a/Makefile b/Makefile index 56fe3db..cbbb226 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ BASE=rules_shipping BASE_ADV=rules_shipping_advanced PLUGINTYPE=vmshipment -VERSION=1.0.0 +VERSION=1.1.0 PLUGINFILES=$(BASE).php $(BASE).script.php $(BASE).xml index.html PLUGINFILES_ADV=$(BASE_ADV).php $(BASE).php $(BASE_ADV).script.php $(BASE_ADV).xml index.html diff --git a/language/en-GB/en-GB.plg_vmshipment_rules_shipping.ini b/language/en-GB/en-GB.plg_vmshipment_rules_shipping.ini index 3b1af16..6547cb7 100644 --- a/language/en-GB/en-GB.plg_vmshipment_rules_shipping.ini +++ b/language/en-GB/en-GB.plg_vmshipment_rules_shipping.ini @@ -14,7 +14,7 @@ VMSHIPMENT_RULES_HELP="<div style='background: #DDDDDD; padding:5px; margin:3px; <ul><li>Each line contains one rule consisting of several <b>conditions and assignments in arbitrary order and separated by semicolons</b>. </li> <li>The <b>first matching rule is used</b> to calculate the shipping costs.</li> <li>All rule parts with <b>comparison operators (<, <=, =<, ==, !=, <>, >=, =>, >)</b> are conditions.</li> -<li> Supported <b>variables (case-insensitive)</b>: <b><tt>Amount</tt></b>, <b><tt>Weight</tt></b>, <b><tt>ZIP</tt></b>, <b><tt>Products</tt></b> (number of different products order), <b><tt>Articles</tt></b> (each product counted with its quantity).</li> +<li> Supported <b>variables (case-insensitive)</b>: <b><tt>Amount</tt></b>, <b><tt>Weight</tt></b>, <b><tt>ZIP</tt></b>, <b><tt>Products</tt></b> (number of different products), <b><tt>Articles</tt></b> (counted with quantity), <b><tt>Volume</tt></b> (total volume of the order) and <b><tt>MinVolume</tt>, <tt>MinLength</tt>, <tt>MinWidth</tt>, <tt>MinHeight</tt></b> as well as the same variables with <tt>Max</tt> instead of <tt>Min</tt>.</li> <li>A condition can consist of multiple chained comparisons.</li> <li>All rule parts of the form <b><tt>[VARIABLE]=VALUE</tt> are assignments</b>, with <tt>[VARIABLE]</tt> being one of <b><tt>Name</tt></b> (optional name of the rule, displayed in the cart and invoice), <b><tt>Shipping</tt></b> (shipping cost if the rule matches). The <tt>Shipping=</tt> can be left out. I.e. a rule part consisting only of a numerical value is understood as shipping cost.</li> </ul> @@ -24,7 +24,7 @@ VMSHIPMENT_RULES_HELP_ADV="<div style='background: #DDDDDD; padding:5px; margin: <ul><li>Each line contains one rule consisting of several <b>conditions and assignments in arbitrary order and separated by semicolons</b>. </li> <li>The <b>first matching rule is used</b> to calculate the shipping costs.</li> <li>All rule parts with <b>comparison operators (<, <=, =<, ==, !=, <>, >=, =>, >)</b> are conditions.</li> -<li> Supported <b>variables (case-insensitive)</b>: <b><tt>Amount</tt></b>, <b><tt>Weight</tt></b>, <b><tt>ZIP</tt></b>, <b><tt>Products</tt></b> (number of different products order), <b><tt>Articles</tt></b> (each product counted with its quantity).</li> +<li> Supported <b>variables (case-insensitive)</b>: <b><tt>Amount</tt></b>, <b><tt>Weight</tt></b>, <b><tt>ZIP</tt></b>, <b><tt>Products</tt></b> (number of different products), <b><tt>Articles</tt></b> (counted with quantity), <b><tt>Volume</tt></b> (total volume of the order) and <b><tt>MinVolume</tt>, <tt>MinLength</tt>, <tt>MinWidth</tt>, <tt>MinHeight</tt></b> as well as the same variables with <tt>Max</tt> instead of <tt>Min</tt>.</li> <li>A condition can consist of multiple chained comparisons.</li> <li>All rule parts of the form <b><tt>[VARIABLE]=VALUE</tt> are assignments</b>, with <tt>[VARIABLE]</tt> being one of <b><tt>Name</tt></b> (optional name of the rule, displayed in the cart and invoice), <b><tt>Shipping</tt></b> (shipping cost if the rule matches). The <tt>Shipping=</tt> can be left out. I.e. a rule part consisting only of a numerical value is understood as shipping cost.</li> <li>In the advanced version, all expressions (conditions and shipping costs) may contain <b>arbitrary basic arithmetic expressions (+, -, *, /, %, ^ and parentheses)</b> of the above variables.</li> diff --git a/releases/plg_vmshipment_rules_shipping_advanced_v1.1.0.zip b/releases/plg_vmshipment_rules_shipping_advanced_v1.1.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..71c2698fe8ca2c5d4845c37e5e472481a0c1a01b GIT binary patch literal 15406 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⪼DanXaDqO>1Lm|doar^A!t)|!^dfrlbwtIB_Ct)?le?RluS9ixFEthL@$ZC z(qfITTXO2wCzU+WmX=)2wMk`FSxM@?w;pEvmG->2up)lD`O#}Wv-FKk)}7q4qfcqt z4Cw&zzC~4uUuM1wXs?rx`EdT@(>IsjILrT;d%gU4)0ODt8_c&tmVNx~S0k&wE4}IN z@=$m66-hs1w(y?tHhwI2KB3@n7{@n@b%I7^-3J;vP79Y`nB{Qi@Xcq6OxFFc{mr*L z`gQ%ZHrJfm`F{OxS?iv>n896Rv1$JQJsLaCojxGC*fz4EHbbwlzOwfE`r8>6H8I~i zH-9R*nYLFs`g~I6jriDH$&4HE(YtdmZP>r@+pPI}lY@S5cYpX0X+X|T)WB(3m{6w- z0|SFR0|SFFa*>7BqiA9MhAkUy4lMat&ezFP5PCx6<k^jzHBaiC^xV4nV*7;{21JHM zw@4D%B1mt8n$~Ie>S6c`UOu2%WMqo9c);&3MkYCCT-*61z}+%N1_p*LjUXnj9uv5H zVr5_kZSF%GstNE$Sa29)DKxSLs@x1{y9XiV9xDSgmPOIX=3)-UBAfeL3Ef=8u0-Ua zSyl#S(9kR%_hXJ=A={&;hT9(Scor)IGnTO|h(~bsh9MS!!hTDmvlatN-<Xww8Pqq% z<6z95F~mGbjJ9hrP~J~wWnc#NlL<HiwK0M0h?|C#IRf6aAnXv#sutNHF2)QvDqc`H zw|v1Ie?TN`^fE!10omjpGbAq}XIWMTW>8UtC+yG-mP9f5E3(0uMGs-)F$))Dcc+*m eg$SCvK}8LQyII*l36-0Ho57off#Iw<hz9_?Jw6)% literal 0 HcmV?d00001 diff --git a/releases/plg_vmshipment_rules_shipping_v1.1.0.zip b/releases/plg_vmshipment_rules_shipping_v1.1.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..97ee94ce54995548e32170d87491efefb4ec0be4 GIT binary patch literal 12356 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 literal 0 HcmV?d00001 diff --git a/rules_shipping.php b/rules_shipping.php index 360c569..e11f970 100644 --- a/rules_shipping.php +++ b/rules_shipping.php @@ -218,14 +218,8 @@ class plgVmShipmentRules_Shipping extends vmPSPlugin { */ function getCosts (VirtueMartCart $cart, $method, $cart_prices) { if (empty($method->rules)) $this->parseMethodRules($method); + $cartvals = $this->getCartValues ($cart, $cart_prices); - $address = (($cart->ST == 0) ? $cart->BT : $cart->ST); - $cartvals = array('weight' => $this->getOrderWeight ($cart, $method->weight_unit), - 'zip' => $address['zip'], - 'articles' => $this->getOrderArticles ($cart), - 'products' => $this->getOrderProducts ($cart), - 'amount' => $cart_prices['salesPrice'], - 'country' => $address['virtuemart_country_id']); foreach ($method->rules as $r) { if ($r->matches($cartvals)) { $method->tax_id = $r->tax_id; @@ -276,6 +270,35 @@ class plgVmShipmentRules_Shipping extends vmPSPlugin { return $articles; } + protected function getOrderDimensions (VirtueMartCart $cart) { + /* Cache the value in a static variable and calculate it only once! */ + static $calculated = 0; + static $dimensions=array( + 'volume' => 0, + 'maxvolume' => 0, 'minvolume' => 9999999999, + 'maxlength' => 0, 'minlength' => 9999999999, + 'maxwidth' => 0, 'minwidth' => 9999999999, + 'maxheight' => 0, 'minheight' => 9999999999, + ); + if ($calculated==0) { + $calculated=1; + foreach ($cart->products as $product) { + $volume = $product->product_length * $product->product_width * $product->product_height; + $dimensions['volume'] += $volume * $product->quantity; + $dimensions['maxvolume'] = max ($dimensions['maxvolume'], $volume); + $dimensions['minvolume'] = min ($dimensions['minvolume'], $volume); + $dimensions['maxlength'] = max ($dimensions['maxlength'], $product->product_length); + $dimensions['minlength'] = min ($dimensions['minlength'], $product->product_length); + $dimensions['maxwidth'] = max ($dimensions['maxwidth'], $product->product_width); + $dimensions['minwidth'] = min ($dimensions['minwidth'], $product->product_width); + $dimensions['maxheight'] = max ($dimensions['maxheight'], $product->product_height); + $dimensions['minheight'] = min ($dimensions['minheight'], $product->product_height); + $articles += $product->quantity; + } + } + return $dimensions; + } + protected function getOrderProducts (VirtueMartCart $cart) { /* Cache the value in a static variable and calculate it only once! */ static $products = 0; @@ -284,18 +307,10 @@ class plgVmShipmentRules_Shipping extends vmPSPlugin { } return $products; } - - - /** - * @param \VirtueMartCart $cart - * @param int $method - * @param array $cart_prices - * @return bool - */ - protected function checkConditions ($cart, $method, $cart_prices) { - if (empty($method->rules)) $this->parseMethodRules($method); - + + protected function getCartValues (VirtueMartCart $cart, $cart_prices) { $orderWeight = $this->getOrderWeight ($cart, $method->weight_unit); + $dimensions = $this->getOrderDimensions ($cart); $address = (($cart->ST == 0) ? $cart->BT : $cart->ST); $products = 0; @@ -304,13 +319,36 @@ class plgVmShipmentRules_Shipping extends vmPSPlugin { $products += 1; $articles += $product->quantity; } - $cartvals = array('weight'=>$orderWeight, 'zip'=>$address['zip'], 'articles'=>$articles, 'products'=>$products, 'amount'=>$cart_prices['salesPrice'], - 'country'=>$address['virtuemart_country_id']); + 'country'=>$address['virtuemart_country_id'], + 'volume' => $dimensions['volume'], + 'maxvolume' => $dimensions['maxvolume'], + 'minvolume' => $dimensions['minvolume'], + 'maxlength' => $dimensions['maxlength'], + 'minlength' => $dimensions['minlength'], + 'maxwidth' => $dimensions['maxwidth'], + 'minwidth' => $dimensions['minwidth'], + 'maxheight' => $dimensions['maxheight'], + 'minheight' => $dimensions['minheight'] + ); + return $cartvals; + } + + + /** + * @param \VirtueMartCart $cart + * @param int $method + * @param array $cart_prices + * @return bool + */ + protected function checkConditions ($cart, $method, $cart_prices) { + if (empty($method->rules)) $this->parseMethodRules($method); + + $cartvals = $this->getCartValues ($cart, $cart_prices); foreach ($method->rules as $r) { if ($r->matches($cartvals)) { $method->matched_rule = $r; @@ -438,8 +476,9 @@ class ShippingRule { var $rulestring = ''; var $countries = array(); var $tax_id = 0; - var $conditions=array(); - var $shipping=0; + var $conditions = array(); + var $shipping = 0; + var $shippingWithTax = 0; var $name = ''; function __construct ($rule, $countries, $tax_id) { @@ -453,6 +492,14 @@ class ShippingRule { $this->parseRule($rule); } + function handleAssignment ($variable, $value, $rulepart) { + switch ($variable) { + case 'shipping': $this->shipping = $this->parseShippingTerm($value); break; + case 'shippingwithtax': $this->shippingWithTax = $this->parseShippingTerm($value); break; + case 'name': $this->name = $value; break; + default: JFactory::getApplication()->enqueueMessage(JText::sprintf('VMSHIPMENT_RULES_UNKNOWN_VARIABLE', $variable, $rulepart), 'error'); + } + } function parseRule($rule) { $ruleparts=explode(';', $rule); $operators = array('<', '<=', '=', '>', '>=', '=>', '=<', '<>', '!=', '=='); @@ -464,11 +511,7 @@ class ShippingRule { if (count($atoms)==1) { $this->shipping = $this->parseShippingTerm($atoms[0]); } elseif ($atoms[1]=='=') { - switch (strtolower($atoms[0])) { - case 'shipping': $this->shipping = $this->parseShippingTerm($atoms[2]); break; - case 'name': $this->name = $atoms[2]; break; - default: JFactory::getApplication()->enqueueMessage(JText::sprintf('VMSHIPMENT_RULES_UNKNOWN_VARIABLE', $atoms[0], $p), 'error'); - } + $this->handleAssignment (strtolower($atoms[0]), $atoms[2], $p); } else { // Conditions, need at least three atoms! while (count($atoms)>1) { diff --git a/rules_shipping.xml b/rules_shipping.xml index 35e1434..a1805d4 100644 --- a/rules_shipping.xml +++ b/rules_shipping.xml @@ -6,7 +6,7 @@ <authorUrl>http://www.kainhofer.com</authorUrl> <copyright>Copyright (C) 2013, Reinhold Kainhofer</copyright> <license>GPL v3+</license> - <version>1.0.0</version> + <version>1.1.0</version> <description>VMSHIPMENT_RULES_DESC</description> <files> <filename plugin="rules_shipping">rules_shipping.php</filename> diff --git a/rules_shipping_advanced.xml b/rules_shipping_advanced.xml index 3718b56..71fe475 100644 --- a/rules_shipping_advanced.xml +++ b/rules_shipping_advanced.xml @@ -6,7 +6,7 @@ <authorUrl>http://www.kainhofer.com</authorUrl> <copyright>Copyright (C) 2013, Reinhold Kainhofer</copyright> <license>GPL v3+</license> - <version>1.0.0</version> + <version>1.1.0</version> <description>VMSHIPMENT_RULES_ADV_DESC</description> <files> <filename plugin="rules_shipping_advanced">rules_shipping_advanced.php</filename> -- GitLab