protected OrderModel.AddOrderProductModel.ProductDetailsModel PrepareAddProductToOrderModel(int orderId, int productId) { var product = _productService.GetProductById(productId); if (product == null) throw new ArgumentException("No product found with the specified id"); var customer = _workContext.CurrentCustomer; // TODO: we need a customer representing entity instance for backend work var order = _orderService.GetOrderById(orderId); decimal taxRate = decimal.Zero; decimal unitPrice = _priceCalculationService.GetFinalPrice(product, null, customer, decimal.Zero, false, 1); decimal unitPriceInclTax = _taxService.GetProductPrice(product, unitPrice, true, customer, out taxRate); decimal unitPriceExclTax = _taxService.GetProductPrice(product, unitPrice, false, customer, out taxRate); var model = new OrderModel.AddOrderProductModel.ProductDetailsModel() { ProductId = productId, OrderId = orderId, Name = product.Name, ProductType = product.ProductType, Quantity = 1, UnitPriceInclTax = unitPriceInclTax, UnitPriceExclTax = unitPriceExclTax, SubTotalInclTax = unitPriceInclTax, SubTotalExclTax = unitPriceExclTax, ShowUpdateTotals = (order.OrderStatusId <= (int)OrderStatus.Pending), AdjustInventory = true, UpdateTotals = true }; //attributes var productVariantAttributes = _productAttributeService.GetProductVariantAttributesByProductId(product.Id); foreach (var attribute in productVariantAttributes) { var pvaModel = new OrderModel.AddOrderProductModel.ProductVariantAttributeModel() { Id = attribute.Id, ProductAttributeId = attribute.ProductAttributeId, Name = attribute.ProductAttribute.Name, TextPrompt = attribute.TextPrompt, IsRequired = attribute.IsRequired, AttributeControlType = attribute.AttributeControlType }; if (attribute.ShouldHaveValues()) { //values var pvaValues = _productAttributeService.GetProductVariantAttributeValues(attribute.Id); foreach (var pvaValue in pvaValues) { var pvaValueModel = new OrderModel.AddOrderProductModel.ProductVariantAttributeValueModel() { Id = pvaValue.Id, Name = pvaValue.Name, IsPreSelected = pvaValue.IsPreSelected }; pvaModel.Values.Add(pvaValueModel); } } model.ProductVariantAttributes.Add(pvaModel); } //gift card model.GiftCard.IsGiftCard = product.IsGiftCard; if (model.GiftCard.IsGiftCard) { model.GiftCard.GiftCardType = product.GiftCardType; } return model; }
protected OrderModel.AddOrderProductModel.ProductDetailsModel PrepareAddProductToOrderModel(int orderId, int productId) { var product = _productService.GetProductById(productId); if (product == null) throw new ArgumentException("No product found with the specified id"); var model = new OrderModel.AddOrderProductModel.ProductDetailsModel() { ProductId = productId, OrderId = orderId, Name = product.Name, ProductType = product.ProductType, UnitPriceExclTax = decimal.Zero, UnitPriceInclTax = decimal.Zero, Quantity = 1, SubTotalExclTax = decimal.Zero, SubTotalInclTax = decimal.Zero }; //attributes var productVariantAttributes = _productAttributeService.GetProductVariantAttributesByProductId(product.Id); foreach (var attribute in productVariantAttributes) { var pvaModel = new OrderModel.AddOrderProductModel.ProductVariantAttributeModel() { Id = attribute.Id, ProductAttributeId = attribute.ProductAttributeId, Name = attribute.ProductAttribute.Name, TextPrompt = attribute.TextPrompt, IsRequired = attribute.IsRequired, AttributeControlType = attribute.AttributeControlType }; if (attribute.ShouldHaveValues()) { //values var pvaValues = _productAttributeService.GetProductVariantAttributeValues(attribute.Id); foreach (var pvaValue in pvaValues) { var pvaValueModel = new OrderModel.AddOrderProductModel.ProductVariantAttributeValueModel() { Id = pvaValue.Id, Name = pvaValue.Name, IsPreSelected = pvaValue.IsPreSelected }; pvaModel.Values.Add(pvaValueModel); } } model.ProductVariantAttributes.Add(pvaModel); } //gift card model.GiftCard.IsGiftCard = product.IsGiftCard; if (model.GiftCard.IsGiftCard) { model.GiftCard.GiftCardType = product.GiftCardType; } return model; }