Skip to content

Commit 8308c08

Browse files
authored
Merge pull request #13781 from SORMAS-Foundation/bugfix-13456-contradictory-data-entry
#13456 - Fixes Inconsistent / contradictory data entry is possible in…
2 parents e50d757 + 4ab3739 commit 8308c08

3 files changed

Lines changed: 64 additions & 6 deletions

File tree

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@
3737
import java.util.Arrays;
3838
import java.util.Collections;
3939
import java.util.Date;
40+
import java.util.HashSet;
4041
import java.util.List;
42+
import java.util.Set;
4143
import java.util.stream.Collectors;
4244

4345
import org.apache.commons.collections4.CollectionUtils;
@@ -966,12 +968,17 @@ protected void addFields() {
966968
+ I18nProperties.getDescription(Descriptions.descGdpr));
967969
CssStyles.style(additionalDetails, CssStyles.CAPTION_HIDDEN);
968970

969-
addField(CaseDataDto.PREGNANT, NullableOptionGroup.class);
971+
NullableOptionGroup pregnantField = addField(CaseDataDto.PREGNANT, NullableOptionGroup.class);
970972

971-
addField(CaseDataDto.POSTPARTUM, NullableOptionGroup.class);
973+
NullableOptionGroup postpartumField = addField(CaseDataDto.POSTPARTUM, NullableOptionGroup.class);
972974
addField(CaseDataDto.TRIMESTER, NullableOptionGroup.class);
973975
FieldHelper.setVisibleWhen(getFieldGroup(), CaseDataDto.TRIMESTER, CaseDataDto.PREGNANT, Arrays.asList(YesNoUnknown.YES), true);
974976

977+
// Mutual exclusivity: Pregnancy and Postpartum
978+
if (pregnantField != null && postpartumField != null) {
979+
setupMutuallyExclusiveFields(pregnantField, postpartumField);
980+
}
981+
975982
ComboBox vaccinationStatusField = addField(CaseDataDto.VACCINATION_STATUS, ComboBox.class);
976983

977984
// Add field to display means of immunization details when status is OTHER
@@ -1023,8 +1030,6 @@ protected void addFields() {
10231030
vaccinationStatusInfoLabel.setDescription(infoText, ContentMode.HTML);
10241031
getContent().addComponent(vaccinationStatusInfoLabel, VACCINATION_STATUS_INFO_LOC);
10251032
}
1026-
1027-
// getContent().addComponent(new Label("Debug vaccination"), CaseDataDto.VACCINATION_STATUS);
10281033
addFields(CaseDataDto.SMALLPOX_VACCINATION_SCAR, CaseDataDto.SMALLPOX_VACCINATION_RECEIVED);
10291034
addDateField(CaseDataDto.SMALLPOX_LAST_VACCINATION_DATE, DateField.class, 0);
10301035

