private AutomaticTask CreateAutomaticTask(WizardContext wizardContext, FileBasedProject selectedProject, bool isBatchTask)
        {
            var projectInfo   = selectedProject.GetProjectInfo();
            var automaticTask = new AutomaticTask(wizardContext.Action)
            {
                CreatedAt   = GetDateToString(wizardContext.DateTimeStamp),
                StartedAt   = GetDateToString(wizardContext.DateTimeStamp),
                CompletedAt = GetDateToString(wizardContext.DateTimeStamp),
                CreatedBy   = Environment.UserDomainName + "\\" + Environment.UserName
            };

            foreach (var wcProjectFile in wizardContext.ProjectFiles)
            {
                if (wcProjectFile.Selected)
                {
                    var taskFile = new TaskFile
                    {
                        LanguageFileGuid = wcProjectFile.FileId
                    };
                    automaticTask.TaskFiles.Add(taskFile);

                    var outputFile = new OutputFile
                    {
                        LanguageFileGuid = wcProjectFile.FileId
                    };
                    automaticTask.OutputFiles.Add(outputFile);
                }
            }

            var languageDirections = GetLanguageDirectionFiles(selectedProject.FilePath, wizardContext);

            foreach (var languageDirection in languageDirections)
            {
                var actionName = wizardContext.Action == Enumerators.Action.Export
                                        ? "Export To XLIFF"
                                        : "Import From XLIFF";

                var reportName = string.Format("{0}_{1}_{2}_{3}.xml",
                                               actionName.Replace(" ", ""),
                                               wizardContext.DateTimeStampToString,
                                               languageDirection.Key.SourceLanguageCode,
                                               languageDirection.Key.TargetLanguageCode);

                var projectsReportsFolder = Path.Combine(projectInfo.LocalProjectFolder, "Reports");
                if (!Directory.Exists(projectsReportsFolder))
                {
                    Directory.CreateDirectory(projectsReportsFolder);
                }

                var reportFile = Path.Combine(wizardContext.WorkingFolder, reportName);

                var projectReportsFilePath         = Path.Combine(projectsReportsFolder, reportName);
                var relativeProjectReportsFilePath = Path.Combine("Reports", reportName);

                _reportService.CreateReport(wizardContext, reportFile, selectedProject, languageDirection.Key.TargetLanguageCode);

                // Copy to project reports folder
                if (!isBatchTask)
                {
                    File.Copy(reportFile, projectReportsFilePath, true);
                }

                var report = new Report(wizardContext.Action)
                {
                    Name                  = actionName,
                    Description           = actionName,
                    LanguageDirectionGuid = languageDirection.Key.Guid,
                    PhysicalPath          = relativeProjectReportsFilePath
                };

                automaticTask.Reports.Add(report);
            }

            return(automaticTask);
        }
        private void UpdateProjectReports(WizardContext wizardContext, FileBasedProject project, AutomaticTask automaticTask)
        {
            if (project != null)
            {
                try
                {
                    _supressProjectControllerEvents = true;

                    _projectsController.Close(project);
                    _projectSettingsService.UpdateAnalysisTaskReportInfo(project, automaticTask);
                    _projectsController.Add(project.FilePath);

                    switch (wizardContext.Owner)
                    {
                    case Enumerators.Controller.Files:
                        _filesController.Activate();
                        break;

                    case Enumerators.Controller.Projects:
                        _projectsController.Activate();
                        break;
                    }
                }
                finally
                {
                    _supressProjectControllerEvents = false;
                }
            }
        }
        private void CreateHtmlReport(WizardContext wizardContext, FileBasedProject selectedProject, AutomaticTask automaticTask)
        {
            var project            = _xliffProjects.FirstOrDefault(a => a.Id == wizardContext.Project.Id);
            var languageDirections = _projectSettingsService.GetLanguageDirections(selectedProject.FilePath);

            foreach (var taskReport in automaticTask.Reports)
            {
                var languageDirection = languageDirections.FirstOrDefault(a =>
                                                                          string.Compare(taskReport.LanguageDirectionGuid, a.Guid, StringComparison.CurrentCultureIgnoreCase) == 0);

                var reportName         = Path.GetFileName(taskReport.PhysicalPath);
                var reportFilePath     = Path.Combine(wizardContext.WorkingFolder, reportName);
                var htmlReportFilePath = CreateHtmlReportFile(reportFilePath);

                foreach (var wcProjectFile in wizardContext.ProjectFiles)
                {
                    if (!wcProjectFile.Selected || string.Compare(wcProjectFile.TargetLanguage, languageDirection?.TargetLanguageCode,
                                                                  StringComparison.CurrentCultureIgnoreCase) != 0)
                    {
                        continue;
                    }

                    var projectFile = project?.ProjectFiles.FirstOrDefault(a => a.FileId == wcProjectFile.FileId);
                    if (projectFile != null)
                    {
                        projectFile.Report = GetRelativePath(project.Path, htmlReportFilePath);

                        var activityfile = projectFile.ProjectFileActivities.OrderByDescending(a => a.Date).FirstOrDefault();
                        if (activityfile != null)
                        {
                            activityfile.Report = projectFile.Report;
                        }
                    }
                }
            }
        }