Search in sources :

Example 1 with HealthConditionsForm

use of de.symeda.sormas.ui.clinicalcourse.HealthConditionsForm in project SORMAS-Project by hzi-braunschweig.

the class SormasFieldGroupFieldFactory method createField.

@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public <T extends Field> T createField(Class<?> type, Class<T> fieldType) {
    if (type.isEnum()) {
        if (// no specific fieldType defined?
        fieldType.isAssignableFrom(Field.class) && (SymptomState.class.isAssignableFrom(type) || YesNoUnknown.class.isAssignableFrom(type))) {
            NullableOptionGroup field = new NullableOptionGroup();
            field.setImmediate(true);
            populateWithEnumData(field, (Class<? extends Enum>) type);
            CssStyles.style(field, ValoTheme.OPTIONGROUP_HORIZONTAL, CssStyles.OPTIONGROUP_CAPTION_INLINE);
            return (T) field;
        } else {
            if (Disease.class.isAssignableFrom(type)) {
                fieldType = (Class<T>) ComboBox.class;
                ComboBox field = ComboBoxHelper.createComboBoxV7();
                field.setImmediate(true);
                field.setNullSelectionAllowed(true);
                populateWithDiseaseData(field);
                return (T) field;
            } else {
                if (!AbstractSelect.class.isAssignableFrom(fieldType)) {
                    fieldType = (Class<T>) ComboBox.class;
                }
                T field = super.createField(type, fieldType);
                if (field instanceof OptionGroup) {
                    CssStyles.style(field, ValoTheme.OPTIONGROUP_HORIZONTAL);
                } else if (fieldType.isAssignableFrom(NullableOptionGroup.class)) {
                    NullableOptionGroup select = new NullableOptionGroup();
                    select.setImmediate(true);
                    populateWithEnumData(select, (Class<? extends Enum>) type);
                    CssStyles.style(select, ValoTheme.OPTIONGROUP_HORIZONTAL);
                    field = (T) select;
                } else if (field instanceof ComboBox) {
                    ((ComboBox) field).setFilteringMode(FilteringMode.CONTAINS);
                    ((ComboBox) field).setNullSelectionAllowed(true);
                }
                return field;
            }
        }
    } else if (Boolean.class.isAssignableFrom(type)) {
        fieldType = CheckBox.class.isAssignableFrom(fieldType) ? (Class<T>) CheckBox.class : (Class<T>) NullableOptionGroup.class;
        return createBooleanField(fieldType);
    } else if (ComboBox.class.isAssignableFrom(fieldType) || ComboBoxWithPlaceholder.class.isAssignableFrom(fieldType)) {
        ComboBoxWithPlaceholder combo = new ComboBoxWithPlaceholder();
        combo.setImmediate(true);
        return (T) combo;
    } else if (AbstractSelect.class.isAssignableFrom(fieldType)) {
        AbstractSelect field = createCompatibleSelect((Class<? extends AbstractSelect>) fieldType);
        field.setNullSelectionAllowed(true);
        return (T) field;
    } else if (LocationEditForm.class.isAssignableFrom(fieldType)) {
        return (T) new LocationEditForm(fieldVisibilityCheckers, fieldAccessCheckers);
    } else if (HealthConditionsForm.class.isAssignableFrom(fieldType)) {
        return (T) new HealthConditionsForm(fieldVisibilityCheckers, fieldAccessCheckers);
    } else if (DateTimeField.class.isAssignableFrom(fieldType)) {
        DateTimeField field = new DateTimeField();
        field.setConverter(new SormasDefaultConverterFactory().createDateConverter(Date.class));
        return (T) field;
    } else if (DateField.class.isAssignableFrom(fieldType)) {
        DateField field = super.createField(type, DateField.class);
        field.setDateFormat(DateFormatHelper.getDateFormatPattern());
        field.setLenient(true);
        field.setConverter(new SormasDefaultConverterFactory().createDateConverter(Date.class));
        return (T) field;
    } else if (PreviousHospitalizationsField.class.isAssignableFrom(fieldType)) {
        return (T) new PreviousHospitalizationsField(fieldVisibilityCheckers, fieldAccessCheckers);
    } else if (ExposuresField.class.isAssignableFrom(fieldType)) {
        return (T) new ExposuresField(fieldVisibilityCheckers, fieldAccessCheckers);
    } else if (ActivityAsCaseField.class.isAssignableFrom(fieldType)) {
        return (T) new ActivityAsCaseField(fieldVisibilityCheckers, fieldAccessCheckers);
    } else if (LocationsField.class.isAssignableFrom(fieldType)) {
        return (T) new LocationsField(fieldVisibilityCheckers, fieldAccessCheckers);
    } else if (VaccinationsField.class.isAssignableFrom(fieldType)) {
        return (T) new VaccinationsField(fieldAccessCheckers);
    } else if (JsonForm.class.isAssignableFrom(fieldType)) {
        return (T) new JsonForm(fieldVisibilityCheckers, fieldAccessCheckers);
    } else if (fieldType.equals(Field.class)) {
        // no specific field type defined -> fallbacks
        if (Date.class.isAssignableFrom(type)) {
            DateField field = super.createField(type, DateField.class);
            field.setDateFormat(DateFormatHelper.getDateFormatPattern());
            field.setLenient(true);
            field.setConverter(new SormasDefaultConverterFactory().createDateConverter(Date.class));
            return (T) field;
        } else if (ReferenceDto.class.isAssignableFrom(type)) {
            return (T) ComboBoxHelper.createComboBoxV7();
        }
    } else if (MultiSelect.class.isAssignableFrom(fieldType)) {
        return (T) MultiSelect.create(type);
    }
    return super.createField(type, fieldType);
}
Also used : SymptomState(de.symeda.sormas.api.symptoms.SymptomState) AbstractSelect(com.vaadin.v7.ui.AbstractSelect) VaccinationsField(de.symeda.sormas.ui.vaccination.VaccinationsField) VaccinationsField(de.symeda.sormas.ui.vaccination.VaccinationsField) ExposuresField(de.symeda.sormas.ui.exposure.ExposuresField) DateField(com.vaadin.v7.ui.DateField) LocationsField(de.symeda.sormas.ui.person.LocationsField) Field(com.vaadin.v7.ui.Field) AbstractTextField(com.vaadin.v7.ui.AbstractTextField) ActivityAsCaseField(de.symeda.sormas.ui.ActivityAsCase.ActivityAsCaseField) PreviousHospitalizationsField(de.symeda.sormas.ui.hospitalization.PreviousHospitalizationsField) OptionGroup(com.vaadin.v7.ui.OptionGroup) HealthConditionsForm(de.symeda.sormas.ui.clinicalcourse.HealthConditionsForm) ExposuresField(de.symeda.sormas.ui.exposure.ExposuresField) LocationEditForm(de.symeda.sormas.ui.location.LocationEditForm) MultiSelect(de.symeda.sormas.ui.utils.components.MultiSelect) ReferenceDto(de.symeda.sormas.api.ReferenceDto) ComboBox(com.vaadin.v7.ui.ComboBox) LocationsField(de.symeda.sormas.ui.person.LocationsField) Date(java.util.Date) PreviousHospitalizationsField(de.symeda.sormas.ui.hospitalization.PreviousHospitalizationsField) ActivityAsCaseField(de.symeda.sormas.ui.ActivityAsCase.ActivityAsCaseField) JsonForm(de.symeda.sormas.ui.utils.components.JsonForm) CheckBox(com.vaadin.v7.ui.CheckBox) YesNoUnknown(de.symeda.sormas.api.utils.YesNoUnknown) DateField(com.vaadin.v7.ui.DateField)

