Beispiel #1
0
        public TicketEditViewModel EditTicketViewModel(TicketEditBindingModel invalidInput, IEnumerable <ModelError> errors)
        {
            var viewModel = new TicketEditViewModel
            {
                TicketId       = invalidInput.TicketId,
                Title          = invalidInput.Title,
                CreatedDate    = invalidInput.CreatedDate,
                UpdatedDate    = invalidInput.UpdatedDate,
                CreatorName    = invalidInput.CreatorName,
                Type           = invalidInput.Type,
                Status         = invalidInput.Status,
                Priority       = invalidInput.Priority,
                Content        = invalidInput.Content,
                RemoveAssigned = new Dictionary <string, bool>(),
                Errors         = new List <string>()
            };

            if (invalidInput.RemoveAssigned != null)
            {
                foreach (var(username, flag) in invalidInput.RemoveAssigned)
                {
                    viewModel.RemoveAssigned[username] = flag;
                }
            }

            if (errors != null)
            {
                foreach (var error in errors)
                {
                    viewModel.Errors.Add(error.ErrorMessage);
                }
            }
            return(viewModel);
        }
Beispiel #2
0
        public async Task EditTicket(Ticket ticket, TicketEditBindingModel input, HttpContext request)
        {
            var currentUser = await _userManager.GetUserAsync(request.User);

            ticket.UpdatedDate = DateTime.Now;
            ticket.Type        = input.Type;
            ticket.Status      = input.Status;
            ticket.Priority    = input.Priority;
            ticket.Title       = input.Title;
            ticket.Creator     = currentUser;
            ticket.Content     = input.Content;

            if (input.RemoveAssigned != null)
            {
                // Unassign the flagged users from the Ticket.
                foreach (var(username, remove) in input.RemoveAssigned
                         .Where(entry => entry.Value == true))
                {
                    var userId     = _context.Users.Single(u => u.UserName == username).Id;
                    var userTicket = _context.UserTickets.Find(userId, ticket.TicketId);
                    ticket.Assigned.Remove(userTicket);
                    _context.UserTickets.Remove(userTicket);
                }
            }

            // Assign the users to the ticket by creating new UserTickets.
            foreach (string username in input.AddAssigned.Where(entry => entry != null))
            {
                var user       = _context.Users.Single(u => u.UserName == username);
                var userTicket = _userTicketService.CreateUserTicket(user, ticket);
                ticket.Assigned.Add(userTicket);
            }
        }
Beispiel #3
0
        public async Task <IActionResult> Edit(Guid id, TicketEditBindingModel input)
        {
            if (!ModelState.IsValid)
            {
                IEnumerable <ModelError> allErrors = ModelState.Values.SelectMany(m => m.Errors);
                var viewModel = _ticketService.EditTicketViewModel(input, allErrors);
                return(View(viewModel));
            }

            var ticket = _ticketService.GetTicket(id);

            if (ticket == null)
            {
                return(View("Error404"));
            }

            var authResult = await _authService.AuthorizeAsync(HttpContext.User, ticket.Creator.Id, "TicketEditPrivileges");

            if (!authResult.Succeeded)
            {
                return(new ForbidResult());
            }

            await _ticketService.EditTicket(ticket, input, HttpContext);

            _context.SaveChanges(true);

            return(ticket.Status == Ticket.TicketStatus.Closed ? RedirectToAction("Index", new { scope = "closed" }) : RedirectToAction("Index"));
        }