Php 如何以编程方式将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派生的类的实例,该类重载了\

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

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

我目前的方法是使用
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()
都不会影响报价的行总计和小计

是否有任何文档或示例说明如何向报价项目和/或报价本身手动、编程地添加销售规则(我认为最好是可跟踪的)或折扣

提前感谢您,并致以最良好的问候


Joachim

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