public ActionResult GetTimesheetThisweekByGroup(string groupId, int year = 0, int week = 0)
        {
            // 计算FirstWeek周期
            var      yearFirstDay   = new DateTime(DateTime.Now.Year, 1, 1);
            var      firstDayofWeek = (int)yearFirstDay.DayOfWeek;
            DateTime weekFirstDay   = DateTime.Now;
            DateTime weekLastDay    = DateTime.Now;

            weekFirstDay = yearFirstDay.AddDays(-(firstDayofWeek == 0 ? 6 : firstDayofWeek - 1));
            var firstThursday = weekFirstDay.AddDays(3);

            if (yearFirstDay >= firstThursday)
            {
                weekFirstDay = weekFirstDay.AddDays(7);
            }

            var thisMonday = weekFirstDay.AddDays((week - 1) * 7);
            var nextMonday = thisMonday.AddDays(7);

            var timeEntries = _timeEntryService.GetTimeEntriesByGroupAndDuration(groupId, thisMonday, nextMonday);

            // 拿到所有的timeEntry后,根据每个人,组成当前week的数据
            var userTimeEntriesByUser = timeEntries.GroupBy(a => a.UserId);

            var usersRepo = _employeeService.Repository;
            var users     = string.IsNullOrEmpty(groupId) ?
                            usersRepo.SqlQuery(
                $"select * from employee E where exists(select 1 from usergroup UG where UG.UserId = E.Gid) ")
:
                            usersRepo.SqlQuery(
                $"select * from employee E where exists(select 1 from usergroup UG where UG.GroupId='{groupId}' and UG.UserId = E.Gid)");

            var timesheetByWeekViews = new List <TimesheetByWeekView>();

            // 把上面整理好的每个人每天的信息,整理到按周几放到的TimesheetByWeekView里。
            foreach (var ud in userTimeEntriesByUser)
            {
                var user = users.FirstOrDefault(a => a.Gid == ud.Key);
                var tv   = new TimesheetByWeekView()
                {
                    UserId       = ud.Key,
                    EmployeeName = user == null ? "" : user.Name,
                };

                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);
            }

            // 添加其他没填的人
            foreach (var user in users)
            {
                var timesheetByWeekView = timesheetByWeekViews.FirstOrDefault(a => a.UserId == user.Gid);
                if (timesheetByWeekView == null)
                {
                    timesheetByWeekView = new TimesheetByWeekView()
                    {
                        UserId = user.Gid
                    };

                    timesheetByWeekViews.Add(timesheetByWeekView);
                }

                timesheetByWeekView.EmployeeName = user.Name;
            }
            GridRequest req = new GridRequest(Request);

            var result = new { total = timesheetByWeekViews.Count, rows = timesheetByWeekViews };

            return(Json(result, JsonRequestBehavior.AllowGet));

            //return GetPageResult(timesheetByWeekViews, req);
        }
예제 #2
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);
        }