diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.java index 73d25039a5..3d3e6ae3c3 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.java @@ -366,7 +366,8 @@ private void initSearchParameters() { uid, selectedOrgUnit, ValueType.ORGANISATION_UNIT, - null + null, + true ) ); return Unit.INSTANCE; diff --git a/form/src/main/java/org/dhis2/form/ui/FormViewModel.kt b/form/src/main/java/org/dhis2/form/ui/FormViewModel.kt index 26cb94fe15..0d2dfbb943 100644 --- a/form/src/main/java/org/dhis2/form/ui/FormViewModel.kt +++ b/form/src/main/java/org/dhis2/form/ui/FormViewModel.kt @@ -446,6 +446,7 @@ class FormViewModel( intent.valueType, intent.value, intent.fieldMask, + intent.allowFutureDates, ) createRowAction( @@ -634,7 +635,7 @@ class FormViewModel( try { val date = LocalDate.parse(dateString, formatter) if (allowFutureDates == false && date.isAfter(LocalDate.now())) { - return Result.Failure(DateFailure.ParseException) + return Result.Failure(Throwable()) } return valueType.validator.validate(dateString) } catch (e: DateTimeParseException) { diff --git a/form/src/main/java/org/dhis2/form/ui/intent/FormIntent.kt b/form/src/main/java/org/dhis2/form/ui/intent/FormIntent.kt index b6a7863825..1f37d3b459 100644 --- a/form/src/main/java/org/dhis2/form/ui/intent/FormIntent.kt +++ b/form/src/main/java/org/dhis2/form/ui/intent/FormIntent.kt @@ -24,6 +24,7 @@ sealed class FormIntent { val value: String?, val valueType: ValueType?, val fieldMask: String? = null, + val allowFutureDates: Boolean? = false, ) : FormIntent() data class OnQrCodeScanned( @@ -42,7 +43,6 @@ sealed class FormIntent { val uid: String, val value: String?, val valueType: ValueType?, - val allowFutureDates: Boolean? = false, ) : FormIntent() data class ClearValue( diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt index 78d23930f2..a013ab1125 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt @@ -102,13 +102,17 @@ fun ProvideInputAge( } is AgeInputType.DateOfBirth -> { - saveValue( - intentHandler, - fieldUiModel.uid, - formatUIDateToStored(type.value.text), - fieldUiModel.valueType, - fieldUiModel.allowFutureDates, - ) + formatUIDateToStored(type.value.text) + .takeIf { it != fieldUiModel.value } + ?.let { + saveValue( + intentHandler, + fieldUiModel.uid, + it, + fieldUiModel.valueType, + fieldUiModel.allowFutureDates, + ) + } } AgeInputType.None -> { @@ -135,14 +139,23 @@ private fun saveValue( valueType: ValueType?, allowFutureDates: Boolean?, ) { - intentHandler.invoke( - FormIntent.OnTextChange( - uid, - value, - valueType, - allowFutureDates ?: false, - ), - ) + when (value?.length) { + null, 10 -> intentHandler.invoke( + FormIntent.OnSave( + uid, + value, + valueType, + allowFutureDates = allowFutureDates, + ), + ) + else -> intentHandler.invoke( + FormIntent.OnTextChange( + uid, + value, + valueType, + ), + ) + } } private fun formatStoredDateToUI(inputDateString: String): String { diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/DateProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/DateProvider.kt index dee4b5a5fb..839ddd09b3 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/DateProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/DateProvider.kt @@ -78,13 +78,13 @@ fun ProvideInputDate( uid = fieldUiModel.uid, value = formatUIDateToStored(it?.text, fieldUiModel.valueType), valueType = fieldUiModel.valueType, + allowFutureDates = fieldUiModel.allowFutureDates, ) } else { FormIntent.OnTextChange( uid = fieldUiModel.uid, value = formatUIDateToStored(it?.text, fieldUiModel.valueType), valueType = fieldUiModel.valueType, - allowFutureDates = fieldUiModel.allowFutureDates ?: true, ) } intentHandler.invoke(formIntent)