コード例 #1
0
        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);
        }
コード例 #2
0
        /*
         * 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);
        }
コード例 #3
0
        /*
         * 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);
        }
コード例 #4
0
ファイル: BookingRequest.cs プロジェクト: vinoddanekar/Alice
        public BookingRequest Clone()
        {
            BookingRequest request = new BookingRequest
            {
                BookedBy    = BookedBy,
                BookedFor   = BookedFor,
                BookFromUtc = BookFromUtc,
                BookToUtc   = BookToUtc,
                RoomName    = RoomName
            };

            return(request);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        public BookingRequest Build()
        {
            BookingRequest bookingRequest = null;

            switch (_parameters.Count)
            {
            case 8:
                bookingRequest = CreateCompleteRequest();
                break;

            default:
                break;
            }

            return(bookingRequest);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }