예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
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);
        }