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