Magento 订单折扣信息

问题描述 投票:0回答:1

我需要了解哪个促销/优惠券改变了订单中的哪个商品,以及该商品在折扣前的价格是多少以及该商品的最终价格。我知道,这很复杂,所以这是一个例子:

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

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

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

php magento orders discount
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 属性即可获取有关促销类型的信息,以便构建正确的导出文件。

© www.soinside.com 2019 - 2024. All rights reserved.