检索一项订购的一项多个数量的晶粒折扣信息
-
16-10-2019 - |
题
我有一个问题,可以检索带有多个数量的订购项目的特定折扣信息。
这是场景。
- 价格为100美元的商品。
- 该商品的购物车价格规则可享受10美元的折扣,限量为2。
- 该项目的数量为3的订单(应用上述规则)。
对于订单数据,该项目出现在这样的一行上:
- 原价:$ 100
- 数量:3个小计:$ 300
- 折扣金额:$ 20
- 行总计:$ 280
是否有任何方法可以检索规则所应用的项目的总数。在这种情况下,将是2(因为规则仅限于2个数量)。我知道Magento存储了 applied_rule_ids
, 但是,使用此功能并不是检索应用于单个项目的折扣数据的可靠方法,因为在下订单后可以修改购物车价格规则。
似乎Magento并没有告诉您在数量级别上确切地享受折扣的位置。它只是将多个数量分组为一排,并告诉您总体上打折了多少。
是否可以检索 一项 像这样:
- 名称:项目名称|折扣金额:$ 10(折扣)
- 名称:项目名称|折扣金额:$ 10(折扣)
- 名称:项目名称|折扣金额:0(未应用折扣)
而不是现在的情况:
- 名称:项目名称|折扣金额:$ 20(折扣适用于3中的2个)
解决方案
正如Fabian所说,Magento并没有保留有关已应用哪些折扣的太多信息。特别是看一下 mage_salesrule_model_validator
设置的唯一信息是:
$item->setDiscountAmount($discountAmount);
$item->setBaseDiscountAmount($baseDiscountAmount);
$item->setOriginalDiscountAmount($originalDiscountAmount);
$item->setBaseOriginalDiscountAmount($baseOriginalDiscountAmount);
...
$item->setAppliedRuleIds(join(',',$appliedRuleIds));
值得探索的一个途径是此事件:
Mage::dispatchEvent('salesrule_validator_process', array(
'rule' => $rule,
'item' => $item,
'address' => $address,
'quote' => $quote,
'qty' => $qty,
'result' => $result,
));
由于它有可用的数量,因此在您的情况下应该是所需的数量。借助其他$项目,您还可以将自定义列添加到QUOTE_ITEM(然后是订单_item)以保存此信息。这里的最大陷阱是一个项目可以参与多个规则,因此您必须通过$ rule-> getID()保存QTY分配。