public IHttpActionResult AddressUpdate(int orderGroupId, [FromBody] CallbackAddressUpdateRequest addressUpdateRequest) { var cart = _orderRepository.Load <ICart>(orderGroupId); var response = _klarnaCheckoutService.UpdateAddress(cart, addressUpdateRequest); return(Ok(response)); }
public virtual AddressUpdateResponse UpdateAddress(ICart cart, CallbackAddressUpdateRequest addressUpdateRequest) { var configuration = GetConfiguration(cart.MarketId); var shipment = cart.GetFirstShipment(); var validationIssues = new Dictionary <ILineItem, List <ValidationIssue> >(); var rewardDescriptions = Enumerable.Empty <RewardDescription>(); if (shipment != null) { shipment.ShippingAddress = addressUpdateRequest.ShippingCheckoutAddress.ToOrderAddress(cart); validationIssues = _klarnaCartValidator.ValidateCart(cart); rewardDescriptions = _klarnaCartValidator.ApplyDiscounts(cart); _orderRepository.Save(cart); } var totals = _orderGroupCalculator.GetOrderGroupTotals(cart); var result = new AddressUpdateResponse { OrderAmount = AmountHelper.GetAmount(totals.Total), OrderTaxAmount = AmountHelper.GetAmount(totals.TaxTotal), OrderLines = GetOrderLines(cart, totals, configuration.SendProductAndImageUrl), PurchaseCurrency = cart.Currency.CurrencyCode, ShippingOptions = configuration.ShippingOptionsInIFrame ? GetShippingOptions(cart, cart.Currency) : Enumerable.Empty <ShippingOption>(), ValidationIssues = validationIssues, RewardDescriptions = rewardDescriptions }; if (ServiceLocator.Current.TryGetExistingInstance(out ICheckoutOrderDataBuilder checkoutOrderDataBuilder)) { checkoutOrderDataBuilder.Build(result, cart, configuration); } return(result); }