Beispiel #1
0
        public void Query()
        {
            string          productCodeOrBarCode = this.txtBarCode.Text;
            ProductPriceDto model = _productService.QueryProductPrice(productCodeOrBarCode);

            if (model == null)
            {
                MessageBox.Show("商品不存在");
                this.txtBarCode.Text = "";
                return;
            }

            this.dgvData.Rows.Clear();
            int index = this.dgvData.Rows.Add();
            var row   = this.dgvData.Rows[index];

            row.Cells["ProductId"].Value      = model.Id;
            row.Cells["ProductCode"].Value    = model.Code;
            row.Cells["BarCode"].Value        = model.BarCode;
            row.Cells["ProductName"].Value    = model.Name;
            row.Cells["Specification"].Value  = model.Specification;
            row.Cells["SalePrice"].Value      = model.SalePrice.ToString("F2");
            row.Cells["VipSalePrice"].Value   = model.VipSalePrice.ToString("F2");
            row.Cells["AreaSalePrice"].Value  = model.AreaSalePrice.ToString("F2");
            row.Cells["StoreSalePrice"].Value = model.StoreSalePrice.ToString("F2");
            row.Selected         = true;
            this.txtBarCode.Text = "";
        }
Beispiel #2
0
        public async Task <string> InsertProductPrice(ProductPriceDto dto)
        {
            var    con         = _baseInterface.GetConnection();
            var    transaction = con.BeginTransaction();
            string message     = "";

            try
            {
                var product = await GetProductById(dto.ProductId);

                if (product is null)
                {
                    return(null);
                }

                _productRepository.UpdatePriceByUnitIdProductId(dto.UnitId, dto.ProductId, con, transaction);

                int result = _productRepository.InsertProductPrice(dto.ToEntity());
                message = _messageClass.ShowSuccessMessage(product.ProductId);
                transaction.Commit();
            }
            catch (SqlException ex)
            {
                message = _messageClass.ShowErrorMessage(string.Format("{0} ~ {1}", ex.Number.ToString(), ex.Message));
                transaction.Rollback();
            }
            return(message);
        }
Beispiel #3
0
        private void ProcessSubscription(IUnitOfWork unitOfWork, CustomerOrder customerOrder, OrderLine orderLine)
        {
            ProductSubscriptionDto productSubscriptionDto = this.GetProductSubscriptionDto(orderLine);
            Subscription           subscription           = this.GetSubscription(customerOrder, orderLine, productSubscriptionDto);

            unitOfWork.GetRepository <Subscription>().Insert(subscription);
            Dictionary <Guid, PricingServiceParameter> dictionary = new Dictionary <Guid, PricingServiceParameter>();

            foreach (SubscriptionProduct subscriptionProduct in (IEnumerable <SubscriptionProduct>)orderLine.Product.SubscriptionProducts)
            {
                PricingServiceParameter serviceParameter = new PricingServiceParameter(subscriptionProduct.Product.Id)
                {
                    Product    = subscriptionProduct.Product,
                    QtyOrdered = subscriptionProduct.QtyOrdered * orderLine.QtyOrdered
                };
                dictionary.Add(subscriptionProduct.Product.Id, serviceParameter);
            }
            GetProductPricingResult productPricing = this.pricingPipeline.GetProductPricing(new GetProductPricingParameter(true)
            {
                PricingServiceParameters = (IDictionary <Guid, PricingServiceParameter>)dictionary
            });

            PipelineHelper.VerifyResults((PipeResultBase)productPricing);
            foreach (SubscriptionProduct subscriptionProduct1 in (IEnumerable <SubscriptionProduct>)orderLine.Product.SubscriptionProducts)
            {
                SubscriptionProduct subscriptionProduct = subscriptionProduct1;
                SubscriptionLine    subscriptionLine    = new SubscriptionLine()
                {
                    Product    = unitOfWork.GetRepository <Product>().Get(subscriptionProduct.Product.Id),
                    QtyOrdered = subscriptionProduct.QtyOrdered * orderLine.QtyOrdered
                };
                ProductPriceDto productPriceDto = productPricing.ProductPriceDtos.First <KeyValuePair <Guid, ProductPriceDto> >((Func <KeyValuePair <Guid, ProductPriceDto>, bool>)(o => o.Key == subscriptionProduct.Product.Id)).Value;
                subscriptionLine.Price = productPriceDto.UnitRegularPrice;
                subscription.SubscriptionLines.Add(subscriptionLine);
                //if (subscription.IncludeInInitialOrder)
                //{
                //    OrderLine orderLine1 = new OrderLine()
                //    {
                //        Description = subscriptionLine.Product.ErpDescription,
                //        UnitListPrice = productPriceDto.UnitListPrice,
                //        UnitRegularPrice = productPriceDto.UnitRegularPrice,
                //        UnitNetPrice = subscription.FixedPrice ? subscriptionLine.Price : productPriceDto.UnitNetPrice
                //    };
                //    this.orderLineUtilities.SetProduct(orderLine1, subscriptionLine.Product);
                //    this.orderLineUtilities.SetQtyOrdered(orderLine1, subscriptionLine.QtyOrdered);
                //    PipelineHelper.VerifyResults((PipeResultBase)this.cartPipeline.AddCartLine(new Insite.Cart.Services.Pipelines.Parameters.AddCartLineParameter()
                //    {
                //        Cart = customerOrder,
                //        CartLine = orderLine1
                //    }));
                //}
            }
            if (!subscription.IncludeInInitialOrder)
            {
                return;
            }
            subscription.CustomerOrders.Add(customerOrder);
        }
