parent
9fbc21d25a
commit
3274db3d7e
@ -0,0 +1,47 @@
|
||||
# AGPLv3 sysmocom s.f.m.c. GmbH
|
||||
|
||||
module Spree
|
||||
class Calculator::SysmocomMailValueCalculator < Calculator
|
||||
|
||||
def self.description
|
||||
I18n.t(:sysmocom_mail_value_based)
|
||||
end
|
||||
|
||||
def total_value_no_tax(o)
|
||||
item_total = o.line_items.map(&:amount).sum
|
||||
item_total
|
||||
end
|
||||
|
||||
def extract_iso_code(o)
|
||||
if o.kind_of?(Spree::Shipment)
|
||||
return o.address.country.iso
|
||||
end
|
||||
return o.ship_address.country.iso
|
||||
end
|
||||
|
||||
def compute(object)
|
||||
# This could be more than an order but not right now
|
||||
shipping_value = total_value_no_tax(object)
|
||||
iso_code = extract_iso_code(object)
|
||||
|
||||
base = 6.5
|
||||
if iso_code == 'DE'
|
||||
base = 4.6
|
||||
end
|
||||
|
||||
# We need to add insurance..
|
||||
if shipping_value < 30
|
||||
# Plain registered letter
|
||||
return base
|
||||
elsif shipping_value > 300
|
||||
# Stops making sense to send it..
|
||||
return 200
|
||||
end
|
||||
|
||||
return base + (((shipping_value.round / 100) + 1) * 1.5)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
Reference in new issue