添加自定义折扣时,在 Shopware 管理面板中编辑订单时出现问题
P粉811349112
2023-09-01 17:30:17
<p>我根据文档编写了自定义购物车折扣https://developer.shopware.com/docs/guides/plugins/plugins/checkout/cart/add-cart-discounts
一切正常,当客户从购物车添加或删除产品时,折扣会重新计算,但当我想在管理面板中编辑此订单时,我收到错误:</p>
<blockquote>
<p>未捕获的 PHP 异常 Shopware\Core\Checkout\Cart\Exception\LineItemNotStackableException:“标识符为“CHEAPEST_ITEM_CART_DISCOUNT”的订单项不可堆叠,且数量无法更改。”在/var/www/shop/vendor/shopware/core/Checkout/Cart/LineItem/LineItem.php第233行{“例外”:“[对象](Shopware \ Core \ Checkout \ Cart \ Exception
LineItemNotStackableException(代码:0):标识符为“CHEAPEST_ITEM_CART_DISCOUNT”的订单项不可堆叠,且数量无法更改。在 /var/www/shop/vendor/shopware/core/Checkout/Cart/LineItem/LineItem.php:233)"} []</p>
</blockquote>
<p>我通过在代码中添加此检查“解决”了这个问题:</p>
<pre class="brush:php;toolbar:false;">if($behavior->hasPermission(self::SKIP_PROMOTION)){
$items = $original->getLineItems()->filterType(self::LINE_ITEM_TYPE);
foreach ($items as $item) {
$toCalculate->add($item);
}
return;
}</pre>
<p>现在,如果我在管理面板中编辑订单,不会显示错误,但不会再次计算折扣,并且切换“禁用自动促销”不起作用。</p>
<p>是否有任何解决方案可以在编辑操作中按顺序重新计算自定义折扣?
当我在管理面板中添加新订单时,一切正常,问题仅在于编辑。
文档对此没有任何说明。</p>
通过引用标识符查找折扣是否已添加到购物车。如果是,只需从购物车中删除旧实例,然后再添加重新计算的折扣即可。
此外,您还必须确保您的处理器在 Shopware 自己的
PromotionProcessor
之后执行,否则它将尝试重新添加您之前手动添加的折扣。我创建了一个示例插件,其中包含重新计算所需的指南中的所有更改。在当前候选版本
6.5
上进行了测试,但也应该适用于最新版本的6.4
。该示例基于购物车价值百分比形式的折扣。如果折扣应该是变化的绝对值,则过程会略有不同。我在上述存储库中创建了一个分支,并提供了一个示例。