private async Task <OrderItem> PrepareDefaultOrderItemFromProductAsync(Order order, Product product) { var customer = await CustomerService.GetCustomerByIdAsync(order.CustomerId); var presetQty = 1; var price = await _priceCalculationService.GetFinalPriceAsync(product, customer, decimal.Zero, true, presetQty); var(priceInclTax, _) = await _taxService.GetProductPriceAsync(product, price.finalPrice, includingTax : true, customer); var(priceExclTax, _) = await _taxService.GetProductPriceAsync(product, price.finalPrice, includingTax : false, customer); var orderItem = new OrderItem { OrderItemGuid = new Guid(), UnitPriceExclTax = priceExclTax, UnitPriceInclTax = priceInclTax, PriceInclTax = priceInclTax, PriceExclTax = priceExclTax, OriginalProductCost = await _priceCalculationService.GetProductCostAsync(product, null), Quantity = presetQty, ProductId = product.Id, OrderId = order.Id }; return(orderItem); }
protected async override Task MoveShoppingCartItemsToOrderItemsAsync( PlaceOrderContainer details, Order order ) { foreach (var sc in details.Cart) { var product = await _productService.GetProductByIdAsync(sc.ProductId); //prices var scUnitPrice = (await _shoppingCartService.GetUnitPriceAsync(sc, true)).unitPrice; var(scSubTotal, discountAmount, scDiscounts, _) = await _shoppingCartService.GetSubTotalAsync(sc, true); // var scUnitPriceInclTax = // await _taxService.GetProductPriceAsync(product, scUnitPrice, true, details.Customer); var scUnitPriceExclTax = await _taxService.GetProductPriceAsync(product, scUnitPrice, false, details.Customer); // var scSubTotalInclTax = // await _taxService.GetProductPriceAsync(product, scSubTotal, true, details.Customer); var scSubTotalExclTax = await _taxService.GetProductPriceAsync(product, scSubTotal, false, details.Customer); // custom - getting warranty tax var(_, scSubTotalInclTax, scUnitPriceInclTax, _, _) = await _warrantyTaxService.CalculateWarrantyTaxAsync(sc, details.Customer, scSubTotalExclTax.price, scUnitPriceExclTax.price); var discountAmountInclTax = await _taxService.GetProductPriceAsync(product, discountAmount, true, details.Customer); var discountAmountExclTax = await _taxService.GetProductPriceAsync(product, discountAmount, false, details.Customer); foreach (var disc in scDiscounts) { if (!_discountService.ContainsDiscount(details.AppliedDiscounts, disc)) { details.AppliedDiscounts.Add(disc); } } //attributes var attributeDescription = await _productAttributeFormatter.FormatAttributesAsync(product, sc.AttributesXml, details.Customer); var itemWeight = await _shippingService.GetShoppingCartItemWeightAsync(sc); //save order item var orderItem = new OrderItem { OrderItemGuid = Guid.NewGuid(), OrderId = order.Id, ProductId = product.Id, UnitPriceInclTax = scUnitPriceInclTax, UnitPriceExclTax = scUnitPriceExclTax.price, PriceInclTax = scSubTotalInclTax, PriceExclTax = scSubTotalExclTax.price, OriginalProductCost = await _priceCalculationService.GetProductCostAsync(product, sc.AttributesXml), AttributeDescription = attributeDescription, AttributesXml = sc.AttributesXml, Quantity = sc.Quantity, DiscountAmountInclTax = discountAmountInclTax.price, DiscountAmountExclTax = discountAmountExclTax.price, DownloadCount = 0, IsDownloadActivated = false, LicenseDownloadId = 0, ItemWeight = itemWeight, RentalStartDateUtc = sc.RentalStartDateUtc, RentalEndDateUtc = sc.RentalEndDateUtc }; await _orderService.InsertOrderItemAsync(orderItem); //gift cards await AddGiftCardsAsync(product, sc.AttributesXml, sc.Quantity, orderItem, scUnitPriceExclTax.price); //inventory await _productService.AdjustInventoryAsync(product, -sc.Quantity, sc.AttributesXml, string.Format(await _localizationService.GetResourceAsync("Admin.StockQuantityHistory.Messages.PlaceOrder"), order.Id)); } //clear shopping cart details.Cart.ToList().ForEach(async sci => await _shoppingCartService.DeleteShoppingCartItemAsync(sci, false)); }