sysmocom_value_calculator: Update to 2017 pricing/zones of Deutsche Post

This commit is contained in:
Harald Welte 2017-01-23 12:04:10 +01:00
parent 3274db3d7e
commit ac9e54666b
1 changed files with 97 additions and 86 deletions

View File

@ -8,85 +8,95 @@ module Spree
end end
ZONE1 = { ZONE1 = {
"AT" => 1,
"BE" => 1, "BE" => 1,
"BG" => 1, "BG" => 1,
"HR" => 1,
"CZ" => 1,
"DK" => 1, "DK" => 1,
"EE" => 1, "EE" => 1,
"FI" => 1, "FI" => 1,
"FR" => 1, "FR" => 1,
"GR" => 1, "GR" => 1,
"GB" => 1, "HU" => 1,
"IE" => 1, "IE" => 1,
"IT" => 1, "IT" => 1,
"LV" => 1, "LV" => 1,
"LT" => 1,
"LU" => 1, "LU" => 1,
"MT" => 1, "MT" => 1,
"MC" => 1, "MC" => 1,
"NL" => 1, "NL" => 1,
"AT" => 1,
"PL" => 1, "PL" => 1,
"PT" => 1, "PT" => 1,
"RO" => 1, "RO" => 1,
"SE" => 1,
"SK" => 1, "SK" => 1,
"SI" => 1, "SI" => 1,
"ES" => 1, "ES" => 1,
"CZ" => 1, "SE" => 1,
"HU" => 1, "GB" => 1
"CY" => 1
}.freeze() }.freeze()
ZONE2 = { ZONE2 = {
#"Älandinseln (Finnland)" "CH" => 1
"AD" => 1, }.freeze()
"AL" => 1,
"BY" => 1, ZONE3 = {
#Berg Athos "AL" => 1,
"BA" => 1, "AD" => 1,
#Campione d'Italia Italien "BY" => 1,
#Ceuta..Spanien "BA" => 1,
"FO" => 1, "CY" => 1,
"GE" => 1, "FO" => 1,
"GI" => 1, "GE" => 1,
"IS" => 1, "GI" => 1,
#Kanalinseln (Großbritannien) "GL" => 1,
#Kanarische Inseln (Spanien) "GG" => 1,
#Kosovo "VA" => 1,
"HR" => 1, "IS" => 1,
"LI" => 1, "JE" => 1,
#Livigno "KZ" => 1,
"MK" => 1, "LI" => 1,
"MD" => 1, "MK" => 1,
#Melila (Spanien) "MD" => 1,
#Montenegro "ME" => 1,
"NO" => 1, "NO" => 1,
"CH" => 1, "SM" => 1,
"RU" => 1, "RS" => 1,
"SM" => 1, "TR" => 1,
"RS" => 1, "UA" => 1,
"TR" => 1, "AX" => 1
"UA" => 1,
"VA" => 1,
}.freeze }.freeze
ZONE3 = { ZONE4 = {
"EG" => 1, "RU" => 1
"DZ" => 1, }.freeze()
"AM" => 1,
"AZ" => 1, ZONE5 = {
"IL" => 1, "US" => 1
"JO" => 1, }.freeze()
"CA" => 1,
"KZ" => 1, ZONE6 = {
"LB" => 1, "DZ" => 1,
"LY" => 1, "AM" => 1,
"MA" => 1, "AZ" => 1,
#Palästinensische Gebiete "CA" => 1,
"PM" => 1, "EG" => 1,
"SY" => 1, "IL" => 1,
"TN" => 1, "JO" => 1,
"US" => 1, "KZ" => 1,
}.freeze "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) def packages_price(value, limit, price_each)
price = 0 price = 0
@ -102,51 +112,44 @@ ZONE3 = {
price price
end end
# we choose pricing between 2kg and 5gk
def price_germany(value) 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) return packages_price(value, 500, 6.0)
end end
# We assume a 5kg package in all zones below
def price_package_zone1(value) def price_package_zone1(value)
# 17 Euro and up to 500 Euro in value for a 5kg package or return packages_price(value, 500, 17.0)
# 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
end end
def price_package_zone2(value) def price_package_zone2(value)
# 5kg package return packages_price(value, 500, 29)
# 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
end end
def price_package_zone3(value) def price_package_zone3(value)
# 5kg package return packages_price(value, 500, 30)
# TODO see zone2
if value < 74.11
return packages_price(value, 74.11, 38)
else
return packages_price(value, 500, 54)
end
end end
def price_package_zone4(value) def price_package_zone4(value)
if value < 74.11 return packages_price(value, 500, 33)
return packages_price(value, 74.11, 44)
else
return packages_price(value, 500, 66)
end
end 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) def total_value_no_tax(o)
item_total = o.line_items.map(&:amount).sum item_total = o.line_items.map(&:amount).sum
@ -174,8 +177,16 @@ ZONE3 = {
return price_package_zone2(shipping_value) return price_package_zone2(shipping_value)
elsif ZONE3.has_key?(iso_code) elsif ZONE3.has_key?(iso_code)
return price_package_zone3(shipping_value) return price_package_zone3(shipping_value)
else elsif ZONE4.has_key?(iso_code)
return price_package_zone4(shipping_value) 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
end end