diff --git a/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt index 07370db..000e772 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt @@ -1,10 +1,7 @@ package com.nivesh.production.bajajfd.interfaces import com.google.gson.JsonObject -import com.nivesh.production.bajajfd.model.GetCodeRequest -import com.nivesh.production.bajajfd.model.GetMaturityAmountRequest -import com.nivesh.production.bajajfd.model.GetRatesRequest -import com.nivesh.production.bajajfd.model.PanCheckRequest +import com.nivesh.production.bajajfd.model.* import okhttp3.RequestBody import retrofit2.Response import retrofit2.http.* @@ -50,4 +47,26 @@ interface ApiInterface { @POST("api/PanCheck_S") suspend fun panCheckApi(@Body panCheck: PanCheckRequest, @Header("token") token: String): Response + + @POST("getFDStepsCount") + suspend fun getFDStepsCount(@Body fdStepsCountRequest: FDStepsCountRequest, @Header("token") token: String): Response + + @POST("GetCodes") + suspend fun titleApi(@Body getCodeRequest: GetCodeRequest, @Header("token") token: String): Response + + @POST("GetCodes") + suspend fun genderApi(@Body getCodeRequest: GetCodeRequest, @Header("token") token: String): Response + + @POST("GetCodes") + suspend fun annualIncomeApi(@Body getCodeRequest: GetCodeRequest, @Header("token") token: String): Response + + @POST("GetCodes") + suspend fun relationShipApi(@Body getCodeRequest: GetCodeRequest, @Header("token") token: String): Response + + @POST("GetCodes") + suspend fun maritalStatusApi(@Body getCodeRequest: GetCodeRequest, @Header("token") token: String): Response + + @POST("GetCodes") + suspend fun occupationApi(@Body getCodeRequest: GetCodeRequest, @Header("token") token: String): Response + } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/FDStepsCountRequest.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/FDStepsCountRequest.kt new file mode 100644 index 0000000..79a9e1d --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/FDStepsCountRequest.kt @@ -0,0 +1,6 @@ +package com.nivesh.production.bajajfd.model + +data class FDStepsCountRequest( + var FDProvider: String? = "", + var NiveshClientCode: String? = "" +) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXXXX.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXXXX.kt new file mode 100644 index 0000000..89521d8 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXXXX.kt @@ -0,0 +1,9 @@ +package com.nivesh.production.bajajfd.model + +data class ResponseXXXX( + val Errors: Any, + val Message: String, + val Status: String, + val StatusCode: Int, + val StepsCount: Int +) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/StepsCountResponse.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/StepsCountResponse.kt new file mode 100644 index 0000000..b0266d1 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/StepsCountResponse.kt @@ -0,0 +1,5 @@ +package com.nivesh.production.bajajfd.model + +data class StepsCountResponse( + val Response: ResponseXXXX +) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt b/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt index 06d5007..857e9ba 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt @@ -1,10 +1,7 @@ package com.nivesh.production.bajajfd.repositories import com.nivesh.production.bajajfd.interfaces.ApiInterface -import com.nivesh.production.bajajfd.model.GetCodeRequest -import com.nivesh.production.bajajfd.model.GetMaturityAmountRequest -import com.nivesh.production.bajajfd.model.GetRatesRequest -import com.nivesh.production.bajajfd.model.PanCheckRequest +import com.nivesh.production.bajajfd.model.* class MainRepository constructor(private val apiInterface: ApiInterface) { suspend fun getRatesResponse(getRatesRequest: GetRatesRequest, token: String) = @@ -12,6 +9,8 @@ class MainRepository constructor(private val apiInterface: ApiInterface) { suspend fun getCodesResponse(requestBody: GetCodeRequest , token: String) = apiInterface.getCodes(requestBody, token) + suspend fun getStepsCountResponse(requestBody: FDStepsCountRequest , token: String) = + apiInterface.getFDStepsCount(requestBody, token) suspend fun createCalculateFDMaturityAmount(requestBody: GetMaturityAmountRequest, token: String) = apiInterface.getCalculateFDMaturityAmount(requestBody, token) @@ -44,4 +43,21 @@ class MainRepository constructor(private val apiInterface: ApiInterface) { suspend fun panCheck(panCheck: PanCheckRequest, token: String) = apiInterface.panCheckApi(panCheck, token) + suspend fun titleCheck(getCodeRequest: GetCodeRequest, token: String) = + apiInterface.titleApi(getCodeRequest, token) + + suspend fun genderCheck(getCodeRequest: GetCodeRequest, token: String) = + apiInterface.genderApi(getCodeRequest, token) + + suspend fun annualIncomeCheck(getCodeRequest: GetCodeRequest, token: String) = + apiInterface.annualIncomeApi(getCodeRequest, token) + + suspend fun relationShipCheck(getCodeRequest: GetCodeRequest, token: String) = + apiInterface.relationShipApi(getCodeRequest, token) + + suspend fun maritalStatusCheck(getCodeRequest: GetCodeRequest, token: String) = + apiInterface.maritalStatusApi(getCodeRequest, token) + + suspend fun occupationCheck(getCodeRequest: GetCodeRequest, token: String) = + apiInterface.occupationApi(getCodeRequest, token) } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt index 517f7ca..6e6a0ae 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt @@ -33,7 +33,6 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { lateinit var stepFourBajajFDViewModel: StepFourBajajFDViewModel lateinit var stepFiveBajajFDViewModel: StepFiveBajajFDViewModel - lateinit var listOfFrequency: List lateinit var createFDRequest: CreateFDRequest lateinit var createFDApplicantRequest: CreateFDApplicationRequest lateinit var applicantDetails: ApplicantDetails @@ -71,9 +70,8 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { stepFourBajajFDViewModel = ViewModelProvider(this, StepFourModelProviderFactory(MainRepository(ApiClient.getApiClient)))[StepFourBajajFDViewModel::class.java] stepFiveBajajFDViewModel = ViewModelProvider(this, StepFiveModelProviderFactory(MainRepository(ApiClient.getApiClient)))[StepFiveBajajFDViewModel::class.java] - listOfFrequency = ArrayList() if (Common.isNetworkAvailable(this)) { - getCodeApi() + getStepsCountApi() } binding.imgBack.setOnClickListener { @@ -81,24 +79,21 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { } } - private fun getCodeApi() { - val getCodeRequest = GetCodeRequest() - getCodeRequest.ProductName = getString(R.string.bajajFD) - getCodeRequest.Category = getString(R.string.category) - getCodeRequest.Language = getString(R.string.language) - getCodeRequest.InputValue = "" - viewModel.getCode(getCodeRequest, token) - viewModel.getRatesMutableData.observe(this) { response -> + private fun getStepsCountApi(){ + val fdStepsCount = FDStepsCountRequest() + fdStepsCount.FDProvider = getString(R.string.bajaj) + fdStepsCount.NiveshClientCode = "8872" + viewModel.getStepsCount(fdStepsCount, token) + viewModel.getStepsCountMutableData.observe(this) { response -> when (response) { is Resource.Success -> { Log.e("response", "-->$response") - val getCodeResponse: GetCodeResponse = - Gson().fromJson(response.data?.toString(), GetCodeResponse::class.java) - getCodeResponse.Response.StatusCode.let { code -> + val stepsCountResponse: StepsCountResponse = + Gson().fromJson(response.data?.toString(), StepsCountResponse::class.java) + stepsCountResponse.Response.StatusCode.let { code -> when (code) { 200 -> { - listOfFrequency = getCodeResponse.Response.GetCodesList - setViewPager() + setViewPager(stepsCountResponse.Response.StepsCount) } // 650 -> refreshToken() else -> {} @@ -118,7 +113,8 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { } } - private fun setViewPager() { + + private fun setViewPager(stepsCount: Int) { // steps setting setBackground(selectedShape(), defaultShape(), defaultShape(), defaultShape()) @@ -128,7 +124,9 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { val viewPager: ViewPager = binding.viewPager sectionsPagerAdapter.addFragment(StepOneBajajFDFragment.getInstance(this@BajajFdMainActivity)) sectionsPagerAdapter.addFragment(StepTwoBajajFDFragment.getInstance(this@BajajFdMainActivity)) - sectionsPagerAdapter.addFragment(StepThreeBajajFDFragment.getInstance(this@BajajFdMainActivity)) + if (stepsCount == 4) { + sectionsPagerAdapter.addFragment(StepThreeBajajFDFragment.getInstance(this@BajajFdMainActivity)) + } sectionsPagerAdapter.addFragment(StepFourBajajFDFragment.getInstance(this@BajajFdMainActivity)) sectionsPagerAdapter.addFragment(StepFiveBajajFDFragment.getInstance(this@BajajFdMainActivity)) viewPager.adapter = sectionsPagerAdapter diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt index c355b21..e4db4bf 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt @@ -21,9 +21,7 @@ import com.nivesh.production.bajajfd.R import com.nivesh.production.bajajfd.adapter.HorizontalRecyclerViewAdapter import com.nivesh.production.bajajfd.databinding.FragmentBajajfdStepOneBinding import com.nivesh.production.bajajfd.interfaces.BajajFDInterface -import com.nivesh.production.bajajfd.model.GetCalculateMaturityAmountResponse -import com.nivesh.production.bajajfd.model.GetMaturityAmountRequest -import com.nivesh.production.bajajfd.model.GetRatesRequest +import com.nivesh.production.bajajfd.model.* import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity import com.nivesh.production.bajajfd.util.Common import com.nivesh.production.bajajfd.util.Common.Companion.commonErrorMethod @@ -32,6 +30,7 @@ import com.nivesh.production.bajajfd.util.Constants.Companion.token import com.nivesh.production.bajajfd.util.Resource import com.nivesh.production.bajajfd.viewModel.StepOneBajajFDViewModel + class StepOneBajajFDFragment : Fragment() { private var _binding: FragmentBajajfdStepOneBinding? = null private val binding get() = _binding!! @@ -41,6 +40,9 @@ class StepOneBajajFDFragment : Fragment() { private lateinit var rgMaturity: RadioButton private lateinit var listOfTenure: MutableList private lateinit var recyclerViewDropDownAdapter: HorizontalRecyclerViewAdapter + private lateinit var listOfMinAmount: List + private lateinit var listOfMaxAmount: List + private lateinit var listOfFrequency: List private var tenure: Int = 0 private var interest: Double = 0.0 @@ -68,31 +70,27 @@ class StepOneBajajFDFragment : Fragment() { binding.edtAmount.filters = arrayOf(InputFilter.LengthFilter(8)) // upto 1 Cr + listOfMinAmount = ArrayList() + listOfMaxAmount = ArrayList() + listOfFrequency = ArrayList() + // Amount binding.edtAmount.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) {} override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { removeError(binding.tlDepositAmount) - if (s.toString().trim().length >= 4 ) { - getRatesApi() + if (s.toString().trim().length >= 4) { maturityAmountApi(tenure, interest) } } }) // Frequency - if ((activity as BajajFdMainActivity).listOfFrequency.isNotEmpty()) { - val adapter = ArrayAdapter( - activity as BajajFdMainActivity, - R.layout.spinner_dropdown, - (activity as BajajFdMainActivity).listOfFrequency - ) - binding.spInterestPayout.setAdapter(adapter) - binding.spInterestPayout.setOnItemClickListener { _, _, position, _ -> - removeError(binding.tlInterestPayout) - binding.tvFrequency.text = - (activity as BajajFdMainActivity).listOfFrequency[position].Value + binding.spInterestPayout.setOnItemClickListener { _, _, position, _ -> + removeError(binding.tlInterestPayout) + if (listOfFrequency.isNotEmpty()) { + binding.tvFrequency.text = listOfFrequency[position].Value if (!binding.tvFrequency.text.equals(getString(R.string.cumulativeText))) { binding.txtCumulativeNon.text = getString(R.string.nonCumulativeROI) } else { @@ -101,18 +99,11 @@ class StepOneBajajFDFragment : Fragment() { if (binding.edtAmount.text.toString().trim().isNotEmpty()) { maturityAmountApi(tenure, interest) - getRatesApi() - } else { - // please enter Amount first - commonErrorMethod( - binding.edtAmount, - binding.tlDepositAmount, - getString(R.string.emptyAmountFirst) - ) } } } + // Tenure binding.spTenure.setOnItemClickListener { _, _, position, _ -> removeError(binding.tlInterestTenure) @@ -121,7 +112,6 @@ class StepOneBajajFDFragment : Fragment() { interest = listOfTenure[position].ROI binding.tvROI.text = interest.toString().plus(" %") maturityAmountApi(tenure, interest) - recyclerViewDropDownAdapter.refresh() } } @@ -158,7 +148,8 @@ class StepOneBajajFDFragment : Fragment() { (activity as BajajFdMainActivity).fdInvestmentDetails.IPAddress = "" (activity as BajajFdMainActivity).fdInvestmentDetails.Device = getString(R.string.app) - (activity as BajajFdMainActivity).fdInvestmentDetails.Source = getString(R.string.source) + (activity as BajajFdMainActivity).fdInvestmentDetails.Source = + getString(R.string.source) if (binding.swSeniorCitizen.isChecked) { (activity as BajajFdMainActivity).fdInvestmentDetails.CitizenType = getString(R.string.seniorCitizen) @@ -173,10 +164,142 @@ class StepOneBajajFDFragment : Fragment() { } } - + minAmountApi() + interestPayoutApi() return root } + private fun interestPayoutApi() { + val getCodeRequest = GetCodeRequest() + getCodeRequest.ProductName = getString(R.string.bajajFD) + getCodeRequest.Category = getString(R.string.category) + getCodeRequest.Language = getString(R.string.language) + getCodeRequest.InputValue = "" + stepOneBajajFDViewModel.getCode(getCodeRequest, token) + stepOneBajajFDViewModel.getCodeMutableData.observe(viewLifecycleOwner) { response -> + when (response) { + is Resource.Success -> { + Log.e("response", "-->$response") + val getCodeResponse: GetCodeResponse = + Gson().fromJson(response.data?.toString(), GetCodeResponse::class.java) + getCodeResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + listOfFrequency = getCodeResponse.Response.GetCodesList + if (listOfFrequency.isNotEmpty()) { + val adapter = ArrayAdapter( + activity as BajajFdMainActivity, + R.layout.spinner_dropdown, + listOfFrequency + ) + binding.spInterestPayout.setAdapter(adapter) + binding.spInterestPayout.setText( + adapter.getItem(listOfFrequency.size - 1)?.Value, + false + ) + binding.tvFrequency.text = + adapter.getItem(listOfFrequency.size - 1)?.Value + getRatesApi() + } + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + } + + + private fun minAmountApi() { + val getCodeRequest = GetCodeRequest() + getCodeRequest.ProductName = getString(R.string.bajajFD) + getCodeRequest.Category = getString(R.string.minAmountCategory) + getCodeRequest.Language = getString(R.string.language) + getCodeRequest.InputValue = "" + stepOneBajajFDViewModel.getMinAmount(getCodeRequest, token) + stepOneBajajFDViewModel.getMinAmountMutableData.observe(viewLifecycleOwner) { response -> + when (response) { + is Resource.Success -> { + Log.e("response", "-->$response") + val getCodeResponse: GetCodeResponse = + Gson().fromJson(response.data?.toString(), GetCodeResponse::class.java) + getCodeResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + listOfMinAmount = getCodeResponse.Response.GetCodesList + if (listOfMinAmount.isNotEmpty()) { + binding.txtMinAmount.text = getString(R.string.minAmount).plus( + listOfMinAmount[0].Value + ) + } + maxAmountApi() + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + } + + private fun maxAmountApi() { + val getCodeRequest = GetCodeRequest() + getCodeRequest.ProductName = getString(R.string.bajajFD) + getCodeRequest.Category = getString(R.string.MaxAmountCategory) + getCodeRequest.Language = getString(R.string.language) + getCodeRequest.InputValue = "" + stepOneBajajFDViewModel.getMaxAmount(getCodeRequest, token) + stepOneBajajFDViewModel.getMaxAmountMutableData.observe(viewLifecycleOwner) { response -> + when (response) { + is Resource.Success -> { + Log.e("response", "-->$response") + val getCodeResponse: GetCodeResponse = + Gson().fromJson(response.data?.toString(), GetCodeResponse::class.java) + getCodeResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + listOfMaxAmount = getCodeResponse.Response.GetCodesList + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + } + + private fun setUpRecyclerView() { recyclerViewDropDownAdapter = HorizontalRecyclerViewAdapter( @@ -199,7 +322,7 @@ class StepOneBajajFDFragment : Fragment() { private fun maturityAmountApi(tenure: Int, interest: Double) { if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { - if (binding.edtAmount.text.toString().length >= 4 && interest != 0.0 && tenure != 0) { + if (binding.edtAmount.text.toString().length >= 4 && interest != 0.0 && tenure != 0) { val maturityAmountRequest = GetMaturityAmountRequest() maturityAmountRequest.FDProvider = getString(R.string.bajaj) maturityAmountRequest.FDAmount = binding.edtAmount.text.toString().toInt() @@ -218,9 +341,10 @@ class StepOneBajajFDFragment : Fragment() { getMaturityAmountResponse.Response.StatusCode.let { code -> when (code) { 200 -> { - binding.tvMaturityAmount.text = getString(R.string.rs).plus( - getMaturityAmountResponse.Response.MaturityAmount.toString() - ) + binding.tvMaturityAmount.text = + getString(R.string.rs).plus(" ").plus( + getMaturityAmountResponse.Response.MaturityAmount.toString() + ) } // 650 -> refreshToken() else -> { @@ -252,20 +376,23 @@ class StepOneBajajFDFragment : Fragment() { binding.tlDepositAmount, getString(R.string.emptyAmount) ) - } else if (binding.edtAmount.text.toString().toDouble() < 5000) { + } else if (binding.edtAmount.text.toString() + .toDouble() < listOfMinAmount[0].Value.toDouble() + ) { commonErrorMethod( binding.edtAmount, binding.tlDepositAmount, getString(R.string.validMinAmount) ) - } else if (binding.edtAmount.text.toString().toDouble() > 50000000) { + } else if (binding.edtAmount.text.toString() + .toDouble() > listOfMaxAmount[0].Value.toDouble() + ) { commonErrorMethod( binding.edtAmount, binding.tlDepositAmount, getString(R.string.validMaxAmount) ) - } - else if (binding.spInterestPayout.text.isEmpty()) { + } else if (binding.spInterestPayout.text.isEmpty()) { Common.commonSpinnerErrorMethod( binding.spInterestPayout, binding.tlInterestPayout, @@ -320,6 +447,16 @@ class StepOneBajajFDFragment : Fragment() { listOfTenure ) binding.spTenure.setAdapter(tenureAdapter) + + binding.spTenure.setText( + tenureAdapter.getItem(0)?.Tenure.plus( + " Months | " + ).plus(tenureAdapter.getItem(0)?.ROI).plus(" %"), false + ) + tenure = tenureAdapter.getItem(0)?.Tenure.toString().toInt() + interest = tenureAdapter.getItem(0)?.ROI ?: 0.0 + binding.tvROI.text = + tenureAdapter.getItem(0)?.ROI.toString().plus(" %") setUpRecyclerView() } else { binding.ORLayout.visibility = View.GONE diff --git a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepTwoBajajFDFragment.kt b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepTwoBajajFDFragment.kt index e7bea72..d50176c 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepTwoBajajFDFragment.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepTwoBajajFDFragment.kt @@ -17,8 +17,7 @@ import com.google.gson.Gson import com.nivesh.production.bajajfd.R import com.nivesh.production.bajajfd.databinding.FragmentBajajfdStepTwoBinding import com.nivesh.production.bajajfd.interfaces.BajajFDInterface -import com.nivesh.production.bajajfd.model.PanCheckRequest -import com.nivesh.production.bajajfd.model.PanCheckResponse +import com.nivesh.production.bajajfd.model.* import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity import com.nivesh.production.bajajfd.util.Common import com.nivesh.production.bajajfd.util.Common.Companion.commonErrorMethod @@ -42,6 +41,13 @@ class StepTwoBajajFDFragment : Fragment() { private lateinit var rbBank: RadioButton private lateinit var rbPaymentMode: RadioButton + private lateinit var listOfTitle: List + private lateinit var listOfGender: List + private lateinit var listOfAnnualIncome: List + private lateinit var listOfRelationShip: List + private lateinit var listOfMaritalStatus: List + private lateinit var listOfOccupation: List + private lateinit var stepTwoBajajFDViewModel: StepTwoBajajFDViewModel companion object { @@ -65,6 +71,12 @@ class StepTwoBajajFDFragment : Fragment() { val root = binding.root stepTwoBajajFDViewModel = (activity as BajajFdMainActivity).stepTwoBajajFDViewModel + listOfTitle = ArrayList() + listOfGender = ArrayList() + listOfAnnualIncome = ArrayList() + listOfRelationShip = ArrayList() + listOfMaritalStatus = ArrayList() + listOfOccupation = ArrayList() // Personal Details binding.edtMobileNumber.filters = arrayOf(LengthFilter(10)) @@ -102,19 +114,9 @@ class StepTwoBajajFDFragment : Fragment() { } } }) - - val titleAdapter = ArrayAdapter( - activity as BajajFdMainActivity, - R.layout.spinner_dropdown, - resources.getStringArray( - R.array.title - ) - ) - binding.spTitle.setAdapter(titleAdapter) binding.spTitle.setOnItemClickListener { _, _, _, _ -> removeError(binding.tlTitle) } - binding.edtFirstName.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { @@ -151,19 +153,9 @@ class StepTwoBajajFDFragment : Fragment() { removeError(binding.tlLastName) } }) - - val genderAdapter = ArrayAdapter( - activity as BajajFdMainActivity, - R.layout.spinner_dropdown, - resources.getStringArray( - R.array.gender - ) - ) - binding.spGender.setAdapter(genderAdapter) binding.spGender.setOnItemClickListener { _, _, _, _ -> removeError(binding.tlGender) } - binding.edtEmail.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { @@ -176,18 +168,9 @@ class StepTwoBajajFDFragment : Fragment() { removeError(binding.tlEmail) } }) - binding.edtOccupation.addTextChangedListener(object : TextWatcher { - - override fun afterTextChanged(s: Editable?) { - } - - override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { - } - - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - removeError(binding.tlOccupation) - } - }) + binding.spOccupation.setOnItemClickListener { _, _, _, _ -> + removeError(binding.tlOccupation) + } binding.edtQualification.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { @@ -201,26 +184,11 @@ class StepTwoBajajFDFragment : Fragment() { } }) - val maritalAdapter = ArrayAdapter( - activity as BajajFdMainActivity, - R.layout.spinner_dropdown, - resources.getStringArray( - R.array.maritalStatus - ) - ) - binding.spMarital.setAdapter(maritalAdapter) + binding.spMarital.setOnItemClickListener { _, _, _, _ -> removeError(binding.tlMarital) } - val relationShipAdapter = ArrayAdapter( - activity as BajajFdMainActivity, - R.layout.spinner_dropdown, - resources.getStringArray( - R.array.maritalStatus - ) - ) - binding.spRelation.setAdapter(relationShipAdapter) binding.spRelation.setOnItemClickListener { _, _, _, _ -> removeError(binding.tlRelation) } @@ -261,7 +229,7 @@ class StepTwoBajajFDFragment : Fragment() { removeError(binding.tlAddressLine2) } }) - binding.edtState.addTextChangedListener(object : TextWatcher { + binding.edtAddressLine3.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { } @@ -270,21 +238,16 @@ class StepTwoBajajFDFragment : Fragment() { } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - removeError(binding.tlState) + removeError(binding.tlAddressLine3) } }) - binding.edtCity.addTextChangedListener(object : TextWatcher { - override fun afterTextChanged(s: Editable?) { - } - - override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { - } - - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - removeError(binding.tlCity) - } - }) + binding.spState.setOnItemClickListener { _, _, _, _ -> + removeError(binding.tlState) + } + binding.spCity.setOnItemClickListener { _, _, _, _ -> + removeError(binding.tlCity) + } binding.edtPinCode.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { @@ -299,11 +262,9 @@ class StepTwoBajajFDFragment : Fragment() { }) // Nominee Details - binding.spNomineeTitle.setAdapter(titleAdapter) binding.spNomineeTitle.setOnItemClickListener { _, _, _, _ -> binding.tlNomineeTitle.error = null } - binding.edtNomineeFirstName.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { @@ -340,12 +301,9 @@ class StepTwoBajajFDFragment : Fragment() { removeError(binding.tlNomineeLastName) } }) - binding.edtNomineeDOB.setOnClickListener { removeError(binding.tlNomineeDOB) } - - binding.spNomineeRelation.setAdapter(relationShipAdapter) binding.spNomineeRelation.setOnItemClickListener { _, _, _, _ -> removeError(binding.tlNomineeRelation) } @@ -379,12 +337,9 @@ class StepTwoBajajFDFragment : Fragment() { removeError(binding.tlGuardianAge) } }) - - binding.spGuardianRelation.setAdapter(relationShipAdapter) binding.spGuardianRelation.setOnItemClickListener { _, _, _, _ -> removeError(binding.tlGuardianRelation) } - binding.edtGuardianAddress.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { @@ -479,7 +434,6 @@ class StepTwoBajajFDFragment : Fragment() { binding.llPersonalDetail.visibility = View.VISIBLE } } - binding.tvNomineeDetails.setOnClickListener { if (binding.llNomineeDetail.visibility == View.VISIBLE) { binding.llNomineeDetail.visibility = View.GONE @@ -487,7 +441,6 @@ class StepTwoBajajFDFragment : Fragment() { binding.llNomineeDetail.visibility = View.VISIBLE } } - binding.tvBankDetails.setOnClickListener { if (binding.llBankDetails.visibility == View.VISIBLE) { binding.llBankDetails.visibility = View.GONE @@ -496,6 +449,12 @@ class StepTwoBajajFDFragment : Fragment() { } } + titleApi() + genderApi() + relationShipApi() + maritalStatusApi() + occupationApi() + annualIncomeApi() binding.btnNext.setOnClickListener { if (validation()) { // Applicant Details @@ -516,7 +475,7 @@ class StepTwoBajajFDFragment : Fragment() { (activity as BajajFdMainActivity).applicantDetails.ApplicantMobile = binding.edtMobileNumber.text.toString() (activity as BajajFdMainActivity).applicantDetails.ApplicantOccupation = - binding.edtOccupation.text.toString() + binding.spOccupation.text.toString() (activity as BajajFdMainActivity).applicantDetails.ApplicantQualification = binding.edtQualification.text.toString() (activity as BajajFdMainActivity).applicantDetails.ApplicantMaritalStatus = @@ -527,11 +486,11 @@ class StepTwoBajajFDFragment : Fragment() { binding.edtAddressLine1.text.toString() (activity as BajajFdMainActivity).applicantDetails.ApplicantAddress2 = binding.edtAddressLine2.text.toString() - (activity as BajajFdMainActivity).applicantDetails.ApplicantAddress3 = "" + (activity as BajajFdMainActivity).applicantDetails.ApplicantAddress3 = binding.edtAddressLine3.text.toString() (activity as BajajFdMainActivity).applicantDetails.ApplicantCity = - binding.edtCity.text.toString() + binding.spCity.text.toString() (activity as BajajFdMainActivity).applicantDetails.ApplicantState = - binding.edtState.text.toString() + binding.spState.text.toString() (activity as BajajFdMainActivity).applicantDetails.ApplicantCountry = "India" (activity as BajajFdMainActivity).applicantDetails.ApplicantPincode = binding.edtPinCode.text.toString().toInt() @@ -610,6 +569,7 @@ class StepTwoBajajFDFragment : Fragment() { binding.btnBack.setOnClickListener { (activity as BajajFdMainActivity).binding.viewPager.currentItem = 0 } + return root } @@ -672,6 +632,330 @@ class StepTwoBajajFDFragment : Fragment() { } + private fun titleApi() { + if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { + val getCodeRequest = GetCodeRequest() + getCodeRequest.ProductName = getString(R.string.bajajFD) + getCodeRequest.Category = getString(R.string.salutationCategory) + getCodeRequest.Language = getString(R.string.language) + getCodeRequest.InputValue = "" + stepTwoBajajFDViewModel.titleApi(getCodeRequest, token) + stepTwoBajajFDViewModel.getTitleMutableData.observe(viewLifecycleOwner) { response -> + when (response) { + is Resource.Success -> { + Log.e("response", "-->$response") + val getCodeResponse: GetCodeResponse = + Gson().fromJson(response.data?.toString(), GetCodeResponse::class.java) + getCodeResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + listOfTitle = getCodeResponse.Response.GetCodesList + if (listOfTitle.isNotEmpty()) { + val adapter = ArrayAdapter( + activity as BajajFdMainActivity, + R.layout.spinner_dropdown, + listOfTitle + ) + binding.spTitle.setAdapter(adapter) + binding.spTitle.setText( + adapter.getItem(0)?.Value, + false + ) + + binding.spNomineeTitle.setAdapter(adapter) + binding.spNomineeTitle.setText( + adapter.getItem(0)?.Value, + false + ) + } + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + + } + } + private fun genderApi() { + if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { + val getCodeRequest = GetCodeRequest() + getCodeRequest.ProductName = getString(R.string.bajajFD) + getCodeRequest.Category = getString(R.string.genderCategory) + getCodeRequest.Language = getString(R.string.language) + getCodeRequest.InputValue = "" + stepTwoBajajFDViewModel.genderApi(getCodeRequest, token) + stepTwoBajajFDViewModel.getGenderMutableData.observe(viewLifecycleOwner) { response -> + when (response) { + is Resource.Success -> { + Log.e("response", "-->$response") + val getCodeResponse: GetCodeResponse = + Gson().fromJson(response.data?.toString(), GetCodeResponse::class.java) + getCodeResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + listOfGender = getCodeResponse.Response.GetCodesList + if (listOfGender.isNotEmpty()) { + val adapter = ArrayAdapter( + activity as BajajFdMainActivity, + R.layout.spinner_dropdown, + listOfGender + ) + binding.spGender.setAdapter(adapter) + binding.spGender.setText( + adapter.getItem(0)?.Value, + false + ) + } + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + + } + + } + private fun relationShipApi() { + if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { + val getCodeRequest = GetCodeRequest() + getCodeRequest.ProductName = getString(R.string.bajajFD) + getCodeRequest.Category = getString(R.string.relationshipCategory) + getCodeRequest.Language = getString(R.string.language) + getCodeRequest.InputValue = "" + stepTwoBajajFDViewModel.relationShipApi(getCodeRequest, token) + stepTwoBajajFDViewModel.getrelationShipMutableData.observe(viewLifecycleOwner) { response -> + when (response) { + is Resource.Success -> { + Log.e("response", "-->$response") + val getCodeResponse: GetCodeResponse = + Gson().fromJson(response.data?.toString(), GetCodeResponse::class.java) + getCodeResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + listOfRelationShip = getCodeResponse.Response.GetCodesList + if (listOfGender.isNotEmpty()) { + val adapter = ArrayAdapter( + activity as BajajFdMainActivity, + R.layout.spinner_dropdown, + listOfRelationShip + ) + binding.spRelation.setAdapter(adapter) + binding.spRelation.setText( + adapter.getItem(0)?.Value, + false + ) + + binding.spNomineeRelation.setAdapter(adapter) + binding.spNomineeRelation.setText( + adapter.getItem(0)?.Value, + false + ) + + binding.spGuardianRelation.setAdapter(adapter) + binding.spGuardianRelation.setText( + adapter.getItem(0)?.Value, + false + ) + } + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + + } + + } + private fun maritalStatusApi() { + if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { + val getCodeRequest = GetCodeRequest() + getCodeRequest.ProductName = getString(R.string.bajajFD) + getCodeRequest.Category = getString(R.string.maritalCategory) + getCodeRequest.Language = getString(R.string.language) + getCodeRequest.InputValue = "" + stepTwoBajajFDViewModel.maritalStatusApi(getCodeRequest, token) + stepTwoBajajFDViewModel.getMaritalStatusMutableData.observe(viewLifecycleOwner) { response -> + when (response) { + is Resource.Success -> { + Log.e("response", "-->$response") + val getCodeResponse: GetCodeResponse = + Gson().fromJson(response.data?.toString(), GetCodeResponse::class.java) + getCodeResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + listOfMaritalStatus = getCodeResponse.Response.GetCodesList + if (listOfMaritalStatus.isNotEmpty()) { + val adapter = ArrayAdapter( + activity as BajajFdMainActivity, + R.layout.spinner_dropdown, + listOfMaritalStatus + ) + binding.spMarital.setAdapter(adapter) + binding.spMarital.setText( + adapter.getItem(0)?.Value, + false + ) + } + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + + } + + } + private fun occupationApi() { + if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { + val getCodeRequest = GetCodeRequest() + getCodeRequest.ProductName = getString(R.string.bajajFD) + getCodeRequest.Category = getString(R.string.occupationCategory) + getCodeRequest.Language = getString(R.string.language) + getCodeRequest.InputValue = "" + stepTwoBajajFDViewModel.occupationApi(getCodeRequest, token) + stepTwoBajajFDViewModel.getOccupationMutableData.observe(viewLifecycleOwner) { response -> + when (response) { + is Resource.Success -> { + Log.e("response", "-->$response") + val getCodeResponse: GetCodeResponse = + Gson().fromJson(response.data?.toString(), GetCodeResponse::class.java) + getCodeResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + listOfOccupation = getCodeResponse.Response.GetCodesList + if (listOfOccupation.isNotEmpty()) { + val adapter = ArrayAdapter( + activity as BajajFdMainActivity, + R.layout.spinner_dropdown, + listOfOccupation + ) + binding.spOccupation.setAdapter(adapter) + binding.spOccupation.setText( + adapter.getItem(0)?.Value, + false + ) + } + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + + } + + } + private fun annualIncomeApi() { + if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { + val getCodeRequest = GetCodeRequest() + getCodeRequest.ProductName = getString(R.string.bajajFD) + getCodeRequest.Category = getString(R.string.annualIncome) + getCodeRequest.Language = getString(R.string.language) + getCodeRequest.InputValue = "" + stepTwoBajajFDViewModel.annualIncomeApi(getCodeRequest, token) + stepTwoBajajFDViewModel.getAnnualIncomeMutableData.observe(viewLifecycleOwner) { response -> + when (response) { + is Resource.Success -> { + Log.e("response", "-->$response") + val getCodeResponse: GetCodeResponse = + Gson().fromJson(response.data?.toString(), GetCodeResponse::class.java) + getCodeResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + listOfAnnualIncome = getCodeResponse.Response.GetCodesList + if (listOfGender.isNotEmpty()) { + val adapter = ArrayAdapter( + activity as BajajFdMainActivity, + R.layout.spinner_dropdown, + listOfAnnualIncome + ) + binding.spIncome.setAdapter(adapter) + binding.spIncome.setText( + adapter.getItem(0)?.Value, + false + ) + } + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + + } + + } + // validations private fun validation(): Boolean { return if (binding.edtMobileNumber.text.toString().isEmpty()) { // EditText @@ -680,17 +964,17 @@ class StepTwoBajajFDFragment : Fragment() { binding.tlMobileNumber, getString(R.string.emptyMobileNumber) ) - } else if (binding.edtMobileNumber.text?.length != 10) { // EditText + } else if (!isIndianMobileNo(binding.edtMobileNumber.text.toString())) { // EditText commonErrorMethod( binding.edtMobileNumber, binding.tlMobileNumber, - getString(R.string.inValidMobileNumber) + getString(R.string.inValidIndianMobileNumber) ) - } else if (!isIndianMobileNo(binding.edtMobileNumber.text.toString())) { // EditText + } else if (binding.edtMobileNumber.text?.length != 10) { // EditText commonErrorMethod( binding.edtMobileNumber, binding.tlMobileNumber, - getString(R.string.inValidIndianMobileNumber) + getString(R.string.inValidMobileNumber) ) } else if (binding.edtDOB.text.toString().isEmpty()) { // EditText commonErrorMethod(binding.edtDOB, binding.tlDOB, getString(R.string.emptyDOB)) @@ -758,9 +1042,9 @@ class StepTwoBajajFDFragment : Fragment() { commonErrorMethod(binding.edtEmail, binding.tlEmail, getString(R.string.emptyEmail)) } else if (isValidEmail(binding.edtEmail.text.toString())) { // EditText commonErrorMethod(binding.edtEmail, binding.tlEmail, getString(R.string.validEmail)) - } else if (binding.edtOccupation.text.toString().isEmpty()) { // EditText - commonErrorMethod( - binding.edtOccupation, + } else if (binding.spOccupation.text.toString().isEmpty()) { // EditText + commonSpinnerErrorMethod( + binding.spOccupation, binding.tlOccupation, getString(R.string.emptyOccupation) ) @@ -800,10 +1084,16 @@ class StepTwoBajajFDFragment : Fragment() { binding.tlAddressLine2, getString(R.string.emptyAddressLine2) ) - } else if (binding.edtState.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtState, binding.tlState, getString(R.string.emptyState)) - } else if (binding.edtCity.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtCity, binding.tlCity, getString(R.string.emptyCity)) + }else if (binding.edtAddressLine3.text.toString().isEmpty()) { // EditText + commonErrorMethod( + binding.edtAddressLine3, + binding.tlAddressLine3, + getString(R.string.emptyAddressLine3) + ) + } else if (binding.spState.text.toString().isEmpty()) { // EditText + commonSpinnerErrorMethod(binding.spState, binding.tlState, getString(R.string.emptyState)) + } else if (binding.spCity.text.toString().isEmpty()) { // EditText + commonSpinnerErrorMethod(binding.spCity, binding.tlCity, getString(R.string.emptyCity)) } else if (binding.edtPinCode.text.toString().isEmpty()) { // EditText commonErrorMethod( binding.edtPinCode, diff --git a/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt b/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt index 4d665fa..500ca87 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/util/Common.kt @@ -14,6 +14,7 @@ import com.google.android.material.textfield.MaterialAutoCompleteTextView import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout import com.nivesh.production.bajajfd.BajajApplication +import com.nivesh.production.bajajfd.R import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity import java.util.regex.Matcher import java.util.regex.Pattern @@ -91,14 +92,19 @@ class Common { fun removeError(textInputLayout: TextInputLayout) { if (textInputLayout.error != null) { textInputLayout.error = null + if(textInputLayout.isErrorEnabled){ + textInputLayout.isErrorEnabled = false; + } } } fun showDialogValidation(activity: Activity?, message: CharSequence?) { val builder = AlertDialog.Builder(activity) builder.setMessage(message) - builder.setPositiveButton("OK") { dialogInterface, _ -> - dialogInterface.dismiss() + if (activity != null) { + builder.setPositiveButton(activity.getString(R.string.ok)) { dialogInterface, _ -> + dialogInterface.dismiss() + } } builder.show() } @@ -106,11 +112,13 @@ class Common { fun showDialogWithTwoButtons(activity: Activity?, message: CharSequence?) { val builder = AlertDialog.Builder(activity) builder.setMessage(message) - builder.setPositiveButton("OK") { dialogInterface, _ -> - dialogInterface.dismiss() - } - builder.setNegativeButton("Cancel") { dialogInterface, _ -> - dialogInterface.dismiss() + if (activity != null) { + builder.setPositiveButton(activity.getString(R.string.ok)) { dialogInterface, _ -> + dialogInterface.dismiss() + } + builder.setNegativeButton(activity.getString(R.string.cancel)) { dialogInterface, _ -> + dialogInterface.dismiss() + } } builder.show() } @@ -139,7 +147,7 @@ class Common { strMessage: String ): Boolean { inputText.requestFocus() - inputError.error = strMessage + inputError.error = strMessage return false } diff --git a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt index d0d622a..c1f38a1 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/BajajFDViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.google.gson.JsonObject +import com.nivesh.production.bajajfd.model.FDStepsCountRequest import com.nivesh.production.bajajfd.model.GetCodeRequest import com.nivesh.production.bajajfd.repositories.MainRepository import com.nivesh.production.bajajfd.util.Resource @@ -20,6 +21,15 @@ class BajajFDViewModel(private val mainRepository: MainRepository) : ViewModel() getRatesMutableData.postValue(handleRatesResponse(response)) } + val getStepsCountMutableData: MutableLiveData> = MutableLiveData() + fun getStepsCount(requestBody: FDStepsCountRequest, token : String) = viewModelScope.launch { + getStepsCountMutableData.postValue(Resource.Loading()) + val response = mainRepository.getStepsCountResponse(requestBody, token) + getStepsCountMutableData.postValue(handleRatesResponse(response)) + } + + + private fun handleRatesResponse(response: retrofit2.Response): Resource { if (response.isSuccessful) { response.body()?.let { resultResponse -> diff --git a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneBajajFDViewModel.kt b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneBajajFDViewModel.kt index 29eca04..56f311d 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneBajajFDViewModel.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneBajajFDViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.google.gson.JsonObject +import com.nivesh.production.bajajfd.model.GetCodeRequest import com.nivesh.production.bajajfd.model.GetMaturityAmountRequest import com.nivesh.production.bajajfd.model.GetRatesRequest import com.nivesh.production.bajajfd.repositories.MainRepository @@ -13,21 +14,43 @@ import kotlinx.coroutines.launch class StepOneBajajFDViewModel(private val mainRepository: MainRepository) : ViewModel() { // TODO: Implement the ViewModel - val getRatesMutableData: MutableLiveData> = MutableLiveData() - val getMaturityAmountMutableData: MutableLiveData> = MutableLiveData() + val getCodeMutableData: MutableLiveData> = MutableLiveData() + + fun getCode(requestBody: GetCodeRequest, token : String) = viewModelScope.launch { + getCodeMutableData.postValue(Resource.Loading()) + val response = mainRepository.getCodesResponse(requestBody, token) + getCodeMutableData.postValue(handleRatesResponse(response)) + } + + val getRatesMutableData: MutableLiveData> = MutableLiveData() fun getRates(getRatesRequest: GetRatesRequest, token: String) = viewModelScope.launch { getRatesMutableData.postValue(Resource.Loading()) val response = mainRepository.getRatesResponse(getRatesRequest, token) getRatesMutableData.postValue(handleRatesResponse(response)) } + val getMaturityAmountMutableData: MutableLiveData> = MutableLiveData() fun getMaturityAmount(requestBody: GetMaturityAmountRequest) = viewModelScope.launch { getMaturityAmountMutableData.postValue(Resource.Loading()) val response = mainRepository.createCalculateFDMaturityAmount(requestBody, token) getMaturityAmountMutableData.postValue(handleRatesResponse(response)) } + val getMinAmountMutableData: MutableLiveData> = MutableLiveData() + fun getMinAmount(requestBody: GetCodeRequest, token : String) = viewModelScope.launch { + getMinAmountMutableData.postValue(Resource.Loading()) + val response = mainRepository.getCodesResponse(requestBody, token) + getMinAmountMutableData.postValue(handleRatesResponse(response)) + } + + val getMaxAmountMutableData: MutableLiveData> = MutableLiveData() + fun getMaxAmount(requestBody: GetCodeRequest, token : String) = viewModelScope.launch { + getMaxAmountMutableData.postValue(Resource.Loading()) + val response = mainRepository.getCodesResponse(requestBody, token) + getMaxAmountMutableData.postValue(handleRatesResponse(response)) + } + private fun handleRatesResponse(response: retrofit2.Response): Resource { if (response.isSuccessful) { response.body()?.let { resultResponse -> diff --git a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepTwoBajajFDViewModel.kt b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepTwoBajajFDViewModel.kt index 0719aaa..c3d379c 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepTwoBajajFDViewModel.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepTwoBajajFDViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.google.gson.JsonObject +import com.nivesh.production.bajajfd.model.GetCodeRequest import com.nivesh.production.bajajfd.model.GetRatesRequest import com.nivesh.production.bajajfd.model.PanCheckRequest import com.nivesh.production.bajajfd.repositories.MainRepository @@ -45,4 +46,46 @@ class StepTwoBajajFDViewModel(private val mainRepository: MainRepository) : View getPanCheckMutableData.postValue(handleRatesResponse(response)) } + val getTitleMutableData: MutableLiveData> = MutableLiveData() + fun titleApi(getCodeRequest: GetCodeRequest, token: String) = viewModelScope.launch { + getTitleMutableData.postValue(Resource.Loading()) + val response = mainRepository.titleCheck(getCodeRequest, token) + getTitleMutableData.postValue(handleRatesResponse(response)) + } + + val getGenderMutableData: MutableLiveData> = MutableLiveData() + fun genderApi(getCodeRequest: GetCodeRequest, token: String) = viewModelScope.launch { + getGenderMutableData.postValue(Resource.Loading()) + val response = mainRepository.genderCheck(getCodeRequest, token) + getGenderMutableData.postValue(handleRatesResponse(response)) + } + + val getAnnualIncomeMutableData: MutableLiveData> = MutableLiveData() + fun annualIncomeApi(getCodeRequest: GetCodeRequest, token: String) = viewModelScope.launch { + getAnnualIncomeMutableData.postValue(Resource.Loading()) + val response = mainRepository.annualIncomeCheck(getCodeRequest, token) + getAnnualIncomeMutableData.postValue(handleRatesResponse(response)) + } + + val getrelationShipMutableData: MutableLiveData> = MutableLiveData() + fun relationShipApi(getCodeRequest: GetCodeRequest, token: String) = viewModelScope.launch { + getrelationShipMutableData.postValue(Resource.Loading()) + val response = mainRepository.relationShipCheck(getCodeRequest, token) + getrelationShipMutableData.postValue(handleRatesResponse(response)) + } + + val getMaritalStatusMutableData: MutableLiveData> = MutableLiveData() + fun maritalStatusApi(getCodeRequest: GetCodeRequest, token: String) = viewModelScope.launch { + getMaritalStatusMutableData.postValue(Resource.Loading()) + val response = mainRepository.maritalStatusCheck(getCodeRequest, token) + getMaritalStatusMutableData.postValue(handleRatesResponse(response)) + } + + val getOccupationMutableData: MutableLiveData> = MutableLiveData() + fun occupationApi(getCodeRequest: GetCodeRequest, token: String) = viewModelScope.launch { + getOccupationMutableData.postValue(Resource.Loading()) + val response = mainRepository.occupationCheck(getCodeRequest, token) + getOccupationMutableData.postValue(handleRatesResponse(response)) + } + } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_bajajfd_step_one.xml b/app/src/main/res/layout/fragment_bajajfd_step_one.xml index 8011512..7d1b421 100644 --- a/app/src/main/res/layout/fragment_bajajfd_step_one.xml +++ b/app/src/main/res/layout/fragment_bajajfd_step_one.xml @@ -5,6 +5,7 @@ android:id="@+id/constraintLayout" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_gravity="center_vertical" android:background="@color/NiveshColorAppBg" tool:context=".ui.fragment.StepTwoBajajFDFragment"> @@ -13,358 +14,279 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="@dimen/margin_80" - android:fillViewport="true" - android:padding="@dimen/margin_10" android:background="@color/NiveshColorAppBg" + android:fillViewport="true" + android:padding="@dimen/margin_5" + android:visibility="visible" app:layout_constraintBottom_toTopOf="@+id/btnNext" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> - + android:foreground="?android:attr/selectableItemBackground" + app:cardElevation="@dimen/margin_1" + app:cardUseCompatPadding="true"> - + android:orientation="vertical" + android:paddingTop="@dimen/margin_10"> + + + + + android:orientation="vertical" + android:padding="@dimen/margin_10"> - - - + android:layout_margin="@dimen/margin_5" + android:hint="@string/investmentAmount"> - - - - - - - + android:drawableStart="@drawable/svg_rs" + android:inputType="number" + android:maxLength="12" + android:textColorHint="@color/greyColor2" + android:textSize="@dimen/text_size_14" /> - - - - - - - - - - - + - + + - - + tool:ignore="DuplicateSpeakableTextCheck,LabelFor,TextContrastCheck" /> + + - - - - - - - + android:padding="@dimen/margin_10" + android:background="@drawable/rounded_corner_with_line" + android:hint="@string/selectInterestTenure" + android:inputType="none" + android:labelFor="@+id/spInterestTenure" + android:textColorHint="@color/greyColor2" + android:textSize="@dimen/text_size_14" + tool:ignore="DuplicateSpeakableTextCheck,LabelFor,TextContrastCheck" /> + + + + + + + + - - - - - - - - - - - + - - - - + + + - + - + - + - - + + + + + + + + + + android:padding="@dimen/margin_15"> - + - - - - - + @@ -464,13 +382,13 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginTop="@dimen/margin_10" + android:layout_marginBottom="@dimen/margin_15" android:backgroundTint="@color/colorPrimary" android:text="@string/next" android:textColor="#FFFFFF" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintBottom_toBottomOf="parent" - android:layout_marginBottom="@dimen/margin_15" tool:ignore="TextContrastCheck" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_bajajfd_step_two.xml b/app/src/main/res/layout/fragment_bajajfd_step_two.xml index 1e27b1c..5b62d5a 100644 --- a/app/src/main/res/layout/fragment_bajajfd_step_two.xml +++ b/app/src/main/res/layout/fragment_bajajfd_step_two.xml @@ -114,6 +114,8 @@ android:id="@+id/edtMobileNumber" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="phone" android:maxEms="10" android:textSize="@dimen/text_size_14" /> @@ -132,6 +134,8 @@ android:id="@+id/edtDOB" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:drawableEnd="@drawable/svg_cal" android:inputType="date" android:textSize="@dimen/text_size_14" /> @@ -150,6 +154,8 @@ android:id="@+id/edtPANNumber" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:maxEms="10" android:textSize="@dimen/text_size_14" /> @@ -205,6 +211,8 @@ android:id="@+id/edtFirstName" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="40" android:textSize="@dimen/text_size_14" /> @@ -224,6 +232,8 @@ android:id="@+id/edtMiddleName" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="40" android:textSize="@dimen/text_size_14" /> @@ -244,24 +254,14 @@ android:id="@+id/edtLastName" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="40" android:textSize="@dimen/text_size_14" /> - - - - - - - - - - - - @@ -308,19 +310,43 @@ + app:hintEnabled="false" + android:layout_margin="@dimen/margin_5"> - + android:background="@drawable/rounded_corner_with_line" + android:hint="@string/enterOccupation" + android:inputType="none" + android:labelFor="@+id/spInterestPayout" + android:textColorHint="#757575" + android:textSize="@dimen/text_size_14" /> + + + + + + @@ -336,6 +362,8 @@ android:id="@+id/edtQualification" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="60" android:textSize="@dimen/text_size_14" /> @@ -409,6 +437,8 @@ android:id="@+id/edtRelationName" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="100" android:textSize="@dimen/text_size_14" /> @@ -427,6 +457,8 @@ android:id="@+id/edtAddressLine1" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="100" android:textSize="@dimen/text_size_14" /> @@ -445,6 +477,8 @@ android:id="@+id/edtAddressLine2" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="100" android:textSize="@dimen/text_size_14" /> @@ -452,37 +486,64 @@ + android:hint="@string/enterAddress2"> + + app:hintEnabled="false"> - + + + + + + @@ -500,6 +561,8 @@ android:id="@+id/edtPinCode" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:textSize="@dimen/text_size_14" android:maxEms="6" /> @@ -570,6 +633,8 @@ android:id="@+id/edtNomineeFirstName" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="100" android:textSize="@dimen/text_size_14" /> @@ -588,6 +653,8 @@ android:id="@+id/edtNomineeMiddleName" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="100" android:textSize="@dimen/text_size_14" /> @@ -606,6 +673,8 @@ android:id="@+id/edtNomineeLastName" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="100" android:textSize="@dimen/text_size_14" /> @@ -625,6 +694,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:drawableEnd="@drawable/svg_cal" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="date" android:textSize="@dimen/text_size_14" /> @@ -677,6 +748,8 @@ android:id="@+id/edtGuardianName" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="60" android:textSize="@dimen/text_size_14" /> @@ -695,6 +768,8 @@ android:id="@+id/edtGuardianAge" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="60" android:textSize="@dimen/text_size_14" /> @@ -740,6 +815,8 @@ android:id="@+id/edtGuardianAddress" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="60" android:textSize="@dimen/text_size_14" /> @@ -758,6 +835,8 @@ android:id="@+id/edtGuardianPinCode" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:inputType="text" android:maxEms="60" android:textSize="@dimen/text_size_14" /> @@ -833,6 +912,8 @@ android:id="@+id/edtIFSC" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:textSize="@dimen/text_size_14" /> @@ -849,6 +930,8 @@ android:id="@+id/edtAccountNumber" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:textSize="@dimen/text_size_14"/> @@ -865,6 +948,8 @@ android:id="@+id/edtBankName" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:textSize="@dimen/text_size_14" /> @@ -881,6 +966,8 @@ android:id="@+id/edtBankBranch" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingTop="@dimen/margin_15" + android:paddingBottom="@dimen/margin_15" android:textSize="@dimen/text_size_14" /> diff --git a/app/src/main/res/layout/row_dropdown.xml b/app/src/main/res/layout/row_dropdown.xml index 65e2592..b2cb3d3 100644 --- a/app/src/main/res/layout/row_dropdown.xml +++ b/app/src/main/res/layout/row_dropdown.xml @@ -2,20 +2,22 @@ + android:paddingStart="0dp" + android:orientation="vertical"> diff --git a/app/src/main/res/layout/spinner_dropdown.xml b/app/src/main/res/layout/spinner_dropdown.xml index 2d5bbdc..599a9bc 100644 --- a/app/src/main/res/layout/spinner_dropdown.xml +++ b/app/src/main/res/layout/spinner_dropdown.xml @@ -2,7 +2,10 @@ Select Interest Payout Select Investment Tenure Up to 0.25% p.a for - Senior Citizens, 60+ + Up to 0.25% p.a for Senior Citizens, 60+ Maturity Instructions: Automatically credit to my bank account Automatically renew principal amount @@ -32,7 +32,7 @@ Cumulative Regular Interest Payment: Maturity Amount: - min amount : Rs 5,000 + min amount : Rs OR, enter tenure in months 1 Year 2 Years @@ -67,13 +67,15 @@ Enter Last Name Select Gender Enter Email Address - Enter Occupation + Select Occupation Enter Qualification Select Marital Status Select Relationship Relation Name - Enter Address 1 - Enter Address 2 + Enter Address Line 1 + Enter Address Line 2 + Enter Address Line 3 + State City PinCode @@ -140,6 +142,7 @@ Please enter valid email address Please enter address 1 Please enter address 2 + Please enter address 3 Please enter area Please select city @@ -205,4 +208,19 @@ Senior Citizen Non Senior Citizen + + MINAmount + MAXAmount + OK + Cancel + Salutation + Gender + MaritalStatus + Occupation + NomineeRelationship + Select Income + Select State + Select City + AnnualIncome + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8d271b1..ec6a357 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,7 +17,7 @@ Select Interest Payout Select Investment Tenure Up to 0.25% p.a for - Senior Citizens, 60+ + Up to 0.25% p.a for Senior Citizens, 60+ Maturity Instructions: Automatically credit to my bank account Automatically renew principal amount @@ -31,7 +31,7 @@ Cumulative Regular Interest Payment: Maturity Amount: - min amount : Rs 5,000 + min amount : Rs OR, enter tenure in months 1 Year 2 Years @@ -67,13 +67,15 @@ Enter Last Name Select Gender Enter Email Address - Enter Occupation + Select Occupation Enter Qualification Select Marital Status Select Relationship Relation Name - Enter Address 1 - Enter Address 2 + Enter Address Line 1 + Enter Address Line 2 + Enter Address Line 3 + State City PinCode @@ -145,6 +147,7 @@ Please enter address 1 Please enter address 2 + Please enter address 3 Please enter area Please select city @@ -214,21 +217,36 @@ Non Senior Citizen - - On Maturity - Monthly - Quarterly - Half Yearly - Yearly - - - - On Maturity - Monthly - Quarterly - Half Yearly - Yearly - + MINAmount + MAXAmount + OK + Cancel + Salutation + Gender + MaritalStatus + Occupation + NomineeRelationship + Select Income + Select State + Select City + AnnualIncome + + + + + + + + + + + + + + + + + Aadhaar Card @@ -237,29 +255,30 @@ Driving Licence - - Mr - Mrs - - - - Male - Female - - - - Marital Status - Married - Unmarried - - - Interest Payout - On Maturity - Monthly - Quarterly - Half Yearly - Yearly - + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file