public virtual async Task <RecurringOrderTemplateViewModel> CreateRecurringOrderTemplateDetailsViewModel(CreateRecurringOrderTemplateDetailsViewModelParam param) { if (param == null) { throw new ArgumentNullException(nameof(param)); } if (param.CultureInfo == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.CultureInfo)), nameof(param)); } if (param.ProductImageInfo == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.ProductImageInfo)), nameof(param)); } if (param.ProductImageInfo.ImageUrls == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.ProductImageInfo.ImageUrls)), nameof(param)); } if (param.ScopeId == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.ScopeId)), nameof(param)); } if (param.RecurringOrderLineItem == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.RecurringOrderLineItem)), nameof(param)); } var vm = new RecurringOrderTemplateViewModel(); var imgDictionary = LineItemHelper.BuildImageDictionaryFor(param.ProductImageInfo.ImageUrls); var recurringScheduleUrl = RecurringScheduleUrlProvider.GetRecurringScheduleUrl(new GetRecurringScheduleUrlParam { CultureInfo = param.CultureInfo }); var lineItemViewModel = await MapToTemplateLineItemViewModel(new MapToTemplateLineItemViewModelParam { RecurringOrderlineItem = param.RecurringOrderLineItem, CultureInfo = param.CultureInfo, ImageDictionnary = imgDictionary, BaseUrl = param.BaseUrl, RecurringScheduleUrl = recurringScheduleUrl }).ConfigureAwait(false); if (lineItemViewModel != null) { lineItemViewModel.ShippingAddressId = param.RecurringOrderLineItem.ShippingAddressId; vm.RecurringOrderTemplateLineItemViewModels.Add(lineItemViewModel); } return(vm); }
public async virtual Task MapRecurringOrderLineitemFrequencyName(RecurringOrderTemplateViewModel template, CultureInfo culture) { if (template.RecurringOrderTemplateLineItemViewModels == null) { return; } var uniqueProgramNames = template.RecurringOrderTemplateLineItemViewModels .Select(x => x.RecurringOrderProgramName) .Where(l => !string.IsNullOrWhiteSpace(l)) .Distinct(StringComparer.OrdinalIgnoreCase) .ToList(); if (uniqueProgramNames.Count > 0) { var tasks = uniqueProgramNames.Select(programName => RecurringOrdersRepository.GetRecurringOrderProgram(ComposerContext.Scope, programName)); var programs = await Task.WhenAll(tasks).ConfigureAwait(false); foreach (var lineitem in template.RecurringOrderTemplateLineItemViewModels) { if (RecurringOrderTemplateHelper.IsRecurringOrderLineItemValid(lineitem)) { var program = programs.FirstOrDefault(p => string.Equals(p.RecurringOrderProgramName, lineitem.RecurringOrderProgramName, StringComparison.OrdinalIgnoreCase)); if (program != null) { var frequency = program.Frequencies.FirstOrDefault(f => string.Equals(f.RecurringOrderFrequencyName, lineitem.RecurringOrderFrequencyName, StringComparison.OrdinalIgnoreCase)); if (frequency != null) { var localization = frequency.Localizations.FirstOrDefault(l => string.Equals(l.CultureIso, culture.Name, StringComparison.OrdinalIgnoreCase)); if (localization != null) { lineitem.RecurringOrderFrequencyDisplayName = localization.DisplayName; } else { lineitem.RecurringOrderFrequencyDisplayName = frequency.RecurringOrderFrequencyName; } } } var programViewModel = RecurringOrderProgramViewModelFactory.CreateRecurringOrderProgramViewModel(program, culture); lineitem.RecurringOrderProgramFrequencies = programViewModel?.Frequencies; } } } }
public virtual async Task <List <RecurringOrderTemplateViewModel> > CreateTemplateGroupedShippingAddress(CreateTemplateGroupedShippingAddressParam param) { if (param == null) { throw new ArgumentNullException(nameof(param)); } if (param.ListOfRecurringOrderLineItems == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.ListOfRecurringOrderLineItems)), nameof(param)); } if (param.CultureInfo == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.CultureInfo)), nameof(param)); } if (param.ProductImageInfo == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.ProductImageInfo)), nameof(param)); } if (param.ProductImageInfo.ImageUrls == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.ProductImageInfo.ImageUrls)), nameof(param)); } if (param.ScopeId == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.ScopeId)), nameof(param)); } var groups = param.ListOfRecurringOrderLineItems.RecurringOrderLineItems.GroupBy(grp => grp.ShippingAddressId); var imgDictionary = LineItemHelper.BuildImageDictionaryFor(param.ProductImageInfo.ImageUrls); var itemList = new List <RecurringOrderTemplateViewModel>(); var recurringScheduleUrl = RecurringScheduleUrlProvider.GetRecurringScheduleUrl(new GetRecurringScheduleUrlParam { CultureInfo = param.CultureInfo, }); foreach (var group in groups) { var templateViewModel = new RecurringOrderTemplateViewModel { ShippingAddress = await MapShippingAddress(group.Key, param.CultureInfo).ConfigureAwait(false) }; var tasks = group.Select(g => MapToTemplateLineItemViewModel(new MapToTemplateLineItemViewModelParam { RecurringOrderlineItem = g, CultureInfo = param.CultureInfo, ImageDictionnary = imgDictionary, BaseUrl = param.BaseUrl, RecurringScheduleUrl = recurringScheduleUrl })); var templateLineItems = await Task.WhenAll(tasks); //Filter null to not have an error when rendering the page templateViewModel.RecurringOrderTemplateLineItemViewModels.AddRange(templateLineItems.Where(t => t != null).ToList()); itemList.Add(templateViewModel); } return(itemList); }