public ActionResult Download(TimeSheetSearchViewModel vm) { Func <IQueryable <TimeSheetLineItem>, IQueryable <TimeSheetLineItem> > timeSheetItemFilter = q => { q = q.Include("TimeSheet.CreatedByUser.Person").Include("Project").Include("Task"); if (vm.SubmittedUserById.HasValue) { q = q.Where(r => r.TimeSheet.CreatedByUserId == vm.SubmittedUserById.Value); } if (vm.State.HasValue) { q = q.Where(r => r.TimeSheet.State == vm.State.Value); } if (vm.StartDate.HasValue) { q = q.Where(r => r.TimeSheet.Date >= vm.StartDate.Value); } if (vm.EndDate.HasValue) { q = q.Where(r => r.TimeSheet.Date <= vm.EndDate.Value); } q = q.OrderByDescending(d => d.CreatedOn); return(q); }; var timeSheetItems = _timeSheetLineItemRepository.Search(timeSheetItemFilter); return(ExportAsCSV(timeSheetItems)); }
public FileContentResult EffortByBillableCSV(TimeSheetSearchViewModel vm) { var teamMembers = new List <int>(); var csv = new StringBuilder(); if (vm.TeamMode) { if (WebUser.IsAdmin) { teamMembers.AddRange(_userRepository.GetAll().Select(u => u.Id).ToList()); } else { var loginEmployee = _employeeRepository.GetBy(r => r.UserId == WebUser.Id); var myReportees = _employeeRepository.GetAllBy(u => u.ReportingPersonId == loginEmployee.Id && u.EmployeeStatus != EmployeeStatus.Ex).Select(u => u.UserId).ToList(); teamMembers.AddRange(myReportees); } } Func <IQueryable <TimeSheetLineItem>, IQueryable <TimeSheetLineItem> > timeSheetFilter = q => { if (vm.SubmittedUserById.HasValue) { q = q.Where(r => r.TimeSheet.CreatedByUserId == vm.SubmittedUserById.Value); } if (vm.StartDate.HasValue) { q = q.Where(r => r.TimeSheet.Date >= vm.StartDate.Value); } if (vm.EndDate.HasValue) { q = q.Where(r => r.TimeSheet.Date <= vm.EndDate.Value); } if (vm.TeamMode && teamMembers.Any()) { q = q.Where(r => teamMembers.Contains(r.TimeSheet.CreatedByUserId)); } return(q); }; var timeSheetLineItems = _timeSheetLineItemRepository.Search(timeSheetFilter); var employeesByLocation = timeSheetLineItems.GroupBy(l => l.WorkType) .Select(x => new { x.Key, Value = x.Sum(i => i.Effort) }) .ToList(); // Bad, we are getting numbers. So I put the name instead csv.AppendLine("Non-Billable, Billable"); var values = string.Join(",", employeesByLocation.Select(x => x.Value).ToArray()); csv.AppendLine(values); return(File(new UTF8Encoding().GetBytes(csv.ToString()), "text/csv", "EffortByBillableCSV.csv")); }
public ActionResult Download(TimeSheetSearchViewModel vm) { Func <IQueryable <MissedTimeSheet>, IQueryable <MissedTimeSheet> > timeSheetItemFilter = q => { q = q.Include("User.Person"); if (vm.SubmittedUserById.HasValue) { q = q.Where(r => r.UserId == vm.SubmittedUserById.Value); } if (vm.StartDate.HasValue) { q = q.Where(r => r.Date >= vm.StartDate.Value); } if (vm.EndDate.HasValue) { q = q.Where(r => r.Date <= vm.EndDate.Value); } q = q.OrderByDescending(d => d.Date).ThenBy(d => d.CreatedOn); return(q); }; var timeSheetItems = _missedTimeSheetRepository.Search(timeSheetItemFilter); return(ExportAsCSV(timeSheetItems)); }
public ActionResult Index(TimeSheetSearchViewModel vm) { ViewBag.SubmittedUserById = new SelectList(_userRepository.GetAllBy(u => u.Id != 1, "Person").ToList().OrderBy(p => p.Person.Name), "Id", "Person.Name", vm.SubmittedUserById); Func <IQueryable <TimeSheet>, IQueryable <TimeSheet> > timeSheetFilter = q => { q = q.Include("CreatedByUser.Person"); if (vm.SubmittedUserById.HasValue) { q = q.Where(r => r.CreatedByUserId == vm.SubmittedUserById.Value); } if (vm.State.HasValue) { q = q.Where(r => r.State == vm.State.Value); } if (vm.StartDate.HasValue) { q = q.Where(r => r.Date >= vm.StartDate.Value); } else { if (!vm.IsPostBack) { var monday = DateTime.Today.Previous(DayOfWeek.Monday); vm.StartDate = monday; q = q.Where(r => r.Date >= vm.StartDate.Value); } } if (vm.EndDate.HasValue) { q = q.Where(r => r.Date <= vm.EndDate.Value); } else { if (!vm.IsPostBack) { var friday = DateTime.Today.Next(DayOfWeek.Friday); vm.EndDate = friday; q = q.Where(r => r.Date <= vm.EndDate.Value); vm.IsPostBack = true; } } q = q.OrderByDescending(d => d.Date).ThenBy(d => d.CreatedOn); return(q); }; var timeSheets = _timeSheetRepository.Search(timeSheetFilter); vm.TimeSheets = timeSheets.Select(u => new TimeSheetViewModel(u, WebUser)).ToList(); return(View(vm)); }
public ActionResult Download(TimeSheetSearchViewModel vm) { // Get only mine and my reportees var loginEmployee = _employeeRepository.GetBy(r => r.UserId == WebUser.Id); var myReportees = _employeeRepository.GetAllBy(u => u.ReportingPersonId == loginEmployee.Id && u.EmployeeStatus != EmployeeStatus.Ex).Select(u => u.UserId).ToList(); var userList = _userRepository.GetAllBy(u => myReportees.Contains(u.Id) || u.Id == WebUser.Id, "Person").ToList(); Func <IQueryable <TimeSheetLineItem>, IQueryable <TimeSheetLineItem> > timeSheetLineItemFilter = q => { q = q.Include("TimeSheet.CreatedByUser.Person").Include("TimeSheet.CreatedByUser.Department").Include("Project").Include("Task"); if (vm.SubmittedUserById.HasValue) { q = q.Where(r => r.TimeSheet.CreatedByUserId == vm.SubmittedUserById.Value); } if (vm.State.HasValue) { q = q.Where(r => r.TimeSheet.State == vm.State.Value); } if (vm.StartDate.HasValue) { q = q.Where(r => r.TimeSheet.Date >= vm.StartDate.Value); } if (vm.EndDate.HasValue) { q = q.Where(r => r.TimeSheet.Date <= vm.EndDate.Value); } if (PermissionChecker.CheckPermission(WebUser.Permissions, 550)) { var user = _userRepository.GetAllBy(u => u.Id != 1, "Person").ToList(); var usersListIds = user.Select(u => u.Id).ToList(); q = q.Where(r => usersListIds.Contains(r.TimeSheet.CreatedByUserId)); } else { var userListIds = userList.Select(u => u.Id).ToList(); q = q.Where(r => userListIds.Contains(r.TimeSheet.CreatedByUserId)); } q = q.OrderByDescending(d => d.CreatedOn); return(q); }; var timeSheets = _timeSheetLineItemRepository.Search(timeSheetLineItemFilter); return(ExportAsCSV(timeSheets)); }
public JsonResult MyTeam(TimeSheetSearchViewModel vm) { // Get only mine and my reportees var myReportees = _userRepository.GetAllBy(u => u.ReportingPersonId == WebUser.Id && u.EmployeeStatus != EmployeeStatus.Ex).Select(u => u.Id).ToList(); var userList = _userRepository.GetAllBy(u => myReportees.Contains(u.Id), "Person").ToList(); Func <IQueryable <TimeSheetLineItem>, IQueryable <TimeSheetLineItem> > timeSheetFilter = q => { q = q.Include("TimeSheet.CreatedByUser.Person").Include("Project").Include("Task"); if (vm.SubmittedUserById.HasValue) { q = q.Where(r => r.TimeSheet.CreatedByUserId == vm.SubmittedUserById.Value); } if (vm.State.HasValue) { q = q.Where(r => r.TimeSheet.State == vm.State.Value); } if (vm.StartDate.HasValue) { q = q.Where(r => r.TimeSheet.Date >= vm.StartDate.Value); } if (vm.EndDate.HasValue) { q = q.Where(r => r.TimeSheet.Date <= vm.EndDate.Value); } var userListIds = userList.Select(u => u.Id).ToList(); q = q.Where(r => userListIds.Contains(r.TimeSheet.CreatedByUserId)); q = q.OrderByDescending(d => d.CreatedOn); return(q); }; var timeSheets = _timeSheetLineItemRepository.Search(timeSheetFilter); var projected = timeSheets.Select(t => new ApiTimesheetLineItemModel(t)).ToList(); return(Json(projected)); }
public ActionResult MyTeam(TimeSheetSearchViewModel vm) { // Get only mine and my reportees var loginEmployee = _employeeRepository.GetBy(r => r.UserId == WebUser.Id); var myReportees = _employeeRepository.GetAllBy(u => u.ReportingPersonId == loginEmployee.Id && u.EmployeeStatus != EmployeeStatus.Ex).Select(u => u.UserId).ToList(); var userList = _userRepository.GetAllBy(u => myReportees.Contains(u.Id) || u.Id == WebUser.Id, "Person").ToList(); ViewBag.SubmittedUserById = new SelectList(userList, "Id", "Person.Name", vm.SubmittedUserById); var myProjects = _projectMemberRepository.GetAllBy(m => m.EmployeeId == loginEmployee.Id && m.MemberStatus == MemberStatus.Active, "Project").Select(m => m.Project).ToList(); var getOnlyOpenProjects = myProjects.Where(p => !(p.Status == ProjectStatus.Cancelled || p.Status == ProjectStatus.Closed)).OrderBy(o => o.Title).ToList(); ViewBag.ProjectId = new SelectList(getOnlyOpenProjects, "Id", "Title", vm.ProjectId); if (WebUser.IsAdmin || PermissionChecker.CheckPermission(WebUser.Permissions, 210)) { ViewBag.SubmittedUserById = new SelectList(_userRepository.GetAllBy(u => u.Id != 1, "Person").ToList().OrderBy(p => p.Person.Name), "Id", "Person.Name", vm.SubmittedUserById); } Func <IQueryable <TimeSheet>, IQueryable <TimeSheet> > timeSheetFilter = q => { q = q.Include("CreatedByUser.Person"); if (vm.SubmittedUserById.HasValue) { q = q.Where(r => r.CreatedByUserId == vm.SubmittedUserById.Value); } if (vm.State.HasValue) { q = q.Where(r => r.State == vm.State.Value); } if (vm.StartDate.HasValue) { q = q.Where(r => r.Date >= vm.StartDate.Value); } else { if (!vm.IsPostBack) { if (DateTime.Today.DayOfWeek == DayOfWeek.Monday) { vm.StartDate = DateTime.Today; q = q.Where(r => r.Date >= vm.StartDate.Value); } else { var monday = DateTime.Today.Previous(DayOfWeek.Monday); vm.StartDate = monday; q = q.Where(r => r.Date >= vm.StartDate.Value); } } } if (vm.EndDate.HasValue) { q = q.Where(r => r.Date <= vm.EndDate.Value); } else { if (!vm.IsPostBack) { if (DateTime.Today.DayOfWeek == DayOfWeek.Friday) { vm.EndDate = DateTime.Today; q = q.Where(r => r.Date <= vm.EndDate.Value); } else { var friday = DateTime.Today.Next(DayOfWeek.Friday); vm.EndDate = friday; q = q.Where(r => r.Date <= vm.EndDate.Value); vm.IsPostBack = true; } } } if (WebUser.IsAdmin || PermissionChecker.CheckPermission(WebUser.Permissions, 210)) { var user = _userRepository.GetAllBy(u => u.Id != 1, "Person").ToList(); var usersListIds = user.Select(u => u.Id).ToList(); q = q.Where(r => usersListIds.Contains(r.CreatedByUserId)); } else { var userListIds = userList.Select(u => u.Id).ToList(); q = q.Where(r => userListIds.Contains(r.CreatedByUserId)); } q = q.OrderByDescending(d => d.CreatedOn); return(q); }; vm.TimeSheets = _timeSheetRepository.Search(timeSheetFilter).ToList().Select(u => new TimeSheetViewModel(u, WebUser)).ToList(); return(vm.IsCalendarMode ? View("MyTeamCalendar", vm) : View(vm)); }
public ActionResult Index(TimeSheetSearchViewModel vm) { vm.SubmittedUserById = WebUser.Id; var employee = _employeeRepository.GetBy(u => u.UserId == WebUser.Id); vm.HasTeam = _employeeRepository.Any(u => u.ReportingPersonId == employee.Id); Func <IQueryable <TimeSheet>, IQueryable <TimeSheet> > timeSheetFilter = q => { q = q.Where(r => r.CreatedByUserId == WebUser.Id); if (vm.State.HasValue) { q = q.Where(r => r.State == vm.State.Value); } if (vm.StartDate.HasValue) { q = q.Where(r => r.Date >= vm.StartDate.Value); } else { if (!vm.IsPostBack) { if (DateTime.Today.DayOfWeek == DayOfWeek.Monday) { vm.StartDate = DateTime.Today; q = q.Where(r => r.Date >= vm.StartDate.Value); } else { var monday = DateTime.Today.Previous(DayOfWeek.Monday); vm.StartDate = monday; q = q.Where(r => r.Date >= vm.StartDate.Value); } } } if (vm.EndDate.HasValue) { q = q.Where(r => r.Date <= vm.EndDate.Value); } else { if (!vm.IsPostBack) { if (DateTime.Today.DayOfWeek == DayOfWeek.Friday) { vm.EndDate = DateTime.Today; q = q.Where(r => r.Date <= vm.EndDate.Value); } else { var friday = DateTime.Today.Next(DayOfWeek.Friday); vm.EndDate = friday; q = q.Where(r => r.Date <= vm.EndDate.Value); vm.IsPostBack = true; } } } q = q.OrderByDescending(d => d.Date); return(q); }; vm.TimeSheets = _timeSheetRepository.Search(timeSheetFilter).ToList().Select(u => new TimeSheetViewModel(u, WebUser)).ToList(); var thisMonday = DateTime.Today.Previous(DayOfWeek.Monday); var thisFriday = DateTime.Today.Next(DayOfWeek.Friday); if (DateTime.Today.DayOfWeek == DayOfWeek.Friday) { thisMonday = DateTime.Today; } if (DateTime.Today.DayOfWeek == DayOfWeek.Friday) { thisFriday = DateTime.Today; } var totalHoursInTimeSheet = _timeSheetRepository.GetAllBy(r => r.CreatedByUserId == WebUser.Id && r.Date >= thisMonday && r.Date <= thisFriday).ToList().Sum(r => r.TotalHours); ViewBag.TimeSheetHours = totalHoursInTimeSheet * 100 / 40; return(View(vm)); }
public FileContentResult EffortByProjectCSV(TimeSheetSearchViewModel vm) { Func <IQueryable <TimeSheetLineItem>, IQueryable <TimeSheetLineItem> > timeSheetLineItemFilter = q => { q = q.Include("TimeSheet").Include("Project"); if (vm.SubmittedUserById.HasValue) { q = q.Where(r => r.TimeSheet.CreatedByUserId == vm.SubmittedUserById.Value); } if (vm.State.HasValue) { q = q.Where(r => r.TimeSheet.State == vm.State.Value); } if (vm.StartDate.HasValue) { q = q.Where(r => r.TimeSheet.Date >= vm.StartDate.Value); } if (vm.EndDate.HasValue) { q = q.Where(r => r.TimeSheet.Date <= vm.EndDate.Value); } if (vm.TeamMode) { var teamMembers = new List <int>(); if (WebUser.IsAdmin || PermissionChecker.CheckPermission(WebUser.Permissions, 210)) { teamMembers.AddRange(_userRepository.GetAll().Select(u => u.Id).ToList()); } else { var loginEmployee = _employeeRepository.GetBy(r => r.UserId == WebUser.Id); var myReportees = _employeeRepository.GetAllBy(u => u.ReportingPersonId == loginEmployee.Id && u.EmployeeStatus != EmployeeStatus.Ex).Select(u => u.UserId).ToList(); var userList = _userRepository.GetAllBy(u => myReportees.Contains(u.Id) || u.Id == WebUser.Id, "Person").Select(u => u.Id).ToList(); teamMembers.AddRange(userList); } q = q.Where(r => teamMembers.Contains(r.TimeSheet.CreatedByUserId)); } return(q); }; var csv = new StringBuilder(); var employeesByLocation = _timeSheetLineItemRepository.Search(timeSheetLineItemFilter).GroupBy(l => l.Project.Title) .Select(x => new { x.Key, Value = x.Sum(i => i.Effort) }) .ToList(); var keys = string.Join(",", employeesByLocation.Select(x => x.Key).ToArray()); csv.AppendLine(keys); var values = string.Join(",", employeesByLocation.Select(x => x.Value).ToArray()); csv.AppendLine(values); return(File(new UTF8Encoding().GetBytes(csv.ToString()), "text/csv", "EmployeesByLocationCSV.csv")); }
public FileContentResult EffortByBillableProjectsCSV(TimeSheetSearchViewModel vm) { Func <IQueryable <TimeSheetLineItem>, IQueryable <TimeSheetLineItem> > timeSheetLineItemFilter = q => { q = q.Include("TimeSheet.CreatedByUser"); if (vm.SubmittedUserById.HasValue) { q = q.Where(r => r.TimeSheet.CreatedByUserId == vm.SubmittedUserById.Value); } if (vm.State.HasValue) { q = q.Where(r => r.TimeSheet.State == vm.State.Value); } if (vm.StartDate.HasValue) { q = q.Where(r => r.TimeSheet.Date >= vm.StartDate.Value); } if (vm.EndDate.HasValue) { q = q.Where(r => r.TimeSheet.Date <= vm.EndDate.Value); } if (vm.ProjectId.HasValue) { q = q.Where(r => r.ProjectId == vm.ProjectId); } if (vm.TeamMode) { var teamMembers = new List <int>(); if (WebUser.IsAdmin || PermissionChecker.CheckPermission(WebUser.Permissions, 210)) { teamMembers.AddRange(_userRepository.GetAll().Select(u => u.Id).ToList()); } else { var loginEmployee = _employeeRepository.GetBy(r => r.UserId == WebUser.Id); var myReportees = _employeeRepository.GetAllBy(u => u.ReportingPersonId == loginEmployee.Id).Select(u => u.UserId).ToList(); var userList = _userRepository.GetAllBy(u => myReportees.Contains(u.Id) || u.Id == WebUser.Id, "Person").Select(u => u.Id).ToList(); teamMembers.AddRange(userList); } q = q.Where(r => teamMembers.Contains(r.TimeSheet.CreatedByUserId)); } return(q); }; var csv = new StringBuilder(); var billableByProjects = _timeSheetLineItemRepository.Search(timeSheetLineItemFilter).GroupBy(l => l.WorkType) .Select(x => new { x.Key, workType = (x.Key == 1 ? "Billable" : "Non-Billable"), Value = x.Sum(i => i.Effort) }) .ToList(); var keys = string.Join(",", billableByProjects.Select(x => x.workType).ToArray()); csv.AppendLine(keys); var values = string.Join(",", billableByProjects.Select(x => x.Value).ToArray()); csv.AppendLine(values); return(File(new UTF8Encoding().GetBytes(csv.ToString()), "text/csv", "BillableByProjectTypeCSV.csv")); // Bad, we are getting numbers. So I put the name instead //csv.AppendLine("Billable,Non-Billable"); //csv.AppendLine( "Billable,Non-Billable"); //var values = string.Join(",", billableByProjects.Select(x => x.Value).ToArray()); //csv.AppendLine(values); }