示例#1
0
        private void ProcessBookingResponse(BookingResult response)
        {
            if (_ui?.CancellationToken.IsCancellationRequested == true)
            {
                CancelBooking().Forget();
                return;
            }

            if (response == null)
            {
                BookingErrorMessage = "Cannot get any response";
                return;
            }

            if (response.IsSuccessful)
            {
                StartTime           = DateTime.Now + response.Left;
                BookingErrorMessage = null;
                IsBooked            = response.IsSuccessful;

                if (!_updating)
                {
                    Update(UpdateMode.Lite, true, true).Forget();
                }
            }
            else
            {
                BookingErrorMessage = response.ErrorMessage;
                IsBooked            = false;
            }

            _ui?.OnUpdate(response);
        }
示例#2
0
        public async Task <IHttpActionResult> Solo(SoloBookingSource bookingSource)
        {
            try
            {
                Event evnt = await _eventRepository.GetActiveAsync();

                if (null == evnt)
                {
                    return(NotFound());
                }

                if (!evnt.HasOpened)
                {
                    _log.Warn("An attempt was made to create a solo booking before the event is open.");
                    return(BadRequest());
                }

                BookingResult result = await _bookingRepository.CreateSoloAsync(evnt, bookingSource);

                _log.Info("Created solo booking {0}.", result.Reference);

                await SendBookingCreatedMailAsync(evnt, bookingSource, result);

                return(Ok(result));
            }
            catch (Exception ex)
            {
                _log.Error(ex, "An unexpected exception occurred while creating a solo booking.");
                throw;
            }
        }
示例#3
0
        public async Task <IHttpActionResult> ToBooking(string c)
        {
            try
            {
                Event evnt = await _eventRepository.GetActiveAsync();

                if (null == evnt)
                {
                    return(NotFound());
                }
                if (evnt.IsLocked)
                {
                    return(BadRequest("The event is locked and can no longer accept bookings."));
                }

                Guid             candidateId = ParseGuid(c);
                BookingCandidate candidate;
                int placeInQueue;

                using (var db = DbUtil.Open())
                {
                    candidate = await _candidateRepository.FindByIdAsync(db, candidateId);

                    if (null == candidate)
                    {
                        return(NotFound());
                    }

                    placeInQueue = await _candidateRepository.FindPlaceInQueueAsync(db, candidateId);

                    if (0 == placeInQueue)
                    {
                        _log.Warn($"An attempt was made to create a booking for candidate ID = {candidateId} with no place in the queue.");
                        return(NotFound());
                    }
                }

                BookingResult result = await _bookingRepository.CreateFromCandidateAsync(evnt, candidate, placeInQueue);

                _log.Info("Created booking {0} from candidate {1} at position {2}.", result.Reference, candidate.Id, placeInQueue);

                await SendBookingCreatedMailAsync(evnt, candidate, result);

                return(Ok(result));
            }
            catch (BookingException)
            {
                // An attempt was made to create a second booking from the same candidate
                return(Conflict());
            }
            catch (FormatException)
            {
                return(BadRequest());
            }
            catch (Exception ex)
            {
                _log.Error(ex, "An unexpected exception occurred while creating a booking.");
                throw;
            }
        }
示例#4
0
        public ActionResult BookEventSuccess(BookingResult resultViewModel)
        {
            if (resultViewModel.SpecialRequests != null)
            {
                ViewBag.SpecialRequestLabel = "Special Request: ";
            }

            return(PartialView("BookEventSuccess", resultViewModel));
        }
示例#5
0
 async Task SendBookingCreatedMailAsync(Event evnt, SoloBookingSource source, BookingResult result)
 {
     try
     {
         using (var emailSender = new EmailSender())
             await emailSender.SendBookingCreatedMailAsync(evnt.Name, source.Email, result.Reference, result.Password);
     }
     catch (Exception ex)
     {
         _log.Error(ex, "Failed to send e-mail on created booking.");
     }
 }
 public BookingResult Booking(BookInfo bookInfo)
 {
     BookingResult result = new BookingResult();
     if (bookInfo==null)
     {
         result.isSucceed = false;
     }
     else
     {
         result.isSucceed = true;
     }
     return result;
 }
        public IActionResult Post([FromBody] BookingResult model)
        {
            if (ModelState.IsValid)
            {
                _repository.AddDoubleAppontment(model);

                if (_context.DoubleAppointments.LastOrDefault().Id > 0)
                {
                    return(Created($"api/DoubleBookingEntry/{model.SelectedAuthority.Name},", model));
                }
            }
            return(BadRequest(ModelState));
        }
