diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt index 57cc801313..566e56dfbd 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt @@ -148,7 +148,23 @@ internal class DefaultPaymentAccountStatusFetcher @Inject constructor( -> PaymentAccountStatusValue.IssuingCard(source = StatusSource.ACTUAL) OrderStatus.CANCELED -> { - PaymentAccountStatusValue.Error.CardIssueFailed(customerId = orderData.customerId) + onboardingRepository.getCustomerInfo(userWalletId = account.userWalletId) + .fold( + ifLeft = { + PaymentAccountStatusValue.Error.CardIssueFailed( + customerId = orderData.customerId, + ) + }, + ifRight = { customerInfo -> + if (customerInfo.kycStatus == KycStatus.REJECTED) { + customerInfo.mapToPaymentAccountStatus() + } else { + PaymentAccountStatusValue.Error.CardIssueFailed( + customerId = orderData.customerId, + ) + } + }, + ) } OrderStatus.COMPLETED -> { // Order was completed -> clear order id and get customer info diff --git a/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt b/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt index 180b1b864f..73a46626d2 100644 --- a/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt +++ b/domain/visa/src/main/kotlin/com/tangem/domain/pay/usecase/TangemPayMainScreenCustomerInfoUseCase.kt @@ -3,7 +3,6 @@ package com.tangem.domain.pay.usecase import arrow.core.Either import arrow.core.left import arrow.core.right -import com.tangem.domain.models.kyc.KycStatus import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.pay.TangemPayEligibilityManager import com.tangem.domain.pay.model.* @@ -149,41 +148,14 @@ class TangemPayMainScreenCustomerInfoUseCase( error.mapErrorForCustomer().left() }, ifRight = { orderData -> - when (orderData.status) { - OrderStatus.NEW, - OrderStatus.PROCESSING, - -> { - onboardingRepository.getCustomerInfo(userWalletId = userWalletId) - .mapLeft { it.mapErrorForCustomer() } - .map { customerInfo -> - MainScreenCustomerInfo(info = customerInfo, orderStatus = orderData.status) - } - } - - // Order cancelled. No need to get customer info - OrderStatus.CANCELED -> { - MainScreenCustomerInfo( - info = CustomerInfo( - customerId = null, - productInstance = null, - kycStatus = KycStatus.INIT, - cardInfo = null, - ), - orderStatus = OrderStatus.CANCELED, - ).right() - } - - OrderStatus.COMPLETED, - OrderStatus.UNKNOWN, - -> { - onboardingRepository.clearOrderId(userWalletId) - onboardingRepository.getCustomerInfo(userWalletId = userWalletId) - .mapLeft { it.mapErrorForCustomer() } - .map { customerInfo -> - MainScreenCustomerInfo(info = customerInfo, orderStatus = orderData.status) - } - } + if (orderData.status in setOf(OrderStatus.COMPLETED, OrderStatus.UNKNOWN)) { + onboardingRepository.clearOrderId(userWalletId) } + onboardingRepository.getCustomerInfo(userWalletId = userWalletId) + .mapLeft { it.mapErrorForCustomer() } + .map { customerInfo -> + MainScreenCustomerInfo(info = customerInfo, orderStatus = orderData.status) + } }, ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt index 9c19535642..3e1615a6e2 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/TangemPayUpdateInfoStateTransformer.kt @@ -53,9 +53,9 @@ internal class TangemPayUpdateInfoStateTransformer( // when statement copied to WalletTangemPayAnalyticsEventSender. Be careful when editing. return when { - value.orderStatus == OrderStatus.CANCELED -> createCancelledState(customerId) value.info.kycStatus != KycStatus.APPROVED && !value.info.customerId.isNullOrEmpty() -> createKycInProgressState(kycStatus = value.info.kycStatus, customerId = customerId) + value.orderStatus == OrderStatus.CANCELED -> createCancelledState(customerId) cardInfo != null && productInstance != null && value.orderStatus == OrderStatus.COMPLETED -> getCardInfoState(customerId, cardInfo, productInstance) else -> createIssueProgressState()