コード例 #1
0
        protected virtual async Task UpdateShippingAddress(Overture.ServiceModel.Orders.Cart cart, AddressViewModel addressViewModel)
        {
            if (addressViewModel == null)
            {
                return;
            }

            var shipment = cart.Shipments.FirstOrDefault();

            if (shipment == null)
            {
                return;
            }

            var newAddress = CreateAddressFromViewModel(addressViewModel);

            var isShippingChanged = shipment.Address == null || !IsEqual(shipment.Address, newAddress);

            shipment.Address = newAddress;

            await ShippingMethodViewService.EstimateShippingAsync(new EstimateShippingParam
            {
                Cart        = cart,
                CultureInfo = CultureInfo.GetCultureInfo(cart.CultureName), //TODO: Fix me
                ForceUpdate = isShippingChanged
            }).ConfigureAwait(false);
        }
コード例 #2
0
        public async Task WHEN_NoFulfillmentMethod_SHOULD_choose_cheapest_shippingMethod()
        {
            //Arrange
            var cart = new Overture.ServiceModel.Orders.Cart
            {
                Shipments = new List <Shipment>
                {
                    new Shipment()
                }
            };

            var methods =
                (await Container.Get <IFulfillmentMethodRepository>()
                 .GetCalculatedFulfillmentMethods(new GetShippingMethodsParam())).OrderBy(fm => fm.Cost);

            var sut = Container.CreateInstance <ShippingMethodViewService>();

            //Act
            var vm = await sut.EstimateShippingAsync(new EstimateShippingParam
            {
                Cart        = cart,
                CultureInfo = CultureInfo.InvariantCulture,
                ForceUpdate = GetRandom.Boolean()
            });

            //Assert
            vm.Should().NotBeNull();
            vm.CostDouble.Should().Be(methods.First().Cost);
            cart.Shipments.First().FulfillmentMethod.Should().NotBeNull();

            Container.Verify((IFulfillmentMethodRepository repo) => repo.GetCalculatedFulfillmentMethods(It.IsNotNull <GetShippingMethodsParam>()));
        }
コード例 #3
0
        protected virtual async Task UpdateShippingMethod(Overture.ServiceModel.Orders.Cart cart, ShippingMethodViewModel shippingMethodViewModel)
        {
            if (string.IsNullOrEmpty(shippingMethodViewModel?.Name))
            {
                return;
            }

            var shipment = cart.Shipments.FirstOrDefault();

            if (shipment == null)
            {
                return;
            }

            if (shipment.PickUpLocationId.HasValue)
            {
                shipment.PickUpLocationId = null;
                shipment.Address          = null;
                var fulfillmentLocation = await InventoryLocationProvider.GetFulfillmentLocationAsync(new GetFulfillmentLocationParam
                {
                    Scope = cart.ScopeId
                }).ConfigureAwait(false);

                shipment.FulfillmentLocationId = fulfillmentLocation.Id;
            }

            shipment.FulfillmentMethod = await GetFulfillmentMethodAsync(cart, shippingMethodViewModel);
        }
コード例 #4
0
        protected virtual string GetShippingFee(Overture.ServiceModel.Orders.Cart cart, CultureInfo cultureInfo)
        {
            if (!cart.GetActiveShipments().Any())
            {
                return(GetFreeShippingPriceLabel(cultureInfo));
            }

            if (cart.FulfillmentCost.HasValue)
            {
                return(GetShippingPrice(cart.FulfillmentCost.Value, cultureInfo));
            }

            var shippingMethodParam = new GetShippingMethodsParam
            {
                CartName    = cart.Name,
                CultureInfo = cultureInfo,
                CustomerId  = cart.CustomerId,
                Scope       = cart.ScopeId
            };

            //TODO: Remove the repository and pass the list of fulfillmentMethods in params
            var fulfillmentMethods = FulfillmentMethodRepository.GetCalculatedFulfillmentMethods(shippingMethodParam).Result;

            if (fulfillmentMethods == null || !fulfillmentMethods.Any())
            {
                return(GetFreeShippingPriceLabel(cultureInfo));
            }

            var cheapestShippingCost = fulfillmentMethods.Min(s => (decimal)s.Cost);

            var price = GetShippingPrice(cheapestShippingCost, cultureInfo);

            return(price);
        }
