strICT.InFlow.Web.Controllers.PDesignerAPIController.PostTransition C# (CSharp) Method

PostTransition() private method

private PostTransition ( PD_TransitionDTO item, int id, int sid ) : HttpResponseMessage
item strict.InFlow.Designer.Db.Contracts.PD_TransitionDTO
id int
sid int
return System.Net.Http.HttpResponseMessage
        public HttpResponseMessage PostTransition(PD_TransitionDTO item, int id, int sid)
        {
             var _p = _db.PD_Processes.Find(id);
             if (User.Identity.Name.Equals(_p.LockedBy))
             {
                 var subject = _db.PD_Subjects.Find(id, sid);
                 PD_Transition newTransition = null;
                 if (item.Type == PD_TransitionTypes.RegularTransition)
                 {
                     var from = _db.PD_States.Find(id, sid, item.Source);
                     var to = _db.PD_States.Find(id, sid, item.Target);
                     if (from.Type == PD_StateTypes.SendState && to.Type == PD_StateTypes.ReceiveState)
                     {                        
                        var state = _db.PD_SendStates.Find(id, sid, item.Source);
                        var messages = _db.PD_Messages.Where(result => result.PD_Process_Id == id && result.From == sid).ToList();
                        foreach (var message in messages)
                        {
                            if (state.Message == message.Id)
                            {
                                newTransition = new PD_RegularTransition() { Name = message.PD_MessageType.Name.ToString() };
                            }
                        }
                        if (newTransition == null) { newTransition = new PD_RegularTransition() { Name = "No message used" }; }
                     }
                     else
                     {

                         PD_State s = _db.PD_States.Find(id, sid, item.Source);
                         if (s.Type == PD_StateTypes.SendState) { 
                             var state = _db.PD_SendStates.Find(id, sid, item.Source);

                             var messages = _db.PD_Messages.Where(result => result.PD_Process_Id == id && result.From == sid).ToList();
                             if (messages.Count() > 0){
                                 var name = messages.Find(result => result.Id == state.Message).PD_MessageType.Name;
                                 newTransition = new PD_RegularTransition() { Name = name };
                             }
                             else
                             {
                                 newTransition = new PD_RegularTransition() { Name = "Transition" };
                             }
                         }
                         else{
                             newTransition = new PD_RegularTransition() { Name = "Transition" };
                         }
                     }
                 }
                 if (item.Type == PD_TransitionTypes.ReceiveTransition)
                 {
                     newTransition = new PD_ReceiveTransition() { Message = -1 };
                 }
                 if (item.Type == PD_TransitionTypes.TimeoutTransition)
                 {
                     newTransition = new PD_TimeoutTransition() { TimeSpan = "dd:hh:mm" };
                 }

                 newTransition.Id = IdHelper.getTransitionId(_db, id, sid);

                 newTransition.Source = item.Source;
                 newTransition.Target = item.Target;
                 newTransition.LabelPosition = item.LabelPosition;
                 subject.Transitions.Add(newTransition);
                 _db.SaveChanges();
                 var response = Request.CreateResponse<PD_TransitionDTO>(HttpStatusCode.Created, new PD_TransitionDTO() { Id = newTransition.Id, Source = newTransition.Source, Target = newTransition.Target, Type = newTransition.Type, Label = "Transition" + newTransition.Type });

                 string uri = Url.Content("Designer" + id + "/Subjects/" + sid + "/States/" + newTransition.Id);
                 response.Headers.Location = new Uri(uri);
                 return response;
             }
             else
             {
                 return null;
             }
        }