//Används endast i AddBooking public bool CheckAvailability(string bookingDate, LaundryTime laundryTime) { try { List <BookingList> list = con.BookingList.Where(r => r.bookedDate == bookingDate && r.bookedLaundryTime == laundryTime.bookedLaundryTime).ToList(); if (list.Count == 0) { return(true); } return(false); } catch (InvalidOperationException) { throw new DatabaseException("Databasfel, kontakta systemadminstratör"); } }
//Används endast i AddBooking, utför bokningen public void AddBookingMethod(Apartment apartment, string bookingDate, LaundryTime laundryTime) { BookingList newBooking = new BookingList(); newBooking.Apartment = apartment; newBooking.bookedDate = bookingDate; newBooking.LaundryTime = laundryTime; try { con.BookingList.Add(newBooking); con.SaveChanges(); } catch (InvalidOperationException) { con.BookingList.Remove(newBooking); throw new DatabaseException("Databasfel, kontakta systemadminstratör!"); } }
//Bokningsgenomförande (kontroll av regler), själva bokningen sker i metoden AddBookingMethod public string AddBooking(Apartment apartment, string bookingDate, string laundryTimeString) { string message = ""; bool hasBooking = false; LaundryTime laundryTime = new LaundryTime(); try { laundryTime = con.LaundryTime.First(r => r.bookedLaundryTime == laundryTimeString); //Hämta info från databasen DateTime newBooking = DateTime.ParseExact(bookingDate + " " + laundryTime.bookedLaundryTime + "", "dd-MM-yyyy HH:mm", null); List <BookingList> oldList = con.BookingList.Where(r => r.Apartment.apartmentNr == apartment.apartmentNr).ToList(); //1 - finns det en existerande bokning if (oldList.Count() != 0) { var oldDate = oldList[0]; DateTime oldBooking = DateTime.ParseExact(oldDate.bookedDate + " " + oldDate.bookedLaundryTime + "", "dd-MM-yyyy HH:mm", null); //1.1 Om bokningen har passerat dagens datum = radera if (oldBooking < DateTime.Now) { RemoveBooking(apartment.apartmentNr); } //1.2 Om bokningen fortfarande är aktiv, alltså inte passerat dagens datum else { hasBooking = true; } } //2 Meddalande vid fel if (hasBooking) { message = "Meddelande: Bokningen kunde ej genomföras, lägenheten har redan en aktiv bokning!"; } if (!CheckAvailability(bookingDate, laundryTime)) { message = "Meddelande: Bokningen kunde ej genomföras, passet är redan bokat"; } if (newBooking < DateTime.Now) { message = "Meddelande: Bokningen kunde ej genomföras, tiden för passet har passerat"; } //2.1 Bokar ny bokning if (newBooking > DateTime.Now && !hasBooking && CheckAvailability(bookingDate, laundryTime)) { AddBookingMethod(apartment, bookingDate, laundryTime); message = "Meddelande: Bokningen genomförd!"; } return(message); } catch (InvalidOperationException) { throw new DatabaseException("Databasfel, kontakta systemadmistratör"); } }