private decimal GetAbsenceTimeInHours(DateTime startDate, DateTime endDate) { IDictionary <int, int> weekDaysWorkingMinutes = appSettingHelper.GetDictionaryAppSetting <int, int>(Constants.AppSetting.DaysWorkingMinutes); decimal totalMinutes = CalendarHelper.GetDatesRange(startDate, endDate).Sum(day => weekDaysWorkingMinutes[day.GetWeekDayNumber()]); return(totalMinutes / Constants.Common.MinutesInOneHour); }
private List <MemberTimeView> GetMemberTimeView(List <IMemberModel> memberList, Guid managementDepartmentId, int currentYear, int currentWeek) { List <Guid> memberIdList = memberList.Select(x => x.MemberId).ToList(); IDictionary <Guid, IDictionary <int, int> > weekDaysEstimationsForWeek = timeSheduleService.GetMemberEstimationsForWeek(memberIdList, managementDepartmentId, currentYear, currentWeek); List <MemberTimeView> results = new List <MemberTimeView>(); IDictionary <int, int> weekDaysWorkingHours = appSettingHelper.GetDictionaryAppSetting <int, int>(Constants.AppSetting.DaysWorkingMinutes); IDictionary <Guid, IDictionary <int, bool> > weekDaysMembersAbsences = absenceInfoService.GetWeekAbsencesForMembers(memberIdList, currentYear, currentWeek); foreach (var member in memberList) { IDictionary <int, bool> weekDaysMemberAbsences = weekDaysMembersAbsences[member.MemberId]; IDictionary <int, int> weekDaysWorkingHoursExeptAbsences = weekDaysWorkingHours.ToDictionary(pair => pair.Key, pair => weekDaysMemberAbsences[pair.Key] ? 0 : pair.Value); IEnumerable <TimeViewModel> timeViewForWeek = TimeViewsForWeek(weekDaysEstimationsForWeek[member.MemberId], weekDaysWorkingHoursExeptAbsences); results.Add(new MemberTimeView { MemberModel = member, WeekTimeView = timeViewForWeek, WeekTotal = timeViewForWeek.Aggregate(new TimeViewModel(), (total, timeView) => total + timeView) } ); } return(results); }
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); }