示例#1
0
        public async Task <PagedList <Car> > GetCarsFromSearch(CarsFilterDtoOriginal filter)
        {
            try
            {
                var carList   = new List <Car>();
                var carsAsync = await GetCarsAsync();

                var cars = carsAsync.ToList();
                if (filter.PickUpDate >= DateTime.Now)
                {
                    if (filter.PickUpLocationId.HasValue)
                    {
                        cars = cars.Where(x => x.CarLocation.Id == filter.PickUpLocationId).ToList();
                        carList.AddRange(cars);
                    }

                    if (filter.PickUpDate != null && filter.ReturnDate != null)
                    {
                        for (int i = 0; i < carList.Count(); i++)
                        {
                            var carBooking = from booking in cars[i].Booking where booking.CarId == cars[i].Id select booking.PreBooking;

                            if (carBooking != null && carBooking.Count() > 0)
                            {
                                foreach (var item in carBooking)
                                {
                                    if (filter.PickUpDate <= item.ReturnDate && filter.ReturnDate >= item.PickDate)
                                    {
                                        carList.Remove(cars[i]);
                                    }
                                }
                            }
                        }
                    }
                }

                //var finalList = carList.AsQueryable();

                return(PagedList <Car> .CreateLitAsync(carList, filter.paginationParams.PageNumber, filter.paginationParams.PageSize));
            }
            catch (Exception ex)
            {
                Logger(ex, "Geting cars from db faild");
                return(null);
            }
        }
示例#2
0
        public async Task <IActionResult> SearchCars([FromQuery] CarsFilterDto filter)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var model = new SearchCarDto();
            var cars  = new List <CarForListDto>();

            if (filter.PickUpLocationId == 0 || filter.PickUpLocationId == null)
            {
                return(BadRequest());
            }
            if (filter.PickUpDate == null)
            {
                return(BadRequest());
            }
            if (filter.ReturnDate == null)
            {
                return(BadRequest());
            }

            if (filter.ReturnLocationId == 0 || filter.ReturnLocationId == null)
            {
                filter.ReturnLocationId = filter.PickUpLocationId;
            }


            //filter.paginationParams = new PaginationParams();
            //filter.paginationParams.PageSize = 2;

            var dateTimePickUpArray = filter.PickUpDate.Split(" ");
            var dateTimeReturnArray = filter.ReturnDate.Split(" ");

            var dateTimePickUp = dateTimePickUpArray[1] + " " + dateTimePickUpArray[2] + " " + dateTimePickUpArray[3] + " " + dateTimePickUpArray[4];

            var dateTimeReturn = dateTimeReturnArray[1] + " " + dateTimeReturnArray[2] + " " + dateTimeReturnArray[3] + " " + dateTimeReturnArray[4];


            var dateTimePickUpFinal = Convert.ToDateTime(dateTimePickUp);
            var dateTimeReturnFinal = Convert.ToDateTime(dateTimeReturn);


            var filterO = new CarsFilterDtoOriginal();

            filterO.PickUpLocationId = filter.PickUpLocationId;
            filterO.ReturnDate       = dateTimeReturnFinal;
            filterO.ReturnLocationId = filter.ReturnLocationId;
            filterO.PickUpDate       = dateTimePickUpFinal;
            filterO.DriverAge        = filter.DriverAge;
            filterO.paginationParams = new PaginationParams
            {
                PageSize   = filter.PageSize,
                PageNumber = filter.PageNumber
            };

            var resultAsync = await _carService.GetCarsFromSearch(filterO);

            if (resultAsync == null)
            {
                return(BadRequest("No car founded"));
            }

            var result = resultAsync.ToList();

            for (int i = 0; i < result.Count(); i++)
            {
                var carUploadPath = await _carUploadService.GetPathOfCarUploadAsync(result[i].Id);

                cars.Add(new CarForListDto
                {
                    Id              = result[i].Id,
                    CarNumber       = result[i].CarNumber,
                    BrandName       = result[i].Brand.Name,
                    ModelName       = result[i].Model.Name,
                    CarCapacity     = result[i].CarCapacity,
                    CarColor        = result[i].CarColor,
                    CarLocation     = await _locationService.GetLocationAsync((int)result[i].CarLocationId),
                    FuelType        = result[i].FuelType.Name,
                    ModelYear       = result[i].ModelYear,
                    NumberOfDoors   = result[i].NumberOfDoors,
                    TransmisionType = result[i].TransmisionType.Name,
                    PriceForDay     = Math.Round((decimal)result[i].PriceForDay, 2),
                    Description     = result[i].Description,
                    Path            = Url.Content(carUploadPath)
                });
            }

            model.Cars          = cars;
            model.PicUpLocation = await _locationService.GetLocationAsync((int)filter.PickUpLocationId);

            model.ReturnLocation = await _locationService.GetLocationAsync((int)filter.ReturnLocationId);

            model.PickUpDate       = filterO.PickUpDate;
            model.ReturnDate       = filterO.ReturnDate;
            model.PickUpLocationId = filter.PickUpLocationId;
            model.ReturnLocationId = filter.ReturnLocationId;



            Response.AddPagination(resultAsync.CurrentPage, resultAsync.PageSize, resultAsync.TotalCount, resultAsync.TotalPages);

            return(Ok(model));
        }