public IActionResult Project(int id = -1)
        {
            if (!_auth.Authorise(RolesEnum.Staff, _context)) // Check logged in
            {
                return(Redirect("~/Login/Index"));
            }

            var userId = _context.Users.First(u => u.UserName == HttpContext.Session.GetString("Username")).UserId;

            var projectUser = _context.ProjectUsers.Where(p => p.ProjectId == id).Where(u => u.UserId == userId).ToList();

            if (projectUser.Count != 1) // Check if user is in project
            {
                return(Redirect("~/Project/Dashboard"));
            }

            if (id == -1 || !_context.Projects.Any(p => p.ProjectId == id)) // Check project exists and id was given
            {
                return(Redirect("~/Project/Dashboard"));
            }


            var vm = new ViewProjectViewModel();                                                     // Create a new view model

            vm.Project = _context.Projects.First(p => p.ProjectId == id);                            // Get the project record and add it to the view model.

            var listOfUsersInProject = _context.ProjectUsers.Where(p => p.ProjectId == id).ToList(); // Get users in project from database

            vm.ProjectUsers = new List <TableProjectUser>();                                         // Instanciate a new list for project users

            // Go through each user
            foreach (var user in listOfUsersInProject)
            {
                // The actual user record
                var accuser = _context.Users.First(u => u.UserId == user.UserId);

                // New table project user and fill in fields
                var temp = new TableProjectUser();
                temp.Username = accuser.UserName;
                temp.Email    = accuser.Email ?? "User has not given an email.";
                temp.Role     = _context.Roles.First(r => r.RoleId == accuser.RoleId).RoleName;

                var minutesBooked =
                    _context.ProjectMinutesBooked.Where(p => p.ProjectId == id && p.UserId == user.UserId);

                temp.MinutesBooked = 0;

                foreach (var minutes in minutesBooked)
                {
                    temp.MinutesBooked += minutes.AmountOfMinutes;
                }

                // Add new table project user to view model
                vm.ProjectUsers.Add(temp);
            }

            // return the Project view
            return(View(vm));
        }
示例#2
0
        public async Task <IActionResult> ViewProject([FromRoute] string id)
        {
            Project p = await _projectRepository.GetProjectByUniqueId(id);

            ViewProjectViewModel model = new ViewProjectViewModel
            {
                Project = p
            };

            return(View(model));
        }
示例#3
0
        // Returns a ViewProjectViewModel for the project that has the projectID that gets sent in
        // This function finds the users in project and project owner
        public ViewProjectViewModel GetProject(int projectId)
        {
            var prod = (from proj in _db.Projects
                        where proj.ID == projectId
                        select proj)
                       .SingleOrDefault();

            var files = (from file in _db.Files
                         where file.ProjectID == projectId
                         select file)
                        .Select(x => new ProjectFileViewModel {
                ID = x.ID, Name = x.Name, Type = x.Type
            })
                        .ToList();

            var usersInProjectID = (from users in _db.UsersInProjects
                                    where users.ProjectID == projectId
                                    select users.UserID)
                                   .ToList();

            var userID = prod.OwnerID;

            var ownerName = (from owner in _db.Users
                             where owner.Id == userID
                             select owner.UserName)
                            .SingleOrDefault();

            List <string> usersNames = new List <string>();

            foreach (var item in usersInProjectID)
            {
                var holder = (from name in _db.Users
                              where name.Id == item
                              select name.UserName)
                             .SingleOrDefault();

                usersNames.Add(holder);
            }

            usersNames.Sort();

            var project = new ViewProjectViewModel
            {
                ID        = prod.ID,
                Name      = prod.Name,
                Type      = prod.Type,
                Files     = files,
                UserName  = usersNames,
                OwnerName = ownerName
            };

            return(project);
        }
        public IActionResult BookHours(ViewProjectViewModel vm, int id)
        {
            // create a new record and fill out fields
            var rec = new ProjectMinutesBooked();

            rec.UserId          = _context.Users.First(u => u.UserName == HttpContext.Session.GetString("Username")).UserId;
            rec.ProjectId       = id;
            rec.AmountOfMinutes = (vm.HoursBooked * 60) + vm.MinutesBooked;
            rec.DateOfBooking   = DateTime.Now;

            // Add minutes to the project
            _context.Projects.First(p => p.ProjectId == id).CurrentUsedMinutes += rec.AmountOfMinutes;

            // Add the record
            _context.ProjectMinutesBooked.Add(rec);

            // Get the project record
            var proj = _context.Projects.First(p => p.ProjectId == id);

            // If over budget
            if (proj.CurrentUsedMinutes > proj.MaximumMinutes)
            {
                // Generate an automatic broadcast
                var broadcastTitle = $"Project: {proj.ProjectName}, has run over-budget.";

                // Check there isn't already a broadcast with the automatic broadcast signature
                if (!_context.Broadcasts.Any(b => b.Title == broadcastTitle))
                {
                    // Create a new broadcast
                    var broadcast = new Broadcasts();
                    broadcast.Title  = broadcastTitle;
                    broadcast.Body   = "This project has gone over the maximum amount of hours that was budgeted. Project is being locked.";
                    broadcast.UserId = _context.Users.First(u => u.UserName == HttpContext.Session.GetString("Username")).UserId;

                    // Add broadcast to the database
                    _context.Broadcasts.Add(broadcast);

                    // Lock the project
                    _context.Projects.First(p => p.ProjectId == id).Locked = true;
                }
            }

            // Save the changes to the database
            _context.SaveChanges();

            // Kick back to the project page
            return(Redirect($"~/Project/Project/{id}"));
        }
