protected virtual CheckoutOrder GetCheckoutOrderData( ICart cart, IMarket market, PaymentMethodDto paymentMethodDto) { var totals = _orderGroupCalculator.GetOrderGroupTotals(cart); var shipment = cart.GetFirstShipment(); var marketCountry = CountryCodeHelper.GetTwoLetterCountryCode(market.Countries.FirstOrDefault()); if (string.IsNullOrWhiteSpace(marketCountry)) { throw new ConfigurationException($"Please select a country in CM for market {cart.MarketId}"); } var checkoutConfiguration = GetCheckoutConfiguration(market); var orderData = new CheckoutOrder { PurchaseCountry = marketCountry, PurchaseCurrency = cart.Currency.CurrencyCode, Locale = _languageService.ConvertToLocale(Thread.CurrentThread.CurrentCulture.Name), // Non-negative, minor units. Total amount of the order, including tax and any discounts. OrderAmount = AmountHelper.GetAmount(totals.Total), // Non-negative, minor units. The total tax amount of the order. OrderTaxAmount = AmountHelper.GetAmount(totals.TaxTotal), MerchantUrls = GetMerchantUrls(cart), OrderLines = GetOrderLines(cart, totals, checkoutConfiguration.SendProductAndImageUrl) }; if (checkoutConfiguration.SendShippingCountries) { orderData.ShippingCountries = GetCountries().ToList(); } // KCO_6 Setting to let the user select shipping options in the iframe if (checkoutConfiguration.SendShippingOptionsPriorAddresses) { if (checkoutConfiguration.ShippingOptionsInIFrame) { orderData.ShippingOptions = GetShippingOptions(cart, cart.Currency).ToList(); } else { if (shipment != null) { orderData.SelectedShippingOption = ShippingManager.GetShippingMethod(shipment.ShippingMethodId) ?.ShippingMethod?.FirstOrDefault() ?.ToShippingOption(); } } } if (paymentMethodDto != null) { orderData.CheckoutOptions = GetOptions(cart.MarketId); } if (checkoutConfiguration.PrefillAddress) { // KCO_4: In case of signed in user the email address and default address details will be prepopulated by data from Merchant system. var customerContact = CustomerContext.Current.GetContactById(cart.CustomerId); if (customerContact?.PreferredBillingAddress != null) { orderData.BillingCheckoutAddress = customerContact.PreferredBillingAddress.ToAddress(); } if (orderData.CheckoutOptions.AllowSeparateShippingAddress) { if (customerContact?.PreferredShippingAddress != null) { orderData.ShippingCheckoutAddress = customerContact.PreferredShippingAddress.ToAddress(); } if (shipment?.ShippingAddress != null) { orderData.ShippingCheckoutAddress = shipment.ShippingAddress.ToCheckoutAddress(); } } } return(orderData); }