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"));
        }
Exemple #3
0
        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));
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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));
        }
Exemple #7
0
        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));
        }
Exemple #8
0
        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));
        }
Exemple #9
0
        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"));
        }
Exemple #10
0
        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);
        }