コード例 #5
0
        protected virtual async Task <FulfillmentMethod> GetFulfillmentMethodAsync(Overture.ServiceModel.Orders.Cart cart, ShippingMethodViewModel shippingMethodViewModel)
        {
            var param = new GetShippingMethodsParam
            {
                CartName    = cart.Name,
                CustomerId  = cart.CustomerId,
                CultureInfo = new CultureInfo(cart.CultureName),
                Scope       = cart.ScopeId
            };

            var fulfillmentMethods = await FulfillmentMethodRepository.GetCalculatedFulfillmentMethods(param);

            var fulfillmentMethod = fulfillmentMethods.FirstOrDefault(method =>
                                                                      method.Name == shippingMethodViewModel.Name &&
                                                                      method.ShippingProviderId == shippingMethodViewModel.ShippingProviderId);

            if (fulfillmentMethod == null)
            {
                throw new ComposerException(new ErrorViewModel
                {
                    ErrorCode    = "",
                    ErrorMessage = "Unable to find any shipment provider matching the provided parameters."
                });
            }

            return(fulfillmentMethod);
        }
コード例 #6
0
        protected virtual CheckoutRedirectActionViewModel GetCheckoutRedirectAction(Overture.ServiceModel.Orders.Cart cart)
        {
            var checkoutRedirectAction = new CheckoutRedirectActionViewModel();

            object lastCheckoutStep;

            if (cart.PropertyBag != null && cart.PropertyBag.TryGetValue(CartConfiguration.CartPropertyBagLastCheckoutStep, out lastCheckoutStep))
            {
                checkoutRedirectAction.LastCheckoutStep = (int)lastCheckoutStep;
            }

            //If there is no lineitem in the cart the checkout step is 0 (edit cart page).
            if (!cart.GetActiveShipments().Any() || !cart.GetActiveShipments().SelectMany(x => x.LineItems).Any())
            {
                checkoutRedirectAction.LastCheckoutStep = 0;
                return(checkoutRedirectAction);
            }

            //If there is lineitem in the cart lastCheckoutStep can't be 0 but 1 (step 1).
            if (checkoutRedirectAction.LastCheckoutStep == 0)
            {
                checkoutRedirectAction.LastCheckoutStep = 1;
            }

            return(checkoutRedirectAction);
        }
コード例 #7
0
        /// <summary>
        /// Maps a single shipment.
        /// </summary>
        /// <param name="shipment">Shipment to map.</param>
        /// <param name="cultureInfo">Culture Info.</param>
        /// <param name="imageInfo">Information about images</param>
        /// <param name="baseUrl">The request base url</param>
        /// <param name="cartVm">VM in which to map the shipment to.</param>
        /// <param name="cart">Cart being mapped.</param>
        protected virtual void MapOneShipment(
            Shipment shipment,
            CultureInfo cultureInfo,
            ProductImageInfo imageInfo,
            string baseUrl,
            CartViewModel cartVm,
            Overture.ServiceModel.Orders.Cart cart)
        {
            cartVm.CurrentShipmentId  = shipment.Id;
            cartVm.Rewards            = RewardViewModelFactory.CreateViewModel(shipment.Rewards, cultureInfo, RewardLevel.FulfillmentMethod, RewardLevel.Shipment).ToList();
            cartVm.OrderSummary.Taxes = TaxViewModelFactory.CreateTaxViewModels(shipment.Taxes, cultureInfo).ToList();
            cartVm.ShippingAddress    = GetAddressViewModel(shipment.Address, cultureInfo);

            cartVm.LineItemDetailViewModels = LineItemViewModelFactory.CreateViewModel(new CreateListOfLineItemDetailViewModelParam
            {
                Cart        = cart,
                LineItems   = shipment.LineItems,
                CultureInfo = cultureInfo,
                ImageInfo   = imageInfo,
                BaseUrl     = baseUrl
            }).ToList();

            MapLineItemQuantifiers(cartVm);

            cartVm.OrderSummary.IsShippingEstimatedOrSelected = IsShippingEstimatedOrSelected(shipment);
            cartVm.ShippingMethod = GetShippingMethodViewModel(shipment.FulfillmentMethod, cultureInfo);

#pragma warning disable 618
            MapShipmentAdditionalFees(shipment, cartVm.OrderSummary, cultureInfo);
#pragma warning restore 618
        }
