use of se.inera.intyg.webcert.persistence.model.Filter in project webcert by sklintyg.
the class ArendeServiceImpl method filterArende.
@Override
@Transactional(value = "jpaTransactionManager", readOnly = true)
public QueryFragaSvarResponse filterArende(QueryFragaSvarParameter filterParameters) {
WebCertUser user = webcertUserService.getUser();
Set<String> intygstyperForPrivilege = authoritiesHelper.getIntygstyperForPrivilege(user, AuthoritiesConstants.PRIVILEGE_VISA_INTYG);
Filter filter;
if (!Strings.isNullOrEmpty(filterParameters.getEnhetId())) {
verifyEnhetsAuth(filterParameters.getEnhetId(), true);
filter = FilterConverter.convert(filterParameters, Arrays.asList(filterParameters.getEnhetId()), intygstyperForPrivilege);
} else {
filter = FilterConverter.convert(filterParameters, user.getIdsOfSelectedVardenhet(), intygstyperForPrivilege);
}
int originalStartFrom = filter.getStartFrom();
int originalPageSize = filter.getPageSize();
// INTYG-4086: Do NOT perform any paging. We must first load all applicable QA / ärenden, then apply
// sekretessmarkering filtering. THEN - we can do paging stuff in-memory. Very inefficient...
filter.setStartFrom(null);
filter.setPageSize(null);
List<ArendeListItem> results = arendeRepository.filterArende(filter).stream().map(ArendeListItemConverter::convert).filter(Objects::nonNull).peek(item -> item.setPaminnelse(!arendeRepository.findByPaminnelseMeddelandeId(item.getMeddelandeId()).isEmpty())).collect(Collectors.toList());
QueryFragaSvarResponse fsResults = fragaSvarService.filterFragaSvar(filter);
results.addAll(fsResults.getResults());
results.sort(Comparator.comparing(ArendeListItem::getReceivedDate).reversed());
QueryFragaSvarResponse response = new QueryFragaSvarResponse();
Map<Personnummer, SekretessStatus> sekretessStatusMap = patientDetailsResolver.getSekretessStatusForList(results.stream().map(ali -> Personnummer.createPersonnummer(ali.getPatientId()).get()).collect(Collectors.toList()));
// INTYG-4086, INTYG-4486: Filter out any items that doesn't pass sekretessmarkering rules
results = results.stream().filter(ali -> this.passesSekretessCheck(ali.getPatientId(), ali.getIntygTyp(), user, sekretessStatusMap)).collect(Collectors.toList());
// We must mark all items having patient with sekretessmarkering
results.stream().filter(ali -> hasSekretessStatus(ali, SekretessStatus.TRUE, sekretessStatusMap)).forEach(ali -> ali.setSekretessmarkering(true));
response.setTotalCount(results.size());
if (originalStartFrom >= results.size()) {
response.setResults(new ArrayList<>());
} else {
response.setResults(results.subList(originalStartFrom, Math.min(originalPageSize + originalStartFrom, results.size())));
}
return response;
}
use of se.inera.intyg.webcert.persistence.model.Filter in project webcert by sklintyg.
the class FilterConverter method convert.
public static Filter convert(QueryFragaSvarParameter source, List<String> unitIds, Set<String> intygsTyper) {
Filter filter = new Filter();
filter.getEnhetsIds().addAll(unitIds);
if (!Strings.isNullOrEmpty(source.getVantarPa())) {
filter.setVantarPa(VantarPa.valueOf(source.getVantarPa()));
}
filter.setChangedFrom(source.getChangedFrom());
if (source.getChangedTo() != null) {
filter.setChangedTo(source.getChangedTo().plusDays(1));
}
filter.setHsaId(source.getHsaId());
filter.setQuestionFromFK(getSafeBooleanValue(source.getQuestionFromFK()));
filter.setQuestionFromWC(getSafeBooleanValue(source.getQuestionFromWC()));
filter.setReplyLatest(source.getReplyLatest());
filter.setVidarebefordrad(source.getVidarebefordrad());
filter.setPageSize((source.getPageSize() == null) ? DEFAULT_PAGE_SIZE : source.getPageSize());
filter.setStartFrom((source.getStartFrom() == null) ? Integer.valueOf(0) : source.getStartFrom());
filter.setIntygsTyper(intygsTyper);
return filter;
}
use of se.inera.intyg.webcert.persistence.model.Filter in project webcert by sklintyg.
the class ArendeRepositoryTest method testFilterArendeByHsaId.
@Test
public void testFilterArendeByHsaId() {
final String enhet = "enhet";
final String signeratAvHsaId = "hsaid1";
repo.save(buildArende(signeratAvHsaId, enhet, Status.PENDING_INTERNAL_ACTION, null, null, "SKICKAT_AV", LocalDate.now().minusDays(3)));
repo.save(buildArende("signeratAv", enhet, Status.PENDING_INTERNAL_ACTION, null, null, "SKICKAT_AV", LocalDate.now().minusDays(3)));
Filter filter = buildDefaultFilter(enhet);
filter.setHsaId(signeratAvHsaId);
List<Arende> result = repo.filterArende(filter);
assertEquals(1, result.size());
}
use of se.inera.intyg.webcert.persistence.model.Filter in project webcert by sklintyg.
the class ArendeRepositoryTest method testFilterArendeMarkeraSomHanterad.
@Test
public void testFilterArendeMarkeraSomHanterad() {
final String enhet = "enhet";
repo.save(buildArende("signeratAv", enhet, Status.CLOSED, null, null, "SKICKAT_AV", LocalDate.now().minusDays(3)));
repo.save(buildArende("signeratAv", enhet, Status.ANSWERED, null, null, "SKICKAT_AV", LocalDate.now().minusDays(3)));
repo.save(buildArende("signeratAv", enhet, Status.PENDING_EXTERNAL_ACTION, null, null, "SKICKAT_AV", LocalDate.now().minusDays(3)));
repo.save(buildArende("signeratAv", enhet, Status.PENDING_INTERNAL_ACTION, null, null, "SKICKAT_AV", LocalDate.now().minusDays(3)));
repo.save(buildArende("signeratAv", enhet, Status.PENDING_INTERNAL_ACTION, null, null, "SKICKAT_AV", LocalDate.now().minusDays(3), ArendeAmne.PAMINN));
Filter filter = buildDefaultFilter(enhet);
filter.setVantarPa(VantarPa.MARKERA_SOM_HANTERAD);
List<Arende> result = repo.filterArende(filter);
assertEquals(2, result.size());
}
use of se.inera.intyg.webcert.persistence.model.Filter in project webcert by sklintyg.
the class ArendeRepositoryTest method testFilterArendeVidarebefordradFalse.
@Test
public void testFilterArendeVidarebefordradFalse() {
final String enhet = "enhet";
repo.save(buildArende("signeratAv", "signeratAvName", enhet, Status.PENDING_INTERNAL_ACTION, null, null, "SKICKAT_AV", LocalDate.now().minusDays(3), ArendeAmne.OVRIGT, Boolean.TRUE, LocalDateTime.now(), UUID.randomUUID().toString()));
repo.save(buildArende("signeratAv", "signeratAvName", enhet, Status.PENDING_INTERNAL_ACTION, null, null, "SKICKAT_AV", LocalDate.now().minusDays(3), ArendeAmne.OVRIGT, Boolean.FALSE, LocalDateTime.now(), UUID.randomUUID().toString()));
repo.save(buildArende("signeratAv", "signeratAvName", enhet, Status.PENDING_INTERNAL_ACTION, null, null, "SKICKAT_AV", LocalDate.now().minusDays(3), ArendeAmne.OVRIGT, null, LocalDateTime.now(), UUID.randomUUID().toString()));
Filter filter = buildDefaultFilter(enhet);
filter.setVidarebefordrad(Boolean.FALSE);
List<Arende> result = repo.filterArende(filter);
assertEquals(1, result.size());
}
Aggregations