Example 2 with HealthConditionsForm

use of de.symeda.sormas.ui.clinicalcourse.HealthConditionsForm 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);
}
Also used : FollowUpStatus(de.symeda.sormas.api.contact.FollowUpStatus) FeatureType(de.symeda.sormas.api.feature.FeatureType) HealthConditionsForm(de.symeda.sormas.ui.clinicalcourse.HealthConditionsForm) AbstractEditForm(de.symeda.sormas.ui.utils.AbstractEditForm) LAYOUT_COL_HIDE_INVSIBLE(de.symeda.sormas.ui.utils.CssStyles.LAYOUT_COL_HIDE_INVSIBLE) H3(de.symeda.sormas.ui.utils.CssStyles.H3) Arrays(java.util.Arrays) ContactRelation(de.symeda.sormas.api.contact.ContactRelation) ValidationUtils(de.symeda.sormas.ui.utils.ValidationUtils) Date(java.util.Date) CheckBox(com.vaadin.v7.ui.CheckBox) EndOfQuarantineReason(de.symeda.sormas.api.contact.EndOfQuarantineReason) I18nProperties(de.symeda.sormas.api.i18n.I18nProperties) TracingApp(de.symeda.sormas.api.contact.TracingApp) ContactProximity(de.symeda.sormas.api.contact.ContactProximity) ControllerProvider(de.symeda.sormas.ui.ControllerProvider) YesNoUnknown(de.symeda.sormas.api.utils.YesNoUnknown) CssStyles(de.symeda.sormas.ui.utils.CssStyles) VSPACE_3(de.symeda.sormas.ui.utils.CssStyles.VSPACE_3) UserRole(de.symeda.sormas.api.user.UserRole) FORCE_CAPTION(de.symeda.sormas.ui.utils.CssStyles.FORCE_CAPTION) UserProvider(de.symeda.sormas.ui.UserProvider) ValoTheme(com.vaadin.ui.themes.ValoTheme) Property(com.vaadin.v7.data.Property) ViewMode(de.symeda.sormas.ui.utils.ViewMode) Validator(com.vaadin.v7.data.Validator) ComboBox(com.vaadin.v7.ui.ComboBox) Link(com.vaadin.ui.Link) CaseDataDto(de.symeda.sormas.api.caze.CaseDataDto) Field(com.vaadin.v7.ui.Field) FieldHelper(de.symeda.sormas.ui.utils.FieldHelper) ContactClassification(de.symeda.sormas.api.contact.ContactClassification) Sets(com.google.common.collect.Sets) List(java.util.List) ContactDto(de.symeda.sormas.api.contact.ContactDto) TextField(com.vaadin.v7.ui.TextField) Descriptions(de.symeda.sormas.api.i18n.Descriptions) UiFieldAccessCheckers(de.symeda.sormas.api.utils.fieldaccess.UiFieldAccessCheckers) RegionReferenceDto(de.symeda.sormas.api.infrastructure.region.RegionReferenceDto) DateComparisonValidator(de.symeda.sormas.ui.utils.DateComparisonValidator) FollowUpPeriodDto(de.symeda.sormas.api.followup.FollowUpPeriodDto) VaadinUiUtil(de.symeda.sormas.ui.utils.VaadinUiUtil) LABEL_WHITE_SPACE_NORMAL(de.symeda.sormas.ui.utils.CssStyles.LABEL_WHITE_SPACE_NORMAL) FacadeProvider(de.symeda.sormas.api.FacadeProvider) DateHelper(de.symeda.sormas.api.utils.DateHelper) ErrorLevel(com.vaadin.shared.ui.ErrorLevel) Converter(com.vaadin.v7.data.util.converter.Converter) ArrayList(java.util.ArrayList) CaseReferenceDto(de.symeda.sormas.api.caze.CaseReferenceDto) QuarantineType(de.symeda.sormas.api.contact.QuarantineType) LayoutUtil.loc(de.symeda.sormas.ui.utils.LayoutUtil.loc) LayoutUtil.locCss(de.symeda.sormas.ui.utils.LayoutUtil.locCss) Resolution(com.vaadin.v7.shared.ui.datefield.Resolution) Label(com.vaadin.ui.Label) CountryHelper(de.symeda.sormas.api.CountryHelper) NullableOptionGroup(de.symeda.sormas.ui.utils.NullableOptionGroup) LayoutUtil.fluidRowLocs(de.symeda.sormas.ui.utils.LayoutUtil.fluidRowLocs) DateField(com.vaadin.v7.ui.DateField) ButtonHelper(de.symeda.sormas.ui.utils.ButtonHelper) ContactIdentificationSource(de.symeda.sormas.api.contact.ContactIdentificationSource) Validations(de.symeda.sormas.api.i18n.Validations) DistrictReferenceDto(de.symeda.sormas.api.infrastructure.district.DistrictReferenceDto) ContactLogic(de.symeda.sormas.api.contact.ContactLogic) ErrorMessage(com.vaadin.server.ErrorMessage) Captions(de.symeda.sormas.api.i18n.Captions) ExtendedReduced(de.symeda.sormas.api.utils.ExtendedReduced) LocalDate(org.joda.time.LocalDate) UserRight(de.symeda.sormas.api.user.UserRight) Button(com.vaadin.ui.Button) LayoutUtil(de.symeda.sormas.ui.utils.LayoutUtil) Disease(de.symeda.sormas.api.Disease) DateRangeValidator(com.vaadin.v7.data.validator.DateRangeValidator) TextArea(com.vaadin.v7.ui.TextArea) ContactCategory(de.symeda.sormas.api.contact.ContactCategory) FollowUpLogic(de.symeda.sormas.api.followup.FollowUpLogic) DiseasesConfiguration(de.symeda.sormas.api.utils.Diseases.DiseasesConfiguration) ContactReferenceDto(de.symeda.sormas.api.contact.ContactReferenceDto) FeatureTypeProperty(de.symeda.sormas.api.feature.FeatureTypeProperty) FieldVisibilityCheckers(de.symeda.sormas.api.utils.fieldvisibility.FieldVisibilityCheckers) Strings(de.symeda.sormas.api.i18n.Strings) Collections(java.util.Collections) Disease(de.symeda.sormas.api.Disease) TextArea(com.vaadin.v7.ui.TextArea) Label(com.vaadin.ui.Label) ArrayList(java.util.ArrayList) FollowUpPeriodDto(de.symeda.sormas.api.followup.FollowUpPeriodDto) HealthConditionsForm(de.symeda.sormas.ui.clinicalcourse.HealthConditionsForm) Button(com.vaadin.ui.Button) DateRangeValidator(com.vaadin.v7.data.validator.DateRangeValidator) TextField(com.vaadin.v7.ui.TextField) NullableOptionGroup(de.symeda.sormas.ui.utils.NullableOptionGroup) CaseDataDto(de.symeda.sormas.api.caze.CaseDataDto) ComboBox(com.vaadin.v7.ui.ComboBox) DistrictReferenceDto(de.symeda.sormas.api.infrastructure.district.DistrictReferenceDto) Date(java.util.Date) LocalDate(org.joda.time.LocalDate) DateComparisonValidator(de.symeda.sormas.ui.utils.DateComparisonValidator) RegionReferenceDto(de.symeda.sormas.api.infrastructure.region.RegionReferenceDto) CheckBox(com.vaadin.v7.ui.CheckBox) ContactReferenceDto(de.symeda.sormas.api.contact.ContactReferenceDto) ErrorLevel(com.vaadin.shared.ui.ErrorLevel) DateField(com.vaadin.v7.ui.DateField) ErrorMessage(com.vaadin.server.ErrorMessage) Link(com.vaadin.ui.Link)