コード例 #8
0
 public static List <string> GetAllShipmentStatuses(this Overture.ServiceModel.Orders.Cart cart)
 {
     if (cart == null || cart.Shipments == null)
     {
         return(new List <string>());
     }
     return(cart.Shipments.Select(item => item.Status).ToList());
 }
コード例 #9
0
 protected virtual void SetCustomerType(bool isGuest, Overture.ServiceModel.Orders.Cart cart)
 {
     if (cart.Customer == null)
     {
         cart.Customer = new CustomerSummary();
     }
     cart.Customer.Type = isGuest ? CustomerType.Guest : CustomerType.Registered;
 }
コード例 #10
0
 private static void SetCustomerType(bool isGuest, Overture.ServiceModel.Orders.Cart cart)
 {
     if (cart.Customer == null || !isGuest)
     {
         cart.Customer = new CustomerSummary();
     }
     cart.Customer.Type = isGuest ? CustomerType.Guest : CustomerType.Registered;
 }
コード例 #11
0
        /// <summary>
        /// Gets the active shipments.
        /// </summary>
        /// <param name="cart">The cart.</param>
        /// <returns>All shipment that are not Canceled.</returns>
        public static IEnumerable <Shipment> GetActiveShipments(this Overture.ServiceModel.Orders.Cart cart)
        {
            if (cart == null || cart.Shipments == null)
            {
                return(Enumerable.Empty <Shipment>());
            }

            return(cart.Shipments.Where(s => s != null && s.IsActive()));
        }
コード例 #12
0
        protected virtual async Task UpdateRegisteredBillingAddress(Overture.ServiceModel.Orders.Cart cart, RegisteredBillingAddressViewModel registeredBillingAddressViewModel)
        {
            if (registeredBillingAddressViewModel == null)
            {
                return;
            }

            var payment = cart.Payments.FirstOrDefault();

            if (payment == null)
            {
                return;
            }

            if (registeredBillingAddressViewModel.UseShippingAddress)
            {
                var shipment = cart.Shipments.FirstOrDefault();

                if (shipment?.Address == null)
                {
                    return;
                }

                var isBillingChanged = payment.BillingAddress == null || !IsEqual(payment.BillingAddress, shipment.Address);

                if (isBillingChanged)
                {
                    payment.BillingAddress    = shipment.Address.Clone();
                    payment.BillingAddress.Id = Guid.Empty;
                }
            }
            else
            {
                if (registeredBillingAddressViewModel.BillingAddressId == Guid.Empty)
                {
                    return;
                }

                var newAddress = await AddressRepository.GetAddressByIdAsync(registeredBillingAddressViewModel.BillingAddressId).ConfigureAwait(false);

                if (newAddress == null)
                {
                    return;
                }

                var isBillingChanged = payment.BillingAddress == null || !IsEqual(payment.BillingAddress, newAddress);

                if (isBillingChanged)
                {
                    payment.BillingAddress = newAddress;
                    payment.BillingAddress.PropertyBag[AddressBookIdPropertyBagKey] = newAddress.Id;
                    payment.BillingAddress.Id = Guid.Empty;
                }
            }
        }
コード例 #13
0
 /// <summary>
 /// Initializes the payment based on the PaymentProvider logic.
 /// </summary>
 /// <param name="cart">Cart.</param>
 /// <param name="param">Parameters used to make the request.</param>
 /// <returns></returns>
 public Task <Overture.ServiceModel.Orders.Cart> InitializePaymentAsync(Overture.ServiceModel.Orders.Cart cart, InitializePaymentParam param)
 {
     if (!string.IsNullOrWhiteSpace(param.PaymentType) && Enum.TryParse(param.PaymentType, out PaymentMethodType paymentMethodType))
     {
         if (paymentMethodType == PaymentMethodType.SavedCreditCard)
         {
             return(Task.FromResult(cart));
         }
     }
     return(PaymentRepository.InitializePaymentAsync(param));
 }
