Example #1
0
        public ActionResult CreateTicket(NewTicketModel model)
        {
            if (ModelState.IsValid)
            {
                var now    = DateTime.Now;
                var userId = User.Identity.GetUserId();

                Project parentProject = db.Projects.FirstOrDefault(p => p.Id == model.ParentProjectId);
                if (parentProject == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
                }

                TicketStatus initStatus;
                if (model.TicketStatusId == null && parentProject.ActiveWorkflow.InitialTicketStatusId != null)
                {
                    initStatus = db.TicketStatuses.ToList().FirstOrDefault(ts => ts.Id == parentProject.ActiveWorkflow.InitialTicketStatusId);
                    if (initStatus == null)
                    {
                        return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError));
                    }
                }
                else
                {
                    initStatus = db.TicketStatuses.Find(model.TicketStatusId);
                }

                TicketPriority priority = db.TicketPriorityTypes.FirstOrDefault(tp => tp.Id == model.TicketPriorityId);
                if (priority == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
                }

                string initSolverId = parentProject.GetNextSolverIdFromWorkflow();

                var newTicket = new Ticket()
                {
                    Title = model.Title
                    ,
                    Description = model.Description
                    ,
                    CreatedAt = now
                    ,
                    ParentProjectId = parentProject.Id
                    ,
                    TicketTypeId = model.TicketTypeId
                    ,
                    TicketStatusId = initStatus.Id
                    ,
                    TicketPriorityLevelId = priority.Id
                    ,
                    ReporterId = User.Identity.GetUserId()
                    ,
                    AssignedSolverId = initSolverId
                };
                db.Tickets.Add(newTicket);
                db.SaveChanges();

                newTicket.SaveTicketCreatedHistoryEntry(User, db);
                if (model.Attachments.First() != null)
                {
                    newTicket.AddAttachments(model.Attachments, User, db, Server);
                }

                db.TicketNotifications.AddRange(TicketNotification.GenerateNotifications(db, User.Identity.GetUserId(), newTicket.Id, "A new ticket has been created!"));
                db.SaveChanges();

                return(RedirectToAction("Show", "Tickets", new { TicketIdentifier = newTicket.GetTicketIdentifier() }));
            }
            return(View());
        }