internal static async Task <TaskModel> MapAsync(this TaskDescriptor entity, TaskExecutionInfo lastExecutionInfo = null) { var model = new TaskModel(); await entity.MapAsync(model, lastExecutionInfo); return(model); }
// TODO: (mg) (core) add ViewComponent for former child-action "InfoProfile". // TODO: (mg) (core) implement action methods for Deployment. #region Utilities private async Task PrepareProfileModel( ExportProfileModel model, ExportProfile profile, Provider <IExportProvider> provider, TaskExecutionInfo lastExecutionInfo, bool createForEdit) { MiniMapper.Map(profile, model); var dir = await _exportProfileService.GetExportDirectoryAsync(profile); var logFile = await dir.GetFileAsync("log.txt"); //var moduleDescriptor = provider.Metadata.ModuleDescriptor; model.TaskName = profile.Task.Name.NaIfEmpty(); model.IsTaskRunning = lastExecutionInfo?.IsRunning ?? false; model.IsTaskEnabled = profile.Task.Enabled; model.LogFileExists = logFile.Exists; model.HasActiveProvider = provider != null; model.FileNamePatternDescriptions = T("Admin.DataExchange.Export.FileNamePatternDescriptions").Value.SplitSafe(";").ToArray(); model.Provider = new ExportProfileModel.ProviderModel { EntityType = provider.Value.EntityType, EntityTypeName = await Services.Localization.GetLocalizedEnumAsync(provider.Value.EntityType), FileExtension = provider.Value.FileExtension, ThumbnailUrl = GetThumbnailUrl(provider), // TODO: (mg) (core) PluginMediator required in ExportController. //FriendlyName = _pluginMediator.GetLocalizedFriendlyName(provider.Metadata), FriendlyName = provider.Metadata.SystemName, //Description = _pluginMediator.GetLocalizedDescription(provider.Metadata), Description = provider.Metadata.SystemName, //Url = descriptor?.Url, //Author = descriptor?.Author, //Version = descriptor?.Version?.ToString() }; if (!createForEdit) { return; } var projection = XmlHelper.Deserialize <ExportProjection>(profile.Projection); var filter = XmlHelper.Deserialize <ExportFilter>(profile.Filtering); var language = Services.WorkContext.WorkingLanguage; var store = Services.StoreContext.CurrentStore; var stores = Services.StoreContext.GetAllStores(); var emailAccounts = await _db.EmailAccounts.AsNoTracking().ToListAsync(); var languages = await _db.Languages .AsNoTracking() .OrderBy(x => x.DisplayOrder) .ToListAsync(); var currencies = await _db.Currencies .AsNoTracking() .OrderBy(x => x.DisplayOrder) .ToListAsync(); model.Offset = profile.Offset; model.Limit = profile.Limit == 0 ? null : profile.Limit; model.BatchSize = profile.BatchSize == 0 ? null : profile.BatchSize; model.PerStore = profile.PerStore; model.EmailAccountId = profile.EmailAccountId; model.CompletedEmailAddresses = profile.CompletedEmailAddresses.SplitSafe(",").ToArray(); model.CreateZipArchive = profile.CreateZipArchive; model.Cleanup = profile.Cleanup; model.PrimaryStoreCurrencyCode = Services.StoreContext.CurrentStore.PrimaryStoreCurrency.CurrencyCode; model.FileNamePatternExample = profile.ResolveFileNamePattern(store, 1, _dataExchangeSettings.MaxFileNameLength); ViewBag.EmailAccounts = emailAccounts .Select(x => new SelectListItem { Text = x.FriendlyName, Value = x.Id.ToString() }) .ToList(); ViewBag.CompletedEmailAddresses = new MultiSelectList(profile.CompletedEmailAddresses.SplitSafe(",")); // TODO: (mg) (core) check\test whether such ViewBag objects can really be used multiple times for different view controls. ViewBag.Stores = stores.ToSelectListItems(); ViewBag.Languages = languages .Select(y => new SelectListItem { Text = y.Name, Value = y.Id.ToString() }) .ToList(); ViewBag.Currencies = currencies .Select(y => new SelectListItem { Text = y.Name, Value = y.Id.ToString() }) .ToList(); ViewBag.DeploymentTypeIconClasses = DeploymentTypeIconClasses; // Projection. model.Projection = MiniMapper.Map <ExportProjection, ExportProjectionModel>(projection); model.Projection.NumberOfPictures = projection.NumberOfMediaFiles; model.Projection.AppendDescriptionText = projection.AppendDescriptionText.SplitSafe(",").ToArray(); model.Projection.CriticalCharacters = projection.CriticalCharacters.SplitSafe(",").ToArray(); if (profile.Projection.IsEmpty()) { model.Projection.DescriptionMergingId = (int)ExportDescriptionMerging.Description; } // Filtering. model.Filter = MiniMapper.Map <ExportFilter, ExportFilterModel>(filter); // Deployment. model.Deployments = await profile.Deployments.SelectAsync(async x => { var deploymentModel = await CreateDeploymentModel(profile, x, null, false); if (x.ResultInfo.HasValue()) { var resultInfo = XmlHelper.Deserialize <DataDeploymentResult>(x.ResultInfo); var lastExecution = Services.DateTimeHelper.ConvertToUserTime(resultInfo.LastExecutionUtc, DateTimeKind.Utc); deploymentModel.LastResult = new ExportDeploymentModel.LastResultInfo { Execution = lastExecution, ExecutionPretty = lastExecution.Humanize(false), Error = resultInfo.LastError }; } return(deploymentModel); }) .AsyncToList(); // Provider. if (provider != null) { model.Provider.Feature = provider.Metadata.ExportFeatures; if (model.Provider.EntityType == ExportEntityType.Product) { var manufacturers = await _db.Manufacturers .AsNoTracking() .ApplyStandardFilter(true) .ToListAsync(); var productTags = await _db.ProductTags .AsNoTracking() .ToListAsync(); ViewBag.Manufacturers = manufacturers .Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }) .ToList(); ViewBag.ProductTags = productTags .Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }) .ToList(); ViewBag.PriceTypes = PriceDisplayType.LowestPrice .ToSelectList(false) .Where(x => x.Value != ((int)PriceDisplayType.Hide).ToString()) .ToList(); ViewBag.AppendDescriptionTexts = new MultiSelectList(projection.AppendDescriptionText.SplitSafe(",")); ViewBag.CriticalCharacters = new MultiSelectList(projection.CriticalCharacters.SplitSafe(",")); if (model.Filter.CategoryIds?.Any() ?? false) { var tree = await _categoryService.GetCategoryTreeAsync(0, true); ViewBag.SelectedCategories = model.Filter.CategoryIds .Where(x => x != 0) .Select(x => { var node = tree.SelectNodeById(x); var item = new SelectListItem { Selected = true, Value = x.ToString(), Text = node == null ? x.ToString() : _categoryService.GetCategoryPath(node) }; return(item); }) .ToList(); } else { ViewBag.SelectedCategories = new List <SelectListItem>(); } } else if (model.Provider.EntityType == ExportEntityType.Customer) { var countries = await _db.Countries .AsNoTracking() .ApplyStandardFilter(true) .ToListAsync(); ViewBag.Countries = countries .Select(x => new SelectListItem { Text = x.GetLocalized(y => y.Name, language, true, false), Value = x.Id.ToString() }) .ToList(); } try { var configInfo = provider.Value.ConfigurationInfo; if (configInfo != null) { model.Provider.ConfigurationWidget = configInfo.ConfigurationWidget; model.Provider.ConfigDataType = configInfo.ModelType; model.Provider.ConfigData = XmlHelper.Deserialize(profile.ProviderConfigData, configInfo.ModelType); if (configInfo.Initialize != null) { try { configInfo.Initialize(model.Provider.ConfigData); } catch (Exception ex) { NotifyWarning(ex.ToAllMessages()); } } } } catch (Exception ex) { NotifyError(ex); } } }
internal static async Task MapAsync(this TaskDescriptor entity, TaskModel model, TaskExecutionInfo lastExecutionInfo = null) { dynamic parameters = new ExpandoObject(); parameters.LastExecutionInfo = lastExecutionInfo; await MapperFactory.MapAsync(entity, model, parameters); }