示例#8
0
 public static RoomBookingDTO FromQueryResult(BookingResult booking)
 {
     return(new RoomBookingDTO
     {
         BookingId = booking.BookingId,
         DateOfFirstNight = booking.DateOfFirstNight,
         NumberOfNights = booking.NumberOfNights,
         NumberOfGuests = booking.NumberOfGuests,
         RoomType = booking.RoomType.ToString(),
         Amount = Convert.ToString(booking.Price, CultureInfo.InvariantCulture),
         AccountId = booking.AccountId
     });
 }
示例#9
0
        public void OnUpdate(BookingResult response)
        {
            if (response?.IsSuccessful != true)
            {
                return;
            }

            Car   = ServerEntry.SelectedCarEntry?.CarObject;
            Track = ServerEntry.Track;

            try {
                _ignoreSkinChange = true;
                Skin = ServerEntry.GetSelectedCarSkin();
            } finally {
                _ignoreSkinChange = false;
            }
        }
示例#10
0
        public ActionResult BookRestaurant(RestaurantBooking booking)
        {
            // RestaurantName & ID are passed hidden

            Restaurant restaurant    = foodRepository.GetRestaurant(booking.RestaurantId);
            Event      selectedevent = eventRepository.GetEvent(booking.SelectedEvent);

            if (ModelState.IsValid)
            {
                if (selectedevent.CurrentTickets != 0 &&
                    (booking.AdultTickets + booking.ChildTickets) <= selectedevent.CurrentTickets)
                {
                    Ticket ticket = new Ticket();
                    ticket.Amount         = booking.AdultTickets + booking.ChildTickets;
                    ticket.EventId        = booking.SelectedEvent;
                    ticket.Event          = eventRepository.GetEvent(ticket.EventId);
                    ticket.Price          = (booking.AdultTickets * restaurant.PriceAdults) + (booking.ChildTickets * restaurant.PriceChildren);
                    ticket.SpecialRequest = booking.SpecialRequest;

                    // Create session if it doesn't exist or add ticket to existing session
                    if (Session["currentTickets"] == null)
                    {
                        List <Ticket> tickets = new List <Ticket>();
                        tickets.Add(ticket);
                        Session["CurrentTickets"] = tickets;
                    }
                    else
                    {
                        List <Ticket> sessionTickets = (List <Ticket>)Session["currentTickets"];
                        sessionTickets.Add(ticket);
                    }
                    BookingResult resultViewModel = new BookingResult(booking.RestaurantName, ticket.Event.StartTime, ticket.Event.EndTime, ticket.SpecialRequest);
                    return(RedirectToAction("BookEventSuccess", resultViewModel));
                }
                ModelState.AddModelError("", "There are only " + selectedevent.CurrentTickets + " tickets available");
            }

            // Validation failed, reload some data:
            booking.Events = foodRepository.GetAllFoodEvents(restaurant.RestaurantID);
            return(PartialView("BookEvent", booking));
        }
示例#11
0
        public BookingResult BookHotel(Order item)
        {
            BookingResult res = new BookingResult();

            int leftRooms = CalcLeftRooms(item);

            if (item.RoomCount > leftRooms)
            {
                res.IsValid = false;
                return(res);
            }

            res.ClientName   = item.ClientName;
            res.HotelName    = item.HotelName;
            res.BookingCount = item.RoomCount;
            res.IsValid      = true;

            BookedList.Add(item);

            return(res);
        }
示例#12
0
        private static void DisplayResult(List <BookingResult> bookingRes)
        {
            if (bookingRes == null)
            {
                return;
            }

            BookingResult br = bookingRes.Where(r => !r.IsValid).FirstOrDefault();

            if (br != null)
            {
                Console.WriteLine("Invalid");
            }
            else
            {
                foreach (BookingResult item in bookingRes)
                {
                    Console.WriteLine(string.Format("{0} {1} {2}", item.ClientName, item.HotelName, item.BookingCount));
                }
            }
        }
示例#13
0
        public async Task <IHttpActionResult> Update(BookingSource bookingSource)
        {
            try
            {
                Event evnt = await _eventRepository.GetActiveAsync();

                if (null == evnt)
                {
                    return(NotFound());
                }

                if (IsUnauthorized(bookingSource.Reference))
                {
                    return(BadRequest("Request is unauthorized, or not logged in as the booking it's trying to update."));
                }
                if (!AuthContext.IsAdmin && evnt.IsLocked)
                {
                    return(BadRequest("The event has been locked and the booking can no longer be edited."));
                }

                BookingResult result = await _bookingRepository.UpdateAsync(evnt, bookingSource, AuthContext.IsAdmin);

                _log.Info("Updated booking {0}.", result.Reference);
                return(Ok(result));
            }
            catch (BookingException ex)
            {
                _log.Warn(ex, "A validation error occurred while updating the booking.");
                return(BadRequest(ex.Message));
            }
            catch (Exception ex)
            {
                _log.Error(ex, "An unexpected exception occurred while updating the booking.");
                throw;
            }
        }