Magento订单的折扣信息

时间:2012-08-09 07:23:26

标签: magento discount orders

我需要促销/优惠券按顺序改变哪个项目的信息以及折扣前这个项目的价格和这个项目的最终价格。我知道,这很复杂,所以这是一个例子:

<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>

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

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

1 个答案:

答案 0 :(得分: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属性,即可获取有关构建正确导出文件的促销类型的信息。