use of de.symeda.sormas.ui.utils.CssStyles.LABEL_WHITE_SPACE_NORMAL in project SORMAS-Project by hzi-braunschweig.
the class EventDataForm method addFields.
@Override
protected void addFields() {
if (isCreateForm == null) {
return;
}
Label eventDataHeadingLabel = new Label(I18nProperties.getString(Strings.headingEventData));
eventDataHeadingLabel.addStyleName(H3);
getContent().addComponent(eventDataHeadingLabel, EVENT_DATA_HEADING_LOC);
Label informationSourceHeadingLabel = new Label(I18nProperties.getString(Strings.headingInformationSource));
informationSourceHeadingLabel.addStyleName(H3);
getContent().addComponent(informationSourceHeadingLabel, INFORMATION_SOURCE_HEADING_LOC);
Label locationHeadingLabel = new Label(I18nProperties.getString(Strings.headingLocation));
locationHeadingLabel.addStyleName(H3);
getContent().addComponent(locationHeadingLabel, LOCATION_HEADING_LOC);
addField(EventDto.UUID, TextField.class);
ComboBox diseaseField = addDiseaseField(EventDto.DISEASE, false, isCreateForm);
addField(EventDto.DISEASE_DETAILS, TextField.class);
ComboBox diseaseVariantField = addField(EventDto.DISEASE_VARIANT, ComboBox.class);
diseaseVariantField.setNullSelectionAllowed(true);
addFields(EventDto.EXTERNAL_ID);
TextField diseaseVariantDetailsField = addField(EventDto.DISEASE_VARIANT_DETAILS, TextField.class);
diseaseVariantDetailsField.setVisible(false);
TextField externalTokenField = addField(EventDto.EXTERNAL_TOKEN);
Label externalTokenWarningLabel = new Label(I18nProperties.getString(Strings.messageEventExternalTokenWarning));
externalTokenWarningLabel.addStyleNames(VSPACE_3, LABEL_WHITE_SPACE_NORMAL);
getContent().addComponent(externalTokenWarningLabel, EXTERNAL_TOKEN_WARNING_LOC);
addField(EventDto.INTERNAL_TOKEN);
DateTimeField startDate = addField(EventDto.START_DATE, DateTimeField.class);
CheckBox multiDayCheckbox = addField(EventDto.MULTI_DAY_EVENT, CheckBox.class);
DateTimeField endDate = addField(EventDto.END_DATE, DateTimeField.class);
initEventDateValidation(startDate, endDate, multiDayCheckbox);
addField(EventDto.EVENT_STATUS, NullableOptionGroup.class);
addField(EventDto.RISK_LEVEL);
ComboBox specificRiskField = addField(EventDto.SPECIFIC_RISK, ComboBox.class);
specificRiskField.setNullSelectionAllowed(true);
addField(EventDto.EVENT_MANAGEMENT_STATUS, NullableOptionGroup.class);
addField(EventDto.EVENT_IDENTIFICATION_SOURCE, NullableOptionGroup.class);
addField(EventDto.EVENT_INVESTIGATION_STATUS, NullableOptionGroup.class);
addField(EventDto.EVENT_INVESTIGATION_START_DATE, DateField.class);
addField(EventDto.EVENT_INVESTIGATION_END_DATE, DateField.class);
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(EventDto.EVENT_INVESTIGATION_START_DATE, EventDto.EVENT_INVESTIGATION_END_DATE), EventDto.EVENT_INVESTIGATION_STATUS, Arrays.asList(EventInvestigationStatus.ONGOING, EventInvestigationStatus.DONE, EventInvestigationStatus.DISCARDED), true);
TextField title = addField(EventDto.EVENT_TITLE, TextField.class);
title.addStyleName(CssStyles.SOFT_REQUIRED);
TextArea descriptionField = addField(EventDto.EVENT_DESC, TextArea.class, new ResizableTextAreaWrapper<>());
descriptionField.setRows(2);
descriptionField.setDescription(I18nProperties.getPrefixDescription(EventDto.I18N_PREFIX, EventDto.EVENT_DESC, "") + "\n" + I18nProperties.getDescription(Descriptions.descGdpr));
addField(EventDto.DISEASE_TRANSMISSION_MODE, ComboBox.class);
addField(EventDto.NOSOCOMIAL, NullableOptionGroup.class);
addFields(EventDto.HUMAN_TRANSMISSION_MODE, EventDto.INFECTION_PATH_CERTAINTY);
addFields(EventDto.PARENTERAL_TRANSMISSION_MODE, EventDto.MEDICALLY_ASSOCIATED_TRANSMISSION_MODE);
final NullableOptionGroup epidemiologicalEvidence = addField(EventDto.EPIDEMIOLOGICAL_EVIDENCE, NullableOptionGroup.class);
final NullableOptionGroup laboratoryDiagnosticEvidence = addField(EventDto.LABORATORY_DIAGNOSTIC_EVIDENCE, NullableOptionGroup.class);
epidemiologicalEvidenceCheckBoxTree = new EpidemiologicalEvidenceCheckBoxTree(Arrays.stream(EpidemiologicalEvidenceDetail.values()).map(epidemiologicalEvidenceDetail -> epidemiologicalEvidenceDetailToCheckBoxElement(epidemiologicalEvidenceDetail)).collect(Collectors.toList()));
getContent().addComponent(epidemiologicalEvidenceCheckBoxTree, EventDto.EPIDEMIOLOGICAL_EVIDENCE_DETAILS);
epidemiologicalEvidenceCheckBoxTree.setVisible(false);
laboratoryDiagnosticEvidenceCheckBoxTree = new LaboratoryDiagnosticEvidenceCheckBoxTree(Arrays.stream(LaboratoryDiagnosticEvidenceDetail.values()).map(laboratoryDiagnosticEvidenceDetail -> laboratoryDiagnosticEvidenceDetailToCheckBoxElement(laboratoryDiagnosticEvidenceDetail)).collect(Collectors.toList()));
getContent().addComponent(laboratoryDiagnosticEvidenceCheckBoxTree, EventDto.LABORATORY_DIAGNOSTIC_EVIDENCE_DETAILS);
laboratoryDiagnosticEvidenceCheckBoxTree.setVisible(false);
DateField evolutionDateField = addField(EventDto.EVOLUTION_DATE, DateField.class);
TextField evolutionCommentField = addField(EventDto.EVOLUTION_COMMENT, TextField.class);
Field<?> statusField = getField(EventDto.EVENT_STATUS);
statusField.addValueChangeListener(e -> {
if (statusField.getValue() == null) {
return;
}
EventStatus eventStatus = (EventStatus) statusField.getValue();
// The status will be used to modify the caption of the field
// However we don't want to have somthing like "Dropped evolution date"
// So let's ignore the DROPPED status and use the Event entity caption instead
String statusCaption;
if (eventStatus == EventStatus.DROPPED) {
statusCaption = I18nProperties.getCaption(EVENT_ENTITY);
} else {
statusCaption = I18nProperties.getEnumCaption(eventStatus);
}
evolutionDateField.setCaption(String.format(I18nProperties.getCaption(EVOLUTION_DATE_WITH_STATUS), statusCaption));
evolutionCommentField.setCaption(String.format(I18nProperties.getCaption(EVOLUTION_COMMENT_WITH_STATUS), statusCaption));
});
FieldHelper.setVisibleWhenSourceNotNull(getFieldGroup(), Collections.singletonList(EventDto.EVOLUTION_COMMENT), EventDto.EVOLUTION_DATE, true);
ComboBox typeOfPlace = addField(EventDto.TYPE_OF_PLACE, ComboBox.class);
typeOfPlace.setNullSelectionAllowed(true);
addField(EventDto.TYPE_OF_PLACE_TEXT, TextField.class);
addField(EventDto.WORK_ENVIRONMENT);
ComboBox meansOfTransport = addField(EventDto.MEANS_OF_TRANSPORT);
TextField connectionNumber = addField(EventDto.CONNECTION_NUMBER);
DateField travelDate = addField(EventDto.TRAVEL_DATE);
FieldHelper.setVisibleWhen(getFieldGroup(), Collections.singletonList(EventDto.MEANS_OF_TRANSPORT), EventDto.TYPE_OF_PLACE, Collections.singletonList(TypeOfPlace.MEANS_OF_TRANSPORT), true);
TextField meansOfTransportDetails = addField(EventDto.MEANS_OF_TRANSPORT_DETAILS);
FieldHelper.setVisibleWhen(getFieldGroup(), Collections.singletonList(EventDto.MEANS_OF_TRANSPORT_DETAILS), EventDto.MEANS_OF_TRANSPORT, Collections.singletonList(MeansOfTransport.OTHER), true);
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(EventDto.CONNECTION_NUMBER, EventDto.TRAVEL_DATE), EventDto.TYPE_OF_PLACE, Collections.singletonList(TypeOfPlace.MEANS_OF_TRANSPORT), true);
getField(EventDto.MEANS_OF_TRANSPORT).addValueChangeListener(e -> {
if (e.getProperty().getValue() == MeansOfTransport.PLANE) {
getField(EventDto.CONNECTION_NUMBER).setCaption(I18nProperties.getCaption(Captions.exposureFlightNumber));
} else {
getField(EventDto.CONNECTION_NUMBER).setCaption(I18nProperties.getPrefixCaption(EventDto.I18N_PREFIX, EventDto.CONNECTION_NUMBER));
}
});
DateField reportDate = addField(EventDto.REPORT_DATE_TIME, DateField.class);
addField(EventDto.REPORTING_USER, ComboBox.class);
addField(EventDto.TRANSREGIONAL_OUTBREAK, NullableOptionGroup.class);
ComboBox srcType = addField(EventDto.SRC_TYPE);
TextField srcFirstName = addField(EventDto.SRC_FIRST_NAME, TextField.class);
TextField srcLastName = addField(EventDto.SRC_LAST_NAME, TextField.class);
TextField srcTelNo = addField(EventDto.SRC_TEL_NO, TextField.class);
addField(EventDto.SRC_EMAIL, TextField.class);
TextField srcMediaWebsite = addField(EventDto.SRC_MEDIA_WEBSITE, TextField.class);
TextField srcMediaName = addField(EventDto.SRC_MEDIA_NAME, TextField.class);
TextArea srcMediaDetails = addField(EventDto.SRC_MEDIA_DETAILS, TextArea.class);
srcMediaDetails.setRows(4);
ComboBox srcInstitutionalPartnerType = addField(EventDto.SRC_INSTITUTIONAL_PARTNER_TYPE);
FieldHelper.setVisibleWhen(getFieldGroup(), Collections.singletonList(EventDto.SRC_INSTITUTIONAL_PARTNER_TYPE), EventDto.SRC_TYPE, Collections.singletonList(EventSourceType.INSTITUTIONAL_PARTNER), true);
TextField srcInstitutionalPartnerTypeDetails = addField(EventDto.SRC_INSTITUTIONAL_PARTNER_TYPE_DETAILS);
FieldHelper.setVisibleWhen(getFieldGroup(), Collections.singletonList(EventDto.SRC_INSTITUTIONAL_PARTNER_TYPE_DETAILS), EventDto.SRC_INSTITUTIONAL_PARTNER_TYPE, Collections.singletonList(InstitutionalPartnerType.OTHER), true);
addField(EventDto.EVENT_LOCATION, new LocationEditForm(fieldVisibilityCheckers, createFieldAccessCheckers(isPseudonymized, false))).setCaption(null);
locationForm = (LocationEditForm) getFieldGroup().getField(EventDto.EVENT_LOCATION);
locationForm.setDistrictRequiredOnDefaultCountry(true);
ComboBox regionField = (ComboBox) locationForm.getFieldGroup().getField(LocationDto.REGION);
ComboBox districtField = (ComboBox) locationForm.getFieldGroup().getField(LocationDto.DISTRICT);
ComboBox responsibleUserField = addField(EventDto.RESPONSIBLE_USER, ComboBox.class);
responsibleUserField.setNullSelectionAllowed(true);
if (isCreateForm) {
locationForm.hideValidationUntilNextCommit();
}
setReadOnly(true, EventDto.UUID, EventDto.REPORTING_USER);
initializeVisibilitiesAndAllowedVisibilities();
initializeAccessAndAllowedAccesses();
FieldHelper.setVisibleWhen(getFieldGroup(), EventDto.WORK_ENVIRONMENT, locationForm.getFacilityTypeGroup(), Collections.singletonList(FacilityTypeGroup.WORKING_PLACE), true);
FieldHelper.setVisibleWhen(getFieldGroup(), Collections.singletonList(EventDto.DISEASE_DETAILS), EventDto.DISEASE, Collections.singletonList(Disease.OTHER), true);
FieldHelper.setRequiredWhen(getFieldGroup(), EventDto.DISEASE, Collections.singletonList(EventDto.DISEASE_DETAILS), Collections.singletonList(Disease.OTHER));
// Customizable enum fields visibilities
diseaseVariantField.setVisible(false);
diseaseField.addValueChangeListener((ValueChangeListener) valueChangeEvent -> {
Disease disease = (Disease) valueChangeEvent.getProperty().getValue();
List<DiseaseVariant> diseaseVariants = FacadeProvider.getCustomizableEnumFacade().getEnumValues(CustomizableEnumType.DISEASE_VARIANT, disease);
FieldHelper.updateItems(diseaseVariantField, diseaseVariants);
diseaseVariantField.setVisible(disease != null && CollectionUtils.isNotEmpty(diseaseVariants));
List<SpecificRisk> specificRiskValues = FacadeProvider.getCustomizableEnumFacade().getEnumValues(CustomizableEnumType.SPECIFIC_EVENT_RISK, disease);
FieldHelper.updateItems(specificRiskField, specificRiskValues);
specificRiskField.setVisible(isVisibleAllowed(EventDto.SPECIFIC_RISK) && CollectionUtils.isNotEmpty(specificRiskValues));
});
diseaseVariantField.addValueChangeListener(e -> {
DiseaseVariant diseaseVariant = (DiseaseVariant) e.getProperty().getValue();
diseaseVariantDetailsField.setVisible(diseaseVariant != null && diseaseVariant.matchPropertyValue(DiseaseVariant.HAS_DETAILS, true));
});
setRequired(true, EventDto.EVENT_STATUS, EventDto.UUID, EventDto.EVENT_TITLE, EventDto.REPORT_DATE_TIME, EventDto.REPORTING_USER);
reportDate.addValidator(new DateComparisonValidator(reportDate, startDate, false, false, I18nProperties.getValidationError(Validations.afterDate, reportDate.getCaption(), startDate.getCaption())));
startDate.addValidator(new DateComparisonValidator(startDate, reportDate, true, false, I18nProperties.getValidationError(Validations.beforeDate, startDate.getCaption(), reportDate.getCaption())));
FieldHelper.setVisibleWhen(getFieldGroup(), EventDto.END_DATE, EventDto.MULTI_DAY_EVENT, Collections.singletonList(true), true);
FieldHelper.setCaptionWhen(multiDayCheckbox, startDate, false, I18nProperties.getCaption(Captions.singleDayEventDate), I18nProperties.getCaption(Captions.Event_startDate));
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(EventDto.NOSOCOMIAL, EventDto.TRANSREGIONAL_OUTBREAK, EventDto.DISEASE_TRANSMISSION_MODE), EventDto.EVENT_STATUS, Collections.singletonList(EventStatus.CLUSTER), true);
if (isVisibleAllowed(EventDto.INFECTION_PATH_CERTAINTY)) {
FieldHelper.setVisibleWhen(getFieldGroup(), EventDto.INFECTION_PATH_CERTAINTY, EventDto.NOSOCOMIAL, Collections.singletonList(YesNoUnknown.YES), true);
}
if (isVisibleAllowed(EventDto.HUMAN_TRANSMISSION_MODE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), EventDto.HUMAN_TRANSMISSION_MODE, EventDto.DISEASE_TRANSMISSION_MODE, Collections.singletonList(DiseaseTransmissionMode.HUMAN_TO_HUMAN), true);
}
if (isVisibleAllowed(EventDto.PARENTERAL_TRANSMISSION_MODE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), EventDto.PARENTERAL_TRANSMISSION_MODE, EventDto.HUMAN_TRANSMISSION_MODE, Collections.singletonList(HumanTransmissionMode.PARENTERAL), true);
}
if (isVisibleAllowed(EventDto.MEDICALLY_ASSOCIATED_TRANSMISSION_MODE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), EventDto.MEDICALLY_ASSOCIATED_TRANSMISSION_MODE, EventDto.PARENTERAL_TRANSMISSION_MODE, Collections.singletonList(ParenteralTransmissionMode.MEDICALLY_ASSOCIATED), true);
}
if (isVisibleAllowed(EventDto.EPIDEMIOLOGICAL_EVIDENCE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), EventDto.EPIDEMIOLOGICAL_EVIDENCE, EventDto.DISEASE_TRANSMISSION_MODE, Collections.singletonList(DiseaseTransmissionMode.HUMAN_TO_HUMAN), true);
epidemiologicalEvidence.addValueChangeListener(valueChangeEvent -> {
if (((NullableOptionGroup) valueChangeEvent.getProperty()).getNullableValue() == YesNoUnknown.YES) {
epidemiologicalEvidenceCheckBoxTree.setVisible(true);
} else {
epidemiologicalEvidenceCheckBoxTree.clearCheckBoxTree();
epidemiologicalEvidenceCheckBoxTree.setVisible(false);
}
});
}
if (isVisibleAllowed(EventDto.LABORATORY_DIAGNOSTIC_EVIDENCE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), EventDto.LABORATORY_DIAGNOSTIC_EVIDENCE, EventDto.DISEASE_TRANSMISSION_MODE, Collections.singletonList(DiseaseTransmissionMode.HUMAN_TO_HUMAN), true);
laboratoryDiagnosticEvidence.addValueChangeListener(valueChangeEvent -> {
if (((NullableOptionGroup) valueChangeEvent.getProperty()).getNullableValue() == YesNoUnknown.YES) {
laboratoryDiagnosticEvidenceCheckBoxTree.setVisible(true);
} else {
laboratoryDiagnosticEvidenceCheckBoxTree.clearCheckBoxTree();
laboratoryDiagnosticEvidenceCheckBoxTree.setVisible(false);
}
});
}
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(EventDto.SRC_FIRST_NAME, EventDto.SRC_LAST_NAME, EventDto.SRC_TEL_NO, EventDto.SRC_EMAIL), EventDto.SRC_TYPE, Arrays.asList(EventSourceType.HOTLINE_PERSON, EventSourceType.INSTITUTIONAL_PARTNER), true);
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(EventDto.SRC_MEDIA_WEBSITE, EventDto.SRC_MEDIA_NAME, EventDto.SRC_MEDIA_DETAILS), EventDto.SRC_TYPE, Collections.singletonList(EventSourceType.MEDIA_NEWS), true);
FieldHelper.setVisibleWhen(getFieldGroup(), EventDto.TYPE_OF_PLACE_TEXT, EventDto.TYPE_OF_PLACE, Collections.singletonList(TypeOfPlace.OTHER), true);
setTypeOfPlaceTextRequirement();
locationForm.setFacilityFieldsVisible(getField(EventDto.TYPE_OF_PLACE).getValue() == TypeOfPlace.FACILITY, true);
typeOfPlace.addValueChangeListener(e -> locationForm.setFacilityFieldsVisible(e.getProperty().getValue() == TypeOfPlace.FACILITY, true));
regionField.addValueChangeListener(e -> {
RegionReferenceDto region = (RegionReferenceDto) regionField.getValue();
if (region != null) {
responsibleUserSurveillanceSupervisors = FacadeProvider.getUserFacade().getUsersByRegionAndRoles(region, UserRole.SURVEILLANCE_SUPERVISOR);
} else {
responsibleUserSurveillanceSupervisors.clear();
}
});
districtField.addValueChangeListener(e -> {
DistrictReferenceDto district = (DistrictReferenceDto) districtField.getValue();
if (district != null) {
List<UserReferenceDto> currentDistrictSurveillanceOfficers = FacadeProvider.getUserFacade().getUserRefsByDistrict(district, false, UserRole.SURVEILLANCE_OFFICER);
List<UserReferenceDto> responsibleUsers = new ArrayList<>();
responsibleUsers.addAll(currentDistrictSurveillanceOfficers);
responsibleUsers.addAll(responsibleUserSurveillanceSupervisors);
FieldHelper.updateItems(responsibleUserField, responsibleUsers);
} else {
responsibleUserField.removeAllItems();
}
});
FieldHelper.addSoftRequiredStyle(startDate, endDate, typeOfPlace, meansOfTransport, meansOfTransportDetails, connectionNumber, travelDate, responsibleUserField, srcType, srcInstitutionalPartnerType, srcInstitutionalPartnerTypeDetails, srcFirstName, srcLastName, srcTelNo, srcMediaWebsite, srcMediaName);
// Make external ID field read-only when SORMAS is connected to a SurvNet instance
if (StringUtils.isNotEmpty(FacadeProvider.getConfigFacade().getExternalSurveillanceToolGatewayUrl())) {
setEnabled(false, EventDto.EXTERNAL_ID);
((TextField) getField(EventDto.EXTERNAL_ID)).setInputPrompt(I18nProperties.getString(Strings.promptExternalIdExternalSurveillanceTool));
}
addValueChangeListener((e) -> {
ValidationUtils.initComponentErrorValidator(externalTokenField, getValue().getExternalToken(), Validations.duplicateExternalToken, externalTokenWarningLabel, (externalToken) -> FacadeProvider.getEventFacade().doesExternalTokenExist(externalToken, getValue().getUuid()));
epidemiologicalEvidenceCheckBoxTree.initCheckboxes();
laboratoryDiagnosticEvidenceCheckBoxTree.initCheckboxes();
// Initialize specific risk field if disease is null
if (getValue().getDisease() == null) {
List<SpecificRisk> specificRiskValues = FacadeProvider.getCustomizableEnumFacade().getEnumValues(CustomizableEnumType.SPECIFIC_EVENT_RISK, null);
FieldHelper.updateItems(specificRiskField, specificRiskValues);
specificRiskField.setVisible(isVisibleAllowed(EventDto.SPECIFIC_RISK) && CollectionUtils.isNotEmpty(specificRiskValues));
}
});
}
use of de.symeda.sormas.ui.utils.CssStyles.LABEL_WHITE_SPACE_NORMAL in project SORMAS-Project by hzi-braunschweig.
the class CaseDataForm method addFields.
@SuppressWarnings("deprecation")
@Override
protected void addFields() {
if (person == null || disease == null) {
return;
}
Label caseDataHeadingLabel = new Label(I18nProperties.getString(Strings.headingCaseData));
caseDataHeadingLabel.addStyleName(H3);
getContent().addComponent(caseDataHeadingLabel, CASE_DATA_HEADING_LOC);
if (caseFollowUpEnabled) {
Label followUpStatusHeadingLabel = new Label(I18nProperties.getString(Strings.headingFollowUpStatus));
followUpStatusHeadingLabel.addStyleName(H3);
getContent().addComponent(followUpStatusHeadingLabel, FOLLOW_UP_STATUS_HEADING_LOC);
}
// Add fields
DateField reportDate = addField(CaseDataDto.REPORT_DATE, DateField.class);
addFields(CaseDataDto.UUID, CaseDataDto.REPORTING_USER, CaseDataDto.DISTRICT_LEVEL_DATE, CaseDataDto.REGION_LEVEL_DATE, CaseDataDto.NATIONAL_LEVEL_DATE, CaseDataDto.CLASSIFICATION_DATE, CaseDataDto.CLASSIFICATION_USER, CaseDataDto.CLASSIFICATION_COMMENT, CaseDataDto.NOTIFYING_CLINIC, CaseDataDto.NOTIFYING_CLINIC_DETAILS, CaseDataDto.CLINICIAN_NAME, CaseDataDto.CLINICIAN_PHONE, CaseDataDto.CLINICIAN_EMAIL);
TextField epidField = addField(CaseDataDto.EPID_NUMBER, TextField.class);
epidField.setInvalidCommitted(true);
epidField.setMaxLength(24);
style(epidField, ERROR_COLOR_PRIMARY);
// Button to automatically assign a new epid number
Button assignNewEpidNumberButton = ButtonHelper.createButton(Captions.actionAssignNewEpidNumber, e -> epidField.setValue(FacadeProvider.getCaseFacade().generateEpidNumber(getValue())), ValoTheme.BUTTON_DANGER, FORCE_CAPTION);
getContent().addComponent(assignNewEpidNumberButton, ASSIGN_NEW_EPID_NUMBER_LOC);
assignNewEpidNumberButton.setVisible(false);
Label epidNumberWarningLabel = new Label(I18nProperties.getString(Strings.messageEpidNumberWarning));
epidNumberWarningLabel.addStyleName(VSPACE_3);
addField(CaseDataDto.EXTERNAL_ID, TextField.class);
if (FacadeProvider.getExternalSurveillanceToolFacade().isFeatureEnabled()) {
CheckBox dontShareCheckbox = addField(CaseDataDto.DONT_SHARE_WITH_REPORTING_TOOL, CheckBox.class);
CaseFormHelper.addDontShareWithReportingTool(getContent(), () -> dontShareCheckbox, DONT_SHARE_WARNING_LOC);
}
TextField externalTokenField = addField(CaseDataDto.EXTERNAL_TOKEN, TextField.class);
Label externalTokenWarningLabel = new Label(I18nProperties.getString(Strings.messageCaseExternalTokenWarning));
externalTokenWarningLabel.addStyleNames(VSPACE_3, LABEL_WHITE_SPACE_NORMAL);
getContent().addComponent(externalTokenWarningLabel, EXTERNAL_TOKEN_WARNING_LOC);
addField(CaseDataDto.INTERNAL_TOKEN, TextField.class);
addField(CaseDataDto.INVESTIGATION_STATUS, NullableOptionGroup.class);
addField(CaseDataDto.OUTCOME, NullableOptionGroup.class);
addField(CaseDataDto.BLOOD_ORGAN_OR_TISSUE_DONATED, NullableOptionGroup.class);
addField(CaseDataDto.SEQUELAE, NullableOptionGroup.class);
addFields(CaseDataDto.INVESTIGATED_DATE, CaseDataDto.OUTCOME_DATE, CaseDataDto.SEQUELAE_DETAILS);
addField(CaseDataDto.CASE_IDENTIFICATION_SOURCE);
addField(CaseDataDto.SCREENING_TYPE);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.SCREENING_TYPE, CaseDataDto.CASE_IDENTIFICATION_SOURCE, Collections.singletonList(CaseIdentificationSource.SCREENING), true);
ComboBox diseaseField = addDiseaseField(CaseDataDto.DISEASE, false);
ComboBox diseaseVariantField = addField(CaseDataDto.DISEASE_VARIANT, ComboBox.class);
TextField diseaseVariantDetailsField = addField(CaseDataDto.DISEASE_VARIANT_DETAILS, TextField.class);
diseaseVariantDetailsField.setVisible(false);
diseaseVariantField.setNullSelectionAllowed(true);
addField(CaseDataDto.DISEASE_DETAILS, TextField.class);
addField(CaseDataDto.PLAGUE_TYPE, NullableOptionGroup.class);
addField(CaseDataDto.DENGUE_FEVER_TYPE, NullableOptionGroup.class);
addField(CaseDataDto.RABIES_TYPE, NullableOptionGroup.class);
addField(CaseDataDto.CASE_ORIGIN, TextField.class);
quarantine = addField(CaseDataDto.QUARANTINE);
quarantine.addValueChangeListener(e -> onValueChange());
quarantineFrom = addField(CaseDataDto.QUARANTINE_FROM, DateField.class);
dfQuarantineTo = addDateField(CaseDataDto.QUARANTINE_TO, DateField.class, -1);
quarantineFrom.addValidator(new DateComparisonValidator(quarantineFrom, dfQuarantineTo, true, false, I18nProperties.getValidationError(Validations.beforeDate, quarantineFrom.getCaption(), dfQuarantineTo.getCaption())));
dfQuarantineTo.addValidator(new DateComparisonValidator(dfQuarantineTo, quarantineFrom, false, false, I18nProperties.getValidationError(Validations.afterDate, dfQuarantineTo.getCaption(), quarantineFrom.getCaption())));
quarantineChangeComment = addField(CaseDataDto.QUARANTINE_CHANGE_COMMENT);
dfPreviousQuarantineTo = addDateField(CaseDataDto.PREVIOUS_QUARANTINE_TO, DateField.class, -1);
setReadOnly(true, CaseDataDto.PREVIOUS_QUARANTINE_TO);
setVisible(false, CaseDataDto.QUARANTINE_CHANGE_COMMENT, CaseDataDto.PREVIOUS_QUARANTINE_TO);
if (isConfiguredServer(CountryHelper.COUNTRY_CODE_GERMANY)) {
final ComboBox cbCaseClassification = addField(CaseDataDto.CASE_CLASSIFICATION, ComboBox.class);
cbCaseClassification.addValidator(new GermanCaseClassificationValidator(caseUuid, I18nProperties.getValidationError(Validations.caseClassificationInvalid)));
ComboBox caseReferenceDefinition = addField(CaseDataDto.CASE_REFERENCE_DEFINITION, ComboBox.class);
caseReferenceDefinition.setReadOnly(true);
if (diseaseClassificationExists()) {
Button caseClassificationCalculationButton = ButtonHelper.createButton(Captions.caseClassificationCalculationButton, e -> {
CaseClassification classification = FacadeProvider.getCaseClassificationFacade().getClassification(getValue());
((Field<CaseClassification>) getField(CaseDataDto.CASE_CLASSIFICATION)).setValue(classification);
}, ValoTheme.BUTTON_PRIMARY, FORCE_CAPTION);
getContent().addComponent(caseClassificationCalculationButton, CASE_CLASSIFICATION_CALCULATE_BTN_LOC);
if (!UserProvider.getCurrent().hasUserRight(UserRight.CASE_CLASSIFY)) {
caseClassificationCalculationButton.setEnabled(false);
}
}
// if(cbCaseClassification.getCaption())
addField(CaseDataDto.NOT_A_CASE_REASON_NEGATIVE_TEST, CheckBox.class);
addField(CaseDataDto.NOT_A_CASE_REASON_PHYSICIAN_INFORMATION, CheckBox.class);
addField(CaseDataDto.NOT_A_CASE_REASON_DIFFERENT_PATHOGEN, CheckBox.class);
addField(CaseDataDto.NOT_A_CASE_REASON_OTHER, CheckBox.class);
addField(CaseDataDto.NOT_A_CASE_REASON_DETAILS, TextField.class);
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(CaseDataDto.NOT_A_CASE_REASON_NEGATIVE_TEST, CaseDataDto.NOT_A_CASE_REASON_PHYSICIAN_INFORMATION, CaseDataDto.NOT_A_CASE_REASON_DIFFERENT_PATHOGEN, CaseDataDto.NOT_A_CASE_REASON_OTHER), CaseDataDto.CASE_CLASSIFICATION, CaseClassification.NO_CASE, true);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.NOT_A_CASE_REASON_DETAILS, CaseDataDto.NOT_A_CASE_REASON_OTHER, true, true);
} else {
final NullableOptionGroup caseClassificationGroup = addField(CaseDataDto.CASE_CLASSIFICATION, NullableOptionGroup.class);
caseClassificationGroup.removeItem(CaseClassification.CONFIRMED_NO_SYMPTOMS);
caseClassificationGroup.removeItem(CaseClassification.CONFIRMED_UNKNOWN_SYMPTOMS);
}
boolean extendedClassification = FacadeProvider.getDiseaseConfigurationFacade().usesExtendedClassification(disease);
if (extendedClassification) {
ComboBox clinicalConfirmationCombo = addField(CaseDataDto.CLINICAL_CONFIRMATION, ComboBox.class);
ComboBox epidemiologicalConfirmationCombo = addField(CaseDataDto.EPIDEMIOLOGICAL_CONFIRMATION, ComboBox.class);
ComboBox laboratoryConfirmationCombo = addField(CaseDataDto.LABORATORY_DIAGNOSTIC_CONFIRMATION, ComboBox.class);
ComboBox caseConfirmationBasisCombo = addCustomField(CASE_CONFIRMATION_BASIS, CaseConfirmationBasis.class, ComboBox.class);
boolean extendedClassificationMulti = FacadeProvider.getDiseaseConfigurationFacade().usesExtendedClassificationMulti(disease);
if (extendedClassificationMulti) {
caseConfirmationBasisCombo.setVisible(false);
} else {
caseConfirmationBasisCombo.addValueChangeListener(field -> {
clinicalConfirmationCombo.setValue(null);
epidemiologicalConfirmationCombo.setValue(null);
laboratoryConfirmationCombo.setValue(null);
if (caseConfirmationBasisCombo.getValue() != null) {
switch((CaseConfirmationBasis) caseConfirmationBasisCombo.getValue()) {
case CLINICAL_CONFIRMATION:
clinicalConfirmationCombo.setValue(YesNoUnknown.YES);
break;
case EPIDEMIOLOGICAL_CONFIRMATION:
epidemiologicalConfirmationCombo.setValue(YesNoUnknown.YES);
break;
case LABORATORY_DIAGNOSTIC_CONFIRMATION:
laboratoryConfirmationCombo.setValue(YesNoUnknown.YES);
break;
}
}
});
FieldHelper.setVisibleWhen(getField(CaseDataDto.CASE_CLASSIFICATION), Collections.singletonList(caseConfirmationBasisCombo), Collections.singletonList(CaseClassification.CONFIRMED), true);
clinicalConfirmationCombo.setVisible(false);
epidemiologicalConfirmationCombo.setVisible(false);
laboratoryConfirmationCombo.setVisible(false);
}
}
quarantineOrderedVerbally = addField(CaseDataDto.QUARANTINE_ORDERED_VERBALLY, CheckBox.class);
CssStyles.style(quarantineOrderedVerbally, CssStyles.FORCE_CAPTION);
addField(CaseDataDto.QUARANTINE_ORDERED_VERBALLY_DATE, DateField.class);
quarantineOrderedOfficialDocument = addField(CaseDataDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT, CheckBox.class);
CssStyles.style(quarantineOrderedOfficialDocument, CssStyles.FORCE_CAPTION);
addField(CaseDataDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT_DATE, DateField.class);
CheckBox quarantineOfficialOrderSent = addField(CaseDataDto.QUARANTINE_OFFICIAL_ORDER_SENT, CheckBox.class);
CssStyles.style(quarantineOfficialOrderSent, FORCE_CAPTION);
addField(CaseDataDto.QUARANTINE_OFFICIAL_ORDER_SENT_DATE, DateField.class);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.QUARANTINE_OFFICIAL_ORDER_SENT, CaseDataDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT, Collections.singletonList(Boolean.TRUE), true);
cbQuarantineExtended = addField(CaseDataDto.QUARANTINE_EXTENDED, CheckBox.class);
cbQuarantineExtended.setEnabled(false);
cbQuarantineExtended.setVisible(false);
CssStyles.style(cbQuarantineExtended, CssStyles.FORCE_CAPTION);
cbQuarantineReduced = addField(CaseDataDto.QUARANTINE_REDUCED, CheckBox.class);
cbQuarantineReduced.setEnabled(false);
cbQuarantineReduced.setVisible(false);
CssStyles.style(cbQuarantineReduced, CssStyles.FORCE_CAPTION);
TextField quarantineHelpNeeded = addField(CaseDataDto.QUARANTINE_HELP_NEEDED, TextField.class);
quarantineHelpNeeded.setInputPrompt(I18nProperties.getString(Strings.pleaseSpecify));
TextField quarantineTypeDetails = addField(CaseDataDto.QUARANTINE_TYPE_DETAILS, TextField.class);
quarantineTypeDetails.setInputPrompt(I18nProperties.getString(Strings.pleaseSpecify));
addField(CaseDataDto.NOSOCOMIAL_OUTBREAK).addStyleNames(CssStyles.FORCE_CAPTION_CHECKBOX);
addField(CaseDataDto.INFECTION_SETTING);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.INFECTION_SETTING, CaseDataDto.NOSOCOMIAL_OUTBREAK, true, true);
// Reinfection
{
NullableOptionGroup ogReinfection = addField(CaseDataDto.RE_INFECTION, NullableOptionGroup.class);
addField(CaseDataDto.PREVIOUS_INFECTION_DATE);
ComboBox tfReinfectionStatus = addField(CaseDataDto.REINFECTION_STATUS, ComboBox.class);
tfReinfectionStatus.setReadOnly(true);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.PREVIOUS_INFECTION_DATE, CaseDataDto.RE_INFECTION, YesNoUnknown.YES, true);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.REINFECTION_STATUS, CaseDataDto.RE_INFECTION, YesNoUnknown.YES, false);
final Label reinfectionInfoLabel = new Label(VaadinIcons.EYE.getHtml(), ContentMode.HTML);
CssStyles.style(reinfectionInfoLabel, CssStyles.LABEL_XLARGE, CssStyles.VSPACE_TOP_3);
getContent().addComponent(reinfectionInfoLabel, REINFECTION_INFO_LOC);
reinfectionInfoLabel.setVisible(false);
final VerticalLayout reinfectionDetailsLeftLayout = new VerticalLayout();
CssStyles.style(reinfectionDetailsLeftLayout, CssStyles.VSPACE_3);
final VerticalLayout reinfectionDetailsRightLayout = new VerticalLayout();
CssStyles.style(reinfectionDetailsRightLayout, CssStyles.VSPACE_3);
for (ReinfectionDetailGroup group : ReinfectionDetailGroup.values()) {
CaseReinfectionCheckBoxTree reinfectionTree = new CaseReinfectionCheckBoxTree(ReinfectionDetail.values(group).stream().map(e -> new CheckBoxTree.CheckBoxElement<>(null, e)).collect(Collectors.toList()), () -> {
tfReinfectionStatus.setReadOnly(false);
tfReinfectionStatus.setValue(CaseLogic.calculateReinfectionStatus(mergeReinfectionTrees()));
tfReinfectionStatus.setReadOnly(true);
});
reinfectionTrees.put(group, reinfectionTree);
if (StringUtils.isNotBlank(group.toString())) {
Label heading = new Label(group.toString());
CssStyles.style(heading, CssStyles.H4);
if (group.ordinal() < 2) {
reinfectionDetailsLeftLayout.addComponent(heading);
} else {
reinfectionDetailsRightLayout.addComponent(heading);
}
}
if (group.ordinal() < 2) {
reinfectionDetailsLeftLayout.addComponent(reinfectionTree);
} else {
reinfectionDetailsRightLayout.addComponent(reinfectionTree);
}
}
getContent().addComponent(reinfectionDetailsLeftLayout, REINFECTION_DETAILS_COL_1_LOC);
getContent().addComponent(reinfectionDetailsRightLayout, REINFECTION_DETAILS_COL_2_LOC);
reinfectionDetailsLeftLayout.setVisible(false);
reinfectionDetailsRightLayout.setVisible(false);
ogReinfection.addValueChangeListener(e -> {
if (((NullableOptionGroup) e.getProperty()).getNullableValue() == YesNoUnknown.YES) {
PreviousCaseDto previousCase = FacadeProvider.getCaseFacade().getMostRecentPreviousCase(getValue().getPerson(), getValue().getDisease(), CaseLogic.getStartDate(getValue()));
if (previousCase != null) {
String reinfectionInfoTemplate = "<b>Previous case:</b><br/><br/>%s: %s<br/>%s: %s<br/>%s: %s<br/>%s: %s<br/>%s: %s";
String reinfectionInfo = String.format(reinfectionInfoTemplate, I18nProperties.getPrefixCaption(CaseDataDto.I18N_PREFIX, EntityDto.UUID), DataHelper.getShortUuid(previousCase.getUuid()), I18nProperties.getPrefixCaption(CaseDataDto.I18N_PREFIX, CaseDataDto.REPORT_DATE), DateHelper.formatLocalDate(previousCase.getReportDate(), I18nProperties.getUserLanguage()), I18nProperties.getPrefixCaption(CaseDataDto.I18N_PREFIX, CaseDataDto.EXTERNAL_TOKEN), DataHelper.toStringNullable(previousCase.getExternalToken()), I18nProperties.getPrefixCaption(CaseDataDto.I18N_PREFIX, CaseDataDto.DISEASE_VARIANT), DataHelper.toStringNullable(previousCase.getDiseaseVariant()), I18nProperties.getPrefixCaption(SymptomsDto.I18N_PREFIX, SymptomsDto.ONSET_DATE), previousCase.getOnsetDate() != null ? DateHelper.formatLocalDate(previousCase.getOnsetDate(), I18nProperties.getUserLanguage()) : "");
reinfectionInfoLabel.setDescription(reinfectionInfo, ContentMode.HTML);
reinfectionInfoLabel.setVisible(isVisibleAllowed(CaseDataDto.RE_INFECTION));
} else {
reinfectionInfoLabel.setDescription(null);
reinfectionInfoLabel.setVisible(false);
}
reinfectionDetailsLeftLayout.setVisible(isVisibleAllowed(CaseDataDto.RE_INFECTION));
reinfectionDetailsRightLayout.setVisible(isVisibleAllowed(CaseDataDto.RE_INFECTION));
} else {
reinfectionInfoLabel.setDescription(null);
reinfectionInfoLabel.setVisible(false);
for (CaseReinfectionCheckBoxTree reinfectionTree : reinfectionTrees.values()) {
reinfectionTree.clearCheckBoxTree();
}
reinfectionDetailsLeftLayout.setVisible(false);
reinfectionDetailsRightLayout.setVisible(false);
}
});
}
addField(CaseDataDto.QUARANTINE_HOME_POSSIBLE, NullableOptionGroup.class);
addField(CaseDataDto.QUARANTINE_HOME_POSSIBLE_COMMENT, TextField.class);
addField(CaseDataDto.QUARANTINE_HOME_SUPPLY_ENSURED, NullableOptionGroup.class);
addField(CaseDataDto.QUARANTINE_HOME_SUPPLY_ENSURED_COMMENT, TextField.class);
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(CaseDataDto.QUARANTINE_FROM, CaseDataDto.QUARANTINE_TO, CaseDataDto.QUARANTINE_HELP_NEEDED), CaseDataDto.QUARANTINE, QuarantineType.QUARANTINE_IN_EFFECT, true);
if (isConfiguredServer(CountryHelper.COUNTRY_CODE_GERMANY) || isConfiguredServer(CountryHelper.COUNTRY_CODE_SWITZERLAND)) {
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(CaseDataDto.QUARANTINE_ORDERED_VERBALLY, CaseDataDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT), CaseDataDto.QUARANTINE, QuarantineType.QUARANTINE_IN_EFFECT, true);
}
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.QUARANTINE_HOME_POSSIBLE_COMMENT, CaseDataDto.QUARANTINE_HOME_POSSIBLE, Arrays.asList(YesNoUnknown.NO), true);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.QUARANTINE_HOME_SUPPLY_ENSURED, CaseDataDto.QUARANTINE_HOME_POSSIBLE, Arrays.asList(YesNoUnknown.YES), true);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.QUARANTINE_HOME_SUPPLY_ENSURED_COMMENT, CaseDataDto.QUARANTINE_HOME_SUPPLY_ENSURED, Arrays.asList(YesNoUnknown.NO), true);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.QUARANTINE_TYPE_DETAILS, CaseDataDto.QUARANTINE, Arrays.asList(QuarantineType.OTHER), true);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.QUARANTINE_ORDERED_VERBALLY_DATE, CaseDataDto.QUARANTINE_ORDERED_VERBALLY, Arrays.asList(Boolean.TRUE), true);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT_DATE, CaseDataDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT, Arrays.asList(Boolean.TRUE), true);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.QUARANTINE_OFFICIAL_ORDER_SENT_DATE, CaseDataDto.QUARANTINE_OFFICIAL_ORDER_SENT, Collections.singletonList(Boolean.TRUE), true);
ComboBox surveillanceOfficerField = addField(CaseDataDto.SURVEILLANCE_OFFICER, ComboBox.class);
surveillanceOfficerField.setNullSelectionAllowed(true);
differentPlaceOfStayJurisdiction = addCustomField(DIFFERENT_PLACE_OF_STAY_JURISDICTION, Boolean.class, CheckBox.class);
differentPlaceOfStayJurisdiction.addStyleName(VSPACE_3);
if (UserRole.getJurisdictionLevel(UserProvider.getCurrent().getUserRoles()) == JurisdictionLevel.HEALTH_FACILITY) {
differentPlaceOfStayJurisdiction.setEnabled(false);
differentPlaceOfStayJurisdiction.setVisible(false);
}
ComboBox regionCombo = addInfrastructureField(CaseDataDto.REGION);
districtCombo = addInfrastructureField(CaseDataDto.DISTRICT);
communityCombo = addInfrastructureField(CaseDataDto.COMMUNITY);
communityCombo.setNullSelectionAllowed(true);
communityCombo.addStyleName(SOFT_REQUIRED);
FieldHelper.setVisibleWhen(differentPlaceOfStayJurisdiction, Arrays.asList(regionCombo, districtCombo, communityCombo), Collections.singletonList(Boolean.TRUE), true);
FieldHelper.setRequiredWhen(differentPlaceOfStayJurisdiction, Arrays.asList(regionCombo, districtCombo), Collections.singletonList(Boolean.TRUE), false, null);
Label placeOfStayHeadingLabel = new Label(I18nProperties.getCaption(Captions.casePlaceOfStay));
placeOfStayHeadingLabel.addStyleName(H3);
getContent().addComponent(placeOfStayHeadingLabel, PLACE_OF_STAY_HEADING_LOC);
facilityOrHome = new OptionGroup(I18nProperties.getCaption(Captions.casePlaceOfStay), TypeOfPlace.FOR_CASES);
facilityOrHome.setId("facilityOrHome");
facilityOrHome.setWidth(100, Unit.PERCENTAGE);
CssStyles.style(facilityOrHome, ValoTheme.OPTIONGROUP_HORIZONTAL);
getContent().addComponent(facilityOrHome, FACILITY_OR_HOME_LOC);
facilityTypeGroup = ComboBoxHelper.createComboBoxV7();
facilityTypeGroup.setId("typeGroup");
facilityTypeGroup.setCaption(I18nProperties.getCaption(Captions.Facility_typeGroup));
facilityTypeGroup.setWidth(100, Unit.PERCENTAGE);
facilityTypeGroup.addItems(FacilityTypeGroup.getAccomodationGroups());
facilityTypeGroup.setVisible(false);
getContent().addComponent(facilityTypeGroup, TYPE_GROUP_LOC);
facilityTypeCombo = addField(CaseDataDto.FACILITY_TYPE);
facilityCombo = addInfrastructureField(CaseDataDto.HEALTH_FACILITY);
facilityCombo.setImmediate(true);
facilityDetails = addField(CaseDataDto.HEALTH_FACILITY_DETAILS, TextField.class);
facilityDetails.setVisible(false);
regionCombo.addValueChangeListener(e -> {
RegionReferenceDto regionDto = (RegionReferenceDto) e.getProperty().getValue();
FieldHelper.updateItems(districtCombo, regionDto != null ? FacadeProvider.getDistrictFacade().getAllActiveByRegion(regionDto.getUuid()) : null);
});
districtCombo.addValueChangeListener(e -> {
DistrictReferenceDto districtDto = (DistrictReferenceDto) e.getProperty().getValue();
FieldHelper.updateItems(communityCombo, districtDto != null ? FacadeProvider.getCommunityFacade().getAllActiveByDistrict(districtDto.getUuid()) : null);
updateFacility();
});
communityCombo.addValueChangeListener(e -> updateFacility());
facilityOrHome.addValueChangeListener(e -> {
FieldHelper.removeItems(facilityCombo);
if (TypeOfPlace.FACILITY.equals(facilityOrHome.getValue())) {
// default values
if (facilityTypeGroup.getValue() == null && !facilityTypeGroup.isReadOnly()) {
facilityTypeGroup.setValue(FacilityTypeGroup.MEDICAL_FACILITY);
}
if (facilityTypeCombo.getValue() == null && FacilityTypeGroup.MEDICAL_FACILITY.equals(facilityTypeGroup.getValue()) && !facilityTypeCombo.isReadOnly()) {
facilityTypeCombo.setValue(FacilityType.HOSPITAL);
}
if (facilityTypeCombo.getValue() != null) {
updateFacility();
}
if (CaseOrigin.IN_COUNTRY.equals(getField(CaseDataDto.CASE_ORIGIN).getValue())) {
facilityCombo.setRequired(true);
}
updateFacilityDetails(facilityCombo, facilityDetails);
} else {
// switched from facility to home
if (!facilityCombo.isReadOnly()) {
FacilityReferenceDto noFacilityRef = FacadeProvider.getFacilityFacade().getByUuid(FacilityDto.NONE_FACILITY_UUID).toReference();
facilityCombo.addItem(noFacilityRef);
facilityCombo.setValue(noFacilityRef);
}
facilityTypeGroup.clear();
facilityTypeCombo.clear();
}
});
facilityTypeGroup.addValueChangeListener(e -> FieldHelper.updateEnumData(facilityTypeCombo, FacilityType.getAccommodationTypes((FacilityTypeGroup) facilityTypeGroup.getValue())));
facilityTypeCombo.addValueChangeListener(e -> updateFacility());
facilityCombo.addValueChangeListener(e -> updateFacilityDetails(facilityCombo, facilityDetails));
regionCombo.addItems(FacadeProvider.getRegionFacade().getAllActiveByServerCountry());
if (!FacadeProvider.getFeatureConfigurationFacade().isFeatureDisabled(FeatureType.NATIONAL_CASE_SHARING)) {
addField(CaseDataDto.SHARED_TO_COUNTRY, CheckBox.class);
setReadOnly(!UserProvider.getCurrent().hasUserRight(UserRight.CASE_SHARE), CaseDataDto.SHARED_TO_COUNTRY);
}
addInfrastructureField(CaseDataDto.POINT_OF_ENTRY);
addField(CaseDataDto.POINT_OF_ENTRY_DETAILS, TextField.class);
addField(CaseDataDto.PROHIBITION_TO_WORK, NullableOptionGroup.class).addStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL);
DateField prohibitionToWorkFrom = addField(CaseDataDto.PROHIBITION_TO_WORK_FROM, DateField.class);
DateField prohibitionToWorkUntil = addDateField(CaseDataDto.PROHIBITION_TO_WORK_UNTIL, DateField.class, -1);
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(CaseDataDto.PROHIBITION_TO_WORK_FROM, CaseDataDto.PROHIBITION_TO_WORK_UNTIL), CaseDataDto.PROHIBITION_TO_WORK, YesNoUnknown.YES, true);
prohibitionToWorkFrom.addValidator(new DateComparisonValidator(prohibitionToWorkFrom, prohibitionToWorkUntil, true, false, I18nProperties.getValidationError(Validations.beforeDate, prohibitionToWorkFrom.getCaption(), prohibitionToWorkUntil.getCaption())));
prohibitionToWorkUntil.addValidator(new DateComparisonValidator(prohibitionToWorkUntil, prohibitionToWorkFrom, false, false, I18nProperties.getValidationError(Validations.afterDate, prohibitionToWorkUntil.getCaption(), prohibitionToWorkFrom.getCaption())));
AccessibleTextField tfReportLat = addField(CaseDataDto.REPORT_LAT, AccessibleTextField.class);
tfReportLat.setConverter(new StringToAngularLocationConverter());
AccessibleTextField tfReportLon = addField(CaseDataDto.REPORT_LON, AccessibleTextField.class);
tfReportLon.setConverter(new StringToAngularLocationConverter());
addField(CaseDataDto.REPORT_LAT_LON_ACCURACY, TextField.class);
dfFollowUpUntil = null;
cbOverwriteFollowUpUntil = null;
if (caseFollowUpEnabled) {
addField(CaseDataDto.FOLLOW_UP_STATUS, ComboBox.class);
addField(CaseDataDto.FOLLOW_UP_STATUS_CHANGE_DATE);
addField(CaseDataDto.FOLLOW_UP_STATUS_CHANGE_USER);
addField(CaseDataDto.FOLLOW_UP_COMMENT, TextArea.class).setRows(3);
dfFollowUpUntil = addDateField(CaseDataDto.FOLLOW_UP_UNTIL, DateField.class, -1);
dfFollowUpUntil.addValueChangeListener(v -> onFollowUpUntilChanged());
tfExpectedFollowUpUntilDate = new TextField();
tfExpectedFollowUpUntilDate.setCaption(I18nProperties.getCaption(Captions.CaseData_expectedFollowUpUntil));
getContent().addComponent(tfExpectedFollowUpUntilDate, EXPECTED_FOLLOW_UP_UNTIL_DATE_LOC);
cbOverwriteFollowUpUntil = addField(ContactDto.OVERWRITE_FOLLOW_UP_UTIL, CheckBox.class);
setReadOnly(true, CaseDataDto.FOLLOW_UP_STATUS, CaseDataDto.FOLLOW_UP_STATUS_CHANGE_DATE, CaseDataDto.FOLLOW_UP_STATUS_CHANGE_USER);
FieldHelper.setRequiredWhen(getFieldGroup(), CaseDataDto.FOLLOW_UP_STATUS, Arrays.asList(CaseDataDto.FOLLOW_UP_COMMENT), Arrays.asList(FollowUpStatus.CANCELED, FollowUpStatus.LOST));
FieldHelper.setRequiredWhen(getFieldGroup(), CaseDataDto.OVERWRITE_FOLLOW_UP_UNTIL, Arrays.asList(CaseDataDto.FOLLOW_UP_UNTIL), Arrays.asList(Boolean.TRUE));
FieldHelper.setVisibleWhenSourceNotNull(getFieldGroup(), Arrays.asList(CaseDataDto.FOLLOW_UP_STATUS_CHANGE_DATE, CaseDataDto.FOLLOW_UP_STATUS_CHANGE_USER), CaseDataDto.FOLLOW_UP_STATUS_CHANGE_DATE, true);
}
if (cbOverwriteFollowUpUntil != null) {
cbOverwriteFollowUpUntil.addValueChangeListener(e -> {
if (!(Boolean) e.getProperty().getValue()) {
dfFollowUpUntil.discard();
}
});
FieldHelper.setReadOnlyWhen(getFieldGroup(), Arrays.asList(CaseDataDto.FOLLOW_UP_UNTIL), CaseDataDto.OVERWRITE_FOLLOW_UP_UNTIL, Arrays.asList(Boolean.FALSE), false, true);
}
dfQuarantineTo.addValueChangeListener(e -> onQuarantineEndChange());
this.addValueChangeListener(e -> onValueChange());
Label generalCommentLabel = new Label(I18nProperties.getPrefixCaption(CaseDataDto.I18N_PREFIX, CaseDataDto.ADDITIONAL_DETAILS));
generalCommentLabel.addStyleName(H3);
getContent().addComponent(generalCommentLabel, GENERAL_COMMENT_LOC);
TextArea additionalDetails = addField(CaseDataDto.ADDITIONAL_DETAILS, TextArea.class);
additionalDetails.setRows(6);
additionalDetails.setDescription(I18nProperties.getPrefixDescription(CaseDataDto.I18N_PREFIX, CaseDataDto.ADDITIONAL_DETAILS, "") + "\n" + I18nProperties.getDescription(Descriptions.descGdpr));
CssStyles.style(additionalDetails, CssStyles.CAPTION_HIDDEN);
addField(CaseDataDto.PREGNANT, NullableOptionGroup.class);
addField(CaseDataDto.POSTPARTUM, NullableOptionGroup.class);
addField(CaseDataDto.TRIMESTER, NullableOptionGroup.class);
addField(CaseDataDto.VACCINATION_STATUS);
addFields(CaseDataDto.SMALLPOX_VACCINATION_SCAR, CaseDataDto.SMALLPOX_VACCINATION_RECEIVED);
addDateField(CaseDataDto.SMALLPOX_LAST_VACCINATION_DATE, DateField.class, 0);
// Swiss fields
AccessibleTextField caseIdIsmField = addField(CaseDataDto.CASE_ID_ISM, AccessibleTextField.class);
caseIdIsmField.setConversionError(I18nProperties.getValidationError(Validations.onlyIntegerNumbersAllowed, caseIdIsmField.getCaption()));
if (fieldVisibilityCheckers.isVisible(CaseDataDto.class, CaseDataDto.CONTACT_TRACING_FIRST_CONTACT_TYPE)) {
Label contactTracingFirstContactHeadingLabel = new Label(I18nProperties.getString(Strings.headingContactTracingFirstContact));
contactTracingFirstContactHeadingLabel.addStyleName(H3);
getContent().addComponent(contactTracingFirstContactHeadingLabel, CONTACT_TRACING_FIRST_CONTACT_HEADER_LOC);
addFields(CaseDataDto.CONTACT_TRACING_FIRST_CONTACT_TYPE, CaseDataDto.CONTACT_TRACING_FIRST_CONTACT_DATE);
}
addField(CaseDataDto.WAS_IN_QUARANTINE_BEFORE_ISOLATION).setStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL);
addFields(CaseDataDto.QUARANTINE_REASON_BEFORE_ISOLATION, CaseDataDto.QUARANTINE_REASON_BEFORE_ISOLATION_DETAILS);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.QUARANTINE_REASON_BEFORE_ISOLATION_DETAILS, CaseDataDto.QUARANTINE_REASON_BEFORE_ISOLATION, Arrays.asList(QuarantineReason.OTHER_REASON), true);
addFields(CaseDataDto.END_OF_ISOLATION_REASON, CaseDataDto.END_OF_ISOLATION_REASON_DETAILS);
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.END_OF_ISOLATION_REASON_DETAILS, CaseDataDto.END_OF_ISOLATION_REASON, Arrays.asList(EndOfIsolationReason.OTHER), true);
// jurisdiction fields
Label jurisdictionHeadingLabel = new Label(I18nProperties.getString(Strings.headingCaseResponsibleJurisidction));
jurisdictionHeadingLabel.addStyleName(H3);
getContent().addComponent(jurisdictionHeadingLabel, RESPONSIBLE_JURISDICTION_HEADING_LOC);
ComboBox responsibleRegion = addInfrastructureField(CaseDataDto.RESPONSIBLE_REGION);
responsibleRegion.setRequired(true);
responsibleDistrict = addInfrastructureField(CaseDataDto.RESPONSIBLE_DISTRICT);
responsibleDistrict.setRequired(true);
responsibleCommunity = addInfrastructureField(CaseDataDto.RESPONSIBLE_COMMUNITY);
responsibleCommunity.setNullSelectionAllowed(true);
responsibleCommunity.addStyleName(SOFT_REQUIRED);
InfrastructureFieldsHelper.initInfrastructureFields(responsibleRegion, responsibleDistrict, responsibleCommunity);
responsibleDistrict.addValueChangeListener(e -> {
Boolean differentPlaceOfStay = differentPlaceOfStayJurisdiction.getValue();
if (differentPlaceOfStay == null || Boolean.FALSE.equals(differentPlaceOfStay)) {
updateFacility();
}
});
responsibleCommunity.addValueChangeListener((e) -> {
Boolean differentPlaceOfStay = differentPlaceOfStayJurisdiction.getValue();
if (differentPlaceOfStay == null || Boolean.FALSE.equals(differentPlaceOfStay)) {
updateFacility();
}
});
differentPlaceOfStayJurisdiction.addValueChangeListener(e -> {
if (!ignoreDifferentPlaceOfStayJurisdiction) {
updateFacility();
}
});
// Set initial visibilities & accesses
initializeVisibilitiesAndAllowedVisibilities();
initializeAccessAndAllowedAccesses();
// Set requirements that don't need visibility changes and read only status
setRequired(true, CaseDataDto.REPORT_DATE, CaseDataDto.CASE_CLASSIFICATION, CaseDataDto.INVESTIGATION_STATUS, CaseDataDto.OUTCOME, CaseDataDto.DISEASE);
setSoftRequired(true, CaseDataDto.INVESTIGATED_DATE, CaseDataDto.OUTCOME_DATE, CaseDataDto.PLAGUE_TYPE, CaseDataDto.SURVEILLANCE_OFFICER);
if (isEditableAllowed(CaseDataDto.INVESTIGATED_DATE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.INVESTIGATED_DATE, CaseDataDto.INVESTIGATION_STATUS, Arrays.asList(InvestigationStatus.DONE, InvestigationStatus.DISCARDED), true);
}
setReadOnly(true, CaseDataDto.UUID, CaseDataDto.REPORTING_USER, CaseDataDto.CLASSIFICATION_USER, CaseDataDto.CLASSIFICATION_DATE, CaseDataDto.POINT_OF_ENTRY, CaseDataDto.POINT_OF_ENTRY_DETAILS, CaseDataDto.CASE_ORIGIN);
setReadOnly(!UserProvider.getCurrent().hasUserRight(UserRight.CASE_CHANGE_DISEASE), CaseDataDto.DISEASE);
setReadOnly(!UserProvider.getCurrent().hasUserRight(UserRight.CASE_INVESTIGATE), CaseDataDto.INVESTIGATION_STATUS, CaseDataDto.INVESTIGATED_DATE);
setReadOnly(!UserProvider.getCurrent().hasUserRight(UserRight.CASE_CLASSIFY), CaseDataDto.CASE_CLASSIFICATION, CaseDataDto.OUTCOME, CaseDataDto.OUTCOME_DATE);
setReadOnly(!UserProvider.getCurrent().hasUserRight(UserRight.CASE_TRANSFER), CaseDataDto.RESPONSIBLE_REGION, CaseDataDto.RESPONSIBLE_DISTRICT, CaseDataDto.RESPONSIBLE_COMMUNITY, DIFFERENT_PLACE_OF_STAY_JURISDICTION, CaseDataDto.REGION, CaseDataDto.DISTRICT, CaseDataDto.COMMUNITY, FACILITY_OR_HOME_LOC, TYPE_GROUP_LOC, CaseDataDto.FACILITY_TYPE, CaseDataDto.HEALTH_FACILITY, CaseDataDto.HEALTH_FACILITY_DETAILS);
if (!isEditableAllowed(CaseDataDto.COMMUNITY)) {
setEnabled(false, CaseDataDto.REGION, CaseDataDto.DISTRICT);
}
if (!isEditableAllowed(CaseDataDto.RESPONSIBLE_COMMUNITY)) {
setEnabled(false, CaseDataDto.RESPONSIBLE_REGION, CaseDataDto.RESPONSIBLE_DISTRICT);
}
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.TRIMESTER, CaseDataDto.PREGNANT, Arrays.asList(YesNoUnknown.YES), true);
diseaseField.addValueChangeListener((ValueChangeListener) valueChangeEvent -> {
Disease disease = (Disease) valueChangeEvent.getProperty().getValue();
List<DiseaseVariant> diseaseVariants = FacadeProvider.getCustomizableEnumFacade().getEnumValues(CustomizableEnumType.DISEASE_VARIANT, disease);
FieldHelper.updateItems(diseaseVariantField, diseaseVariants);
diseaseVariantField.setVisible(disease != null && isVisibleAllowed(CaseDataDto.DISEASE_VARIANT) && CollectionUtils.isNotEmpty(diseaseVariants));
});
diseaseVariantField.addValueChangeListener(e -> {
DiseaseVariant diseaseVariant = (DiseaseVariant) e.getProperty().getValue();
diseaseVariantDetailsField.setVisible(diseaseVariant != null && diseaseVariant.matchPropertyValue(DiseaseVariant.HAS_DETAILS, true));
});
if (isVisibleAllowed(CaseDataDto.DISEASE_DETAILS)) {
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(CaseDataDto.DISEASE_DETAILS), CaseDataDto.DISEASE, Arrays.asList(Disease.OTHER), true);
FieldHelper.setRequiredWhen(getFieldGroup(), CaseDataDto.DISEASE, Arrays.asList(CaseDataDto.DISEASE_DETAILS), Arrays.asList(Disease.OTHER));
}
if (isVisibleAllowed(CaseDataDto.PLAGUE_TYPE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(CaseDataDto.PLAGUE_TYPE), CaseDataDto.DISEASE, Arrays.asList(Disease.PLAGUE), true);
}
if (isVisibleAllowed(CaseDataDto.DENGUE_FEVER_TYPE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(CaseDataDto.DENGUE_FEVER_TYPE), CaseDataDto.DISEASE, Arrays.asList(Disease.DENGUE), true);
}
if (isVisibleAllowed(CaseDataDto.RABIES_TYPE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(CaseDataDto.RABIES_TYPE), CaseDataDto.DISEASE, Arrays.asList(Disease.RABIES), true);
}
if (isVisibleAllowed(CaseDataDto.SMALLPOX_VACCINATION_SCAR)) {
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.SMALLPOX_VACCINATION_SCAR, CaseDataDto.SMALLPOX_VACCINATION_RECEIVED, Arrays.asList(YesNoUnknown.YES), true);
}
if (isVisibleAllowed(CaseDataDto.SMALLPOX_LAST_VACCINATION_DATE)) {
if (isVisibleAllowed(CaseDataDto.SMALLPOX_VACCINATION_RECEIVED)) {
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.SMALLPOX_LAST_VACCINATION_DATE, CaseDataDto.SMALLPOX_VACCINATION_RECEIVED, Collections.singletonList(YesNoUnknown.YES), true);
}
}
if (isVisibleAllowed(CaseDataDto.OUTCOME_DATE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.OUTCOME_DATE, CaseDataDto.OUTCOME, Arrays.asList(CaseOutcome.DECEASED, CaseOutcome.RECOVERED, CaseOutcome.UNKNOWN), true);
}
if (isVisibleAllowed(CaseDataDto.SEQUELAE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.SEQUELAE, CaseDataDto.OUTCOME, Arrays.asList(CaseOutcome.RECOVERED, CaseOutcome.UNKNOWN), true);
}
if (isVisibleAllowed(CaseDataDto.SEQUELAE_DETAILS)) {
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.SEQUELAE_DETAILS, CaseDataDto.SEQUELAE, Arrays.asList(YesNoUnknown.YES), true);
}
if (isVisibleAllowed(CaseDataDto.NOTIFYING_CLINIC_DETAILS)) {
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.NOTIFYING_CLINIC_DETAILS, CaseDataDto.NOTIFYING_CLINIC, Arrays.asList(HospitalWardType.OTHER), true);
}
FieldHelper.setVisibleWhen(facilityOrHome, Arrays.asList(facilityTypeGroup, facilityTypeCombo, facilityCombo), Collections.singletonList(TypeOfPlace.FACILITY), false);
FieldHelper.setRequiredWhen(facilityOrHome, Arrays.asList(facilityTypeGroup, facilityTypeCombo, facilityCombo), Collections.singletonList(TypeOfPlace.FACILITY), false, null);
// / CLINICIAN FIELDS
if (UserProvider.getCurrent().hasUserRight(UserRight.CASE_CLINICIAN_VIEW)) {
if (isVisibleAllowed(CaseDataDto.CLINICIAN_NAME)) {
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.CLINICIAN_NAME, CaseDataDto.FACILITY_TYPE, Arrays.asList(FacilityType.HOSPITAL, FacilityType.OTHER_MEDICAL_FACILITY), true);
}
if (isVisibleAllowed(CaseDataDto.CLINICIAN_PHONE)) {
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.CLINICIAN_PHONE, CaseDataDto.FACILITY_TYPE, Arrays.asList(FacilityType.HOSPITAL, FacilityType.OTHER_MEDICAL_FACILITY), true);
}
if (isVisibleAllowed(CaseDataDto.CLINICIAN_EMAIL)) {
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.CLINICIAN_EMAIL, CaseDataDto.FACILITY_TYPE, Arrays.asList(FacilityType.HOSPITAL, FacilityType.OTHER_MEDICAL_FACILITY), true);
}
} else {
setVisible(false, CaseDataDto.CLINICIAN_NAME, CaseDataDto.CLINICIAN_PHONE, CaseDataDto.CLINICIAN_EMAIL);
}
// Other initializations
if (disease == Disease.MONKEYPOX) {
Image smallpoxVaccinationScarImg = new Image(null, new ThemeResource("img/smallpox-vaccination-scar.jpg"));
style(smallpoxVaccinationScarImg, VSPACE_3);
getContent().addComponent(smallpoxVaccinationScarImg, SMALLPOX_VACCINATION_SCAR_IMG);
// Set up initial image visibility
getContent().getComponent(SMALLPOX_VACCINATION_SCAR_IMG).setVisible(getFieldGroup().getField(CaseDataDto.SMALLPOX_VACCINATION_RECEIVED).getValue() == YesNoUnknown.YES);
// Set up image visibility listener
getFieldGroup().getField(CaseDataDto.SMALLPOX_VACCINATION_RECEIVED).addValueChangeListener(e -> getContent().getComponent(SMALLPOX_VACCINATION_SCAR_IMG).setVisible(e.getProperty().getValue() == YesNoUnknown.YES));
}
List<String> medicalInformationFields = Arrays.asList(CaseDataDto.PREGNANT, CaseDataDto.VACCINATION_STATUS, CaseDataDto.SMALLPOX_VACCINATION_RECEIVED);
addField(CaseDataDto.HEALTH_CONDITIONS, HealthConditionsForm.class).setCaption(null);
for (String medicalInformationField : medicalInformationFields) {
if (getFieldGroup().getField(medicalInformationField).isVisible()) {
Label medicalInformationCaptionLabel = new Label(I18nProperties.getString(Strings.headingMedicalInformation));
medicalInformationCaptionLabel.addStyleName(H3);
getContent().addComponent(medicalInformationCaptionLabel, MEDICAL_INFORMATION_LOC);
break;
}
}
Label paperFormDatesLabel = new Label(I18nProperties.getString(Strings.headingPaperFormDates));
paperFormDatesLabel.addStyleName(H3);
getContent().addComponent(paperFormDatesLabel, PAPER_FORM_DATES_LOC);
// Automatic case classification rules button - invisible for other diseases
DiseaseClassificationCriteriaDto diseaseClassificationCriteria = FacadeProvider.getCaseClassificationFacade().getByDisease(disease);
if (diseaseClassificationExists()) {
Button classificationRulesButton = ButtonHelper.createIconButton(Captions.info, VaadinIcons.INFO_CIRCLE, e -> ControllerProvider.getCaseController().openClassificationRulesPopup(diseaseClassificationCriteria), ValoTheme.BUTTON_PRIMARY, FORCE_CAPTION);
getContent().addComponent(classificationRulesButton, CLASSIFICATION_RULES_LOC);
}
addValueChangeListener(e -> {
diseaseField.addValueChangeListener(new DiseaseChangeListener(diseaseField, getValue().getDisease()));
FieldHelper.updateOfficersField(surveillanceOfficerField, getValue(), UserRole.SURVEILLANCE_OFFICER);
// Replace classification user if case has been automatically classified
if (getValue().getClassificationDate() != null && getValue().getClassificationUser() == null) {
getField(CaseDataDto.CLASSIFICATION_USER).setVisible(false);
Label classifiedBySystemLabel = new Label(I18nProperties.getCaption(Captions.system));
classifiedBySystemLabel.setCaption(I18nProperties.getPrefixCaption(CaseDataDto.I18N_PREFIX, CaseDataDto.CLASSIFIED_BY));
// ensure correct formatting
GridLayout tempLayout = new GridLayout();
tempLayout.addComponent(classifiedBySystemLabel);
getContent().addComponent(tempLayout, CLASSIFIED_BY_SYSTEM_LOC);
}
updateFollowUpStatusComponents();
setEpidNumberError(epidField, assignNewEpidNumberButton, epidNumberWarningLabel, getValue().getEpidNumber());
epidField.addValueChangeListener(f -> {
setEpidNumberError(epidField, assignNewEpidNumberButton, epidNumberWarningLabel, (String) f.getProperty().getValue());
});
ValidationUtils.initComponentErrorValidator(externalTokenField, getValue().getExternalToken(), Validations.duplicateExternalToken, externalTokenWarningLabel, (externalToken) -> FacadeProvider.getCaseFacade().doesExternalTokenExist(externalToken, getValue().getUuid()));
updateFacilityOrHome();
// Set health facility/point of entry visibility based on case origin
if (getValue().getCaseOrigin() == CaseOrigin.POINT_OF_ENTRY) {
setVisible(true, CaseDataDto.POINT_OF_ENTRY);
if (getValue().getPointOfEntry() != null) {
setVisible(getValue().getPointOfEntry().isOtherPointOfEntry(), CaseDataDto.POINT_OF_ENTRY_DETAILS);
}
if (getValue().getHealthFacility() == null) {
setVisible(false, DIFFERENT_PLACE_OF_STAY_JURISDICTION, CaseDataDto.COMMUNITY, FACILITY_OR_HOME_LOC, TYPE_GROUP_LOC, CaseDataDto.FACILITY_TYPE, CaseDataDto.HEALTH_FACILITY, CaseDataDto.HEALTH_FACILITY_DETAILS);
setReadOnly(true, CaseDataDto.REGION, CaseDataDto.DISTRICT, CaseDataDto.COMMUNITY);
}
} else {
facilityOrHome.setRequired(true);
setVisible(false, CaseDataDto.POINT_OF_ENTRY, CaseDataDto.POINT_OF_ENTRY_DETAILS);
}
// take over the value that has been set based on access rights
facilityTypeGroup.setReadOnly(facilityTypeCombo.isReadOnly());
facilityOrHome.setReadOnly(facilityTypeCombo.isReadOnly());
// Hide case origin from port health users
if (UserRole.isPortHealthUser(UserProvider.getCurrent().getUserRoles())) {
setVisible(false, CaseDataDto.CASE_ORIGIN);
}
if (caseFollowUpEnabled) {
// Add follow-up until validator
FollowUpPeriodDto followUpPeriod = CaseLogic.getFollowUpStartDate(symptoms.getOnsetDate(), reportDate.getValue(), FacadeProvider.getSampleFacade().getByCaseUuids(Collections.singletonList(caseUuid)));
Date minimumFollowUpUntilDate = FollowUpLogic.calculateFollowUpUntilDate(followUpPeriod, null, FacadeProvider.getVisitFacade().getVisitsByCase(new CaseReferenceDto(caseUuid)), FacadeProvider.getDiseaseConfigurationFacade().getCaseFollowUpDuration((Disease) diseaseField.getValue()), FacadeProvider.getFeatureConfigurationFacade().isPropertyValueTrue(FeatureType.CASE_FOLLOWUP, FeatureTypeProperty.ALLOW_FREE_FOLLOW_UP_OVERWRITE)).getFollowUpEndDate();
if (FacadeProvider.getFeatureConfigurationFacade().isPropertyValueTrue(FeatureType.CASE_FOLLOWUP, FeatureTypeProperty.ALLOW_FREE_FOLLOW_UP_OVERWRITE)) {
dfFollowUpUntil.addValueChangeListener(valueChangeEvent -> {
if (DateHelper.getEndOfDay(dfFollowUpUntil.getValue()).before(minimumFollowUpUntilDate)) {
dfFollowUpUntil.setComponentError(new ErrorMessage() {
@Override
public ErrorLevel getErrorLevel() {
return ErrorLevel.INFO;
}
@Override
public String getFormattedHtmlMessage() {
return I18nProperties.getValidationError(Validations.contactFollowUpUntilDateSoftValidation, I18nProperties.getPrefixCaption(CaseDataDto.I18N_PREFIX, CaseDataDto.FOLLOW_UP_UNTIL));
}
});
}
});
} else {
dfFollowUpUntil.addValidator(new DateRangeValidator(I18nProperties.getValidationError(Validations.contactFollowUpUntilDate), minimumFollowUpUntilDate, null, Resolution.DAY));
}
}
// Overwrite visibility for quarantine fields
if (!isConfiguredServer(CountryHelper.COUNTRY_CODE_GERMANY) && !isConfiguredServer(CountryHelper.COUNTRY_CODE_SWITZERLAND)) {
setVisible(false, CaseDataDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT, CaseDataDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT_DATE, CaseDataDto.QUARANTINE_ORDERED_VERBALLY, CaseDataDto.QUARANTINE_ORDERED_VERBALLY_DATE, CaseDataDto.QUARANTINE_OFFICIAL_ORDER_SENT, CaseDataDto.QUARANTINE_OFFICIAL_ORDER_SENT_DATE);
}
// Make external ID field read-only when SORMAS is connected to a SurvNet instance
if (StringUtils.isNotEmpty(FacadeProvider.getConfigFacade().getExternalSurveillanceToolGatewayUrl())) {
setEnabled(false, CaseDataDto.EXTERNAL_ID);
((TextField) getField(CaseDataDto.EXTERNAL_ID)).setInputPrompt(I18nProperties.getString(Strings.promptExternalIdExternalSurveillanceTool));
}
for (CaseReinfectionCheckBoxTree reinfectionTree : reinfectionTrees.values()) {
reinfectionTree.initCheckboxes();
}
});
}
use of de.symeda.sormas.ui.utils.CssStyles.LABEL_WHITE_SPACE_NORMAL in project SORMAS-Project by hzi-braunschweig.
the class ContactDataForm method addFields.
@SuppressWarnings("deprecation")
@Override
protected void addFields() {
if (viewMode == null) {
return;
}
Label contactDataHeadingLabel = new Label(I18nProperties.getString(Strings.headingContactData));
contactDataHeadingLabel.addStyleName(H3);
getContent().addComponent(contactDataHeadingLabel, CONTACT_DATA_HEADING_LOC);
Label followUpStausHeadingLabel = new Label(I18nProperties.getString(Strings.headingFollowUpStatus));
followUpStausHeadingLabel.addStyleName(H3);
getContent().addComponent(followUpStausHeadingLabel, FOLLOW_UP_STATUS_HEADING_LOC);
addField(ContactDto.CONTACT_CLASSIFICATION, NullableOptionGroup.class);
addField(ContactDto.CONTACT_STATUS, NullableOptionGroup.class);
addField(ContactDto.UUID, TextField.class);
addField(ContactDto.EXTERNAL_ID, TextField.class);
TextField externalTokenField = addField(ContactDto.EXTERNAL_TOKEN, TextField.class);
Label externalTokenWarningLabel = new Label(I18nProperties.getString(Strings.messageContactExternalTokenWarning));
externalTokenWarningLabel.addStyleNames(VSPACE_3, LABEL_WHITE_SPACE_NORMAL);
getContent().addComponent(externalTokenWarningLabel, EXTERNAL_TOKEN_WARNING_LOC);
addField(ContactDto.INTERNAL_TOKEN, TextField.class);
addField(ContactDto.REPORTING_USER, ComboBox.class);
CheckBox multiDayContact = addField(ContactDto.MULTI_DAY_CONTACT, CheckBox.class);
DateField firstContactDate = addDateField(ContactDto.FIRST_CONTACT_DATE, DateField.class, 0);
DateField lastContactDate = addField(ContactDto.LAST_CONTACT_DATE, DateField.class);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.FIRST_CONTACT_DATE, ContactDto.MULTI_DAY_CONTACT, Collections.singletonList(true), true);
initContactDateValidation(firstContactDate, lastContactDate, multiDayContact);
DateField reportDate = addField(ContactDto.REPORT_DATE_TIME, DateField.class);
addInfrastructureField(ContactDto.REPORTING_DISTRICT).addItems(FacadeProvider.getDistrictFacade().getAllActiveAsReference());
addField(ContactDto.CONTACT_IDENTIFICATION_SOURCE, ComboBox.class);
TextField contactIdentificationSourceDetails = addField(ContactDto.CONTACT_IDENTIFICATION_SOURCE_DETAILS, TextField.class);
contactIdentificationSourceDetails.setInputPrompt(I18nProperties.getString(Strings.pleaseSpecify));
// contactIdentificationSourceDetails.setVisible(false);
ComboBox tracingApp = addField(ContactDto.TRACING_APP, ComboBox.class);
TextField tracingAppDetails = addField(ContactDto.TRACING_APP_DETAILS, TextField.class);
tracingAppDetails.setInputPrompt(I18nProperties.getString(Strings.pleaseSpecify));
// tracingAppDetails.setVisible(false);
if (isConfiguredServer(CountryHelper.COUNTRY_CODE_GERMANY)) {
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.CONTACT_IDENTIFICATION_SOURCE_DETAILS, ContactDto.CONTACT_IDENTIFICATION_SOURCE, Arrays.asList(ContactIdentificationSource.OTHER), true);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.TRACING_APP, ContactDto.CONTACT_IDENTIFICATION_SOURCE, Arrays.asList(ContactIdentificationSource.TRACING_APP), true);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.TRACING_APP_DETAILS, ContactDto.TRACING_APP, Arrays.asList(TracingApp.OTHER), true);
}
contactProximity = addField(ContactDto.CONTACT_PROXIMITY, NullableOptionGroup.class);
contactProximity.setCaption(I18nProperties.getCaption(Captions.Contact_contactProximityLongForm));
contactProximity.removeStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL);
if (isConfiguredServer(CountryHelper.COUNTRY_CODE_GERMANY)) {
addField(ContactDto.CONTACT_PROXIMITY_DETAILS, TextField.class);
contactCategory = addField(ContactDto.CONTACT_CATEGORY, NullableOptionGroup.class);
contactProximity.addValueChangeListener(e -> {
if (getInternalValue().getContactProximity() != e.getProperty().getValue() || contactCategory.isModified()) {
updateContactCategory((ContactProximity) contactProximity.getNullableValue());
}
});
}
ComboBox relationToCase = addField(ContactDto.RELATION_TO_CASE, ComboBox.class);
addField(ContactDto.RELATION_DESCRIPTION, TextField.class);
cbDisease = addDiseaseField(ContactDto.DISEASE, false);
cbDisease.setNullSelectionAllowed(false);
addField(ContactDto.DISEASE_DETAILS, TextField.class);
addField(ContactDto.PROHIBITION_TO_WORK, NullableOptionGroup.class).addStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL);
DateField prohibitionToWorkFrom = addField(ContactDto.PROHIBITION_TO_WORK_FROM);
DateField prohibitionToWorkUntil = addDateField(ContactDto.PROHIBITION_TO_WORK_UNTIL, DateField.class, -1);
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(ContactDto.PROHIBITION_TO_WORK_FROM, ContactDto.PROHIBITION_TO_WORK_UNTIL), ContactDto.PROHIBITION_TO_WORK, YesNoUnknown.YES, true);
prohibitionToWorkFrom.addValidator(new DateComparisonValidator(prohibitionToWorkFrom, prohibitionToWorkUntil, true, false, I18nProperties.getValidationError(Validations.beforeDate, prohibitionToWorkFrom.getCaption(), prohibitionToWorkUntil.getCaption())));
prohibitionToWorkUntil.addValidator(new DateComparisonValidator(prohibitionToWorkUntil, prohibitionToWorkFrom, false, false, I18nProperties.getValidationError(Validations.afterDate, prohibitionToWorkUntil.getCaption(), prohibitionToWorkFrom.getCaption())));
quarantine = addField(ContactDto.QUARANTINE);
quarantine.addValueChangeListener(e -> onQuarantineValueChange());
quarantineFrom = addField(ContactDto.QUARANTINE_FROM, DateField.class);
dfQuarantineTo = addDateField(ContactDto.QUARANTINE_TO, DateField.class, -1);
quarantineFrom.addValidator(new DateComparisonValidator(quarantineFrom, dfQuarantineTo, true, false, I18nProperties.getValidationError(Validations.beforeDate, quarantineFrom.getCaption(), dfQuarantineTo.getCaption())));
dfQuarantineTo.addValidator(new DateComparisonValidator(dfQuarantineTo, quarantineFrom, false, false, I18nProperties.getValidationError(Validations.afterDate, dfQuarantineTo.getCaption(), quarantineFrom.getCaption())));
quarantineChangeComment = addField(ContactDto.QUARANTINE_CHANGE_COMMENT);
dfPreviousQuarantineTo = addDateField(ContactDto.PREVIOUS_QUARANTINE_TO, DateField.class, -1);
setReadOnly(true, ContactDto.PREVIOUS_QUARANTINE_TO);
setVisible(false, ContactDto.QUARANTINE_CHANGE_COMMENT, ContactDto.PREVIOUS_QUARANTINE_TO);
quarantineOrderedVerbally = addField(ContactDto.QUARANTINE_ORDERED_VERBALLY, CheckBox.class);
CssStyles.style(quarantineOrderedVerbally, CssStyles.FORCE_CAPTION);
addField(ContactDto.QUARANTINE_ORDERED_VERBALLY_DATE, DateField.class);
quarantineOrderedOfficialDocument = addField(ContactDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT, CheckBox.class);
CssStyles.style(quarantineOrderedOfficialDocument, CssStyles.FORCE_CAPTION);
addField(ContactDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT_DATE, DateField.class);
CheckBox quarantineOfficialOrderSent = addField(ContactDto.QUARANTINE_OFFICIAL_ORDER_SENT, CheckBox.class);
CssStyles.style(quarantineOfficialOrderSent, FORCE_CAPTION);
addField(ContactDto.QUARANTINE_OFFICIAL_ORDER_SENT_DATE, DateField.class);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.QUARANTINE_OFFICIAL_ORDER_SENT, ContactDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT, Collections.singletonList(Boolean.TRUE), true);
cbQuarantineExtended = addField(ContactDto.QUARANTINE_EXTENDED, CheckBox.class);
cbQuarantineExtended.setEnabled(false);
cbQuarantineExtended.setVisible(false);
CssStyles.style(cbQuarantineExtended, CssStyles.FORCE_CAPTION);
cbQuarantineReduced = addField(ContactDto.QUARANTINE_REDUCED, CheckBox.class);
cbQuarantineReduced.setEnabled(false);
cbQuarantineReduced.setVisible(false);
CssStyles.style(cbQuarantineReduced, CssStyles.FORCE_CAPTION);
TextField quarantineHelpNeeded = addField(ContactDto.QUARANTINE_HELP_NEEDED, TextField.class);
quarantineHelpNeeded.setInputPrompt(I18nProperties.getString(Strings.pleaseSpecify));
TextField quarantineTypeDetails = addField(ContactDto.QUARANTINE_TYPE_DETAILS, TextField.class);
quarantineTypeDetails.setInputPrompt(I18nProperties.getString(Strings.pleaseSpecify));
addField(ContactDto.QUARANTINE_HOME_POSSIBLE, NullableOptionGroup.class);
addField(ContactDto.QUARANTINE_HOME_POSSIBLE_COMMENT, TextField.class);
addField(ContactDto.QUARANTINE_HOME_SUPPLY_ENSURED, NullableOptionGroup.class);
addField(ContactDto.QUARANTINE_HOME_SUPPLY_ENSURED_COMMENT, TextField.class);
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(ContactDto.QUARANTINE_FROM, ContactDto.QUARANTINE_TO, ContactDto.QUARANTINE_HELP_NEEDED), ContactDto.QUARANTINE, QuarantineType.QUARANTINE_IN_EFFECT, true);
if (isConfiguredServer(CountryHelper.COUNTRY_CODE_GERMANY) || isConfiguredServer(CountryHelper.COUNTRY_CODE_SWITZERLAND)) {
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(ContactDto.QUARANTINE_ORDERED_VERBALLY, ContactDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT), ContactDto.QUARANTINE, QuarantineType.QUARANTINE_IN_EFFECT, true);
}
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.QUARANTINE_HOME_POSSIBLE_COMMENT, ContactDto.QUARANTINE_HOME_POSSIBLE, Arrays.asList(YesNoUnknown.NO), true);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.QUARANTINE_HOME_SUPPLY_ENSURED, ContactDto.QUARANTINE_HOME_POSSIBLE, Arrays.asList(YesNoUnknown.YES), true);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.QUARANTINE_HOME_SUPPLY_ENSURED_COMMENT, ContactDto.QUARANTINE_HOME_SUPPLY_ENSURED, Arrays.asList(YesNoUnknown.NO), true);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.QUARANTINE_TYPE_DETAILS, ContactDto.QUARANTINE, Arrays.asList(QuarantineType.OTHER), true);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.QUARANTINE_ORDERED_VERBALLY_DATE, ContactDto.QUARANTINE_ORDERED_VERBALLY, Arrays.asList(Boolean.TRUE), true);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT_DATE, ContactDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT, Arrays.asList(Boolean.TRUE), true);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.QUARANTINE_OFFICIAL_ORDER_SENT_DATE, ContactDto.QUARANTINE_OFFICIAL_ORDER_SENT, Collections.singletonList(Boolean.TRUE), true);
addField(ContactDto.DESCRIPTION, TextArea.class).setRows(6);
addField(ContactDto.VACCINATION_STATUS);
addField(ContactDto.RETURNING_TRAVELER, NullableOptionGroup.class);
addField(ContactDto.CASE_ID_EXTERNAL_SYSTEM, TextField.class);
addField(ContactDto.CASE_OR_EVENT_INFORMATION, TextArea.class).setRows(4);
addField(ContactDto.FOLLOW_UP_STATUS, ComboBox.class);
addField(ContactDto.FOLLOW_UP_STATUS_CHANGE_DATE);
addField(ContactDto.FOLLOW_UP_STATUS_CHANGE_USER);
addField(ContactDto.FOLLOW_UP_COMMENT, TextArea.class).setRows(3);
dfFollowUpUntil = addDateField(ContactDto.FOLLOW_UP_UNTIL, DateField.class, -1);
dfFollowUpUntil.addValueChangeListener(v -> onFollowUpUntilChanged(v, dfQuarantineTo, cbQuarantineExtended, cbQuarantineReduced));
cbOverwriteFollowUpUntil = addField(ContactDto.OVERWRITE_FOLLOW_UP_UTIL, CheckBox.class);
cbOverwriteFollowUpUntil.addValueChangeListener(e -> {
if (!(Boolean) e.getProperty().getValue()) {
dfFollowUpUntil.discard();
}
});
dfQuarantineTo.addValueChangeListener(e -> onQuarantineEndChange());
addValueChangeListener(e -> {
ValidationUtils.initComponentErrorValidator(externalTokenField, getValue().getExternalToken(), Validations.duplicateExternalToken, externalTokenWarningLabel, (externalToken) -> FacadeProvider.getContactFacade().doesExternalTokenExist(externalToken, getValue().getUuid()));
onQuarantineValueChange();
});
ComboBox contactOfficerField = addField(ContactDto.CONTACT_OFFICER, ComboBox.class);
contactOfficerField.setNullSelectionAllowed(true);
ComboBox region = addInfrastructureField(ContactDto.REGION);
region.setDescription(I18nProperties.getPrefixDescription(ContactDto.I18N_PREFIX, ContactDto.REGION));
ComboBox district = addInfrastructureField(ContactDto.DISTRICT);
district.setDescription(I18nProperties.getPrefixDescription(ContactDto.I18N_PREFIX, ContactDto.DISTRICT));
ComboBox community = addInfrastructureField(ContactDto.COMMUNITY);
community.setDescription(I18nProperties.getPrefixDescription(ContactDto.I18N_PREFIX, ContactDto.COMMUNITY));
region.addValueChangeListener(e -> {
RegionReferenceDto regionDto = (RegionReferenceDto) e.getProperty().getValue();
FieldHelper.updateItems(district, regionDto != null ? FacadeProvider.getDistrictFacade().getAllActiveByRegion(regionDto.getUuid()) : null);
});
district.addValueChangeListener(e -> {
DistrictReferenceDto districtDto = (DistrictReferenceDto) e.getProperty().getValue();
FieldHelper.updateItems(community, districtDto != null ? FacadeProvider.getCommunityFacade().getAllActiveByDistrict(districtDto.getUuid()) : null);
List<DistrictReferenceDto> officerDistricts = new ArrayList<>();
officerDistricts.add(districtDto);
if (districtDto == null && getValue().getCaze() != null) {
CaseDataDto caseDto = FacadeProvider.getCaseFacade().getCaseDataByUuid(getValue().getCaze().getUuid());
FieldHelper.updateOfficersField(contactOfficerField, caseDto, UserRole.CONTACT_OFFICER);
} else {
FieldHelper.updateItems(contactOfficerField, districtDto != null ? FacadeProvider.getUserFacade().getUserRefsByDistrict(districtDto, false, UserRole.CONTACT_OFFICER) : null);
}
});
region.addItems(FacadeProvider.getRegionFacade().getAllActiveByServerCountry());
CheckBox cbHighPriority = addField(ContactDto.HIGH_PRIORITY, CheckBox.class);
tfExpectedFollowUpUntilDate = new TextField();
tfExpectedFollowUpUntilDate.setCaption(I18nProperties.getCaption(Captions.Contact_expectedFollowUpUntil));
getContent().addComponent(tfExpectedFollowUpUntilDate, EXPECTED_FOLLOW_UP_UNTIL_DATE_LOC);
NullableOptionGroup ogImmunosuppressiveTherapyBasicDisease = addField(ContactDto.IMMUNOSUPPRESSIVE_THERAPY_BASIC_DISEASE, NullableOptionGroup.class);
addField(ContactDto.IMMUNOSUPPRESSIVE_THERAPY_BASIC_DISEASE_DETAILS, TextField.class);
NullableOptionGroup ogCareForPeopleOver60 = addField(ContactDto.CARE_FOR_PEOPLE_OVER_60, NullableOptionGroup.class);
cbDisease.addValueChangeListener(e -> updateDiseaseConfiguration((Disease) e.getProperty().getValue()));
HealthConditionsForm clinicalCourseForm = addField(ContactDto.HEALTH_CONDITIONS, HealthConditionsForm.class);
clinicalCourseForm.setCaption(null);
Label generalCommentLabel = new Label(I18nProperties.getPrefixCaption(ContactDto.I18N_PREFIX, ContactDto.ADDITIONAL_DETAILS));
generalCommentLabel.addStyleName(H3);
getContent().addComponent(generalCommentLabel, GENERAL_COMMENT_LOC);
TextArea additionalDetails = addField(ContactDto.ADDITIONAL_DETAILS, TextArea.class);
additionalDetails.setRows(6);
additionalDetails.setDescription(I18nProperties.getPrefixDescription(ContactDto.I18N_PREFIX, ContactDto.ADDITIONAL_DETAILS, "") + "\n" + I18nProperties.getDescription(Descriptions.descGdpr));
CssStyles.style(additionalDetails, CssStyles.CAPTION_HIDDEN);
addFields(ContactDto.END_OF_QUARANTINE_REASON, ContactDto.END_OF_QUARANTINE_REASON_DETAILS);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.END_OF_QUARANTINE_REASON_DETAILS, ContactDto.END_OF_QUARANTINE_REASON, Collections.singletonList(EndOfQuarantineReason.OTHER), true);
initializeVisibilitiesAndAllowedVisibilities();
initializeAccessAndAllowedAccesses();
setReadOnly(true, ContactDto.UUID, ContactDto.REPORTING_USER, ContactDto.CONTACT_STATUS, ContactDto.FOLLOW_UP_STATUS, ContactDto.FOLLOW_UP_STATUS_CHANGE_DATE, ContactDto.FOLLOW_UP_STATUS_CHANGE_USER);
FieldHelper.setRequiredWhen(getFieldGroup(), ContactDto.FOLLOW_UP_STATUS, Arrays.asList(ContactDto.FOLLOW_UP_COMMENT), Arrays.asList(FollowUpStatus.CANCELED, FollowUpStatus.LOST));
FieldHelper.setVisibleWhenSourceNotNull(getFieldGroup(), Arrays.asList(ContactDto.FOLLOW_UP_STATUS_CHANGE_DATE, ContactDto.FOLLOW_UP_STATUS_CHANGE_USER), ContactDto.FOLLOW_UP_STATUS_CHANGE_DATE, true);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.RELATION_DESCRIPTION, ContactDto.RELATION_TO_CASE, Arrays.asList(ContactRelation.OTHER), true);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.IMMUNOSUPPRESSIVE_THERAPY_BASIC_DISEASE_DETAILS, ContactDto.IMMUNOSUPPRESSIVE_THERAPY_BASIC_DISEASE, Arrays.asList(YesNoUnknown.YES), true);
FieldHelper.setVisibleWhen(getFieldGroup(), ContactDto.DISEASE_DETAILS, ContactDto.DISEASE, Arrays.asList(Disease.OTHER), true);
FieldHelper.setRequiredWhen(getFieldGroup(), ContactDto.DISEASE, Arrays.asList(ContactDto.DISEASE_DETAILS), Arrays.asList(Disease.OTHER));
FieldHelper.setReadOnlyWhen(getFieldGroup(), Arrays.asList(ContactDto.FOLLOW_UP_UNTIL), ContactDto.OVERWRITE_FOLLOW_UP_UTIL, Arrays.asList(Boolean.FALSE), false, true);
FieldHelper.setRequiredWhen(getFieldGroup(), ContactDto.OVERWRITE_FOLLOW_UP_UTIL, Arrays.asList(ContactDto.FOLLOW_UP_UNTIL), Arrays.asList(Boolean.TRUE));
FieldHelper.setVisibleWhen(getFieldGroup(), Arrays.asList(ContactDto.FOLLOW_UP_UNTIL, ContactDto.OVERWRITE_FOLLOW_UP_UTIL), ContactDto.FOLLOW_UP_STATUS, Arrays.asList(FollowUpStatus.CANCELED, FollowUpStatus.COMPLETED, FollowUpStatus.FOLLOW_UP, FollowUpStatus.LOST), true);
initializeVisibilitiesAndAllowedVisibilities();
addValueChangeListener(e -> {
if (getValue() != null) {
CaseDataDto caseDto = null;
if (getValue().getCaze() != null) {
setVisible(false, ContactDto.DISEASE, ContactDto.CASE_ID_EXTERNAL_SYSTEM, ContactDto.CASE_OR_EVENT_INFORMATION);
caseDto = FacadeProvider.getCaseFacade().getCaseDataByUuid(getValue().getCaze().getUuid());
} else {
setRequired(true, ContactDto.DISEASE, ContactDto.REGION, ContactDto.DISTRICT);
}
updateLastContactDateValidator();
updateDiseaseConfiguration(getValue().getDisease());
updateFollowUpStatusComponents();
DistrictReferenceDto referenceDistrict = getValue().getDistrict() != null ? getValue().getDistrict() : caseDto != null ? caseDto.getDistrict() : null;
if (referenceDistrict != null) {
contactOfficerField.addItems(FacadeProvider.getUserFacade().getUserRefsByDistrict(referenceDistrict, false, UserRole.CONTACT_OFFICER));
}
getContent().removeComponent(TO_CASE_BTN_LOC);
if (getValue().getResultingCase() != null) {
// link to case
Link linkToData = ControllerProvider.getCaseController().createLinkToData(getValue().getResultingCase().getUuid(), I18nProperties.getCaption(Captions.contactOpenContactCase));
getContent().addComponent(linkToData, TO_CASE_BTN_LOC);
} else if (!ContactClassification.NO_CONTACT.equals(getValue().getContactClassification())) {
if (UserProvider.getCurrent().hasUserRight(UserRight.CONTACT_CONVERT)) {
Button toCaseButton = ButtonHelper.createButton(Captions.contactCreateContactCase, event -> {
if (!ContactClassification.CONFIRMED.equals(getValue().getContactClassification())) {
VaadinUiUtil.showSimplePopupWindow(I18nProperties.getString(Strings.headingContactConfirmationRequired), I18nProperties.getString(Strings.messageContactToCaseConfirmationRequired));
} else {
ControllerProvider.getCaseController().createFromContact(getValue());
}
}, ValoTheme.BUTTON_LINK);
getContent().addComponent(toCaseButton, TO_CASE_BTN_LOC);
}
}
if (!isConfiguredServer(CountryHelper.COUNTRY_CODE_GERMANY)) {
setVisible(false, ContactDto.IMMUNOSUPPRESSIVE_THERAPY_BASIC_DISEASE, ContactDto.IMMUNOSUPPRESSIVE_THERAPY_BASIC_DISEASE_DETAILS, ContactDto.CARE_FOR_PEOPLE_OVER_60);
} else {
ogImmunosuppressiveTherapyBasicDisease.addValueChangeListener(getHighPriorityValueChangeListener(cbHighPriority));
ogCareForPeopleOver60.addValueChangeListener(getHighPriorityValueChangeListener(cbHighPriority));
}
// Add follow-up until validator
FollowUpPeriodDto followUpPeriod = ContactLogic.getFollowUpStartDate(lastContactDate.getValue(), reportDate.getValue(), FacadeProvider.getSampleFacade().getByContactUuids(Collections.singletonList(getValue().getUuid())));
Date minimumFollowUpUntilDate = FollowUpLogic.calculateFollowUpUntilDate(followUpPeriod, null, FacadeProvider.getVisitFacade().getVisitsByContact(new ContactReferenceDto(getValue().getUuid())), FacadeProvider.getDiseaseConfigurationFacade().getFollowUpDuration(getSelectedDisease()), FacadeProvider.getFeatureConfigurationFacade().isPropertyValueTrue(FeatureType.CONTACT_TRACING, FeatureTypeProperty.ALLOW_FREE_FOLLOW_UP_OVERWRITE)).getFollowUpEndDate();
if (FacadeProvider.getFeatureConfigurationFacade().isPropertyValueTrue(FeatureType.CONTACT_TRACING, FeatureTypeProperty.ALLOW_FREE_FOLLOW_UP_OVERWRITE)) {
dfFollowUpUntil.addValueChangeListener(valueChangeEvent -> {
if (DateHelper.getEndOfDay(dfFollowUpUntil.getValue()).before(minimumFollowUpUntilDate)) {
dfFollowUpUntil.setComponentError(new ErrorMessage() {
@Override
public ErrorLevel getErrorLevel() {
return ErrorLevel.INFO;
}
@Override
public String getFormattedHtmlMessage() {
return I18nProperties.getValidationError(Validations.contactFollowUpUntilDateSoftValidation, I18nProperties.getPrefixCaption(ContactDto.I18N_PREFIX, ContactDto.FOLLOW_UP_UNTIL));
}
});
}
});
} else {
dfFollowUpUntil.addValidator(new DateRangeValidator(I18nProperties.getValidationError(Validations.contactFollowUpUntilDate), minimumFollowUpUntilDate, null, Resolution.DAY));
}
}
// Overwrite visibility for quarantine fields
if (!isConfiguredServer(CountryHelper.COUNTRY_CODE_GERMANY) && !isConfiguredServer(CountryHelper.COUNTRY_CODE_SWITZERLAND)) {
setVisible(false, ContactDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT, ContactDto.QUARANTINE_ORDERED_OFFICIAL_DOCUMENT_DATE, ContactDto.QUARANTINE_ORDERED_VERBALLY, ContactDto.QUARANTINE_ORDERED_VERBALLY_DATE, ContactDto.QUARANTINE_OFFICIAL_ORDER_SENT, ContactDto.QUARANTINE_OFFICIAL_ORDER_SENT_DATE);
}
});
setRequired(true, ContactDto.CONTACT_CLASSIFICATION, ContactDto.CONTACT_STATUS, ContactDto.REPORT_DATE_TIME);
FieldHelper.addSoftRequiredStyle(firstContactDate, lastContactDate, contactProximity, relationToCase);
}
Aggregations