我目前正在实施一个插件来管理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
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的默认折扣系统并排运行,也不会影响税收计算等.
希望,这有助于有人在解决同样的问题.