Exemplo n.º 1
0
        internal Activity CopyActivity(Activity activity)
        {
            Assertion.Require(activity, "activity");

            FixedList <ProjectItem> branchToCopy = activity.GetBranch();

            var copiedItems = new List <Tuple <Activity, ProjectItem, int> >(branchToCopy.Count);

            foreach (var item in branchToCopy)
            {
                var copy = new Activity(this.Project, item);

                copy.SetPosition(this.ItemsList.Count + 1);

                var parentInBranch = branchToCopy.Find(x => x.Id == item.Parent.Id);

                if (parentInBranch != null)
                {
                    var copyParent = copiedItems.Find(x => x.Item2.UID == parentInBranch.UID);

                    copy.SetParent(copyParent.Item1);
                }


                copy.Save();

                var dependencyId = copy.Template.DueOnControllerId;

                this.ItemsList.Add(copy);

                copiedItems.Add(Tuple.Create(copy, item, dependencyId));
            }


            // Set copied dependencies or remote them if they are not in the same branch
            foreach (var tuple in copiedItems.FindAll(x => x.Item3 != -1))
            {
                var dependency = copiedItems.Find(x => x.Item2.Id == tuple.Item3);

                if (dependency != null)
                {
                    tuple.Item1.ExtensionData.Set("config/dueOnController", dependency.Item1.Id);
                }
                else
                {
                    tuple.Item1.ExtensionData.Remove("config/dueOnController");
                    tuple.Item1.ExtensionData.Remove("config/dueOnCondition");
                    tuple.Item1.ExtensionData.Remove("config/dueOnTermUnit");
                    tuple.Item1.ExtensionData.Remove("config/dueOnTerm");
                    tuple.Item1.ExtensionData.Remove("config/dueOnRuleAppliesForAllContracts");
                }

                tuple.Item1.Save();
            }

            return(copiedItems[0].Item1);
        }
Exemplo n.º 2
0
        public NoDataModel RemoveProjectItemFile(string projectItemUID, string fileUID)
        {
            try {
                var projectItem = ProjectItem.Parse(projectItemUID);

                FixedList <Posting> list = PostingList.GetPostings(projectItem, "ProjectItem.MediaFile");

                var posting = list.Find(x => x.PostedItemUID == fileUID);

                Assertion.Require(posting.NodeObjectUID == projectItem.UID,
                                  $"ProjectItem {projectItem.Name} does not have the file {posting.PostedItemUID}.");

                posting.Delete();

                return(new NoDataModel(this.Request));
            } catch (Exception e) {
                throw base.CreateHttpException(e);
            }
        }
Exemplo n.º 3
0
        static private void TryMatch(ProjectItemStateChange currentItem,
                                     FixedList <ProjectItemStateChange> newModel)
        {
            ProjectItem projectItem = currentItem.ProjectItem;

            var matchedInNewModel = newModel.Find(x => x.Template.Id == projectItem.TemplateId);

            if (matchedInNewModel == null)
            {
                if (projectItem.TemplateId != 0)
                {
                    currentItem.ProcessMatchResult = ProjectItemProcessMatchResult.OrphanInProject;
                }
                else
                {
                    currentItem.ProcessMatchResult = ProjectItemProcessMatchResult.OnlyInProject;
                }
                return;
            }

            bool hasProgrammingRule = HasProgrammingRule(currentItem, matchedInNewModel);
            bool dataChanged        = DataChanged(currentItem, matchedInNewModel);
            bool deadlineChanged    = DeadlineChanged(currentItem, matchedInNewModel);

            if (!hasProgrammingRule)
            {
                if (deadlineChanged)
                {
                    currentItem.Deadline = matchedInNewModel.Deadline;
                }

                currentItem.ProcessMatchResult = ProjectItemProcessMatchResult.NoProgrammingRule;
            }
            else if (deadlineChanged && dataChanged)
            {
                currentItem.Deadline = matchedInNewModel.Deadline;
                SetUpdatedData(currentItem, matchedInNewModel);

                currentItem.ProcessMatchResult = ProjectItemProcessMatchResult.MatchedWithDeadlineAndDataChanges;
            }
            else if (deadlineChanged && !dataChanged)
            {
                currentItem.Deadline = matchedInNewModel.Deadline;

                currentItem.ProcessMatchResult = ProjectItemProcessMatchResult.MatchedWithDeadlineChanges;
            }
            else if (!deadlineChanged && dataChanged)
            {
                SetUpdatedData(currentItem, matchedInNewModel);

                currentItem.ProcessMatchResult = ProjectItemProcessMatchResult.MatchedWithDataChanges;
            }
            else if (!deadlineChanged && !dataChanged)
            {
                currentItem.ProcessMatchResult = ProjectItemProcessMatchResult.MatchedEqual;
            }
            else
            {
                Assertion.EnsureNoReachThisCode("Should be impossible to reach this code.");
            }
        }