Exemple #1
0
        // 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));
        }