Php 如何以编程方式将magento销售规则应用于报价项目
我目前正在实施一个插件来管理magento商店系统中的报价请求。其思想是,请求与报价关联,后端的某个人应该能够对每个报价项应用单独的销售规则 实现在前端和后端创建和编辑相关实体的功能没有问题。但我无法将某个销售规则应用于报价项,并将该规则反映在报价的行合计和小计中 我目前的方法是使用Php 如何以编程方式将magento销售规则应用于报价项目,php,magento,Php,Magento,我目前正在实施一个插件来管理magento商店系统中的报价请求。其思想是,请求与报价关联,后端的某个人应该能够对每个报价项应用单独的销售规则 实现在前端和后端创建和编辑相关实体的功能没有问题。但我无法将某个销售规则应用于报价项,并将该规则反映在报价的行合计和小计中 我目前的方法是使用sales\u quote\u address\u discount\u item-Hook。在这里,我使用了一个从Mage\u SalesRule\u Model\u Validator派生的类的实例,该类重载了\
sales\u quote\u address\u discount\u item
-Hook。在这里,我使用了一个从Mage\u SalesRule\u Model\u Validator
派生的类的实例,该类重载了\u getRules()
-方法给出了相关的Mage\u SalesRule\u Model\u Rule
s。事件观察者的相关代码如下所示:
$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);
当我通过process()
-方法使用调试器时,我提供的规则起作用并应用于报价项。但是,对报价和$quote\u item->save()
的任何进一步collectTotals()
都不会影响报价的行总计和小计
是否有任何文档或示例说明如何向报价项目和/或报价本身手动、编程地添加销售规则(我认为最好是可跟踪的)或折扣
提前感谢您,并致以最良好的问候
JoachimChuck Norris是唯一拥有Magento文档的人。但在调用collectTotals()之前,您可以尝试将collected标志设置为false: 或者,如果在同一对象实例中多次调用collectTotals后得到错误的总计,则需要注意以下问题:
不幸的是,Chuck目前没有做咨询工作。因此,我不得不深入研究陷入困境的magento折扣计算 通过
totals\u collected\u flag
重新计算没有选项,因为它会触发两次税务计算,这意味着报价总额完全错误
通过实现新的Mage\u Sales\u Model\u Quote\u Address\u Total\u Abstract
,我成功地填充了我自己的折扣类型。这一个在它的collect()
-方法中使用了稍微定制的Mage\u SalesRule\u Model\u Validator
,它根据我的折扣策略加载自定义销售规则
通过将以下XML添加到模块配置中,自定义类将包含在Magento totals计算中
<global>
...
<sales>
<quote>
<totals>
<requestquotation_discount>
<class>requestquotation/request_discount</class>
<after>discount</after>
<before>grand_total</before>
</requestquotation_discount>
</totals>
</quote>
</sales>
</global>
...
请求报价/请求折扣
折扣
总计
在实现中,总计计算器的“代码”设置为“折扣”,并且不会重置以前计算的折扣。使用此方法,自定义折扣可以与Magento的默认折扣系统并行运行,并且不会干扰税收计算等
希望,这有助于解决同样的问题。按总计重新计算\u收集\u标志为IMHO no options,因为它会触发两次税务计算,这意味着报价总计完全错误。这是一个要解决的简单错误,collectTotals将在其对象中缓存报价项的价格,因此无法计算两次您所要做的就是在调用两次之前重置缓存的值。但是+1用于通过屁眼固定牙齿,因为这显示了天赋:)我为这个问题在磁电机缺陷列表中创建了一张罚单,也感谢您提交缺陷报告。我分享了上述解决方案,不仅是为了解决折扣计算错误。但使用上述方法,您可以以干净、无干扰的方式向总计计算添加一些自定义逻辑。这只是一个玩笑:)但确保实现自己的总计对象是正确的方法
<global>
...
<sales>
<quote>
<totals>
<requestquotation_discount>
<class>requestquotation/request_discount</class>
<after>discount</after>
<before>grand_total</before>
</requestquotation_discount>
</totals>
</quote>
</sales>
</global>