Skip to content

Commit 9afc965

Browse files
cazacmarinMarin
andauthored
Bug #13205 unknown birthdate (#13262)
* Fix on person who don't have a birthdate set. * Added functional for text input for years * Emancipated checkbox cannot be checked * a rename in a method. * method rename --------- Co-authored-by: Marin <marin@bend.md>
1 parent b757fb9 commit 9afc965

File tree

1 file changed

+45
-16
lines changed

1 file changed

+45
-16
lines changed

sormas-ui/src/main/java/de/symeda/sormas/ui/person/PersonEditForm.java

Lines changed: 45 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,8 @@ public class PersonEditForm extends AbstractEditForm<PersonDto> {
204204
private TextField nameOfGuardians;
205205
private long minimumAdultAge;
206206
private long minimumEmancipatedAge;
207+
private TextField approximateAgeField;
208+
private ComboBox approximateAgeTypeField;
207209
//@formatter:on
208210

209211
public PersonEditForm(
@@ -336,10 +338,10 @@ protected void addFields() {
336338
.validateBirthDate((Integer) e, (Integer) birthDateMonth.getValue(), (Integer) birthDateDay.getValue()));
337339

338340
DateField deathDate = addField(PersonDto.DEATH_DATE, DateField.class);
339-
TextField approximateAgeField = addField(PersonDto.APPROXIMATE_AGE, TextField.class);
341+
approximateAgeField = addField(PersonDto.APPROXIMATE_AGE, TextField.class);
340342
approximateAgeField
341343
.setConversionError(I18nProperties.getValidationError(Validations.onlyIntegerNumbersAllowed, approximateAgeField.getCaption()));
342-
ComboBox approximateAgeTypeField = addField(PersonDto.APPROXIMATE_AGE_TYPE, ComboBox.class);
344+
approximateAgeTypeField = addField(PersonDto.APPROXIMATE_AGE_TYPE, ComboBox.class);
343345
addField(PersonDto.APPROXIMATE_AGE_REFERENCE_DATE, DateField.class);
344346

345347
approximateAgeField.addValidator(
@@ -348,6 +350,14 @@ protected void addFields() {
348350
approximateAgeTypeField,
349351
I18nProperties.getValidationError(Validations.softApproximateAgeTooHigh)));
350352

353+
addFieldListeners(PersonDto.APPROXIMATE_AGE, e -> {
354+
updateLegalGuardianSection(false);
355+
});
356+
357+
addFieldListeners(PersonDto.APPROXIMATE_AGE_TYPE, e -> {
358+
updateLegalGuardianSection(false);
359+
});
360+
351361
TextField tfGestationAgeAtBirth = addField(PersonDto.GESTATION_AGE_AT_BIRTH, TextField.class);
352362
tfGestationAgeAtBirth
353363
.setConversionError(I18nProperties.getValidationError(Validations.onlyIntegerNumbersAllowed, tfGestationAgeAtBirth.getCaption()));
@@ -519,7 +529,7 @@ protected void addFields() {
519529
addFieldListeners(PersonDto.BIRTH_DATE_YYYY, e -> {
520530
updateApproximateAge();
521531
updateReadyOnlyApproximateAge();
522-
updateIsIncapacitatedCheckBox(false);
532+
updateLegalGuardianSection(false);
523533
});
524534

525535
addFieldListeners(PersonDto.DEATH_DATE, e -> updateApproximateAge());
@@ -651,12 +661,15 @@ protected void addFields() {
651661
hasGuardian = addCustomField(HAS_GUARDIAN, Boolean.class, CheckBox.class);
652662

653663
isIncapacitated = addField(PersonDto.IS_INCAPACITATED, CheckBox.class);
654-
isIncapacitated.addValueChangeListener(e -> updateIsIncapacitatedCheckBox(true));
664+
isIncapacitated.addValueChangeListener(e -> updateLegalGuardianSection(true));
655665

656666
isEmancipated = addField(PersonDto.IS_EMANCIPATED, CheckBox.class);
657667
isEmancipated.addValueChangeListener(e -> onEmancipatedChange());
668+
isEmancipated.setVisible(false);
658669
hasGuardian.setEnabled(false);
659-
minimumAdultAge = FacadeProvider.getConfigFacade().getMinimumAdultAge();//2 places
670+
hasGuardian.setValue(Boolean.TRUE);
671+
nameOfGuardians.setVisible(true);
672+
minimumAdultAge = FacadeProvider.getConfigFacade().getMinimumAdultAge();
660673
minimumEmancipatedAge = FacadeProvider.getConfigFacade().getMinimumEmancipatedAge();
661674
}
662675

@@ -678,38 +691,54 @@ private void onEmancipatedChange() {
678691
if(isEmancipatedChecked) {
679692
nameOfGuardians.setValue("");
680693
}
681-
updateHasGuardianCheckBox();
694+
updateHasGuardianCheckBox(isEmancipatedChecked);
682695
}
683696

684-
private void updateIsIncapacitatedCheckBox(boolean isInitialized) {
697+
private void updateLegalGuardianSection(boolean isInitialized) {
685698
boolean isIncapacitatedChecked = (isIncapacitated == null) || (isIncapacitated.getValue());
699+
boolean isEmancipatedChecked = (isEmancipated != null) && (isEmancipated.getValue());
686700
int approximateAge = getApproximateAgeInYears();
687-
boolean canBeEmancipated;
688-
if(approximateAge == -1) {
689-
canBeEmancipated = false;
690-
} else {
691-
canBeEmancipated = approximateAge >= minimumEmancipatedAge && approximateAge < minimumAdultAge;
692-
}
701+
boolean canBeEmancipated = personCanBeEmancipated(approximateAge, isEmancipatedChecked);
693702
isEmancipated.setVisible(!isIncapacitatedChecked && canBeEmancipated);
694703
hasGuardian.setValue(isIncapacitatedChecked || approximateAge < minimumAdultAge);
695704
if(getApproximateAgeInYears() < minimumAdultAge) {
696705
nameOfGuardians.setValue(getValue().getNamesOfGuardians());
697706
}
698-
updateHasGuardianCheckBox();
707+
updateHasGuardianCheckBox(false);
699708
hardResetNameOfGuardians(isInitialized);
700709
}
701710

711+
private boolean personCanBeEmancipated(int approximateAge, boolean change) {
712+
boolean canBeEmancipated;
713+
if(approximateAge == -1 && (approximateAgeField).getValue() != null) {
714+
canBeEmancipated = false;
715+
} else {
716+
canBeEmancipated = approximateAge >= minimumEmancipatedAge && approximateAge < minimumAdultAge;
717+
}
718+
if(!canBeEmancipated && (approximateAgeField).getValue() != null){
719+
int age = Integer.parseInt(approximateAgeField.getValue());
720+
if(approximateAgeTypeField.getValue() == ApproximateAgeType.YEARS){
721+
canBeEmancipated = age >= minimumEmancipatedAge && age < minimumAdultAge;
722+
if (change) {
723+
isEmancipated.setValue(canBeEmancipated);
724+
}
725+
}
726+
}
727+
return canBeEmancipated;
728+
}
729+
702730
private void hardResetNameOfGuardians(boolean isInitialized) {
703731
boolean isIncapacitatedChecked = (isIncapacitated != null) && (isIncapacitated.getValue());
704732
if (getApproximateAgeInYears() != -1 && getApproximateAgeInYears() >= minimumAdultAge && !isIncapacitatedChecked && isInitialized) {
705733
nameOfGuardians.setValue("");
706734
}
707735
}
708736

709-
private void updateHasGuardianCheckBox() {
737+
private void updateHasGuardianCheckBox(boolean onEmancipatedChange) {
710738
boolean isIncapacitatedChecked = (isIncapacitated != null) && (isIncapacitated.getValue());
711739
boolean isEmancipatedChecked = (isEmancipated != null) && (isEmancipated.getValue());
712-
if((getApproximateAgeInYears() >= minimumAdultAge || (getApproximateAgeInYears() < minimumEmancipatedAge) && isEmancipatedChecked)) {
740+
boolean canBe = personCanBeEmancipated(getApproximateAgeInYears(), onEmancipatedChange);
741+
if((!canBe || isIncapacitatedChecked) && isEmancipatedChecked) {
713742
isEmancipatedChecked = false;
714743
isEmancipated.setValue(Boolean.FALSE);
715744
isIncapacitated.setVisible(true);

0 commit comments

Comments
 (0)