Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.

Commit 618ac17

Browse files
committed
SORMAS-Foundation#2972 add place description field to bulk edit cases
1 parent 431b647 commit 618ac17

3 files changed

Lines changed: 121 additions & 6 deletions

File tree

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

Lines changed: 104 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
*******************************************************************************/
1818
package de.symeda.sormas.ui.caze;
1919

20+
import com.vaadin.ui.themes.ValoTheme;
21+
import de.symeda.sormas.api.event.TypeOfPlace;
22+
import de.symeda.sormas.api.facility.FacilityReferenceDto;
23+
import de.symeda.sormas.ui.utils.CssStyles;
2024
import static de.symeda.sormas.ui.utils.CssStyles.VSPACE_4;
2125
import static de.symeda.sormas.ui.utils.LayoutUtil.fluidColumn;
2226
import static de.symeda.sormas.ui.utils.LayoutUtil.fluidColumnLoc;
@@ -26,6 +30,7 @@
2630
import static de.symeda.sormas.ui.utils.LayoutUtil.locs;
2731

2832
import java.util.Arrays;
33+
import java.util.Collections;
2934
import java.util.List;
3035

3136
import com.vaadin.v7.ui.CheckBox;
@@ -61,6 +66,10 @@ public class BulkCaseDataForm extends AbstractEditForm<CaseBulkEditData> {
6166
private static final String HEALTH_FACILITY_CHECKBOX = "healthFacilityCheckbox";
6267
private static final String TYPE_GROUP_LOC = "typeGroupLoc";
6368
private static final String TYPE_LOC = "typeLoc";
69+
private static final String FACILITY_OR_HOME_LOC = "facilityOrHomeLoc";
70+
private static final String FACILITY_TYPE_GROUP_LOC = "typeGroupLoc";
71+
private static final String HEALTH_FACILITY_DETAILS = "healthFacilityDetails";
72+
6473

6574
//@formatter:off
6675
private static final String HTML_LAYOUT =
@@ -84,10 +93,8 @@ public class BulkCaseDataForm extends AbstractEditForm<CaseBulkEditData> {
8493
fluidRowLocs(CaseBulkEditData.REGION,
8594
CaseBulkEditData.DISTRICT,
8695
CaseBulkEditData.COMMUNITY) +
87-
fluidRowLocs(
88-
TYPE_GROUP_LOC,
89-
TYPE_LOC,
90-
CaseBulkEditData.HEALTH_FACILITY);
96+
fluidRowLocs(FACILITY_OR_HOME_LOC,TYPE_GROUP_LOC, TYPE_LOC)+
97+
fluidRowLocs(CaseDataDto.HEALTH_FACILITY,CaseBulkEditData.HEALTH_FACILITY_DETAILS);
9198
//@formatter:on
9299

93100
private final DistrictReferenceDto singleSelectedDistrict;
@@ -102,6 +109,7 @@ public class BulkCaseDataForm extends AbstractEditForm<CaseBulkEditData> {
102109
private CheckBox healthFacilityCheckbox;
103110
private ComboBox facilityTypeGroup;
104111
private ComboBox facilityType;
112+
private TextField healthFacilityDetails;
105113

106114
public BulkCaseDataForm(DistrictReferenceDto singleSelectedDistrict) {
107115
super(CaseBulkEditData.class, CaseDataDto.I18N_PREFIX);
@@ -193,13 +201,23 @@ protected void addFields() {
193201
ComboBox community = addInfrastructureField(CaseBulkEditData.COMMUNITY);
194202
community.setNullSelectionAllowed(true);
195203
community.setEnabled(false);
204+
OptionGroup facilityOrHome = new OptionGroup(I18nProperties.getCaption(Captions.casePlaceOfStay), TypeOfPlace.getTypesOfPlaceForCases());
205+
facilityOrHome.setId("facilityOrHome");
206+
facilityOrHome.setWidth(100, Unit.PERCENTAGE);
207+
CssStyles.style(facilityOrHome, ValoTheme.OPTIONGROUP_HORIZONTAL);
208+
getContent().addComponent(facilityOrHome, FACILITY_OR_HOME_LOC);
209+
210+
healthFacilityDetails = addField(CaseDataDto.HEALTH_FACILITY_DETAILS, TextField.class);
211+
healthFacilityDetails.setVisible(false);
212+
196213
facilityTypeGroup = new ComboBox();
197214
facilityTypeGroup.setId("typeGroup");
198215
facilityTypeGroup.setCaption(I18nProperties.getCaption(Captions.Facility_typeGroup));
199216
facilityTypeGroup.setWidth(100, Unit.PERCENTAGE);
200217
facilityTypeGroup.addItems(FacilityTypeGroup.getAccomodationGroups());
201218
facilityTypeGroup.setEnabled(false);
202219
getContent().addComponent(facilityTypeGroup, TYPE_GROUP_LOC);
220+
203221
facilityType = new ComboBox();
204222
facilityType.setId(CaseDataDto.FACILITY_TYPE);
205223
facilityType.setCaption(I18nProperties.getPrefixCaption(FacilityDto.I18N_PREFIX, FacilityDto.TYPE));
@@ -209,12 +227,15 @@ protected void addFields() {
209227
ComboBox facility = addInfrastructureField(CaseBulkEditData.HEALTH_FACILITY);
210228
facility.setImmediate(true);
211229
facility.setEnabled(false);
212-
213230
region.addValueChangeListener(e -> {
214231
RegionReferenceDto regionDto = (RegionReferenceDto) e.getProperty().getValue();
215232
FieldHelper
216233
.updateItems(district, regionDto != null ? FacadeProvider.getDistrictFacade().getAllActiveByRegion(regionDto.getUuid()) : null);
217234
});
235+
healthFacilityDetails.addValueChangeListener(e->{
236+
this.getValue().setHealthFacilityDetails(healthFacilityDetails.getValue());
237+
updateFacilityFields(facility,healthFacilityDetails);
238+
});
218239
district.addValueChangeListener(e -> {
219240
FieldHelper.removeItems(facility);
220241
FieldHelper.removeItems(community);
@@ -278,6 +299,30 @@ protected void addFields() {
278299
}
279300
}
280301
});
302+
303+
facilityOrHome.addValueChangeListener(e -> {
304+
FieldHelper.removeItems(facility);
305+
if (TypeOfPlace.FACILITY.equals(facilityOrHome.getValue())) {
306+
if (facilityTypeGroup.getValue() == null) {
307+
facilityTypeGroup.setValue(FacilityTypeGroup.MEDICAL_FACILITY);
308+
}
309+
if (facilityType.getValue() == null && FacilityTypeGroup.MEDICAL_FACILITY.equals(facilityTypeGroup.getValue())) {
310+
facilityType.setValue(FacilityType.HOSPITAL);
311+
}
312+
313+
if (facilityType.getValue() != null) {
314+
updateFacility((DistrictReferenceDto) district.getValue(), (CommunityReferenceDto) community.getValue(), facility);
315+
}
316+
} else {
317+
FacilityReferenceDto noFacilityRef = FacadeProvider.getFacilityFacade().getByUuid(FacilityDto.NONE_FACILITY_UUID).toReference();
318+
facility.addItem(noFacilityRef);
319+
facility.setValue(noFacilityRef);
320+
}
321+
});
322+
323+
facility.addValueChangeListener(e -> {
324+
updateFacilityFields(facility, healthFacilityDetails);
325+
});
281326
facilityType.setValue(FacilityType.HOSPITAL); // default
282327

283328
region.addItems(FacadeProvider.getRegionFacade().getAllActiveAsReference());
@@ -294,7 +339,17 @@ protected void addFields() {
294339
Arrays.asList(CaseBulkEditData.REGION, CaseBulkEditData.DISTRICT, CaseBulkEditData.HEALTH_FACILITY),
295340
Arrays.asList(true));
296341
FieldHelper.setRequiredWhen(healthFacilityCheckbox, Arrays.asList(facilityTypeGroup, facilityType), Arrays.asList(true), false, null);
297-
342+
FieldHelper.setVisibleWhen(
343+
facilityOrHome,
344+
Arrays.asList(facilityTypeGroup, facilityType, facility),
345+
Collections.singletonList(TypeOfPlace.FACILITY),
346+
false);
347+
FieldHelper.setRequiredWhen(
348+
facilityOrHome,
349+
Arrays.asList(facilityTypeGroup, facilityType, facility),
350+
Collections.singletonList(TypeOfPlace.FACILITY),
351+
false,
352+
null);
298353
diseaseCheckBox.addValueChangeListener(e -> {
299354
disease.setEnabled((boolean) e.getProperty().getValue());
300355
});
@@ -312,6 +367,7 @@ protected void addFields() {
312367
district.setEnabled((boolean) e.getProperty().getValue());
313368
community.setEnabled((boolean) e.getProperty().getValue());
314369
facilityTypeGroup.setEnabled((boolean) e.getProperty().getValue());
370+
healthFacilityDetails.setEnabled((boolean) e.getProperty().getValue());
315371
facilityType.setEnabled((boolean) e.getProperty().getValue());
316372
facility.setEnabled((boolean) e.getProperty().getValue());
317373
if ((boolean) e.getProperty().getValue()) {
@@ -350,4 +406,46 @@ public CheckBox getSurveillanceOfficerCheckBox() {
350406
public CheckBox getHealthFacilityCheckbox() {
351407
return healthFacilityCheckbox;
352408
}
409+
410+
private void updateFacility(DistrictReferenceDto district, CommunityReferenceDto community, ComboBox facility) {
411+
FieldHelper.removeItems(facility);
412+
if (facilityType.getValue() != null && district != null) {
413+
if (community != null) {
414+
FieldHelper.updateItems(
415+
facility,
416+
FacadeProvider.getFacilityFacade()
417+
.getActiveFacilitiesByCommunityAndType(community, (FacilityType) facilityType.getValue(), true, false));
418+
} else {
419+
FieldHelper.updateItems(
420+
facility,
421+
FacadeProvider.getFacilityFacade()
422+
.getActiveFacilitiesByDistrictAndType(district, (FacilityType) facilityType.getValue(), true, false));
423+
}
424+
}
425+
}
426+
private void updateFacilityFields(ComboBox cbFacility, TextField tfFacilityDetails) {
427+
428+
if (cbFacility.getValue() != null) {
429+
boolean otherHealthFacility = ((FacilityReferenceDto) cbFacility.getValue()).getUuid().equals(FacilityDto.OTHER_FACILITY_UUID);
430+
boolean noneHealthFacility = ((FacilityReferenceDto) cbFacility.getValue()).getUuid().equals(FacilityDto.NONE_FACILITY_UUID);
431+
boolean visibleAndRequired = otherHealthFacility || noneHealthFacility;
432+
433+
tfFacilityDetails.setVisible(visibleAndRequired);
434+
tfFacilityDetails.setRequired(visibleAndRequired);
435+
436+
if (otherHealthFacility) {
437+
tfFacilityDetails.setCaption(I18nProperties.getPrefixCaption(CaseDataDto.I18N_PREFIX, CaseDataDto.HEALTH_FACILITY_DETAILS));
438+
}
439+
if (noneHealthFacility) {
440+
tfFacilityDetails.setCaption(I18nProperties.getCaption(Captions.CaseData_noneHealthFacilityDetails));
441+
}
442+
if (!visibleAndRequired) {
443+
tfFacilityDetails.clear();
444+
}
445+
} else {
446+
tfFacilityDetails.setVisible(false);
447+
tfFacilityDetails.setRequired(false);
448+
tfFacilityDetails.clear();
449+
}
450+
}
353451
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class CaseBulkEditData extends EntityDto {
3434
public static final String DISTRICT = "district";
3535
public static final String COMMUNITY = "community";
3636
public static final String HEALTH_FACILITY = "healthFacility";
37+
public static final String HEALTH_FACILITY_DETAILS = "healthFacilityDetails";
3738

3839
private Disease disease;
3940
private String diseaseDetails;
@@ -48,6 +49,7 @@ public class CaseBulkEditData extends EntityDto {
4849
private DistrictReferenceDto district;
4950
private CommunityReferenceDto community;
5051
private FacilityReferenceDto healthFacility;
52+
private String healthFacilityDetails;
5153

5254
public Disease getDisease() {
5355
return disease;
@@ -152,4 +154,12 @@ public FacilityReferenceDto getHealthFacility() {
152154
public void setHealthFacility(FacilityReferenceDto healthFacility) {
153155
this.healthFacility = healthFacility;
154156
}
157+
158+
public String getHealthFacilityDetails() {
159+
return healthFacilityDetails;
160+
}
161+
162+
public void setHealthFacilityDetails(String healthFacilityDetails) {
163+
this.healthFacilityDetails = healthFacilityDetails;
164+
}
155165
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Collection;
2121
import java.util.Date;
2222
import java.util.List;
23+
import java.util.Objects;
2324
import java.util.function.Consumer;
2425

2526
import com.vaadin.navigator.Navigator;
@@ -751,6 +752,8 @@ private void bulkEditWithFacilities(
751752
updatedCase.setDistrict(updatedCaseBulkEditData.getDistrict());
752753
updatedCase.setCommunity(updatedCaseBulkEditData.getCommunity());
753754
updatedCase.setHealthFacility(updatedCaseBulkEditData.getHealthFacility());
755+
updatedCase.setHealthFacilityDetails(updatedCaseBulkEditData.getHealthFacilityDetails());
756+
updatedCase.setHealthFacilityDetails(updatedCaseBulkEditData.getHealthFacilityDetails());
754757
CaseLogic.handleHospitalization(updatedCase, caseFacade.getCaseDataByUuid(indexDto.getUuid()), doTransfer);
755758
caseFacade.saveCase(updatedCase);
756759
}
@@ -787,6 +790,10 @@ private CaseDataDto changeCaseDto(
787790
caseDto.setSurveillanceOfficer(updatedCaseBulkEditData.getSurveillanceOfficer());
788791
}
789792

793+
if(Objects.nonNull(updatedCaseBulkEditData.getHealthFacilityDetails())){
794+
caseDto.setHealthFacilityDetails(updatedCaseBulkEditData.getHealthFacilityDetails());
795+
}
796+
790797
return caseDto;
791798
}
792799

0 commit comments

Comments
 (0)