From b55bbac1eee14ab7a5ea34a363c7a2d48c82ad17 Mon Sep 17 00:00:00 2001 From: Shashidhara Gopal Date: Thu, 14 Nov 2019 18:54:59 +0530 Subject: [PATCH] AA-24 | Shashidhara | WIP: API Integration --- .../androidCustomerApp/api/InputPanApi.kt | 8 ++-- .../api/KycDocumentUploadApi.kt | 8 ++-- .../api/LoanApplicationApi.kt | 27 +++++++----- .../medici/androidCustomerApp/api/LoginApi.kt | 2 +- .../androidCustomerApp/api/MyLoansApi.kt | 3 +- .../medici/androidCustomerApp/api/OtpApi.kt | 2 +- .../androidCustomerApp/api/RegisterApi.kt | 4 +- .../androidCustomerApp/api/UploadPanApi.kt | 8 ++-- .../models/OfferSelected.kt | 5 +-- .../models/request/LoanApplicationRequest.kt | 6 +++ .../response/UpdateLoanApplicationResponse.kt | 3 ++ .../preferences/PreferenceManager.kt | 2 +- .../repositories/InputPanRepository.kt | 4 +- .../KycDocumentUploadRepository.kt | 15 ++++++- .../repositories/LoanApplicationRepository.kt | 19 ++++++-- .../repositories/UploadPanRepository.kt | 4 +- .../ui/activities/InputPanActivity.kt | 3 +- .../ui/activities/UploadPanActivity.kt | 7 ++- .../ui/fragments/PreliminaryOfferFragment.kt | 10 ++--- .../viewModels/InputPanViewModel.kt | 16 ++++--- .../viewModels/KycDocumentUploadViewModel.kt | 14 +++++- .../viewModels/OfferAcceptViewModel.kt | 22 +++++----- .../viewModels/PreliminaryOfferViewModel.kt | 44 +++++++++---------- .../viewModels/UploadPanViewModel.kt | 34 +++++++++++++- 24 files changed, 179 insertions(+), 91 deletions(-) create mode 100644 app/src/main/java/com/navi/medici/androidCustomerApp/models/request/LoanApplicationRequest.kt create mode 100644 app/src/main/java/com/navi/medici/androidCustomerApp/models/response/UpdateLoanApplicationResponse.kt diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/api/InputPanApi.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/api/InputPanApi.kt index 39f823bc4d..dad7e82d69 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/api/InputPanApi.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/api/InputPanApi.kt @@ -7,12 +7,14 @@ import retrofit2.Response import retrofit2.http.Body import retrofit2.http.PATCH import retrofit2.http.POST +import retrofit2.http.Path -private const val BASE_URL = "https://auth-service.np.navi-tech.in" +private const val BASE_URL = "https://b73c209f-908f-4019-b6ae-6f9f58bcaf16.mock.pstmn.io" +//private const val BASE_URL = "https://auth-service.np.navi-tech.in" interface InputPanApi { - @PATCH("/party/persons/:id/POI") - suspend fun submitPan(@Body inputPanRequest: InputPanRequest): Response + @PATCH("/loan-origination-manager/loan-applications/{loanApplicationId}/POI") + suspend fun submitPan(@Path("loanApplicationId") loanApplicationId: String, @Body inputPanRequest: InputPanRequest): Response companion object { operator fun invoke(): InputPanApi { diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/api/KycDocumentUploadApi.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/api/KycDocumentUploadApi.kt index f4a3f1b199..36e6e213b3 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/api/KycDocumentUploadApi.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/api/KycDocumentUploadApi.kt @@ -3,6 +3,7 @@ package com.navi.medici.androidCustomerApp.api import com.navi.medici.androidCustomerApp.common.RetrofitService import com.navi.medici.androidCustomerApp.models.response.KycDocumentUploadResponse import okhttp3.MultipartBody +import okhttp3.RequestBody import retrofit2.Response import retrofit2.http.Multipart import retrofit2.http.POST @@ -12,11 +13,12 @@ import retrofit2.http.Path interface KycDocumentUploadApi { @Multipart @POST("/loan-application-service/loan-applications/{loanApplicationId}/POA") - suspend fun submitPoaDocument(@Path("loanApplicationId") loanApplicationId: String, @Part poaDocument: MultipartBody.Part): Response + suspend fun submitPoaDocument(@Path("loanApplicationId") loanApplicationId: String, @Part("type") type: RequestBody, @Part poaDocument: MultipartBody.Part): Response companion object { -// private const val BASE_URL = "https://loan-origination-service.np.navi-tech.in" - private const val BASE_URL = "https://77614f4e-45a5-49a3-928c-b232ce7620ef.mock.pstmn.io" + // private const val BASE_URL = "https://loan-origination-service.np.navi-tech.in" + private const val BASE_URL = "https://b73c209f-908f-4019-b6ae-6f9f58bcaf16.mock.pstmn.io" + operator fun invoke(): KycDocumentUploadApi { return RetrofitService.build(BASE_URL).create(KycDocumentUploadApi::class.java) } diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/api/LoanApplicationApi.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/api/LoanApplicationApi.kt index 8224c5384d..d2f33a74cd 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/api/LoanApplicationApi.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/api/LoanApplicationApi.kt @@ -4,35 +4,40 @@ import com.navi.medici.androidCustomerApp.common.RetrofitService import com.navi.medici.androidCustomerApp.models.ApplicationSummary import com.navi.medici.androidCustomerApp.models.OfferResponse import com.navi.medici.androidCustomerApp.models.OfferSelected +import com.navi.medici.androidCustomerApp.models.request.LoanApplicationRequest import com.navi.medici.androidCustomerApp.models.response.CreateApplicationResponse import com.navi.medici.androidCustomerApp.models.response.OfferAcceptResponse +import com.navi.medici.androidCustomerApp.models.response.UpdateLoanApplicationResponse import retrofit2.Response import retrofit2.http.* -private const val BASE_URL = "https://loan-origination-service.np.navi-tech.in" +private const val BASE_URL = "https://b73c209f-908f-4019-b6ae-6f9f58bcaf16.mock.pstmn.io" + +//private const val BASE_URL = "https://loan-origination-service.np.navi-tech.in" //private const val BASE_URL = "http://192.168.31.220:3020" interface LoanApplicationApi { - @PUT("/los/apply-loan") + @PUT("loan-application-service/loan-applications/{loanApplicationId}/confirm") suspend fun acceptOffer( - @Body offerData: OfferSelected? - ): Response + @Path("loanApplicationId") loanApplicationId: String): Response - @PUT("/los/application") + @PUT("/loan-origination-manager/loan-applications") suspend fun createApplication( - @Body offerData: OfferSelected? + @Body loanApplicationRequest: LoanApplicationRequest ): Response + @PATCH("/loan-application-service/confirm-loan-application") + suspend fun updateLoanApplication( + @Body offerSelected: OfferSelected + ): Response + @GET("/los/offers") suspend fun fetchOffer( @Query("person_id") personId: String? ): Response - - @GET("/los/application/summary") + @GET("/loan-application-service/loan-applications/{loanApplicationId}/summary") suspend fun fetchApplicationSummary( - @Query("application_id") applicationId: String? - ): Response - + @Path("loanApplicationId") loanApplicationId: String?): Response companion object { operator fun invoke(): LoanApplicationApi { diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/api/LoginApi.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/api/LoginApi.kt index 11086816ce..c55825855c 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/api/LoginApi.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/api/LoginApi.kt @@ -9,7 +9,7 @@ import retrofit2.http.POST //private const val BASE_URL = "https://auth-service.np.navi-tech.in" //private const val BASE_URL = "http://192.168.31.220:3020" -private const val BASE_URL = "https://77614f4e-45a5-49a3-928c-b232ce7620ef.mock.pstmn.io" +private const val BASE_URL = "https://b73c209f-908f-4019-b6ae-6f9f58bcaf16.mock.pstmn.io" interface LoginApi { @POST("/auth/otps/generate") diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/api/MyLoansApi.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/api/MyLoansApi.kt index 21435b891c..b9c5408f9f 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/api/MyLoansApi.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/api/MyLoansApi.kt @@ -6,7 +6,8 @@ import retrofit2.Response import retrofit2.http.GET import retrofit2.http.Query -private const val BASE_URL = "https://loan-accounts-service.np.navi-tech.in" +private const val BASE_URL = "https://b73c209f-908f-4019-b6ae-6f9f58bcaf16.mock.pstmn.io" +//private const val BASE_URL = "https://loan-accounts-service.np.navi-tech.in" //private const val BASE_URL = "http://192.168.31.220:3020" interface MyLoansApi { diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/api/OtpApi.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/api/OtpApi.kt index 6beb1577c5..7add90b5d6 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/api/OtpApi.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/api/OtpApi.kt @@ -9,7 +9,7 @@ import retrofit2.http.POST //private const val BASE_URL = "http://192.168.31.220:3020" //private const val BASE_URL = "https://auth-service.np.navi-tech.in" -private const val BASE_URL = "https://77614f4e-45a5-49a3-928c-b232ce7620ef.mock.pstmn.io" +private const val BASE_URL = "https://b73c209f-908f-4019-b6ae-6f9f58bcaf16.mock.pstmn.io" interface OtpApi { @POST("/auth/tokens") diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/api/RegisterApi.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/api/RegisterApi.kt index d67afb71cd..16fce45221 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/api/RegisterApi.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/api/RegisterApi.kt @@ -10,10 +10,10 @@ import retrofit2.http.PUT //private const val BASE_URL = "https://auth-service.np.navi-tech.in" //private const val BASE_URL = "http://192.168.31.220:3020" //private const val BASE_URL = "https://auth-service.np.navi-tech.in" -private const val BASE_URL = "https://77614f4e-45a5-49a3-928c-b232ce7620ef.mock.pstmn.io" +private const val BASE_URL = "https://b73c209f-908f-4019-b6ae-6f9f58bcaf16.mock.pstmn.io" interface RegisterApi { - @PUT("/auth/app-installations/register") + @PUT("/app-installations/register") suspend fun checkDevice(@Body registerRequest: RegisterRequest): Response companion object { diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/api/UploadPanApi.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/api/UploadPanApi.kt index da22f089f7..8f551cb9e0 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/api/UploadPanApi.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/api/UploadPanApi.kt @@ -8,13 +8,15 @@ import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part import okhttp3.MultipartBody +import retrofit2.http.Path -private const val BASE_URL = "https://auth-service.np.navi-tech.in" +private const val BASE_URL = "https://b73c209f-908f-4019-b6ae-6f9f58bcaf16.mock.pstmn.io" +//private const val BASE_URL = "https://auth-service.np.navi-tech.in" interface UploadPanApi { @Multipart - @POST("/origination/documents/POI/") - suspend fun uploadPan(@Part("type") type: RequestBody, @Part image: MultipartBody.Part): Response + @POST("/loan-origination-manager/loan-applications/{loanApplicationId}/POI") + suspend fun uploadPan(@Path("loanApplicationId") loanApplicationId: String, @Part("type") type: RequestBody, @Part image: MultipartBody.Part): Response companion object { operator fun invoke(): UploadPanApi { diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/models/OfferSelected.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/models/OfferSelected.kt index 6f21483287..c7d7fe7e45 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/models/OfferSelected.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/models/OfferSelected.kt @@ -3,12 +3,11 @@ package com.navi.medici.androidCustomerApp.models import java.math.BigDecimal data class OfferSelected( + var applicationId: String? = "", var personId: String? = "", var offerId: String? = "", var loanAmount: Money?, var tenure: TenureDetails?, var rateOfInterest: BigDecimal? = BigDecimal(0), var selectionReasonId: Long? - -) { -} +) \ No newline at end of file diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/models/request/LoanApplicationRequest.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/models/request/LoanApplicationRequest.kt new file mode 100644 index 0000000000..dfdbdb24e4 --- /dev/null +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/models/request/LoanApplicationRequest.kt @@ -0,0 +1,6 @@ +package com.navi.medici.androidCustomerApp.models.request + +data class LoanApplicationRequest( + val personId: String, + val productId: String +) diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/models/response/UpdateLoanApplicationResponse.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/models/response/UpdateLoanApplicationResponse.kt new file mode 100644 index 0000000000..795ba621e1 --- /dev/null +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/models/response/UpdateLoanApplicationResponse.kt @@ -0,0 +1,3 @@ +package com.navi.medici.androidCustomerApp.models.response + +data class UpdateLoanApplicationResponse(val success: Boolean?) \ No newline at end of file diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/preferences/PreferenceManager.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/preferences/PreferenceManager.kt index ffc03774bb..2f9db547c1 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/preferences/PreferenceManager.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/preferences/PreferenceManager.kt @@ -23,7 +23,7 @@ object PreferenceManager { fun getApplicationId(context: Context): String? { return PreferenceWrapper.getStringPreference( context, - PreferenceNames.CUSTOMER_ID + PreferenceNames.LOAN_APPLICATION_ID ) } diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/InputPanRepository.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/InputPanRepository.kt index 1d2cd342aa..86e36e07cf 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/InputPanRepository.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/InputPanRepository.kt @@ -4,6 +4,6 @@ import com.navi.medici.androidCustomerApp.api.InputPanApi import com.navi.medici.androidCustomerApp.models.request.InputPanRequest class InputPanRepository(private val inputPanApi: InputPanApi) { - suspend fun submitPan(inputPanRequest: InputPanRequest) = - suspend { inputPanApi.submitPan(inputPanRequest) }.invoke() + suspend fun submitPan(loanApplicationId: String, inputPanRequest: InputPanRequest) = + suspend { inputPanApi.submitPan(loanApplicationId, inputPanRequest) }.invoke() } \ No newline at end of file diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/KycDocumentUploadRepository.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/KycDocumentUploadRepository.kt index 96953c7a51..1561a686d4 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/KycDocumentUploadRepository.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/KycDocumentUploadRepository.kt @@ -2,8 +2,19 @@ package com.navi.medici.androidCustomerApp.repositories import com.navi.medici.androidCustomerApp.api.KycDocumentUploadApi import okhttp3.MultipartBody +import okhttp3.RequestBody class KycDocumentUploadRepository(private val kycDocumentUploadApi: KycDocumentUploadApi) { - suspend fun submitPoaDocument(loanApplicationId: String, poaDocument: MultipartBody.Part) = - suspend { kycDocumentUploadApi.submitPoaDocument(loanApplicationId, poaDocument) }.invoke() + suspend fun submitPoaDocument( + loanApplicationId: String, + type: RequestBody, + poaDocument: MultipartBody.Part + ) = + suspend { + kycDocumentUploadApi.submitPoaDocument( + loanApplicationId, + type, + poaDocument + ) + }.invoke() } \ No newline at end of file diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/LoanApplicationRepository.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/LoanApplicationRepository.kt index 919c06e335..c30591218f 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/LoanApplicationRepository.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/LoanApplicationRepository.kt @@ -2,10 +2,21 @@ package com.navi.medici.androidCustomerApp.loan_application import com.navi.medici.androidCustomerApp.api.LoanApplicationApi import com.navi.medici.androidCustomerApp.models.OfferSelected +import com.navi.medici.androidCustomerApp.models.request.LoanApplicationRequest class LoanApplicationRepository(private val loanApplicationApi: LoanApplicationApi) { - suspend fun offerAccept(offerAcceptInput: OfferSelected?) = suspend { loanApplicationApi.acceptOffer(offerAcceptInput) }.invoke() - suspend fun createApplication(offerAcceptInput: OfferSelected?) = suspend { loanApplicationApi.createApplication(offerAcceptInput) }.invoke() - suspend fun fetchOffer(personId: String?) = suspend { loanApplicationApi.fetchOffer(personId) }.invoke() - suspend fun fetchApplicationSummary(applicationId: String?) = suspend { loanApplicationApi.fetchApplicationSummary(applicationId) }.invoke() + suspend fun offerAccept(loanApplicationId: String) = + suspend { loanApplicationApi.acceptOffer(loanApplicationId) }.invoke() + + suspend fun createApplication(loanApplicationRequest: LoanApplicationRequest) = + suspend { loanApplicationApi.createApplication(loanApplicationRequest) }.invoke() + + suspend fun fetchOffer(personId: String?) = + suspend { loanApplicationApi.fetchOffer(personId) }.invoke() + + suspend fun fetchApplicationSummary(applicationId: String?) = + suspend { loanApplicationApi.fetchApplicationSummary(applicationId) }.invoke() + + suspend fun updateLoanApplication(offerSelected: OfferSelected) = + suspend { loanApplicationApi.updateLoanApplication(offerSelected) }.invoke() } \ No newline at end of file diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/UploadPanRepository.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/UploadPanRepository.kt index 3ef79f47d5..ea9f26497e 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/UploadPanRepository.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/repositories/UploadPanRepository.kt @@ -6,6 +6,6 @@ import okhttp3.RequestBody import retrofit2.http.Part class UploadPanRepository(private val uploadPanApi: UploadPanApi) { - suspend fun uploadPan(@Part type: RequestBody, @Part image: MultipartBody.Part) = - suspend { uploadPanApi.uploadPan(type, image) }.invoke() + suspend fun uploadPan(loanApplicationId: String, @Part type: RequestBody, @Part image: MultipartBody.Part) = + suspend { uploadPanApi.uploadPan(loanApplicationId, type, image) }.invoke() } \ No newline at end of file diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/ui/activities/InputPanActivity.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/ui/activities/InputPanActivity.kt index 0be982a235..2a21adf1d4 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/ui/activities/InputPanActivity.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/ui/activities/InputPanActivity.kt @@ -29,7 +29,7 @@ class InputPanActivity : AppCompatActivity() { binding.continueButton.setOnClickListener { if (binding.checkbox.isChecked) { - inputPanViewModel.submitPan(binding.panEdit.text.toString()) + inputPanViewModel.submitPan(binding.panEdit.text.toString(), this) } else { Toast.makeText( this, @@ -40,6 +40,7 @@ class InputPanActivity : AppCompatActivity() { } } + private fun panSubmittedObserver(): Observer { return Observer { if (it) { diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/ui/activities/UploadPanActivity.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/ui/activities/UploadPanActivity.kt index a74c4991a5..3f2320f884 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/ui/activities/UploadPanActivity.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/ui/activities/UploadPanActivity.kt @@ -16,6 +16,8 @@ import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.navi.medici.androidCustomerApp.R import com.navi.medici.androidCustomerApp.databinding.ActivityUploadPanBinding +import com.navi.medici.androidCustomerApp.preferences.PreferenceManager +import com.navi.medici.androidCustomerApp.viewModels.PreliminaryOfferViewModel import com.navi.medici.androidCustomerApp.viewModels.UploadPanViewModel import java.io.ByteArrayOutputStream import java.io.File @@ -34,6 +36,9 @@ class UploadPanActivity : AppCompatActivity() { binding = DataBindingUtil.setContentView(this, R.layout.activity_upload_pan) uploadPanViewModel = ViewModelProviders.of(this).get(UploadPanViewModel::class.java) + uploadPanViewModel.onSubmitApplicationCreate( + PreferenceManager.getPersonId(this) ?: "123", "123", this + ) if (!checkPermissions()) { requestPermissions() } else { @@ -124,6 +129,6 @@ class UploadPanActivity : AppCompatActivity() { fos.flush() fos.close() - uploadPanViewModel.uploadPan(panImageFile) + uploadPanViewModel.uploadPan(panImageFile, this) } } \ No newline at end of file diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/ui/fragments/PreliminaryOfferFragment.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/ui/fragments/PreliminaryOfferFragment.kt index 6e4a00b506..b899aa4915 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/ui/fragments/PreliminaryOfferFragment.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/ui/fragments/PreliminaryOfferFragment.kt @@ -17,6 +17,7 @@ import androidx.lifecycle.ViewModelProviders import com.navi.medici.androidCustomerApp.R import com.navi.medici.androidCustomerApp.adapters.LoanReasonAdapter import com.navi.medici.androidCustomerApp.databinding.PreliminaryOfferFragmentBinding +import com.navi.medici.androidCustomerApp.models.LoanReason import com.navi.medici.androidCustomerApp.models.Money import com.navi.medici.androidCustomerApp.models.TenureDetails import com.navi.medici.androidCustomerApp.models.TenureUnit @@ -61,7 +62,8 @@ class PreliminaryOfferFragment : Fragment() { binding.tenureSlider.progress = binding.tenureSlider.max / 2 binding.amountSlider.progress = binding.amountSlider.max / 2 offer?.let { - binding.reasonSpinner.adapter = LoanReasonAdapter(activity, offer.loanReasons) + val loanReasons = listOf(LoanReason(1, "Education")) + binding.reasonSpinner.adapter = LoanReasonAdapter(activity, loanReasons) } }) @@ -105,13 +107,9 @@ class PreliminaryOfferFragment : Fragment() { } binding.acceptOfferBtn.setOnClickListener { - viewModel.onSubmitApplicationCreate( - PreferenceManager.getPersonId(activity), - binding.reasonSpinner.selectedItemId - ) + viewModel.onClickAcceptOffer(activity as Activity, binding.reasonSpinner.selectedItemId) } - viewModel.selectedLoanAmount.observe(this, Observer { loanAmount -> binding.loanSelectedAmountTxt.text = loanAmount?.getDisplayStr() }) diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/InputPanViewModel.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/InputPanViewModel.kt index 87a67ee352..7df0443a10 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/InputPanViewModel.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/InputPanViewModel.kt @@ -1,11 +1,13 @@ package com.navi.medici.androidCustomerApp.viewModels +import android.content.Context import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.navi.medici.androidCustomerApp.api.InputPanApi import com.navi.medici.androidCustomerApp.repositories.InputPanRepository import com.navi.medici.androidCustomerApp.models.request.InputPanRequest +import com.navi.medici.androidCustomerApp.preferences.PreferenceManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -17,16 +19,16 @@ class InputPanViewModel : ViewModel() { private val coroutineScope = CoroutineScope(Dispatchers.Main) private val inputPanRepository = InputPanRepository(InputPanApi()) - fun submitPan(pan: String) { + fun submitPan(pan: String, context: Context) { val inputPanRequest = InputPanRequest(pan) coroutineScope.launch { - val response = inputPanRepository.submitPan(inputPanRequest) - if (response.isSuccessful) { - _panSubmitted.value = true - } else { - _panSubmitted.value = false - } + val response = inputPanRepository.submitPan( + PreferenceManager.getApplicationId(context).toString(), + inputPanRequest + ) + _panSubmitted.value = response.isSuccessful } + _panSubmitted.value = true } } \ No newline at end of file diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/KycDocumentUploadViewModel.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/KycDocumentUploadViewModel.kt index c268ebe6ab..5cb4c12912 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/KycDocumentUploadViewModel.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/KycDocumentUploadViewModel.kt @@ -3,6 +3,7 @@ package com.navi.medici.androidCustomerApp.viewModels import android.net.Uri import android.view.View import android.widget.AdapterView +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.navi.medici.androidCustomerApp.api.KycDocumentUploadApi import com.navi.medici.androidCustomerApp.databinding.KycDocumentUploadFragmentBinding @@ -10,13 +11,16 @@ import com.navi.medici.androidCustomerApp.repositories.KycDocumentUploadReposito import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import okhttp3.MediaType import okhttp3.MultipartBody +import okhttp3.RequestBody import java.io.File class KycDocumentUploadViewModel : ViewModel() { val proofOfAddresses = arrayOf("Choose POA Document", "Aadhar card", "PAN card") private val kycDocumentUploadRepository = KycDocumentUploadRepository(KycDocumentUploadApi()) private val coroutineScope = CoroutineScope(Dispatchers.Main) + private val documentSelectedForUpload = MutableLiveData() fun onItemSelectedListener(binding: KycDocumentUploadFragmentBinding): AdapterView.OnItemSelectedListener { return object : AdapterView.OnItemSelectedListener { @@ -28,6 +32,7 @@ class KycDocumentUploadViewModel : ViewModel() { ) { binding.uploadDocumentButton.visibility = if (position == 0) View.INVISIBLE else View.VISIBLE + documentSelectedForUpload.value = parent?.selectedItem.toString() } override fun onNothingSelected(parent: AdapterView<*>?) {} @@ -41,7 +46,14 @@ class KycDocumentUploadViewModel : ViewModel() { MultipartBody.Part.createFormData("poa_document", poaDocumentFile.name) coroutineScope.launch { loanApplicationId?.let { loanApplicationId -> - kycDocumentUploadRepository.submitPoaDocument(loanApplicationId, poaDocument) + kycDocumentUploadRepository.submitPoaDocument( + loanApplicationId, + RequestBody.create( + MediaType.parse("text/plain"), + documentSelectedForUpload.toString() + ), + poaDocument + ) } } } diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/OfferAcceptViewModel.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/OfferAcceptViewModel.kt index 8cbe78e66c..22fc7db75e 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/OfferAcceptViewModel.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/OfferAcceptViewModel.kt @@ -17,7 +17,7 @@ class OfferAcceptViewModel : ViewModel() { private val _applicationSummary = MutableLiveData() private val offerAcceptRepository = LoanApplicationRepository(LoanApplicationApi()) private val coroutineScope = CoroutineScope(Dispatchers.Main) - + val customerId: LiveData get() = _customerId @@ -28,16 +28,18 @@ class OfferAcceptViewModel : ViewModel() { coroutineScope.launch { var applicationDetail = applicationSummary.value?.loanApplicationDetails // TODO: updateit to send only the application id - var offerSelected = OfferSelected( - personId, - applicationDetail?.offerId, - applicationDetail?.loanAmount, - applicationDetail?.tenure, - applicationDetail?.rateOfInterest, - 1 - ) +// var offerSelected = OfferSelected( +// +// personId, +// applicationDetail?.offerId, +// applicationDetail?.loanAmount, +// applicationDetail?.tenure, +// applicationDetail?.rateOfInterest, +// 1 +// ) - val response = offerAcceptRepository.offerAccept(offerSelected) + val response = + offerAcceptRepository.offerAccept(applicationDetail?.id.toString()) if (response.isSuccessful) { _customerId.value = response.body()?.customerId Timber.i("Offer Accept response $response.body().toString()") diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/PreliminaryOfferViewModel.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/PreliminaryOfferViewModel.kt index 1a43394f79..e664422aeb 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/PreliminaryOfferViewModel.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/PreliminaryOfferViewModel.kt @@ -1,13 +1,14 @@ package com.navi.medici.androidCustomerApp.viewModels +import android.app.Activity import android.util.Log -import androidx.databinding.ObservableField import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.navi.medici.androidCustomerApp.api.LoanApplicationApi import com.navi.medici.androidCustomerApp.loan_application.LoanApplicationRepository import com.navi.medici.androidCustomerApp.models.* +import com.navi.medici.androidCustomerApp.preferences.PreferenceManager import com.navi.medici.androidCustomerApp.utils.EmiCalculator import com.navi.medici.androidCustomerApp.utils.StepFunctionCalculator import kotlinx.coroutines.CoroutineScope @@ -74,28 +75,6 @@ class PreliminaryOfferViewModel : ViewModel() { } } - fun onSubmitApplicationCreate( - personId: String?, - selectionReasonId: Long? - ) { - coroutineScope.launch { - var offerSelected = OfferSelected( - personId, - offerResponse.value?.schemeId, - _selectedLoanAmount.value, - _selectedTenureDetails.value, - offerResponse.value?.rateOfInterest, - selectionReasonId - ) - - val response = offerAcceptRepository.createApplication(offerSelected) - if (response.isSuccessful) { - _applicationId.value = response.body()?.applicationId - Log.i("CreateAplctn response", response.body().toString()) - } - } - } - fun getLoanAmount(): LoanAmount? { return offerResponse.value?.loanAmount } @@ -122,7 +101,7 @@ class PreliminaryOfferViewModel : ViewModel() { amount?.let { tenureDetails?.let { calculateEmi( - amount?.amount, + amount.amount, tenureDetails ) } @@ -157,4 +136,21 @@ class PreliminaryOfferViewModel : ViewModel() { } } + fun onClickAcceptOffer(activity: Activity, selectionReasonId: Long) { + coroutineScope.launch { + _applicationId.value = PreferenceManager.getApplicationId(activity) + val offerSelected = OfferSelected( + _applicationId.value, + PreferenceManager.getPersonId(activity), + offerResponse.value?.schemeId, + _selectedLoanAmount.value, + _selectedTenureDetails.value, + offerResponse.value?.rateOfInterest, + selectionReasonId + ) + val response = offerAcceptRepository.updateLoanApplication(offerSelected) + Log.i("update loan response", response.body().toString()) + } + } + } diff --git a/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/UploadPanViewModel.kt b/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/UploadPanViewModel.kt index 5e45b9b067..d1f7caa0c4 100644 --- a/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/UploadPanViewModel.kt +++ b/app/src/main/java/com/navi/medici/androidCustomerApp/viewModels/UploadPanViewModel.kt @@ -1,9 +1,16 @@ package com.navi.medici.androidCustomerApp.viewModels +import android.app.Activity +import android.content.Context +import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import com.navi.medici.androidCustomerApp.api.LoanApplicationApi import com.navi.medici.androidCustomerApp.api.UploadPanApi +import com.navi.medici.androidCustomerApp.loan_application.LoanApplicationRepository +import com.navi.medici.androidCustomerApp.models.request.LoanApplicationRequest +import com.navi.medici.androidCustomerApp.preferences.PreferenceManager import com.navi.medici.androidCustomerApp.repositories.UploadPanRepository import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -20,17 +27,40 @@ class UploadPanViewModel : ViewModel() { get() = _panUploaded private val coroutineScope = CoroutineScope(Dispatchers.Main) private val uploadPanRepository = UploadPanRepository(UploadPanApi()) + private val loanApplicationRepository = LoanApplicationRepository(LoanApplicationApi()) - fun uploadPan(file: File) { + fun uploadPan(file: File, context: Context) { val reqFile = RequestBody.create(MediaType.parse("image/*"), file) val body = MultipartBody.Part.createFormData("upload", file.name, reqFile) val requestType = RequestBody.create( MediaType.parse("text/plain"), "PAN" ) coroutineScope.launch { - val response = uploadPanRepository.uploadPan(requestType, body) + val response = uploadPanRepository.uploadPan( + PreferenceManager.getApplicationId(context).toString(), + requestType, + body + ) _panUploaded.value = response.isSuccessful } } + fun onSubmitApplicationCreate( + personId: String, + productId: String, + activity: Activity + ) { + coroutineScope.launch { + val loanApplicationRequest = LoanApplicationRequest(personId, productId) + val response = loanApplicationRepository.createApplication(loanApplicationRequest) + if (response.isSuccessful) { + val applicationId = response.body()?.applicationId + PreferenceManager.saveApplicationId(applicationId, activity) + Log.i("CreateAplctn response", response.body().toString()) + } else { + PreferenceManager.saveApplicationId("12", activity) + } + } + } + } \ No newline at end of file