コード例 #14
0
        protected virtual Shipment GetShipment(Overture.ServiceModel.Orders.Cart cart)
        {
            var shipment = cart.Shipments.FirstOrDefault();

            if (shipment == null)
            {
                throw new InvalidDataException("No shipment was found in Cart.");
            }

            return(shipment);
        }
コード例 #15
0
        protected virtual Payment GetPayment(Overture.ServiceModel.Orders.Cart cart)
        {
            var payments = cart.Payments;

            if (payments == null || payments.All(payment => payment.IsVoided()))
            {
                throw new InvalidOperationException("No valid payment was found in the cart.");
            }

            return(payments.First(payment => !payment.IsVoided()));
        }
コード例 #16
0
        /// <summary>
        /// Setting free price for a gift item, avoiding reward info
        /// </summary>
        /// <param name="cart"></param>
        public static void PrepareGiftLineItems(Overture.ServiceModel.Orders.Cart cart)
        {
            if (cart?.Shipments == null || cart.Shipments.Count == 0)
            {
                return;
            }

            foreach (Shipment shipment in cart.Shipments)
            {
                if (shipment?.LineItems == null || shipment.LineItems.Count == 0)
                {
                    continue;
                }
                foreach (LineItem lineitem in shipment.LineItems)
                {
                    if (lineitem == null || !lineitem.IsGiftItem)
                    {
                        continue;
                    }

                    if (lineitem.DiscountAmount != null)
                    {
                        if (cart.DiscountTotal != null)
                        {
                            cart.DiscountTotal -= lineitem.DiscountAmount;
                        }
                        cart.LineItemLevelDiscount -= (decimal)lineitem.DiscountAmount;
                        cart.SubTotalDiscount      -= (decimal)lineitem.DiscountAmount;
                    }

                    #pragma warning disable CS0618 // Type or member is obsolete
                    lineitem.ListPrice        = lineitem.DefaultListPrice = lineitem.CurrentPrice =
                        lineitem.RegularPrice = lineitem.DefaultPrice = lineitem.DiscountAmount =
                            lineitem.Total    = lineitem.TotalWithoutDiscount = 0;
                    #pragma warning restore CS0618 // Type or member is obsolete

                    if (lineitem?.Rewards == null || lineitem.Rewards.Count == 0)
                    {
                        continue;
                    }

                    foreach (Reward lineitemReward in lineitem.Rewards)
                    {
                        Reward shipmentReward = shipment.Rewards.Find(x => x.Id == lineitemReward.Id);
                        shipment.Rewards.Remove(shipmentReward);
                    }
                    lineitem.Rewards = new List <Reward>();
                }
            }
        }
コード例 #17
0
        /// <summary>
        /// Builds an instance of <see cref="InitializePaymentParam"/> that will be used to make the request to the repository.
        /// </summary>
        /// <param name="cart">Cart previously retrieved from the UpdatePaymentMethodAsync call.</param>
        /// <param name="updatePaymentMethodParam">Parameters passed to the UpdatePaymentMethodAsync method.</param>
        /// <returns>Instance of the <see cref="InitializePaymentParam"/> that will be used to make the call.</returns>
        /// <remarks>It may be useful to override this method to augment the request with AdditionalData or Options for the request.</remarks>
        protected virtual InitializePaymentParam BuildInitializePaymentParam(Overture.ServiceModel.Orders.Cart cart,
                                                                             UpdatePaymentMethodParam updatePaymentMethodParam)
        {
            var param = new InitializePaymentParam
            {
                CartName    = updatePaymentMethodParam.CartName,
                CultureInfo = updatePaymentMethodParam.CultureInfo,
                CustomerId  = updatePaymentMethodParam.CustomerId,
                PaymentId   = updatePaymentMethodParam.PaymentId,
                Scope       = updatePaymentMethodParam.Scope,
                PaymentType = updatePaymentMethodParam.PaymentType
            };

            return(param);
        }
