public ActionResult EditComment([Bind(Include = "Id,CommentBody")] TicketComment comment) { var currentComment = db.TicketComments.FirstOrDefault(c => c.Id == comment.Id); var timeStamp = DateTimeOffset.UtcNow; if (User.IsInRole("DemoAcc")) { return(RedirectToAction("Ticket", "BT", new { Id = currentComment.TicketID })); } if (ModelState.IsValid) { var userId = User.Identity.GetUserId(); var currentUser = db.Users.FirstOrDefault(u => u.Id == userId); if (currentUser == currentComment.User || User.IsInRole("Project Manager") && currentComment.Ticket.Project.Users.Contains(currentUser) || User.IsInRole("Admin")) { db.TicketComments.Attach(currentComment); currentComment.CommentBody = comment.CommentBody; db.SaveChanges(); //HelperMethod for Histories/Notifications var ticketCustomHelper = new TicketCustomHelper(); //Create Notification ticketCustomHelper.CommentEditNotification(currentUser, currentComment, timeStamp); } else { string errcode = User.Identity.Name + " Permission not granted, EditComment, Comment: " + currentComment.Id; return(RedirectToAction("Err403", "BT", new { errcode = errcode })); } } return(RedirectToAction("Ticket", "BT", new { Id = currentComment.TicketID })); }
public ActionResult AddComment(TicketComment comment) { var commentor = db.Users.Find(User.Identity.GetUserId()); var timeStamp = DateTimeOffset.UtcNow; var currentTicket = db.TicketPosts.Find(comment.TicketID); var formSubmitter = db.Users.Find(User.Identity.GetUserId());//User that submitted form //####Start Access Control Section#### var allowed = false;//Controls Access if (User.IsInRole("Admin")) { allowed = true; } else if (User.IsInRole("Project Manager") && currentTicket.Project.Users.Contains(formSubmitter)) { allowed = true; } else if (User.IsInRole("Developer") && currentTicket.AssignedToUser != null) { if (currentTicket.AssignedToUser == formSubmitter) { allowed = true; } } else if (User.IsInRole("Submitter") && currentTicket.OwnerUser == formSubmitter) { allowed = true; } if (User.IsInRole("DemoAcc")) { string errcode = User.Identity.Name + " Permission not granted, AddComment, Ticket: " + currentTicket.Id; return(RedirectToAction("Err403", "BT", new { errcode = errcode })); } //####End Access Control Section#### if (ModelState.IsValid && comment.CommentBody != null && allowed == true) { //HelperMethod for Histories/Notifications var ticketCustomHelper = new TicketCustomHelper(); //add data & save comment comment.Created = timeStamp; comment.UserID = commentor.Id; db.TicketComments.Add(comment); db.SaveChanges(); //Create Notification ticketCustomHelper.TicketCommentNotification(commentor, comment, timeStamp); return(RedirectToAction("Ticket", "BT", new { id = comment.TicketID })); } return(RedirectToAction("Ticket", "BT", new { id = comment.TicketID })); }
public ActionResult CreateTicket(TicketPost ticket) { //HelperMethod for Histories/Notifications var ticketCustomHelper = new TicketCustomHelper(); //Variables var currentProject = db.Projects.Find(ticket.ProjectID); //Current Project from the database. var formSubmitter = db.Users.Find(User.Identity.GetUserId()); //User that submitted form var timeStamp = DateTimeOffset.UtcNow; var newticket = ticket; //####Start Access Control Section#### var allowed = false;//Controls Access if (User.IsInRole("Admin")) { allowed = true; } else if (User.IsInRole("Project Manager") && currentProject.Users.Contains(formSubmitter)) { allowed = true; } else if (User.IsInRole("Submitter") && currentProject.Users.Contains(formSubmitter)) { allowed = true; } if (User.IsInRole("DemoAcc")) { allowed = false; } //####End Access Control Section#### if (ModelState.IsValid && allowed == true) { newticket.OwnerUserID = formSubmitter.Id; newticket.TicketStatusID = 3; newticket.Created = timeStamp; db.TicketPosts.Add(newticket); db.SaveChanges(); ticketCustomHelper.NewTicketNotification(currentProject, formSubmitter, timeStamp, newticket); if (User.IsInRole("Project Manager")) { return(RedirectToAction("ManageProject", "BT", new { Id = currentProject.Id })); } } if (allowed == false) { string errcode = User.Identity.Name + " Permission not granted, CreateTicket, Project:" + currentProject.Id; return(RedirectToAction("Err403", "BT", new { errcode = errcode })); } return(RedirectToAction("ProjectDetails", "BT", new { id = currentProject.Id })); }
public ActionResult BulkAssign(int Id, List <PMAssignUsersTicketVM> model, string selector1) { //HelperMethod for Histories/Notifications var ticketCustomHelper = new TicketCustomHelper(); var selectedTickets = model.Where(m => m.IsChecked == true); var project = db.Projects.Find(Id); var currentUser = db.Users.Find(User.Identity.GetUserId()); var selectedUser = db.Users.Find(selector1); var timeStamp = DateTimeOffset.UtcNow; if (User.IsInRole("DemoAcc") || selectedTickets == null || currentUser == null) { return(RedirectToAction("PMDashboard", "BT")); } if (project.Users.Contains(currentUser)) { foreach (var item in selectedTickets) { var currentTicket = db.TicketPosts.FirstOrDefault(t => t.Id == item.TicketId); var editedTicket = db.TicketPosts.AsNoTracking().FirstOrDefault(t => t.Id == item.TicketId); editedTicket.AssignedToUserID = selectedUser.Id; //Create Ticket Assignment History, Create Ticket Assignment Notifications ticketCustomHelper.AssignmentHistory(currentTicket, editedTicket, timeStamp, currentUser, "Assignment"); //History ticketCustomHelper.AssignmentNotification(currentTicket, editedTicket, timeStamp, currentUser); //Notification //Set ticket property changes/updates db.TicketPosts.Attach(currentTicket); currentTicket.AssignedToUserID = selectedUser.Id; currentTicket.UpdatedByUserID = currentUser.Id; currentTicket.Updated = timeStamp; db.SaveChanges(); } } return(RedirectToAction("PMDashboard", "BT")); }
public ActionResult PMDashboard() { //HelperMethod for Histories/Notifications var ticketCustomHelper = new TicketCustomHelper(); //UserRoles Helper var userRolesHelper = new UserRolesHelper(db); var currentUser = db.Users.Find(User.Identity.GetUserId()); var userProjects = currentUser.Projects.ToList(); var AllProjectsTickets = userProjects.SelectMany(p => p.Tickets).ToList(); //Passes All Tickets for all projects to partial view var DispTicketsVM1 = new DispTicketsVM(); DispTicketsVM1.TicketList = AllProjectsTickets; DispTicketsVM1.TitleDesc = "All Tickets from your Projects only."; ViewData["MyProjectsTicketsList"] = DispTicketsVM1; //List Tickets for Each Project and allow bulk assignment var allDevelopers = userRolesHelper.GetAllUsersInRole("Developer").OrderBy(u => u.DisplayName); //Instantiate Big View Model (for encapsulating other VMs) var PMDashboardVM = new PMDashboardVM(); PMDashboardVM.PMVMListForPartials = new List <PMTicketProjectsSelectVM>(); PMDashboardVM.MyProjects = userProjects; var projectsArr = userProjects.ToArray(); for (var i = 0; i < projectsArr.Length; i++) { //Instantiate New VM for each Project's Developers(select list) & UnAssigned Tickets(table/checkboxes) var PMTicketProjectsSelectVM = new PMTicketProjectsSelectVM(); PMTicketProjectsSelectVM.PMUsersInProjectVMList = new List <PMUsersInProjectVM>(); PMTicketProjectsSelectVM.PMAssignUsersTicketList = new List <PMAssignUsersTicketVM>(); //Get Developers & Unassigned Tickets var developersInProject = allDevelopers.Where(u => u.Projects.Contains(projectsArr[i])).ToArray(); var ticketsInProject = projectsArr[i].Tickets.Where(x => x.AssignedToUser == null).ToArray(); //Build Developer User List for (var x = 0; x < developersInProject.Length; x++) { PMTicketProjectsSelectVM.PMUsersInProjectVMList.Add(new PMUsersInProjectVM() { ProjectId = projectsArr[i].Id, UserDisplayName = developersInProject[x].DisplayName, UserId = developersInProject[x].Id }); } //Build Unassigned Ticket List w/ checkbox values for (var x = 0; x < ticketsInProject.Length; x++) { PMTicketProjectsSelectVM.PMAssignUsersTicketList.Add(new PMAssignUsersTicketVM() { ProjectId = projectsArr[i].Id, TicketId = ticketsInProject[x].Id, Ticket = ticketsInProject[x], IsChecked = false }); } //Adds Developers & Tickets as one List Item PMTicketProjectsSelectVM.ProjectId = projectsArr[i].Id; PMTicketProjectsSelectVM.ProjectName = projectsArr[i].Name; PMDashboardVM.PMVMListForPartials.Add(PMTicketProjectsSelectVM); } var ticketHistoriesList = new List <TicketHistory>(); foreach (var item in userProjects) { var newList = db.TicketHistories.OrderByDescending(h => h.UpdatedTime).Where(h => h.Ticket.ProjectID == item.Id).ToList(); ticketHistoriesList.AddRange(newList); } var projectHistoriesList = ticketHistoriesList.OrderByDescending(h => h.UpdatedTime).ToList(); //Data for TicketHistories var historyTimesList = projectHistoriesList.Select(x => x.UpdatedTime).Distinct().ToList(); var ticketHistoryList = new List <TicketHistory>().ToArray(); var TopList = new List <TopDispHist>(); foreach (var item in historyTimesList) { var TopDispHist = new TopDispHist(); TopDispHist.HistEntriesList = new List <TicketHistory>(); var ticketEntry = projectHistoriesList.Where(t => t.UpdatedTime == item); TopDispHist.HistEntriesList.AddRange(ticketEntry.ToList()); TopDispHist.Created = item; TopDispHist.DisplayName = TopDispHist.HistEntriesList.First().UpdatedByUser.DisplayName; TopList.Add(TopDispHist); } ViewData["ticketHistoryList"] = (List <TopDispHist>)TopList.Take(15).ToList(); var VMList = PMDashboardVM.PMVMListForPartials; ViewData["ViewModelList"] = (List <PMTicketProjectsSelectVM>)VMList; return(View(PMDashboardVM)); }
public ActionResult AddTicketAttachment([Bind(Include = "TicketId,Description")] TicketAttachment ticketAttachment, HttpPostedFileBase file) { //HelperMethod for Histories/Notifications var ticketCustomHelper = new TicketCustomHelper(); //Variables var currentTicket = db.TicketPosts.Find(ticketAttachment.TicketID); //Current Ticket from the database. var formSubmitter = db.Users.Find(User.Identity.GetUserId()); //User that submitted form var timeStamp = DateTimeOffset.UtcNow; //####Start Access Control Section#### var allowed = false;//Controls Access if (User.IsInRole("Admin")) { allowed = true; } else if (User.IsInRole("Project Manager") && currentTicket.Project.Users.Contains(formSubmitter)) { allowed = true; } else if (User.IsInRole("Developer") && currentTicket.AssignedToUser != null) { if (currentTicket.AssignedToUser == formSubmitter) { allowed = true; } } else if (User.IsInRole("Submitter") && currentTicket.OwnerUser == formSubmitter) { allowed = true; } if (User.IsInRole("DemoAcc")) { allowed = false; } //####End Access Control Section#### if (file == null || file.ContentLength > 3999999)//Doesn't work need to add script to check filesize on frontend { //check the file name to make sure its an image //var ext = Path.GetExtension(file.FileName).ToLower(); return(RedirectToAction("Ticket", "BT", new { Id = ticketAttachment.TicketID })); //if (ext != ".png" && ext != ".jpg" && ext != ".jpeg" && ext != ".gif" && ext != ".bmp") // ModelState.AddModelError("image", "Invalid Format."); } if (ModelState.IsValid && allowed == true) { if (file != null) { //relative server path var filePath = "/Uploads/"; // path on physical drive on server var absPath = Server.MapPath("~" + filePath); // file url for relative path ticketAttachment.FilePath = filePath + file.FileName; //save image to Uploads file.SaveAs(Path.Combine(absPath, file.FileName)); ticketAttachment.FileURL = filePath + file.FileName; } db.TicketAttachments.Add(ticketAttachment); ticketAttachment.UserID = formSubmitter.Id; ticketAttachment.Created = timeStamp; db.SaveChanges(); ticketCustomHelper.TicketAttachmentNotification(formSubmitter, ticketAttachment, timeStamp); return(RedirectToAction("Ticket", "BT", new { Id = ticketAttachment.TicketID })); } if (allowed == false) { string errcode = User.Identity.Name + " Permission not granted, Attachment, Ticket: " + currentTicket.Id; return(RedirectToAction("Err403", "BT", new { errcode = errcode })); } return(RedirectToAction("Ticket", "BT", new { Id = ticketAttachment.TicketID })); }
public ActionResult EditTicketForm([Bind(Include = "Id,Created,Updated,Title,Description,ProjectID,TicketStatusID,TicketTypeID,TicketPriorityID,OwnerUserID,AssignedToUserID")] TicketPost ticketPost) { if (ModelState.IsValid) { //HelperMethod for Histories/Notifications var ticketCustomHelper = new TicketCustomHelper(); var currentTicket = db.TicketPosts.Find(ticketPost.Id); //Current Ticket from the database. var editedTicket = ticketPost; //Changes that were submitted through Form Post var allUsers = db.Users; var ticketEditor = db.Users.Find(User.Identity.GetUserId()); //User that edited the ticket var ticketUpdatedTimeStamp = DateTimeOffset.UtcNow; //Used so ticket updated-date/history-time/notificaiton-time var changesMade = false; //is used to control one final saved of all ticket edits var updateNoftication = false; //is used to control & send one generic edit message db.TicketPosts.Attach(currentTicket); //Sets currentTicket ready for changes. //####Start Access Control Section#### var allowed = false;//Controls Access if (User.IsInRole("Admin")) { allowed = true; } else if (User.IsInRole("Project Manager") && currentTicket.Project.Users.Contains(ticketEditor)) { allowed = true; } else if (User.IsInRole("Developer") && currentTicket.AssignedToUser != null) { if (currentTicket.AssignedToUser == ticketEditor) { allowed = true; } } else if (User.IsInRole("Submitter") && currentTicket.OwnerUser == ticketEditor) { allowed = true; } if (User.IsInRole("DemoAcc")) { allowed = false; } //####End Access Control Section#### //ONLY Editable Items - Details/Overview of each section. // AssignedToUserID - PM Only, Creates History Entry, Sends Notification to new asignee & old assignee. // TicketPriorityID - Creates History Entry, Sends generic Notification // TicketTypeID - Creates History Entry, Sends generic Notification // TicketStatusID - Creates History Entry, Sends generic Notification // Description - Creates History Entry, Sends generic Notification // Title - Creates History Entry, Sends generic Notification if (allowed) { if (currentTicket.AssignedToUserID != editedTicket.AssignedToUserID && User.IsInRole("Project Manager")) { //Create Ticket Assignment History, Create Ticket Assignment Notifications, Set ticket property change ticketCustomHelper.AssignmentHistory(currentTicket, editedTicket, ticketUpdatedTimeStamp, ticketEditor, "Assignment"); //History ticketCustomHelper.AssignmentNotification(currentTicket, editedTicket, ticketUpdatedTimeStamp, ticketEditor); //Notification currentTicket.AssignedToUserID = editedTicket.AssignedToUserID; //set ticket edit change changesMade = true; } if (currentTicket.TicketPriorityID != editedTicket.TicketPriorityID) { //Create Ticket History, Set Ticket Edit Change var editedPropertyName = ticketCustomHelper.GetPriorityName(editedTicket.TicketPriorityID); //Get ticket priority name ticketCustomHelper.GenericHistory(currentTicket, currentTicket.TicketPriority.Name, editedPropertyName, ticketUpdatedTimeStamp, ticketEditor, "Ticket Priority"); currentTicket.TicketPriorityID = editedTicket.TicketPriorityID; //Set Ticket Edit Change changesMade = true; updateNoftication = true; } if (currentTicket.TicketTypeID != editedTicket.TicketTypeID) { //Create Ticket History, Set Ticket Edit Change var editedPropertyName = ticketCustomHelper.GetTypeName(editedTicket.TicketTypeID); //Get ticket type name ticketCustomHelper.GenericHistory(currentTicket, currentTicket.TicketType.Name, editedPropertyName, ticketUpdatedTimeStamp, ticketEditor, "Ticket Type"); //History currentTicket.TicketTypeID = editedTicket.TicketTypeID; //Set Ticket Edit Change changesMade = true; updateNoftication = true; } if (currentTicket.TicketStatusID != editedTicket.TicketStatusID) { //Create Ticket History, Set Ticket Edit Change var editedPropertyName = ticketCustomHelper.GetStatusName(editedTicket.TicketStatusID); //Get ticket priority name ticketCustomHelper.GenericHistory(currentTicket, currentTicket.TicketStatus.Name, editedPropertyName, ticketUpdatedTimeStamp, ticketEditor, "Ticket Status"); //History currentTicket.TicketStatusID = editedTicket.TicketStatusID; //Set Ticket Edit Change changesMade = true; updateNoftication = true; } if (currentTicket.Description != editedTicket.Description) { //Create Ticket History, Set Ticket Edit Change ticketCustomHelper.GenericHistory(currentTicket, currentTicket.Description, editedTicket.Description, ticketUpdatedTimeStamp, ticketEditor, "Ticket Description"); //History currentTicket.Description = editedTicket.Description; //Set Ticket Edit Change changesMade = true; updateNoftication = true; } if (currentTicket.Title != editedTicket.Title) { //Create Ticket History, Set Ticket Edit Change ticketCustomHelper.GenericHistory(currentTicket, currentTicket.Title, editedTicket.Title, ticketUpdatedTimeStamp, ticketEditor, "Ticket Title"); //History currentTicket.Title = editedTicket.Title; //Set Ticket Edit Change changesMade = true; updateNoftication = true; } if (changesMade) { //Sends Nofitication to Ticket Asignee. (Not when Assignee is changed) //(Nofication for Asignee change is sent in the Assignment section above) if (updateNoftication) { ticketCustomHelper.GenericTicketChangeNotification(currentTicket.AssignedToUserID, ticketEditor, currentTicket.Id, ticketUpdatedTimeStamp); } //Set time/editor, and save changes. currentTicket.UpdatedByUserID = ticketEditor.Id; currentTicket.Updated = ticketUpdatedTimeStamp; db.SaveChanges(); } return(RedirectToAction("Ticket", "BT", new { id = currentTicket.Id })); } if (allowed == false) { string errcode = User.Identity.Name + " Permission not granted, TicketEditForm, Ticket: " + currentTicket.Id; return(RedirectToAction("Err403", "BT", new { errcode = errcode })); } } return(RedirectToAction("Ticket", "BT", new { id = ticketPost.Id })); }