Ejemplo n.º 1
0
 public Task <ActionResult <IPaginationResult <LoadingLocation> > > Get([FromBody] LoadingLocationSearchRequest request)
 {
     return(this._loadingLocationsService.Search(request).Convert <IPaginationResult <LoadingLocation> >(this));
 }
        public async Task <IWrappedResponse> Search(LoadingLocationSearchRequest request)
        {
            var query = _olmaLoadingLocationRepo.FindAll()
                        .AsNoTracking();

            #region security

            // TODO add security

            #endregion


            #region convert search request

            if (request.Divisions?.Count > 0)
            {
                var divisionIds = request.Divisions;
                query = query.Where(l => l.CustomerDivisionId != null && divisionIds.Contains((int)l.CustomerDivisionId));
            }

            if (request.Partners?.Count > 0)
            {
                var partnerIds = request.Partners;
                query = query.Where(l => l.CustomerPartnerId != null && partnerIds.Contains((int)l.CustomerPartnerId));
            }

            #endregion

            #region ordering

            query = query.OrderBy(l => l.Id);

            #endregion

            var projectedQuery = query.ProjectTo <LoadingLocation>(Mapper.ConfigurationProvider);

            #region Add PublicHolidays

            var statesDict    = _olmaCountryStateRepo.FindAll().Include(c => c.PublicHolidays).ToDictionary(s => s.Id, s => s.PublicHolidays);
            var countriesDict = _olmaCountryRepo.FindAll().Include(c => c.PublicHolidays).ToDictionary(c => c.Id, c => c.PublicHolidays);

            var mappedResult = projectedQuery.ToPaginationResult(request);

            foreach (var loadingLocation in mappedResult.Data)
            {
                var publicHolidays = new List <PublicHoliday>();
                var stateId        = loadingLocation.Address.State;
                var countryId      = loadingLocation.Address.Country;
                if (stateId != null && statesDict.ContainsKey((int)stateId))
                {
                    publicHolidays.AddRange(Mapper.Map <ICollection <Olma.PublicHoliday>, ICollection <PublicHoliday> >(statesDict[(int)stateId]));
                }

                if (countryId != null && countriesDict.ContainsKey((int)countryId))
                {
                    publicHolidays.AddRange(Mapper.Map <ICollection <Olma.PublicHoliday>, ICollection <PublicHoliday> >(countriesDict[(int)countryId]));
                }
                loadingLocation.PublicHolidays = publicHolidays.AsEnumerable();
            }

            #endregion

            return(Ok(mappedResult));
        }