Exemple #1
0
        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 }));
        }
Exemple #2
0
        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 }));
        }
Exemple #3
0
        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 }));
        }
Exemple #4
0
        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"));
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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 }));
        }
Exemple #7
0
        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 }));
        }