use of se.inera.intyg.webcert.persistence.arende.model.Arende in project webcert by sklintyg.
the class BaseRestIntegrationTest method createArendeQuestion.
/**
* Inserts a question of type arende for an existing certificate
*
* @param intygTyp
* type to create
* @param intygsId
* id of the intyg to create the arende for
* @param personnummer
* patient to create it for
* @return
*/
protected String createArendeQuestion(String intygTyp, String intygsId, String personnummer, ArendeAmne messageType) {
Arende arende;
switch(messageType) {
case AVSTMN:
arende = createAvstamningArendeFromFktoWebcertUser(intygTyp, intygsId, personnummer);
break;
case KOMPLT:
arende = createKompletteringArendeFromFkToWebcertUser(intygTyp, intygsId, personnummer);
break;
default:
throw new IllegalArgumentException();
}
Response response = given().cookie("ROUTEID", BaseRestIntegrationTest.routeId).contentType(ContentType.JSON).body(arende).expect().statusCode(200).when().post("testability/arendetest").then().extract().response();
JsonPath model = new JsonPath(response.body().asString());
return model.get("meddelandeId");
}
use of se.inera.intyg.webcert.persistence.arende.model.Arende in project webcert by sklintyg.
the class ArendeServiceImpl method updateRelated.
private void updateRelated(Arende arende) {
Arende orig;
if (arende.getSvarPaId() != null) {
orig = arendeRepository.findOneByMeddelandeId(arende.getSvarPaId());
if (orig != null) {
orig.setSenasteHandelse(arende.getSenasteHandelse());
orig.setStatus(arende.getStatus());
arendeRepository.save(orig);
}
} else if (arende.getPaminnelseMeddelandeId() != null) {
orig = arendeRepository.findOneByMeddelandeId(arende.getPaminnelseMeddelandeId());
if (orig != null) {
orig.setSenasteHandelse(arende.getSenasteHandelse());
arendeRepository.save(orig);
}
}
}
use of se.inera.intyg.webcert.persistence.arende.model.Arende in project webcert by sklintyg.
the class ArendeServiceImpl method openArendeAsUnhandled.
@Override
public ArendeConversationView openArendeAsUnhandled(String meddelandeId) {
Arende arende = lookupArende(meddelandeId);
boolean arendeIsAnswered = !arendeRepository.findBySvarPaId(meddelandeId).isEmpty();
// Enforce business rule FS-011, from FK + answer should remain closed
if (!FrageStallare.WEBCERT.isKodEqual(arende.getSkickatAv()) && arendeIsAnswered) {
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INVALID_STATE, "FS-011: Cant revert status for question " + meddelandeId);
}
NotificationEvent notificationEvent = determineNotificationEvent(arende, arendeIsAnswered);
if (arendeIsAnswered) {
arende.setStatus(Status.ANSWERED);
} else {
if (FrageStallare.WEBCERT.isKodEqual(arende.getSkickatAv())) {
arende.setStatus(Status.PENDING_EXTERNAL_ACTION);
} else {
arende.setStatus(Status.PENDING_INTERNAL_ACTION);
}
}
Arende openedArende = arendeRepository.save(arende);
sendNotification(openedArende, notificationEvent);
return arendeViewConverter.convertToArendeConversationView(openedArende, arendeRepository.findBySvarPaId(meddelandeId).stream().findFirst().orElse(null), null, arendeRepository.findByPaminnelseMeddelandeId(meddelandeId), null);
}
use of se.inera.intyg.webcert.persistence.arende.model.Arende in project webcert by sklintyg.
the class ArendeServiceImpl method processIncomingMessage.
@Override
public Arende processIncomingMessage(Arende arende) {
if (arendeRepository.findOneByMeddelandeId(arende.getMeddelandeId()) != null) {
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.INVALID_STATE, "meddelandeId not unique");
}
Utkast utkast = utkastRepository.findOne(arende.getIntygsId());
validateArende(arende.getIntygsId(), utkast);
ArendeConverter.decorateArendeFromUtkast(arende, utkast, LocalDateTime.now(systemClock), hsaEmployeeService);
updateRelated(arende);
monitoringLog.logArendeReceived(arende.getIntygsId(), utkast.getIntygsTyp(), utkast.getEnhetsId(), arende.getAmne(), arende.getKomplettering().stream().map(MedicinsktArende::getFrageId).collect(Collectors.toList()), arende.getSvarPaId() != null);
Arende saved = arendeRepository.save(arende);
if (ArendeAmne.PAMINN == saved.getAmne() || saved.getSvarPaId() == null) {
notificationService.sendNotificationForQuestionReceived(saved);
} else {
notificationService.sendNotificationForAnswerRecieved(saved);
}
return saved;
}
use of se.inera.intyg.webcert.persistence.arende.model.Arende in project webcert by sklintyg.
the class ArendeServiceImpl method setForwarded.
@Override
@Transactional
public List<ArendeConversationView> setForwarded(String intygsId) {
WebCertUser user = webcertUserService.getUser();
List<Arende> arendenToForward = arendeRepository.save(arendeRepository.findByIntygsId(intygsId).stream().filter(isCorrectEnhet(user)).filter(isQuestion()).peek(arende -> authoritiesValidator.given(user, arende.getIntygTyp()).features(AuthoritiesConstants.FEATURE_HANTERA_FRAGOR).privilege(AuthoritiesConstants.PRIVILEGE_VIDAREBEFORDRA_FRAGASVAR).orThrow()).peek(Arende::setArendeToVidareBerordrat).collect(Collectors.toList()));
if (arendenToForward.isEmpty()) {
throw new WebCertServiceException(WebCertServiceErrorCodeEnum.DATA_NOT_FOUND, "Could not find any arende related to IntygsId: " + intygsId);
}
return getArendeConversationViewList(intygsId, arendenToForward);
}
Aggregations