Esempio n. 1
0
        public static string GetIES(this KAction action)
        {
            string label = null;

            // Amélioration
            if (action.Reduced != null)
            {
                // Amélioration I/E/S

                if (ActionsTimingsMoveManagement.IsActionInternal(action))
                {
                    label = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Reduced_Internal");
                }
                else if (ActionsTimingsMoveManagement.IsActionExternal(action))
                {
                    label = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Reduced_External");
                }
                else if (ActionsTimingsMoveManagement.IsActionDeleted(action))
                {
                    label = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Reduced_Deleted");
                }
                else
                {
                    throw new ArgumentOutOfRangeException();
                }
            }

            return(label);
        }
Esempio n. 2
0
        /// <summary>
        /// Exporte les actions spécifiées.
        /// </summary>
        /// <param name="actions">Les actions.</param>
        /// <param name="cellReference">La référence de la cellule.</param>
        /// <param name="sheet">La feuille.</param>
        private void ExportActions(ICollection <KAction> actions, WorksheetPart sheet, ref CellReference cellReference)
        {
            var timeFormatService = IoC.Resolve <IServiceBus>().Get <ITimeTicksFormatService>();

            var timeScale = _data.Project.TimeScale;

            #region Format pour les actions

            // Actions
            var actionsFormats = new List <ColumnFormat>()
            {
                // Thumbnail
                new ColumnFormat()
                {
                    Header = string.Empty
                },

                // Label
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Task")
                },

                // Start
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Start")
                },

                // Duration
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Duration")
                },

                // Finish
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Finish")
                },

                // BuildStart
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_BuildStart")
                },

                // BuildDuration
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_BuildDuration")
                },

                // BuildFinish
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_BuildFinish")
                },

                // WBS
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_WBS")
                },

                // Category
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Category")
                },

                // Resource
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Resource")
                },

                // Video
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Video")
                },

                // Predecessors
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Predecessors")
                },

                // Original
                new ColumnFormat()
                {
                    Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Original")
                },
            };

            // Ref1
            if (_referentialsUse[ProcessReferentialIdentifier.Ref1].IsEnabled)
            {
                actionsFormats.Add(new ColumnFormat()
                {
                    Header = IoC.Resolve <IReferentialsUseService>().GetLabel(ProcessReferentialIdentifier.Ref1)
                });
            }

            // Ref2
            if (_referentialsUse[ProcessReferentialIdentifier.Ref2].IsEnabled)
            {
                actionsFormats.Add(new ColumnFormat()
                {
                    Header = IoC.Resolve <IReferentialsUseService>().GetLabel(ProcessReferentialIdentifier.Ref2)
                });
            }

            // Ref3
            if (_referentialsUse[ProcessReferentialIdentifier.Ref3].IsEnabled)
            {
                actionsFormats.Add(new ColumnFormat()
                {
                    Header = IoC.Resolve <IReferentialsUseService>().GetLabel(ProcessReferentialIdentifier.Ref3)
                });
            }

            // Ref4
            if (_referentialsUse[ProcessReferentialIdentifier.Ref4].IsEnabled)
            {
                actionsFormats.Add(new ColumnFormat()
                {
                    Header = IoC.Resolve <IReferentialsUseService>().GetLabel(ProcessReferentialIdentifier.Ref4)
                });
            }

            // Ref5
            if (_referentialsUse[ProcessReferentialIdentifier.Ref5].IsEnabled)
            {
                actionsFormats.Add(new ColumnFormat()
                {
                    Header = IoC.Resolve <IReferentialsUseService>().GetLabel(ProcessReferentialIdentifier.Ref5)
                });
            }

            // Ref6
            if (_referentialsUse[ProcessReferentialIdentifier.Ref6].IsEnabled)
            {
                actionsFormats.Add(new ColumnFormat()
                {
                    Header = IoC.Resolve <IReferentialsUseService>().GetLabel(ProcessReferentialIdentifier.Ref6)
                });
            }

            // Ref7
            if (_referentialsUse[ProcessReferentialIdentifier.Ref7].IsEnabled)
            {
                actionsFormats.Add(new ColumnFormat()
                {
                    Header = IoC.Resolve <IReferentialsUseService>().GetLabel(ProcessReferentialIdentifier.Ref7)
                });
            }

            // IsRandom
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_IsRandom")
            });

            // Custom Text
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_CustomValue_Text1")
            });
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_CustomValue_Text2")
            });
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_CustomValue_Text3")
            });
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_CustomValue_Text4")
            });

            // Custom Numeric
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_CustomValue_Numeric1")
            });
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_CustomValue_Numeric2")
            });
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_CustomValue_Numeric3")
            });
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_CustomValue_Numeric4")
            });

            // DifferenceReason
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_DifferenceReason")
            });

            // Amélioration I/E/S
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Reduced_IES")
            });

            // Solution
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Reduced_Solution")
            });

            // Reduction ratio
            actionsFormats.Add(new ColumnFormat()
            {
                Header = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Reduced_ReductionRatio")
            });

            #endregion

            CellContent[][] data = new CellContent[actions.Count][];

            uint tableRowIndex = cellReference.RowIndex;

            int i = 0;
            foreach (var action in actions)
            {
                CellContent[] row = new CellContent[actionsFormats.Count];

                // Mettre à jour IsGroup
                action.IsGroup = WBSHelper.HasChildren(action, actions);

                int j = 0;

                #region Data pour les actions

                // Thumbnail
                j++;

                // Label
                row[j++] = action.Label;

                if (!action.IsGroup)
                {
                    // Start
                    row[j++] = CellContent.TimeSpan(timeFormatService.RoundTime(action.Start, timeScale));

                    // Duration
                    row[j++] = CellContent.TimeSpan(timeFormatService.RoundTime(action.Duration, timeScale));

                    // Finish
                    row[j++] = CellContent.TimeSpan(timeFormatService.RoundTime(action.Finish, timeScale));
                }
                else
                {
                    j += 3; // Nombre de colonnes précédentes
                }
                // BuildStart
                row[j++] = CellContent.TimeSpan(timeFormatService.RoundTime(action.BuildStart, timeScale));

                // BuildDuration
                row[j++] = CellContent.TimeSpan(timeFormatService.RoundTime(action.BuildDuration, timeScale));

                // BuildFinish
                row[j++] = CellContent.TimeSpan(timeFormatService.RoundTime(action.BuildFinish, timeScale));

                // WBS
                row[j++] = action.WBS;


                if (!action.IsGroup)
                {
                    // Category
                    if (action.Category != null)
                    {
                        row[j++] = action.Category.Label;
                    }
                    else
                    {
                        row[j++] = null;
                    }

                    // Resource
                    if (action.Resource != null)
                    {
                        row[j++] = action.Resource.Label;
                    }
                    else
                    {
                        row[j++] = null;
                    }

                    // Video
                    if (action.Video != null)
                    {
                        row[j++] = action.Video.Filename;
                    }
                    else
                    {
                        row[j++] = null;
                    }

                    // Predecessors
                    row[j++] = FormatPredecessorsString(action);

                    // Original
                    if (action.Original != null)
                    {
                        row[j++] = action.Original.Label;
                    }
                    else
                    {
                        row[j++] = null;
                    }

                    // Ref1
                    if (_referentialsUse[ProcessReferentialIdentifier.Ref1].IsEnabled)
                    {
                        row[j++] = GetMultiReferentialLabels(action.Ref1, ProcessReferentialIdentifier.Ref1);
                    }

                    // Ref2
                    if (_referentialsUse[ProcessReferentialIdentifier.Ref2].IsEnabled)
                    {
                        row[j++] = GetMultiReferentialLabels(action.Ref2, ProcessReferentialIdentifier.Ref2);
                    }

                    // Ref3
                    if (_referentialsUse[ProcessReferentialIdentifier.Ref3].IsEnabled)
                    {
                        row[j++] = GetMultiReferentialLabels(action.Ref3, ProcessReferentialIdentifier.Ref3);
                    }

                    // Ref4
                    if (_referentialsUse[ProcessReferentialIdentifier.Ref4].IsEnabled)
                    {
                        row[j++] = GetMultiReferentialLabels(action.Ref4, ProcessReferentialIdentifier.Ref4);
                    }

                    // Ref5
                    if (_referentialsUse[ProcessReferentialIdentifier.Ref5].IsEnabled)
                    {
                        row[j++] = GetMultiReferentialLabels(action.Ref5, ProcessReferentialIdentifier.Ref5);
                    }

                    // Ref6
                    if (_referentialsUse[ProcessReferentialIdentifier.Ref6].IsEnabled)
                    {
                        row[j++] = GetMultiReferentialLabels(action.Ref6, ProcessReferentialIdentifier.Ref6);
                    }

                    // Ref7
                    if (_referentialsUse[ProcessReferentialIdentifier.Ref7].IsEnabled)
                    {
                        row[j++] = GetMultiReferentialLabels(action.Ref7, ProcessReferentialIdentifier.Ref7);
                    }

                    // IsRandom
                    row[j++] = action.IsRandom.ToString();

                    // Custom Text
                    row[j++] = action.CustomTextValue;
                    row[j++] = action.CustomTextValue2;
                    row[j++] = action.CustomTextValue3;
                    row[j++] = action.CustomTextValue4;

                    // Custom Numeric
                    row[j++] = action.CustomNumericValue;
                    row[j++] = action.CustomNumericValue2;
                    row[j++] = action.CustomNumericValue3;
                    row[j++] = action.CustomNumericValue4;

                    // DifferenceReason
                    row[j++] = action.DifferenceReason;

                    // Amélioration
                    if (action.Reduced != null)
                    {
                        // Amélioration I/E/S
                        string label;

                        if (ActionsTimingsMoveManagement.IsActionInternal(action))
                        {
                            label = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Reduced_Internal");
                        }
                        else if (ActionsTimingsMoveManagement.IsActionExternal(action))
                        {
                            label = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Reduced_External");
                        }
                        else if (ActionsTimingsMoveManagement.IsActionDeleted(action))
                        {
                            label = LocalizationManager.GetString("ViewModel_AnalyzeRestitution_Export_Action_Reduced_Deleted");
                        }
                        else
                        {
                            throw new ArgumentOutOfRangeException();
                        }

                        row[j++] = label;

                        row[j++] = action.Reduced.Solution;
                        row[j++] = CellContent.Percentage(action.Reduced.ReductionRatio);
                    }
                    else
                    {
                        row[j++] = null;
                        row[j++] = null;
                        row[j++] = null;
                    }
                }

                #endregion

                data[i] = row;
                i++;
            }

            _file.AddTable(sheet, actionsFormats.ToArray(), data, cellReference);


            // Ajouter une image

            cellReference.NewLine();

            i = 0;
            foreach (var action in actions)
            {
                if (action.Thumbnail != null)
                {
                    // Ajout du libellé du lien
                    var tableCellRef = new CellReference(1, tableRowIndex + (uint)i + 1);
                    _file.SetCellValue(sheet, tableCellRef, new CellContent(action.ActionId.ToString(), CellDataType.Hyperlink));

                    // Ajout du lien
                    string definedName = string.Format("Action.{0}", action.ActionId);
                    _file.CreateDefinedName(sheet, cellReference, definedName);

                    _file.AddHyperlinkToDefinedName(sheet, tableCellRef, definedName, "");

                    // Ajout du libellé
                    _file.SetCellValue(sheet, cellReference, string.Format("{0} {1}", action.WBS, action.Label ?? string.Empty));
                    cellReference.MoveRight();

                    // Ajout de l'image
                    using (var ms = new System.IO.MemoryStream(action.Thumbnail.Data))
                    {
                        var decoder   = System.Windows.Media.Imaging.BitmapDecoder.Create(ms, System.Windows.Media.Imaging.BitmapCreateOptions.PreservePixelFormat, System.Windows.Media.Imaging.BitmapCacheOption.OnLoad);
                        var size      = new System.Windows.Size(decoder.Frames[0].PixelWidth, decoder.Frames[0].PixelHeight);
                        var mimeTypes = decoder.CodecInfo.MimeTypes;

                        ImagePartType imageType;
                        if (mimeTypes.Contains("image/jpeg"))
                        {
                            imageType = ImagePartType.Jpeg;
                        }
                        else if (mimeTypes.Contains("image/bmp"))
                        {
                            imageType = ImagePartType.Bmp;
                        }
                        else if (mimeTypes.Contains("image/png"))
                        {
                            imageType = ImagePartType.Png;
                        }
                        else
                        {
                            continue;
                        }

                        string pictureName = string.Format("Thumbnail.{0}", action.ActionId);

                        uint rowsLength = _file.AddImage(sheet, action.Thumbnail.Data, imageType, action.ActionId.ToString(), pictureName, size, cellReference);

                        // On déplace la cellule active à après l'image
                        cellReference = new CellReference(1, cellReference.RowIndex + rowsLength);
                    }
                }
                i++;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Filtre les actions et met à jour leurs prédécesseurs et succésseurs managés.
        /// </summary>
        /// <param name="allActions">Toutes les actions.</param>
        /// <param name="excludedActionsFilter">Le filtre excluant les actions.</param>
        /// <param name="includedActionsPredSuccFilter">Le filtre incluant les actions prédécesseurs et succ.</param>
        /// <returns>Les actions filtrées.</returns>
        private ActionsDisplayResults FilterActionsUpdatePredSuccManaged(IEnumerable <KAction> allActions,
                                                                         Func <KAction, bool> excludedActionsFilter,
                                                                         Func <KAction, bool> includedActionsPredSuccFilter)
        {
            var results    = new ActionsDisplayResults();
            var newTimings = new List <ActionTiming>();

            var actionsSorted = allActions
                                .OrderBy(a => a.WBSParts, new WBSHelper.WBSComparer())
                                .ToArray();

#if DEBUG
            foreach (var action in allActions)
            {
                // S'assurer qu'une action soit un seul de : I/E/S/Group
                var isI = ActionsTimingsMoveManagement.IsActionInternal(action);
                var isE = ActionsTimingsMoveManagement.IsActionExternal(action);
                var isS = ActionsTimingsMoveManagement.IsActionDeleted(action);
                var isG = action.IsGroup;

                if (!(isI | isE | isS | isG))
                {
                    throw new InvalidOperationException("Impossible qu'une action soit à la fois I ou E ou S ou G");
                }
            }
#endif

            var actionsFinal = new List <KAction>();

            foreach (var action in actionsSorted)
            {
                action.PredecessorsManaged.Clear();
                action.SuccessorsManaged.Clear();
            }

            foreach (var action in actionsSorted)
            {
                if (excludedActionsFilter(action))
                {
                    // Déplacer tous les pred vers ses succ
                    ActionsTimingsMoveManagement.MapAllPredToSucc(action, includedActionsPredSuccFilter, newTimings, true);
                }
                else if (!action.IsGroup)
                {
                    foreach (var pred in action.Predecessors)
                    {
                        if (includedActionsPredSuccFilter(pred))
                        {
                            pred.SuccessorsManaged.Add(action);
                            action.PredecessorsManaged.Add(pred);
                        }
                    }
                    actionsFinal.Add(action);
                }
                else
                {
                    System.Diagnostics.Debug.Assert(action.IsGroup);
                    actionsFinal.Add(action);
                }
            }

            // Supprimer les liens pour les actions non présentes dans la collection
            foreach (var action in actionsFinal)
            {
                foreach (var pred in action.PredecessorsManaged.ToArray())
                {
                    if (!actionsFinal.Contains(pred))
                    {
                        action.PredecessorsManaged.Remove(pred);
                        pred.SuccessorsManaged.Remove(action);
                    }
                }

                foreach (var succ in action.SuccessorsManaged.ToArray())
                {
                    if (!actionsFinal.Contains(succ))
                    {
                        action.SuccessorsManaged.Remove(succ);
                        succ.PredecessorsManaged.Remove(action);
                    }
                }
            }

            // Il faut automatiquement supprimer les groupes qui ne contiennent plus d'enfants
            // Les groupes n'ayant ni précédesseurs ni successeurs, on peut les supprimer sans réel impact
            var copy = actionsFinal.ToArray();
            foreach (var action in copy)
            {
                if (action.IsGroup && !WBSHelper.HasChildren(action, copy))
                {
                    actionsFinal.Remove(action);
                }
            }

            results.Actions    = actionsFinal;
            results.NewTimings = newTimings;

            return(results);
        }
Esempio n. 4
0
        /// <summary>
        /// Enregistre des actions déjà existantes et construit les éléments.
        /// </summary>
        /// <param name="allActions">Toutes les actions.</param>
        /// <param name="filter">Les filtre I/E/S.</param>
        public void RegisterInitialActions(IEnumerable <KAction> allActions, IESFilterValue filter)
        {
            Func <ActionsDisplayResults> displayedActions;

            bool isCriticalPathEnabled;
            bool useManagedPredSucc;
            bool useGanttItemsTimingsOnly;
            bool fixPredSuccTimings;
            bool refreshTimings;

            foreach (var action in allActions)
            {
                action.IsGroup         = WBSHelper.HasChildren(action, allActions);
                action.IsLinkToProcess = action.LinkedProcessId != null;
            }

            switch (filter)
            {
            case IESFilterValue.IES:
                useManagedPredSucc    = false;
                isCriticalPathEnabled = true;
                displayedActions      = () => new ActionsDisplayResults {
                    Actions = allActions
                };
                useGanttItemsTimingsOnly = false;
                fixPredSuccTimings       = true;
                refreshTimings           = true;
                break;

            case IESFilterValue.I:
                useManagedPredSucc    = true;
                isCriticalPathEnabled = true;
                displayedActions      = () => FilterActionsUpdatePredSuccManaged(allActions,
                                                                                 a => ActionsTimingsMoveManagement.IsActionExternal(a) || ActionsTimingsMoveManagement.IsActionDeleted(a),
                                                                                 a => ActionsTimingsMoveManagement.IsActionInternal(a));
                useGanttItemsTimingsOnly = true;
                fixPredSuccTimings       = true;
                refreshTimings           = false;
                break;

            case IESFilterValue.IE:
                useManagedPredSucc    = true;
                isCriticalPathEnabled = false;
                displayedActions      = () => FilterActionsUpdatePredSuccManaged(allActions,
                                                                                 a => ActionsTimingsMoveManagement.IsActionDeleted(a),
                                                                                 a => ActionsTimingsMoveManagement.IsActionExternal(a) || ActionsTimingsMoveManagement.IsActionInternal(a));
                useGanttItemsTimingsOnly = true;
                fixPredSuccTimings       = true;
                refreshTimings           = false;
                break;

            default:
                throw new ArgumentOutOfRangeException("filter");
            }

            _useGanttItemsTimingsOnly = useGanttItemsTimingsOnly;

            this.IsCriticalPathEnabled = isCriticalPathEnabled;

            var results = displayedActions();

            this.UseManagedPredecessorsSuccessors = useManagedPredSucc;
            if (filter == IESFilterValue.IES && useManagedPredSucc)
            {
                ActionsTimingsMoveManagement.DebugCheckAllWBS(results.Actions);
            }

            this.RegisterInitialActionsImpl(results.Actions);

            if (results.NewTimings != null)
            {
                foreach (var timing in results.NewTimings)
                {
                    SetBuildStart(timing.Action, timing.Start);
                    SetBuildFinish(timing.Action, timing.Finish);
                }
            }

            if (refreshTimings)
            {
                foreach (var item in this.ItemsOfTypeAction)
                {
                    _updatingitem = item;
                    item.Start    = GanttDates.ToDateTime(item.Action.BuildStart);
                    item.Finish   = GanttDates.ToDateTime(item.Action.BuildFinish);
                    _updatingitem = null;
                }
            }

            if (fixPredSuccTimings)
            {
                this.FixPredecessorsSuccessorsTimings();
                this.UpdateResourcesLoad();
            }
        }
Esempio n. 5
0
        public void TestsIsActionInternalExternalDeletedMutuallyExclusive()
        {
            SampleData.ClearDatabaseThenImportDefaultProject();
            // Vérifie dans toutes les actions de la BDD si les actions sont soi I, E ou S et jamais aucun des trois ou plus d'un des 3 à la fois.
            var prepareService = new PrepareService();
            var analyzeService = new AnalyzeService();
            var mre            = new System.Threading.ManualResetEvent(false);

            ProjectsData pData     = null;
            Exception    exception = null;

            prepareService.GetProjects(d =>
            {
                pData = d;
                mre.Set();
            }, ex =>
            {
                exception = ex;
                mre.Set();
            });

            mre.WaitOne();
            AssertExt.IsExceptionNull(exception);

            foreach (var project in pData.Projects)
            {
                mre.Reset();
                RestitutionData rData = null;
                analyzeService.GetFullProjectDetails(project.ProjectId, d =>
                {
                    rData = d;
                    mre.Set();
                }, ex =>
                {
                    exception = ex;
                    mre.Set();
                });

                mre.WaitOne();
                AssertExt.IsExceptionNull(exception);

                foreach (var scenario in rData.Scenarios)
                {
                    foreach (var action in scenario.Actions)
                    {
                        bool i = ActionsTimingsMoveManagement.IsActionInternal(action);
                        bool e = ActionsTimingsMoveManagement.IsActionExternal(action);
                        bool s = ActionsTimingsMoveManagement.IsActionDeleted(action);

                        Assert.IsTrue(i || e || s);

                        if (i)
                        {
                            Assert.IsFalse(e || s);
                        }
                        else if (e)
                        {
                            Assert.IsFalse(i || s);
                        }
                        else
                        {
                            Assert.IsFalse(i || e);
                        }
                    }
                }
            }
        }