When using promotion with Item percentage discount or Item fixed discount actions, then adjustments are applied on AdjustmentInterface::ORDER_ITEM_PROMOTION_ADJUSTMENT (or ORDER_UNIT_PROMOTION_ADJUSTMENT, didn't check) level.
In such case CartView
is empty, while totals->promotion is correctly filled.
(Do ignore non-standard output, this is artifact of my project)
"totals": {
"total": {
"current": 12000,
"currency": "EUR"
},
"items": {
"current": 12000,
"currency": "EUR"
},
"taxes": {
"current": 2000,
"currency": "EUR"
},
"shipping": {
"current": 0,
"currency": "EUR"
},
"promotion": {
"current": -6100,
"currency": "EUR"
}
},
Problem is with mismatch between adjustments levels for those properties.
Totals->promotion uses
|
$totalsView->promotion = $cart->getOrderPromotionTotal(); |
which works by all three adjustment levels
/**
* Returns amount of order discount. Does not include shipping discounts.
*/
public function getOrderPromotionTotal(): int
{
return
$this->getAdjustmentsTotalRecursively(AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT) +
$this->getAdjustmentsTotalRecursively(AdjustmentInterface::ORDER_ITEM_PROMOTION_ADJUSTMENT) +
$this->getAdjustmentsTotalRecursively(AdjustmentInterface::ORDER_UNIT_PROMOTION_ADJUSTMENT)
;
}
and cartDiscounts only checks for order level
|
foreach ($cart->getAdjustmentsRecursively(AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT) as $adjustment) { |
I'm going to fix this in my project and see how it will go, but so far it looks like an error, rather than design decision.
When using promotion with
Item percentage discountorItem fixed discountactions, then adjustments are applied onAdjustmentInterface::ORDER_ITEM_PROMOTION_ADJUSTMENT(orORDER_UNIT_PROMOTION_ADJUSTMENT, didn't check) level.In such case
CartViewis empty, while
totals->promotionis correctly filled.(Do ignore non-standard output, this is artifact of my project)
Problem is with mismatch between adjustments levels for those properties.
Totals->promotionusesShopApiPlugin/src/Factory/Cart/TotalViewFactory.php
Line 26 in 8fe5f49
which works by all three adjustment levels
and
cartDiscountsonly checks for order levelShopApiPlugin/src/Factory/Cart/CartViewFactory.php
Line 85 in 8fe5f49
I'm going to fix this in my project and see how it will go, but so far it looks like an error, rather than design decision.