public async Task <OrderDTO> GetSubmitOrderData(SubmitOrderRequest request) { Customer customer = kenticoUsers.GetCurrentCustomer(); var notificationEmails = request.EmailConfirmation.Union(new[] { customer.Email }); if ((request?.DeliveryAddress?.Id ?? 0) < 0) { shoppingCart.SetShoppingCartAddress(request.DeliveryAddress); customer.FirstName = request.DeliveryAddress.CustomerName; customer.LastName = string.Empty; customer.Email = request.DeliveryAddress.Email; customer.Phone = request.DeliveryAddress.Phone; } var shippingAddress = shoppingCart.GetCurrentCartShippingAddress(); shippingAddress.Country = localization.GetCountries().FirstOrDefault(c => c.Id == shippingAddress.Country.Id); shippingAddress.State = localization.GetStates().FirstOrDefault(c => c.Id == shippingAddress.State.Id); var billingAddress = shoppingCart.GetDefaultBillingAddress(); var billingState = localization.GetStates().FirstOrDefault(c => c.Id == billingAddress.StateId); var site = siteProvider.GetKenticoSite(); var paymentMethod = shoppingCart.GetPaymentMethod(request.PaymentMethod.Id); var cartItems = shoppingCart.GetShoppingCartItems(); var currency = siteProvider.GetSiteCurrency(); var totals = shoppingCart.GetShoppingCartTotals(); totals.TotalTax = await taxService.EstimateTotalTax(shippingAddress); if (string.IsNullOrWhiteSpace(customer.Company)) { customer.Company = settings.DefaultCustomerCompanyName; } foreach (var item in cartItems.Where(i => i.IsTemplated)) { var taskId = await CallRunGeneratePdfTask(item); item.DesignFilePathTaskId = taskId; } var orderDto = new OrderDTO() { BillingAddress = orderDataFactory.CreateBillingAddress(billingAddress, billingState?.StateDisplayName), ShippingAddress = orderDataFactory.CreateShippingAddress(shippingAddress, customer), Customer = orderDataFactory.CreateCustomer(customer), OrderDate = DateTime.Now, PaymentOption = orderDataFactory.CreatePaymentOption(paymentMethod, request), Site = new SiteDTO() { KenticoSiteID = site.Id, KenticoSiteName = site.Name, ErpCustomerId = site.ErpCustomerId }, OrderCurrency = new CurrencyDTO() { CurrencyCode = currency.Code, KenticoCurrencyID = currency.Id }, OrderStatus = new OrderStatusDTO() { KenticoOrderStatusID = kenticoOrder.GetOrderStatusId("Pending"), OrderStatusName = "PENDING" }, TotalPrice = totals.TotalItemsPrice, TotalShipping = totals.TotalShipping, TotalTax = totals.TotalTax, Items = cartItems.Select(item => MapCartItemTypeToOrderItemType(item)), NotificationsData = notificationEmails.Select(e => new NotificationInfoDto { Email = e, Language = customer.PreferredLanguage }) }; // If only mailing list items in cart, we are not picking any delivery option if (!cartItems.All(i => i.IsMailingList)) { var deliveryMethod = shoppingCart.GetShippingOption(request.DeliveryMethod); orderDto.ShippingOption = new ShippingOptionDTO() { KenticoShippingOptionID = deliveryMethod.Id, CarrierCode = deliveryMethod.SAPName, ShippingCompany = deliveryMethod.CarrierCode, ShippingService = deliveryMethod.Service.Replace("#", "") }; } return(orderDto); }