Sylius / ShopApiPlugin

Shop API for Sylius.
https://sylius.com
129 stars 89 forks source link

CartView cartDiscounts doesn't show ORDER_ITEM_PROMOTION_ADJUSTMENT, ORDER_UNIT_PROMOTION_ADJUSTMENT discounts #689

Open diimpp opened 3 years ago

diimpp commented 3 years ago

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

    "cartDiscounts": []

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 https://github.com/Sylius/ShopApiPlugin/blob/8fe5f49cb1c3015922fff2c362cb0d03782f3373/src/Factory/Cart/TotalViewFactory.php#L26 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 https://github.com/Sylius/ShopApiPlugin/blob/8fe5f49cb1c3015922fff2c362cb0d03782f3373/src/Factory/Cart/CartViewFactory.php#L85

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.