Beispiel #4
0
        public async Task <string> InsertPrice(ProductPriceDto dto)
        {
            if (!menu.AdminAccess)
            {
                return(null);
            }

            return(await _productService.InsertProductPrice(dto));
        }
Beispiel #5
0
 public void Delete(ProductPriceDto item)
 {
     if (Unit != null)
     {
         Repository.Delete(item, false);
     }
     else
     {
         Repository.Delete(item);
     }
 }
Beispiel #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ProductPrice"/> class.
        /// </summary>
        /// <param name="priceDto">Price dto to base the model on.</param>
        internal ProductPrice(ProductPriceDto priceDto)
        {
            if (priceDto == null)
            {
                throw new ArgumentNullException(nameof(priceDto), $"{nameof(priceDto)} is null.");
            }

            this.SKU      = priceDto.SKU;
            this.Price    = priceDto.Price;
            this.Currency = priceDto.Currency;
        }
        public ActionResult Edit([Bind(Include = "Id,ProductId,DateOfPrice,PriceWithoutDiscount,PriceWithDiscount")] ProductPriceDto productPrice)
        {
            if (ModelState.IsValid)
            {
                _productPriceService.Update(productPrice);
                return(RedirectToAction("List"));
            }

            //ViewBag.ProductId = new SelectList(_productService.Get(), "Id", "Summary", productPrice.ProductId);
            return(View(productPrice));
        }
        //public Decimal GetPercentOrAmountProductDiscount(PromotionResult promotionResult, CustomerOrderPromotion customerOrderPromotion)
        //{
        //    if (!promotionResult.Amount.HasValue)
        //        throw new ArgumentNullException("Amount");
        //    if (promotionResult.Amount.Value == Decimal.Zero)
        //        throw new ArgumentOutOfRangeException("Amount");
        //    return customerOrderPromotion.CustomerOrder.OrderLines.Where<OrderLine>((Func<OrderLine, bool>)(o =>
        //    {
        //        PromotionResult promotionResult1 = o.PromotionResult;
        //        Guid? nullable = promotionResult1 != null ? new Guid?(promotionResult1.Id) : new Guid?();
        //        Guid id = promotionResult.Id;
        //        if ((nullable.HasValue ? (nullable.HasValue ? (nullable.GetValueOrDefault() == id ? 1 : 0) : 1) : 0) != 0)
        //            return !o.Product.IsQuoteRequired;
        //        return false;
        //    })).Sum<OrderLine>((Func<OrderLine, Decimal>)(orderLine =>
        //    {
        //        Decimal actualPrice = this.GetPricingServiceResult(orderLine).ActualPrice;
        //        Decimal retailPrice = orderLine.RegularPrice;
        //        Decimal? amount = promotionResult.Amount;
        //        Decimal lowestPrice;

        //        bool? isPercent = promotionResult.IsPercent;
        //        if ((isPercent.HasValue ? (isPercent.GetValueOrDefault() ? 1 : 0) : 0) == 0)
        //        {
        //            lowestPrice = GetLowestPriceBaseAmountBasedPromotion(actualPrice, retailPrice, amount);
        //            if (lowestPrice == actualPrice)
        //            {
        //                return 0;
        //            }
        //            return NumberHelper.RoundCurrency(orderLine.QtyOrdered * promotionResult.Amount.Value);
        //        }
        //        else
        //        {
        //            Decimal percent = amount.Value / new Decimal(100);
        //            lowestPrice = GetLowestPriceBasePercentBasedPromotion(actualPrice, retailPrice, amount);

        //            if (lowestPrice == actualPrice)
        //            {
        //                return 0;
        //            }
        //            return NumberHelper.RoundCurrency(orderLine.QtyOrdered * NumberHelper.GetDiscount(retailPrice, percent));
        //        }
        //    }));
        //}

        public virtual Decimal GetPercentOrAmountProductDiscount(PromotionResult promotionResult, CustomerOrderPromotion customerOrderPromotion)
        {
            if (!promotionResult.Amount.HasValue)
            {
                throw new ArgumentNullException("Amount");
            }
            if (promotionResult.Amount.Value == Decimal.Zero)
            {
                throw new ArgumentOutOfRangeException("Amount");
            }
            if (customerOrderPromotion?.OrderLine != null) // check if customerOrderPromotion object is not null with ? operator
            {
                Guid?id1 = customerOrderPromotion.OrderLine.PromotionResult?.Id;
                Guid id2 = promotionResult.Id;
                if ((id1.HasValue ? (id1.HasValue ? (id1.GetValueOrDefault() != id2 ? 1 : 0) : 0) : 1) == 0 && !customerOrderPromotion.OrderLine.Product.IsQuoteRequired)
                {
                    ProductPriceDto productPriceDto = this.GetPricingServiceResult((IEnumerable <OrderLine>) new List <OrderLine>()
                    {
                        customerOrderPromotion.OrderLine
                    }).FirstOrDefault <KeyValuePair <Guid, ProductPriceDto> >((Func <KeyValuePair <Guid, ProductPriceDto>, bool>)(o => o.Key == customerOrderPromotion.OrderLine.Id)).Value;
                    //Decimal amount = productPriceDto != null ? productPriceDto.UnitListPrice : Decimal.Zero; // New

                    Decimal actualPrice = productPriceDto.UnitRegularPrice; /*this.GetPricingServiceResult(orderLine).ActualPrice; */ //unitregularprice
                    Decimal retailPrice = productPriceDto.UnitListPrice;
                    Decimal?promoAmount = promotionResult.Amount;
                    Decimal lowestPrice;
                    bool?   isPercent = promotionResult.IsPercent;
                    if ((isPercent.HasValue ? (isPercent.GetValueOrDefault() ? 1 : 0) : 0) == 0)
                    {
                        lowestPrice = GetLowestPriceBaseAmountBasedPromotion(actualPrice, retailPrice, promoAmount);
                        if (lowestPrice == actualPrice)
                        {
                            return(0);
                        }
                        return(NumberHelper.RoundCurrency(customerOrderPromotion.OrderLine.QtyOrdered * promotionResult.Amount.Value));
                    }
                    else
                    {
                        Decimal percent = promoAmount.Value / new Decimal(100);
                        lowestPrice = GetLowestPriceBasePercentBasedPromotion(actualPrice, retailPrice, promoAmount);

                        if (lowestPrice == actualPrice)
                        {
                            return(0);
                        }
                        return(NumberHelper.RoundCurrency(customerOrderPromotion.OrderLine.QtyOrdered * NumberHelper.GetDiscount(retailPrice, promotionResult.Amount.Value / new Decimal(100))));
                    }
                }
            }
            return(Decimal.Zero);
        }
