Example #1
0
        public IEnumerable <GroupMemberViewModel> GetGroupedMembers([FromBody] DateTime?timeViewDayScope)
        {
            var currentUser  = memberService.GetCurrentUser();
            var weekSchedule = settingHelper.GetDictionaryAppSetting <int, int>(Constants.AppSetting.DaysWorkingMinutes);

            var members = GetMembers(currentUser);
            var membersWithTimeViews = members.Map <IEnumerable <MemberModelWithTimeView> >();

            if (timeViewDayScope.HasValue)
            {
                IEnumerable <Guid> memberIds = members.Select(m => m.MemberId);
                var year = timeViewDayScope.Value.Year;
                var week = timeViewDayScope.Value.GetWeekNumber();
                var day  = timeViewDayScope.Value.GetWeekDayNumber();
                IDictionary <Guid, int>  membersEstimationsForDay = timeScheduleService.GetMembersEstimationsForDay(memberIds, currentUser.ActiveManagementDepartmentId.Value, year, week, day);
                IDictionary <Guid, bool> membersAbsencesForDay    = absenceInfoService.GetDayAbsencesForMembers(memberIds, year, week, day);

                foreach (var memberModel in membersWithTimeViews)
                {
                    memberModel.TimeView = new TimeViewModel()
                    {
                        IsAbsent         = membersAbsencesForDay [memberModel.MemberId],
                        ScheduledMinutes = membersEstimationsForDay[memberModel.MemberId],
                        WorkingMinutes   = weekSchedule[timeViewDayScope.Value.GetWeekDayNumber()]
                    };
                }
            }

            var result = new List <GroupMemberViewModel>();
            var groups = GetGroups(currentUser);

            foreach (var group in groups)
            {
                var model = group.Map <GroupMemberViewModel>();
                model.Members = membersWithTimeViews.Where(i => group.MemberIds.Contains(i.MemberId));
                result.Add(model);
            }

            result.Add(new GroupMemberViewModel
            {
                Id      = null,
                Members = membersWithTimeViews
            });

            return(result);
        }