Esempio n. 1
0
        public async Task <BookingResponseModel> ConfirmBookingAsync(BookingModel bookingModel)
        {
            var response = new BookingResponseModel {
                IsSuccess = true, BookingReference = bookingModel.BookingReference
            };

            var booking = await _context.Set <Booking>().Include(b => b.Seat).FirstOrDefaultAsync(b => b.BookingReference == bookingModel.BookingReference);

            if (booking == null)
            {
                response.IsSuccess    = false;
                response.ErrorMessage = $"There is no booking found for the booking reference {bookingModel.BookingReference}";
                return(response);
            }
            response.CompleteByDate = await _workingDayService.GetCompleteByDateAsync(booking.VisitStartDate);

            response.SeatNumber = booking.Seat.Number;

            _context.Attach(booking);
            booking.CompleteByDate       = response.CompleteByDate;
            booking.ReaderTicket         = bookingModel.ReaderTicket;
            booking.FirstName            = bookingModel.FirstName;
            booking.LastName             = bookingModel.LastName;
            booking.Email                = bookingModel.Email;
            booking.Phone                = bookingModel.Phone;
            booking.IsAcceptTsAndCs      = bookingModel.IsAcceptTsAndCs;
            booking.IsAcceptCovidCharter = bookingModel.IsAcceptCovidCharter;
            booking.IsNoFaceCovering     = bookingModel.IsNoFaceCovering;

            await _context.SaveChangesAsync();

            if (!string.IsNullOrWhiteSpace(bookingModel.Email))
            {
                bookingModel.SeatType       = (SeatTypes)booking.Seat.SeatTypeId;
                bookingModel.BookingType    = (BookingTypes)booking.BookingTypeId;
                bookingModel.CompleteByDate = response.CompleteByDate;
                bookingModel.SeatNumber     = response.SeatNumber;
                bookingModel.VisitStartDate = booking.VisitStartDate;
                bookingModel.OrderDocuments = new List <OrderDocumentModel>();
                await _emailService.SendEmailAsync(EmailType.ReservationConfirmation, bookingModel.Email, bookingModel);
            }
            return(response);
        }