Пример #1
0
        public async Task CreateTicket(TicketCreateBindingModel form, HttpContext request)
        {
            var ticket = new Ticket
            {
                Title          = form.Title,
                Creator        = await _userManager.GetUserAsync(request.User),
                Content        = form.Content,
                CommentThreads = new List <CommentThread>(),
                Assigned       = new List <UserTicket>(),
                Project        = _context.Projects.Include(p => p.Members).Single(p => p.Title.Equals(form.SelectedProject))
            };

            var projectMemberIds = ticket.Project.Members.Select(m => m.Id).ToList();

            foreach (string username in form.AddAssigned.Where(entry => entry != null))
            {
                var user = _context.Users.Single(u => u.UserName == username);
                Debug.Assert(user != null);

                var userTicket = _userTicketService.CreateUserTicket(user, ticket);
                ticket.Assigned.Add(userTicket);

                // If the user is not already a member of the given project, add them as a member.
                if (!projectMemberIds.Contains(user.Id))
                {
                    var userProject = _userProjectService.CreateUserProject(user, ticket.Project);
                    ticket.Project.Members.Add(userProject);
                }
            }

            _context.Tickets.Add(ticket);
            _context.SaveChanges(true);
        }
Пример #2
0
        public TicketCreateViewModel CreateTicketViewModel(TicketCreateBindingModel ticket = null,
                                                           IEnumerable <ModelError> errors = null)
        {
            var viewModel = new TicketCreateViewModel
            {
                Errors = new List <string>()
            };

            var projectTitles = _context.Projects
                                .Select(p => p.Title)
                                .ToList();

            viewModel.Projects = new SelectList(projectTitles);

            if (ticket != null)
            {
                viewModel.Title    = ticket.Title;
                viewModel.Type     = ticket.Type;
                viewModel.Priority = ticket.Priority;
            }

            if (errors != null)
            {
                foreach (var error in errors)
                {
                    viewModel.Errors.Add(error.ErrorMessage);
                }
            }

            return(viewModel);
        }
Пример #3
0
        public async Task <IActionResult> Create(TicketCreateBindingModel input)
        {
            if (!ModelState.IsValid)
            {
                IEnumerable <ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors);
                var viewModel = _ticketService.CreateTicketViewModel(input, allErrors);
                return(View(viewModel));
            }

            await _ticketService.CreateTicket(input, HttpContext);

            return(RedirectToAction("Index", new { scope = "created" }));
        }