Skip to content

Commit f741918

Browse files
Merge branch 'development' into bugfix-measles-minor-issues
2 parents 8e92754 + 75e5985 commit f741918

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2204,6 +2204,26 @@ public void onCaseChanged(CaseDataDto existingCase, Case newCase, boolean syncSh
22042204
}
22052205
}
22062206

2207+
if (existingCase != null && newCase.getEpiData() != null) {
2208+
// If contact with source case is known and at least one source case (same disease) is confirmed, set YES.
2209+
final YesNoUnknown contactKnown = newCase.getEpiData().getContactWithSourceCaseKnown();
2210+
if (contactKnown == YesNoUnknown.YES) {
2211+
// Check if at least one source case is confirmed
2212+
// We only check for contacts that have this case as resulting case
2213+
final boolean hasConfirmedSourceCase = contactService.getAllByResultingCase(caseService.getByUuid(existingCase.getUuid())).stream()
2214+
.map(Contact::getCaze)
2215+
.filter(Objects::nonNull)
2216+
.anyMatch(src ->
2217+
src.getDisease() == newCase.getDisease()
2218+
&& CaseClassification.getConfirmedClassifications().contains(src.getCaseClassification()));
2219+
newCase.setEpidemiologicalConfirmation(hasConfirmedSourceCase ? YesNoUnknown.YES : YesNoUnknown.NO);
2220+
} else if (contactKnown == YesNoUnknown.NO) {
2221+
newCase.setEpidemiologicalConfirmation(YesNoUnknown.NO);
2222+
} else {
2223+
newCase.setEpidemiologicalConfirmation(YesNoUnknown.UNKNOWN);
2224+
}
2225+
}
2226+
22072227
// Update follow-up
22082228
service.updateFollowUpDetails(newCase, existingCase != null && newCase.getFollowUpStatus() != existingCase.getFollowUpStatus());
22092229

sormas-ui/src/main/java/de/symeda/sormas/ui/ActivityAsCase/ActivityAsCaseForm.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import com.vaadin.v7.data.util.converter.Converter;
4040
import com.vaadin.v7.ui.AbstractSelect;
4141
import com.vaadin.v7.ui.ComboBox;
42+
import com.vaadin.v7.ui.DateField;
4243
import com.vaadin.v7.ui.TextArea;
4344
import com.vaadin.v7.ui.TextField;
4445

@@ -59,6 +60,7 @@
5960
import de.symeda.sormas.api.utils.fieldvisibility.FieldVisibilityCheckers;
6061
import de.symeda.sormas.ui.location.LocationEditForm;
6162
import de.symeda.sormas.ui.utils.AbstractEditForm;
63+
import de.symeda.sormas.ui.utils.DateComparisonValidator;
6264
import de.symeda.sormas.ui.utils.FieldHelper;
6365

6466
public class ActivityAsCaseForm extends AbstractEditForm<ActivityAsCaseDto> {
@@ -120,7 +122,10 @@ public ActivityAsCaseForm(boolean create, FieldVisibilityCheckers fieldVisibilit
120122
protected void addFields() {
121123
addHeadingsAndInfoTexts();
122124
addBasicFields();
125+
DateField startDate = addField(ActivityAsCaseDto.START_DATE);
126+
DateField endDate = addField(ActivityAsCaseDto.END_DATE);
123127

128+
DateComparisonValidator.addStartEndValidators(startDate, endDate);
124129
addField(ActivityAsCaseDto.DESCRIPTION, TextArea.class).setRows(5);
125130

126131
locationForm = addField(ActivityAsCaseDto.LOCATION, LocationEditForm.class);
@@ -155,8 +160,6 @@ private void addBasicFields() {
155160
addFields(
156161
ActivityAsCaseDto.UUID,
157162
ActivityAsCaseDto.REPORTING_USER,
158-
ActivityAsCaseDto.START_DATE,
159-
ActivityAsCaseDto.END_DATE,
160163
ActivityAsCaseDto.ACTIVITY_AS_CASE_TYPE,
161164
ActivityAsCaseDto.ACTIVITY_AS_CASE_TYPE_DETAILS,
162165
ActivityAsCaseDto.GATHERING_TYPE,

sormas-ui/src/main/java/de/symeda/sormas/ui/contact/SourceContactListComponent.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.vaadin.ui.VerticalLayout;
2626
import com.vaadin.ui.themes.ValoTheme;
2727

28+
import de.symeda.sormas.api.FacadeProvider;
2829
import de.symeda.sormas.api.ReferenceDto;
2930
import de.symeda.sormas.api.caze.CaseReferenceDto;
3031
import de.symeda.sormas.api.contact.ContactReferenceDto;
@@ -76,7 +77,12 @@ private void createSourceContactListComponent(SourceContactList sourceContactLis
7677
Button createButton = ButtonHelper.createIconButton(
7778
Captions.contactNewContact,
7879
VaadinIcons.PLUS_CIRCLE,
79-
e -> view.showUnsavedChangesPopup(() -> ControllerProvider.getContactController().create(caseReference, true, SormasUI::refreshView)),
80+
e -> view.showUnsavedChangesPopup(() -> ControllerProvider.getContactController().create(caseReference, true, () -> {
81+
// For case classification effectiveness, extra save is needed.
82+
// Ideally, we should mark the epi case data form as dirty when a contact is created, but we couldn't find a way to do that.
83+
FacadeProvider.getCaseFacade().save(FacadeProvider.getCaseFacade().getByUuid(caseReference.getUuid()));
84+
SormasUI.refreshView();
85+
})),
8086
ValoTheme.BUTTON_PRIMARY);
8187
componentHeader.addComponent(createButton);
8288
componentHeader.setComponentAlignment(createButton, Alignment.MIDDLE_RIGHT);

sormas-ui/src/main/java/de/symeda/sormas/ui/exposure/ExposureForm.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import de.symeda.sormas.ui.utils.AbstractEditForm;
6464
import de.symeda.sormas.ui.utils.ComboBoxWithPlaceholder;
6565
import de.symeda.sormas.ui.utils.CssStyles;
66+
import de.symeda.sormas.ui.utils.DateComparisonValidator;
6667
import de.symeda.sormas.ui.utils.DateTimeField;
6768
import de.symeda.sormas.ui.utils.FieldHelper;
6869
import de.symeda.sormas.ui.utils.NullableOptionGroup;
@@ -219,7 +220,10 @@ private void addHeadingsAndInfoTexts() {
219220
private void addBasicFields() {
220221
addFields(ExposureDto.UUID, ExposureDto.REPORTING_USER, ExposureDto.PROBABLE_INFECTION_ENVIRONMENT);
221222

222-
addFields(DateTimeField.class, ExposureDto.START_DATE, ExposureDto.END_DATE);
223+
DateTimeField startDate = addField(ExposureDto.START_DATE, DateTimeField.class);
224+
DateTimeField endDate = addField(ExposureDto.END_DATE, DateTimeField.class);
225+
226+
DateComparisonValidator.addStartEndValidators(startDate, endDate);
223227

224228
addFields(
225229
ExposureDto.EXPOSURE_TYPE,

0 commit comments

Comments
 (0)