TP-40437 | added api to provide url for downloading Cash Loan Statement (#7761)

Co-authored-by: shreyansuraj <shreyansu.raj@navi.com>
This commit is contained in:
Aman S
2023-09-07 22:34:02 +05:30
committed by GitHub
parent c19689f17e
commit 7c4ffa2c18
6 changed files with 78 additions and 23 deletions

View File

@@ -23,6 +23,7 @@ import com.navi.base.utils.isNotNullAndNotEmpty
import com.navi.base.utils.isNull
import com.navi.base.utils.orFalse
import com.navi.common.ui.fragment.BaseFragment
import com.navi.common.utils.observeNonNull
import com.navi.common.utils.replaceLayout
import com.navi.design.utils.getNaviDrawable
import com.navi.insurance.util.disableView
@@ -154,6 +155,8 @@ class DetailsFragment : BaseFragment(), View.OnClickListener, WidgetCallback {
}
if (loanApplicationDetails?.loanType == Constants.TYPE_PERSONAL_LOAN) {
binding.loanAccountStatementView.loanAccountStatementLayout.visibility = View.VISIBLE
binding.loanAccountStatementView.lasDownloadIv.setOnClickListener(this)
loanApplicationDetails?.loanAgreementUri?.let {
binding.loanAgreementView.loanAgreementLayout.visibility = View.VISIBLE
binding.loanAgreementView.downloadIv.setOnClickListener(this)
@@ -162,11 +165,6 @@ class DetailsFragment : BaseFragment(), View.OnClickListener, WidgetCallback {
binding.loanSanctionView.loanSanctionLayout.visibility = View.VISIBLE
binding.loanSanctionView.sanctionDownloadIv.setOnClickListener(this)
}
loanApplicationDetails?.loanAccountStatementUri?.let {
binding.loanAccountStatementView.loanAccountStatementLayout.visibility =
View.VISIBLE
binding.loanAccountStatementView.lasDownloadIv.setOnClickListener(this)
}
if (loanApplicationDetails?.interestCertificateFinancialYears.isNullOrEmpty().not()) {
binding.interestCertificateView.interestCertificateLayout.visibility = View.VISIBLE
binding.interestCertificateView.icDownloadIv.setOnClickListener(this)
@@ -402,6 +400,18 @@ class DetailsFragment : BaseFragment(), View.OnClickListener, WidgetCallback {
hideLoader()
it?.let { downloadInterestCertificate(it.uri) }
}
detailsVM.cashLoanSignatureURI.observeNonNull(viewLifecycleOwner) { cashLoanSignatureUriDetail ->
hideLoader()
cashLoanSignatureUriDetail.downloadCta?.let { downLoadCtaDetails ->
downLoadCtaDetails.parameters?.find { it.key == URL }?.value?.let { downLoadUri ->
downLoadCtaDetails.downloadFileName?.let { downLoadFileName ->
downloadLoanAccountStatement(
downLoadUri, downLoadFileName
)
}
}
}
}
}
private fun loanDetailsBinder(details: LoanApplicationDetails): LoanDetailsBinder {
@@ -439,6 +449,13 @@ class DetailsFragment : BaseFragment(), View.OnClickListener, WidgetCallback {
}
}
private fun fetchCashLoanSignatureDownloadURI() {
loanApplicationDetails?.loanAccountNumber?.let { loanAccountNumber ->
showLoader()
detailsVM.fetchCashLoanSignatureDownloadURI(loanAccountNumber)
}
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.download_iv -> downloadLoanAgreement()
@@ -446,7 +463,7 @@ class DetailsFragment : BaseFragment(), View.OnClickListener, WidgetCallback {
binding.loanForecloseBtn.id -> loanForecloseClickHandle()
R.id.ndc_download_iv -> downloadLoanNDC()
R.id.ic_download_iv -> showYearSelectionDialog()
R.id.las_download_iv -> downloadLoanAccountStatement()
R.id.las_download_iv -> fetchCashLoanSignatureDownloadURI()
R.id.gst_download_iv -> downloadGSTInvoice()
R.id.life_insurance_download_iv -> downloadLifeInsurance()
R.id.general_insurance_download_iv -> downloadGeneralInsurance()
@@ -523,16 +540,16 @@ class DetailsFragment : BaseFragment(), View.OnClickListener, WidgetCallback {
}
}
private fun downloadLoanAccountStatement() {
private fun downloadLoanAccountStatement(
cashLoanSignatureURI: String, downloadFileName: String
) {
NaviAnalytics.naviAnalytics.LoanApplicationDetail().onLASDownloadClick(widgetId)
loanApplicationDetails?.loanAccountStatementUri?.let {
startDownload(
it,
LAS_PDF_FILE_NAME,
if (widgetId == PERSONAL_LOAN) NaviAnalytics.PL_LOAN_ACCOUNT_STATEMENT_DOWNLOAD_FAIL
else NaviAnalytics.HL_LOAN_ACCOUNT_STATEMENT_DOWNLOAD_FAIL
)
}
startDownload(
cashLoanSignatureURI,
downloadFileName,
if (widgetId == PERSONAL_LOAN) NaviAnalytics.PL_LOAN_ACCOUNT_STATEMENT_DOWNLOAD_FAIL
else NaviAnalytics.HL_LOAN_ACCOUNT_STATEMENT_DOWNLOAD_FAIL
)
}
private fun downloadGSTInvoice() {
@@ -635,18 +652,16 @@ class DetailsFragment : BaseFragment(), View.OnClickListener, WidgetCallback {
companion object {
const val TAG = "DETAILS_FRAGMENT"
const val LOAN_SANCTION_LETTER_PDF = "navi_loan_sanction_letter.pdf"
const val LOAN_APPLICATION_DETAILS = "LOAN_APPLICATION_DETAILS"
const val WIDGET_ID = "WIDGET_ID"
const val LOAN_AGREEMENT_PDF_FILE_NAME = "navi_loan_agreement"
const val LOAN_SANCTION_PDF_LETTER_FILE_NAME = "navi_loan_sanction_letter"
private const val LOAN_NDC_PDF_FILE_NAME = "navi_loan_ndc"
private const val IC_PDF_FILE_NAME = "navi_interest_certificate"
private const val LAS_PDF_FILE_NAME = "navi_loan_account_statement"
private const val GST_PDF_FILE_NAME = "navi_gst_invoice"
private const val LIFE_INSURANCE_PDF_FILE_NAME = "navi_life_insurance"
private const val GENERAL_INSURANCE_PDF_FILE_NAME = "navi_general_insurance"
private const val URL = "url"
fun newInstance(details: LoanApplicationDetails?, widgetId: String?) =
DetailsFragment().apply {

View File

@@ -0,0 +1,17 @@
package com.naviapp.dashboard.loanapplicationdetails.models
import com.google.gson.annotations.SerializedName
data class CashLoanSignatureUriDetail(
@SerializedName("downloadCta") val downloadCta: DownLoadCtaDetails? = null
)
data class DownLoadCtaDetails(
@SerializedName("parameters") val parameters: List<Parameter>? = null,
@SerializedName("title") val downloadFileName: String? = null
)
data class Parameter(
@SerializedName("key") val key: String? = null,
@SerializedName("value") val value: String? = null
)

View File

@@ -21,4 +21,7 @@ class LoanApplicationDetailsRepository : ResponseCallback() {
suspend fun changeBankDetails(loanApplicationId: String) =
apiResponseCallback(retrofitService().changeBankDetails(loanApplicationId))
suspend fun fetchCashLoanSignatureDownloadURI(loanAccountNumber:String) =
apiResponseCallback(retrofitService().fetchCashLoanSignatureDownloadURI(loanAccountNumber))
}

View File

@@ -10,7 +10,9 @@ package com.naviapp.dashboard.loanapplicationdetails.viewmodels
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.navi.common.utils.isValidResponse
import com.navi.common.viewmodel.BaseVM
import com.naviapp.dashboard.loanapplicationdetails.models.CashLoanSignatureUriDetail
import com.naviapp.dashboard.loanapplicationdetails.models.InterestCertificateURIDetail
import com.naviapp.dashboard.loanapplicationdetails.models.YearDetails
import com.naviapp.dashboard.loanapplicationdetails.repositories.LoanApplicationDetailsRepository
@@ -22,6 +24,10 @@ class DetailsVM(private val repository: LoanApplicationDetailsRepository = LoanA
val interestCertificateURI: LiveData<InterestCertificateURIDetail>
get() = _interestCertificateURI
private val _cashLoanSignatureURI = MutableLiveData<CashLoanSignatureUriDetail>()
val cashLoanSignatureURI: LiveData<CashLoanSignatureUriDetail>
get() = _cashLoanSignatureURI
fun fetchInterestCertificateDownloadURI(yearDetails: YearDetails) {
viewModelScope.launch {
val response = repository.fetchInterestCertificateDownloadURI(yearDetails)
@@ -33,4 +39,15 @@ class DetailsVM(private val repository: LoanApplicationDetailsRepository = LoanA
}
}
}
fun fetchCashLoanSignatureDownloadURI(loanAccountNumber: String) {
viewModelScope.launch {
val response = repository.fetchCashLoanSignatureDownloadURI(loanAccountNumber)
if (response.isValidResponse()) {
_cashLoanSignatureURI.value = response.data
} else {
setErrorData(response.errors, response.error)
}
}
}
}

View File

@@ -1131,6 +1131,11 @@ interface RetrofitService {
@Body yearDetails: YearDetails
): Response<GenericResponse<InterestCertificateURIDetail>>
@POST("/loan-accounts/{loanAccountNumber}/initiate-loan-account-statement-generation")
suspend fun fetchCashLoanSignatureDownloadURI(
@Path("loanAccountNumber") loanAccountNumber: String
): Response<GenericResponse<CashLoanSignatureUriDetail>>
@GET("/customer-service/customers/me/vkyc-status")
suspend fun fetchVideoKycStatus(): Response<GenericResponse<VideoKycStatusResponse>>

View File

@@ -7,8 +7,7 @@
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.cardview.widget.CardView
android:id="@+id/loan_account_statement_layout"
@@ -16,8 +15,7 @@
android:layout_height="wrap_content"
android:visibility="gone"
app:cardCornerRadius="@dimen/card_corner_half_radius"
app:cardElevation="0dp"
tools:visibility="visible">
app:cardElevation="0dp">
<RelativeLayout
android:layout_width="match_parent"
@@ -40,7 +38,7 @@
android:layout_height="@dimen/layout_dp_16"
android:layout_alignParentEnd="true"
android:src="@drawable/ic_download_svg"
android:tint="@color/red" />
app:tint="@color/red" />
</RelativeLayout>
</androidx.cardview.widget.CardView>