/*START : BUSA 811 - Incorrect discount - Pricing issue for Canadian site with product ID 5018265U0 & Customer 37662*/ protected override List <PriceMatrix> GetPriceMatrixList(PricingServiceParameter pricingServiceParameter) { List <string> matrixProducts = this.GetMatrixProducts(pricingServiceParameter); List <string> matrixCustomers = this.GetMatrixCustomers(pricingServiceParameter, matrixProducts); return(this.UnitOfWork.GetRepository <PriceMatrix>().GetTable().WhereContains <PriceMatrix, string>(o => o.ProductKeyPart, matrixProducts).WhereContains <PriceMatrix, string>(o => o.CustomerKeyPart, matrixCustomers).Where <PriceMatrix>(o => o.CurrencyCode == pricingServiceParameter.CurrencyCode).ToList <PriceMatrix>()); }
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); }
protected override void SalePriceCheck(PricingServiceParameter pricingServiceParameter, PriceAndPriceBreaks priceAndBreaks, IList <PriceMatrix> priceMatrixList) { PriceMatrix selectedPriceMatrix = GetMatchedPriceMatrix(priceMatrixList); if (selectedPriceMatrix != null) { List <ProductPrice> list = this.GetProductPrice(priceMatrixList, pricingServiceParameter, selectedPriceMatrix, false).ToList <ProductPrice>(); ProductPrice productPrice = null; if (this.OrderLine != null && !string.IsNullOrEmpty(this.OrderLine.SmartPart)) { if (Convert.ToDecimal(this.OrderLine.SmartPart) > 0) { productPrice = list.OrderByDescending <ProductPrice, Decimal>((Func <ProductPrice, Decimal>)(pb => pb.BreakQty)).FirstOrDefault <ProductPrice>((Func <ProductPrice, bool>)(b => b.BreakQty <= Convert.ToDecimal(this.OrderLine.SmartPart))); } } else { productPrice = list.OrderByDescending <ProductPrice, Decimal>((Func <ProductPrice, Decimal>)(pb => pb.BreakQty)).FirstOrDefault <ProductPrice>((Func <ProductPrice, bool>)(b => b.BreakQty <= pricingServiceParameter.QtyOrdered)); } if (productPrice != null && productPrice.Price < priceAndBreaks.Price) { priceAndBreaks.SetPrice(productPrice.Price, pricingServiceParameter.CurrencyCode); priceAndBreaks.IsSalePrice = true; } priceAndBreaks.PriceBreaks = this.MergePriceBreaks(priceAndBreaks.PriceBreaks, list); } else { DateTimeOffset pricingDate1 = pricingServiceParameter.PricingDate; DateTimeOffset?nullable = this.Product.BasicSaleStartDate; if ((nullable.HasValue ? (pricingDate1 > nullable.GetValueOrDefault() ? 1 : 0) : 0) == 0) { return; } nullable = this.Product.BasicSaleEndDate; if (nullable.HasValue) { DateTimeOffset pricingDate2 = pricingServiceParameter.PricingDate; nullable = this.Product.BasicSaleEndDate; if ((nullable.HasValue ? (pricingDate2 < nullable.GetValueOrDefault() ? 1 : 0) : 0) == 0) { return; } } if (!(priceAndBreaks.Price == Decimal.Zero) && (!(priceAndBreaks.Price > Decimal.Zero) || !(priceAndBreaks.Price > this.Product.BasicSalePrice)) || !(pricingServiceParameter.UnitOfMeasure == this.Product.UnitOfMeasure)) { return; } priceAndBreaks.SetPrice(this.Product.BasicSalePrice, this.BaseCurrency.CurrencyCode); priceAndBreaks.IsSalePrice = true; } }
/*END : BUSA 811 - Incorrect discount - Pricing issue for Canadian site with product ID 5018265U0 & Customer 37662*/ //Pricing 2018 get PriceMatrix protected virtual List <PriceMatrix> GetPriceMatrixList_Brasseler(PricingServiceParameter pricingServiceParameter) { var QtyBrkCls = this.Product.PriceBasis; if (!string.IsNullOrEmpty(QtyBrkCls)) { return(this.UnitOfWork.GetRepository <PriceMatrix>().GetTable().Where(x => x.ProductKeyPart == QtyBrkCls && x.CustomerKeyPart == "1" && x.CurrencyCode == "CAD").ToList <PriceMatrix>()); } else { return(this.UnitOfWork.GetRepository <PriceMatrix>().GetTable().Where(x => x.ProductKeyPart == this.Product.Name && x.CustomerKeyPart == "1" && x.CurrencyCode == "CAD").ToList <PriceMatrix>()); } }
//BUSA-472 : Duplicate Customers on Production Ends protected override Decimal GetBasePrice(PricingServiceParameter pricingServiceParameter) { decimal basePrice = 0; var basePriceCount = UnitOfWork.GetRepository <ProductCurrencyMappingBrasseler>().GetTable().Where(x => x.ProductId == this.Product.Id).Count(); if (basePriceCount == 0) { LogHelper.For(this).Info("Missing Canada price for #" + this.Product.Name); basePrice = 9999; // set Price return(basePrice); } basePrice = UnitOfWork.GetRepository <ProductCurrencyMappingBrasseler>().GetTable().Where(x => x.ProductId == this.Product.Id).FirstOrDefault().BasicListPrice; return(basePrice); }
protected override List <string> GetMatrixProducts(PricingServiceParameter pricingServiceParameter) { List <string> stringList = new List <string>() { this.Product.Id.ToString() }; var productContrCode = this.Product.CustomProperties.Where(p => p.Name.EqualsIgnoreCase("ProductContractCode")).FirstOrDefault(); if (productContrCode != null && !string.IsNullOrEmpty(productContrCode.Value) && !stringList.Contains(productContrCode.Value)) { stringList.Add(productContrCode.Value); } if (!this.Product.ProductCode.IsBlank() && !stringList.Contains(this.Product.ProductCode)) { stringList.Add(this.Product.ProductCode); // BUSA-555 : Pricing issue for Customer 1061091 TLC FOR SMILES Starts if (!string.IsNullOrEmpty(this.Product.ProductCode)) { stringList.Add(this.Product.ProductCode.Substring(0, (this.Product.ProductCode.Length) - 2)); } // BUSA-555 : Pricing issue for Customer 1061091 TLC FOR SMILES Ends } return(stringList); }
public override PricingServiceResult ProcessPriceCalculation(PricingServiceParameter pricingServiceParameter) { //var useVolumeGroupPricing = UnitOfWork.GetTypedRepository<IWebsiteConfigurationRepository>().GetOrCreateByName<string>("UseVolumeGroupPricing", SiteContext.Current.Website.Id).ToString(); var useVolumeGroupPricing = customSettings.Value.UseVolumeGroupPricing; if (useVolumeGroupPricing.ToUpper() == "TRUE") { priceBasisList = new List <string>() { "P1", "P2", "P3", "P4", "P5", "P6", "L" }; } else { priceBasisList = new List <string>() { "P1", "P2", "P3", "P4", "P5", "P6" }; } PricingServiceResult result; this.SetRecordTypePriority(); List <PriceMatrix> priceMatrixList = this.GetPriceMatrixList(pricingServiceParameter); PriceAndPriceBreaks priceAndPriceBreaks1 = this.GetPriceAndPriceBreaks((IList <PriceMatrix>)priceMatrixList, pricingServiceParameter, true); this.ListPricing = priceAndPriceBreaks1; PriceAndPriceBreaks priceAndPriceBreaks2 = this.GetPriceAndPriceBreaks((IList <PriceMatrix>)priceMatrixList, pricingServiceParameter, false); this.PerformCurrencyConversion(pricingServiceParameter.CurrencyCode, priceAndPriceBreaks1); this.PerformCurrencyConversion(pricingServiceParameter.CurrencyCode, priceAndPriceBreaks2); result = new PricingServiceResult() { UnitListPrice = priceAndPriceBreaks1.Price, UnitListBreakPrices = (IList <ProductPrice>)priceAndPriceBreaks1.PriceBreaks, UnitRegularPrice = priceAndPriceBreaks2.Price, UnitRegularBreakPrices = (IList <ProductPrice>)priceAndPriceBreaks2.PriceBreaks, IsOnSale = priceAndPriceBreaks2.IsSalePrice, CurrencyRate = priceAndPriceBreaks1.CurrencyRate }; //Pricing 2018 changes if (SiteContext.Current.ShipTo != null && useVolumeGroupPricing.ToUpper() == "TRUE") { var customer = !string.IsNullOrEmpty(SiteContext.Current.ShipTo.CustomerSequence) ? SiteContext.Current.ShipTo : SiteContext.Current.BillTo; var DefaultPriceList = customer.CustomProperties.Where(p => p.Name.EqualsIgnoreCase("DefaultPriceList")).FirstOrDefault().Value; if (result.UnitRegularPrice == result.UnitListPrice && !string.IsNullOrEmpty(DefaultPriceList) && DefaultPriceList == "1") { List <PriceMatrix> volumePriceMatrixList = GetPriceMatrixList_Brasseler(pricingServiceParameter); PriceAndPriceBreaks volumePriceAndPriceBreaks1 = this.GetPriceAndPriceBreaks((IList <PriceMatrix>)volumePriceMatrixList, pricingServiceParameter, true); this.ListPricing = volumePriceAndPriceBreaks1; PriceAndPriceBreaks volumePriceAndPriceBreaks2 = this.GetPriceAndPriceBreaks((IList <PriceMatrix>)volumePriceMatrixList, pricingServiceParameter, false); this.PerformCurrencyConversion(pricingServiceParameter.CurrencyCode, volumePriceAndPriceBreaks1); this.PerformCurrencyConversion(pricingServiceParameter.CurrencyCode, volumePriceAndPriceBreaks2); PricingServiceResult volumePricingServiceResult = new PricingServiceResult(); volumePricingServiceResult.UnitListPrice = volumePriceAndPriceBreaks1.Price; volumePricingServiceResult.UnitListBreakPrices = (IList <ProductPrice>)volumePriceAndPriceBreaks1.PriceBreaks; volumePricingServiceResult.UnitRegularPrice = volumePriceAndPriceBreaks2.Price; volumePricingServiceResult.UnitRegularBreakPrices = (IList <ProductPrice>)volumePriceAndPriceBreaks2.PriceBreaks; int num1 = volumePriceAndPriceBreaks2.IsSalePrice ? 1 : 0; volumePricingServiceResult.IsOnSale = num1 != 0; Decimal volumeCurrencyRate = volumePricingServiceResult.CurrencyRate; volumePricingServiceResult.CurrencyRate = volumeCurrencyRate; result = volumePricingServiceResult; } } this.AddDisplayPrices(result, this.GetCurrency(pricingServiceParameter.CurrencyCode)); this.AddExtendedPrices(pricingServiceParameter, result, this.GetCurrency(pricingServiceParameter.CurrencyCode)); return(result); }
protected override IEnumerable <ProductPrice> GetProductPrice(IList <PriceMatrix> priceMatrixList, PricingServiceParameter pricingServiceParameter, PriceMatrix selectedPriceMatrix, bool regularPrice) { List <ProductPrice> productPriceList = new List <ProductPrice>(); List <PriceBracket> matrixBrackets = this.GetMatrixBrackets(selectedPriceMatrix); CurrencyDto currency = this.GetCurrency(selectedPriceMatrix.CurrencyCode); Decimal basePrice = this.GetBasePrice(pricingServiceParameter); foreach (PriceBracket priceBracket1 in matrixBrackets) { PriceData priceData1 = new PriceData(); priceData1.PricingServiceParameter = pricingServiceParameter; Product product = this.Product; priceData1.Product = product; Customer billTo = this.BillTo; priceData1.BillTo = billTo; Customer shipTo = GetSiteContextShipTo();//BUSA-42 : Duplicate Customers on Production. priceData1.ShipTo = shipTo; List <PriceBracket> priceBracketList = matrixBrackets; priceData1.MatrixBrackets = priceBracketList; PriceBracket priceBracket2 = priceBracket1; priceData1.PriceBracket = priceBracket2; if (selectedPriceMatrix.RecordType.EqualsIgnoreCase("Product")) { var priceBracket = GetAllCustomerItemPriceBracket(); if (priceBracket != null) { priceData1.PriceBracket.AdjustmentType = priceBracket.AdjustmentType; priceData1.PriceBracket.PriceBasis = priceBracket.PriceBasis; priceData1.PriceBracket.Amount = priceBracket.Amount; priceData1.PriceBracket.AltAmount = priceBracket.AltAmount; } } Decimal num = basePrice; priceData1.BasePrice = num; string calculationFlags = selectedPriceMatrix.CalculationFlags; priceData1.CalculationFlags = calculationFlags; if (selectedPriceMatrix.RecordType.EqualsIgnoreCase("Product")) { priceData1.TempBasis = priceData1.PriceBracket.AltAmount; } else { priceData1.TempBasis = this.GetTempBasisValue(priceBracket1.PriceBasis, priceMatrixList, pricingServiceParameter, regularPrice); } PriceData priceData = priceData1; IPriceCalculation priceCalculation = this.PriceCalculations.FirstOrDefault <IPriceCalculation>((Func <IPriceCalculation, bool>)(r => r.IsMatch(priceData))); if (priceCalculation != null) { ProductPrice productPrice = new ProductPrice(); productPrice.BreakQty = priceData.PriceBracket.BreakQty; if (regularPrice) { //Start:Revert BUSA 682 :The Base price of the product in ERP and the base price of the same product on the PDP are different.Revert BUSA: 696 Acct #78803:1076826 - Product (5011768U0) price differs in ERP and on the PDP. var price = GetPriceListAmount("P2"); productPrice.Price = !string.IsNullOrEmpty(price) ? Convert.ToDecimal(price) : this.GetBasePrice(pricingServiceParameter); //productPrice.Price = !string.IsNullOrEmpty(price) ? Convert.ToDecimal(price) : this.Product.BasicListPrice; //End:Revert BUSA 682 :The Base price of the product in ERP and the base price of the same product on the PDP are different.Revert BUSA: 696 Acct #78803:1076826 - Product (5011768U0) price differs in ERP and on the PDP. } else { productPrice.Price = priceCalculation.CalculatePrice(priceData); } productPrice.Price = this.ApplyProductMultiplier(pricingServiceParameter, productPrice.Price); productPrice.Price = selectedPriceMatrix.UnitOfMeasure == pricingServiceParameter.UnitOfMeasure || selectedPriceMatrix.UnitOfMeasure.IsBlank() && pricingServiceParameter.UnitOfMeasure == this.Product.UnitOfMeasure || priceBracket1.PriceBasis.Equals("CLM", StringComparison.OrdinalIgnoreCase) ? productPrice.Price : this.AdjustForUnitOfMeasure(pricingServiceParameter, productPrice.Price); productPrice.PriceDisplay = this.CurrencyFormatProvider.GetString(productPrice.Price, currency); productPriceList.Add(productPrice); } } return(productPriceList); }
protected override PriceAndPriceBreaks GetPriceAndPriceBreaks(IList <PriceMatrix> priceMatrixList, PricingServiceParameter pricingServiceParameter, bool regularPrice) { PriceAndPriceBreaks priceAndPriceBreaks = new PriceAndPriceBreaks() { PriceBreaks = new List <ProductPrice>(), IsSalePrice = false }; this.SetupRecordTypeMatrixQueries(pricingServiceParameter, regularPrice); this.SetupCommonMatrixQueries(pricingServiceParameter, regularPrice); this.SelectedPriceMatrix = GetMatchedPriceMatrix(priceMatrixList); if (this.SelectedPriceMatrix == null || this.GetPriceBracketByQty(this.SelectedPriceMatrix, pricingServiceParameter.QtyOrdered) == null) { this.SetBasicPricing(priceAndPriceBreaks, pricingServiceParameter, regularPrice); priceAndPriceBreaks.PriceBreaks = this.GetBreakPrices(this.SelectedPriceMatrix, this.GetCurrency(priceAndPriceBreaks.CurrencyCode)); } else { IEnumerable <ProductPrice> productPrice1 = this.GetProductPrice(priceMatrixList, pricingServiceParameter, this.SelectedPriceMatrix, regularPrice); priceAndPriceBreaks.PriceBreaks.AddRange(productPrice1); ProductPrice productPrice2 = null; if (this.OrderLine != null && !string.IsNullOrEmpty(this.OrderLine.SmartPart)) { if (Convert.ToDecimal(this.OrderLine.SmartPart) > 0) { productPrice2 = priceAndPriceBreaks.PriceBreaks.OrderByDescending <ProductPrice, Decimal>((Func <ProductPrice, Decimal>)(pb => pb.BreakQty)).FirstOrDefault <ProductPrice>((Func <ProductPrice, bool>)(b => b.BreakQty <= pricingServiceParameter.QtyOrdered)); } } else { productPrice2 = priceAndPriceBreaks.PriceBreaks.OrderByDescending <ProductPrice, Decimal>((Func <ProductPrice, Decimal>)(pb => pb.BreakQty)).FirstOrDefault <ProductPrice>((Func <ProductPrice, bool>)(b => b.BreakQty <= pricingServiceParameter.QtyOrdered)); } if (productPrice2 != null) { priceAndPriceBreaks.SetPrice(productPrice2.Price, pricingServiceParameter.CurrencyCode); } } if (!regularPrice) { this.SalePriceCheck(pricingServiceParameter, priceAndPriceBreaks, priceMatrixList); } this.ZeroPriceCheck(priceAndPriceBreaks, pricingServiceParameter, priceMatrixList); this.ConfigurePrice(pricingServiceParameter, priceAndPriceBreaks); this.AdvancedConfigurationPrice(pricingServiceParameter, priceAndPriceBreaks); if (priceAndPriceBreaks.Price <= Decimal.Zero) { priceAndPriceBreaks = this.CheckUnitOfMeasurePricing(priceMatrixList, pricingServiceParameter, priceAndPriceBreaks, regularPrice); } return(priceAndPriceBreaks); }
protected override Decimal GetTempBasisValue(string priceBasis, IList <PriceMatrix> priceMatrixList, PricingServiceParameter pricingServiceParameter, bool regularPrice) { Decimal num = new Decimal(); if (priceBasis.IsBlank()) { return(num); } if (!string.IsNullOrEmpty(priceBasis) && priceBasisList.Contains(priceBasis, StringComparer.OrdinalIgnoreCase)) { var altAmount = GetPriceListAmount(priceBasis); if (!string.IsNullOrEmpty(altAmount) && decimal.TryParse(altAmount, out num)) { return(num); } } return(num); }