【发布时间】:2011-11-22 03:32:23
【问题描述】:
我被困在合并一些哈希以获得我需要的结果。
哈希包含订单总价的明细,例如订阅中所有订单的商品价格、税金和运费。我正在尝试动态执行此操作,因为并非所有订单都收取税费,甚至相同税或运费。
这就是我正在处理的“最坏情况”:
#First order - has charges for Canadian GST and HST
{:orderhdr_id=>17654122, :order_item_seq=>1, :order_item_amt_break_seq=>1, :order_item_break_type=>0, :local_amount=>8.16, :base_amount=>8.16, :orig_base_amount=>149, :tax_delivery=>0, :tax_active=>0}
{:orderhdr_id=>17654122, :order_item_seq=>1, :order_item_amt_break_seq=>2, :order_item_break_type=>1, :local_amount=>0.41, :base_amount=>0.41, :state=>"ON", :tax_type=>"GST", :tax_rate_category=>"STD", :orig_base_amount=>7.45, :tax_rate=>5, :tax_delivery=>0, :tax_active=>1, :tx_incl=>1}
{:orderhdr_id=>17654122, :order_item_seq=>1, :order_item_amt_break_seq=>3, :order_item_break_type=>1, :local_amount=>0.65, :base_amount=>0.65, :state=>"ON", :tax_type=>"HST", :tax_rate_category=>"STD", :orig_base_amount=>11.92, :tax_rate=>8, :tax_delivery=>0, :tax_active=>1, :tx_incl=>1}
#Second order - has only one charge for tax
{:orderhdr_id=>1815296, :order_item_seq=>1, :order_item_amt_break_seq=>1, :order_item_break_type=>0, :local_amount=>76.52, :base_amount=>76.52, :orig_base_amount=>99.95, :tax_delivery=>0, :tax_active=>0}
{:orderhdr_id=>1815296, :order_item_seq=>1, :order_item_amt_break_seq=>2, :order_item_break_type=>1, :local_amount=>4.59, :base_amount=>4.59, :orig_base_amount=>6, :tax_delivery=>0, :tax_active=>1}
#Third order - has charge for shipping
{:orderhdr_id=>6112412, :order_item_seq=>1, :order_item_amt_break_seq=>1, :order_item_break_type=>0, :local_amount=>21.34, :base_amount=>21.34, :orig_base_amount=>99.95, :tax_delivery=>0, :tax_active=>0}
{:orderhdr_id=>6112412, :order_item_seq=>1, :order_item_amt_break_seq=>2, :order_item_break_type=>2, :local_amount=>4.7, :base_amount=>4.7, :orig_base_amount=>22, :tax_delivery=>0, :tax_active=>0}
:order_item_break_type 确定收费的类型、项目、税金、运费。
如果 :order_item_break_type 是 0 或 2,则从 :orig_base_amount 中减去 :base_amount 并将其添加到该中断类型的总和中。对于:order_item_break_type 等于1,我需要总结:orig_base_amount 和:base_amount 的差异,但是我需要将不同的税分开。
因此,对于上述订单,我应该得到以下结果:
:break_type = 0 | total = 242.88
:break_type = 1, :state = ON, :tax_type = GST, :tax_rate_category = STD | total = 7.04
:break_type = 1, :state = ON, :tax_type = HST, :tax_rate_category = STD | total = 11.27
:break_type = 1 | total = 1.41
:break_type = 2 | total = 17.30
我将这些哈希值放在一个名为 @amounts 的数组中。
我脑子里有诸如merge!、inject、shift 之类的方法,但无法将它们放在一起。
【问题讨论】:
-
不清楚结果与订单的关系。也就是说,我看到三个订单和五个结果。你能澄清一下吗?
-
结果是
:orig_base_amount - :base_amount的总和,每个费用按:break_type、:state、:tax_type和:tax_rate_category的唯一组合分组。我倾向于看待它的方式是,与有 3 个订单和 5 个结果相反,有 7 个费用减少到 5 个结果。谢谢!