Beispiel #9
0
        public string UpdatePrice(ProductPriceDto dto)
        {
            string message = "";

            try
            {
                int result = _productRepository.UpdatePrice(dto.ToEntity());
                message = _messageClass.ShowSuccessMessage(result);
            }
            catch (SqlException ex)
            {
                message = _messageClass.ShowErrorMessage(string.Format("{0} ~ {1}", ex.Number.ToString(), ex.Message));
            }
            return(message);
        }
Beispiel #10
0
 public ProductDetailsDto()
 {
     DefaultPictureModel   = new PictureDto();
     PictureModels         = new List <PictureDto>();
     GiftCard              = new GiftCardDto();
     ProductPrice          = new ProductPriceDto();
     AddToCart             = new AddToCartDto();
     ProductAttributes     = new List <ProductAttributeDto>();
     AssociatedProducts    = new List <ProductDetailsDto>();
     VendorDto             = new VendorBriefInfoDto();
     Breadcrumb            = new ProductBreadcrumbDto();
     ProductTags           = new List <ProductTagDto>();
     ProductSpecifications = new List <ProductSpecificationDto>();
     ProductManufacturers  = new List <ManufacturerDto>();
     ProductReviewOverview = new ProductReviewOverviewDto();
     TierPrices            = new List <TierPriceDto>();
 }
