public virtual async Task <CartViewModel> CreateCartViewModelAsync(CreateRecurringOrderCartViewModelParam param)
        {
            var lineItems = param.Cart.GetLineItems();

            param.ProductImageInfo = new ProductImageInfo
            {
                ImageUrls = await ImageService.GetImageUrlsAsync(lineItems).ConfigureAwait(false),
            };

            var methodDisplayNames = await LookupService.GetLookupDisplayNamesAsync(new GetLookupDisplayNamesParam
            {
                CultureInfo = param.CultureInfo,
                LookupType  = LookupType.Order,
                LookupName  = "PaymentMethodType",
            });

            param.PaymentMethodDisplayNames = methodDisplayNames;

            var roProgramNames = lineItems.Select(x => x.RecurringOrderProgramName)
                                 .Where(l => !string.IsNullOrEmpty(l))
                                 .Distinct(StringComparer.OrdinalIgnoreCase)
                                 .ToList();
            var programTasks = roProgramNames.Select(programName => RecurringOrdersRepository.GetRecurringOrderProgram(ComposerContext.Scope, programName));
            var programs     = await Task.WhenAll(programTasks);

            param.RecurringOrderPrograms = programs.ToList();

            var vm = RecurringOrderCartViewModelFactory.CreateRecurringOrderCartViewModel(param);

            await ExtendLineItems(vm, ComposerContext.Scope, ComposerContext.CustomerId, ComposerContext.CultureInfo);

            return(vm);
        }
Beispiel #2
0
        public virtual CartViewModel CreateRecurringOrderCartViewModel(CreateRecurringOrderCartViewModelParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentNullException(nameof(param.CultureInfo));
            }
            if (param.ProductImageInfo == null)
            {
                throw new ArgumentNullException(nameof(param.ProductImageInfo));
            }
            if (param.ProductImageInfo.ImageUrls == null)
            {
                throw new ArgumentNullException(nameof(param.ProductImageInfo.ImageUrls));
            }
            if (string.IsNullOrWhiteSpace(param.BaseUrl))
            {
                throw new ArgumentException(nameof(param.BaseUrl));
            }

            var vm = CartViewModelFactory.CreateCartViewModel(new CreateCartViewModelParam
            {
                Cart                          = param.Cart,
                CultureInfo                   = param.CultureInfo,
                ProductImageInfo              = param.ProductImageInfo,
                BaseUrl                       = param.BaseUrl,
                PaymentMethodDisplayNames     = param.PaymentMethodDisplayNames,
                IncludeInvalidCouponsMessages = param.IncludeInvalidCouponsMessages
            });

            var roCartVm = vm.AsExtensionModel <IRecurringOrderCartViewModel>();

            FillNextOcurrence(roCartVm, param.Cart, param.CultureInfo);
            MapRecurringOrderLineitemFrequencyName(vm, param.CultureInfo, param.RecurringOrderPrograms);
            FillRecurringScheduleUrl(roCartVm, param.CultureInfo);

            roCartVm.Name = param.Cart.Name;

            vm.Context["Name"] = roCartVm.Name;

            return(vm);
        }
        public virtual async Task <CartViewModel> CreateCartViewModelAsync(CreateRecurringOrderCartViewModelParam param)
        {
            var lineItems = param.Cart.GetLineItems();

            param.ProductImageInfo = new ProductImageInfo
            {
                ImageUrls = await ImageService.GetImageUrlsAsync(lineItems).ConfigureAwait(false),
            };

            var methodDisplayNames = await LookupService.GetLookupDisplayNamesAsync(new GetLookupDisplayNamesParam
            {
                CultureInfo = param.CultureInfo,
                LookupType  = LookupType.Order,
                LookupName  = "PaymentMethodType",
            });

            param.PaymentMethodDisplayNames = methodDisplayNames;

            var programTasks = new Dictionary <string, Task <Overture.ServiceModel.RecurringOrders.RecurringOrderProgram> >(StringComparer.OrdinalIgnoreCase);

            foreach (var el in lineItems)
            {
                var programName = el.RecurringOrderProgramName;
                if (string.IsNullOrEmpty(programName) || programTasks.ContainsKey(programName))
                {
                    continue;
                }

                programTasks.Add(programName, RecurringOrdersRepository.GetRecurringOrderProgram(ComposerContext.Scope, programName));
            }

            var programs = await Task.WhenAll(programTasks.Values);

            param.RecurringOrderPrograms = programs.ToList();

            var vm = RecurringOrderCartViewModelFactory.CreateRecurringOrderCartViewModel(param);

            await ExtendLineItems(vm, ComposerContext.Scope, ComposerContext.CustomerId, ComposerContext.CultureInfo);

            return(vm);
        }
        public virtual async Task <CartViewModel> UpdateLineItemAsync(UpdateLineItemParam param)
        {
            if (!RecurringOrdersSettings.Enabled)
            {
                return(GetEmptyRecurringOrderCartViewModel());
            }

            if (param == null)
            {
                throw new ArgumentNullException("param", "param is required");
            }
            if (string.IsNullOrWhiteSpace(param.CartName))
            {
                throw new ArgumentException("param.CartName is required", "param");
            }
            if (string.IsNullOrWhiteSpace(param.ScopeId))
            {
                throw new ArgumentException("param.ScopeId is required", "param");
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException("param.CultureInfo is required", "param");
            }
            if (string.IsNullOrWhiteSpace(param.CartName))
            {
                throw new ArgumentException("param.CartName is required", "param");
            }
            if (param.LineItemId == Guid.Empty)
            {
                throw new ArgumentException("param.LineItemId is required", "param");
            }
            if (param.CustomerId == Guid.Empty)
            {
                throw new ArgumentException("param.CustomerId is required", "param");
            }
            if (param.Quantity < 1)
            {
                throw new ArgumentException("param.Quantity must be greater than 0", "param");
            }
            if (string.IsNullOrWhiteSpace(param.BaseUrl))
            {
                throw new ArgumentException("param.BaseUrl is required", "param");
            }

            var cart = await CartRepository.UpdateLineItemAsync(param).ConfigureAwait(false);

            await CartRepository.RemoveCouponsAsync(new RemoveCouponsParam
            {
                CartName    = param.CartName,
                CouponCodes = CouponViewService.GetInvalidCouponsCode(cart.Coupons).ToList(),
                CustomerId  = param.CustomerId,
                Scope       = param.ScopeId
            });

            var vmParam = new CreateRecurringOrderCartViewModelParam
            {
                Cart        = cart,
                CultureInfo = param.CultureInfo,
                IncludeInvalidCouponsMessages = true,
                BaseUrl = param.BaseUrl
            };

            var viewModel = await CreateCartViewModelAsync(vmParam);

            return(viewModel);
        }