public void AddNewTask(PTUpdate pt) { var processGuid = _context.Processes.Where(p => p.Id == pt.ProcessId).FirstOrDefault().ProcessGuid; var existingTasks = _context.ProcessTasks.Where(et => et.ProcessGuid == processGuid).ToList(); int max = 0; foreach (var task in existingTasks) { if (task.Id >= 0) { max = task.Id; } } ProcessTask newPT = new ProcessTask(); newPT.Id = max + 1; newPT.ProcessTaskGuid = Guid.NewGuid(); newPT.ProcessGuid = processGuid; newPT.TaskName = "(new task)"; newPT.TaskTypeId = pt.TaskTypeId; newPT.CreatedDate = DateTime.Now; newPT.CompletionTask = 1; _context.ProcessTasks.Add(newPT); if (!ModelState.IsValid) { throw new HttpResponseException(HttpStatusCode.BadRequest); } try { _context.SaveChanges(); } catch (Exception e) { } }
public void UpdateProcessTasks(int id, PTUpdate ptu) { /* ************************ UPDATE ProcessTaskTransition ************************ */ Guid processGuid = _context.Processes .Where(p => p.Id == ptu.ProcessId) .FirstOrDefault() .ProcessGuid; List <string> depsGiven = ptu.ProcessTaskDependencies.Trim().Split(',').ToList(); List <string> desiredSourceTaskGuids = new List <string>(); //check if given task IDs are already existing in transition table, or need to be added foreach (string dep in depsGiven) { if (dep != string.Empty) { //guid of source task to be completed run the destination task var sourceTaskGuid = _context.ProcessTasks .Where(pt => pt.Id.ToString() == dep.ToString() && pt.ProcessGuid == processGuid) .SingleOrDefault() .ProcessTaskGuid; desiredSourceTaskGuids.Add(sourceTaskGuid.ToString()); //check if this is an existing dependency var dependencyChcek = _context .ProcessTaskTransition .Where(ptt => ptt.SourceTaskGuid == sourceTaskGuid && ptt.DestinationTaskGuid == ptu.ProcessTaskGuid && ptt.DeletedDate == null) .ToList(); //if none found, create new dependency if (dependencyChcek.Count == 0) { ProcessTaskTransition PTT = new ProcessTaskTransition(); PTT.CreatedDate = DateTime.Now; PTT.DeletedDate = null; PTT.DestinationTaskGuid = ptu.ProcessTaskGuid; PTT.SourceTaskGuid = sourceTaskGuid; PTT.SourceTaskState = "Initiating"; PTT.ProcessTaskTransitionId = 1; PTT.ProcessTaskTransitionGuid = Guid.NewGuid(); _context.ProcessTaskTransition.Add(PTT); } } } //check if existing ones are to be deleted //get all existing source tasks guids for this destination task var existingSourceTasks = _context.ProcessTaskTransition .Where(exs => exs.DestinationTaskGuid == ptu.ProcessTaskGuid) .ToList(); foreach (var existingSourceTask in existingSourceTasks) { if (!desiredSourceTaskGuids.Contains(existingSourceTask.SourceTaskGuid.ToString())) { var transitionToRemove = _context.ProcessTaskTransition .Where(ttr => ttr.DestinationTaskGuid == ptu.ProcessTaskGuid && ttr.SourceTaskGuid == existingSourceTask.SourceTaskGuid) .FirstOrDefault(); _context.ProcessTaskTransition.Remove(transitionToRemove); } } if (!ModelState.IsValid) { throw new HttpResponseException(HttpStatusCode.BadRequest); } /* ************************ UPDATE ProcessTask DATA ************************ */ //this task object var task = _context.ProcessTasks. Where(t => t.ProcessTaskGuid == ptu.ProcessTaskGuid) .FirstOrDefault(); task.TaskName = ptu.TaskName; /* ************************ UPDATE ProcessTaskAttributes DATA ************************ */ //split the attributes along with their values List <string> attrGiven = ptu.ProcessTaskAttributes.Trim().Split(';').ToList(); foreach (var attr in attrGiven) { //split into key - value pair List <string> attributesVSvalues = attr.Trim().Split('=').ToList(); //if there was one found if (attributesVSvalues.Count > 0 && attr != "") { //find a record with the specific key string keyToCompare = attributesVSvalues[0].ToString(); var PTAttribute = _context.ProcessTaskAttributes .Where(pta => pta.ProcessTaskGuid == ptu.ProcessTaskGuid && pta.AttributeKey == keyToCompare) .ToList(); //if one found, let's check if need to update it's value if (PTAttribute.Count > 0) { PTAttribute[0].AttributeValue = attributesVSvalues[1]; _context.SaveChanges(); } //else let's create one else { ProcessTaskAttribute newPTA = new ProcessTaskAttribute(); newPTA.AttributeKey = attributesVSvalues[0]; newPTA.AttributeValue = attributesVSvalues[1]; newPTA.ProcessTaskGuid = ptu.ProcessTaskGuid; newPTA.CreatedDate = DateTime.Now; newPTA.ProcessTaskAttributeGuid = Guid.NewGuid(); _context.ProcessTaskAttributes.Add(newPTA); _context.SaveChanges(); } } } _context.SaveChanges(); }