use of de.symeda.sormas.api.event.EventStatus in project SORMAS-Project by hzi-braunschweig.
the class EventReadFragment method onAfterLayoutBinding.
@Override
protected void onAfterLayoutBinding(FragmentEventReadLayoutBinding contentBinding) {
super.onAfterLayoutBinding(contentBinding);
String startDateCaption = Boolean.TRUE.equals(contentBinding.getMultiDayEvent()) ? I18nProperties.getPrefixCaption(EventDto.I18N_PREFIX, EventDto.START_DATE) : I18nProperties.getCaption(Captions.singleDayEventDate);
contentBinding.eventStartDate.setCaption(startDateCaption);
setFieldVisibilitiesAndAccesses(EventDto.class, contentBinding.mainContent);
EventStatus eventStatus = record.getEventStatus();
// 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 status instead
String statusCaption;
if (eventStatus == EventStatus.DROPPED) {
statusCaption = I18nProperties.getCaption(EVENT_ENTITY);
} else {
statusCaption = I18nProperties.getEnumCaption(eventStatus);
}
contentBinding.eventEvolutionDate.setCaption(String.format(I18nProperties.getCaption(EVOLUTION_DATE_WITH_STATUS), statusCaption));
contentBinding.eventEvolutionComment.setCaption(String.format(I18nProperties.getCaption(EVOLUTION_COMMENT_WITH_STATUS), statusCaption));
FacilityType facilityType = record.getEventLocation().getFacilityType();
contentBinding.exposureWorkEnvironment.setVisibility(facilityType == null || FacilityTypeGroup.WORKING_PLACE != facilityType.getFacilityTypeGroup() ? View.GONE : View.VISIBLE);
if (isVisibleAllowed(EventDto.class, contentBinding.eventInfectionPathCertainty)) {
setVisibleWhen(contentBinding.eventInfectionPathCertainty, contentBinding.eventNosocomial, YesNoUnknown.YES);
}
if (isVisibleAllowed(EventDto.class, contentBinding.eventHumanTransmissionMode)) {
setVisibleWhen(contentBinding.eventHumanTransmissionMode, contentBinding.eventDiseaseTransmissionMode, DiseaseTransmissionMode.HUMAN_TO_HUMAN);
}
if (isVisibleAllowed(EventDto.class, contentBinding.eventParenteralTransmissionMode)) {
setVisibleWhen(contentBinding.eventParenteralTransmissionMode, contentBinding.eventHumanTransmissionMode, HumanTransmissionMode.PARENTERAL);
}
if (isVisibleAllowed(EventDto.class, contentBinding.eventMedicallyAssociatedTransmissionMode)) {
setVisibleWhen(contentBinding.eventMedicallyAssociatedTransmissionMode, contentBinding.eventParenteralTransmissionMode, ParenteralTransmissionMode.MEDICALLY_ASSOCIATED);
}
if (isVisibleAllowed(EventDto.class, contentBinding.eventDiseaseVariant)) {
contentBinding.eventDiseaseVariant.setVisibility(record.getDiseaseVariant() != null ? VISIBLE : GONE);
}
if (isVisibleAllowed(EventDto.class, contentBinding.eventSpecificRisk)) {
contentBinding.eventSpecificRisk.setVisibility(record.getSpecificRisk() != null ? VISIBLE : GONE);
}
}
use of de.symeda.sormas.api.event.EventStatus in project SORMAS-Project by hzi-braunschweig.
the class EventsView method createStatusFilterBar.
public HorizontalLayout createStatusFilterBar() {
HorizontalLayout statusFilterLayout = new HorizontalLayout();
statusFilterLayout.setSpacing(true);
statusFilterLayout.setMargin(false);
statusFilterLayout.setWidth(100, Unit.PERCENTAGE);
statusFilterLayout.addStyleName(CssStyles.VSPACE_3);
statusButtons = new HashMap<>();
if (isDefaultViewType()) {
Button statusAll = ButtonHelper.createButton(Captions.all, e -> {
eventCriteria.setEventStatus(null);
navigateTo(eventCriteria);
}, ValoTheme.BUTTON_BORDERLESS, CssStyles.BUTTON_FILTER);
statusAll.setCaptionAsHtml(true);
statusFilterLayout.addComponent(statusAll);
statusButtons.put(statusAll, I18nProperties.getCaption(Captions.all));
activeStatusButton = statusAll;
for (EventStatus status : EventStatus.values()) {
Button statusButton = ButtonHelper.createButton("status-" + status, status.toString(), e -> {
eventCriteria.setEventStatus(status);
navigateTo(eventCriteria);
}, ValoTheme.BUTTON_BORDERLESS, CssStyles.BUTTON_FILTER, CssStyles.BUTTON_FILTER_LIGHT);
statusButton.setCaptionAsHtml(true);
statusButton.setData(status);
statusFilterLayout.addComponent(statusButton);
statusButtons.put(statusButton, status.toString());
}
} else if (isActionViewType()) {
Button statusAll = ButtonHelper.createButton(Captions.all, e -> {
eventCriteria.setActionStatus(null);
navigateTo(eventCriteria);
}, ValoTheme.BUTTON_BORDERLESS, CssStyles.BUTTON_FILTER);
statusAll.setCaptionAsHtml(true);
statusFilterLayout.addComponent(statusAll);
statusButtons.put(statusAll, I18nProperties.getCaption(Captions.all));
activeStatusButton = statusAll;
for (ActionStatus status : ActionStatus.values()) {
Button statusButton = ButtonHelper.createButton("status-" + status, status.toString(), e -> {
eventCriteria.actionStatus(status);
navigateTo(eventCriteria);
}, ValoTheme.BUTTON_BORDERLESS, CssStyles.BUTTON_FILTER, CssStyles.BUTTON_FILTER_LIGHT);
statusButton.setCaptionAsHtml(true);
statusButton.setData(status);
statusFilterLayout.addComponent(statusButton);
statusButtons.put(statusButton, status.toString());
}
}
HorizontalLayout actionButtonsLayout = new HorizontalLayout();
actionButtonsLayout.setSpacing(true);
{
// Show active/archived/all dropdown
if (UserProvider.getCurrent().hasUserRight(UserRight.EVENT_VIEW)) {
if (isGroupViewType()) {
groupRelevanceStatusFilter = buildRelevanceStatus(Captions.eventActiveGroups, Captions.eventArchivedGroups, Captions.eventAllGroups);
groupRelevanceStatusFilter.addValueChangeListener(e -> {
eventGroupCriteria.relevanceStatus((EntityRelevanceStatus) e.getProperty().getValue());
navigateTo(eventGroupCriteria);
});
actionButtonsLayout.addComponent(groupRelevanceStatusFilter);
} else {
int daysAfterEventGetsArchived = FacadeProvider.getConfigFacade().getDaysAfterEventGetsArchived();
if (daysAfterEventGetsArchived > 0) {
relevanceStatusInfoLabel = new Label(VaadinIcons.INFO_CIRCLE.getHtml() + " " + String.format(I18nProperties.getString(Strings.infoArchivedEvents), daysAfterEventGetsArchived), ContentMode.HTML);
relevanceStatusInfoLabel.setVisible(false);
relevanceStatusInfoLabel.addStyleName(CssStyles.LABEL_VERTICAL_ALIGN_SUPER);
actionButtonsLayout.addComponent(relevanceStatusInfoLabel);
actionButtonsLayout.setComponentAlignment(relevanceStatusInfoLabel, Alignment.MIDDLE_RIGHT);
}
eventRelevanceStatusFilter = buildRelevanceStatus(Captions.eventActiveEvents, Captions.eventArchivedEvents, Captions.eventAllEvents);
eventRelevanceStatusFilter.addValueChangeListener(e -> {
relevanceStatusInfoLabel.setVisible(EntityRelevanceStatus.ARCHIVED.equals(e.getProperty().getValue()));
eventCriteria.relevanceStatus((EntityRelevanceStatus) e.getProperty().getValue());
navigateTo(eventCriteria);
});
actionButtonsLayout.addComponent(eventRelevanceStatusFilter);
}
}
// Bulk operation dropdown
if (UserProvider.getCurrent().hasUserRight(UserRight.PERFORM_BULK_OPERATIONS_EVENT) && isDefaultViewType()) {
EventGrid eventGrid = (EventGrid) grid;
List<MenuBarHelper.MenuBarItem> bulkActions = new ArrayList<>();
if (UserProvider.getCurrent().hasUserRight(UserRight.EVENT_EDIT)) {
bulkActions.add(new MenuBarHelper.MenuBarItem(I18nProperties.getCaption(Captions.bulkEdit), VaadinIcons.ELLIPSIS_H, mi -> grid.bulkActionHandler(items -> ControllerProvider.getEventController().showBulkEventDataEditComponent(items))));
}
if (UserProvider.getCurrent().hasUserRight(UserRight.EVENT_DELETE)) {
bulkActions.add(new MenuBarHelper.MenuBarItem(I18nProperties.getCaption(Captions.bulkDelete), VaadinIcons.TRASH, mi -> grid.bulkActionHandler(items -> ControllerProvider.getEventController().deleteAllSelectedItems(items, () -> navigateTo(eventCriteria)), true)));
}
if (UserProvider.getCurrent().hasUserRight(UserRight.EVENT_ARCHIVE)) {
bulkActions.add(new MenuBarHelper.MenuBarItem(I18nProperties.getCaption(Captions.actionArchive), VaadinIcons.ARCHIVE, mi -> grid.bulkActionHandler(items -> ControllerProvider.getEventController().archiveAllSelectedItems(items, () -> navigateTo(eventCriteria, true)), true), EntityRelevanceStatus.ACTIVE.equals(eventCriteria.getRelevanceStatus())));
bulkActions.add(new MenuBarHelper.MenuBarItem(I18nProperties.getCaption(Captions.actionDearchive), VaadinIcons.ARCHIVE, mi -> grid.bulkActionHandler(items -> ControllerProvider.getEventController().dearchiveAllSelectedItems(eventGrid.asMultiSelect().getSelectedItems(), () -> navigateTo(eventCriteria, true)), true), EntityRelevanceStatus.ARCHIVED.equals(eventCriteria.getRelevanceStatus())));
}
if (UserProvider.getCurrent().hasUserRight(UserRight.EVENTGROUP_CREATE) && UserProvider.getCurrent().hasUserRight(UserRight.EVENTGROUP_LINK)) {
bulkActions.add(new MenuBarHelper.MenuBarItem(I18nProperties.getCaption(Captions.actionGroupEvent), VaadinIcons.FILE_TREE, mi -> grid.bulkActionHandler(items -> ControllerProvider.getEventGroupController().linkAllToGroup(eventGrid.asMultiSelect().getSelectedItems(), () -> navigateTo(eventCriteria)))));
}
bulkActions.add(new MenuBarHelper.MenuBarItem(I18nProperties.getCaption(Captions.ExternalSurveillanceToolGateway_send), VaadinIcons.SHARE, mi -> grid.bulkActionHandler(items -> ControllerProvider.getEventController().sendAllSelectedToExternalSurveillanceTool(eventGrid.asMultiSelect().getSelectedItems(), () -> navigateTo(eventCriteria))), FacadeProvider.getExternalSurveillanceToolFacade().isFeatureEnabled()));
if (isDocGenerationAllowed()) {
bulkActions.add(new MenuBarHelper.MenuBarItem(I18nProperties.getCaption(Captions.bulkActionCreatDocuments), VaadinIcons.FILE_TEXT, mi -> {
grid.bulkActionHandler(items -> {
EventGrid eventGrid1 = (EventGrid) this.grid;
List<EventReferenceDto> references = eventGrid1.asMultiSelect().getSelectedItems().stream().map(EventIndexDto::toReference).collect(Collectors.toList());
if (references.size() == 0) {
new Notification(I18nProperties.getString(Strings.headingNoEventsSelected), I18nProperties.getString(Strings.headingNoEventsSelected), Notification.Type.WARNING_MESSAGE, false).show(Page.getCurrent());
return;
}
ControllerProvider.getDocGenerationController().showEventDocumentDialog(references);
});
}));
}
bulkOperationsDropdown = MenuBarHelper.createDropDown(Captions.bulkActions, bulkActions);
bulkOperationsDropdown.setVisible(viewConfiguration.isInEagerMode());
bulkOperationsDropdown.setCaption("");
actionButtonsLayout.addComponent(bulkOperationsDropdown);
}
if (isDefaultViewType()) {
// Contact Count Method Dropdown
contactCountMethod = ComboBoxHelper.createComboBoxV7();
contactCountMethod.setCaption(I18nProperties.getCaption(Captions.Event_contactCountMethod));
contactCountMethod.addItem(EventContactCountMethod.ALL);
contactCountMethod.addItem(EventContactCountMethod.SOURCE_CASE_IN_EVENT);
contactCountMethod.addItem(EventContactCountMethod.BOTH_METHODS);
contactCountMethod.setItemCaption(EventContactCountMethod.ALL, I18nProperties.getEnumCaption(EventContactCountMethod.ALL));
contactCountMethod.setItemCaption(EventContactCountMethod.SOURCE_CASE_IN_EVENT, I18nProperties.getEnumCaption(EventContactCountMethod.SOURCE_CASE_IN_EVENT));
contactCountMethod.setItemCaption(EventContactCountMethod.BOTH_METHODS, I18nProperties.getEnumCaption(EventContactCountMethod.BOTH_METHODS));
contactCountMethod.setValue(EventContactCountMethod.ALL);
contactCountMethod.setTextInputAllowed(false);
contactCountMethod.setNullSelectionAllowed(false);
contactCountMethod.addValueChangeListener(event -> {
((EventGrid) grid).setContactCountMethod((EventContactCountMethod) event.getProperty().getValue());
((EventGrid) grid).reload();
});
actionButtonsLayout.addComponent(contactCountMethod);
}
}
statusFilterLayout.addComponent(actionButtonsLayout);
statusFilterLayout.setComponentAlignment(actionButtonsLayout, Alignment.TOP_RIGHT);
statusFilterLayout.setExpandRatio(actionButtonsLayout, 1);
return statusFilterLayout;
}
use of de.symeda.sormas.api.event.EventStatus in project SORMAS-Project by hzi-braunschweig.
the class EventEditFragment method setUpControlListeners.
private void setUpControlListeners(final FragmentEventEditLayoutBinding contentBinding) {
contentBinding.eventEventLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openAddressPopup(contentBinding);
}
});
contentBinding.eventEventStatus.addValueChangedListener(e -> {
EventStatus eventStatus = (EventStatus) e.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 status instead
String statusCaption;
if (eventStatus == EventStatus.DROPPED) {
statusCaption = I18nProperties.getCaption(EVENT_ENTITY);
} else {
statusCaption = I18nProperties.getEnumCaption(eventStatus);
}
contentBinding.eventEvolutionDate.setCaption(String.format(I18nProperties.getCaption(EVOLUTION_DATE_WITH_STATUS), statusCaption));
contentBinding.eventEvolutionComment.setCaption(String.format(I18nProperties.getCaption(EVOLUTION_COMMENT_WITH_STATUS), statusCaption));
});
contentBinding.eventDisease.addValueChangedListener(f -> updateCustomizableEnumFields(contentBinding));
}
use of de.symeda.sormas.api.event.EventStatus in project SORMAS-Project by hzi-braunschweig.
the class DashboardService method getEventCountByStatus.
public Map<EventStatus, Long> getEventCountByStatus(DashboardCriteria dashboardCriteria) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class);
Root<Event> event = cq.from(Event.class);
EventQueryContext eventQueryContext = new EventQueryContext(cb, cq, event);
cq.multiselect(event.get(Event.EVENT_STATUS), cb.count(event));
cq.groupBy(event.get(Event.EVENT_STATUS));
Predicate filter = eventService.createDefaultFilter(cb, event);
filter = CriteriaBuilderHelper.and(cb, filter, buildEventCriteriaFilter(dashboardCriteria, eventQueryContext));
filter = CriteriaBuilderHelper.and(cb, filter, eventService.createUserFilter(cb, cq, event));
if (filter != null)
cq.where(filter);
List<Object[]> results = em.createQuery(cq).getResultList();
return results.stream().collect(Collectors.toMap(e -> (EventStatus) e[0], e -> (Long) e[1]));
}
use of de.symeda.sormas.api.event.EventStatus 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));
}
});
}
Aggregations