Exemplo n.º 1
0
        /// <summary>
        /// Get the Shipping methods available in the scope.
        /// </summary>
        /// <param name="param"></param>
        /// <returns>The ShippingMethodsViewModel</returns>
        public async virtual Task <RecurringOrdersTemplatesShippingMethodsViewModel> GetShippingMethodsScopeAsync(GetShippingMethodsScopeParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param", "param is required");
            }
            if (string.IsNullOrWhiteSpace(param.Scope))
            {
                throw new ArgumentException("param.Scope is required", "param");
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException("param.CultureInfo is required", "param");
            }

            var fulfillmentMethods = await FulfillmentMethodRepository.GetFulfillmentMethods(param.Scope).ConfigureAwait(false);

            if (fulfillmentMethods == null)
            {
                return(null);
            }

            var shippingMethodViewModels = fulfillmentMethods.FulfillmentMethods
                                           .Select(sm => RecurringOrderTemplateViewModelFactory.GetShippingMethodViewModel(sm, param.CultureInfo)).ToList();

            return(new RecurringOrdersTemplatesShippingMethodsViewModel
            {
                ShippingMethods = shippingMethodViewModels
            });
        }
        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);
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
        public virtual async Task <CartViewModel> UpdateRecurringOrderCartShippingMethodAsync(UpdateRecurringOrderCartShippingMethodParam param)
        {
            if (!RecurringOrdersSettings.Enabled)
            {
                return(new CartViewModel());
            }

            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }

            var cart = await CartRepository.GetCartAsync(new GetCartParam
            {
                BaseUrl     = param.BaseUrl,
                Scope       = param.Scope,
                CultureInfo = param.CultureInfo,
                CustomerId  = param.CustomerId,
                CartName    = param.CartName
            }).ConfigureAwait(false);

            var shipment = cart.Shipments?.FirstOrDefault() ?? throw new InvalidOperationException("No shipment was found in the cart.");

            var fulfillmentMethods = await FulfillmentMethodRepository.GetCalculatedFulfillmentMethods(new GetShippingMethodsParam
            {
                CartName    = param.CartName,
                CultureInfo = param.CultureInfo,
                CustomerId  = param.CustomerId,
                Scope       = param.Scope
            });

            if (fulfillmentMethods == null)
            {
                throw new InvalidOperationException($"No fulfillmentMethods was found for the cart name ({param.CartName}).");
            }

            var fulfillmentMethod = fulfillmentMethods.SingleOrDefault(f => f.ShippingProviderId == param.ShippingProviderId.ToGuid() &&
                                                                       string.Equals(f.Name, param.ShippingMethodName, StringComparison.InvariantCultureIgnoreCase));

            shipment.FulfillmentMethod = fulfillmentMethod
                                         ?? throw new InvalidOperationException($"The fulfillmentMethod ({param.ShippingProviderId}) was not found.");

            var updatedCart = await CartRepository.UpdateCartAsync(UpdateCartParamFactory.Build(cart));

            var vm = await RecurringOrderCartsViewService.CreateCartViewModelAsync(new CreateRecurringOrderCartViewModelParam
            {
                Cart        = updatedCart,
                CultureInfo = new CultureInfo(updatedCart.CultureName),
                IncludeInvalidCouponsMessages = false,
                BaseUrl = param.BaseUrl,
            });

            return(vm);
        }
Exemplo n.º 5
0
 protected virtual Task <List <FulfillmentMethod> > GetFulfillmentMethods(GetShippingMethodsParam param)
 {
     return(FulfillmentMethodRepository.GetCalculatedFulfillmentMethods(param));
 }