1717 *******************************************************************************/
1818package 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 ;
2024import static de .symeda .sormas .ui .utils .CssStyles .VSPACE_4 ;
2125import static de .symeda .sormas .ui .utils .LayoutUtil .fluidColumn ;
2226import static de .symeda .sormas .ui .utils .LayoutUtil .fluidColumnLoc ;
2630import static de .symeda .sormas .ui .utils .LayoutUtil .locs ;
2731
2832import java .util .Arrays ;
33+ import java .util .Collections ;
2934import java .util .List ;
3035
3136import 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}
0 commit comments