Aggregations

CheckBox (com.vaadin.v7.ui.CheckBox)2 ComboBox (com.vaadin.v7.ui.ComboBox)2 DateField (com.vaadin.v7.ui.DateField)2 Field (com.vaadin.v7.ui.Field)2 YesNoUnknown (de.symeda.sormas.api.utils.YesNoUnknown)2 HealthConditionsForm (de.symeda.sormas.ui.clinicalcourse.HealthConditionsForm)2 Date (java.util.Date)2 Sets (com.google.common.collect.Sets)1 ErrorMessage (com.vaadin.server.ErrorMessage)1 ErrorLevel (com.vaadin.shared.ui.ErrorLevel)1 Button (com.vaadin.ui.Button)1 Label (com.vaadin.ui.Label)1 Link (com.vaadin.ui.Link)1 ValoTheme (com.vaadin.ui.themes.ValoTheme)1 Property (com.vaadin.v7.data.Property)1 Validator (com.vaadin.v7.data.Validator)1 Converter (com.vaadin.v7.data.util.converter.Converter)1 DateRangeValidator (com.vaadin.v7.data.validator.DateRangeValidator)1 Resolution (com.vaadin.v7.shared.ui.datefield.Resolution)1 AbstractSelect (com.vaadin.v7.ui.AbstractSelect)1