Exemple #1
0
        public IEnumerable <TimeBookingDayItem> GetBookingItemsForMonth(DateTime dateTime, int refUserId)
        {
            List <TimeBooking> bookingsForMonth = TimeBookings.GetDataForMonth(dateTime, refUserId);

            var timeBookingDayItems = CreateDayItems(bookingsForMonth).ToList();
            var startDate           = new DateTime(dateTime.Year, dateTime.Month, 1);

            while (startDate.Month == dateTime.Month && startDate.Date <= DateTime.Now.Date)
            {
                if (!timeBookingDayItems.Any(x => x.BookingDate.Date == startDate.Date))
                {
                    TimeBookingDayItem timeBookingDayItem = new TimeBookingDayItem();
                    timeBookingDayItem.BookingDate     = startDate;
                    timeBookingDayItem.WorkingHours    = new TimeSpan(0);
                    timeBookingDayItem.BreaktimeHours  = new TimeSpan(0);
                    timeBookingDayItem.ObligatoryHours = GetObgligaryHoursForDay(startDate, refUserId);

                    var balanceForDay = TimeBalances.GetByDateAndRefUserId(startDate, refUserId);

                    if (balanceForDay != null)
                    {
                        timeBookingDayItem.Balance = balanceForDay.Balance;
                    }
                    else
                    {
                        var lastBalance = TimeBalances.GetLastByDateAndRefUserId(startDate, refUserId);
                        if (lastBalance != null)
                        {
                            timeBookingDayItem.Balance = lastBalance.Balance;
                        }
                        else
                        {
                            timeBookingDayItem.Balance = 0;
                        }
                    }

                    timeBookingDayItems.Add(timeBookingDayItem);
                }

                startDate = startDate.AddDays(1);
            }

            return(timeBookingDayItems.OrderBy(x => x.BookingDate));
        }
Exemple #2
0
        private TimeBookingDayItem CorrectWorkingTime(TimeSpan sumWorkingTime, TimeSpan sumBreakTime)
        {
            TimeBookingDayItem timeBookingDayItem = new TimeBookingDayItem();

            if (sumWorkingTime.TotalHours >= 9.25 && sumBreakTime.TotalHours >= 0.75)
            {
                timeBookingDayItem.WorkingHours   = sumWorkingTime;
                timeBookingDayItem.BreaktimeHours = sumBreakTime;
                return(timeBookingDayItem);
            }
            else if (sumWorkingTime.TotalHours >= 9.25 && sumBreakTime.TotalHours < 0.75)
            {
                var breakDifference = TimeSpan.FromHours(0.75).Subtract(timeBookingDayItem.BreaktimeHours);
                timeBookingDayItem.WorkingHours   = sumWorkingTime.Subtract(breakDifference);
                timeBookingDayItem.BreaktimeHours = TimeSpan.FromHours(0.75);
                return(timeBookingDayItem);
            }
            else if (sumWorkingTime.TotalHours >= 9)
            {
                var differenceWorkingTime = sumWorkingTime - TimeSpan.FromHours(9);
                if (sumBreakTime >= TimeSpan.FromHours(0.5) + differenceWorkingTime)
                {
                    timeBookingDayItem.WorkingHours   = sumWorkingTime;
                    timeBookingDayItem.BreaktimeHours = sumBreakTime;
                }
                else
                {
                    var breakDifference = (TimeSpan.FromHours(0.5) + differenceWorkingTime).Subtract(timeBookingDayItem.BreaktimeHours);
                    timeBookingDayItem.WorkingHours   = sumWorkingTime - differenceWorkingTime;
                    timeBookingDayItem.BreaktimeHours = TimeSpan.FromHours(0.5) + breakDifference;
                }
                return(timeBookingDayItem);
            }
            else if (sumWorkingTime.TotalHours >= 6.5 && sumBreakTime.TotalHours >= 0.5)
            {
                timeBookingDayItem.WorkingHours   = sumWorkingTime;
                timeBookingDayItem.BreaktimeHours = sumBreakTime;
                return(timeBookingDayItem);
            }
            else if (sumWorkingTime.TotalHours >= 6.5 && sumBreakTime.TotalHours < 0.5)
            {
                var breakDifference = TimeSpan.FromHours(0.5).Subtract(timeBookingDayItem.BreaktimeHours);
                timeBookingDayItem.WorkingHours   = sumWorkingTime.Subtract(breakDifference);
                timeBookingDayItem.BreaktimeHours = TimeSpan.FromHours(0.5);
                return(timeBookingDayItem);
            }
            else if (sumWorkingTime.TotalHours >= 6)
            {
                var differenceWorkingTime = sumWorkingTime - TimeSpan.FromHours(6);
                if (sumBreakTime >= differenceWorkingTime)
                {
                    timeBookingDayItem.WorkingHours   = sumWorkingTime;
                    timeBookingDayItem.BreaktimeHours = sumBreakTime;
                }
                else
                {
                    var breakDifference = differenceWorkingTime.Subtract(timeBookingDayItem.BreaktimeHours);
                    timeBookingDayItem.WorkingHours   = sumWorkingTime - differenceWorkingTime;
                    timeBookingDayItem.BreaktimeHours = breakDifference;
                }
                return(timeBookingDayItem);
            }
            else
            {
                timeBookingDayItem.WorkingHours   = sumWorkingTime;
                timeBookingDayItem.BreaktimeHours = sumBreakTime;
                return(timeBookingDayItem);
            }
        }
Exemple #3
0
        private TimeBookingDayItem CreateDayItem(IEnumerable <TimeBooking> timeBookings, TimeObligatoryHour timeObligatoryHour)
        {
            if (timeBookings == null || timeObligatoryHour == null)
            {
                return(null);
            }

            List <TimeBooking> timeBookingList = timeBookings.ToList();

            if (!timeBookings.Any(x => x.TimeBookingType == TimeBookingType.Logout))
            {
                return(null);
            }

            DateTime login          = DateTime.MinValue;
            DateTime logout         = DateTime.MinValue;
            DateTime startBreak     = DateTime.MinValue;
            DateTime endBreak       = DateTime.MinValue;
            TimeSpan sumWorkingTime = new TimeSpan(0);
            TimeSpan sumBreakTime   = new TimeSpan(0);

            for (int i = 0; i < timeBookingList.Count; i++)
            {
                switch (timeBookingList[i].TimeBookingType)
                {
                case TimeBookingType.Login:
                    login = timeBookingList[i].BookingTime;
                    break;

                case TimeBookingType.Logout:
                    logout = timeBookingList[i].BookingTime;
                    if (logout > login)
                    {
                        sumWorkingTime += logout.Subtract(login);
                    }
                    break;

                case TimeBookingType.StartBreak:
                    startBreak = timeBookingList[i].BookingTime;
                    break;

                case TimeBookingType.EndBreak:
                    endBreak = timeBookingList[i].BookingTime;
                    if (logout > login)
                    {
                        sumBreakTime += logout.Subtract(login);
                    }
                    break;
                }
            }

            TimeBookingDayItem timeBookingDayItem = CorrectWorkingTime(sumWorkingTime, sumBreakTime);

            timeBookingDayItem.BookingDate     = timeBookingList[0].BookingTime.Date;
            timeBookingDayItem.ObligatoryHours = timeObligatoryHour.HoursPerDay;

            var timeBalance = TimeBalances.GetByDateAndRefUserId(timeBookingList[0].BookingTime, timeBookingList[0].RefUserId);

            if (timeBalance != null)
            {
                timeBookingDayItem.Balance = timeBalance.Balance;
            }

            return(timeBookingDayItem);
        }