# ProductPricesHasNotChanged after upgrade to 8.4.0

**URL:** <https://forum.litium.com/t/productpriceshasnotchanged-after-upgrade-to-8-4-0/2617>\
**Category:** Questions\
**Tags:** litium-8\
**Created:** [June 13, 2022, 2:48pm UTC](https://forum.litium.com/t/productpriceshasnotchanged-after-upgrade-to-8-4-0/2617 "2022-06-13T14:48:19Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Brandt](https://avatars.discourse-cdn.com/v4/letter/b/7c8e57/32.png) [@Brandt](https://forum.litium.com/u/Brandt)\
**Post date:** [June 13, 2022, 2:48pm UTC](https://forum.litium.com/t/productpriceshasnotchanged-after-upgrade-to-8-4-0/2617/1 "2022-06-13T14:48:19Z")

</div>

After upgrading to 8.4.0 I can’t find the class ProductPricesHasNotChanged. Has that been removed or renamed?  
Before it was located in namespace Litium.Accelerator.ValidationRules but found in Litium.Application.dll

Litium version: 8.4.0

---

<div class="post-metadata">

**Author:** ![NilsN](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/nilsn/32/302_2.png) [@NilsN](https://forum.litium.com/u/NilsN)\
**Post date:** [June 14, 2022, 7:22am UTC](https://forum.litium.com/t/productpriceshasnotchanged-after-upgrade-to-8-4-0/2617/2 "2022-06-14T07:22:00Z")

</div>

It was removed as part of this bug: [https://docs.litium.com/support/bugs/bug\_details?id=60086](https://docs.litium.com/support/bugs/bug_details?id=60086)

---

<div class="post-metadata">

**Author:** ![NilsN](https://yyz2.discourse-cdn.com/flex030/user_avatar/forum.litium.com/nilsn/32/302_2.png) [@NilsN](https://forum.litium.com/u/NilsN)\
**Post date:** [June 14, 2022, 1:04pm UTC](https://forum.litium.com/t/productpriceshasnotchanged-after-upgrade-to-8-4-0/2617/3 "2022-06-14T13:04:38Z")

</div>

Here are the implementations (`DiscountValueValidation` was also removed) if needed to build upon:

```auto
using System;
using System.Linq;
using Litium.Application.Sales;
using Litium.Application.Web;
using Litium.Globalization;
using Litium.Sales;
using Litium.Sales.Factory;
using Litium.Security;
using Litium.Validations;
using Microsoft.Extensions.Localization;

namespace Litium.Accelerator.ValidationRules
{
    /// <summary>
    /// Validates whether product prices has not changed in cart, since last time an order calculation was done.
    /// </summary>
    public class ProductPricesHasNotChanged : ValidationRuleBase<ValidateCartContextArgs>
    {
        private readonly ISalesOrderRowFactory _salesOrderRowFactory;
        private readonly SecurityContextService _securityContextService;
        private readonly IStringLocalizer<ProductPricesHasNotChanged> _localizer;
        private readonly CountryService _countryService;
        private readonly RoundOffService _roundOffService;
        private readonly CurrencyService _currencyService;

        public ProductPricesHasNotChanged(
            ISalesOrderRowFactory salesOrderRowFactory,
            SecurityContextService securityContextService,
            IStringLocalizer<ProductPricesHasNotChanged> localizer,
            CountryService countryService,
            RoundOffService roundOffService,
            CurrencyService currencyService)
        {
            _salesOrderRowFactory = salesOrderRowFactory;
            _securityContextService = securityContextService;
            _localizer = localizer;
            _countryService = countryService;
            _roundOffService = roundOffService;
            _currencyService = currencyService;
        }

        public override ValidationResult Validate(ValidateCartContextArgs entity, ValidationMode validationMode)
        {
            var result = new ValidationResult();
            var order = entity.Cart.Order;

            if (order.Rows.Count > 0)
            {
                var personId = order.CustomerInfo?.PersonSystemId ?? _securityContextService.GetIdentityUserSystemId() ?? Guid.Empty;
                var orderRows = from orderRow in order.Rows.Where(x => x.OrderRowType == OrderRowType.Product)
                                 let createdRow = _salesOrderRowFactory.Create(new CreateSalesOrderRowArgs
                                {
                                    ArticleNumber = orderRow.ArticleNumber,
                                    Quantity = orderRow.Quantity,
                                    PersonSystemId = personId,
                                    ChannelSystemId = order.ChannelSystemId ?? Guid.Empty,
                                    CountrySystemId = _countryService.Get(order.CountryCode)?.SystemId ?? Guid.Empty,
                                    CurrencySystemId = _currencyService.Get(order.CurrencyCode)?.SystemId ?? Guid.Empty
                                }).CalculateByUnitPriceIncludingVat(order.CurrencyCode, _roundOffService)
                                where createdRow != null
                                where orderRow.UnitPriceExcludingVat != createdRow.UnitPriceExcludingVat
                                      || orderRow.VatRate != createdRow.VatRate
                                select orderRow;

                if (orderRows.Any())
                {
                    result.AddError("Cart", "sales.validation.productprices.haschanged".AsWebsiteText() ?? _localizer.GetString("sales.validation.productprices.haschanged"));
                }
            }

            return result;
        }
    }
}

```

```auto
using System;
using System.Linq;
using System.Threading.Tasks;
using Litium.Application.Web;
using Litium.Sales;
using Litium.Validations;
using Microsoft.Extensions.Localization;

namespace Litium.Application.Sales.ValidationRules
{
    /// <summary>
    /// Validate discount value in cart when place order
    /// </summary>
    public class DiscountValueValidation : ValidationRuleBase<ValidateCartContextArgs>
    {
        private readonly IStringLocalizer<DiscountValueValidation> _localizer;
        private readonly SalesOrderBuilderFactory _salesOrderBuilderFactory;
        private readonly CartContextAccessor _cartContextAccessor;

        public DiscountValueValidation(
            SalesOrderBuilderFactory salesOrderBuilderFactory,
            CartContextAccessor cartContextAccessor,
            IStringLocalizer<DiscountValueValidation> localizer)
        {
            _localizer = localizer;
            _salesOrderBuilderFactory = salesOrderBuilderFactory;
            _cartContextAccessor = cartContextAccessor;
        }

        public async override Task<ValidationResult> ValidateAsync(ValidateCartContextArgs entity, ValidationMode validationMode)
        {
            var result = new ValidationResult();
            var oldDiscountValue = entity.Cart.Order.Rows.Where(x => x.OrderRowType == OrderRowType.Discount).Sum(x=>x.TotalIncludingVat);
            var orderBuilder = _salesOrderBuilderFactory.Create(entity.Cart.Order, entity.Cart.DiscountCodes);
            var newOrder = orderBuilder.Build();
            var newDiscountValue = newOrder.Rows.Where(x => x.OrderRowType == OrderRowType.Discount).Sum(x => x.TotalIncludingVat);
            if (oldDiscountValue != newDiscountValue)
            {
                var cartContext = _cartContextAccessor.CartContext;
                var shippingOption = cartContext.Cart.Order.ShippingInfo.FirstOrDefault()?.ShippingOption;
                if (shippingOption is not null)
                {
                    var selectShippingOptionArgs = new SelectShippingOptionArgs
                    {
                        ShippingOptionId = shippingOption
                    };
                    //recall select shipping for update the value of order in cart
                    await cartContext.SelectShippingOptionAsync(selectShippingOptionArgs);
                }
                result.AddError("Cart", "sales.validation.ordertotal.haschanged".AsWebsiteText() ?? _localizer.GetString("sales.validation.ordertotal.haschanged"));
            }
            return result;
        }

        public override ValidationResult Validate(ValidateCartContextArgs entity, ValidationMode validationMode)
        {
            throw new NotSupportedException("Validation need to be done async.");
        }
    }
}

```

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex030/uploads/litium/original/1X/12eddac3b8b661de1db86af10ac8151b571e6fb9.png) [@system](https://forum.litium.com/u/system)\
**Post date:** [July 12, 2022, 1:04pm UTC](https://forum.litium.com/t/productpriceshasnotchanged-after-upgrade-to-8-4-0/2617/4 "2022-07-12T13:04:57Z")

</div>

Closed on July 12, 2022, 1:04pm UTC

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
