From de065019e65f9b1b2bae78f571cca662aaf0afe3 Mon Sep 17 00:00:00 2001 From: Pronay sarker Date: Fri, 16 Aug 2024 09:09:24 +0600 Subject: [PATCH] MIFOSAC-256 implemented compose navigation in loan-module MIFOSAC-256 implemented compose navigation in loan-module --- .../com/mifos/core/common/utils/Constants.kt | 1 + .../objects/accounts/loan/LoanApprovalData.kt | 13 + .../GroupLoanAccountScreen.kt | 2 +- .../GroupLoanAccountViewModel.kt | 7 +- .../loan/loan_account/LoanAccountScreen.kt | 2 +- .../loan/loan_account/LoanAccountViewModel.kt | 7 +- .../LoanAccountSummaryScreen.kt | 28 +- .../LoanAccountSummaryViewModel.kt | 11 +- .../LoanAccountApprovalScreen.kt | 5 - .../LoanAccountApprovalViewModel.kt | 17 +- .../loan/loan_charge/LoanChargeScreen.kt | 3 +- .../loan/loan_charge/LoanChargeViewModel.kt | 7 +- .../LoanAccountDisbursementScreen.kt | 12 +- .../LoanAccountDisbursementViewModel.kt | 16 +- .../loan_repayment/LoanRepaymentScreen.kt | 13 +- .../loan_repayment/LoanRepaymentViewModel.kt | 24 +- .../LoanRepaymentScheduleScreen.kt | 7 +- .../LoanRepaymentScheduleViewModel.kt | 14 +- .../LoanTransactionsScreen.kt | 9 +- .../LoanTransactionsViewModel.kt | 14 +- .../feature/loan/navigation/LoanNavigation.kt | 260 ++++++++++++++++++ .../feature/loan/navigation/LoanScreens.kt | 59 ++++ .../savings/navigation/SavingsNavigation.kt | 4 +- .../mifosxdroid/components/Navigation.kt | 29 +- .../GroupLoanAccountFragment.kt | 4 +- .../online/loanaccount/LoanAccountFragment.kt | 4 +- .../LoanAccountApproval.kt | 8 +- .../LoanAccountDisbursementFragment.kt | 4 +- .../LoanAccountSummaryFragment.kt | 6 +- .../online/loancharge/LoanChargeFragment.kt | 10 +- .../loanrepayment/LoanRepaymentFragment.kt | 22 +- .../LoanRepaymentScheduleFragment.kt | 4 +- .../LoanTransactionsFragment.kt | 4 +- 33 files changed, 508 insertions(+), 122 deletions(-) create mode 100644 core/database/src/main/java/com/mifos/core/objects/accounts/loan/LoanApprovalData.kt create mode 100644 feature/loan/src/main/java/com/mifos/feature/loan/navigation/LoanNavigation.kt create mode 100644 feature/loan/src/main/java/com/mifos/feature/loan/navigation/LoanScreens.kt diff --git a/core/common/src/main/java/com/mifos/core/common/utils/Constants.kt b/core/common/src/main/java/com/mifos/core/common/utils/Constants.kt index 01eedf617ca..c456a11a48e 100644 --- a/core/common/src/main/java/com/mifos/core/common/utils/Constants.kt +++ b/core/common/src/main/java/com/mifos/core/common/utils/Constants.kt @@ -215,4 +215,5 @@ object Constants { // Compose Navigation KEY const val REPORT_TYPE_ITEM = "report_type_item" const val REPORT_PARAMETER_RESPONSE = "report_parameter_response" + const val LOAN_WITH_ASSOCIATIONS = "loanWithAssociation" } \ No newline at end of file diff --git a/core/database/src/main/java/com/mifos/core/objects/accounts/loan/LoanApprovalData.kt b/core/database/src/main/java/com/mifos/core/objects/accounts/loan/LoanApprovalData.kt new file mode 100644 index 00000000000..6832513c9f5 --- /dev/null +++ b/core/database/src/main/java/com/mifos/core/objects/accounts/loan/LoanApprovalData.kt @@ -0,0 +1,13 @@ +package com.mifos.core.objects.accounts.loan + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +/** + * Created by Pronay Sarker on 16/08/2024 (7:17 AM) + */ +@Parcelize +data class LoanApprovalData( + val loanID: Int, + val loanWithAssociations: LoanWithAssociations +) : Parcelable diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/group_loan_account/GroupLoanAccountScreen.kt b/feature/loan/src/main/java/com/mifos/feature/loan/group_loan_account/GroupLoanAccountScreen.kt index 90608d5faf7..3b9218e5f69 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/group_loan_account/GroupLoanAccountScreen.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/group_loan_account/GroupLoanAccountScreen.kt @@ -67,12 +67,12 @@ import java.util.Locale @Composable fun GroupLoanAccountScreen( - groupId: Int, onBackPressed: () -> Unit ) { val viewModel: GroupLoanAccountViewModel = hiltViewModel() val state by viewModel.groupLoanAccountUiState.collectAsStateWithLifecycle() val loanProducts by viewModel.loanProducts.collectAsStateWithLifecycle() + val groupId by viewModel.groupId.collectAsStateWithLifecycle() LaunchedEffect(loanProducts) { if (loanProducts.isNotEmpty()) { diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/group_loan_account/GroupLoanAccountViewModel.kt b/feature/loan/src/main/java/com/mifos/feature/loan/group_loan_account/GroupLoanAccountViewModel.kt index 66622f72f42..c24c0316a68 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/group_loan_account/GroupLoanAccountViewModel.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/group_loan_account/GroupLoanAccountViewModel.kt @@ -1,7 +1,9 @@ package com.mifos.feature.loan.group_loan_account +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.mifos.core.common.utils.Constants import com.mifos.core.common.utils.Resource import com.mifos.core.data.GroupLoanPayload import com.mifos.core.domain.use_cases.CreateGroupLoansAccountUseCase @@ -21,9 +23,12 @@ import javax.inject.Inject class GroupLoanAccountViewModel @Inject constructor( private val getAllLoanUseCase: GetAllLoanUseCase, private val getGroupLoansAccountTemplateUseCase: GetGroupLoansAccountTemplateUseCase, - private val createGroupLoansAccountUseCase: CreateGroupLoansAccountUseCase + private val createGroupLoansAccountUseCase: CreateGroupLoansAccountUseCase, + savedStateHandle: SavedStateHandle ) : ViewModel() { + val groupId = savedStateHandle.getStateFlow(key = Constants.GROUP_ID, initialValue = 0) + private val _groupLoanAccountUiState = MutableStateFlow(GroupLoanAccountUiState.Loading) val groupLoanAccountUiState = _groupLoanAccountUiState.asStateFlow() diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_account/LoanAccountScreen.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_account/LoanAccountScreen.kt index d8e05848d6f..dfd0045c500 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_account/LoanAccountScreen.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_account/LoanAccountScreen.kt @@ -68,13 +68,13 @@ import java.util.Locale @Composable fun LoanAccountScreen( - clientId: Int, onBackPressed: () -> Unit, dataTable: (List, LoansPayload) -> Unit ) { val viewModel: LoanAccountViewModel = hiltViewModel() val state by viewModel.loanAccountUiState.collectAsStateWithLifecycle() val loanAccountTemplateState by viewModel.loanAccountTemplateUiState.collectAsStateWithLifecycle() + val clientId by viewModel.clientId.collectAsStateWithLifecycle() LaunchedEffect(Unit) { viewModel.loadAllLoans() diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_account/LoanAccountViewModel.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_account/LoanAccountViewModel.kt index 2fd54f9bb2b..f272444ed01 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_account/LoanAccountViewModel.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_account/LoanAccountViewModel.kt @@ -1,7 +1,9 @@ package com.mifos.feature.loan.loan_account +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.mifos.core.common.utils.Constants import com.mifos.core.common.utils.Resource import com.mifos.core.data.LoansPayload import com.mifos.core.domain.use_cases.CreateLoanAccountUseCase @@ -20,9 +22,12 @@ import javax.inject.Inject class LoanAccountViewModel @Inject constructor( private val getAllLoanUseCase: GetAllLoanUseCase, private val getLoansAccountTemplateUseCase: GetLoansAccountTemplateUseCase, - private val createLoanAccountUseCase: CreateLoanAccountUseCase + private val createLoanAccountUseCase: CreateLoanAccountUseCase, + savedStateHandle: SavedStateHandle ) : ViewModel() { + val clientId = savedStateHandle.getStateFlow(key = Constants.CLIENT_ID, initialValue = 0) + private val _loanAccountUiState = MutableStateFlow(LoanAccountUiState.Loading) val loanAccountUiState = _loanAccountUiState.asStateFlow() diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_account_summary/LoanAccountSummaryScreen.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_account_summary/LoanAccountSummaryScreen.kt index 41fe27b15ff..156e26618cc 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_account_summary/LoanAccountSummaryScreen.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_account_summary/LoanAccountSummaryScreen.kt @@ -66,23 +66,21 @@ import com.mifos.feature.loan.R /** * Created by Pronay Sarker on 01/07/2024 (5:50 AM) */ - - @Composable fun LoanAccountSummaryScreen( - viewModel: LoanAccountSummaryViewModel = hiltViewModel(), - loanAccountNumber: Int, navigateBack: () -> Unit, - onMoreInfoClicked: () -> Unit, + onMoreInfoClicked: (loanId : Int) -> Unit, onTransactionsClicked: (loadId: Int) -> Unit, onRepaymentScheduleClicked: (loanId: Int) -> Unit, - onDocumentsClicked: () -> Unit, - onChargesClicked: () -> Unit, - approveLoan: (loanWithAssociations: LoanWithAssociations) -> Unit, - disburseLoan: () -> Unit, + onDocumentsClicked: (loanId : Int) -> Unit, + onChargesClicked: (loanId : Int) -> Unit, + approveLoan: (loadId : Int, loanWithAssociations: LoanWithAssociations) -> Unit, + disburseLoan: (loanId : Int) -> Unit, onRepaymentClick: (loanWithAssociations: LoanWithAssociations) -> Unit ) { + val viewModel: LoanAccountSummaryViewModel = hiltViewModel() val uiState by viewModel.loanAccountSummaryUiState.collectAsStateWithLifecycle() + val loanAccountNumber by viewModel.loanAccountNumber.collectAsStateWithLifecycle() LaunchedEffect(key1 = Unit) { viewModel.loadLoanById(loanAccountNumber) @@ -92,13 +90,13 @@ fun LoanAccountSummaryScreen( uiState = uiState, navigateBack = navigateBack, onRetry = { viewModel.loadLoanById(loanAccountNumber) }, - onMoreInfoClicked = onMoreInfoClicked, + onMoreInfoClicked = { onMoreInfoClicked.invoke(loanAccountNumber) }, onTransactionsClicked = { onTransactionsClicked.invoke(loanAccountNumber) }, onRepaymentScheduleClicked = { onRepaymentScheduleClicked.invoke(loanAccountNumber) }, - onDocumentsClicked = onDocumentsClicked, - onChargesClicked = onChargesClicked, - approveLoan = approveLoan, - disburseLoan = disburseLoan, + onDocumentsClicked = { onDocumentsClicked(loanAccountNumber) }, + onChargesClicked = { onChargesClicked(loanAccountNumber) }, + approveLoan = { approveLoan(loanAccountNumber, it )}, + disburseLoan = { disburseLoan(loanAccountNumber) }, makeRepayment = onRepaymentClick ) } @@ -586,7 +584,7 @@ class LoanAccountSummaryPreviewProvider : PreviewParameterProvider(LoanAccountSummaryUiState.ShowProgressbar) diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_approval/LoanAccountApprovalScreen.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_approval/LoanAccountApprovalScreen.kt index 35620819c86..89cb5baacbb 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_approval/LoanAccountApprovalScreen.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_approval/LoanAccountApprovalScreen.kt @@ -63,16 +63,11 @@ import java.util.Locale @Composable fun LoanAccountApprovalScreen( - loanId: Int, - loanWithAssociations : LoanWithAssociations, navigateBack: () -> Unit, ) { val viewModel: LoanAccountApprovalViewModel = hiltViewModel() val uiState by viewModel.loanAccountApprovalUiState.collectAsStateWithLifecycle() - viewModel.loanId = loanId - viewModel.loanWithAssociations = loanWithAssociations - LoanAccountApprovalScreen( uiState = uiState, loanWithAssociations = viewModel.loanWithAssociations, diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_approval/LoanAccountApprovalViewModel.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_approval/LoanAccountApprovalViewModel.kt index 17499472f83..07dbda689a4 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_approval/LoanAccountApprovalViewModel.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_approval/LoanAccountApprovalViewModel.kt @@ -1,10 +1,14 @@ package com.mifos.feature.loan.loan_approval +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel +import com.google.gson.Gson import com.mifos.core.data.repository.LoanAccountApprovalRepository import com.mifos.core.network.GenericResponse import com.mifos.core.objects.accounts.loan.LoanApproval +import com.mifos.core.objects.accounts.loan.LoanApprovalData import com.mifos.core.objects.accounts.loan.LoanWithAssociations +import com.mifos.core.objects.accounts.savings.SavingsSummaryData import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -20,16 +24,19 @@ import javax.inject.Inject */ @HiltViewModel class LoanAccountApprovalViewModel @Inject constructor( - private val repository: LoanAccountApprovalRepository -) : - ViewModel() { + private val repository: LoanAccountApprovalRepository, + savedStateHandle: SavedStateHandle +) : ViewModel() { + + private val arg = savedStateHandle.getStateFlow(key = "arg", initialValue = "") + private val loanAccountData: LoanApprovalData = Gson().fromJson(arg.value, LoanApprovalData::class.java) private val _loanAccountApprovalUiState = MutableStateFlow(LoanAccountApprovalUiState.Initial) val loanAccountApprovalUiState: StateFlow get() = _loanAccountApprovalUiState - var loanId = 0 - var loanWithAssociations: LoanWithAssociations? = null + var loanId = loanAccountData.loanID + var loanWithAssociations = loanAccountData.loanWithAssociations fun approveLoan(loanApproval: LoanApproval?) { _loanAccountApprovalUiState.value = LoanAccountApprovalUiState.ShowProgressbar diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_charge/LoanChargeScreen.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_charge/LoanChargeScreen.kt index b74a0e6a434..859cfabbde3 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_charge/LoanChargeScreen.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_charge/LoanChargeScreen.kt @@ -56,11 +56,12 @@ import com.mifos.feature.loan.R import com.mifos.feature.loan.loan_charge_dialog.LoanChargeDialogScreen @Composable -fun LoanChargeScreen(loanAccountNumber: Int, onBackPressed: () -> Unit) { +fun LoanChargeScreen(onBackPressed: () -> Unit) { val viewModel: LoanChargeViewModel = hiltViewModel() val state by viewModel.loanChargeUiState.collectAsStateWithLifecycle() val refreshState by viewModel.isRefreshing.collectAsStateWithLifecycle() + val loanAccountNumber by viewModel.loanAccountNumber.collectAsStateWithLifecycle() LaunchedEffect(Unit) { viewModel.loadLoanChargesList(loanAccountNumber) diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_charge/LoanChargeViewModel.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_charge/LoanChargeViewModel.kt index 43341dbf581..c2d37225e0f 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_charge/LoanChargeViewModel.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_charge/LoanChargeViewModel.kt @@ -1,7 +1,9 @@ package com.mifos.feature.loan.loan_charge +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.mifos.core.common.utils.Constants import com.mifos.core.common.utils.Resource import com.mifos.core.domain.use_cases.GetListOfLoanChargesUseCase import com.mifos.feature.loan.R @@ -14,9 +16,12 @@ import javax.inject.Inject @HiltViewModel class LoanChargeViewModel @Inject constructor( - private val getListOfLoanChargesUseCase: GetListOfLoanChargesUseCase + private val getListOfLoanChargesUseCase: GetListOfLoanChargesUseCase, + savedStateHandle: SavedStateHandle ) : ViewModel() { + val loanAccountNumber = savedStateHandle.getStateFlow(key = Constants.LOAN_ACCOUNT_NUMBER, initialValue = 0) + private val _loanChargeUiState = MutableStateFlow(LoanChargeUiState.Loading) val loanChargeUiState = _loanChargeUiState.asStateFlow() diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_disbursement/LoanAccountDisbursementScreen.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_disbursement/LoanAccountDisbursementScreen.kt index e115dba5fb0..497d5801456 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_disbursement/LoanAccountDisbursementScreen.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_disbursement/LoanAccountDisbursementScreen.kt @@ -65,26 +65,22 @@ import java.util.Locale @Composable fun LoanAccountDisbursementScreen( - loanId: Int, navigateBack: () -> Unit, ) { val viewmodel: LoanAccountDisbursementViewModel = hiltViewModel() val uiState by viewmodel.loanAccountDisbursementUiState.collectAsStateWithLifecycle() - - LaunchedEffect(loanId) { - viewmodel.loanId = loanId - } + val loanId by viewmodel.loadId.collectAsStateWithLifecycle() LaunchedEffect(key1 = Unit) { - viewmodel.loadLoanTemplate() + viewmodel.loadLoanTemplate(loanId) } LoanAccountDisbursementScreen( uiState = uiState, navigateBack = navigateBack, - onRetry = { viewmodel.loadLoanTemplate() }, + onRetry = { viewmodel.loadLoanTemplate(loanId) }, onDisburseLoan = { - viewmodel.disburseLoan(it) + viewmodel.disburseLoan(loanId, it) } ) } diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_disbursement/LoanAccountDisbursementViewModel.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_disbursement/LoanAccountDisbursementViewModel.kt index b841a3b3365..9f309ee1219 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_disbursement/LoanAccountDisbursementViewModel.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_disbursement/LoanAccountDisbursementViewModel.kt @@ -1,8 +1,11 @@ package com.mifos.feature.loan.loan_disbursement +import androidx.compose.ui.res.stringArrayResource import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel +import com.mifos.core.common.utils.Constants import com.mifos.core.data.repository.LoanAccountDisbursementRepository import com.mifos.core.model.APIEndPoint import com.mifos.core.network.GenericResponse @@ -20,18 +23,19 @@ import javax.inject.Inject * Created by Aditya Gupta on 10/08/23. */ @HiltViewModel -class LoanAccountDisbursementViewModel @Inject constructor(private val repository: LoanAccountDisbursementRepository) : - ViewModel() { +class LoanAccountDisbursementViewModel @Inject constructor( + private val repository: LoanAccountDisbursementRepository, + savedStateHandle: SavedStateHandle +) : ViewModel() { + val loadId = savedStateHandle.getStateFlow(key = Constants.LOAN_ACCOUNT_NUMBER, initialValue = 0) private val _loanAccountDisbursementUiState = MutableStateFlow(LoanAccountDisbursementUiState.ShowProgressbar) val loanAccountDisbursementUiState: StateFlow get() = _loanAccountDisbursementUiState - var loanId : Int = 0 - - fun loadLoanTemplate() { + fun loadLoanTemplate(loanId : Int) { _loanAccountDisbursementUiState.value = LoanAccountDisbursementUiState.ShowProgressbar repository.getLoanTransactionTemplate(loanId, APIEndPoint.DISBURSE) .observeOn(AndroidSchedulers.mainThread()) @@ -52,7 +56,7 @@ class LoanAccountDisbursementViewModel @Inject constructor(private val repositor }) } - fun disburseLoan(loanDisbursement: LoanDisbursement?) { + fun disburseLoan(loanId : Int, loanDisbursement: LoanDisbursement?) { _loanAccountDisbursementUiState.value = LoanAccountDisbursementUiState.ShowProgressbar repository.disburseLoan(loanId, loanDisbursement) .observeOn(AndroidSchedulers.mainThread()) diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment/LoanRepaymentScreen.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment/LoanRepaymentScreen.kt index b2a864f1e8f..133b8aadd35 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment/LoanRepaymentScreen.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment/LoanRepaymentScreen.kt @@ -1,6 +1,7 @@ package com.mifos.feature.loan.loan_repayment import android.content.Context +import android.util.Log import android.widget.Toast import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement @@ -62,6 +63,7 @@ import com.mifos.core.designsystem.theme.DarkGray import com.mifos.core.objects.PaymentTypeOption import com.mifos.core.objects.accounts.loan.LoanRepaymentRequest import com.mifos.core.objects.accounts.loan.LoanRepaymentResponse +import com.mifos.core.objects.accounts.loan.LoanWithAssociations_Table.loanProductName import com.mifos.core.objects.templates.loans.LoanRepaymentTemplate import com.mifos.feature.loan.R import java.text.SimpleDateFormat @@ -72,22 +74,13 @@ import java.util.Locale */ @Composable fun LoanRepaymentScreen( - loanId: Int, - clientName: String, - loanAccountNumber: String, - amountInArrears: Double?, - loanProductName: String, navigateBack: () -> Unit ) { val viewmodel: LoanRepaymentViewModel = hiltViewModel() val uiState by viewmodel.loanRepaymentUiState.collectAsStateWithLifecycle() LaunchedEffect(key1 = Unit) { - viewmodel.loanId = loanId - viewmodel.clientName = clientName - viewmodel.loanAccountNumber = loanAccountNumber - viewmodel.amountInArrears = amountInArrears - viewmodel.loanProductName = loanProductName + Log.d("debugPrint", "LoanId: ${viewmodel.loanId}") viewmodel.checkDatabaseLoanRepaymentByLoanId() } diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment/LoanRepaymentViewModel.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment/LoanRepaymentViewModel.kt index ad2fc804968..783ea279b5d 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment/LoanRepaymentViewModel.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment/LoanRepaymentViewModel.kt @@ -1,10 +1,15 @@ package com.mifos.feature.loan.loan_repayment import android.util.Log +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel +import com.google.gson.Gson +import com.mifos.core.common.utils.Constants import com.mifos.core.data.repository.LoanRepaymentRepository +import com.mifos.core.objects.accounts.loan.LoanApprovalData import com.mifos.core.objects.accounts.loan.LoanRepaymentRequest import com.mifos.core.objects.accounts.loan.LoanRepaymentResponse +import com.mifos.core.objects.accounts.loan.LoanWithAssociations import com.mifos.core.objects.templates.loans.LoanRepaymentTemplate import com.mifos.feature.loan.R import dagger.hilt.android.lifecycle.HiltViewModel @@ -19,18 +24,23 @@ import javax.inject.Inject * Created by Aditya Gupta on 10/08/23. */ @HiltViewModel -class LoanRepaymentViewModel @Inject constructor(private val repository: LoanRepaymentRepository) : - ViewModel() { +class LoanRepaymentViewModel @Inject constructor( + private val repository: LoanRepaymentRepository, + savedStateHandle: SavedStateHandle +) : ViewModel() { + + val arg = savedStateHandle.getStateFlow(key = Constants.LOAN_WITH_ASSOCIATIONS, initialValue = "") + val loanWithAssociations: LoanWithAssociations = Gson().fromJson(arg.value, LoanWithAssociations::class.java) private val _loanRepaymentUiState = MutableStateFlow(LoanRepaymentUiState.ShowProgressbar) val loanRepaymentUiState: StateFlow get() = _loanRepaymentUiState - var clientName = "" - var loanId = 0 - var loanAccountNumber = "" - var loanProductName = "" - var amountInArrears: Double? = null + var clientName = loanWithAssociations.clientName + var loanId = loanWithAssociations.id + var loanAccountNumber = loanWithAssociations.accountNo + var loanProductName = loanWithAssociations.loanProductName + var amountInArrears = loanWithAssociations.summary.totalOverdue fun loanLoanRepaymentTemplate() { _loanRepaymentUiState.value = LoanRepaymentUiState.ShowProgressbar diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment_schedule/LoanRepaymentScheduleScreen.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment_schedule/LoanRepaymentScheduleScreen.kt index 0adbe70f1fa..fb5e87a0070 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment_schedule/LoanRepaymentScheduleScreen.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment_schedule/LoanRepaymentScheduleScreen.kt @@ -47,21 +47,20 @@ import com.mifos.feature.loan.R @Composable fun LoanRepaymentScheduleScreen( - loanId: Int, viewModel: LoanRepaymentScheduleViewModel = hiltViewModel(), navigateBack: () -> Unit ) { val uiState by viewModel.loanRepaymentScheduleUiState.collectAsStateWithLifecycle() + val loanId by viewModel.loanId.collectAsStateWithLifecycle() LaunchedEffect(key1 = Unit) { - viewModel.loanId = loanId - viewModel.loadLoanRepaySchedule() + viewModel.loadLoanRepaySchedule(loanId) } LoanRepaymentScheduleScreen( uiState = uiState, navigateBack = navigateBack, - onRetry = { viewModel.loadLoanRepaySchedule() } + onRetry = { viewModel.loadLoanRepaySchedule(loanId) } ) } diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment_schedule/LoanRepaymentScheduleViewModel.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment_schedule/LoanRepaymentScheduleViewModel.kt index f7d7a558b2b..4aca5ed2203 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment_schedule/LoanRepaymentScheduleViewModel.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_repayment_schedule/LoanRepaymentScheduleViewModel.kt @@ -1,6 +1,8 @@ package com.mifos.feature.loan.loan_repayment_schedule +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel +import com.mifos.core.common.utils.Constants import com.mifos.core.data.repository.LoanRepaymentScheduleRepository import com.mifos.core.objects.accounts.loan.LoanWithAssociations import dagger.hilt.android.lifecycle.HiltViewModel @@ -15,16 +17,18 @@ import javax.inject.Inject * Created by Aditya Gupta on 12/08/23. */ @HiltViewModel -class LoanRepaymentScheduleViewModel @Inject constructor(private val repository: LoanRepaymentScheduleRepository) : - ViewModel() { +class LoanRepaymentScheduleViewModel @Inject constructor( + private val repository: LoanRepaymentScheduleRepository, + savedStateHandle: SavedStateHandle +) : ViewModel() { + + val loanId = savedStateHandle.getStateFlow(key = Constants.LOAN_ACCOUNT_NUMBER, initialValue = 0) private val _loanRepaymentScheduleUiState = MutableStateFlow(LoanRepaymentScheduleUiState.ShowProgressbar) val loanRepaymentScheduleUiState: StateFlow get() = _loanRepaymentScheduleUiState - var loanId = 0 - - fun loadLoanRepaySchedule() { + fun loadLoanRepaySchedule(loanId : Int) { _loanRepaymentScheduleUiState.value = LoanRepaymentScheduleUiState.ShowProgressbar repository.getLoanRepaySchedule(loanId) .observeOn(AndroidSchedulers.mainThread()) diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_transaction/LoanTransactionsScreen.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_transaction/LoanTransactionsScreen.kt index b882d887a1e..9ab043b8791 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_transaction/LoanTransactionsScreen.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_transaction/LoanTransactionsScreen.kt @@ -1,5 +1,6 @@ package com.mifos.feature.loan.loan_transaction +import android.util.Log import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically import androidx.compose.animation.fadeIn @@ -66,21 +67,21 @@ import com.mifos.feature.loan.R @Composable fun LoanTransactionsScreen( - loanId: Int, navigateBack: () -> Unit ) { val viewModel: LoanTransactionsViewModel = hiltViewModel() val uiState by viewModel.loanTransactionsUiState.collectAsStateWithLifecycle() + val loanId by viewModel.loanId.collectAsStateWithLifecycle() LaunchedEffect(key1 = Unit) { - viewModel.loanId = loanId - viewModel.loadLoanTransaction() + Log.d("debugPrint", "LoanId: $loanId") + viewModel.loadLoanTransaction(loanId) } LoanTransactionsScreen( uiState = uiState, navigateBack = navigateBack, - onRetry = { viewModel.loadLoanTransaction() } + onRetry = { viewModel.loadLoanTransaction(loanId) } ) } diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/loan_transaction/LoanTransactionsViewModel.kt b/feature/loan/src/main/java/com/mifos/feature/loan/loan_transaction/LoanTransactionsViewModel.kt index 072016bbaef..d612fd015f6 100644 --- a/feature/loan/src/main/java/com/mifos/feature/loan/loan_transaction/LoanTransactionsViewModel.kt +++ b/feature/loan/src/main/java/com/mifos/feature/loan/loan_transaction/LoanTransactionsViewModel.kt @@ -1,6 +1,8 @@ package com.mifos.feature.loan.loan_transaction +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel +import com.mifos.core.common.utils.Constants import com.mifos.core.data.repository.LoanTransactionsRepository import com.mifos.core.objects.accounts.loan.LoanWithAssociations import dagger.hilt.android.lifecycle.HiltViewModel @@ -15,16 +17,18 @@ import javax.inject.Inject * Created by Aditya Gupta on 12/08/23. */ @HiltViewModel -class LoanTransactionsViewModel @Inject constructor(private val repository: LoanTransactionsRepository) : - ViewModel() { +class LoanTransactionsViewModel @Inject constructor( + private val repository: LoanTransactionsRepository, + savedStateHandle: SavedStateHandle +) : ViewModel() { + + val loanId = savedStateHandle.getStateFlow( key = Constants.LOAN_ACCOUNT_NUMBER , initialValue = 0) private val _loanTransactionsUiState = MutableStateFlow(LoanTransactionsUiState.ShowProgressBar) val loanTransactionsUiState: StateFlow get() = _loanTransactionsUiState - var loanId = 0 - - fun loadLoanTransaction() { + fun loadLoanTransaction(loanId : Int) { _loanTransactionsUiState.value = LoanTransactionsUiState.ShowProgressBar repository.getLoanTransactions(loanId) .observeOn(AndroidSchedulers.mainThread()) diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/navigation/LoanNavigation.kt b/feature/loan/src/main/java/com/mifos/feature/loan/navigation/LoanNavigation.kt new file mode 100644 index 00000000000..ed5e336c5f6 --- /dev/null +++ b/feature/loan/src/main/java/com/mifos/feature/loan/navigation/LoanNavigation.kt @@ -0,0 +1,260 @@ +package com.mifos.feature.loan.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavType +import androidx.navigation.compose.composable +import androidx.navigation.navArgument +import androidx.navigation.navigation +import com.mifos.core.common.utils.Constants +import com.mifos.core.data.LoansPayload +import com.mifos.core.objects.accounts.loan.LoanWithAssociations +import com.mifos.core.objects.noncore.DataTable +import com.mifos.feature.loan.group_loan_account.GroupLoanAccountScreen +import com.mifos.feature.loan.loan_account.LoanAccountScreen +import com.mifos.feature.loan.loan_account_summary.LoanAccountSummaryScreen +import com.mifos.feature.loan.loan_approval.LoanAccountApprovalScreen +import com.mifos.feature.loan.loan_charge.LoanChargeScreen +import com.mifos.feature.loan.loan_disbursement.LoanAccountDisbursementScreen +import com.mifos.feature.loan.loan_repayment.LoanRepaymentScreen +import com.mifos.feature.loan.loan_repayment_schedule.LoanRepaymentScheduleScreen +import com.mifos.feature.loan.loan_transaction.LoanTransactionsScreen + +/** + * Created by Pronay Sarker on 16/08/2024 (2:24 AM) + */ + +fun NavGraphBuilder.loanNavGraph( + navController: NavController, + onDocumentsClicked: (Int, String) -> Unit, + onMoreInfoClicked: (Int) -> Unit +) { + navigation( + startDestination = LoanScreens.LoanAccountSummaryScreen.route, + route = "loan_route" + ) { + loanAccountSummary( + onBackPressed = navController::popBackStack, + onMoreInfoClicked = onMoreInfoClicked, + onTransactionsClicked = navController::navigateToLoanTransactionScreen, + onRepaymentScheduleClicked = navController::navigateToLoanRepaymentScheduleScreen, + onDocumentsClicked = { onDocumentsClicked(it, Constants.ENTITY_TYPE_LOANS) }, + onChargesClicked = navController::navigateToLoanChargesScreen, + approveLoan = navController::navigateToLoanApprovalScreen, + disburseLoan = navController::navigateToLoanDisbursementScreen, + onRepaymentClick = navController::navigateToLoanRepaymentScreen + ) + + loanDisbursementScreen { + navController.popBackStack() + } + loanApprovalScreen { + navController.popBackStack() + } + loanRepaymentSchedule { + navController.popBackStack() + } + loanTransactionScreen { + navController.popBackStack() + } + loanChargeScreen { + navController.popBackStack() + } + loanRepaymentScreen{ + navController.popBackStack() + } + } +} + +fun NavGraphBuilder.groupLoanScreen( + onBackPressed: () -> Unit +) { + composable( + route = LoanScreens.GroupLoanScreen.route, + arguments = listOf( + navArgument(name = Constants.GROUP_ID, builder = { type = NavType.IntType }) + ) + ) { + GroupLoanAccountScreen( + onBackPressed = {}, + ) + } +} + +fun NavGraphBuilder.addLoanAccountScreen( + onBackPressed: () -> Unit, + dataTable: (List, LoansPayload) -> Unit +) { + composable( + route = LoanScreens.LoanAccountScreen.route, + arguments = listOf( + navArgument(name = Constants.CLIENT_ID, builder = { type = NavType.IntType }) + ) + ) { + LoanAccountScreen( + onBackPressed = onBackPressed, + dataTable = dataTable + ) + } +} + +fun NavGraphBuilder.loanAccountSummary( + onBackPressed: () -> Unit, + onMoreInfoClicked: (Int) -> Unit, + onTransactionsClicked: (loadId: Int) -> Unit, + onRepaymentScheduleClicked: (loanId: Int) -> Unit, + onDocumentsClicked: (Int) -> Unit, + onChargesClicked: (Int) -> Unit, + approveLoan: (loadId: Int, loanWithAssociations: LoanWithAssociations) -> Unit, + disburseLoan: (Int) -> Unit, + onRepaymentClick: (LoanWithAssociations) -> Unit +) { + composable( + route = LoanScreens.LoanAccountSummaryScreen.route, + arguments = listOf( + navArgument(name = Constants.LOAN_ACCOUNT_NUMBER, builder = { type = NavType.IntType }) + ) + ) { + LoanAccountSummaryScreen( + navigateBack = onBackPressed, + onMoreInfoClicked = onMoreInfoClicked, + onTransactionsClicked = onTransactionsClicked, + onRepaymentScheduleClicked = onRepaymentScheduleClicked, + onDocumentsClicked = onDocumentsClicked, + onChargesClicked = onChargesClicked, + approveLoan = approveLoan, + disburseLoan = disburseLoan, + onRepaymentClick = onRepaymentClick + ) + } +} + +fun NavGraphBuilder.loanApprovalScreen( + onBackPressed: () -> Unit +) { + composable( + route = LoanScreens.LoanApprovalScreen.route, + arguments = listOf( + navArgument(name = "arg", builder = { type = NavType.StringType }) + ) + ) { + LoanAccountApprovalScreen( + navigateBack = onBackPressed + ) + } +} + +fun NavGraphBuilder.loanChargeScreen( + onBackPressed: () -> Unit +) { + composable( + route = LoanScreens.LoanChargeScreen.route, + arguments = listOf( + navArgument(name = Constants.LOAN_ACCOUNT_NUMBER, builder = { type = NavType.IntType }) + ) + ) { + LoanChargeScreen( + onBackPressed = onBackPressed + ) + } +} + +fun NavGraphBuilder.loanDisbursementScreen( + onBackPressed: () -> Unit +) { + composable( + route = LoanScreens.LoanDisbursementScreen.route, + arguments = listOf( + navArgument(name = Constants.LOAN_ACCOUNT_NUMBER, builder = { type = NavType.IntType }) + ) + ) { + LoanAccountDisbursementScreen( + navigateBack = onBackPressed + ) + } +} + +fun NavGraphBuilder.loanRepaymentScreen( + onBackPressed: () -> Unit +) { + composable( + route = LoanScreens.LoanRepaymentScreen.route, + arguments = listOf( + navArgument(name = Constants.LOAN_WITH_ASSOCIATIONS , builder = { type = NavType.StringType }) + ) + ) { + LoanRepaymentScreen( + navigateBack = onBackPressed + ) + } +} + +fun NavGraphBuilder.loanRepaymentSchedule( + onBackPressed: () -> Unit +) { + composable( + route = LoanScreens.LoanRepaymentSchedule.route, + arguments = listOf( + navArgument(name = Constants.LOAN_ACCOUNT_NUMBER, builder = { type = NavType.IntType }) + ) + + ) { + LoanRepaymentScheduleScreen( + navigateBack = onBackPressed + ) + } +} + +fun NavGraphBuilder.loanTransactionScreen( + onBackPressed: () -> Unit +) { + composable( + route = LoanScreens.LoanTransactionScreen.route, + arguments = listOf( + navArgument(name = Constants.LOAN_ACCOUNT_NUMBER, builder = { type = NavType.IntType }) + ) + ) { + LoanTransactionsScreen( + navigateBack = onBackPressed + ) + } +} + +fun NavController.navigateToLoanAccountScreen(clientId: Int) { + navigate(LoanScreens.LoanAccountScreen.argument(clientId)) +} + +fun NavController.navigateToLoanAccountSummaryScreen(loanAccountNumber: Int) { + navigate(LoanScreens.LoanAccountSummaryScreen.argument(loanAccountNumber)) +} + +fun NavController.navigateToLoanDisbursementScreen(loanAccountNumber: Int) { + navigate(LoanScreens.LoanDisbursementScreen.argument(loanAccountNumber)) +} + +fun NavController.navigateToLoanTransactionScreen(loanAccountNumber: Int) { + navigate(LoanScreens.LoanTransactionScreen.argument(loanAccountNumber)) +} + +fun NavController.navigateToLoanRepaymentScheduleScreen(loanAccountNumber: Int) { + navigate(LoanScreens.LoanRepaymentSchedule.argument(loanAccountNumber)) +} + +fun NavController.navigateToLoanChargesScreen(loanAccountNumber: Int) { + navigate(LoanScreens.LoanChargeScreen.argument(loanAccountNumber)) +} + +fun NavController.navigateToLoanApprovalScreen( + loanId: Int, + loanWithAssociations: LoanWithAssociations +) { + navigate(LoanScreens.LoanApprovalScreen.argument(loanId, loanWithAssociations)) +} + +fun NavController.navigateToLoanRepaymentScreen(loanWithAssociations: LoanWithAssociations) { + navigate(LoanScreens.LoanRepaymentScreen.argument(loanWithAssociations)) +} + +fun NavController.navigateToGroupLoanScreen(groupId : Int){ + navigate(LoanScreens.GroupLoanScreen.argument(groupId)) +} \ No newline at end of file diff --git a/feature/loan/src/main/java/com/mifos/feature/loan/navigation/LoanScreens.kt b/feature/loan/src/main/java/com/mifos/feature/loan/navigation/LoanScreens.kt new file mode 100644 index 00000000000..bc4418a217b --- /dev/null +++ b/feature/loan/src/main/java/com/mifos/feature/loan/navigation/LoanScreens.kt @@ -0,0 +1,59 @@ +package com.mifos.feature.loan.navigation + +import com.google.gson.Gson +import com.mifos.core.common.utils.Constants +import com.mifos.core.objects.accounts.loan.LoanApprovalData +import com.mifos.core.objects.accounts.loan.LoanWithAssociations + +/** + * Created by Pronay Sarker on 16/08/2024 (2:25 AM) + */ +sealed class LoanScreens(val route: String) { + + data object LoanAccountScreen : LoanScreens("loan_account_screen/{${Constants.CLIENT_ID}}"){ + fun argument(clientId : Int) = "loan_account_screen/$clientId" + } + + data object LoanAccountSummaryScreen : LoanScreens("loan_account_summary_screen/{${Constants.LOAN_ACCOUNT_NUMBER}}"){ + fun argument(loanAccountNumber : Int) = "loan_account_summary_screen/$loanAccountNumber" + } + + data object LoanApprovalScreen : LoanScreens("loan_approval_screen/{arg}"){ + fun argument(loanAccountNumber: Int, loanWithAssociations: LoanWithAssociations) : String{ + val gson = Gson() + val arg = LoanApprovalData(loanAccountNumber, loanWithAssociations) + val loanApprovalDataInJson = gson.toJson(arg) + + return "loan_approval_screen/$loanApprovalDataInJson" + } + } + + data object LoanChargeScreen : LoanScreens("loan_charge_screen/{${Constants.LOAN_ACCOUNT_NUMBER}}"){ + fun argument(loanAccountNumber : Int) = "loan_charge_screen/$loanAccountNumber" + } + + data object LoanDisbursementScreen : LoanScreens("loan_disbursement_screen/{${Constants.LOAN_ACCOUNT_NUMBER}}"){ + fun argument(loanAccountNumber : Int) = "loan_disbursement_screen/$loanAccountNumber" + } + + data object LoanRepaymentScreen : LoanScreens("loan_repayment_screen/{${Constants.LOAN_WITH_ASSOCIATIONS}}"){ + fun argument(loanWithAssociations: LoanWithAssociations) : String { + val gson = Gson() + val loanWithAssociationsInJson = gson.toJson(loanWithAssociations) + + return "loan_repayment_screen/$loanWithAssociationsInJson" + } + } + + data object LoanRepaymentSchedule : LoanScreens("loan_repayment_schedule/{${Constants.LOAN_ACCOUNT_NUMBER}}"){ + fun argument(loanAccountNumber : Int) = "loan_repayment_schedule/$loanAccountNumber" + } + + data object LoanTransactionScreen : LoanScreens("loan_transaction_screen/{${Constants.LOAN_ACCOUNT_NUMBER}}"){ + fun argument(loanAccountNumber : Int) = "loan_transaction_screen/$loanAccountNumber" + } + + data object GroupLoanScreen : LoanScreens("group_loan_screen/{${Constants.GROUP_ID}}"){ + fun argument(groupId : Int) = "group_loan_screen/$groupId" + } +} \ No newline at end of file diff --git a/feature/savings/src/main/java/com/mifos/feature/savings/navigation/SavingsNavigation.kt b/feature/savings/src/main/java/com/mifos/feature/savings/navigation/SavingsNavigation.kt index 08511c6da9b..7830cb7d0f3 100644 --- a/feature/savings/src/main/java/com/mifos/feature/savings/navigation/SavingsNavigation.kt +++ b/feature/savings/src/main/java/com/mifos/feature/savings/navigation/SavingsNavigation.kt @@ -9,7 +9,6 @@ import androidx.navigation.navigation import com.mifos.core.common.utils.Constants import com.mifos.core.objects.accounts.savings.DepositType import com.mifos.core.objects.accounts.savings.SavingsAccountWithAssociations -import com.mifos.core.objects.accounts.savings.Transaction_Table.savingsAccountId import com.mifos.feature.savings.account.SavingsAccountScreen import com.mifos.feature.savings.account_activate.SavingsAccountActivateScreen import com.mifos.feature.savings.account_approval.SavingsAccountApprovalScreen @@ -21,7 +20,7 @@ import com.mifos.feature.savings.sync_account_transaction.SyncSavingsAccountTran * Created by Pronay Sarker on 14/08/2024 (1:10 PM) */ -fun NavGraphBuilder.savingsSummaryNavGraph( +fun NavGraphBuilder.savingsNavGraph( navController: NavController, onBackPressed: () -> Unit, loadMoreSavingsAccountInfo: (Int) -> Unit, @@ -83,7 +82,6 @@ fun NavGraphBuilder.savingsSummaryNavGraph( } } - fun NavGraphBuilder.addSavingsAccountScreen( onBackPressed: () -> Unit ) { diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/components/Navigation.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/components/Navigation.kt index 007aea90ca2..d537b52473d 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/components/Navigation.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/components/Navigation.kt @@ -13,12 +13,16 @@ import com.mifos.feature.client.navigation.clientNavGraph import com.mifos.feature.groups.navigation.groupListScreen import com.mifos.feature.individual_collection_sheet.navigation.generateCollectionSheetScreen import com.mifos.feature.individual_collection_sheet.navigation.individualCollectionSheetScreen +import com.mifos.feature.loan.navigation.addLoanAccountScreen +import com.mifos.feature.loan.navigation.loanNavGraph +import com.mifos.feature.loan.navigation.navigateToLoanAccountScreen +import com.mifos.feature.loan.navigation.navigateToLoanAccountSummaryScreen import com.mifos.feature.path_tracking.navigation.pathTrackingScreen import com.mifos.feature.report.navigation.reportNavGraph import com.mifos.feature.savings.navigation.addSavingsAccountScreen import com.mifos.feature.savings.navigation.navigateToAddSavingsAccount import com.mifos.feature.savings.navigation.navigateToSavingsAccountSummaryScreen -import com.mifos.feature.savings.navigation.savingsSummaryNavGraph +import com.mifos.feature.savings.navigation.savingsNavGraph import com.mifos.feature.search.Navigation.SEARCH_SCREEN_ROUTE import com.mifos.feature.search.Navigation.searchScreen import com.mifos.feature.settings.navigation.settingsScreen @@ -38,25 +42,38 @@ fun Navigation( clientNavGraph( navController = navController, paddingValues = padding, - addLoanAccount = {}, + addLoanAccount = { navController.navigateToLoanAccountScreen(it) }, addSavingsAccount = { navController.navigateToAddSavingsAccount(it, 0, false) }, documents = {}, moreClientInfo = {}, notes = {}, - loanAccountSelected = {}, + loanAccountSelected = { + navController.navigateToLoanAccountSummaryScreen(it) + }, savingsAccountSelected = { id, type -> navController.navigateToSavingsAccountSummaryScreen(id, type) }, activateClient = { } ) - savingsSummaryNavGraph( + savingsNavGraph( navController = navController, onBackPressed = navController::popBackStack, loadMoreSavingsAccountInfo = { }, loadDocuments = { }, ) + loanNavGraph( + navController = navController, + onMoreInfoClicked = { }, + onDocumentsClicked = { _, _ -> } + ) + + addLoanAccountScreen( + onBackPressed = navController::popBackStack, + dataTable = { _, _ -> } + ) + addSavingsAccountScreen( onBackPressed = navController::popBackStack ) @@ -72,7 +89,9 @@ fun Navigation( navController = navController, paddingValues = padding, onActivateCenter = { _, _ -> }, - addSavingsAccount = { } + addSavingsAccount = { +// navController.navigateToAddSavingsAccount(0, it, true) + } ) reportNavGraph( diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/grouploanaccount/GroupLoanAccountFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/grouploanaccount/GroupLoanAccountFragment.kt index 77ea90fd866..954fcef0ecd 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/grouploanaccount/GroupLoanAccountFragment.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/grouploanaccount/GroupLoanAccountFragment.kt @@ -30,7 +30,7 @@ class GroupLoanAccountFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - groupId = arg.groupId +// groupId = arg.groupId } override fun onCreateView( @@ -41,7 +41,7 @@ class GroupLoanAccountFragment : Fragment() { return ComposeView(requireContext()).apply { setContent { GroupLoanAccountScreen( - groupId = groupId, +// groupId = groupId, onBackPressed = { findNavController().popBackStack() } diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccount/LoanAccountFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccount/LoanAccountFragment.kt index 82963924ffa..9683c58da21 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccount/LoanAccountFragment.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccount/LoanAccountFragment.kt @@ -36,7 +36,7 @@ class LoanAccountFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - clientId = arg.clientId +// clientId = arg.clientId } override fun onCreateView( @@ -47,7 +47,7 @@ class LoanAccountFragment : Fragment() { return ComposeView(requireActivity()).apply { setContent { LoanAccountScreen( - clientId = clientId, +// clientId = clientId, onBackPressed = { findNavController().popBackStack() }, dataTable = { dataTables, loansPayload -> diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountapproval/LoanAccountApproval.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountapproval/LoanAccountApproval.kt index 4b2a74bbec9..ed9b9402fbd 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountapproval/LoanAccountApproval.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountapproval/LoanAccountApproval.kt @@ -29,8 +29,8 @@ class LoanAccountApproval : MifosBaseFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - loanId = arg.loanAccountNumber - loanWithAssociations = arg.loanWithAssociations +// loanId = arg.loanAccountNumber +// loanWithAssociations = arg.loanWithAssociations } override fun onCreateView( @@ -42,8 +42,8 @@ class LoanAccountApproval : MifosBaseFragment() { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { LoanAccountApprovalScreen( - loanId = loanId, - loanWithAssociations = loanWithAssociations, +// loanId = loanId, +// loanWithAssociations = loanWithAssociations, navigateBack = { findNavController().popBackStack() }, ) } diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountdisbursement/LoanAccountDisbursementFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountdisbursement/LoanAccountDisbursementFragment.kt index 3fb4cfd20a1..5c2e8e9ccbb 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountdisbursement/LoanAccountDisbursementFragment.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountdisbursement/LoanAccountDisbursementFragment.kt @@ -27,7 +27,7 @@ class LoanAccountDisbursementFragment : MifosBaseFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - loanId = arg.loanAccountNumber +// loanId = arg.loanAccountNumber } override fun onCreateView( @@ -39,7 +39,7 @@ class LoanAccountDisbursementFragment : MifosBaseFragment() { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { LoanAccountDisbursementScreen( - loanId = loanId, +// loanId = loanId, navigateBack = { findNavController().popBackStack() } ) } diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountsummary/LoanAccountSummaryFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountsummary/LoanAccountSummaryFragment.kt index 8bad22e39b8..dc2b2a174b1 100755 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountsummary/LoanAccountSummaryFragment.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanaccountsummary/LoanAccountSummaryFragment.kt @@ -41,16 +41,16 @@ class LoanAccountSummaryFragment : MifosBaseFragment() { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { LoanAccountSummaryScreen( - loanAccountNumber = loanAccountNumber, +// loanAccountNumber = loanAccountNumber, navigateBack = { findNavController().popBackStack() }, onTransactionsClicked = { loadLoanTransactions(it) }, onDocumentsClicked = { loadDocuments() }, onChargesClicked = { loadLoanCharges() }, onRepaymentScheduleClicked = { loadRepaymentSchedule(it) }, onMoreInfoClicked = { loadLoanDataTables() }, - approveLoan = { approveLoan(it) }, + approveLoan = { id, it -> approveLoan(it) }, disburseLoan = { disburseLoan() }, - onRepaymentClick = { makeRepayment(it) } + onRepaymentClick = { makeRepayment(it) }, ) } } diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loancharge/LoanChargeFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loancharge/LoanChargeFragment.kt index 92f84e71c24..32d05b1010d 100644 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loancharge/LoanChargeFragment.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loancharge/LoanChargeFragment.kt @@ -28,7 +28,7 @@ class LoanChargeFragment : MifosBaseFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - loanAccountNumber = arg.loanAccountNumber +// loanAccountNumber = arg.loanAccountNumber } override fun onCreateView( @@ -39,9 +39,11 @@ class LoanChargeFragment : MifosBaseFragment() { return ComposeView(requireContext()).apply { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { - LoanChargeScreen(loanAccountNumber = loanAccountNumber, onBackPressed = { - findNavController().popBackStack() - }) + LoanChargeScreen( +// loanAccountNumber = loanAccountNumber, + onBackPressed = { + findNavController().popBackStack() + }) } } } diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanrepayment/LoanRepaymentFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanrepayment/LoanRepaymentFragment.kt index 98a6a1fc017..4ae6fad68d3 100755 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanrepayment/LoanRepaymentFragment.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanrepayment/LoanRepaymentFragment.kt @@ -19,7 +19,7 @@ import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class LoanRepaymentFragment : MifosBaseFragment() { - private val arg: LoanRepaymentFragmentArgs by navArgs() +// private val arg: LoanRepaymentFragmentArgs by navArgs() private var loanId: Int = 0 private lateinit var clientName: String private lateinit var loanAccountNumber: String @@ -28,11 +28,11 @@ class LoanRepaymentFragment : MifosBaseFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - loanId = arg.loanWithAssociations.id - clientName = arg.loanWithAssociations.clientName - loanAccountNumber = arg.loanWithAssociations.accountNo - amountInArrears = arg.loanWithAssociations.summary.totalOverdue - loanProductName = arg.loanWithAssociations.loanProductName +// loanId = arg.loanWithAssociations.id +// clientName = arg.loanWithAssociations.clientName +// loanAccountNumber = arg.loanWithAssociations.accountNo +// amountInArrears = arg.loanWithAssociations.summary.totalOverdue +// loanProductName = arg.loanWithAssociations.loanProductName } override fun onCreateView( @@ -44,11 +44,11 @@ class LoanRepaymentFragment : MifosBaseFragment() { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { LoanRepaymentScreen( - loanId = loanId, - clientName = clientName, - loanAccountNumber = loanAccountNumber, - amountInArrears = amountInArrears, - loanProductName = loanProductName, +// loanId = loanId, +// clientName = clientName, +// loanAccountNumber = loanAccountNumber, +// amountInArrears = amountInArrears, +// loanProductName = loanProductName, navigateBack = { findNavController().popBackStack() } ) } diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanrepaymentschedule/LoanRepaymentScheduleFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanrepaymentschedule/LoanRepaymentScheduleFragment.kt index ca3a2d7b170..f36b34a9561 100755 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanrepaymentschedule/LoanRepaymentScheduleFragment.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loanrepaymentschedule/LoanRepaymentScheduleFragment.kt @@ -25,7 +25,7 @@ class LoanRepaymentScheduleFragment : MifosBaseFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - loanId = arg.loanId +// loanId = arg.loanId } override fun onCreateView( @@ -37,7 +37,7 @@ class LoanRepaymentScheduleFragment : MifosBaseFragment() { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { LoanRepaymentScheduleScreen( - loanId = loanId, +// loanId = loanId, navigateBack = { findNavController().popBackStack() } ) } diff --git a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loantransactions/LoanTransactionsFragment.kt b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loantransactions/LoanTransactionsFragment.kt index f7d4d59e4be..0d7b21bd9ad 100755 --- a/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loantransactions/LoanTransactionsFragment.kt +++ b/mifosng-android/src/main/java/com/mifos/mifosxdroid/online/loantransactions/LoanTransactionsFragment.kt @@ -26,7 +26,7 @@ class LoanTransactionsFragment : MifosBaseFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - loanId = arg.loanId +// loanId = arg.loanId } override fun onCreateView( @@ -38,7 +38,7 @@ class LoanTransactionsFragment : MifosBaseFragment() { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { LoanTransactionsScreen( - loanId = loanId, +// loanId = loanId, navigateBack = { findNavController().popBackStack() }) } }