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); }
private ProductSubscriptionDto GetProductSubscriptionDto(OrderLine orderLine) { ProductSubscriptionDto productSubscriptionDto = new ProductSubscriptionDto() { SubscriptionShipViaId = orderLine.Product.SubscriptionShipViaId, SubscriptionCyclePeriod = orderLine.Product.SubscriptionCyclePeriod, SubscriptionPeriodsPerCycle = orderLine.Product.SubscriptionPeriodsPerCycle, SubscriptionTotalCycles = orderLine.Product.SubscriptionTotalCycles, SubscriptionFixedPrice = orderLine.Product.SubscriptionFixedPrice, SubscriptionAddToInitialOrder = orderLine.Product.SubscriptionAddToInitialOrder, SubscriptionAllMonths = orderLine.Product.SubscriptionAllMonths, SubscriptionJanuary = orderLine.Product.SubscriptionJanuary, SubscriptionFebruary = orderLine.Product.SubscriptionFebruary, SubscriptionMarch = orderLine.Product.SubscriptionMarch, SubscriptionApril = orderLine.Product.SubscriptionApril, SubscriptionMay = orderLine.Product.SubscriptionMay, SubscriptionJune = orderLine.Product.SubscriptionJune, SubscriptionJuly = orderLine.Product.SubscriptionJuly, SubscriptionAugust = orderLine.Product.SubscriptionAugust, SubscriptionSeptember = orderLine.Product.SubscriptionSeptember, SubscriptionOctober = orderLine.Product.SubscriptionOctober, SubscriptionNovember = orderLine.Product.SubscriptionNovember, SubscriptionDecember = orderLine.Product.SubscriptionDecember }; CustomProperty customProperty = orderLine.CustomProperties.FirstOrDefault <CustomProperty>((Func <CustomProperty, bool>)(o => o.Name.Equals("ProductSubscription", StringComparison.OrdinalIgnoreCase))); if (customProperty != null) { if (!customProperty.Value.IsBlank()) { try { productSubscriptionDto = JsonConvert.DeserializeObject <ProductSubscriptionDto>(customProperty.Value); } catch (Exception ex) { LogHelper.For((object)this).Info((object)ex.Message, (Exception)null, (string)null); } return(productSubscriptionDto); } } return(productSubscriptionDto); }
private Subscription GetSubscription(CustomerOrder customerOrder, OrderLine orderLine, ProductSubscriptionDto productSubscriptionDto) { return(new Subscription() { CustomerOrder = customerOrder, Customer = customerOrder.Customer, ShipTo = customerOrder.ShipTo, Product = orderLine.Product, Website = customerOrder.Website, UserProfile = customerOrder.PlacedByUserProfile, ShipViaId = productSubscriptionDto.SubscriptionShipViaId ?? customerOrder.ShipVia.Id, CyclePeriod = productSubscriptionDto.SubscriptionCyclePeriod, PeriodsPerCycle = productSubscriptionDto.SubscriptionPeriodsPerCycle, TotalCycles = productSubscriptionDto.SubscriptionTotalCycles, FixedPrice = productSubscriptionDto.SubscriptionFixedPrice, IncludeInInitialOrder = productSubscriptionDto.SubscriptionAddToInitialOrder, AllMonths = productSubscriptionDto.SubscriptionAllMonths, January = productSubscriptionDto.SubscriptionJanuary, February = productSubscriptionDto.SubscriptionFebruary, March = productSubscriptionDto.SubscriptionMarch, April = productSubscriptionDto.SubscriptionApril, May = productSubscriptionDto.SubscriptionMay, June = productSubscriptionDto.SubscriptionJune, July = productSubscriptionDto.SubscriptionJuly, August = productSubscriptionDto.SubscriptionAugust, September = productSubscriptionDto.SubscriptionSeptember, October = productSubscriptionDto.SubscriptionOctober, November = productSubscriptionDto.SubscriptionNovember, December = productSubscriptionDto.SubscriptionDecember }); }