示例#5
0
        public ActionResult Index()
        {
            var model = new ViewProjectViewModel();

            var members = DbContext.Users.Count();

            if (User.IsInRole("Admin") || User.IsInRole("Project Manager"))
            {
                var tickets  = DbContext.Tickets.Where(p => p.Project.Archive == false).Count();
                var projects = DbContext.Projects.Where(p => p.Archive == false).Count();

                var openTickets = DbContext.Tickets
                                  .Where(p => p.TicketStatus.Name == "Open" && p.Project.Archive == false).Count();
                var resolvedTickets = DbContext.Tickets
                                      .Where(p => p.TicketStatus.Name == "Resolved" && p.Project.Archive == false).Count();
                var rejectedTickets = DbContext.Tickets
                                      .Where(p => p.TicketStatus.Name == "Rejected" && p.Project.Archive == false).Count();

                model.Tickets         = tickets;
                model.openTickets     = openTickets;
                model.resolvedTickets = resolvedTickets;
                model.rejectedTickets = rejectedTickets;
                model.Projects        = projects;
                model.Members         = members;
            }
            if (User.IsInRole("Submitter"))
            {
                var userId = User.Identity.GetUserId();

                var userProjects = DbContext.Projects
                                   .Where(p => p.Users.Any(m => m.Id == userId) && p.Archive == false).Count();
                var userTickets = DbContext.Tickets
                                  .Where(p => p.CreatedBy.Id == userId && p.Project.Archive == false)
                                  .Select(p => new { p.TicketStatus }).ToList();

                var tickets = userTickets.Count();

                var openTickets = userTickets
                                  .Where(p => p.TicketStatus.Name == "Open").Count();
                var resolvedTickets = userTickets
                                      .Where(p => p.TicketStatus.Name == "Resolved").Count();
                var rejectedTickets = userTickets
                                      .Where(p => p.TicketStatus.Name == "Rejected").Count();

                model.Tickets         = tickets;
                model.openTickets     = openTickets;
                model.resolvedTickets = resolvedTickets;
                model.rejectedTickets = rejectedTickets;
                model.Projects        = userProjects;
                model.Members         = members;
            }

            if (User.IsInRole("Developer"))
            {
                var userId = User.Identity.GetUserId();

                var userProjects = DbContext.Projects
                                   .Where(p => p.Users.Any(m => m.Id == userId) && p.Archive == false).Count();
                var userTickets = DbContext.Tickets
                                  .Where(p => p.AssignedTo.Id == userId && p.Project.Archive == false)
                                  .Select(p => new { p.TicketStatus }).ToList();

                var tickets = userTickets.Count();

                var openTickets = userTickets
                                  .Where(p => p.TicketStatus.Name == "Open").Count();
                var resolvedTickets = userTickets
                                      .Where(p => p.TicketStatus.Name == "Resolved").Count();
                var rejectedTickets = userTickets
                                      .Where(p => p.TicketStatus.Name == "Rejected").Count();

                model.Tickets         = tickets;
                model.openTickets     = openTickets;
                model.resolvedTickets = resolvedTickets;
                model.rejectedTickets = rejectedTickets;
                model.Projects        = userProjects;
                model.Members         = members;
            }

            return(View(model));
        }