public bool SaveTimeBooking(TimeBooking timeBooking) { if (!ValidateBooking(timeBooking)) { return(false); } TimeBookings.Insert(timeBooking); if (timeBooking.TimeBookingType == TimeBookingType.Logout) { SaveBalance(timeBooking); } var date = timeBooking.BookingTime.Date; var allBookings = TimeBookings.GetDataSinceDayForRefUserId(timeBooking.BookingTime, timeBooking.RefUserId); while (date.Date < DateTime.Now.Date) { var booking = allBookings.SingleOrDefault(x => x.BookingTime.Date == date.Date && x.TimeBookingType == TimeBookingType.Logout); if (booking != null) { SaveBalance(booking); } else { SaveBalanceWithoutBookings(date, timeBooking.RefUserId); } date = date.AddDays(1); } return(true); }
public List <TimeBookingType> GetAllowedActionsList(DateTime dateTime, int refUserId) { List <TimeBookingType> allowedActions = new List <TimeBookingType>(); List <TimeBooking> bookingsForSelectedDay = TimeBookings.GetDataForDay(dateTime, refUserId); if (bookingsForSelectedDay.Count > 0) { if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.Login) { allowedActions.Add(TimeBookingType.StartBreak); allowedActions.Add(TimeBookingType.Logout); } if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.StartBreak) { allowedActions.Add(TimeBookingType.EndBreak); } if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.EndBreak) { allowedActions.Add(TimeBookingType.StartBreak); allowedActions.Add(TimeBookingType.Logout); } if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.Logout) { allowedActions.Add(TimeBookingType.Login); } } else { allowedActions.Add(TimeBookingType.Login); } return(allowedActions); }
private void CreateNewBooking(TimeBookingType timeBookingType) { TimeBooking timeBooking = new TimeBooking(); timeBooking.BookingTime = DateTime.Now; timeBooking.TimeStamp = DateTime.Now; timeBooking.TimeBookingType = timeBookingType; timeBooking.RefUserId = Globals.ActiveUser.UserId; TimeBookings.Insert(timeBooking); Validate(); }
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)); }
public bool ValidateBooking(TimeBooking timeBooking) { if (timeBooking.RefUserId == 0) { return(false); } List <TimeBooking> bookingsForSelectedDay = TimeBookings.GetDataForDay(timeBooking.BookingTime, timeBooking.RefUserId); if (bookingsForSelectedDay?.Count > 0) { if (bookingsForSelectedDay.Last().TimeBookingType == timeBooking.TimeBookingType) { return(false); } if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.Login && (timeBooking.TimeBookingType != TimeBookingType.StartBreak && timeBooking.TimeBookingType != TimeBookingType.Logout)) { return(false); } if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.StartBreak && timeBooking.TimeBookingType != TimeBookingType.EndBreak) { return(false); } if (bookingsForSelectedDay.Last().TimeBookingType == TimeBookingType.EndBreak && (timeBooking.TimeBookingType != TimeBookingType.StartBreak && timeBooking.TimeBookingType != TimeBookingType.Logout)) { return(false); } } else { if (timeBooking.TimeBookingType != TimeBookingType.Login) { return(false); } } return(true); }
private void SaveBalance(TimeBooking timeBooking) { var bookings = TimeBookings.GetDataForDay(timeBooking.BookingTime, timeBooking.RefUserId); var hours = timeBooking.BookingTime - bookings.First().BookingTime; var obligatoryHours = TimeObligatoryHours.GetByRefUserId(timeBooking.RefUserId); if (obligatoryHours.Count > 0) { var day = obligatoryHours.SingleOrDefault(x => x.DayOfWeek == timeBooking.BookingTime.DayOfWeek); if (day != null) { var dayItem = CreateDayItem(bookings, day); var balanceValue = dayItem.WorkingHours.TotalHours - day.HoursPerDay; var lastItem = TimeBalances.GetLastByDateAndRefUserId(timeBooking.BookingTime, timeBooking.RefUserId); if (lastItem != null) { balanceValue += lastItem.Balance; } var existingItem = TimeBalances.GetByDateAndRefUserId(timeBooking.BookingTime, timeBooking.RefUserId); if (existingItem != null) { existingItem.Balance = balanceValue; TimeBalances.Update(existingItem); } else { TimeBalance timeBalance = new TimeBalance(timeBooking.RefUserId, timeBooking.BookingTime, balanceValue); TimeBalances.Insert(timeBalance); } } } }
private void LoadTimeBookingsForDay() { BookingsForSelectedDay = TimeBookings.GetDataForDay(bookingTime, RefUserId); }