/// <summary> /// Supprime les actions dont la durée est 0 du scénario. /// Supprime également les groupes vides qui pourraient résulter des suppressions précédentes. /// </summary> /// <param name="scenario">Le scénario.</param> internal static void RemoveEmptyDurationActionsAndGroupsFromNewScenario(Scenario scenario) { var emptyDurationActionsToDelete = new List <KAction>(); var newTimings = new List <ActionTiming>(); var derivedActions = GetActionsSortedWBS(scenario); // Mettre à jour IsGroup foreach (var action in derivedActions) { action.IsGroup = WBSHelper.HasChildren(action, derivedActions); } foreach (var action in derivedActions) { //On ne supprime pas si: la catégorie de type à supprimer && pas de parent dans le scenario n && originalBuildDuration!=0 if (action.BuildDuration == 0 && !action.IsGroup && !(action.Category != null && action.Category.ActionTypeCode != null && action.Category.ActionTypeCode == KnownActionCategoryTypes.S && action.Original.Original == null && action.Reduced != null && action.Reduced.OriginalBuildDuration != 0)) { // Déplacer tous les pred vers ses succ ActionsTimingsMoveManagement.MapAllPredToSucc(action, a => a.BuildDuration != 0 && !action.IsGroup, newTimings, false); emptyDurationActionsToDelete.Add(action); scenario.Actions.Remove(action); action.Predecessors.Clear(); action.Successors.Clear(); action.MarkAsDeleted(); } } //foreach (var action in actionsToDelete) //{ // // Mettre à jour les WBS des autres actions // ActionsTimingsMoveManagement.DeleteUpdateWBS(derivedActions, action); //} if (scenario.NatureCode == KnownScenarioNatures.Realized) { foreach (var timing in newTimings) { timing.Action.Start = timing.Start; timing.Action.Finish = timing.Finish; } } //actionsToDelete.Clear(); var emptyGroupActionsToDelete = new List <KAction>(); var actionsFiltered = GetActionsSortedWBS(scenario); foreach (var action in actionsFiltered) { if (action.IsGroup && !WBSHelper.HasChildren(action, actionsFiltered)) { emptyGroupActionsToDelete.Add(action); scenario.Actions.Remove(action); action.MarkAsDeleted(); } } //foreach (var action in emptyGroupActionsToDelete) //{ // // Mettre à jour les WBS des autres actions // ActionsTimingsMoveManagement.DeleteUpdateWBS(derivedActions, action); //} // Mettre à jour les WBS des autres actions var tree = derivedActions.VirtualizeTree(); emptyDurationActionsToDelete .Union(emptyGroupActionsToDelete) .ForEach(_ => tree.Remove(_)); tree.ApplyWBS(); ActionsTimingsMoveManagement.DebugCheckAllWBS(EnumerableExt.Concat(scenario)); ActionsTimingsMoveManagement.DebugCheckPredSucc(scenario.Actions, false); }