// public async Task<IEnumerable<Booking>> GetBookings(int userId) // { // return await _context.Bookings // .Where(b => b.UserId == userId) // .ToListAsync(); // } public async Task <List <BookedTimes> > GetBookedTimes(int spaceId, BookedTimes proposedBookingTime) { var bookings = await _context.Bookings .Include(bk => bk.SpaceBooked) .Where(bk => bk.SpaceBooked.Id == spaceId) .ToListAsync(); //Check for the existing bookings that UsingFrom or UsingTill falls in between the proposed using from nd to var existing = new List <Booking>(); foreach (var booking in bookings) { var fallsInBtw = ((proposedBookingTime.From >= booking.UsingFrom || proposedBookingTime.From <= booking.UsingFrom) && booking.UsingFrom <= proposedBookingTime.To); var alsoInBetween = ((proposedBookingTime.From >= booking.UsingTill || proposedBookingTime.From <= booking.UsingTill) && booking.UsingTill <= proposedBookingTime.To); if (fallsInBtw || alsoInBetween) { existing.Add(booking); } } ; var bookingTimes = new List <BookedTimes>(); foreach (var item in existing) { var bookingTime = new BookedTimes(); bookingTime.From = item.UsingFrom; bookingTime.To = item.UsingTill; bookingTime.Status = item.Status.ToString(); bookingTimes.Add(bookingTime); } ; return(bookingTimes); }
public async Task <IActionResult> CreateBooking([FromBody] BookingDTO bookingDTO) { var bookingToCreate = _mapper.Map <Booking>(bookingDTO); var bookingToCreateBT = new BookedTimes(); bookingToCreateBT.From = bookingToCreate.UsingFrom; bookingToCreateBT.To = bookingToCreate.UsingTill; var existingBookingTimes = await _lineUpRepository.GetBookedTimes(bookingToCreate.SpaceBooked.Id, bookingToCreateBT); if (existingBookingTimes.Count() > 0) { return(BadRequest("You can't select from a range of booking that already exists")); } if (bookingToCreate == null) { return(BadRequest("Booking cannot be null")); } if (bookingToCreate.UsingFrom < DateTime.Now) { return(BadRequest("You can't create a booking for a date that has passed")); } if (bookingToCreate.UsingFrom >= bookingToCreate.UsingTill) { return(BadRequest("Time from must be behind/be the same as time to")); } if (await _lineUpRepository.EntityExists(bookingToCreate)) { return(BadRequest("Booking already exists")); } bookingToCreate.Status = BookingStatus.Booked; bookingToCreate.BookingTime = DateTime.Now; _lineUpRepository.Add(bookingToCreate); await _lineUpRepository.SaveAllChanges(); BookingQuery query = new BookingQuery { TimeBooked = bookingToCreate.BookingTime }; var bookingDetails = await _lineUpRepository.GetBookingDetails(bookingToCreate.BookedById, query); var user = await _userRepository.GetUser(bookingToCreate.BookedById); Message message = new Message(); message.Subject = "Booking"; message.FromEmail = "*****@*****.**"; message.FromName = "234Spaces Admin"; message.ToName = user.Name; message.ToEmail = user.Email; message.PlainContent = null; message.HtmlContent = FormattedEmailBody("Your Booking", $"Your booking has been confirmed, your bookingReference is {bookingDetails.Id.ToString()}", "", "", false); _userRepository.EmailSender(message); return(Ok()); }
public async Task <IActionResult> GetBookedTimes(int spaceId, [FromBody] BookedTimes pBT) { var bookedTimes = await _lineUpRepository.GetBookedTimes(spaceId, pBT); return(Ok(bookedTimes)); }