Example #1
0
        /// <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);
        }
Example #2
0
        /// <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;
            }
        }