コード例 #18
0
        private Task UpdateCustomerWithCustomFieldInBag(Overture.ServiceModel.Orders.Cart cart, CustomerSummaryViewModel value)
        {
            if (value == null)
            {
                return(Task.FromResult(0));
            }

            if (cart.Customer == null)
            {
                cart.Customer = new CustomerSummary();
            }

            cart.Customer.Email = value.Email + "-" + value.Bag["CustomField"];
            return(Task.FromResult(0));
        }
コード例 #19
0
        private Task UpdateCustomerCustom(Overture.ServiceModel.Orders.Cart cart, CustomerSummaryViewModel value)
        {
            if (value == null)
            {
                return(Task.FromResult(0));
            }

            if (cart.Customer == null)
            {
                cart.Customer = new CustomerSummary();
            }

            cart.Customer.Email = value.Email;

            return(Task.FromResult(0));
        }
コード例 #20
0
        protected virtual void UpdateStepInfo(Overture.ServiceModel.Orders.Cart cart, int lastCompletedCheckoutStep)
        {
            if (cart.PropertyBag == null)
            {
                cart.PropertyBag = new PropertyBag();
            }

            if (cart.PropertyBag.ContainsKey(CartConfiguration.CartPropertyBagLastCheckoutStep))
            {
                cart.PropertyBag[CartConfiguration.CartPropertyBagLastCheckoutStep] = lastCompletedCheckoutStep;
            }
            else
            {
                cart.PropertyBag.Add(CartConfiguration.CartPropertyBagLastCheckoutStep, lastCompletedCheckoutStep);
            }
        }
