/// <summary> /// Exporte les solutions. /// </summary> /// <param name="scenario">Le scénario.</param> /// <param name="cellReference">La référence de la cellule.</param> /// <param name="file">Le fichier.</param> /// <param name="sheet">La feuille.</param> private void ExportSolutions(Scenario scenario, CellReference cellReference, WorksheetPart sheet) { ITimeTicksFormatService timeFormatService = IoC.Resolve <IServiceBus>().Get <ITimeTicksFormatService>(); long timeScale = _data.Project.TimeScale; List <SolutionWrapper> solutions = new List <SolutionWrapper>(); foreach (var solution in scenario.Solutions.OrderBy(s => s.SolutionDescription)) { var w = CreateSolutionWrapper(scenario.Actions, solution); solutions.Add(w); } var originalScenario = scenario.Original; while (originalScenario != null) { // Déterminer les actions qui sont concernées var originalActions = originalScenario.Actions.Where(originalAction => scenario.Actions.Any(currentScenarioAction => ScenarioActionHierarchyHelper.IsAncestor(originalAction, currentScenarioAction))); foreach (var solution in originalScenario.Solutions.OrderBy(s => s.SolutionDescription)) { var wrapper = CreateSolutionWrapper(originalActions, solution); // Ignorer les solutions qui n'apportent pas de gain. C'est un surplus d'infos inutile if (wrapper.Saving != 0) { solutions.Add(wrapper); } } originalScenario = originalScenario.Original; } // Définir l'index int i = 1; foreach (var wrapper in solutions) { wrapper.Index = i++; } var solutionsFormats = new ColumnFormat[] { #region Format pour les solutions // Index new ColumnFormat() { Header = "" }, // Scénario new ColumnFormat() { Header = LocalizationManager.GetString("View_RestitutionSolutions_Columns_Scenario") }, // Solution new ColumnFormat() { Header = LocalizationManager.GetString("View_RestitutionSolutions_Columns_Solution") }, // Tâches liées new ColumnFormat() { Header = LocalizationManager.GetString("View_RestitutionSolutions_Columns_RelatedActions") }, // Gain new ColumnFormat() { Header = LocalizationManager.GetString("View_RestitutionSolutions_Columns_Saving") }, // Investissement new ColumnFormat() { Header = LocalizationManager.GetString("View_RestitutionSolutions_Columns_Investment") }, // I/G new ColumnFormat() { Header = LocalizationManager.GetString("View_RestitutionSolutions_Columns_IG") }, // Difficulté new ColumnFormat() { Header = LocalizationManager.GetString("View_RestitutionSolutions_Columns_Diffculty") }, // Coûts new ColumnFormat() { Header = LocalizationManager.GetString("View_RestitutionSolutions_Columns_Cost") }, // DC/G new ColumnFormat() { Header = LocalizationManager.GetString("View_RestitutionSolutions_Columns_DCG") }, // OK new ColumnFormat() { Header = LocalizationManager.GetString("View_RestitutionSolutions_Columns_OK") }, // Comments new ColumnFormat() { Header = LocalizationManager.GetString("View_RestitutionSolutions_Columns_Comments") }, #endregion }; CellContent[][] data = new CellContent[solutions.Count][]; i = 0; foreach (var solution in solutions) { CellContent[] row = new CellContent[solutionsFormats.Length]; int j = 0; #region Data // Index row[j++] = solution.Index; // Scénario row[j++] = solution.Solution.Scenario.Label; // Solution row[j++] = solution.Solution.SolutionDescription; // Tâches liées row[j++] = solution.RelatedActions; // Gain row[j++] = CellContent.TimeSpan(timeFormatService.RoundTime(solution.Saving, timeScale)); // Investissement if (solution.Solution.Investment.HasValue) { row[j++] = solution.Solution.Investment; } else { row[j++] = null; } // I/G if (solution.IG.HasValue) { row[j++] = solution.IG; } else { row[j++] = null; } // Difficulté if (solution.Solution.Difficulty.HasValue) { row[j++] = solution.Solution.Difficulty; } else { row[j++] = null; } // Coûts if (solution.Solution.Cost.HasValue) { row[j++] = solution.Solution.Cost; } else { row[j++] = null; } // DC/G if (solution.DCG.HasValue) { row[j++] = solution.DCG; } else { row[j++] = null; } // OK row[j++] = solution.Solution.Approved.ToString(); // Comments row[j++] = solution.Solution.Comments; #endregion data[i] = row; i++; } _file.AddTable(sheet, solutionsFormats, data, cellReference); }
/// <summary> /// Charge le scénario spécifié. /// </summary> private void LoadScenario(Scenario oldScenario, Scenario newScenario) { if (oldScenario == newScenario) { return; } _scenario = newScenario; if (oldScenario != null) { foreach (var solution in oldScenario.Solutions) { base.UnregisterToStateChanged(solution); solution.StopTracking(); } } if (newScenario != null) { var solutions = new List <SolutionWrapper>(); // On ne doit pas afficher les solutions du scénario de validation et du scénario initial if (newScenario.NatureCode != KnownScenarioNatures.Realized && newScenario.NatureCode != KnownScenarioNatures.Initial) { foreach (var solution in newScenario.Solutions.OrderBy(s => s.SolutionDescription)) { var w = CreateSolutionWrapper(newScenario.Actions, solution); w.IsNotReadOnly = true; solutions.Add(w); } } var originalScenario = newScenario.Original; while (originalScenario != null) { // On ne doit pas afficher le scénario initial if (originalScenario.NatureCode == KnownScenarioNatures.Initial) { break; } // Déterminer les actions qui sont concernées var originalActions = originalScenario.Actions.Where(originalAction => newScenario.Actions.Any(currentScenarioAction => ScenarioActionHierarchyHelper.IsAncestor(originalAction, currentScenarioAction))); foreach (var solution in originalScenario.Solutions.OrderBy(s => s.SolutionDescription)) { var wrapper = CreateSolutionWrapper(originalActions, solution); // Ignorer les solutions qui n'apportent pas de gain. C'est un surplus d'infos inutile if (wrapper.Saving != 0) { solutions.Add(wrapper); } } originalScenario = originalScenario.Original; } // Définir l'index int i = 1; foreach (var wrapper in solutions) { wrapper.Index = i++; } this.Solutions = solutions.ToArray(); } else { this.Solutions = null; } }