2015-10-20 46 views
2

我正在尝试计算运费,具体取决于使用Fedex Gem https://github.com/jazminschroeder/fedex购买的产品的总数量。我得到的速度,但我有不同的包选项,其实3。当数量为1(小)时为第一个,当数量为2(中)时为第二个,当数量为3或4(较大)时为第三个。Fedex gem,倍数套餐

def packages_types 
    packages = [] 
    if @order.quantity >= 4 
     packages << { :weight => {:units => "LB", :value => @order.case_weight}, 
        :dimensions => {:length => 8, :width => 1, :height => 7, :units => "IN" } } 
    elsif @order.quantity == 2 
     packages << { :weight => {:units => "LB", :value => 21}, 
        :dimensions => {:length => 1, :width => 2, :height => 7, :units => "IN" } } 
    elsif @order.quantity == 1 
     packages << { :weight => {:units => "LB", :value => 10}, 
        :dimensions => {:length => 1, :width => 2, :height => 2, :units => "IN" } } 
    end 
end 

所以,如果客户订购5数量。这将是4个(大)和1个小包装的包装。我用的模想...

+0

你在这里有什么问题? – MrYoshiji

+0

问题是...取决于数量是否超过4 ...如果数量是5,如何选择使用大包装和1小包装 – Jose14

回答

0
def packages_types 
    packages    = [] 
    extra_items_count  = @order.quantity % 4 
    large_packages_needed = (@order.quantity - extra_items_count)/4 

    # point A 
    large_packages_needed.times do 
    packages << { :weight  => { :units => "LB", :value => @order.case_weight }, 
        :dimensions => { :length => 8, :width => 1, :height => 7, :units => "IN" } } 
    end 

    # point B 
    case extra_items_count 
    when 1 
    packages << { :weight  => { :units => "LB", :value => 10 }, 
        :dimensions => { :length => 1, :width => 2, :height => 2, :units => "IN" } } 
    when 2 
    packages << { :weight  => { :units => "LB", :value => 21 }, 
        :dimensions => { :length => 1, :width => 2, :height => 7, :units => "IN" } } 
    when 3, 4 
    packages << { :weight  => { :units => "LB", :value => @order.case_weight }, 
        :dimensions => { :length => 8, :width => 1, :height => 7, :units => "IN" } } 
    end 

    return packages 
end 

点A:对于每个组的4个项目中,需要一个大的包(并添加到packages数组)。

点B:对于其余的项目(例如:所订购的项目5 - > 1大包的4项+ 1小1的剩余项),我们添加package阵列中的相应条件。