Skip to content

Commit 938bb9a

Browse files
Merge pull request #13880 from SORMAS-Foundation/bugfix-manual-case-classification-fix
Fixes: Display manual case classification.
2 parents 5d15f2c + c5ccf33 commit 938bb9a

2 files changed

Lines changed: 55 additions & 11 deletions

File tree

sormas-backend/src/main/java/de/symeda/sormas/backend/disease/DiseaseConfigurationFacadeEjb.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ public int getMinIncubationPeriod(Disease disease) {
444444
}
445445

446446
public String getCaseDefinitionText(Disease disease) {
447-
return service.getDiseaseConfiguration(disease).getCaseDefinitionText();
447+
return service.getDiseaseConfiguration(disease) == null ? null : service.getDiseaseConfiguration(disease).getCaseDefinitionText();
448448
}
449449

450450
@Override

sormas-ui/src/main/java/de/symeda/sormas/ui/caze/CaseDataForm.java

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import java.util.Objects;
4141
import java.util.stream.Collectors;
4242

43-
import de.symeda.sormas.api.person.PersonReferenceDto;
4443
import org.apache.commons.collections4.CollectionUtils;
4544
import org.apache.commons.lang3.StringUtils;
4645

@@ -54,6 +53,7 @@
5453
import com.vaadin.ui.GridLayout;
5554
import com.vaadin.ui.Image;
5655
import com.vaadin.ui.Label;
56+
import com.vaadin.ui.VerticalLayout;
5757
import com.vaadin.ui.Window;
5858
import com.vaadin.ui.Window.CloseListener;
5959
import com.vaadin.ui.themes.ValoTheme;
@@ -70,6 +70,7 @@
7070
import com.vaadin.v7.ui.TextArea;
7171
import com.vaadin.v7.ui.TextField;
7272

73+
import de.symeda.sormas.api.CaseClassificationCalculationMode;
7374
import de.symeda.sormas.api.CountryHelper;
7475
import de.symeda.sormas.api.Disease;
7576
import de.symeda.sormas.api.DiseaseHelper;
@@ -115,6 +116,7 @@
115116
import de.symeda.sormas.api.infrastructure.facility.FacilityTypeGroup;
116117
import de.symeda.sormas.api.infrastructure.region.RegionReferenceDto;
117118
import de.symeda.sormas.api.person.PersonDto;
119+
import de.symeda.sormas.api.person.PersonReferenceDto;
118120
import de.symeda.sormas.api.person.Sex;
119121
import de.symeda.sormas.api.sample.PathogenTestDto;
120122
import de.symeda.sormas.api.sample.SampleDto;
@@ -1361,15 +1363,26 @@ && isVisibleAllowed(CaseDataDto.CASE_CLASSIFICATION)) {
13611363

13621364
// Automatic case classification rules button - invisible for other diseases
13631365
DiseaseClassificationCriteriaDto diseaseClassificationCriteria = FacadeProvider.getCaseClassificationFacade().getByDisease(disease);
1364-
if (diseaseClassificationExists()) {
1365-
Button classificationRulesButton = ButtonHelper.createIconButton(
1366-
Captions.info,
1367-
VaadinIcons.INFO_CIRCLE,
1368-
e -> ControllerProvider.getCaseController().openClassificationRulesPopup(diseaseClassificationCriteria),
1369-
ValoTheme.BUTTON_PRIMARY,
1370-
FORCE_CAPTION);
1371-
1372-
getContent().addComponent(classificationRulesButton, CLASSIFICATION_RULES_LOC);
1366+
1367+
CaseClassificationCalculationMode caseClassificationCalculationMode =
1368+
FacadeProvider.getConfigFacade().getCaseClassificationCalculationMode(disease);
1369+
// If case classification is not disabled for the disease.
1370+
if (CaseClassificationCalculationMode.DISABLED != caseClassificationCalculationMode) {
1371+
// If automatic classification is enabled for the disease and it has the classification criteria.
1372+
if (FacadeProvider.getConfigFacade().getCaseClassificationCalculationMode(disease).isAutomaticEnabled()
1373+
&& diseaseClassificationExists()) {
1374+
Button classificationRulesButton = ButtonHelper.createIconButton(
1375+
Captions.info,
1376+
VaadinIcons.INFO_CIRCLE,
1377+
e -> ControllerProvider.getCaseController().openClassificationRulesPopup(diseaseClassificationCriteria),
1378+
ValoTheme.BUTTON_PRIMARY,
1379+
FORCE_CAPTION);
1380+
1381+
getContent().addComponent(classificationRulesButton, CLASSIFICATION_RULES_LOC);
1382+
} else {
1383+
// If Manual classification is enabled for the disease.
1384+
getManualCaseDefinition();
1385+
}
13731386
}
13741387

13751388
addField(CaseDataDto.DELETION_REASON);
@@ -1525,6 +1538,37 @@ public String getFormattedHtmlMessage() {
15251538
CaseDataDto.ADDITIONAL_DETAILS);
15261539
}
15271540

1541+
/**
1542+
* If a manual case definition is configured in the properties files and has the case definition in the disease configuration,
1543+
* then display the button with case definition.
1544+
*/
1545+
private void getManualCaseDefinition() {
1546+
// If a disease has caseDefinitionText, it should display; otherwise criteria will display as it is.
1547+
String caseDefinitionText = FacadeProvider.getDiseaseConfigurationFacade().getCaseDefinitionText(disease);
1548+
if (caseDefinitionText == null) {
1549+
return;
1550+
}
1551+
1552+
Button caseDefinitionButton = ButtonHelper.createIconButton(Captions.info, VaadinIcons.INFO_CIRCLE, e -> {
1553+
VerticalLayout classificationRulesLayout = new VerticalLayout();
1554+
classificationRulesLayout.setMargin(true);
1555+
Label suspectContent = new Label();
1556+
suspectContent.setContentMode(ContentMode.HTML);
1557+
suspectContent.setWidth(100, Unit.PERCENTAGE);
1558+
suspectContent.setValue(caseDefinitionText);
1559+
classificationRulesLayout.addComponent(suspectContent);
1560+
Window popupWindow = VaadinUiUtil.showPopupWindow(classificationRulesLayout);
1561+
popupWindow.addCloseListener(e1 -> {
1562+
popupWindow.close();
1563+
});
1564+
popupWindow.setWidth(860, Unit.PIXELS);
1565+
popupWindow.setHeight(80, Unit.PERCENTAGE);
1566+
popupWindow.setCaption(I18nProperties.getString(Strings.classificationRulesFor) + " " + disease);
1567+
}, ValoTheme.BUTTON_PRIMARY, FORCE_CAPTION);
1568+
1569+
getContent().addComponent(caseDefinitionButton, CLASSIFICATION_RULES_LOC);
1570+
}
1571+
15281572
private void hideJurisdictionFields() {
15291573
getField(CaseDataDto.CASE_ORIGIN).setVisible(false);
15301574
getContent().getComponent(RESPONSIBLE_JURISDICTION_HEADING_LOC).setVisible(false);

0 commit comments

Comments
 (0)