Exemplo n.º 1
0
        internal static async Task <TaskModel> MapAsync(this TaskDescriptor entity, TaskExecutionInfo lastExecutionInfo = null)
        {
            var model = new TaskModel();
            await entity.MapAsync(model, lastExecutionInfo);

            return(model);
        }
Exemplo n.º 2
0
        // 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);
                }
            }
        }
Exemplo n.º 3
0
        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);
        }