7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'app/models/caboose/shipping_calculator.rb', line 7
def self.rates(order)
return [] if Caboose::store_shipping.nil?
ss = Caboose::store_shipping
origin = Location.new(
:country => ss[:origin][:country],
:state => ss[:origin][:state],
:city => ss[:origin][:city],
:zip => ss[:origin][:zip]
)
destination = Location.new(
:country => ss[:origin][:country],
:state => order.shipping_address.state,
:city => order.shipping_address.city,
:postal_code => order.shipping_address.zip
)
ups = ss[:ups] ? UPS.new(:key => ss[:ups][:key], :login => ss[:ups][:username], :password => ss[:ups][:password], :origin_account => ss[:ups][:origin_account]) : nil
usps = ss[:usps] ? USPS.new(:login => ss[:usps][:username]) : nil
all_rates = []
order.packages.each do |op|
sp = op.shipping_package
package = op.activemerchant_package
rates = []
if ups
resp = ups.find_rates(origin, destination, package)
resp.rates.sort_by(&:price).each do |rate|
next if rate.service_code != sp.service_code
rates << { :carrier => 'UPS', :service_code => rate.service_code, :service_name => rate.service_name, :price => rate.total_price.to_d / 100 }
end
end
if usps
resp = usps.find_rates(origin, destination, package)
resp.rates.sort_by(&:price).each do |rate|
next if rate.service_code != sp.service_code
rates << { :carrier => 'USPS', :service_code => rate.service_code, :service_name => rate.service_name, :total_price => rate.total_price.to_d / 100 }
end
end
all_rates << [op, rates]
end
return all_rates
end
|