示例#1
0
        public List <TimesheetByWeekView> GetTimeEntriesByEmployeeGroupByProject(string employeeId, DateTime startDate, DateTime endDate)
        {
            var timeEntries           = Repository.Entities.Where(a => a.IsDeleted != true && a.Date >= startDate && a.Date < endDate && a.UserId == employeeId).ToList();
            var userTimeEntriesByUser = timeEntries.GroupBy(a => new { a.ProjectId, a.TaskId });

            var projects = _projectService.GetAllProjects();
            var tasks    = _projectTaskService.GetAllProjectTasks();

            var timesheetByWeekViews = new List <TimesheetByWeekView>();

            // 把上面整理好的每个人每天的信息,整理到按周几放到的TimesheetByWeekView里。
            foreach (var ud in userTimeEntriesByUser)
            {
                var project = projects.FirstOrDefault(a => a.Gid == ud.Key.ProjectId);
                var task    = tasks.FirstOrDefault(a => a.Gid == ud.Key.TaskId);
                var tv      = new TimesheetByWeekView()
                {
                    ProjectName = project == null ? "N/A Project" : project.Name,
                    TaskName    = task == null ? "/-" : " / " + task.Name,
                    ProjectGid  = ud.Key.ProjectId,
                    TaskGid     = ud.Key.TaskId
                };

                foreach (var udd in ud.GroupBy(a => a.Date))
                {
                    var totalHoursByDate = udd.Sum(a => a.TotalHours);

                    var weekOfDay = udd.Key.DayOfWeek;
                    switch (weekOfDay)
                    {
                    case DayOfWeek.Monday:
                        tv.MondayTotalHours = totalHoursByDate;
                        break;

                    case DayOfWeek.Tuesday:
                        tv.TuesdayTotalHours = totalHoursByDate;
                        break;

                    case DayOfWeek.Wednesday:
                        tv.WednesdayTotalHours = totalHoursByDate;
                        break;

                    case DayOfWeek.Thursday:
                        tv.ThursdayTotalHours = totalHoursByDate;
                        break;

                    case DayOfWeek.Friday:
                        tv.FridayTotalHours = totalHoursByDate;
                        break;

                    case DayOfWeek.Saturday:
                        tv.SaturdayTotalHours = totalHoursByDate;
                        break;

                    case DayOfWeek.Sunday:
                        tv.SundayTotalHours = totalHoursByDate;
                        break;
                    }
                }
                timesheetByWeekViews.Add(tv);
            }

            return(timesheetByWeekViews);
        }