diff --git a/app/src/main/java/com/nivesh/production/bajajfd/adapter/HorizontalRecyclerViewAdapter.kt b/app/src/main/java/com/nivesh/production/bajajfd/adapter/HorizontalRecyclerViewAdapter.kt new file mode 100644 index 0000000..133528b --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/adapter/HorizontalRecyclerViewAdapter.kt @@ -0,0 +1,119 @@ +package com.nivesh.production.bajajfd.adapter + +import ROIDataList +import android.annotation.SuppressLint +import android.app.Activity +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat +import androidx.recyclerview.widget.RecyclerView +import com.nivesh.production.bajajfd.R +import com.nivesh.production.bajajfd.adapter.HorizontalRecyclerViewAdapter.HistoryAdapterViewHolder2 +import com.nivesh.production.bajajfd.interfaces.OnClickListener + + +class HorizontalRecyclerViewAdapter( + private val activity: Activity, + dropdownList: MutableList, + onClickListener: OnClickListener +) : RecyclerView.Adapter() { + private val dropdownList: List + private var rowIndex = -1 + private var onClickListener: OnClickListener + + inner class HistoryAdapterViewHolder2(view: View?) : RecyclerView.ViewHolder( + view!! + ) { + var txtYear: TextView = itemView.findViewById(R.id.txtYear) + var txtInterestRate: TextView = itemView.findViewById(R.id.txtInterestRate) + var rlParent: LinearLayout = itemView.findViewById(R.id.rlParent) + + } + + init { + this.dropdownList = dropdownList + this.onClickListener = onClickListener + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HistoryAdapterViewHolder2 { + val itemView = + LayoutInflater.from(parent.context).inflate(R.layout.row_dropdown, parent, false) + return HistoryAdapterViewHolder2(itemView) + } + + override fun onBindViewHolder( + holder: HistoryAdapterViewHolder2, + @SuppressLint("RecyclerView") position: Int + ) { + if (dropdownList.isNotEmpty()) { + val roiDataList: ROIDataList = dropdownList[position] + getYear(holder.txtYear, roiDataList, holder) + holder.txtInterestRate.text = roiDataList.ROI.toString().plus(" % ") + holder.rlParent.setOnClickListener { + rowIndex = position + notifyDataSetChanged() + } + if (rowIndex == position) { + onClickListener.onclickCategory(position) + holder.txtYear.background = + ResourcesCompat.getDrawable( + activity.resources, + R.drawable.rounded_corner_green_fill, + null + ) + holder.txtYear.setTextColor(ContextCompat.getColor(activity, R.color.white)) + } else { + holder.txtYear.background = + ResourcesCompat.getDrawable( + activity.resources, + R.drawable.rounded_corner_with_line, + null + ) + holder.txtYear.setTextColor( + ContextCompat.getColor(activity, R.color.black) + ) + } + } + } + + private fun getYear(txtYear: TextView, option: ROIDataList, holder: HistoryAdapterViewHolder2) { + when (option.Tenure) { + "12" -> { + holder.rlParent.visibility = View.VISIBLE + txtYear.text = activity.getString(R.string.OneYear) + } + "24" -> { + holder.rlParent.visibility = View.VISIBLE + txtYear.text = activity.getString(R.string.TwoYears) + } + "36" -> { + holder.rlParent.visibility = View.VISIBLE + txtYear.text = activity.getString(R.string.ThreeYears) + } + "48" -> { + holder.rlParent.visibility = View.VISIBLE + txtYear.text = activity.getString(R.string.FourYears) + } + "60" -> { + holder.rlParent.visibility = View.VISIBLE + txtYear.text = activity.getString(R.string.FiveYears) + } + else -> { + holder.rlParent.visibility = View.GONE + } + + } + } + + override fun getItemCount(): Int { + return dropdownList.size + } + + override fun getItemViewType(position: Int): Int { + return position + } +} \ No newline at end of file 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 f7e460a..ad4fbc2 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,6 +1,8 @@ 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 okhttp3.RequestBody import retrofit2.Response @@ -85,6 +87,13 @@ interface ApiInterface { "token: 636F8F63-06C4-4D95-8562-392B34025FB0", "Content-Type: application/json", "charset: UTF-8" ) - suspend fun getCodes(@Body requestBody: RequestBody): Response + suspend fun getCodes(@Body requestBody: GetCodeRequest): Response // "token: 636F8F63-06C4-4D95-8562-392B34025FB0"; + + @POST("CalculateFDMaturityAmount") + @Headers( + "token: 636F8F63-06C4-4D95-8562-392B34025FB0", + "Content-Type: application/json", "charset: UTF-8" + ) + suspend fun getCalculateFDMaturityAmount(@Body requestBody: GetMaturityAmountRequest): Response } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/interfaces/OnClickListener.java b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/OnClickListener.java new file mode 100644 index 0000000..2ca2e60 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/interfaces/OnClickListener.java @@ -0,0 +1,5 @@ +package com.nivesh.production.bajajfd.interfaces; + +public interface OnClickListener { + void onclickCategory(int position); +} diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/GetCalculateMaturityAmountResponse.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/GetCalculateMaturityAmountResponse.kt new file mode 100644 index 0000000..9f98c13 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/GetCalculateMaturityAmountResponse.kt @@ -0,0 +1,5 @@ +package com.nivesh.production.bajajfd.model + +data class GetCalculateMaturityAmountResponse( + val Response: ResponseXX +) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/GetMaturityAmountRequest.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/GetMaturityAmountRequest.kt new file mode 100644 index 0000000..9d0112f --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/GetMaturityAmountRequest.kt @@ -0,0 +1,9 @@ +package com.nivesh.production.bajajfd.model + +data class GetMaturityAmountRequest( + var FDAmount: Int? = 0, + var FDProvider: String? = "", + var Frequency: String? = "", + var Interest: Double? = 0.0, + var Tenure: Int? = 0 +) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/ROIDataList.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/ROIDataList.kt index b7294aa..c568b3c 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/model/ROIDataList.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/ROIDataList.kt @@ -1,4 +1,4 @@ -data class ROIDatalist( +data class ROIDataList( val Frequency: String, val Provider: String, val ROI: Double, diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/Response.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/Response.kt index f135608..64ebb11 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/model/Response.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/Response.kt @@ -1,7 +1,7 @@ data class Response( val Errors: List, val Message: String, - val ROIDatalist: MutableList, + var ROIDatalist: MutableList, val Status: String, val StatusCode: Int ) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXX.kt b/app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXX.kt new file mode 100644 index 0000000..69077da --- /dev/null +++ b/app/src/main/java/com/nivesh/production/bajajfd/model/ResponseXX.kt @@ -0,0 +1,9 @@ +package com.nivesh.production.bajajfd.model + +data class ResponseXX( + val Errors: Any, + val MaturityAmount: Double, + val Message: String, + val Status: String, + val StatusCode: Int +) \ 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 c37c911..880761a 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 @@ -2,17 +2,21 @@ 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 okhttp3.RequestBody class MainRepository constructor(private val apiInterface: ApiInterface) { suspend fun getRatesResponse(getRatesRequest: GetRatesRequest) = apiInterface.getRates(getRatesRequest) - suspend fun checkFDKYCResponse(getRatesRequest: GetRatesRequest) = - apiInterface.getRates(getRatesRequest) + suspend fun getCodesResponse(requestBody: GetCodeRequest) = + apiInterface.getCodes(requestBody) + + suspend fun createCalculateFDMaturityAmount(requestBody: GetMaturityAmountRequest) = + apiInterface.getCalculateFDMaturityAmount(requestBody) - suspend fun createFDAppResponse(getRatesRequest: GetRatesRequest) = + + suspend fun checkFDKYCResponse(getRatesRequest: GetRatesRequest) = apiInterface.getRates(getRatesRequest) suspend fun documentsUploadResponse(getRatesRequest: GetRatesRequest) = @@ -36,7 +40,5 @@ class MainRepository constructor(private val apiInterface: ApiInterface) { suspend fun paymentReQueryResponse(getRatesRequest: GetRatesRequest) = apiInterface.getRates(getRatesRequest) - suspend fun getCodesResponse(requestBody: RequestBody) = - apiInterface.getCodes(requestBody) } \ 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 524ea7e..7ff1659 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 @@ -7,6 +7,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.ViewModelProvider import androidx.viewpager.widget.ViewPager import com.google.gson.Gson +import com.nivesh.production.bajajfd.R import com.nivesh.production.bajajfd.adapter.SectionsPagerAdapter import com.nivesh.production.bajajfd.api.ApiClient import com.nivesh.production.bajajfd.databinding.ActivityBajajFdBinding @@ -22,8 +23,6 @@ import com.nivesh.production.bajajfd.util.Common.Companion.selectedShape import com.nivesh.production.bajajfd.util.Resource import com.nivesh.production.bajajfd.viewModel.BajajFDViewModel import com.nivesh.production.bajajfd.viewModel.StepOneBajajFDViewModel -import okhttp3.MediaType.Companion.toMediaTypeOrNull -import okhttp3.RequestBody.Companion.toRequestBody class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { private lateinit var binding: ActivityBajajFdBinding @@ -34,7 +33,7 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { lateinit var createFDRequest: CreateFDRequest lateinit var createFDApplicantRequest: CreateFDApplicationRequest - lateinit var applicantDetails : ApplicantDetails + lateinit var applicantDetails: ApplicantDetails lateinit var fdInvestmentDetails: FDInvestmentDetails lateinit var applicantRelationDetails: ApplicantRelationDetails lateinit var fdBankDetails: FdBankDetails @@ -83,13 +82,11 @@ class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface { private fun getCodeApi() { val getCodeRequest = GetCodeRequest() - getCodeRequest.ProductName = "BajajFD" - getCodeRequest.Category = "InterestPayoutFreq" - getCodeRequest.Language = "EN" + getCodeRequest.ProductName = getString(R.string.bajajFD) + getCodeRequest.Category = getString(R.string.category) + getCodeRequest.Language = getString(R.string.language) getCodeRequest.InputValue = "" - val codeRequest: String = Gson().toJson(getCodeRequest) - val requestBody = codeRequest.toRequestBody("application/json".toMediaTypeOrNull()) - viewModel.getCode(requestBody) + viewModel.getCode(getCodeRequest) viewModel.getRatesMutableData.observe(this) { response -> when (response) { is Resource.Success -> { 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 89b52db..625deaa 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 @@ -1,7 +1,7 @@ package com.nivesh.production.bajajfd.ui.fragment import GetRatesResponse -import ROIDatalist +import ROIDataList import android.os.Bundle import android.text.Editable import android.text.TextWatcher @@ -12,11 +12,16 @@ import android.view.ViewGroup import android.widget.ArrayAdapter import android.widget.RadioButton import androidx.fragment.app.Fragment -import com.google.android.material.textfield.TextInputLayout +import androidx.recyclerview.widget.DefaultItemAnimator +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView.LayoutManager import com.google.gson.Gson 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.ui.activity.BajajFdMainActivity import com.nivesh.production.bajajfd.util.Common @@ -31,9 +36,10 @@ class StepOneBajajFDFragment : Fragment() { private lateinit var bajajFDInterface: BajajFDInterface private lateinit var stepOneBajajFDViewModel: StepOneBajajFDViewModel private lateinit var rgMaturity: RadioButton - private lateinit var listOfTenure: MutableList - private var tenure :Int = 0 - private var interest : Double = 0.0 + private lateinit var listOfTenure: MutableList + private var tenure: Int = 0 + private var interest: Double = 0.0 + private lateinit var recyclerViewDropDownAdapter: HorizontalRecyclerViewAdapter companion object { fun getInstance(fdInterface: BajajFDInterface): StepOneBajajFDFragment { @@ -56,6 +62,7 @@ class StepOneBajajFDFragment : Fragment() { stepOneBajajFDViewModel = (activity as BajajFdMainActivity).stepOneBajajFDViewModel listOfTenure = ArrayList() + // setUpRecyclerView() // Amount binding.edtAmount.addTextChangedListener(object : TextWatcher { @@ -63,6 +70,7 @@ class StepOneBajajFDFragment : Fragment() { 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) + maturityAmountApi(tenure, interest) } }) @@ -78,19 +86,33 @@ class StepOneBajajFDFragment : Fragment() { removeError(binding.tlInterestPayout) binding.tvFrequency.text = (activity as BajajFdMainActivity).listOfFrequency[position].Value - getRatesApi() + if (!binding.tvFrequency.text.equals("Cumulative")) { + binding.txtCumulativeNon.text = getString(R.string.nonCumulativeROI) + } else { + binding.txtCumulativeNon.text = getString(R.string.cumulativeROI) + } + + maturityAmountApi(tenure, interest) + + if (binding.edtAmount.text.toString().trim().isNotEmpty()) { + getRatesApi() + } else { + // please enter Amount first + } } } // Tenure - if (listOfTenure.isNotEmpty()) { - binding.spTenure.setOnItemClickListener { _, _, position, _ -> - removeError(binding.tlInterestTenure) - Log.e("Tenure", "--->".plus(listOfTenure[position].Tenure)) + binding.spTenure.setOnItemClickListener { _, _, position, _ -> + removeError(binding.tlInterestTenure) + if (listOfTenure.isNotEmpty()) { tenure = listOfTenure[position].Tenure.toInt() interest = listOfTenure[position].ROI + binding.tvROI.text = interest.toString().plus(" %") + maturityAmountApi(tenure, interest) } } + // Senior / Non Senior Citizen binding.swSeniorCitizen.setOnCheckedChangeListener { _, _ -> getRatesApi() @@ -107,25 +129,29 @@ class StepOneBajajFDFragment : Fragment() { Log.e("DeductTax", "-->" + binding.rbDeductTax.isChecked) } - binding.tvROI.text = "" - binding.tvMaturityAmount.text = "" // Next Button binding.btnNext.setOnClickListener { if (validation()) { - (activity as BajajFdMainActivity).fdInvestmentDetails.FDAmount = binding.edtAmount.text.toString().toDouble() - (activity as BajajFdMainActivity).fdInvestmentDetails.Frequency = binding.spInterestPayout.text.toString() + (activity as BajajFdMainActivity).fdInvestmentDetails.FDAmount = + binding.edtAmount.text.toString().toDouble() + (activity as BajajFdMainActivity).fdInvestmentDetails.Frequency = + binding.spInterestPayout.text.toString() (activity as BajajFdMainActivity).fdInvestmentDetails.Tenure = tenure (activity as BajajFdMainActivity).fdInvestmentDetails.Interest = interest (activity as BajajFdMainActivity).fdInvestmentDetails.NiveshClientCode = "8872" - (activity as BajajFdMainActivity).fdInvestmentDetails.Provider = "Bajaj" + (activity as BajajFdMainActivity).fdInvestmentDetails.Provider = + getString(R.string.bajaj) (activity as BajajFdMainActivity).fdInvestmentDetails.IPAddress = "" - (activity as BajajFdMainActivity).fdInvestmentDetails.Device = "App" + (activity as BajajFdMainActivity).fdInvestmentDetails.Device = + getString(R.string.app) (activity as BajajFdMainActivity).fdInvestmentDetails.Source = "nivesh" - if (binding.swSeniorCitizen.isChecked){ - (activity as BajajFdMainActivity).fdInvestmentDetails.CitizenType = getString(R.string.seniorCitizen) - }else{ - (activity as BajajFdMainActivity).fdInvestmentDetails.CitizenType = getString(R.string.nonSeniorCitizen) + if (binding.swSeniorCitizen.isChecked) { + (activity as BajajFdMainActivity).fdInvestmentDetails.CitizenType = + getString(R.string.seniorCitizen) + } else { + (activity as BajajFdMainActivity).fdInvestmentDetails.CitizenType = + getString(R.string.nonSeniorCitizen) } (activity as BajajFdMainActivity).fdInvestmentDetails.CustomerType = "" (activity as BajajFdMainActivity).fdInvestmentDetails.CKYCNumber = "" @@ -133,22 +159,103 @@ class StepOneBajajFDFragment : Fragment() { bajajFDInterface.stepOneApi("stepOneResponse") } } + + return root } + private fun setUpRecyclerView() { + + recyclerViewDropDownAdapter = HorizontalRecyclerViewAdapter( + activity as BajajFdMainActivity, + listOfTenure + ) { position -> + tenure = listOfTenure[position].Tenure.toInt() + interest = listOfTenure[position].ROI + binding.tvROI.text = interest.toString().plus(" %") + maturityAmountApi(tenure, interest) + } + val mLayoutManager: LayoutManager = + LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, true) + binding.rvTenure.layoutManager = mLayoutManager + binding.rvTenure.setHasFixedSize(true) + binding.rvTenure.itemAnimator = DefaultItemAnimator() + binding.rvTenure.adapter = recyclerViewDropDownAdapter + } + + + private fun maturityAmountApi(tenure: Int, interest: Double) { + if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { + if (binding.edtAmount.text.toString().isNotEmpty() && interest.toString().isNotEmpty() && tenure.toString().isNotEmpty() + ) { + val maturityAmountRequest = GetMaturityAmountRequest() + maturityAmountRequest.FDProvider = getString(R.string.bajaj) + maturityAmountRequest.FDAmount = binding.edtAmount.text.toString().toInt() + maturityAmountRequest.Frequency = binding.spInterestPayout.text.toString() + maturityAmountRequest.Tenure = tenure + maturityAmountRequest.Interest = interest + stepOneBajajFDViewModel.getMaturityAmount(maturityAmountRequest) + stepOneBajajFDViewModel.getMaturityAmountMutableData.observe(viewLifecycleOwner) { response -> + when (response) { + is Resource.Success -> { + val getMaturityAmountResponse = + Gson().fromJson( + response.data?.toString(), + GetCalculateMaturityAmountResponse::class.java + ) + getMaturityAmountResponse.Response.StatusCode.let { code -> + when (code) { + 200 -> { + binding.tvMaturityAmount.text = getString(R.string.rs).plus( + getMaturityAmountResponse.Response.MaturityAmount.toString() + ) + } + // 650 -> refreshToken() + else -> {} + } + } + } + + is Resource.Error -> { + response.message?.let { message -> + Log.e(" ", "An error occurred:$message") + } + } + is Resource.Loading -> { + + } + } + } + } + } + } private fun validation(): Boolean { return if (binding.edtAmount.text.toString().isEmpty()) { - Common.commonErrorMethod(binding.edtAmount, binding.tlDepositAmount, "") + Common.commonErrorMethod( + binding.edtAmount, + binding.tlDepositAmount, + getString(R.string.emptyAmount) + ) + } else if (binding.spInterestPayout.text.toString().toDouble() <= 5000) { + Common.commonSpinnerErrorMethod( + binding.spInterestPayout, + binding.tlInterestPayout, + getString(R.string.validMinAmount) + ) } else if (binding.spInterestPayout.text.isEmpty()) { Common.commonSpinnerErrorMethod( binding.spInterestPayout, binding.tlInterestPayout, - "" + getString(R.string.emptyInterestPayout) ) } else if (binding.spTenure.text.isEmpty()) { - Common.commonSpinnerErrorMethod(binding.spTenure, binding.tlInterestTenure, "") + Common.commonSpinnerErrorMethod( + binding.spTenure, + binding.tlInterestTenure, + getString(R.string.emptyInterestTenure) + ) } else { true } @@ -157,7 +264,7 @@ class StepOneBajajFDFragment : Fragment() { private fun getRatesApi() { if (Common.isNetworkAvailable(activity as BajajFdMainActivity)) { val getRatesRequest = GetRatesRequest() - getRatesRequest.fdProvider = "Bajaj" + getRatesRequest.fdProvider = getString(R.string.bajaj) getRatesRequest.frequency = binding.spInterestPayout.text.toString() if (binding.swSeniorCitizen.isChecked) { getRatesRequest.type = getString(R.string.seniorCitizen) @@ -177,13 +284,21 @@ class StepOneBajajFDFragment : Fragment() { listOfTenure.clear() } listOfTenure = getRatesResponse.Response.ROIDatalist - val adapter = - ArrayAdapter( - activity as BajajFdMainActivity, - R.layout.spinner_dropdown, - listOfTenure - ) - binding.spTenure.setAdapter(adapter) + // Tenure + if (listOfTenure.isNotEmpty()) { + listOfTenure.sortWith { lhs: ROIDataList, rhs: ROIDataList -> rhs.Tenure.compareTo(lhs.Tenure) } + binding.ORLayout.visibility = View.VISIBLE + val tenureAdapter = + ArrayAdapter( + activity as BajajFdMainActivity, + R.layout.spinner_dropdown, + listOfTenure + ) + binding.spTenure.setAdapter(tenureAdapter) + setUpRecyclerView() + }else{ + binding.ORLayout.visibility = View.GONE + } } // 650 -> refreshToken() else -> {} 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 831219a..51187bf 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 @@ -541,69 +541,72 @@ class StepTwoBajajFDFragment : Fragment() { // validations private fun validation(): Boolean { return if (binding.edtMobileNumber.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtMobileNumber, binding.tlMobileNumber, "") + commonErrorMethod(binding.edtMobileNumber, binding.tlMobileNumber, getString(R.string.emptyMobileNumber)) } else if (binding.edtMobileNumber.text?.length != 10) { // EditText - commonErrorMethod(binding.edtMobileNumber, binding.tlMobileNumber, "") - } else if (binding.edtMobileNumber.text?.length == 10 && !isIndianMobileNo(binding.edtMobileNumber.text.toString())) { // EditText - commonErrorMethod(binding.edtMobileNumber, binding.tlMobileNumber, "") + commonErrorMethod(binding.edtMobileNumber, binding.tlMobileNumber, getString(R.string.inValidMobileNumber)) + } else if (!isIndianMobileNo(binding.edtMobileNumber.text.toString())) { // EditText + commonErrorMethod(binding.edtMobileNumber, binding.tlMobileNumber, getString(R.string.inValidIndianMobileNumber)) } else if (binding.edtDOB.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtDOB, binding.tlDOB, "") + commonErrorMethod(binding.edtDOB, binding.tlDOB, getString(R.string.emptyDOB)) } else if (binding.edtPANNumber.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtPANNumber, binding.tlPanNumber, "") + commonErrorMethod(binding.edtPANNumber, binding.tlPanNumber, getString(R.string.emptyPAN)) } else if (isValidPan(binding.edtPANNumber.text.toString())) { // EditText - commonErrorMethod(binding.edtPANNumber, binding.tlPanNumber, "") + commonErrorMethod(binding.edtPANNumber, binding.tlPanNumber, getString(R.string.invalidPAN)) } else if (binding.spTitle.text.isEmpty()) { // Spinner - commonSpinnerErrorMethod(binding.spTitle, binding.tlTitle, "") + commonSpinnerErrorMethod(binding.spTitle, binding.tlTitle, getString(R.string.emptyTitle)) } else if (binding.edtFirstName.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtFirstName, binding.tlFirstName, "") + commonErrorMethod(binding.edtFirstName, binding.tlFirstName, getString(R.string.emptyFirstName)) } else if (isValidName(binding.edtFirstName.text.toString())) { // EditText - commonErrorMethod(binding.edtFirstName, binding.tlFirstName, "") + commonErrorMethod(binding.edtFirstName, binding.tlFirstName, getString(R.string.validFirstName)) } else if (binding.edtMiddleName.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtMiddleName, binding.tlMiddleName, "") + commonErrorMethod(binding.edtMiddleName, binding.tlMiddleName, getString(R.string.emptyMiddleName)) } else if (isValidName(binding.edtMiddleName.text.toString())) { // EditText - commonErrorMethod(binding.edtMiddleName, binding.tlMiddleName, "") + commonErrorMethod(binding.edtMiddleName, binding.tlMiddleName, getString(R.string.validMiddleName)) } else if (binding.edtLastName.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtLastName, binding.tlLastName, "") + commonErrorMethod(binding.edtLastName, binding.tlLastName, getString(R.string.emptyLastName)) } else if (isValidName(binding.edtLastName.text.toString())) { // EditText - commonErrorMethod(binding.edtLastName, binding.tlLastName, "") + commonErrorMethod(binding.edtLastName, binding.tlLastName, getString(R.string.validLastName)) } else if (binding.spGender.text.toString().isEmpty()) { // Spinner - commonSpinnerErrorMethod(binding.spGender, binding.tlGender, "") + commonSpinnerErrorMethod(binding.spGender, binding.tlGender, getString(R.string.emptyGender)) } else if (binding.edtEmail.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtEmail, binding.tlEmail, "") + commonErrorMethod(binding.edtEmail, binding.tlEmail, getString(R.string.emptyEmail)) } else if (isValidEmail(binding.edtEmail.text.toString())) { // EditText - commonErrorMethod(binding.edtEmail, binding.tlEmail, "") + commonErrorMethod(binding.edtEmail, binding.tlEmail, getString(R.string.validEmail)) } else if (binding.edtOccupation.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtOccupation, binding.tlOccupation, "") + commonErrorMethod(binding.edtOccupation, binding.tlOccupation, getString(R.string.emptyOccupation)) } else if (binding.edtQualification.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtQualification, binding.tlQualification, "") + commonErrorMethod(binding.edtQualification, binding.tlQualification, getString(R.string.emptyQualification)) } else if (binding.spMarital.text.toString().isEmpty()) { // Spinner - commonSpinnerErrorMethod(binding.spMarital, binding.tlMarital, "") + commonSpinnerErrorMethod(binding.spMarital, binding.tlMarital, getString(R.string.emptyMaritalStatus)) } else if (binding.spRelation.text.toString().isEmpty()) { // Spinner - commonSpinnerErrorMethod(binding.spRelation, binding.tlRelation, "") + commonSpinnerErrorMethod(binding.spRelation, binding.tlRelation, getString(R.string.emptyRelation)) } else if (binding.edtRelationName.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtRelationName, binding.tlRelationName, "") + commonErrorMethod(binding.edtRelationName, binding.tlRelationName, getString(R.string.emptyRelationName)) } else if (binding.edtAddressLine1.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtAddressLine1, binding.tlAddressLine1, "") + commonErrorMethod(binding.edtAddressLine1, binding.tlAddressLine1, getString(R.string.emptyAddressLine1)) } else if (binding.edtAddressLine2.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtAddressLine2, binding.tlAddressLine2, "") + commonErrorMethod(binding.edtAddressLine2, binding.tlAddressLine2, getString(R.string.emptyAddressLine2)) } else if (binding.edtState.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtState, binding.tlState, "") + commonErrorMethod(binding.edtState, binding.tlState, getString(R.string.emptyState)) } else if (binding.edtCity.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtCity, binding.tlCity, "") + commonErrorMethod(binding.edtCity, binding.tlCity, getString(R.string.emptyCity)) } else if (binding.edtPinCode.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtPinCode, binding.tlPinCode, "") + commonErrorMethod(binding.edtPinCode, binding.tlPinCode, getString(R.string.emptyPinCode)) + } else if (binding.edtPinCode.text.toString().length !=6) { // EditText + commonErrorMethod(binding.edtPinCode, binding.tlPinCode, getString(R.string.validPinCode)) } else if (binding.edtIFSC.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtIFSC, binding.tlIFSC, "") + commonErrorMethod(binding.edtIFSC, binding.tlIFSC, getString(R.string.emptyIFSCCode)) + }else if (binding.edtIFSC.text.toString().length != 11) { // EditText + commonErrorMethod(binding.edtIFSC, binding.tlIFSC, getString(R.string.validIFSCCode)) } else if (binding.edtAccountNumber.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtAccountNumber, binding.tlAccountNumber, "") - } else if (binding.edtBankName.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtBankName, binding.tlBankName, "") + commonErrorMethod(binding.edtAccountNumber, binding.tlAccountNumber, getString(R.string.emptyAccNo)) + } else if (binding.edtBankName.text.toString().isEmpty()) { // EditText + commonErrorMethod(binding.edtBankName, binding.tlBankName, getString(R.string.emptyBankName)) } else if (binding.edtBankBranch.text.toString().isEmpty()) { // EditText - commonErrorMethod(binding.edtBankBranch, binding.tlBankBranchName, "") + commonErrorMethod(binding.edtBankBranch, binding.tlBankBranchName, getString(R.string.emptyBranchName)) } else { return true } - } override fun onDestroyView() { 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 30a5f3f..a4d30de 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 @@ -14,7 +14,7 @@ class BajajFDViewModel(private val mainRepository: MainRepository) : ViewModel() // TODO: Implement the ViewModel val getRatesMutableData: MutableLiveData> = MutableLiveData() - fun getCode(requestBody: RequestBody) = viewModelScope.launch { + fun getCode(requestBody: GetCodeRequest) = viewModelScope.launch { getRatesMutableData.postValue(Resource.Loading()) val response = mainRepository.getCodesResponse(requestBody) getRatesMutableData.postValue(handleRatesResponse(response)) diff --git a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepFourBajajFDViewModel.kt b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepFourBajajFDViewModel.kt index c6dcc5f..fa40f96 100644 --- a/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepFourBajajFDViewModel.kt +++ b/app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepFourBajajFDViewModel.kt @@ -1,6 +1,8 @@ package com.nivesh.production.bajajfd.viewModel -import androidx.lifecycle.* +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import com.google.gson.JsonObject import com.nivesh.production.bajajfd.model.GetRatesRequest import com.nivesh.production.bajajfd.repositories.MainRepository 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 7b9c58d..2479303 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 @@ -5,6 +5,7 @@ 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 import com.nivesh.production.bajajfd.util.Resource @@ -14,6 +15,7 @@ import okhttp3.RequestBody class StepOneBajajFDViewModel(private val mainRepository: MainRepository) : ViewModel() { // TODO: Implement the ViewModel val getRatesMutableData: MutableLiveData> = MutableLiveData() + val getMaturityAmountMutableData: MutableLiveData> = MutableLiveData() fun getRates(getRatesRequest: GetRatesRequest) = viewModelScope.launch { getRatesMutableData.postValue(Resource.Loading()) @@ -21,10 +23,10 @@ class StepOneBajajFDViewModel(private val mainRepository: MainRepository) : View getRatesMutableData.postValue(handleRatesResponse(response)) } - fun getCode(requestBody: RequestBody) = viewModelScope.launch { - getRatesMutableData.postValue(Resource.Loading()) - val response = mainRepository.getCodesResponse(requestBody) - getRatesMutableData.postValue(handleRatesResponse(response)) + fun getMaturityAmount(requestBody: GetMaturityAmountRequest) = viewModelScope.launch { + getMaturityAmountMutableData.postValue(Resource.Loading()) + val response = mainRepository.createCalculateFDMaturityAmount(requestBody) + getMaturityAmountMutableData.postValue(handleRatesResponse(response)) } private fun handleRatesResponse(response: retrofit2.Response): Resource { 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 7d73807..e091180 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 @@ -30,10 +30,10 @@ class StepTwoBajajFDViewModel(private val mainRepository: MainRepository) : View } - fun createFDApp(getRatesRequest: GetRatesRequest) = viewModelScope.launch { - getRatesMutableData.postValue(Resource.Loading()) - val response = mainRepository.createFDAppResponse(getRatesRequest) - getRatesMutableData.postValue(handleRatesResponse(response)) - } +// fun createFDApp(getRatesRequest: GetRatesRequest) = viewModelScope.launch { +// getRatesMutableData.postValue(Resource.Loading()) +// val response = mainRepository.createFDAppResponse(getRatesRequest) +// getRatesMutableData.postValue(handleRatesResponse(response)) +// } } \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_corner_green_fill.xml b/app/src/main/res/drawable/rounded_corner_green_fill.xml new file mode 100644 index 0000000..0f43eb7 --- /dev/null +++ b/app/src/main/res/drawable/rounded_corner_green_fill.xml @@ -0,0 +1,6 @@ + + + + + + \ 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 cdea461..bb7e31a 100644 --- a/app/src/main/res/layout/fragment_bajajfd_step_one.xml +++ b/app/src/main/res/layout/fragment_bajajfd_step_one.xml @@ -1,6 +1,5 @@ - + android:textSize="@dimen/text_size_14" /> + + + app:layout_constraintTop_toBottomOf="@+id/txtMinAmount"> + + + + + + + + + @@ -325,6 +371,7 @@ android:orientation="horizontal"> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 75d3b91..abf5091 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -1,5 +1,7 @@ BajajFdLib + Bajaj + App Step 1 Step 2 @@ -9,7 +11,7 @@ Corporate Fixed Deposits - Rs. + Rs. Select Investment Amount Select Interest Payout Select Investment Tenure @@ -24,9 +26,28 @@ Deduct TDS (Income is taxable) In case you are eligible for non deduction of TDS then please submit 15G/H form to Bajaj or Nivesh team Non- Cumulative ROI: + Cumulative ROI: + Cumulative Regular Interest Payment: Maturity Amount: - + min amount : Rs 5,000 + OR, enter tenure in months + 1 Year + 2 Years + 3 Years + 4 Years + 5 Years + BajajFD + InterestPayoutFreq + EN + Min, 12 months, Max. 60 months + + + + Please enter amount + Entered amount should be greater than minimum amount + Please select Interest Payout + Please select Investment Tenure All fields are mandatory other then optional @@ -83,6 +104,48 @@ Upto Rs. 1 Lakh Only Eligible Bank Option + + Please enter mobile number + Mobile number should have at least 10 digits + Mobile number should start with 6,7,8 and 9 + Please select date of birth + Please enter PAN number + Invalid PAN + + Please select title + Please select gender + Please enter First Name + Please enter valid First Name + + Please enter Middle name + Please enter valid Middle Name + + Please enter Last name + Please enter valid Last Name + + Please select occupation + Please select Qualification + Please select marital status + Please select relation + Please enter relation name + Please enter email address + Please enter valid email address + Please enter address 1 + Please enter address 2 + + Please enter area + Please select city + Please select state + Please enter PinCode + Please enter valid PinCode + + Please enter valid account number + Please enter IFSC code + Please enter valid IFSC code + Please select bank name + Please enter branch name + Please select payment mode + Upload KYC Documents @@ -132,4 +195,6 @@ Once you click on PAY, your order will be placed and you will be redirected to payment gateway. Senior Citizen Non Senior Citizen + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 2bd87f5..b61447b 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -58,6 +58,7 @@ 46dp 47dp 48dp + 49dp 50dp 53dp 54dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 022fef9..2721acd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,7 @@ BajajFdLib + Bajaj + App Step 1 Step 2 @@ -9,7 +11,7 @@ Corporate Fixed Deposits - Rs. + Rs. Select Investment Amount Select Interest Payout Select Investment Tenure @@ -24,8 +26,28 @@ Deduct TDS (Income is taxable) In case you are eligible for non deduction of TDS then please submit 15G/H form to Bajaj or Nivesh team Non- Cumulative ROI: + Cumulative ROI: + Cumulative Regular Interest Payment: Maturity Amount: + min amount : Rs 5,000 + OR, enter tenure in months + 1 Year + 2 Years + 3 Years + 4 Years + 5 Years + BajajFD + InterestPayoutFreq + EN + Min. 12 months, Max. 60 months + + + + Please enter amount + Entered amount should be greater than minimum amount + Please select Interest Payout + Please select Investment Tenure @@ -83,6 +105,53 @@ Upto Rs. 1 Lakh Only Eligible Bank Option + + Please enter mobile number + Mobile number should have at least 10 digits + Mobile number should start with 6,7,8 and 9 + Please select date of birth + Please enter PAN number + Invalid PAN + + Please select title + Please select gender + + Please enter First Name + Please enter valid First Name + + Please enter Middle name + Please enter valid Middle Name + + Please enter Last name + Please enter valid Last Name + + Please enter email address + Please enter valid email address + + Please select occupation + Please select Qualification + Please select marital status + Please select relation + Please enter relation name + + Please enter address 1 + Please enter address 2 + + Please enter area + Please select city + Please select state + Please enter PinCode + Please enter valid PinCode + + Please enter account number + Please enter IFSC code + Please enter valid IFSC code + Please enter branch name + Please select bank name + + Please select payment mode + + Upload KYC Documents @@ -133,6 +202,7 @@ Senior Citizen Non Senior Citizen + On Maturity Monthly