public async Task <ActionResult> DeleteConfirmed(int id) { Ticket ticket = db.Tickets.Find(id); var currentUser = db.Users.Find(User.Identity.GetUserId()); if (ticket.TicketStatus.Name != "Resolved") { TicketHistoryEvent th = new TicketHistoryEvent { TicketId = ticket.Id, Property = "Status", NewValue = "Resolved", OldValue = db.TicketStatuses.Find(ticket.TicketStatusId).Name, ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th); db.SaveChanges(); int ticketStatusId = db.TicketStatuses.FirstOrDefault(ts => ts.Name == "Resolved").Id; ticket.TicketStatusId = ticketStatusId; db.Entry(ticket).Property("TicketStatusId").IsModified = true; db.SaveChanges(); if (!(ticket.AssignedToId == null || ticket.AssignedToId == "" || ticket.AssignedToId == "N/A")) { //email notification try { var from = "ReSolve Bugtracker<*****@*****.**>"; var to = db.Users.Find(ticket.AssignedToId).Email; var email = new MailMessage(from, to) { Subject = "Ticket has been resolved", Body = $"A ticket you are assigned to (<strong>{ticket.Title}</strong>) has been set to resolved by {currentUser.FirstName} {currentUser.LastName}.", //"Ticket Details can be found <a href='/Tickets/Details/{ticket.Id}'>here</a>.", IsBodyHtml = true }; var svc = new PersonalEmail(); await svc.SendAsync(email); ViewBag.Message = "Email has been sent"; } catch (Exception e) { Console.WriteLine(e.Message); await Task.FromResult(0); } } } return(RedirectToAction("Index")); }
public async Task <ActionResult> Unassign([Bind(Include = "UserId,ticketId")] TicketAssignViewModel model) { Ticket ticket = db.Tickets.Find(model.ticketId); var userId = User.Identity.GetUserId(); var currentUser = db.Users.Find(userId); if (!URManager.UserIsInRole(userId, "Administrator")) { if (!(ticket.Project.InChargeOfId == userId)) { return(RedirectToAction("Login", "Account")); } } if ("Unassigned" != db.TicketStatuses.Find(ticket.TicketStatusId).Name) { TicketHistoryEvent th = new TicketHistoryEvent { TicketId = ticket.Id, Property = "Status", NewValue = "Unassigned", OldValue = db.TicketStatuses.Find(ticket.TicketStatusId).Name, ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th); db.SaveChanges(); } var user = db.Users.Find(model.UserId); if (!(ticket.AssignedToId == null || ticket.AssignedToId == "" || ticket.AssignedToId == "N/A")) { TicketHistoryEvent th1 = new TicketHistoryEvent { TicketId = ticket.Id, Property = "Assigned To", NewValue = "N/A", OldValue = db.Users.Find(ticket.AssignedToId).FirstName + " " + db.Users.Find(ticket.AssignedToId).LastName, ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th1); db.SaveChanges(); //email notification try { var from = "ReSolve Bugtracker<*****@*****.**>"; var to = db.Users.Find(ticket.AssignedToId).Email; var email = new MailMessage(from, to) { Subject = "You were unassigned", Body = $"You were unassigned from ticket: <strong>{ticket.Title}</strong> by {currentUser.FirstName} {currentUser.LastName}.", IsBodyHtml = true }; var svc = new PersonalEmail(); await svc.SendAsync(email); ViewBag.Message = "Email has been sent"; } catch (Exception e) { Console.WriteLine(e.Message); await Task.FromResult(0); } } ticket.AssignedToId = null; db.Entry(ticket).Property("AssignedToId").IsModified = true; db.SaveChanges(); int ticketStatusId = db.TicketStatuses.FirstOrDefault(ts => ts.Name == "Unassigned").Id; ticket.TicketStatusId = ticketStatusId; db.Entry(ticket).Property("TicketStatusId").IsModified = true; db.SaveChanges(); return(RedirectToAction("Details", new { id = ticket.Id })); }
public async Task <ActionResult> Assign([Bind(Include = "UserId,ticketId")] TicketAssignViewModel model) { Ticket ticket = db.Tickets.Find(model.ticketId); var currentUser = db.Users.Find(User.Identity.GetUserId()); //make sure user is eligable for assignment if (ModelState.IsValid && URManager.UsersInRole("Developer").Where(u => ticket.Project.Users.Select(u1 => u1.Id).Contains(u.Id)).Select(u2 => u2.Id).Contains(model.UserId)) { if ("Assigned" != db.TicketStatuses.Find(ticket.TicketStatusId).Name) { TicketHistoryEvent th = new TicketHistoryEvent { TicketId = ticket.Id, Property = "Status", NewValue = "Assigned", OldValue = db.TicketStatuses.Find(ticket.TicketStatusId).Name, ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th); db.SaveChanges(); } var user = db.Users.Find(model.UserId); if (ticket.AssignedToId == null || ticket.AssignedToId == "" || ticket.AssignedToId == "N/A") { TicketHistoryEvent th1 = new TicketHistoryEvent { TicketId = ticket.Id, Property = "Assigned To", NewValue = user.FirstName + " " + user.LastName, OldValue = "N/A", ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th1); db.SaveChanges(); } else if (user.FirstName + " " + user.LastName != db.Users.Find(ticket.AssignedToId).FirstName + " " + db.Users.Find(ticket.AssignedToId).LastName) { TicketHistoryEvent th1 = new TicketHistoryEvent { TicketId = ticket.Id, Property = "Assigned To", NewValue = user.FirstName + " " + user.LastName, OldValue = db.Users.Find(ticket.AssignedToId).FirstName + " " + db.Users.Find(ticket.AssignedToId).LastName, ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th1); db.SaveChanges(); //email notification try { var from = "ReSolve Bugtracker<*****@*****.**>"; var to = db.Users.Find(ticket.AssignedToId).Email; var email = new MailMessage(from, to) { Subject = "You were unassigned", Body = $"You were unassigned from ticket: <strong>{ticket.Title}</strong> by {currentUser.FirstName} {currentUser.LastName}.", IsBodyHtml = true }; var svc = new PersonalEmail(); await svc.SendAsync(email); ViewBag.Message = "Email has been sent"; } catch (Exception e) { Console.WriteLine(e.Message); await Task.FromResult(0); } } ticket.AssignedToId = model.UserId; db.Entry(ticket).Property("AssignedToId").IsModified = true; db.SaveChanges(); int ticketStatusId = db.TicketStatuses.FirstOrDefault(ts => ts.Name == "Assigned").Id; ticket.TicketStatusId = ticketStatusId; db.Entry(ticket).Property("TicketStatusId").IsModified = true; db.SaveChanges(); //email notification try { var from = "ReSolve Bugtracker<*****@*****.**>"; var to = user.Email; var email = new MailMessage(from, to) { Subject = "New Ticket Assignment", Body = $"You were assigned to ticket: <strong>{ticket.Title}</strong> by {currentUser.FirstName} {currentUser.LastName}. Ticket Details can be found <a href='http://kferretti-bugtracker.azurewebsites.net/Tickets/Details/{ticket.Id}'>here</a>.", IsBodyHtml = true }; var svc = new PersonalEmail(); await svc.SendAsync(email); ViewBag.Message = "Email has been sent"; } catch (Exception e) { Console.WriteLine(e.Message); await Task.FromResult(0); } } return(RedirectToAction("Details", new { id = ticket.Id })); }
public async Task <ActionResult> Edit([Bind(Include = "Id,Title,Description,Created,ProjectId,TicketTypeId,TicketPriorityId,SubmitterId,AssignedToId,TicketStatusId")] Ticket ticket) { if (ModelState.IsValid) { Ticket oldTicket = db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == ticket.Id); var currentUser = db.Users.Find(User.Identity.GetUserId()); ticket.Updated = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)); db.Entry(ticket).State = EntityState.Modified; db.SaveChanges(); if (oldTicket.Title != ticket.Title) { TicketHistoryEvent th = new TicketHistoryEvent { TicketId = ticket.Id, Property = "Title", NewValue = ticket.Title, OldValue = oldTicket.Title, ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th); db.SaveChanges(); //make sure ticket is assigned if (!(ticket.AssignedToId == null || ticket.AssignedToId == "" || ticket.AssignedToId == "N/A")) { //email notification try { var from = "ReSolve Bugtracker<*****@*****.**>"; var to = db.Users.Find(ticket.AssignedToId).Email; var email = new MailMessage(from, to) { Subject = "Title of your ticket has been edited", Body = $"A ticket you are assigned to (<strong>{ticket.Title}</strong>) has had its title changed from \"{oldTicket.Title}\" to \"{ticket.Title}\" by {currentUser.FirstName} {currentUser.LastName}. Ticket Details can be found <a href='http://kferretti-bugtracker.azurewebsites.net/Tickets/Details/{ticket.Id}'>here</a>.", IsBodyHtml = true }; var svc = new PersonalEmail(); await svc.SendAsync(email); ViewBag.Message = "Email has been sent"; } catch (Exception e) { Console.WriteLine(e.Message); await Task.FromResult(0); } } } if (oldTicket.Description != ticket.Description) { TicketHistoryEvent th = new TicketHistoryEvent { TicketId = ticket.Id, Property = "Description", NewValue = ticket.Description, OldValue = oldTicket.Description, ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th); db.SaveChanges(); //make sure ticket is assigned if (!(ticket.AssignedToId == null || ticket.AssignedToId == "" || ticket.AssignedToId == "N/A")) { //email notification try { var from = "ReSolve Bugtracker<*****@*****.**>"; var to = db.Users.Find(ticket.AssignedToId).Email; var email = new MailMessage(from, to) { Subject = "Description of your ticket has been edited", Body = $"A ticket you are assigned to (<strong>{ticket.Title}</strong>) has had its description changed from \"{oldTicket.Description}\" to \"{ticket.Description}\" by {currentUser.FirstName} {currentUser.LastName}. Ticket Details can be found <a href='http://kferretti-bugtracker.azurewebsites.net/Tickets/Details/{ticket.Id}'>here</a>.", IsBodyHtml = true }; var svc = new PersonalEmail(); await svc.SendAsync(email); ViewBag.Message = "Email has been sent"; } catch (Exception e) { Console.WriteLine(e.Message); await Task.FromResult(0); } } } if (oldTicket.TicketPriorityId != ticket.TicketPriorityId) { TicketHistoryEvent th = new TicketHistoryEvent { TicketId = ticket.Id, Property = "Priority", NewValue = db.TicketPriorities.Find(ticket.TicketPriorityId).Name, OldValue = db.TicketPriorities.Find(oldTicket.TicketPriorityId).Name, ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), //DateTimeOffset.Now.ToLocalTime(), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th); db.SaveChanges(); //make sure ticket is assigned if (!(ticket.AssignedToId == null || ticket.AssignedToId == "" || ticket.AssignedToId == "N/A")) { //email notification try { var from = "ReSolve Bugtracker<*****@*****.**>"; var to = db.Users.Find(ticket.AssignedToId).Email; var email = new MailMessage(from, to) { Subject = "Priority of your ticket has been edited", Body = $"A ticket you are assigned to (<strong>{ticket.Title}</strong>) has had its priority changed from \"{db.TicketPriorities.Find(oldTicket.TicketPriorityId).Name}\" to \"{db.TicketPriorities.Find(ticket.TicketPriorityId).Name}\" by {currentUser.FirstName} {currentUser.LastName}. Ticket Details can be found <a href='http://kferretti-bugtracker.azurewebsites.net/Tickets/Details/{ticket.Id}'>here</a>.", IsBodyHtml = true }; var svc = new PersonalEmail(); await svc.SendAsync(email); ViewBag.Message = "Email has been sent"; } catch (Exception e) { Console.WriteLine(e.Message); await Task.FromResult(0); } } } if (oldTicket.TicketTypeId != ticket.TicketTypeId) { TicketHistoryEvent th = new TicketHistoryEvent { TicketId = ticket.Id, Property = "Type", NewValue = db.TicketTypes.Find(ticket.TicketTypeId).Name, OldValue = db.TicketTypes.Find(oldTicket.TicketTypeId).Name, ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th); db.SaveChanges(); //make sure ticket is assigned if (!(ticket.AssignedToId == null || ticket.AssignedToId == "" || ticket.AssignedToId == "N/A")) { //email notification try { var from = "ReSolve Bugtracker<*****@*****.**>"; var to = db.Users.Find(ticket.AssignedToId).Email; var email = new MailMessage(from, to) { Subject = "Type of your ticket has been edited", Body = $"A ticket you are assigned to (<strong>{ticket.Title}</strong>) has had its type changed from \"{db.TicketTypes.Find(oldTicket.TicketTypeId).Name}\" to \"{db.TicketTypes.Find(ticket.TicketTypeId).Name}\" by {currentUser.FirstName} {currentUser.LastName}. Ticket Details can be found <a href='http://kferretti-bugtracker.azurewebsites.net/Tickets/Details/{ticket.Id}'>here</a>.", IsBodyHtml = true }; var svc = new PersonalEmail(); await svc.SendAsync(email); ViewBag.Message = "Email has been sent"; } catch (Exception e) { Console.WriteLine(e.Message); await Task.FromResult(0); } } } return(RedirectToAction("Details", new { id = ticket.Id })); } ViewBag.TicketPriorityId = new SelectList(db.TicketPriorities, "Id", "Name", ticket.TicketPriorityId); ViewBag.TicketTypeId = new SelectList(db.TicketTypes, "Id", "Name", ticket.TicketTypeId); return(View(ticket)); }
public ActionResult Create([Bind(Include = "Id,Description,ProjectId,TicketTypeId,TicketPriorityId")] Ticket ticket) { var userId = User.Identity.GetUserId(); var user = db.Users.Find(userId); if (ModelState.IsValid && user.Projects.Select(p => p.Id).Contains(ticket.ProjectId)) { ticket.SubmitterId = userId; ticket.Created = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)); int ticketStatusId = db.TicketStatuses.FirstOrDefault(ts => ts.Name == "Unassigned").Id; ticket.TicketStatusId = ticketStatusId; db.Tickets.Add(ticket); db.SaveChanges(); //makes the id look more official and systematic string paddedId = ticket.Id.ToString("0000"); ticket.Title = "BI:" + paddedId; db.Entry(ticket).Property("Title").IsModified = true; db.SaveChanges(); Ticket savedTicket = db.Tickets.Find(ticket.Id); //Ticket history creation TicketHistoryEvent th1 = new TicketHistoryEvent { TicketId = savedTicket.Id, Property = "ID#", NewValue = savedTicket.Title, ChangedDate = savedTicket.Created, UserId = savedTicket.SubmitterId }; TicketHistoryEvent th2 = new TicketHistoryEvent { TicketId = savedTicket.Id, Property = "Description", NewValue = savedTicket.Description, ChangedDate = savedTicket.Created, UserId = savedTicket.SubmitterId }; TicketHistoryEvent th3 = new TicketHistoryEvent { TicketId = savedTicket.Id, Property = "Priority", NewValue = db.TicketPriorities.Find(savedTicket.TicketPriorityId).Name, ChangedDate = savedTicket.Created, UserId = savedTicket.SubmitterId }; TicketHistoryEvent th4 = new TicketHistoryEvent { TicketId = savedTicket.Id, Property = "Status", NewValue = db.TicketStatuses.Find(savedTicket.TicketStatusId).Name, ChangedDate = savedTicket.Created, UserId = savedTicket.SubmitterId }; db.TicketHistoryEvents.Add(th1); db.SaveChanges(); db.TicketHistoryEvents.Add(th2); db.SaveChanges(); db.TicketHistoryEvents.Add(th3); db.SaveChanges(); db.TicketHistoryEvents.Add(th4); db.SaveChanges(); return(RedirectToAction("Details", new { id = ticket.Id })); } ViewBag.ProjectKnown = false; ViewBag.AssignedToId = new SelectList(db.Users, "Id", "FirstName", ticket.AssignedToId); ViewBag.ProjectId = new SelectList(user.Projects, "Id", "Name", ticket.ProjectId); ViewBag.SubmitterId = new SelectList(db.Users, "Id", "FirstName", ticket.SubmitterId); ViewBag.TicketPriorityId = new SelectList(db.TicketPriorities, "Id", "Name", ticket.TicketPriorityId); ViewBag.TicketTypeId = new SelectList(db.TicketTypes, "Id", "Name", ticket.TicketTypeId); return(View(ticket)); }
public ActionResult TicketAssign([Bind(Include = "Tickets,UserId")] UsersViewModel model) { var user = db.Users.Find(model.UserId); if (ModelState.IsValid && model.Tickets != null && model.Tickets.Any()) { foreach (var ticket in model.Tickets) { if (URManager.UserIsInRole(model.UserId, "Developer")) { Ticket Ticket = db.Tickets.Find(Convert.ToInt32(ticket)); if (Ticket.AssignedToId != model.UserId) { if ("Assigned" != db.TicketStatuses.Find(Ticket.TicketStatusId).Name) { TicketHistoryEvent th = new TicketHistoryEvent { TicketId = Ticket.Id, Property = "Status", NewValue = "Assigned", OldValue = db.TicketStatuses.Find(Ticket.TicketStatusId).Name, ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th); db.SaveChanges(); } if (Ticket.AssignedToId == null || Ticket.AssignedToId == "" || Ticket.AssignedToId == "N/A") { TicketHistoryEvent th1 = new TicketHistoryEvent { TicketId = Ticket.Id, Property = "Assigned To", NewValue = user.FirstName + " " + user.LastName, OldValue = "N/A", ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th1); db.SaveChanges(); } else if (user.FirstName + " " + user.LastName != db.Users.Find(Ticket.AssignedToId).FirstName + " " + db.Users.Find(Ticket.AssignedToId).LastName) { TicketHistoryEvent th1 = new TicketHistoryEvent { TicketId = Ticket.Id, Property = "Assigned To", NewValue = user.FirstName + " " + user.LastName, OldValue = db.Users.Find(Ticket.AssignedToId).FirstName + " " + db.Users.Find(Ticket.AssignedToId).LastName, ChangedDate = new DateTimeOffset(DateTime.Now, TimeZoneInfo.Local.GetUtcOffset(DateTime.Now)), UserId = User.Identity.GetUserId() }; db.TicketHistoryEvents.Add(th1); db.SaveChanges(); } Ticket.AssignedToId = model.UserId; db.Entry(Ticket).Property("AssignedToId").IsModified = true; db.SaveChanges(); int ticketStatusId = db.TicketStatuses.FirstOrDefault(ts => ts.Name == "Assigned").Id; Ticket.TicketStatusId = ticketStatusId; db.Entry(Ticket).Property("TicketStatusId").IsModified = true; db.SaveChanges(); } } } ViewBag.Message = "Project Assignments have been saved"; return(RedirectToAction("Index")); } return(RedirectToAction("Index")); }