From ac9e54666b2c87e7f559b38bdce844da11921cfe Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 23 Jan 2017 12:04:10 +0100 Subject: [PATCH] sysmocom_value_calculator: Update to 2017 pricing/zones of Deutsche Post --- .../calculator/sysmocom_value_calculator.rb | 183 ++++++++++-------- 1 file changed, 97 insertions(+), 86 deletions(-) diff --git a/app/models/spree/calculator/sysmocom_value_calculator.rb b/app/models/spree/calculator/sysmocom_value_calculator.rb index bc54fb8..0eea5af 100644 --- a/app/models/spree/calculator/sysmocom_value_calculator.rb +++ b/app/models/spree/calculator/sysmocom_value_calculator.rb @@ -8,85 +8,95 @@ module Spree end ZONE1 = { + "AT" => 1, "BE" => 1, "BG" => 1, + "HR" => 1, + "CZ" => 1, "DK" => 1, "EE" => 1, "FI" => 1, "FR" => 1, "GR" => 1, - "GB" => 1, + "HU" => 1, "IE" => 1, "IT" => 1, "LV" => 1, + "LT" => 1, "LU" => 1, "MT" => 1, "MC" => 1, "NL" => 1, - "AT" => 1, "PL" => 1, "PT" => 1, "RO" => 1, - "SE" => 1, "SK" => 1, "SI" => 1, "ES" => 1, - "CZ" => 1, - "HU" => 1, - "CY" => 1 + "SE" => 1, + "GB" => 1 }.freeze() -ZONE2 = { -#"Älandinseln (Finnland)" - "AD" => 1, - "AL" => 1, - "BY" => 1, -#Berg Athos - "BA" => 1, -#Campione d'Italia Italien -#Ceuta..Spanien - "FO" => 1, - "GE" => 1, - "GI" => 1, - "IS" => 1, -#Kanalinseln (Großbritannien) -#Kanarische Inseln (Spanien) -#Kosovo - "HR" => 1, - "LI" => 1, -#Livigno - "MK" => 1, - "MD" => 1, -#Melila (Spanien) -#Montenegro - "NO" => 1, - "CH" => 1, - "RU" => 1, - "SM" => 1, - "RS" => 1, - "TR" => 1, - "UA" => 1, - "VA" => 1, + ZONE2 = { + "CH" => 1 + }.freeze() + + ZONE3 = { + "AL" => 1, + "AD" => 1, + "BY" => 1, + "BA" => 1, + "CY" => 1, + "FO" => 1, + "GE" => 1, + "GI" => 1, + "GL" => 1, + "GG" => 1, + "VA" => 1, + "IS" => 1, + "JE" => 1, + "KZ" => 1, + "LI" => 1, + "MK" => 1, + "MD" => 1, + "ME" => 1, + "NO" => 1, + "SM" => 1, + "RS" => 1, + "TR" => 1, + "UA" => 1, + "AX" => 1 }.freeze -ZONE3 = { - "EG" => 1, - "DZ" => 1, - "AM" => 1, - "AZ" => 1, - "IL" => 1, - "JO" => 1, - "CA" => 1, - "KZ" => 1, - "LB" => 1, - "LY" => 1, - "MA" => 1, -#Palästinensische Gebiete - "PM" => 1, - "SY" => 1, - "TN" => 1, - "US" => 1, -}.freeze + ZONE4 = { + "RU" => 1 + }.freeze() + + ZONE5 = { + "US" => 1 + }.freeze() + + ZONE6 = { + "DZ" => 1, + "AM" => 1, + "AZ" => 1, + "CA" => 1, + "EG" => 1, + "IL" => 1, + "JO" => 1, + "KZ" => 1, + "LB" => 1, + "LY" => 1, + "MA" => 1, + "PS" => 1, + "PM" => 1, + "SY" => 1, + "TN" => 1 + }.freeze() + + ZONE7 = { + "CN" => 1 + }.freeze() def packages_price(value, limit, price_each) price = 0 @@ -102,51 +112,44 @@ ZONE3 = { price end + # we choose pricing between 2kg and 5gk def price_germany(value) - # 6 Euro and up to 500 Euro in Value for a 2kg package - # http://www.dhl.de/dhl-paket return packages_price(value, 500, 6.0) end + # We assume a 5kg package in all zones below def price_package_zone1(value) - # 17 Euro and up to 500 Euro in value for a 5kg package or - # 2kg registered parcel with 35 Euro of value... - # http://www.dhl.de/de/paket/pakete-versenden/weltweit-versenden/paket.html - if value < 35 - return packages_price(value, 35, 12) - else - return packages_price(value, 500, 17.0) - end + return packages_price(value, 500, 17.0) end def price_package_zone2(value) - # 5kg package - # TODO: for the last item we could check for 74.11 again - if value < 74.11 - return packages_price(value, 74.11, 32) - else - return packages_price(value, 500, 38) - end + return packages_price(value, 500, 29) end def price_package_zone3(value) - # 5kg package - # TODO see zone2 - if value < 74.11 - return packages_price(value, 74.11, 38) - else - return packages_price(value, 500, 54) - end + return packages_price(value, 500, 30) end def price_package_zone4(value) - if value < 74.11 - return packages_price(value, 74.11, 44) - else - return packages_price(value, 500, 66) - end + return packages_price(value, 500, 33) end - + + def price_package_zone5(value) + return packages_price(value, 500, 38) + end + + def price_package_zone6(value) + return packages_price(value, 500, 40) + end + + def price_package_zone7(value) + return packages_price(value, 500, 60) + end + + def price_package_zone8(value) + return packages_price(value, 500, 63) + end + def total_value_no_tax(o) item_total = o.line_items.map(&:amount).sum @@ -174,8 +177,16 @@ ZONE3 = { return price_package_zone2(shipping_value) elsif ZONE3.has_key?(iso_code) return price_package_zone3(shipping_value) - else + elsif ZONE4.has_key?(iso_code) return price_package_zone4(shipping_value) + elsif ZONE5.has_key?(iso_code) + return price_package_zone5(shipping_value) + elsif ZONE6.has_key?(iso_code) + return price_package_zone6(shipping_value) + elsif ZONE7.has_key?(iso_code) + return price_package_zone7(shipping_value) + else + return price_package_zone8(shipping_value) end end