0

我需要哪些促销/优惠券按顺序更改了哪些商品以及该商品在折扣前的价格和该商品的最终价格是多少。我知道,这很复杂,所以这里有一个例子:

<order>
<items>
<item> <!-- This item have discount in order -->
<sku>1234</sku>
<promotion>
<promo_id>456</promo_id>
<discount_value>10</discount_value><!-- In % or $ -->
</promotion>
<final_price>25</final_price>
</item>
<item><!-- This item don't have discount in order -->
<sku>1234</sku>
<promotion/>
<final_price>35</final_price>
</item>
</items>
</order>

我希望这是可以理解的解释。感谢所有帮助。

编辑:我忘记了一件事。我只有来自销售/订单模型的信息。这是一个接口,所以我无法访问会话数据,我从数据库中获得经过验证的订单。

4

1 回答 1

8

您可以轻松地从订单项目模型中检索应用的购物车规则 ID。

  1. 您需要遍历订单项目以收集所有应用的规则 ID 到项目:

    $collectedRuleIds = array();
    $itemRules = array();
    foreach ($order->getAllVisibleItems() as $orderItem) {
        if ($orderItem->getAppliedRuleIds()) {
            $itemRules[$orderItem->getId()] = explode(',', $orderItem->getAppliedRuleIds());
            $collectedRuleIds = array_merge($collectedRuleIds, $itemRules[$orderItem->getId()]);
        }
    }
    
  2. 然后加载规则集合,检索规则信息并将其分配给订单项。

    $rules = false;
    if ($collectedRuleIds) {
        $rules = Mage::getModel('salesrule/rule')->getCollection()->addFieldToFilter('rule_id', array('in' => $collectedRuleIds));
    }
    
    if ($rules) {
        foreach ($itemRules as $itemId => $ruleIds) {
            $orderItem = $order->getItemById($itemId);
            $appliedRules = array();
            foreach ($ruleIds as $ruleId) {
                if ($rules->getItemById($ruleId)) {
                    $appliedRules[] = $rules->getItemById($ruleId);
                }
            }
            $orderItem->setAppliedRules($appliedRules);
        }
    }
    
  3. 在导出数据期间,只需检查订单项的 getAppliedRules 属性即可获取有关促销类型的信息,以构建正确的导出文件。

于 2012-08-09T09:13:47.493 回答