Ejemplo n.º 1
0
        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)
            {
            }
        }
Ejemplo n.º 2
0
        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();
        }