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)); }
public async Task <IActionResult> ViewProject([FromRoute] string id) { Project p = await _projectRepository.GetProjectByUniqueId(id); ViewProjectViewModel model = new ViewProjectViewModel { Project = p }; return(View(model)); }
// 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}")); }
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)); }