# 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