sormas-ui/src/main/java/de/symeda/sormas/ui/clinicalcourse/HealthConditionsForm.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,31 @@ protected void addFields() {
148148

149149
FieldHelper.setVisibleWhen(getFieldGroup(), HIV_ART, HIV, Arrays.asList(YesNoUnknown.YES), true);
150150

151+
// Mutual exclusivity: Current smoker and Former smoker
152+
NullableOptionGroup currentSmokerField = (NullableOptionGroup) getFieldGroup().getField(CURRENT_SMOKER);
153+
NullableOptionGroup formerSmokerField = (NullableOptionGroup) getFieldGroup().getField(FORMER_SMOKER);
154+
if (currentSmokerField != null && formerSmokerField != null) {
155+
setupMutuallyExclusiveFields(currentSmokerField, formerSmokerField);
156+
}
157+
158+
// Auto-check immunodeficiency when Asplenia is selected
159+
NullableOptionGroup aspleniaField = (NullableOptionGroup) getFieldGroup().getField(ASPLENIA);
160+
NullableOptionGroup immunodeficiencyField = (NullableOptionGroup) getFieldGroup().getField(IMMUNODEFICIENCY_OTHER_THAN_HIV);
161+
if (aspleniaField != null) {
162+
aspleniaField.addValueChangeListener(e -> {
163+
Object rawValue = e.getProperty().getValue();
164+
if (rawValue instanceof Set) {
165+
@SuppressWarnings("unchecked")
166+
Set<Object> aspleniaValue = (Set<Object>) rawValue;
167+
if (aspleniaValue.contains(YesNoUnknown.YES)) {
168+
if (immunodeficiencyField != null && immunodeficiencyField.isVisible()) {
169+
immunodeficiencyField.setValue(new HashSet<>(Arrays.asList(YesNoUnknown.YES)));
170+
}
171+
}
172+
}
173+
});
174+
}
175+
151176
//Below requirement (showing the treatment year and its compliances only applicable for LUX)
152177
if (isConfiguredServer(CountryHelper.COUNTRY_CODE_LUXEMBOURG)) {
153178
if (Disease.TUBERCULOSIS.equals(disease)) {

sormas-ui/src/main/java/de/symeda/sormas/ui/utils/AbstractEditForm.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@
1818
import static com.vaadin.v7.data.fieldgroup.DefaultFieldGroupFieldFactory.CAPTION_PROPERTY_ID;
1919

2020
import java.util.ArrayList;
21+
import java.util.Arrays;
2122
import java.util.Collection;
2223
import java.util.Collections;
24+
import java.util.HashSet;
2325
import java.util.List;
2426
import java.util.Optional;
27+
import java.util.Set;
2528
import java.util.stream.Collectors;
2629
import java.util.stream.Stream;
2730

@@ -209,7 +212,7 @@ protected ComboBox addDiseaseField(String fieldId, boolean showNonPrimaryDisease
209212
* that makes sure the value that is about to be selected is added to the list of allowed values. This is intended
210213
* to be used for Disease fields that might contain a disease that is no longer active in the system and thus will
211214
* not be returned by DiseaseHelper.isActivePrimaryDisease(disease).
212-
*
215+
*
213216
* @param showNonPrimaryDiseases
214217
* Whether or not diseases that have been configured as non-primary should be included
215218
* @param setServerDiseaseAsDefault
@@ -621,7 +624,7 @@ public void setHeading(String heading) {
621624

622625
/**
623626
* List of editable allowed fields,
624-
*
627+
*
625628
* @return
626629
*/
627630
public List<Field<?>> editableAllowedFields() {
@@ -685,4 +688,29 @@ protected <T> T safeSetFieldValue(String propertyId, T value) {
685688
}
686689
return safeSetFieldValue(field, value);
687690
}
691+
692+
/**
693+
* Sets up mutually exclusive behavior between two YesNoUnknown fields.
694+
* When one field is set to YES, the other is automatically set to NO.
695+
*
696+
* @param field1
697+
* First field
698+
* @param field2
699+
* Second field (mutually exclusive with field1)
700+
*/
701+
@SuppressWarnings("unchecked")
702+
protected void setupMutuallyExclusiveFields(NullableOptionGroup field1, NullableOptionGroup field2) {
703+
field1.addValueChangeListener(e -> {
704+
Set<Object> value = (Set<Object>) e.getProperty().getValue();
705+
if (value != null && value.contains(de.symeda.sormas.api.utils.YesNoUnknown.YES)) {
706+
field2.setValue(new HashSet<>(Arrays.asList(de.symeda.sormas.api.utils.YesNoUnknown.NO)));
707+
}
708+
});
709+
field2.addValueChangeListener(e -> {
710+
Set<Object> value = (Set<Object>) e.getProperty().getValue();
711+
if (value != null && value.contains(de.symeda.sormas.api.utils.YesNoUnknown.YES)) {
712+
field1.setValue(new HashSet<>(Arrays.asList(de.symeda.sormas.api.utils.YesNoUnknown.NO)));
713+
}
714+
});
715+
}
688716
}

0 commit comments

Comments
 (0)