Esempio n. 1
0
        /// <summary>
        /// Gets the subset of <typeparamref name="TEntity"/> entities corresponding to the predicate <paramref name="predicate"/>.
        /// </summary>
        /// <param name="predicate">Filter which entities are returned.</param>
        /// <param name="eager">Indicates whether or not to eagerly load navigation properties.</param>
        /// <returns></returns>
        public async Task <IEnumerable <TEntity> > GetByConditionAsync(Expression <Func <TEntity, bool> > predicate, bool eager = false)
        {
            var query = _context.Set <TEntity>().AsQueryable();

            if (predicate != null)
            {
                query = query.Where(predicate);
            }

            if (eager)
            {
                var navigations = _context.Model.FindEntityType(typeof(TEntity))
                                  .GetDerivedTypesInclusive()
                                  .SelectMany(type => type.GetNavigations())
                                  .Distinct();

                foreach (var property in navigations)
                {
                    query = query.Include(property.Name);
                }
            }

            var results = await query.ToListAsync();

            return(results ?? new List <TEntity>());
        }
Esempio n. 2
0
        public async Task <Court> GetCourtAsync(int courtId)
        {
            var entity = await context.Set <CourtEntity>().FindAsync(courtId);

            if (entity != null)
            {
                return(new Court(entity.Id, (CourtType)entity.CourtType));
            }

            return(null);
        }
Esempio n. 3
0
        public IEnumerable <ClientBookingAddress> GetAllClientBookingsAddresses()
        {
            if (db != null)
            {
                return(db.Set <ClientBookingAddress>().ToList());
            }

            return(null);
        }
Esempio n. 4
0
 public async Task <IEnumerable <BookingSummaryDto> > GetBookings()
 {
     return(await bookingContext.Set <BookingEntity>()
            .Select(x => new BookingSummaryDto()
     {
         BookingId = x.Id,
         PhoneNo = x.PhoneNo,
         CourtId = x.Court.Id,
         CourtTypeId = x.Court.CourtType,
         CourtType = Enum.GetName(typeof(CourtType), x.Court.CourtType),
         BookedFrom = x.BookedFrom,
         BookedTo = x.BookedTo,
         BookingStatusId = x.Status,
         BookingStatus = Enum.GetName(typeof(BookingStatus), x.Status)
     })
            .AsNoTracking()
            .ToListAsync());
 }
Esempio n. 5
0
        public async Task <BookingResponseModel> CreateBookingAsync(BookingModel bookingModel)
        {
            var response = new BookingResponseModel {
                IsSuccess = true
            };

            using var transaction = await _context.Database.BeginTransactionAsync();

            try
            {
                var seatAvailable = await(from seat in _context.Set <Seat>().Where(s => (SeatTypes)s.SeatTypeId == bookingModel.SeatType)
                                          join booking in _context.Set <Booking>().Where(b => b.VisitStartDate == bookingModel.VisitStartDate && b.BookingStatusId != (int)BookingStatuses.Cancelled)
                                          on seat.Id equals booking.SeatId into lj
                                          from subseat in lj.DefaultIfEmpty()
                                          where subseat == null
                                          select seat).FirstOrDefaultAsync();

                if (seatAvailable?.Id == null)
                {
                    await transaction.RollbackAsync();

                    response.IsSuccess    = false;
                    response.ErrorMessage = $"There is no seat available for the given seat type {bookingModel.SeatType} on the date {bookingModel.VisitStartDate:dd-MM-yyyy}";
                    return(response);
                }

                var bookingId = (await _context.Set <Booking>().OrderByDescending(b => b.Id).FirstOrDefaultAsync())?.Id ?? 0 + 1;

                response.BookingReference = IdGenerator.GenerateBookingReference(bookingId);
                response.CreatedDate      = DateTime.UtcNow;

                await _context.Set <Booking>().AddAsync(new Booking
                {
                    CreatedDate          = response.CreatedDate,
                    BookingReference     = response.BookingReference,
                    BookingTypeId        = (int)bookingModel.BookingType,
                    IsAcceptTsAndCs      = false,
                    IsAcceptCovidCharter = false,
                    IsNoFaceCovering     = false,
                    IsNoShow             = false,
                    SeatId          = seatAvailable.Id,
                    BookingStatusId = (int)BookingStatuses.Created,
                    VisitStartDate  = bookingModel.VisitStartDate,
                    VisitEndDate    = bookingModel.VisitEndDate,
                    LastModifiedBy  = Modified_By
                });

                await _context.SaveChangesAsync();

                await transaction.CommitAsync();
            }
            catch
            {
                await transaction.RollbackAsync();

                response.IsSuccess    = false;
                response.ErrorMessage = $"Error reserving the given seat type {bookingModel.SeatType} on the date {bookingModel.VisitStartDate:dd-MM-yyyy}";
            }
            return(response);
        }
Esempio n. 6
0
 public IQueryable <T> GetAll()
 {
     return(_bookingContext.Set <T>());
 }
Esempio n. 7
0
        public async Task <AvailabilitySummaryModel> GetAvailabilitySummaryAsync()
        {
            var availableSummaryModel  = new AvailabilitySummaryModel();
            var standardAvailableDates = await _workingDayService.GetStandardOrderAvailableDatesAsync();

            var bulkAvailableDates = await _workingDayService.GetBulkOrderAvailableDatesAsync();

            var stdSeatCount = await _context.Seats.CountAsync(s => StandardOrderSeats.Contains((SeatTypes)s.SeatTypeId));

            var stdBookingCount = await(from booking in _context.Set <Booking>().Where(b => standardAvailableDates.Contains(b.VisitStartDate) && (BookingStatuses)b.BookingStatusId != BookingStatuses.Cancelled)
                                        join seat in _context.Set <Seat>().Where(s => StandardOrderSeats.Contains((SeatTypes)s.SeatTypeId))
                                        on booking.SeatId equals seat.Id
                                        select new { seat.Number }).CountAsync();

            var bulkSeatCount = await _context.Seats.CountAsync(s => BulkOrderSeats.Contains((SeatTypes)s.SeatTypeId));

            var bulkBookingCount = await(from booking in _context.Set <Booking>().Where(b => bulkAvailableDates.Contains(b.VisitStartDate) && (BookingStatuses)b.BookingStatusId != BookingStatuses.Cancelled)
                                         join seat in _context.Set <Seat>().Where(s => BulkOrderSeats.Contains((SeatTypes)s.SeatTypeId))
                                         on booking.SeatId equals seat.Id
                                         select new { seat.Number }).CountAsync();


            availableSummaryModel.StandardBookingAvailable = (standardAvailableDates.Count * stdSeatCount) - stdBookingCount;
            availableSummaryModel.BulkBookingsAvailable    = (bulkAvailableDates.Count * bulkSeatCount) - bulkBookingCount;
            return(availableSummaryModel);
        }
Esempio n. 8
0
 /// <summary>
 /// Generic repository providing standard CRUD operations for
 /// retreiving data from the Db
 /// </summary>
 /// <param name="context">
 /// Db context used to perform operations against the database.
 /// </param>
 public Repository(BookingContext context)
 {
     _db      = context.Set <TEntity>();
     _context = context;
 }
Esempio n. 9
0
 public virtual void Add(T entity)
 {
     context.Set <T>().Add(entity);
     context.SaveChanges();
 }
Esempio n. 10
0
 public GenericRepository(BookingContext context)
 {
     this.context = context;
     dbSet        = context.Set <TEntity>();
 }