Beispiel #1
0
        public async Task <List <GetReservationDto> > GetReservations(ReservationQueryParameters reservationQueryParameters)
        {
            IQueryable <Reservation> reservations = _context.Reservations;

            if (reservationQueryParameters.DepartureDate.HasValue && reservationQueryParameters.ArrivalDate.HasValue)
            {
                reservations = reservations.Where(e => reservationQueryParameters.ArrivalDate.Value.CompareTo(e.ArrivalDate) != 1 && reservationQueryParameters.DepartureDate.Value.CompareTo(e.DepartureDate) != -1);
            }

            if (string.IsNullOrEmpty(reservationQueryParameters.SortBy) == false)
            {
                if (typeof(Reservation).GetProperty(reservationQueryParameters.SortBy) != null)
                {
                    reservations = reservations.OrderByCustom(reservationQueryParameters.SortBy, reservationQueryParameters.SortOrder);
                }
            }

            if (reservationQueryParameters.ShowDeleted == false)
            {
                reservations = reservations.Where(e => e.DeletedAt.HasValue == false);
            }

            List <GetReservationDto> reservationDtos = new List <GetReservationDto>();

            foreach (Reservation reservation in await reservations.ToListAsync())
            {
                reservationDtos.Add(new GetReservationDto(reservation));
            }

            return(reservationDtos);
        }
 public ReservationsRequest(
     PaginationParameters paginationParameters,
     ReservationQueryParameters reservationQueryParameters,
     Guid tenantId,
     string?assetId = null)
     : this(paginationParameters)
 {
     ReservationQueryParameters = reservationQueryParameters;
     TenantId = tenantId;
     AssetId  = assetId;
 }
        private IQueryable <Event> ApplyFilters(
            IQueryable <Event> query,
            ReservationQueryParameters reservationQueryParameters,
            Guid tenantId,
            string?assetId)
        {
            if (reservationQueryParameters.ArticleId != null)
            {
                var assets = _ctx.Assets.Where(x => x.ArticleId == reservationQueryParameters.ArticleId && x.HolderTenantId == tenantId).Select(x => x.Id);
                query = query.Where(x => x.AssetId.HasValue && assets.Contains(x.AssetId.Value));
            }

            if (reservationQueryParameters.Start != null && reservationQueryParameters.End == null)
            {
                query = query.Where(x => x.EventEnd >= reservationQueryParameters.Start);
            }

            if (reservationQueryParameters.End != null && reservationQueryParameters.Start == null)
            {
                query = query.Where(x => x.EventStart <= reservationQueryParameters.End).OrderByDescending(x => x.EventStart);
            }

            if (reservationQueryParameters.Start != null && reservationQueryParameters.End != null)
            {
                query = query.Where(x => x.EventEnd > reservationQueryParameters.Start && x.EventStart < reservationQueryParameters.End);
            }

            if (!string.IsNullOrEmpty(assetId))
            {
                var asset = GetAssetById(assetId);
                if (asset != null)
                {
                    query = query.Where(x => x.AssetId == asset.Id);
                }
            }

            return(query);
        }
        public async Task <ActionResult <GetReservationDto> > GetReservations([FromQuery] ReservationQueryParameters reservationQueryParameters)
        {
            List <GetReservationDto> reservations = await _reservationService.GetReservations(reservationQueryParameters);

            return(Ok(reservations));
        }