Skip to content

Commit

Permalink
feat(bank-sdk): Skonto screen. Remove skonto amount validation
Browse files Browse the repository at this point in the history
PP-648
  • Loading branch information
ndubkov-distcotech committed Jul 25, 2024
1 parent 8d0be73 commit 016bf6d
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,6 @@ private fun ScreenReadyState(
.tabletMaxWidth(),
colors = screenColorScheme.skontoSectionColors,
amount = state.skontoAmount,
amountValidation = state.skontoAmountValidation,
dueDate = state.discountDueDate,
infoPaymentInDays = state.paymentInDays,
infoDiscountValue = state.discountAmount,
Expand Down Expand Up @@ -413,7 +412,6 @@ private fun YourInvoiceScanSection(
private fun SkontoSection(
colors: SkontoSectionColors,
amount: SkontoData.Amount,
amountValidation: SkontoFragmentContract.State.Ready.SkontoAmountValidation,
dueDate: LocalDate,
infoPaymentInDays: Int,
infoDiscountValue: BigDecimal,
Expand Down Expand Up @@ -513,7 +511,6 @@ private fun SkontoSection(
.fillMaxWidth()
.padding(top = 16.dp),
enabled = isActive,
isError = amountValidation != SkontoFragmentContract.State.Ready.SkontoAmountValidation.Valid,
colors = colors.amountFieldColors,
onValueChange = { onSkontoAmountChange(it) },
label = stringResource(id = R.string.gbs_skonto_section_discount_field_amount_hint),
Expand Down Expand Up @@ -925,6 +922,5 @@ private val previewState = SkontoFragmentContract.State.Ready(
paymentMethod = SkontoData.SkontoPaymentMethod.PayPal,
skontoEdgeCase = SkontoFragmentContract.SkontoEdgeCase.PayByCashOnly,
edgeCaseInfoDialogVisible = false,
skontoAmountValidation = SkontoFragmentContract.State.Ready.SkontoAmountValidation.Invalid.SkontoAmountGreaterOfFullAmount,
savedAmount = SkontoData.Amount(BigDecimal("3"), "EUR")
)
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,14 @@ internal object SkontoFragmentContract {
val paymentInDays: Int,
val discountAmount: BigDecimal,
val skontoAmount: SkontoData.Amount,
val skontoAmountValidation: SkontoAmountValidation,
val discountDueDate: LocalDate,
val fullAmount: SkontoData.Amount,
val totalAmount: SkontoData.Amount,
val savedAmount: SkontoData.Amount,
val paymentMethod: SkontoData.SkontoPaymentMethod,
val skontoEdgeCase: SkontoEdgeCase?,
val edgeCaseInfoDialogVisible: Boolean,
) : State() {
sealed class SkontoAmountValidation {
object Valid : SkontoAmountValidation()

sealed class Invalid : SkontoAmountValidation() {
object SkontoAmountGreaterOfFullAmount : Invalid()
}
}
}
) : State()
}

sealed class SkontoEdgeCase {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,6 @@ internal class SkontoFragmentViewModel(
paymentMethod = paymentMethod,
skontoEdgeCase = edgeCase,
edgeCaseInfoDialogVisible = edgeCase != null,
skontoAmountValidation = validateSkontoAmount(
skontoAmount = data.skontoAmountToPay,
fullAmount = data.fullAmountToPay
),
savedAmount = savedAmount
)
}
Expand All @@ -73,6 +69,14 @@ internal class SkontoFragmentViewModel(

fun onSkontoAmountFieldChanged(newValue: BigDecimal) = viewModelScope.launch {
val currentState = stateFlow.value as? SkontoFragmentContract.State.Ready ?: return@launch

if (newValue > currentState.fullAmount.amount) {
stateFlow.emit(
currentState.copy(skontoAmount = currentState.skontoAmount)
)
return@launch
}

val discount = calculateDiscount(newValue, currentState.fullAmount.amount)
val totalAmount = if (currentState.isSkontoSectionActive)
newValue
Expand All @@ -90,7 +94,6 @@ internal class SkontoFragmentViewModel(
skontoAmount = newSkontoAmount,
discountAmount = discount,
totalAmount = newTotalAmount,
skontoAmountValidation = validateSkontoAmount(newSkontoAmount, currentState.fullAmount),
savedAmount = savedAmount,
)
)
Expand Down Expand Up @@ -166,19 +169,6 @@ internal class SkontoFragmentViewModel(
private fun calculateSavedAmount(skontoAmount: BigDecimal, fullAmount: BigDecimal) =
fullAmount.minus(skontoAmount).coerceAtLeast(BigDecimal.ZERO)

private fun validateSkontoAmount(
skontoAmount: SkontoData.Amount,
fullAmount: SkontoData.Amount
): SkontoFragmentContract.State.Ready.SkontoAmountValidation {
return when {
skontoAmount.amount <= fullAmount.amount ->
SkontoFragmentContract.State.Ready.SkontoAmountValidation.Valid

else ->
SkontoFragmentContract.State.Ready.SkontoAmountValidation.Invalid.SkontoAmountGreaterOfFullAmount
}
}

private fun extractSkontoEdgeCase(
dueDate: LocalDate,
paymentMethod: SkontoData.SkontoPaymentMethod,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,8 @@ fun GiniAmountTextInput(
val parsedAmount = decimalFormatter.parseAmount(amount)

var text by remember { mutableStateOf(parsedAmount) }

LaunchedEffect(key1 = parsedAmount) { // we need to reset text if amount was changed only
text = parsedAmount
}

text = parsedAmount

GiniTextInput(
modifier = modifier,
Expand Down

0 comments on commit 016bf6d

Please sign in to comment.