Beispiel #11
0
        public async Task HandleAsync(ProductPriceChanged @event)
        {
            var cart = await cartRepository.GetByIdAsync(@event.AggregateId.IdAsString());


            var priceItem = new ProductPriceDto()
            {
                CurrentPrice = @event.Quantity,
                Id           = @event.PriceId,
                Date         = DateTimeOffset.Now,
                ItemId       = cart.Id
            };

            cart.Price = @event.Quantity;
            await cartRepository.UpdateAsync(cart);

            await cartItemRepository.InsertAsync(priceItem);
        }
Beispiel #12
0
        public override void ClearPromotionResult(CustomerOrder customerOrder)
        {
            List <OrderLine> list = customerOrder.OrderLines.Where <OrderLine>((Func <OrderLine, bool>)(o =>
            {
                if (o.CustomProperties.Where(x => x.Name.EqualsIgnoreCase("IsSubscriptionOpted")).Count() > 0)
                {
                    var IsSubscriptionOpted = o.CustomProperties.FirstOrDefault(x => x.Name.EqualsIgnoreCase("IsSubscriptionOpted")).Value;
                    if (!string.IsNullOrEmpty(o.CostCode))
                    {
                        return(true);
                    }
                }
                return(false);
            })).ToList <OrderLine>();

            if (!list.Any <OrderLine>())
            {
                return;
            }
            foreach (OrderLine orderLine in list)
            {
                orderLine.PromotionResult = (PromotionResult)null;
            }
            ProductPromotionHelper_Brasseler    helper = new ProductPromotionHelper_Brasseler(this.pricingPipeline, this.promotionAmountProvider);
            IDictionary <Guid, ProductPriceDto> pricingServiceResult = helper.GetPricingServiceResult((IEnumerable <OrderLine>)list);

            foreach (OrderLine orderLine1 in list)
            {
                OrderLine       orderLine       = orderLine1;
                ProductPriceDto productPriceDto = pricingServiceResult.First <KeyValuePair <Guid, ProductPriceDto> >((Func <KeyValuePair <Guid, ProductPriceDto>, bool>)(o => o.Key == orderLine.Id)).Value;
                orderLine.CostCode     = string.Empty;
                orderLine.UnitNetPrice = productPriceDto.UnitRegularPrice;
            }
            //TOBEREMOVED
            //.ForEach((Action<OrderLine>)(orderLine =>
            //{
            //    //orderLine.PromotionResult = (PromotionResult)null;
            //    orderLine.CostCode = string.Empty;
            //    IDictionary<Guid, ProductPriceDto> productPriceDto = GetPricingServiceResult((IEnumerable<OrderLine>) orderLine);

            //    orderLine.UnitNetPrice = productPriceDto.FirstOrDefault().Value.UnitRegularPrice;
            //}));
        }
Beispiel #13
0
        public static ProductPrice ToEntity(this ProductPriceDto dto)
        {
            if (dto == null)
            {
                return(null);
            }

            return(new ProductPrice
            {
                ProductPriceId = dto.ProductPriceId,
                ProductId = dto.ProductId,
                UnitId = dto.UnitId,
                SellingPrice = dto.SellingPrice,
                CreatedBy = dto.CreatedBy,
                UpdatedBy = dto.UpdatedBy,
                UpdatedDate = dto.UpdatedDate,
                Status = dto.Status,
                IsPrimary = dto.IsPrimary
            });
        }
