Fetch what LineItems Rewards/Promotions affect in Cart

kasperrt
Member since: 2019
 

When I'm fetching the calculated discounts/rewards/what say you not, I can't seem to find a way of fetching which items in the cart the afformentioned discounts they are for. And, when I'm trying to use the 

promotionsEngine.Evaluate(entryLink, currentMarket, currentMarket.DefaultCurrency, RequestFulfillmentStatus.All);

I'm always getting a NullReferenceException, but only for entryLinks that is supposed to have a discount associated with it, while the ones without any discount/reward just returns an empty List.

Is there a way of fetching what discounts are for what items in the cart?

#200601 Edited, Jan 17, 2019 11:07
  • Joel Yourstone
    Member since: 2016
     

    Are you looking for promotions that has been applied to the cart with 

    promotionEngine.Run(cart)

    ?

    In that case, the promotions that yielded rewards will be stored in the orderform as IOrderForm.PromotionInformation and there you can find an Entries field which has information about which entries and how much was saved per discount.

    #200608 Jan 17, 2019 13:32
  • Quan Mai
    Member since: 2011
     

    Correction: it's IOrderForm.Promotions, which is a collection of PromotionInformation. 

    #200610 Jan 17, 2019 13:47
  • kasperrt
    Member since: 2019
     

    I am looking for a way of iterating over the items in the cart and read out their respective promotion. An example look for the site would be:

    • Door 1     Price : 10$
      • 50% off
    • Door 3     Price : 50$
      • 50% off
    • Mailbox    Price : 10$
      • 90% off

    • Total saved 39$
    • Total 31$

    I have managed to get the promotions in a single, encapsulated variable, separated from all the items.

    I want to see what promotions are added for each of the items, instead of a collection of promotions added to the cart.

    #200611 Jan 17, 2019 13:50
  • Joel Yourstone
    Member since: 2016
     

    Haven't run this code, but something like this?

    var form = cart.GetFirstForm();
    var lineItems = cart.GetFirstForm().GetAllLineItems();
    foreach (var lineItem in lineItems)
    {
        var promotions = form.Promotions.Where(promotionInformation => promotionInformation.Entries.Select(promotionEntry => promotionEntry.EntryCode).Contains(lineItem.Code));
        // This lineitem has been rewarded the above list of promotions
    }
    #200614 Jan 17, 2019 13:59
  • kasperrt
    Member since: 2019
     

    Great, that seemed to do the trick Joel!

    #200624 Jan 17, 2019 15:14