如何以编程方式将magento销售规则应用于报价项目

Joa*_*opf 5 php magento

我目前正在实施一个插件来管理magento商店系统中的报价请求.我们的想法是,请求与报价相关联,后端中的某个人应该能够为每个报价项应用单独的销售规则.

实现在前端和后端创建和编辑所涉及实体的功能没有问题.但我无法将某个销售规则应用于报价项目,并将该规则反映在行总计中以及报价的小计中.

我目前的方法是使用sales_quote_address_discount_item-Hook.在那里,我使用派生的类的实例,Mage_SalesRule_Model_Validator从中重载_getRules()-Method给出相关的Mage_SalesRule_Model_Rules.事件观察者的相关代码如下:

$quote_item = $event->getItem();

$request_item = $this->helper->getRequestItemByQuoteItemId($quote_item->getItemId());
if (! $this->isRelevantRequestItem($request_item))
    return $this;

$validator = Mage::getModel("requestquotation/request_validator")
                 ->addRule($request_item->getRule());
$validator->process($quote_item);
Run Code Online (Sandbox Code Playgroud)

当我通过process()-Method 使用调试器时,我提供的规则可以工作并应用于引用项.但是collectTotals()在报价上的任何进一步和$quote_item->save()对行总数和报价小计没有影响.

是否有任何文档或示例如何添加销售规则(在我看来更好,因为它是可追踪的)或手动折扣,以编程方式添加到报价项目和/或报价本身.

提前谢谢你,最诚挚的问候!

约阿希姆

Ant*_*n S 20

Chuck Norris是唯一拥有Magento文档的人.但是,在调用collectTotals()之前,您可以尝试将收集的标志设置为false:

$quote->setTotalsCollectedFlag(false)->collectTotals();
Run Code Online (Sandbox Code Playgroud)

并且可选地,如果在同一对象实例中多次调用collectTotals之后最终得到错误的总数,则需要注意以下问题:

http://www.magentocommerce.com/bug-tracking/issue?issue=11893

  • lol @ Chuck Norris只有Magento docs :) (10认同)

Joa*_*opf 11

不幸的是Chuck目前没有做咨询工作.所以我不得不深入研究纠缠的magento折扣计算.

重新计算totals_collected_flag是恕我直言,没有选项,因为它触发税收计算两次,这意味着报价总计完全错误.

我成功通过实施新的填充我自己的折扣类型Mage_Sales_Model_Quote_Address_Total_Abstract.这个是使用它的collect()方法 - 一个稍微定制的版本,Mage_SalesRule_Model_Validator根据我的折扣策略加载自定义销售规则.

通过将以下XML添加到模块配置,自定义类包含在Magento总计算中.

<global>
    ... 
    <sales>
        <quote>
           <totals>
               <requestquotation_discount>
                   <class>requestquotation/request_discount</class>
                   <after>discount</after>
                   <before>grand_total</before>
               </requestquotation_discount>
           </totals>
        </quote>
    </sales>
</global>
Run Code Online (Sandbox Code Playgroud)

在实现中,总计计算器的"代码"设置为"折扣",并且不重置先前计算的折扣.使用此方法,自定义折扣可以与Magento的默认折扣系统并排运行,也不会影响税收计算等.

希望,这有助于有人在解决同样的问题.