@@ -81,22 +81,22 @@ public class HospitalizationForm extends AbstractEditForm<HospitalizationDto> {
8181 fluidRowLocs (HEALTH_FACILITY , HEALTH_FACILITY_DEPARTMENT ) +
8282 fluidRowLocs (HospitalizationDto .ADMISSION_DATE , HospitalizationDto .DISCHARGE_DATE , HospitalizationDto .LEFT_AGAINST_ADVICE , "" ) +
8383 fluidRowLocs (HospitalizationDto .HOSPITALIZATION_REASON , HospitalizationDto .OTHER_HOSPITALIZATION_REASON ) +
84- fluidRowLocs (3 , HospitalizationDto .INTENSIVE_CARE_UNIT , 3 ,
85- HospitalizationDto .INTENSIVE_CARE_UNIT_START ,
86- 3 ,
87- HospitalizationDto .INTENSIVE_CARE_UNIT_END )
88- + fluidRowLocs (HospitalizationDto .ICU_LENGTH_OF_STAY , HospitalizationDto . OXYGEN_PRESCRIBED , HospitalizationDto .STILL_HOSPITALIZED )
89- + fluidRowLocs (HospitalizationDto .ISOLATED , HospitalizationDto .ISOLATION_DATE , "" )
90- + fluidRowLocs (HospitalizationDto .DESCRIPTION ) +
84+ fluidRowLocs (3 , HospitalizationDto .INTENSIVE_CARE_UNIT ,
85+ 3 , HospitalizationDto .INTENSIVE_CARE_UNIT_START ,
86+ 3 , HospitalizationDto . INTENSIVE_CARE_UNIT_END ,
87+ 3 , HospitalizationDto .ICU_LENGTH_OF_STAY ) +
88+ fluidRowLocs (HospitalizationDto .OXYGEN_PRESCRIBED , HospitalizationDto .STILL_HOSPITALIZED ) +
89+ fluidRowLocs (HospitalizationDto .ISOLATED , HospitalizationDto .ISOLATION_DATE , "" ) +
90+ fluidRowLocs (HospitalizationDto .DESCRIPTION ) +
9191 loc (PREVIOUS_HOSPITALIZATIONS_HEADING_LOC ) +
9292 fluidRowLocs (HospitalizationDto .HOSPITALIZED_PREVIOUSLY ) +
9393 fluidRowLocs (HospitalizationDto .PREVIOUS_HOSPITALIZATIONS );
94+ //@formatter:on
9495 private final CaseDataDto caze ;
9596 private final ViewMode viewMode ;
9697 private NullableOptionGroup intensiveCareUnit ;
9798 private DateField intensiveCareUnitStart ;
9899 private DateField intensiveCareUnitEnd ;
99- //@formatter:on
100100
101101 public HospitalizationForm (CaseDataDto caze , ViewMode viewMode , boolean isPseudonymized , boolean inJurisdiction , boolean isEditAllowed ) {
102102
@@ -145,19 +145,37 @@ protected void addFields() {
145145 final NullableOptionGroup currentlyHospitalizedField = addField (HospitalizationDto .CURRENTLY_HOSPITALIZED , NullableOptionGroup .class );
146146 final DateField admissionDateField = addField (HospitalizationDto .ADMISSION_DATE , DateField .class );
147147 final DateField dischargeDateField = addDateField (HospitalizationDto .DISCHARGE_DATE , DateField .class , 7 );
148+
149+ // RSV-specific fields
148150 intensiveCareUnit = addField (HospitalizationDto .INTENSIVE_CARE_UNIT , NullableOptionGroup .class );
149151 intensiveCareUnitStart = addField (HospitalizationDto .INTENSIVE_CARE_UNIT_START , DateField .class );
150152 intensiveCareUnitStart .setVisible (false );
151153 intensiveCareUnitEnd = addField (HospitalizationDto .INTENSIVE_CARE_UNIT_END , DateField .class );
152154 intensiveCareUnitEnd .setVisible (false );
153- FieldHelper
154- .setVisibleWhen (intensiveCareUnit , Arrays .asList (intensiveCareUnitStart , intensiveCareUnitEnd ), Arrays .asList (YesNoUnknown .YES ), true );
155+
156+ if (caze .getDisease () == Disease .RESPIRATORY_SYNCYTIAL_VIRUS ) {
157+ FieldHelper .setVisibleWhen (
158+ intensiveCareUnit ,
159+ Arrays .asList (intensiveCareUnitStart , intensiveCareUnitEnd ),
160+ Arrays .asList (YesNoUnknown .YES ),
161+ true );
162+ } else {
163+ intensiveCareUnit .setVisible (false );
164+ intensiveCareUnitStart .setVisible (false );
165+ intensiveCareUnitEnd .setVisible (false );
166+ }
155167
156168 // RSV-specific fields
157169 final TextField icuLengthOfStayField = addField (HospitalizationDto .ICU_LENGTH_OF_STAY , TextField .class );
158170 final NullableOptionGroup oxygenPrescribedField = addField (HospitalizationDto .OXYGEN_PRESCRIBED , NullableOptionGroup .class );
159171 final NullableOptionGroup stillHospitalizedField = addField (HospitalizationDto .STILL_HOSPITALIZED , NullableOptionGroup .class );
160172
173+ if (caze .getDisease () != Disease .RESPIRATORY_SYNCYTIAL_VIRUS ) {
174+ icuLengthOfStayField .setVisible (false );
175+ oxygenPrescribedField .setVisible (false );
176+ stillHospitalizedField .setVisible (false );
177+ }
178+
161179 final Field isolationDateField = addField (HospitalizationDto .ISOLATION_DATE );
162180 final TextArea descriptionField = addField (HospitalizationDto .DESCRIPTION , TextArea .class );
163181 descriptionField .setRows (4 );
@@ -175,12 +193,9 @@ protected void addFields() {
175193 // Add listener to trigger RSV hospitalization reason defaulting when admitted to health facility
176194 admittedToHealthFacilityField .addValueChangeListener (event -> {
177195 final Object eventValue = event .getProperty ().getValue ();
178- final boolean isAdmitted = eventValue != null && eventValue instanceof Collection <?>
179- ? ((Collection <?>) eventValue ).contains (YesNoUnknown .YES )
180- : false ;
181- if (caze .getDisease () == Disease .RESPIRATORY_SYNCYTIAL_VIRUS
182- && isAdmitted
183- && hospitalizationReason .getValue () == null ) {
196+ final boolean isAdmitted =
197+ eventValue != null && eventValue instanceof Collection <?> ? ((Collection <?>) eventValue ).contains (YesNoUnknown .YES ) : false ;
198+ if (caze .getDisease () == Disease .RESPIRATORY_SYNCYTIAL_VIRUS && isAdmitted && hospitalizationReason .getValue () == null ) {
184199 hospitalizationReason .setValue (HospitalizationReasonType .REPORTED_DISEASE );
185200 }
186201 });
@@ -200,6 +215,8 @@ protected void addFields() {
200215 intensiveCareUnit ,
201216 intensiveCareUnitStart ,
202217 intensiveCareUnitEnd ,
218+ oxygenPrescribedField ,
219+ stillHospitalizedField ,
203220 isolationDateField ,
204221 descriptionField ,
205222 isolatedField ,
@@ -278,52 +295,59 @@ public String getFormattedHtmlMessage() {
278295 false ,
279296 I18nProperties .getValidationError (Validations .afterDate , dischargeDateField .getCaption (), admissionDateField .getCaption ())));
280297 dischargeDateField .addValueChangeListener (event -> admissionDateField .markAsDirty ()); // re-evaluate admission date for consistent validation of all fields
281- intensiveCareUnitStart .addValidator (
282- new DateComparisonValidator (
283- intensiveCareUnitStart ,
284- admissionDateField ,
285- false ,
286- false ,
287- I18nProperties .getValidationError (Validations .afterDate , intensiveCareUnitStart .getCaption (), admissionDateField .getCaption ())));
288- intensiveCareUnitStart .addValidator (
289- new DateComparisonValidator (
290- intensiveCareUnitStart ,
291- intensiveCareUnitEnd ,
292- true ,
293- false ,
294- I18nProperties .getValidationError (Validations .beforeDate , intensiveCareUnitStart .getCaption (), intensiveCareUnitEnd .getCaption ())));
295- intensiveCareUnitEnd .addValidator (
296- new DateComparisonValidator (
297- intensiveCareUnitEnd ,
298- intensiveCareUnitStart ,
299- false ,
300- false ,
301- I18nProperties .getValidationError (Validations .afterDate , intensiveCareUnitEnd .getCaption (), intensiveCareUnitStart .getCaption ())));
302- intensiveCareUnitEnd .addValidator (
303- new DateComparisonValidator (
304- intensiveCareUnitEnd ,
305- dischargeDateField ,
306- true ,
307- false ,
308- I18nProperties .getValidationError (Validations .beforeDate , intensiveCareUnitEnd .getCaption (), dischargeDateField .getCaption ())));
309- intensiveCareUnitStart .addValueChangeListener (event -> intensiveCareUnitEnd .markAsDirty ());
310- intensiveCareUnitEnd .addValueChangeListener (event -> intensiveCareUnitStart .markAsDirty ());
311- hospitalizedPreviouslyField .addValueChangeListener (e -> updatePrevHospHint (hospitalizedPreviouslyField , previousHospitalizationsField ));
312- previousHospitalizationsField .addValueChangeListener (e -> updatePrevHospHint (hospitalizedPreviouslyField , previousHospitalizationsField ));
313298
314- // RSV-specific conditional visibility logic
315- // stillHospitalized should not be visible/writable if discharge date is filled
316- dischargeDateField .addValueChangeListener (event -> {
317- boolean hasDischargeDate = dischargeDateField .getValue () != null ;
318- stillHospitalizedField .setVisible (!hasDischargeDate );
319- stillHospitalizedField .setEnabled (!hasDischargeDate );
320- if (hasDischargeDate ) {
321- stillHospitalizedField .setValue (null );
322- }
323- });
299+ // RSV specific logic
300+ if (caze .getDisease () == Disease .RESPIRATORY_SYNCYTIAL_VIRUS ) {
301+ intensiveCareUnitStart .addValidator (
302+ new DateComparisonValidator (
303+ intensiveCareUnitStart ,
304+ admissionDateField ,
305+ false ,
306+ false ,
307+ I18nProperties .getValidationError (Validations .afterDate , intensiveCareUnitStart .getCaption (), admissionDateField .getCaption ())));
308+ intensiveCareUnitStart .addValidator (
309+ new DateComparisonValidator (
310+ intensiveCareUnitStart ,
311+ intensiveCareUnitEnd ,
312+ true ,
313+ false ,
314+ I18nProperties
315+ .getValidationError (Validations .beforeDate , intensiveCareUnitStart .getCaption (), intensiveCareUnitEnd .getCaption ())));
316+ intensiveCareUnitEnd .addValidator (
317+ new DateComparisonValidator (
318+ intensiveCareUnitEnd ,
319+ intensiveCareUnitStart ,
320+ false ,
321+ false ,
322+ I18nProperties
323+ .getValidationError (Validations .afterDate , intensiveCareUnitEnd .getCaption (), intensiveCareUnitStart .getCaption ())));
324+ intensiveCareUnitEnd .addValidator (
325+ new DateComparisonValidator (
326+ intensiveCareUnitEnd ,
327+ dischargeDateField ,
328+ true ,
329+ false ,
330+ I18nProperties .getValidationError (Validations .beforeDate , intensiveCareUnitEnd .getCaption (), dischargeDateField .getCaption ())));
331+ intensiveCareUnitStart .addValueChangeListener (event -> intensiveCareUnitEnd .markAsDirty ());
332+ intensiveCareUnitEnd .addValueChangeListener (event -> intensiveCareUnitStart .markAsDirty ());
333+
334+ // RSV-specific conditional visibility logic
335+ // stillHospitalized should not be visible/writable if discharge date is filled
336+
337+ dischargeDateField .addValueChangeListener (event -> {
338+ boolean hasDischargeDate = dischargeDateField .getValue () != null ;
339+ stillHospitalizedField .setVisible (!hasDischargeDate );
340+ stillHospitalizedField .setEnabled (!hasDischargeDate );
341+ if (hasDischargeDate ) {
342+ stillHospitalizedField .setValue (null );
343+ }
344+ });
345+ // Show icuLengthOfStay when ICU dates are not available but survey has length information
346+ FieldHelper .setVisibleWhen (intensiveCareUnit , Collections .singletonList (icuLengthOfStayField ), Arrays .asList (YesNoUnknown .YES ), true );
347+ }
324348
325- // Show icuLengthOfStay when ICU dates are not available but survey has length information
326- FieldHelper . setVisibleWhen ( intensiveCareUnit , Collections . singletonList ( icuLengthOfStayField ), Arrays . asList ( YesNoUnknown . YES ), true );
349+ hospitalizedPreviouslyField . addValueChangeListener ( e -> updatePrevHospHint ( hospitalizedPreviouslyField , previousHospitalizationsField ));
350+ previousHospitalizationsField . addValueChangeListener ( e -> updatePrevHospHint ( hospitalizedPreviouslyField , previousHospitalizationsField ) );
327351 }
328352
329353 private void updatePrevHospHint (NullableOptionGroup hospitalizedPreviouslyField , PreviousHospitalizationsField previousHospitalizationsField ) {
0 commit comments