コード例 #21
0
 public static bool IsCartContainsRecurringOrderItems(Overture.ServiceModel.Orders.Cart cart)
 {
     if (cart?.Shipments != null)
     {
         foreach (var shipment in cart.Shipments)
         {
             foreach (var lineitem in shipment.LineItems ?? Enumerable.Empty <LineItem>())
             {
                 if (IsRecurringOrderLineItemValid(lineitem))
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
コード例 #22
0
        protected virtual async Task UpdatePickUpAddress(Overture.ServiceModel.Orders.Cart cart, PickUpAddressViewModel pickUpAddressViewModel)
        {
            if (pickUpAddressViewModel == null || pickUpAddressViewModel.PickUpLocationId == Guid.Empty)
            {
                return;
            }

            var shipment = cart.Shipments.FirstOrDefault();

            if (shipment == null)
            {
                return;
            }

            shipment.PickUpLocationId      = pickUpAddressViewModel.PickUpLocationId;
            shipment.FulfillmentLocationId = pickUpAddressViewModel.PickUpLocationId;

            var store = await StoreRepository.GetStoreAsync(new Store.Parameters.GetStoreParam
            {
                Id          = pickUpAddressViewModel.PickUpLocationId,
                CultureInfo = new CultureInfo(cart.CultureName),
                Scope       = cart.ScopeId
            }).ConfigureAwait(false);

            var storeAddress = store.FulfillmentLocation.Addresses.FirstOrDefault();

            var address = new Address
            {
                AddressName = store.Name,
                City        = storeAddress.City,
                CountryCode = storeAddress.CountryCode,
                FirstName   = cart.Customer.FirstName,
                LastName    = cart.Customer.LastName,
                Line1       = storeAddress.Line1,
                Line2       = storeAddress.Line2,
                PhoneNumber = storeAddress.PhoneNumber,
                PostalCode  = storeAddress.PostalCode,
                RegionCode  = storeAddress.RegionCode,
                PropertyBag = storeAddress.PropertyBag
            };

            shipment.Address = address;
        }
コード例 #23
0
 public static UpdateCartParam Build(Overture.ServiceModel.Orders.Cart cart)
 {
     return(new UpdateCartParam
     {
         CultureInfo = cart.CultureName != null ? new CultureInfo(cart.CultureName) : null,
         CustomerId = cart.CustomerId,
         Scope = cart.ScopeId,
         CartName = cart.Name,
         BillingCurrency = cart.BillingCurrency,
         CartType = cart.CartType,
         Coupons = cart.Coupons,
         Customer = cart.Customer,
         OrderLocation = cart.OrderLocation,
         PropertyBag = cart.PropertyBag,
         Shipments = cart.Shipments,
         Status = cart.Status,
         Payments = cart.Payments
     });
 }
コード例 #24
0
        protected virtual Task UpdateCustomer(Overture.ServiceModel.Orders.Cart cart, CustomerSummaryViewModel customerSummaryViewModel)
        {
            if (customerSummaryViewModel == null)
            {
                return(Task.FromResult(0));
            }

            if (cart.Customer == null)
            {
                cart.Customer = new CustomerSummary();
            }

            cart.Customer.LastName   = null;
            cart.Customer.FirstName  = null;
            cart.Customer.MiddleName = null;
            cart.Customer.Phone      = null;
            cart.Customer.Email      = customerSummaryViewModel.Email;

            return(Task.FromResult(0));
        }
コード例 #25
0
        protected virtual async Task UpdateShippingMethod(Overture.ServiceModel.Orders.Cart cart, ShippingMethodViewModel shippingMethodViewModel)
        {
            if (shippingMethodViewModel == null)
            {
                return;
            }

            if (string.IsNullOrEmpty(shippingMethodViewModel.Name))
            {
                return;
            }

            var shipment = cart.Shipments.FirstOrDefault();

            if (shipment == null)
            {
                return;
            }

            shipment.FulfillmentMethod = await GetFulfillmentMethodAsync(cart, shippingMethodViewModel);
        }
コード例 #26
0
        protected virtual Task UpdateBillingAddress(Overture.ServiceModel.Orders.Cart cart, BillingAddressViewModel billingAddressViewModel)
        {
            if (billingAddressViewModel == null)
            {
                return(Task.FromResult(0));
            }

            var payment = GetPayment(cart);

            if (payment == null)
            {
                return(Task.FromResult(0));
            }

            if (billingAddressViewModel.UseShippingAddress)
            {
                var shipment = cart.Shipments.FirstOrDefault();

                if (shipment?.Address == null)
                {
                    return(Task.FromResult(0));
                }

                payment.BillingAddress = shipment.Address.Clone();
            }
            else
            {
                payment.BillingAddress = CreateAddressFromViewModel(billingAddressViewModel);
            }

            if (cart.Customer.Type == CustomerType.Guest)
            {
                cart.Customer.FirstName = payment.BillingAddress.FirstName;
                cart.Customer.LastName  = payment.BillingAddress.LastName;
                cart.Customer.Phone     = payment.BillingAddress.PhoneNumber;
            }

            return(Task.FromResult(0));
        }
コード例 #27
0
        public async Task WHEN_ForcingUpdate_SHOULD_choose_cheapest_shippingMethod()
        {
            //Arrange
            var cart = new Overture.ServiceModel.Orders.Cart
            {
                Shipments = new List <Shipment>
                {
                    new Shipment
                    {
                        FulfillmentMethod = new FulfillmentMethod
                        {
                            Id          = GetRandom.Guid(),
                            Cost        = GetRandom.Double(10.0, 35.0),
                            DisplayName = new LocalizedString()
                        }
                    }
                }
            };

            var methods =
                (await Container.Get <IFulfillmentMethodRepository>()
                 .GetCalculatedFulfillmentMethods(new GetShippingMethodsParam())).OrderBy(fm => fm.Cost);

            var sut = Container.CreateInstance <ShippingMethodViewService>();

            //Act
            var vm = await sut.EstimateShippingAsync(new EstimateShippingParam
            {
                Cart        = cart,
                CultureInfo = CultureInfo.InvariantCulture,
                ForceUpdate = true
            });

            //Assert
            vm.Should().NotBeNull();
            vm.CostDouble.Should().Be(methods.First().Cost);
            cart.Shipments.First().FulfillmentMethod.Should().NotBeNull();
        }
コード例 #28
0
        protected virtual async Task UpdateRegisteredShippingAddress(Overture.ServiceModel.Orders.Cart cart, RegisteredShippingAddressViewModel registeredShippingAddressViewModel)
        {
            if (registeredShippingAddressViewModel == null)
            {
                return;
            }

            if (registeredShippingAddressViewModel.ShippingAddressId == Guid.Empty)
            {
                return;
            }

            var shipment = cart.Shipments.FirstOrDefault();

            if (shipment == null)
            {
                return;
            }

            var newAddress = await AddressRepository.GetAddressByIdAsync(registeredShippingAddressViewModel.ShippingAddressId).ConfigureAwait(false);

            var isShippingChanged = shipment.Address == null || !IsEqual(shipment.Address, newAddress);

            if (isShippingChanged)
            {
                shipment.Address = newAddress;
                shipment.Address.PropertyBag[AddressBookIdPropertyBagKey] = newAddress.Id;
                shipment.Address.Id = Guid.Empty;
            }

            //In the case the user didn't do estimate shipping before
            await ShippingMethodViewService.EstimateShippingAsync(new EstimateShippingParam
            {
                Cart        = cart,
                CultureInfo = CultureInfo.GetCultureInfo(cart.CultureName), //TODO: Fix me
                ForceUpdate = isShippingChanged
            }).ConfigureAwait(false);
        }
コード例 #29
0
        /// <summary>
        /// Gets an OrderSummaryViewModel from a Cart.
        /// </summary>
        /// <param name="cart"></param>
        /// <param name="cultureInfo"></param>
        /// <returns></returns>
        public virtual OrderSummaryViewModel GetOrderSummaryViewModel(
            Overture.ServiceModel.Orders.Cart cart,
            CultureInfo cultureInfo)
        {
            var orderSummary = ViewModelMapper.MapTo <OrderSummaryViewModel>(cart, cultureInfo);

            orderSummary.Shippings              = GetShippingsViewModel(cart, cultureInfo);
            orderSummary.Shipping               = GetShippingFee(cart, cultureInfo);
            orderSummary.IsShippingTaxable      = cart.GetActiveShipments().FirstOrDefault().IsShippingTaxable(); //used in the cart/checkout
            orderSummary.HasReward              = cart.DiscountTotal.HasValue && cart.DiscountTotal.Value > 0;
            orderSummary.CheckoutRedirectAction = GetCheckoutRedirectAction(cart);
            orderSummary.Rewards = RewardViewModelFactory.CreateViewModel(cart.GetActiveShipments().SelectMany(x => x.Rewards), cultureInfo, RewardLevel.FulfillmentMethod, RewardLevel.Shipment).ToList();
            var     allLineItems           = cart.GetActiveShipments().SelectMany(x => x.LineItems).ToList();
            decimal sumAllLineItemsSavings =
                Math.Abs(allLineItems.Sum(
                             l => decimal.Multiply(decimal.Subtract(l.CurrentPrice.GetValueOrDefault(0), l.DefaultPrice.GetValueOrDefault(0)), Convert.ToDecimal(l.Quantity))));

            decimal savingsTotal = decimal.Add(cart.DiscountTotal.GetValueOrDefault(0), sumAllLineItemsSavings);

            orderSummary.SavingsTotal = savingsTotal.Equals(0) ? string.Empty : LocalizationProvider.FormatPrice(savingsTotal, cultureInfo);

            return(orderSummary);
        }
コード例 #30
0
        public async Task WHEN_not_forcing_SHOULD_keep_fulfillmentMethod()
        {
            //Arrange
            var fulfillmentMethod = new FulfillmentMethod
            {
                Id          = GetRandom.Guid(),
                Cost        = GetRandom.Double(10.0, 35.0),
                DisplayName = new LocalizedString(),
                Name        = GetRandom.String(12)
            };

            var cart = new Overture.ServiceModel.Orders.Cart
            {
                Shipments = new List <Shipment>
                {
                    new Shipment
                    {
                        FulfillmentMethod = fulfillmentMethod
                    }
                }
            };

            var sut = Container.CreateInstance <ShippingMethodViewService>();

            //Act
            var vm = await sut.EstimateShippingAsync(new EstimateShippingParam
            {
                Cart        = cart,
                CultureInfo = CultureInfo.InvariantCulture,
                ForceUpdate = false
            });

            //Assert
            vm.Should().NotBeNull();
            cart.Shipments.First().FulfillmentMethod.Should().NotBeNull();
            cart.Shipments.First().FulfillmentMethod.Id.Should().Be(fulfillmentMethod.Id);
        }