use of se.inera.intyg.webcert.web.service.user.dto.WebCertUser in project webcert by sklintyg.
the class StatModuleApiControllerTest method setupDataAndExpectations.
@Before
public void setupDataAndExpectations() {
fragaSvarStatsMap = new HashMap<>();
fragaSvarStatsMap.put("VE1", 2L);
fragaSvarStatsMap.put("VE1M1", 3L);
fragaSvarStatsMap.put("VE1M2", 3L);
fragaSvarStatsMap.put("VE2", 2L);
fragaSvarStatsMap.put("VE3", 1L);
arendeStatsMap = new HashMap<>();
arendeStatsMap.put("VE1", 2L);
arendeStatsMap.put("VE1M1", 3L);
arendeStatsMap.put("VE1M2", 3L);
arendeStatsMap.put("VE2", 2L);
arendeStatsMap.put("VE3", 1L);
intygStatsMap = new HashMap<>();
intygStatsMap.put("VE1M1", 1L);
intygStatsMap.put("VE1M2", 2L);
intygStatsMap.put("VE2", 2L);
mockUser = new WebCertUser();
Role role = AUTHORITIES_RESOLVER.getRole(AuthoritiesConstants.ROLE_LAKARE);
mockUser.setRoles(AuthoritiesResolverUtil.toMap(role));
mockUser.setAuthorities(AuthoritiesResolverUtil.toMap(role.getPrivileges(), Privilege::getName));
ve1 = new Vardenhet("VE1", "Vardenhet1");
ve1.getMottagningar().add(new Mottagning("VE1M1", "Mottagning1"));
ve1.getMottagningar().add(new Mottagning("VE1M2", "Mottagning2"));
ve2 = new Vardenhet("VE2", "Vardenhet2");
ve2.getMottagningar().add(new Mottagning("VE2M1", "Mottagning3"));
ve3 = new Vardenhet("VE3", "Vardenhet3");
ve4 = new Vardenhet("VE4", "Vardenhet4");
Vardgivare vg = new Vardgivare("VG1", "Vardgivaren");
vg.setVardenheter(Arrays.asList(ve1, ve2, ve3, ve4));
mockUser.setVardgivare(Collections.singletonList(vg));
mockUser.setValdVardgivare(vg);
when(authoritiesHelper.getIntygstyperForPrivilege(any(UserDetails.class), anyString())).thenReturn(Stream.of("fk7263").collect(Collectors.toSet()));
when(webCertUserService.getUser()).thenReturn(mockUser);
}
use of se.inera.intyg.webcert.web.service.user.dto.WebCertUser in project webcert by sklintyg.
the class FragaSvarServiceImpl method saveSvar.
@Override
public FragaSvar saveSvar(Long fragaSvarsId, String svarsText) {
// Input sanity check
if (Strings.isNullOrEmpty(svarsText)) {
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INTERNAL_PROBLEM, "SvarsText cannot be empty!");
}
// Look up entity in repository
FragaSvar fragaSvar = lookupFragaSvar(fragaSvarsId);
// Is user authorized to save an answer to this question?
verifyEnhetsAuth(fragaSvar.getVardperson().getEnhetsId(), false);
if (!fragaSvar.getStatus().equals(Status.PENDING_INTERNAL_ACTION)) {
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INVALID_STATE, "FragaSvar with id " + fragaSvar.getInternReferens().toString() + " has invalid state for saving answer(" + fragaSvar.getStatus() + ")");
}
// Implement Business Rule FS-007
if (Amne.PAMINNELSE.equals(fragaSvar.getAmne())) {
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INTERNAL_PROBLEM, "FragaSvar with id " + fragaSvar.getInternReferens().toString() + " has invalid Amne(" + fragaSvar.getAmne() + ") for saving answer");
}
if (Amne.KOMPLETTERING_AV_LAKARINTYG.equals(fragaSvar.getAmne())) {
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INTERNAL_PROBLEM, "FragaSvar with id " + fragaSvar.getInternReferens().toString() + " has invalid Amne(" + fragaSvar.getAmne() + ") for saving answer");
}
LocalDateTime now = LocalDateTime.now();
WebCertUser user = webCertUserService.getUser();
// Ok, lets save the answer
fragaSvar.setVardAktorHsaId(user.getHsaId());
fragaSvar.setVardAktorNamn(user.getNamn());
fragaSvar.setSvarsText(svarsText);
fragaSvar.setSvarSkickadDatum(now);
fragaSvar.setStatus(Status.CLOSED);
fragaSvar.setSvarSigneringsDatum(now);
FragaSvar saved = fragaSvarRepository.save(fragaSvar);
sendFragaSvarToExternalParty(saved);
arendeDraftService.delete(fragaSvar.getIntygsReferens().getIntygsId(), Long.toString(fragaSvar.getInternReferens()));
return saved;
}
use of se.inera.intyg.webcert.web.service.user.dto.WebCertUser in project webcert by sklintyg.
the class FragaSvarServiceImpl method getFragaSvarHsaIdByEnhet.
@Override
@Transactional(value = "jpaTransactionManager", readOnly = true)
public List<Lakare> getFragaSvarHsaIdByEnhet(String enhetsId) {
List<String> enhetsIdParams = new ArrayList<>();
if (enhetsId != null) {
verifyEnhetsAuth(enhetsId);
enhetsIdParams.add(enhetsId);
} else {
WebCertUser user = webCertUserService.getUser();
enhetsIdParams.addAll(user.getIdsOfSelectedVardenhet());
}
List<Lakare> mdList = new ArrayList<>();
List<Object[]> tempList = fragaSvarRepository.findDistinctFragaSvarHsaIdByEnhet(enhetsIdParams);
for (Object[] obj : tempList) {
mdList.add(new Lakare((String) obj[0], (String) obj[1]));
}
return mdList;
}
use of se.inera.intyg.webcert.web.service.user.dto.WebCertUser in project webcert by sklintyg.
the class FragaSvarServiceImpl method saveNewQuestion.
@Override
public FragaSvar saveNewQuestion(String intygId, String typ, Amne amne, String frageText) {
// Argument check
if (Strings.isNullOrEmpty(frageText)) {
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INTERNAL_PROBLEM, "frageText cannot be empty!");
}
if (amne == null) {
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INTERNAL_PROBLEM, "Amne cannot be null!");
} else if (!VALID_VARD_AMNEN.contains(amne)) {
// Businessrule RE-013
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INTERNAL_PROBLEM, "Invalid Amne " + amne + " for new question from vard!");
}
// Fetch from Intygstjansten. Note that if Intygstjansten is unresponsive, the Intyg will be loaded from WebCert
// if possible.
IntygContentHolder intyg = intygService.fetchIntygData(intygId, typ, false);
WebCertUser user = webCertUserService.getUser();
// Get vardperson that posed the question
// Is user authorized to save an answer to this question?
verifyEnhetsAuth(intyg.getUtlatande().getGrundData().getSkapadAv().getVardenhet().getEnhetsid(), false);
// Verksamhetsregel FS-001 (Is the certificate sent to FK)
if (!isCertificateSentToFK(intyg.getStatuses())) {
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INTERNAL_PROBLEM, "FS-001: Certificate must be sent to FK first before sending question!");
}
// Verify that certificate is not revoked
if (intyg.isRevoked()) {
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INTERNAL_PROBLEM, "FS-XXX: Cannot save Fraga when certificate is revoked!");
}
IntygsReferens intygsReferens = FragaSvarConverter.convertToIntygsReferens(intyg.getUtlatande());
HoSPersonal hoSPersonal = IntygConverterUtil.buildHosPersonalFromWebCertUser(user, null);
Vardperson vardPerson = FragaSvarConverter.convert(hoSPersonal);
FragaSvar fraga = new FragaSvar();
fraga.setFrageStallare(FrageStallare.WEBCERT.getKod());
fraga.setAmne(amne);
fraga.setFrageText(frageText);
LocalDateTime now = LocalDateTime.now();
fraga.setFrageSkickadDatum(now);
fraga.setFrageSigneringsDatum(now);
fraga.setIntygsReferens(intygsReferens);
fraga.setVardperson(vardPerson);
fraga.setStatus(Status.PENDING_EXTERNAL_ACTION);
fraga.setVardAktorHsaId(user.getHsaId());
fraga.setVardAktorNamn(user.getNamn());
// Ok, lets save the question
FragaSvar saved = fragaSvarRepository.save(fraga);
// Send to external party (FK)
SendMedicalCertificateQuestionType sendType = new SendMedicalCertificateQuestionType();
QuestionToFkType question = FKQuestionConverter.convert(saved);
// Remove ASAP.
if ("true".equalsIgnoreCase(forceFullstandigtNamn)) {
question.getLakarutlatande().getPatient().setFullstandigtNamn("---");
}
sendType.setQuestion(question);
AttributedURIType logicalAddress = new AttributedURIType();
logicalAddress.setValue(sendQuestionToFkLogicalAddress);
SendMedicalCertificateQuestionResponseType response;
try {
response = sendQuestionToFKClient.sendMedicalCertificateQuestion(logicalAddress, sendType);
} catch (SOAPFaultException e) {
LOGGER.error("Failed to send question to FK, error was: " + e.getMessage());
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.EXTERNAL_SYSTEM_PROBLEM, e.getMessage());
}
if (!response.getResult().getResultCode().equals(ResultCodeEnum.OK)) {
LOGGER.error("Failed to send question to FK, result was " + response.getResult().toString());
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.EXTERNAL_SYSTEM_PROBLEM, response.getResult().getErrorText());
}
monitoringService.logQuestionSent(saved.getExternReferens(), saved.getInternReferens(), (saved.getIntygsReferens() == null) ? null : saved.getIntygsReferens().getIntygsId(), saved.getVardAktorHsaId(), saved.getAmne());
// Notify stakeholders
sendNotification(saved, NotificationEvent.NEW_QUESTION_FROM_CARE);
arendeDraftService.delete(intygId, null);
return saved;
}
use of se.inera.intyg.webcert.web.service.user.dto.WebCertUser in project webcert by sklintyg.
the class FragaSvarServiceImpl method getFragaSvar.
@Override
@Transactional(value = "jpaTransactionManager", readOnly = true)
public List<FragaSvarView> getFragaSvar(String intygId) {
List<FragaSvar> fragaSvarList = fragaSvarRepository.findByIntygsReferensIntygsId(intygId);
WebCertUser user = webCertUserService.getUser();
validateSekretessmarkering(intygId, fragaSvarList, user);
List<String> hsaEnhetIds = user.getIdsOfSelectedVardenhet();
// Filter questions to that current user only sees questions issued to
// units with active employment role
fragaSvarList.removeIf(fragaSvar -> fragaSvar.getVardperson() != null && !hsaEnhetIds.contains(fragaSvar.getVardperson().getEnhetsId()));
// Finally sort by senasteHandelseDatum
// We do the sorting in code, since we need to sort on a derived
// property and not a direct entity persisted
// property in which case we could have used an order by in the query.
fragaSvarList.sort(SENASTE_HANDELSE_DATUM_COMPARATOR);
List<ArendeDraft> drafts = arendeDraftService.listAnswerDrafts(intygId);
List<AnsweredWithIntyg> bmi = AnsweredWithIntygUtil.findAllKomplementForGivenIntyg(intygId, utkastRepository);
List<FragaSvarView> fragaSvarWithBesvaratMedIntygInfo = fragaSvarList.stream().map(fs -> FragaSvarView.create(fs, fs.getFrageSkickadDatum() == null ? null : AnsweredWithIntygUtil.returnOldestKompltOlderThan(fs.getFrageSkickadDatum(), bmi), drafts.stream().filter(d -> Long.toString(fs.getInternReferens()).equals(d.getQuestionId())).findAny().map(ArendeDraft::getText).orElse(null))).collect(Collectors.toList());
return fragaSvarWithBesvaratMedIntygInfo;
}
Aggregations