Sha256: 818a42f283a0d08f75e931c38b1a4eb1d58fbf345c02e972872a9c88c8692913
Contents?: true
Size: 1.21 KB
Versions: 1
Compression:
Stored size: 1.21 KB
Contents
require_dependency 'spree/calculator' module Spree::Calculator::Shipping::Frenet class Base < Spree::ShippingCalculator def compute(object = nil) # Low level cache to avoid multiple calls since frenet returns all options in the first call shipping_quotes = Rails.cache.fetch("#{object.order.number}/frenet_quotes", expires_in: 10.seconds) do ::Frenet::Api.get_shipping_quote(object) end get_rate_for_shipping_method(shipping_quotes) end def get_rate_for_shipping_method(shipping_quotes) availabe_services = shipping_quotes["ShippingSevicesArray"].reject { |service| service["Error"] == true } quote_for_method = availabe_services.detect { |service| service["ServiceCode"] == shipping_method_service_code } return nil unless quote_for_method { delivery_business_days: quote_for_method["DeliveryTime"], delivery_transit_business_days: quote_for_method["DeliveryTime"], estimated_carrier_price: quote_for_method["ShippingPrice"], cost: quote_for_method["ShippingPrice"], } end def shipping_method_service_code # Constant defined on each shipping method calculator self.class::FRENET_SERVICE_CODE end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
spree_frenet-0.1.2 | app/models/spree/calculator/shipping/frenet/base.rb |