public bool Validate(BookingRequest bookingRequest) { IsValid = true; ValidationError = string.Empty; if (bookingRequest.BookFromUtc < DateTime.UtcNow) { IsValid = false; ValidationError = "Look..., I dont have time machine to go back and book it for you. You need to book room for future time only."; } else if (bookingRequest.BookToUtc.Subtract(bookingRequest.BookFromUtc).TotalMinutes < 5) { IsValid = false; ValidationError = "Hey, you should book room for 5 minutes at least"; } else if (bookingRequest.ExplicitBooking) { Room room = _roomRepository.Find(bookingRequest.RoomName); if (room == null) { IsValid = false; ValidationError = string.Format("Oh! I can't book it. There is no room with name <i>{0}</i>. Type <a {{aliceRequestAct}}>Show rooms</a> to show rooms.", bookingRequest.RoomName); } } return(IsValid); }
/* * 0 Cancel my booking on 12/1 from 12 of room 1 * 1 cancel my booking * 2 on * 3 12/1 * 4 from * 5 12 * 6 of * 7 room 1 */ private BookingRequest CreateCompleteRequest() { BookingRequest bookingRequest = new BookingRequest(); bookingRequest.RoomName = _parameters[7].Value; bookingRequest.BookFromUtc = GetTimeInUtc(_parameters[3].Value, _parameters[5].Value); bookingRequest.BookedBy = _userProfile.UserName; return(bookingRequest); }
/* * 0 book am from 1 - 2 * 1 book * 2 am * 3 from * 4 1 * 5 - * 6 2 */ private BookingRequest CreateBasicRequest() { BookingRequest bookingRequest = new BookingRequest(); bookingRequest.RoomName = _parameters[2].Value; bookingRequest.BookFromUtc = GetTimeInUtc(DateTime.Now.Date, _parameters[4].Value); bookingRequest.BookToUtc = GetTimeInUtc(DateTime.Now.Date, _parameters[6].Value); bookingRequest.BookedBy = _userProfile.UserName; return(bookingRequest); }
public BookingRequest Clone() { BookingRequest request = new BookingRequest { BookedBy = BookedBy, BookedFor = BookedFor, BookFromUtc = BookFromUtc, BookToUtc = BookToUtc, RoomName = RoomName }; return(request); }
public Booking Book(BookingRequest bookingRequest) { IList <Booking> bookings = List(); BookingRequest requestToAdd = PrepareBookingRequest(bookings, bookingRequest); Booking booking = requestToAdd.ToBooking(); bookings.Add(booking); Save(bookings); return(booking); }
public BookingRequest Build() { BookingRequest bookingRequest = null; switch (_parameters.Count) { case 8: bookingRequest = CreateCompleteRequest(); break; default: break; } return(bookingRequest); }
public Booking Cancel(BookingRequest request) { List <Booking> bookings = List(); Booking booking = bookings.Find( o => o.RoomName.Equals(request.RoomName, StringComparison.InvariantCultureIgnoreCase) && o.BookedFromUtc == request.BookFromUtc && o.BookedBy.Equals(request.BookedBy, StringComparison.InvariantCultureIgnoreCase) ); if (booking == null) { throw new Exception("Ooops! There is no such booking."); } bookings.Remove(booking); Save(bookings); return(booking); }
private BookingRequest PrepareBookingRequest(IList <Booking> bookings, BookingRequest bookingRequest) { BookingRequest resultingRequest = bookingRequest.Clone(); resultingRequest.BookToUtc = resultingRequest.BookToUtc.AddMilliseconds(-1); RoomRepository roomRepository = new RoomRepository(_roomsDataFile); BookingRequestValidator validator = new BookingRequestValidator(roomRepository); if (!validator.Validate(resultingRequest)) { throw new Exception(validator.ValidationError); } if (resultingRequest.ExplicitBooking) { Booking presentBooking = GetBooking(bookings, bookingRequest.BookFromUtc, bookingRequest.BookToUtc, bookingRequest.RoomName); if (presentBooking != null) { if (presentBooking.BookedBy.Equals(resultingRequest.BookedBy, StringComparison.InvariantCultureIgnoreCase)) { throw new Exception("It was booked by you already."); } else { throw new Exception(string.Format("Oh boy! Its not availablle. <a {{aliceRequestAct}}>Show bookings</a>", presentBooking.RoomName)); } } } else { Room room = GetAnyAvailableRoom(bookings, resultingRequest.BookFromUtc, resultingRequest.BookToUtc); if (room == null) { throw new Exception("Oh boy! Hatter left no room for you."); } resultingRequest.RoomName = room.Name; } return(resultingRequest); }
public BookingRequest Build() { BookingRequest bookingRequest = null; switch (_parameters.Count) { case 7: bookingRequest = CreateBasicRequest(); break; case 9: bookingRequest = CreateRequestWithBookie(); break; case 11: bookingRequest = CreateCompleteRequest(); break; default: break; } return(bookingRequest); }