public async Task <FileDto> SearchTendersToXLS(TenderSearchDto searchDto) { var currentUser = await _userService.GetCurrentUserAsync(); var company = await _dataContext.Companies .Include(c => c.Subscriptions) .ThenInclude(s => s.Tariff) .SingleOrDefaultAsync(c => c.Id == currentUser.Id); if (!company.Subscriptions?.Any(s => s.Active && s.EndDate > DateTime.Now.Date && s.Tariff.ExportToXL) ?? true) { throw new BusinessException("Выгрузка Exel не доступна. Продлить тариф можно в личном кабинете"); } var query = await SearchTendersByPatternQuery(searchDto, auto : false); var results = await query.ToListAsync(); using var stream = ExcelService.CreateTendersXLSXToStream(results); return(new FileDto() { Content = stream.ToArray(), ContentType = "application/vnd.ms-excel", Name = "Tenders.xlsx" }); }
public async Task <PagedResult <TenderListDto> > SearchTenders(TenderSearchDto searchDto, int pageNumber = 1, int pageSize = 20) { var currentUser = await _userService.GetCurrentUserAsync(); var query = await SearchTendersByPatternQuery(searchDto, auto : false); return(await query .Select(GetTenderListDtoExpression(currentUser.Id)) .OrderByDescending(t => t.PublishDate) .GetPagedResult(pageSize, pageNumber)); }
public async Task <IActionResult> SearchToExcel([FromBody] TenderSearchDto searchDto) { var fileDto = await _tenderSearchService.SearchTendersToXLS(searchDto); return(File(fileDto.Content, fileDto.ContentType, fileDto.Name)); }
public async Task <IActionResult> Search([FromBody] TenderSearchDto searchDto, int pageSize = 20, int pageNumber = 1) { var pagedEntities = await _tenderSearchService.SearchTenders(searchDto, pageNumber, pageSize); return(Ok(_mapper.Map <PagedResultContract <TenderListContract> >(pagedEntities))); }
private async Task <IQueryable <Tender> > SearchTendersByPatternQuery(TenderSearchDto searchDto, bool auto) { var query = GetFullQuery(); if (auto) { query = query.Where(t => t.ChangeDate.Date >= searchDto.SinceDate); } else { query = query.Where(t => t.PublishDate.Date >= searchDto.SinceDate); } if (!searchDto.ShowEnded) { query = query.Where(t => t.Status == TenderStatus.GETTING_APPLICATIONS && t.SubmissionCloseDate.Date >= DateTime.Now.Date); } if (!string.IsNullOrEmpty(searchDto.SearchString)) { if (searchDto.StrictEqual) { query = query.Where(t => t.Name.Contains(searchDto.SearchString)); } else { query = query.Where(t => t.SearchVector.Matches(EF.Functions.PlainToTsQuery(searchDto.SearchString))); } } if (searchDto.RegionId.HasValue) { query = query.Where(t => t.RegionId == searchDto.RegionId); } if (searchDto.LawType.HasValue) { query = query.Where(t => t.LawType == searchDto.LawType.Value); } if (searchDto.PlacingWay.HasValue) { query = query.Where(t => t.PlacingWay == searchDto.PlacingWay); } if (searchDto.OnlySMP) { query = query.Where(t => new PlacingWay[] { PlacingWay.AESMBO, PlacingWay.KESMBO, PlacingWay.ZKESMBO, PlacingWay.ZPESMBO }.Contains(t.PlacingWay)); } if (searchDto.OrganizationId.HasValue) { query = query.Where(t => t.OwnerId == searchDto.OrganizationId); } if (searchDto.CodesIds?.Any() ?? false) { var codesIds = new List <long>(); codesIds.AddRange(searchDto.CodesIds); if (searchDto.IncludedCodes) { var allcodes = await _dataContext.OkpdCodes.ToListAsync(); var childCodes = new List <long>(); foreach (var codeId in codesIds) { childCodes.AddRange(GetChildsCodesIds(codeId, allcodes)); } codesIds.AddRange(childCodes); } query = query.Where(t => t.Lots.Any(lot => codesIds.Contains(lot.Id))); } if (searchDto.MinPrice.HasValue) { query = query.Where(t => t.PublishSum >= searchDto.MinPrice); } if (searchDto.MaxPrice.HasValue) { query = query.Where(t => t.PublishSum <= searchDto.MaxPrice); } return(query); }