Beispiel #14
0
 public void Update(ProductPriceDto item)
 {
     try
     {
         //if Unit is not null means that the method is called after another method in the service and so it should not save the changes and commit the transaction.
         if (Unit != null)
         {
             Repository.Update(item, false);
         }
         //if Unit is null means that the method is the first and only method in the transaction and it can save the changes and commit the transaction.
         else
         {
             Repository.Update(item);
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Beispiel #15
0
 public void Insert(ProductPriceDto item)
 {
     try
     {
         // if Unit is not null means that our service is called after another service.
         if (Unit != null)
         {
             this.Repository.Insert(item, false);  // call data access insert
         }
         // if Unit is null means that our service is the first service that is calling repository.
         else
         {
             this.Repository.Insert(item);
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
        protected void GetPricingServiceResult(IEnumerable <OrderLine> orderLines)
        {
            GetProductPricingResult productPricing = this.pricingPipeline.GetProductPricing(new GetProductPricingParameter(true)
            {
                PricingServiceParameters = orderLines.ToDictionary(o => o.Id, o => new PricingServiceParameter(o.ProductId)
                {
                    OrderLine       = o,
                    CustomerOrderId = o.CustomerOrderId
                })
            });

            PipelineHelper.VerifyResults((PipeResultBase)productPricing);

            foreach (OrderLine ol in orderLines)
            {
                ProductPriceDto productPriceDto = productPricing.ProductPriceDtos.First(o => o.Key == ol.Id).Value;
                ol.UnitListPrice    = productPriceDto.UnitListPrice;
                ol.UnitRegularPrice = productPriceDto.UnitRegularPrice;
                ol.UnitNetPrice     = productPriceDto.UnitNetPrice;
                //ol.CustomerOrder.ConversionRate =
            }
        }
Beispiel #17
0
        protected virtual void ApplyDiscountToOrderLines(PromotionResult promotionResult, OrderLine orderLine, CustomerOrder customerOrder)
        {
            CustomerOrderPromotion appliedPromotion = customerOrder.CustomerOrderPromotions.FirstOrDefault <CustomerOrderPromotion>((Func <CustomerOrderPromotion, bool>)(p => p.PromotionId == promotionResult.PromotionId));
            List <OrderLine>       list             = new List <OrderLine>();

            list.Add(orderLine);
            if (SiteContext.Current != null && SiteContext.Current.ShipTo != null)
            {
                if (string.IsNullOrEmpty(orderLine.CostCode))
                {
                    //orderLine.PromotionResult = promotionResult;
                    ProductPromotionHelper_Brasseler    helper = new ProductPromotionHelper_Brasseler(this.pricingPipeline, this.promotionAmountProvider);
                    IDictionary <Guid, ProductPriceDto> pricingServiceResult = helper.GetPricingServiceResult((IEnumerable <OrderLine>)list);
                    ProductPriceDto productPriceDto = pricingServiceResult.First(o => o.Key == orderLine.Id).Value;
                    Decimal         UnitNetPrice    = orderLine.UnitNetPrice;

                    // Check current flow of Customer.
                    HelperUtility helperUtility   = new HelperUtility();
                    var           currentCustomer = helperUtility.GetCurrentCustomerFlow(customerOrder);

                    if (currentCustomer.CustomProperties.Where(x => x.Name.EqualsIgnoreCase("SubscriptionDiscount")).Count() > 0)
                    {
                        var amount = currentCustomer.CustomProperties.FirstOrDefault(x => x.Name.EqualsIgnoreCase("SubscriptionDiscount")).Value;

                        if (string.IsNullOrEmpty(amount))
                        {
                            return;
                        }
                        Decimal?subscriptionDiscount = Decimal.Parse(amount, CultureInfo.InvariantCulture);
                        //return if subscription discount is zero
                        if (subscriptionDiscount < 1)
                        {
                            return;
                        }
                        Decimal percent = subscriptionDiscount.Value / new Decimal(100);
                        //BUSA-463 Subscription: Hold previous ActualPrice to calculate discount for this promotion
                        orderLine.CostCode = orderLine.UnitNetPrice.ToString(CultureInfo.InvariantCulture);

                        var num1 = NumberHelper.ApplyDiscount(UnitNetPrice, percent);
                        //if (orderLine.PromotionResult != null)
                        //{
                        //    if (!(orderLine.UnitNetPrice < num1))
                        //    {
                        //        CustomerOrderPromotion deleted = customerOrder.CustomerOrderPromotions.FirstOrDefault<CustomerOrderPromotion>((Func<CustomerOrderPromotion, bool>)(p =>
                        //        {
                        //            Guid? orderLineId = p.OrderLineId;
                        //            Guid id = orderLine.Id;
                        //            if (!orderLineId.HasValue)
                        //                return false;
                        //            if (!orderLineId.HasValue)
                        //                return true;
                        //            return orderLineId.GetValueOrDefault() == id;
                        //        }));
                        //        if (deleted != null)
                        //        {
                        //            customerOrder.CustomerOrderPromotions.Remove(deleted);
                        //            this.UnitOfWork.GetRepository<CustomerOrderPromotion>().Delete(deleted);
                        //        }
                        //    }
                        //    else
                        //        return;
                        //}
                        //orderLine.PromotionResult = promotionResult;
                        orderLine.UnitListPrice     = productPriceDto.UnitListPrice;
                        orderLine.UnitRegularPrice  = productPriceDto.UnitRegularPrice;
                        orderLine.UnitNetPrice      = num1;
                        orderLine.UnitNetPrice      = orderLine.UnitNetPrice < Decimal.Zero ? Decimal.Zero : orderLine.UnitNetPrice;
                        orderLine.TotalRegularPrice = NumberHelper.RoundCurrency(orderLine.UnitListPrice * orderLine.QtyOrdered);
                        orderLine.TotalNetPrice     = NumberHelper.RoundCurrency(orderLine.UnitNetPrice * orderLine.QtyOrdered);
                        this.AddOrUpdateCustomerOrderPromotion(customerOrder, appliedPromotion, orderLine, promotionResult);
                    }
                }
            }
        }
        //public void ApplyDiscountToOrderLines(PromotionResult promotionResult, IEnumerable<OrderLine> orderLines)
        //{
        //    if (!promotionResult.Amount.HasValue)
        //        throw new ArgumentNullException("Amount");
        //    if (promotionResult.Amount.Value == Decimal.Zero)
        //        throw new ArgumentOutOfRangeException("Amount");
        //    foreach (OrderLine orderLine1 in orderLines)
        //    {
        //        orderLine1.PromotionResult = promotionResult;
        //        PricingServiceResult pricingServiceResult = this.GetPricingServiceResult(orderLine1);
        //        OrderLine orderLine2 = orderLine1;
        //        bool? isPercent = promotionResult.IsPercent;
        //        Decimal lowestPrice;
        //        Decimal actualPrice = pricingServiceResult.ActualPrice;
        //        Decimal retailPrice = orderLine1.RegularPrice;
        //        Decimal? amount = promotionResult.Amount;

        //        if ((isPercent.HasValue ? (isPercent.GetValueOrDefault() ? 1 : 0) : 0) == 0)
        //        {
        //            lowestPrice = GetLowestPriceBaseAmountBasedPromotion(actualPrice, retailPrice, amount);
        //        }
        //        else
        //        {
        //            lowestPrice = GetLowestPriceBasePercentBasedPromotion(actualPrice, retailPrice, amount);
        //        }
        //        orderLine2.ActualPrice = lowestPrice;
        //        orderLine1.RegularPrice = pricingServiceResult.RegularPrice;
        //        orderLine1.ActualPrice = orderLine1.ActualPrice < Decimal.Zero ? Decimal.Zero : orderLine1.ActualPrice;
        //    }
        //}
        public virtual void ApplyDiscountToOrderLines(PromotionResult promotionResult, IEnumerable <OrderLine> orderLines, CustomerOrder customerOrder)
        {
            if (!promotionResult.Amount.HasValue)
            {
                throw new ArgumentNullException("Amount");
            }
            Decimal?amount = promotionResult.Amount;

            if (amount.Value == Decimal.Zero)
            {
                throw new ArgumentOutOfRangeException("Amount");
            }
            IList <OrderLine> source = orderLines as IList <OrderLine> ?? (IList <OrderLine>)orderLines.ToList <OrderLine>();

            if (!source.Any <OrderLine>())
            {
                return;
            }
            IDictionary <Guid, ProductPriceDto> pricingServiceResult = this.GetPricingServiceResult((IEnumerable <OrderLine>)source);
            CustomerOrderPromotion appliedPromotion = customerOrder.CustomerOrderPromotions.FirstOrDefault <CustomerOrderPromotion>((Func <CustomerOrderPromotion, bool>)(p => p.PromotionId == promotionResult.PromotionId));

            foreach (OrderLine orderLine1 in (IEnumerable <OrderLine>)source)
            {
                OrderLine       orderLine       = orderLine1;
                ProductPriceDto productPriceDto = pricingServiceResult.First <KeyValuePair <Guid, ProductPriceDto> >((Func <KeyValuePair <Guid, ProductPriceDto>, bool>)(o => o.Key == orderLine.Id)).Value;
                bool?           isPercent       = promotionResult.IsPercent;
                Decimal         lowestPrice;
                Decimal         actualPrice = productPriceDto.UnitRegularPrice;/*pricingServiceResult.ActualPrice*/
                Decimal         retailPrice = orderLine1.UnitListPrice;
                Decimal?        promoAmount = promotionResult.Amount;

                if ((isPercent.HasValue ? (isPercent.GetValueOrDefault() ? 1 : 0) : 0) == 0)
                {
                    lowestPrice = GetLowestPriceBaseAmountBasedPromotion(actualPrice, retailPrice, amount);
                }
                else
                {
                    lowestPrice = GetLowestPriceBasePercentBasedPromotion(actualPrice, retailPrice, amount);
                }
                Decimal num3 = lowestPrice;
                if (orderLine.PromotionResult != null)
                {
                    if (!(orderLine.UnitNetPrice < num3))
                    {
                        CustomerOrderPromotion deleted = customerOrder.CustomerOrderPromotions.FirstOrDefault <CustomerOrderPromotion>((Func <CustomerOrderPromotion, bool>)(p =>
                        {
                            Guid?orderLineId = p.OrderLineId;
                            Guid id          = orderLine.Id;
                            if (!orderLineId.HasValue)
                            {
                                return(false);
                            }
                            if (!orderLineId.HasValue)
                            {
                                return(true);
                            }
                            return(orderLineId.GetValueOrDefault() == id);
                        }));
                        if (deleted != null)
                        {
                            customerOrder.CustomerOrderPromotions.Remove(deleted);
                            this.UnitOfWork.GetRepository <CustomerOrderPromotion>().Delete(deleted);
                        }
                    }
                    else
                    {   // BUSA-1242: category level promotion is inserted into CustomerOrderPromotion table with null values
                        if (appliedPromotion != null)
                        {
                            if (appliedPromotion.Amount == null && appliedPromotion.OrderLineId == null)
                            {
                                customerOrder.CustomerOrderPromotions.Remove(appliedPromotion);
                                this.UnitOfWork.GetRepository <CustomerOrderPromotion>().Delete(appliedPromotion);
                            }
                        }
                        continue;
                    }
                }
                orderLine.PromotionResult   = promotionResult;
                orderLine.UnitListPrice     = productPriceDto.UnitListPrice;
                orderLine.UnitRegularPrice  = productPriceDto.UnitRegularPrice;
                orderLine.UnitNetPrice      = num3;
                orderLine.UnitNetPrice      = orderLine.UnitNetPrice < Decimal.Zero ? Decimal.Zero : orderLine.UnitNetPrice;
                orderLine.TotalRegularPrice = NumberHelper.RoundCurrency(orderLine.UnitListPrice * orderLine.QtyOrdered);
                orderLine.TotalNetPrice     = NumberHelper.RoundCurrency(orderLine.UnitNetPrice * orderLine.QtyOrdered);
                this.AddOrUpdateCustomerOrderPromotion(customerOrder, appliedPromotion, orderLine, promotionResult);
            }
        }