我有一个问题,可以检索带有多个数量的订购项目的特定折扣信息。

这是场景。

  1. 价格为100美元的商品。
  2. 该商品的购物车价格规则可享受10美元的折扣,限量为2。
  3. 该项目的数量为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分配。

许可以下: CC-BY-SA归因
scroll top