public ActionResult AssignUsers(int?id) { { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Project project = db.Projects.Find(id); if (project == null) { return(HttpNotFound()); } AssignProjectUsersViewModel model = new AssignProjectUsersViewModel(); ProjectUsersHelper helper = new ProjectUsersHelper(db); model.ProjectId = project.Id; model.ProjectTitle = project.Title; var currentUsers = helper.ListUsers(model.ProjectId); model.UsersList = currentUsers; model.CurrentUsers = new SelectList(currentUsers, "Id", "FullName"); var absentUsers = helper.ListAbsentUsers(model.ProjectId); model.AbsentUsers = new SelectList(absentUsers, "Id", "FullName"); return(View(model)); } }
public ActionResult AssignUser(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Ticket ticket = db.Tickets.Find(id); if (ticket == null) { return(HttpNotFound()); } AssignTicketUserViewModel AssignModel = new AssignTicketUserViewModel(); AssignModel.TicketId = ticket.Id; AssignModel.TicketTitle = ticket.Title; ProjectUsersHelper helper = new ProjectUsersHelper(db); UserRolesHelper userHelper = new UserRolesHelper(db); var projectUsers = helper.ListUsers(ticket.ProjectId); var projectDevelopers = new List <ApplicationUser>(); foreach (var user in projectUsers) { if (userHelper.IsUserInRole(user.Id, "Developer")) { projectDevelopers.Add(user); } } if (ticket.Assignee != null) { AssignModel.TicketAssignedTo = ticket.Assignee.FullName; } AssignModel.UsersList = new SelectList(projectDevelopers, "Id", "FullName"); return(View(AssignModel)); }
public async Task <ActionResult> Create([Bind(Include = "Id,ProjectId,Title,Body,Priority,Type")] Ticket ticket) { if (ModelState.IsValid) { if (ticket.Title == null) { ticket.Title = StringUtilities.Shorten(ticket.Body, 50); } ticket.Created = System.DateTimeOffset.Now; ticket.OwnerId = User.Identity.GetUserId(); // Adding status and priority field var st = db.Statuses.ToList(); foreach (Status s in st) { if (s.Name == TicketStatus.Open.ToString()) { ticket.StatusId = s.Id; } } //ticket.StatusId = db.Statuses.Find(TicketStatus.Open.ToString()).Id; // 2017.03.22 (ericwat) - Added priority field to take the lookup value var pr = db.Priorities.ToList(); foreach (Priority p in pr) { if (p.Name == ticket.Priority.ToString()) { ticket.PriorityId = p.Id; } } ticket.Status = 0; History history = new History(); history.Date = ticket.Created; var historyBody = "Ticket created. <br> Title: " + ticket.Title + "<br> Body: " + ticket.Body + "<br>" + "Priority: " + ticket.Priority + ", Type: " + ticket.Type.Name + ", Status: " + ticket.Status; history.Body = historyBody; history.TicketId = ticket.Id; db.Tickets.Add(ticket); db.History.Add(history); db.SaveChanges(); var user = db.Users.Find(ticket.OwnerId); //Send email to project managers ProjectUsersHelper helper = new ProjectUsersHelper(db); var projectManagers = helper.ListProjectManagers(ticket.ProjectId); foreach (var pm in projectManagers) { var svc = new EmailService(); var msg = new IdentityMessage(); msg.Destination = pm; msg.Subject = "Bug Tracker: Ticket Created"; msg.Body = user.FullName + " has created the ticket '" + ticket.Title + "'. To assign this ticket to a user, please visit https://meyasu-bugtracker.azurewebsites.net/Tickets/Details/" + ticket.Id; await svc.SendAsync(msg); } return(RedirectToAction("Index")); } return(View(ticket)); }
public ActionResult AddUser(string AddUserId, int ProjectId) { ProjectUsersHelper helper = new ProjectUsersHelper(db); helper.AssignUser(AddUserId, ProjectId); db.SaveChanges(); return(RedirectToAction("AssignUsers", new { id = ProjectId })); }
public ActionResult Index() { var userId = User.Identity.GetUserId(); var projects = new List <Project>(); ProjectUsersHelper helper = new ProjectUsersHelper(db); projects = helper.ListProjects(userId); return(View(projects.Where(p => p.Archived == false).OrderBy(p => p.Deadline))); }
public ActionResult Create([Bind(Include = "Id,Title,Description,Created,Deadline")] Project project) { if (ModelState.IsValid) { ProjectUsersHelper helper = new ProjectUsersHelper(db); project.Created = System.DateTimeOffset.Now; project.Archived = false; var userId = User.Identity.GetUserId(); db.Projects.Add(project); helper.AssignUser(userId, project.Id); db.SaveChanges(); return(RedirectToAction("Index")); } return(View(project)); }
public ActionResult RemoveUser(string RemoveUserId, int ProjectId) { ProjectUsersHelper helper = new ProjectUsersHelper(db); var tickets = db.Tickets.Where(t => t.AssigneeId == RemoveUserId && t.ProjectId == ProjectId).ToList(); foreach (var ticket in tickets) { ticket.AssigneeId = null; ticket.Status = Status.Open; ticket.Modified = System.DateTimeOffset.Now; db.Tickets.Attach(ticket); db.Entry(ticket).Property("Modified").IsModified = true; db.Entry(ticket).Property("AssigneeId").IsModified = true; db.Entry(ticket).Property("Status").IsModified = true; db.SaveChanges(); } helper.RemoveUser(RemoveUserId, ProjectId); db.SaveChanges(); return(RedirectToAction("AssignUsers", new { id = ProjectId })); }
public async Task <ActionResult> Resolve(int id) { //Ticket Information Ticket ticket = db.Tickets.Find(id); ticket.Status = Status.Resolved; ticket.Modified = System.DateTimeOffset.Now; var userId = User.Identity.GetUserId(); var user = db.Users.Find(userId); //Add to ticket history History history = new History(); history.Date = System.DateTimeOffset.Now; var historyBody = "Ticket marked as Resolved by " + user.FullName; history.Body = historyBody; history.TicketId = ticket.Id; db.History.Add(history); //Save ticket changes to database db.Tickets.Attach(ticket); db.Entry(ticket).Property("Status").IsModified = true; db.Entry(ticket).Property("Modified").IsModified = true; db.SaveChanges(); //Send email to project managers ProjectUsersHelper helper = new ProjectUsersHelper(db); var projectManagers = helper.ListProjectManagers(ticket.ProjectId); foreach (var pm in projectManagers) { var svc = new EmailService(); var msg = new IdentityMessage(); msg.Destination = pm; msg.Subject = "Bug Tracker: Ticket Resolved"; msg.Body = user.FullName + " has marked the ticket '" + ticket.Title + "' as Resolved. To close this ticket, please visit https://epalmer-bugtracker.azurewebsites.net/Tickets/Details/" + ticket.Id + " If there are still issues left to resolve on the ticket, the ticket's developer can be reached at " + ticket.Assignee.Email; await svc.SendAsync(msg); } return(RedirectToAction("Details", new { id = ticket.Id })); }
public ActionResult Details(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Project project = db.Projects.Find(id); if (project == null) { return(HttpNotFound()); } var userId = User.Identity.GetUserId(); UserRolesHelper userHelper = new UserRolesHelper(db); ProjectUsersHelper projectHelper = new ProjectUsersHelper(db); var userRoles = userHelper.ListUserRoles(userId); var tickets = new List <Ticket>(); if (userRoles.Contains("Admin") || (userRoles.Contains("Project Manager"))) { tickets = project.Tickets.ToList(); } else if (userRoles.Contains("Developer") && userRoles.Contains("Submitter")) { tickets = project.Tickets.Where(t => t.AssigneeId == userId || t.OwnerId == userId).ToList(); } else if (userRoles.Contains("Developer")) { tickets = project.Tickets.Where(t => t.AssigneeId == userId).ToList(); } else if (userRoles.Contains("Submitter")) { tickets = project.Tickets.Where(t => t.OwnerId == userId).ToList(); } ViewBag.TicketList = tickets; return(View(project)); }