// Method used to update the lists inside each directories public void updateDirectories() { // Updating timeSlots of each reservations List <TimeSlot> timeSlotList = TimeSlotMapper.getInstance().getAllTimeSlot().Values.ToList(); timeSlotList.Sort((x, y) => x.hour.CompareTo(y.hour)); for (int i = 0; i < ReservationMapper.getInstance().getListOfReservations().Count; i++) { foreach (TimeSlot timeSlot in timeSlotList) { if (ReservationMapper.getInstance().getListOfReservations()[i].reservationID == timeSlot.reservationID && !ReservationMapper.getInstance().getListOfReservations()[i].timeSlots.Contains(timeSlot)) { ReservationMapper.getInstance().getListOfReservations()[i].timeSlots.Add(timeSlot); } } } // Updating the waitList of each timeSlot for (int i = 0; i < TimeSlotMapper.getInstance().getListOfTimeSlots().Count; i++) { List <int> waitList = TimeSlotMapper.getInstance().getAllUsers(TimeSlotMapper.getInstance().getListOfTimeSlots()[i].timeSlotID); if (waitList != null) { for (int j = 0; j < waitList.Count; j++) { if (!TimeSlotMapper.getInstance().getListOfTimeSlots()[i].waitlist.Contains(waitList[j])) { TimeSlotMapper.getInstance().getListOfTimeSlots()[i].waitlist.Enqueue(waitList[j]); } } } } // Updating the reservations for each room for (int i = 0; i < RoomMapper.getInstance().getListOfRooms().Count; i++) { foreach (KeyValuePair <int, Reservation> reservation in ReservationMapper.getInstance().getAllReservation()) { if (reservation.Value.roomID == RoomMapper.getInstance().getListOfRooms()[i].roomID) { RoomMapper.getInstance().getListOfRooms()[i].roomReservations.Add(reservation.Value); } } } }
public List <Reservation> getAllReservations() { return(ReservationMapper.getInstance().getListOfReservations()); }
// Method to cancel a reservation public void cancelReservation(int reservationID) { // Loop through each timeslot for (int i = 0; i < TimeSlotMapper.getInstance().getListOfTimeSlots().Count; i++) { // For those who are belonging to the reservation to be cancelled: //if (directoryOfTimeSlots.timeSlotList[i].reservationID == reservationID) if (TimeSlotMapper.getInstance().getListOfTimeSlots()[i].reservationID == reservationID) //make a method in mappers that returns the respective directory lists { // If no one is waiting, delete it. if (TimeSlotMapper.getInstance().getListOfTimeSlots()[i].waitlist.Count == 0) { TimeSlotMapper.getInstance().delete(TimeSlotMapper.getInstance().getListOfTimeSlots()[i].timeSlotID); i--; TimeSlotMapper.getInstance().done(); } // Otherwise: // - Obtain the next in line, dequeue. // - Make a new reservation (done - reservation) // - Update the waitlists // - Update the timeslot from old reservation to the new one. (done - timeslot) else { //int userID = directoryOfTimeSlots.timeSlotList[i].waitlist.Dequeue(); for (int k = 0; k < TimeSlotMapper.getInstance().getListOfTimeSlots()[i].waitlist.Count; k++) { int userID = TimeSlotMapper.getInstance().getListOfTimeSlots()[i].waitlist.Dequeue(); if (weeklyConstraintCheck(userID, ReservationMapper.getInstance().getReservation(reservationID).date) && dailyConstraintCheck(userID, ReservationMapper.getInstance().getReservation(reservationID).date, TimeSlotMapper.getInstance().getListOfTimeSlots()[i].hour, TimeSlotMapper.getInstance().getListOfTimeSlots()[i].hour)) { Reservation res = ReservationMapper.getInstance().makeNew(userID, ReservationMapper.getInstance().getReservation(reservationID).roomID, "", ReservationMapper.getInstance().getReservation(reservationID).date); ReservationMapper.getInstance().done(); TimeSlotMapper.getInstance().setTimeSlot(TimeSlotMapper.getInstance().getListOfTimeSlots()[i].timeSlotID, res.reservationID, TimeSlotMapper.getInstance().getListOfTimeSlots()[i].waitlist); TimeSlotMapper.getInstance().done(); updateWaitList(userID, ReservationMapper.getInstance().getReservation(reservationID).date, TimeSlotMapper.getInstance().getListOfTimeSlots()[i].hour); break; } updateWaitList(userID, ReservationMapper.getInstance().getReservation(reservationID).date, TimeSlotMapper.getInstance().getListOfTimeSlots()[i].hour); k--; } } } } // Completely done with this reservation, delete it. ReservationMapper.getInstance().delete(reservationID); ReservationMapper.getInstance().done(); updateDirectories(); }
// Method to modify a reservation public void modifyReservation(int resID, int roomID, string desc, DateTime date, int firstHour, int lastHour) { Reservation resToModify = new Reservation(); for (int i = 0; i < ReservationMapper.getInstance().getListOfReservations().Count; i++) { if (resID == ReservationMapper.getInstance().getListOfReservations()[i].reservationID) { resToModify = ReservationMapper.getInstance().getListOfReservations()[i]; } } if (resToModify.date.Date != date.Date || resToModify.roomID != roomID) { for (int i = 0; i < resToModify.timeSlots.Count; i++) { if (resToModify.timeSlots[i].waitlist.Count == 0) { //If waitList for timeSlots is empty, delete from db TimeSlotMapper.getInstance().delete(resToModify.timeSlots[i].timeSlotID); for (int k = 0; k < ReservationMapper.getInstance().getListOfReservations().Count; k++) { if (ReservationMapper.getInstance().getListOfReservations()[k].reservationID == resToModify.reservationID) { ReservationMapper.getInstance().getListOfReservations()[k].timeSlots.Remove(resToModify.timeSlots[i]); } } i--; TimeSlotMapper.getInstance().done(); } else { for (int k = 0; k < TimeSlotMapper.getInstance().getListOfTimeSlots()[i].waitlist.Count; k++) { //Else give new reservation to the first person in waitlist int userID = resToModify.timeSlots[i].waitlist.Dequeue(); if (weeklyConstraintCheck(userID, date) && dailyConstraintCheck(userID, ReservationMapper.getInstance().getReservation(resID).date, resToModify.timeSlots[i].hour, resToModify.timeSlots[i].hour)) { Reservation res = ReservationMapper.getInstance().makeNew(userID, ReservationMapper.getInstance().getReservation(resID).roomID, "", ReservationMapper.getInstance().getReservation(resID).date); ReservationMapper.getInstance().done(); TimeSlotMapper.getInstance().setTimeSlot(resToModify.timeSlots[i].timeSlotID, res.reservationID, resToModify.timeSlots[i].waitlist); TimeSlotMapper.getInstance().done(); updateWaitList(userID, ReservationMapper.getInstance().getReservation(resID).date, resToModify.timeSlots[i].hour); break; } updateWaitList(userID, ReservationMapper.getInstance().getReservation(resID).date, resToModify.timeSlots[i].hour); } } } } //Remove timeSlots that are not in common with the new reservation (depending if they have waitlist or not) for (int i = 0; i < resToModify.timeSlots.Count; i++) { int hour = resToModify.timeSlots[i].hour; bool foundSlot = false; for (int j = firstHour; j <= lastHour; j++) { if (hour == j) { foundSlot = true; } } if (!foundSlot) { //If waitList for timeSlot exist, give to new user //Else delete timeSlot if (resToModify.timeSlots[i].waitlist.Count == 0) { //If waitList for timeSlots is empty, delete from db TimeSlotMapper.getInstance().delete(resToModify.timeSlots[i].timeSlotID); for (int k = 0; k < ReservationMapper.getInstance().getListOfReservations().Count; k++) { if (ReservationMapper.getInstance().getListOfReservations()[k].reservationID == resToModify.reservationID) { ReservationMapper.getInstance().getListOfReservations()[k].timeSlots.Remove(resToModify.timeSlots[i]); } } i--; TimeSlotMapper.getInstance().done(); } else { for (int k = 0; k < TimeSlotMapper.getInstance().getListOfTimeSlots()[i].waitlist.Count; k++) { //Else give new reservation to the first person in waitlist int userID = resToModify.timeSlots[i].waitlist.Dequeue(); if (weeklyConstraintCheck(userID, date) && dailyConstraintCheck(userID, ReservationMapper.getInstance().getReservation(resID).date, TimeSlotMapper.getInstance().getListOfTimeSlots()[i].hour, TimeSlotMapper.getInstance().getListOfTimeSlots()[i].hour)) { int myroomid = ReservationMapper.getInstance().getReservation(resID).roomID; DateTime mydate = ReservationMapper.getInstance().getReservation(resID).date; Reservation res = ReservationMapper.getInstance().makeNew(userID, myroomid, "", mydate); //Reservation res = directoryOfReservations.makeNewReservation(directoryOfReservations.getReservation(reservationID).roomID, userID, "", // directoryOfReservations.getReservation(reservationID).date); ReservationMapper.getInstance().done(); TimeSlotMapper.getInstance().setTimeSlot(resToModify.timeSlots[i].timeSlotID, res.reservationID, resToModify.timeSlots[i].waitlist); TimeSlotMapper.getInstance().done(); updateWaitList(userID, ReservationMapper.getInstance().getReservation(resID).date, resToModify.timeSlots[i].hour); break; } updateWaitList(userID, ReservationMapper.getInstance().getReservation(resID).date, resToModify.timeSlots[i].hour); k--; } } } } //Put on waitList if the new timeSlots are already taken, else create new ones List <int> hours = new List <int>(); for (int i = firstHour; i <= lastHour; i++) { hours.Add(i); } foreach (Reservation reservation in ReservationMapper.getInstance().getListOfReservations()) { if (reservation.date == date && reservation.roomID == roomID) { foreach (TimeSlot timeSlot in reservation.timeSlots) { for (int i = firstHour; i <= lastHour; i++) { if (timeSlot.hour == i) { if (!timeSlot.waitlist.Contains(resToModify.userID) && reservation.userID != resToModify.userID) { timeSlot.waitlist.Enqueue(resToModify.userID); TimeSlotMapper.getInstance().setTimeSlot(timeSlot.timeSlotID, timeSlot.reservationID, timeSlot.waitlist); } hours.Remove(i); } } } } } if (hours.Count > 0) { for (int i = 0; i < hours.Count; i++) { TimeSlotMapper.getInstance().makeNew(resToModify.reservationID, hours[i]); updateWaitList(resToModify.userID, resToModify.date, i); } } TimeSlotMapper.getInstance().done(); ReservationMapper.getInstance().modifyReservation(resToModify.reservationID, roomID, desc, date); ReservationMapper.getInstance().done(); updateDirectories(); }
public Reservation(ReservationMapper reservationMapper) { this.reservationMapper = reservationMapper; }
public ReservationCrud() { Mapper = new ReservationMapper(); Dao = SqlDao.GetInstance(); }