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); }
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); } }
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."); } }