From 430bf4194ecd38cf6e1117ae3bd8e7db26febe5f Mon Sep 17 00:00:00 2001 From: Manoj Date: Wed, 26 Apr 2023 16:03:07 +0530 Subject: [PATCH] code submitted --- .../partnerOnBoarding/api/ApiClient.kt | 1 + .../interfaces/ApiInterface.kt | 27 +- .../model/ImageSelectedModel.kt | 8 + .../partnerOnBoarding/model/ResultXXX.kt | 5 + .../model/request/PartnerRequest.kt | 1 + .../model/response/ValidateOTPResponse.kt | 4 +- .../repositories/MainRepository.kt | 14 +- .../ui/activities/ViewPagerActivity.kt | 3 + .../ui/fragments/AlmostThereFragment.kt | 54 ++- .../ui/fragments/GetStartedFragment.kt | 310 ++++++++++----- .../ui/fragments/NewDistributorSignStepOne.kt | 2 +- .../ui/fragments/OTPFragment.kt | 78 +++- .../ui/fragments/PaymentFragment.kt | 65 ++++ .../ui/fragments/SaveEAgreementFragment.kt | 38 +- .../ui/fragments/SignUpFragment.kt | 14 +- .../partnerOnBoarding/util/Common.kt | 15 +- .../partnerOnBoarding/util/Constants.kt | 9 +- .../viewModels/OnBoardingViewModel.kt | 9 +- app/src/main/res/drawable/circle_red.xml | 11 + app/src/main/res/drawable/nivesh_logo.png | Bin 0 -> 2909 bytes app/src/main/res/drawable/svg_help.xml | 5 + .../main/res/layout/fragment_get_started.xml | 45 ++- app/src/main/res/layout/fragment_otp.xml | 4 +- app/src/main/res/layout/fragment_payment.xml | 352 ++++++++++++++++++ .../res/layout/fragment_save_e_agreement.xml | 3 +- app/src/main/res/layout/payment_header.xml | 60 +++ app/src/main/res/values-hi-rIN/strings.xml | 6 + app/src/main/res/values/colors.xml | 6 +- app/src/main/res/values/strings.xml | 8 +- app/src/main/res/values/style.xml | 2 +- app/src/main/res/values/themes.xml | 6 + 31 files changed, 964 insertions(+), 201 deletions(-) create mode 100644 app/src/main/java/com/nivesh/production/partnerOnBoarding/model/ImageSelectedModel.kt create mode 100644 app/src/main/java/com/nivesh/production/partnerOnBoarding/model/ResultXXX.kt create mode 100644 app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/PaymentFragment.kt create mode 100644 app/src/main/res/drawable/circle_red.xml create mode 100644 app/src/main/res/drawable/nivesh_logo.png create mode 100644 app/src/main/res/drawable/svg_help.xml create mode 100644 app/src/main/res/layout/fragment_payment.xml create mode 100644 app/src/main/res/layout/payment_header.xml diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/api/ApiClient.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/api/ApiClient.kt index 9c8e0c5..104aad9 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/api/ApiClient.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/api/ApiClient.kt @@ -2,6 +2,7 @@ package com.nivesh.production.partnerOnBoarding.api import com.nivesh.production.partnerOnBoarding.NiveshFdApplication +import com.nivesh.production.partnerOnBoarding.interfaces.ApiInterface import com.nivesh.production.partnerOnBoarding.util.Constants.Companion.BASE_URL import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/interfaces/ApiInterface.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/interfaces/ApiInterface.kt index b5b4459..02f224b 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/interfaces/ApiInterface.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/interfaces/ApiInterface.kt @@ -1,4 +1,4 @@ -package com.nivesh.production.partnerOnBoarding.api +package com.nivesh.production.partnerOnBoarding.interfaces import com.google.gson.JsonObject import com.nivesh.production.partnerOnBoarding.model.* @@ -11,19 +11,6 @@ import retrofit2.Response import retrofit2.http.* interface ApiInterface { -// -// @POST("GetRates") -// suspend fun getRates( -// @Body getRatesRequest: GetRatesRequest, -// @Header("token") token: String -// ): Response - - - @GET("GetIFSC_Autofill?") - suspend fun getIFSCApi(@Query("prefix") ifsc : String): Response - - @GET("GetbankNames") - suspend fun getIFSCBankDetailsApi(@Query( "bankname") ifsc : String, @Header("token") token: String): Response @POST("Partner/CreatePartner") suspend fun postPartnerCreation(@Body partnerRequest: PartnerRequest): Response @@ -43,11 +30,11 @@ interface ApiInterface { @POST("Partner/GetAMFIDetail") suspend fun postAMFIDetail(@Body requestBody: RequestBody): Response - @GET//"User/GetPANDetail" - suspend fun getPANDetail(@Url url: String,@Query("PAN") value: String): Response + @GET("User/GetPANDetail") + suspend fun getPANDetail(@Query("PAN") value: String): Response - @GET//"User/GetDocumentType" - suspend fun getDocumentType(@Url url: String,@Query("Role") value: String, @Query("Type") type: String): Response + @GET("User/GetAllDocumentsType") + suspend fun getDocumentType(@Query("Role") value: String, @Query("Type") type: String): Response @Multipart @POST("Partner/DocumentsUpload") @@ -61,6 +48,6 @@ interface ApiInterface { @POST("Partner/SaveEAgreement") suspend fun postSaveEAgreement(@Body requestBody: RequestBody): Response - @GET - suspend fun getAllProduct(@Url url: String): Response + @GET("User/GetAllProduct") + suspend fun getAllProduct(): Response } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/ImageSelectedModel.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/ImageSelectedModel.kt new file mode 100644 index 0000000..8a625cf --- /dev/null +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/ImageSelectedModel.kt @@ -0,0 +1,8 @@ +package com.nivesh.production.partnerOnBoarding.model + +import java.io.File + +data class ImageSelectedModel( + val pos: Int, + val `file`: File +) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/ResultXXX.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/ResultXXX.kt new file mode 100644 index 0000000..d12753c --- /dev/null +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/ResultXXX.kt @@ -0,0 +1,5 @@ +package com.nivesh.production.partnerOnBoarding.model + +data class ResultXXX( + val ExpiryTimeInMinute: Int +) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/request/PartnerRequest.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/request/PartnerRequest.kt index 2a085ed..805960b 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/request/PartnerRequest.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/request/PartnerRequest.kt @@ -11,6 +11,7 @@ data class PartnerRequest( var DateOfIncorporation: String = "", var DateOfPassingAMFICertificate: Any? = null, var EUINNumber: String = "", + var EUINName: String = "", var Email: String = "", var InterestedProductId: List = emptyList(), var Mobile: String = "", diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/ValidateOTPResponse.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/ValidateOTPResponse.kt index b71cedb..46698cc 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/ValidateOTPResponse.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/ValidateOTPResponse.kt @@ -1,7 +1,9 @@ package com.nivesh.production.partnerOnBoarding.model.response +import com.nivesh.production.partnerOnBoarding.model.ResultXXX + data class ValidateOTPResponse( val Message: String, - val Result: Any, + val Result: ResultXXX, val Status: String ) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/repositories/MainRepository.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/repositories/MainRepository.kt index ece77a7..cd808f9 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/repositories/MainRepository.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/repositories/MainRepository.kt @@ -1,6 +1,6 @@ package com.nivesh.production.partnerOnBoarding.repositories -import com.nivesh.production.partnerOnBoarding.api.ApiInterface +import com.nivesh.production.partnerOnBoarding.interfaces.ApiInterface import com.nivesh.production.partnerOnBoarding.model.request.PartnerRequest import com.nivesh.production.partnerOnBoarding.model.request.SendOTPRequest import com.nivesh.production.partnerOnBoarding.model.request.ValidatePartnerRequest @@ -27,11 +27,11 @@ class MainRepository constructor(private val apiInterface: ApiInterface) { suspend fun getAMFIDetailResponse(requestBody: RequestBody) = apiInterface.postAMFIDetail(requestBody) - suspend fun getPANDetailResponse(url: String,value: String) = - apiInterface.getPANDetail(url,value) + suspend fun getPANDetailResponse(value: String) = + apiInterface.getPANDetail(value) - suspend fun getDocumentTypeResponse(url: String,value: String,type: String) = - apiInterface.getDocumentType(url,value,type) + suspend fun getDocumentTypeResponse(value: String,type: String) = + apiInterface.getDocumentType(value,type) suspend fun getDocumentUploadResponse(multipartBody: List,pc: Int,pr: Int,di: Int) = apiInterface.getUploadDocument(multipartBody,pc,pr,di) @@ -39,6 +39,6 @@ class MainRepository constructor(private val apiInterface: ApiInterface) { suspend fun getSaveEAgreement(requestBody: RequestBody, token: String) = apiInterface.postSaveEAgreement(requestBody) - suspend fun getAllProduct(url: String) = - apiInterface.getAllProduct(url) + suspend fun getAllProduct() = + apiInterface.getAllProduct() } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/activities/ViewPagerActivity.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/activities/ViewPagerActivity.kt index 6401d75..f955026 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/activities/ViewPagerActivity.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/activities/ViewPagerActivity.kt @@ -20,6 +20,7 @@ class ViewPagerActivity : BaseActivity() { private val stepTwoPagerFragment = StepTwoPagerFragment() private val stepThreePagerFragment = StepThreePagerFragment() var type : Int? = null + private var brokerType: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) init() @@ -37,6 +38,7 @@ class ViewPagerActivity : BaseActivity() { PreferenceManager(this@ViewPagerActivity).setIsFirstTime(true) type = intent.getIntExtra("type", 0) + brokerType = intent.getStringExtra("arnType") fragments = arrayOf( stepOnePagerFragment, @@ -101,6 +103,7 @@ class ViewPagerActivity : BaseActivity() { fun stepFourApi() { intent = Intent(this@ViewPagerActivity, SignUpActivity::class.java) intent.putExtra("type", type) + intent.putExtra("arnType",brokerType) startActivity(intent) } diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/AlmostThereFragment.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/AlmostThereFragment.kt index e2d1be8..990d31a 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/AlmostThereFragment.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/AlmostThereFragment.kt @@ -9,6 +9,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast +import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import com.google.gson.Gson import com.nivesh.production.partnerOnBoarding.R @@ -25,6 +26,7 @@ import com.nivesh.production.partnerOnBoarding.ui.activities.BaseActivity import com.nivesh.production.partnerOnBoarding.ui.activities.SignUpActivity import com.nivesh.production.partnerOnBoarding.util.Common import com.nivesh.production.partnerOnBoarding.util.Common.Companion.isValidPinCode +import com.nivesh.production.partnerOnBoarding.util.Common.Companion.showDialogValidation import com.nivesh.production.partnerOnBoarding.viewModels.OnBoardingViewModel class AlmostThereFragment : BaseFragment() { @@ -50,7 +52,6 @@ class AlmostThereFragment : BaseFragment() { OnBoardingModelProviderFactory(MainRepository(ApiClient.getApiClientOne)) )[OnBoardingViewModel::class.java] - val partnerRequest: PartnerRequest = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { arguments?.getSerializable("InputValue", PartnerRequest::class.java)!! @@ -121,10 +122,18 @@ class AlmostThereFragment : BaseFragment() { binding.spState.setText("") } - - binding.edtDate.setOnClickListener { - Common.datePicker(activity as SignUpActivity, binding.edtDate) + Common.datePicker(activity as SignUpActivity, binding.edtDate,false) + } + + binding.ivInfo.setOnClickListener { + replaceFragment( + activity as BaseActivity, + R.id.signUpContainer, + QuestionsFragment(), + "GET STARTED", + true + ) } binding.edtFullName.addTextChangedListener(object : TextWatcher { @@ -196,19 +205,12 @@ class AlmostThereFragment : BaseFragment() { partnerRequest.OtherProductName = "" partnerRequest.PartnerCode = PreferenceManager((activity as SignUpActivity)).getPartnerCode() partnerRequest.PartnerType = "advisory" + partnerRequest.DateOfIncorporation = Common.getDateFromTimeMills(System.currentTimeMillis()) Log.e("check_partner", partnerRequest.toString()) apiPartnerCreation(partnerRequest) } } - } - private fun apiPartnerCreation(partnerRequest: PartnerRequest) { - - (activity as SignUpActivity).viewModelOne.getPartnerCreateData( - partnerRequest, - "", - (activity as SignUpActivity) - ) (activity as SignUpActivity).viewModelOne.getPartnerCreationMutableData.observe( viewLifecycleOwner ) { response -> @@ -220,23 +222,41 @@ class AlmostThereFragment : BaseFragment() { Log.e("check_res_partner", res.toString()) if (res.Status == "success") { Toast.makeText(requireActivity(), res.Message, Toast.LENGTH_LONG).show() - val bundle = Bundle() bundle.putSerializable("mobile", arguments?.getString("mobile")!!) bundle.putSerializable("email", binding.edtEmail.text.toString()) - val fragment = SaveEAgreementFragment() + bundle.putString("arnType",arguments?.getString("arnType")) + var fragment: Fragment = + if(arguments?.getString("arnType").equals(getString(R.string.advisory),true)){ + SaveEAgreementFragment() + }else{ + PaymentFragment() + } fragment.arguments = bundle - replaceFragment( + addFragment( activity as BaseActivity, R.id.signUpContainer, fragment, "AlmostThereFragment", true ) + }else{ + showDialogValidation((activity as SignUpActivity),res.Message) } } } + private fun apiPartnerCreation(partnerRequest: PartnerRequest) { + + (activity as SignUpActivity).viewModelOne.getPartnerCreateData( + partnerRequest, + "", + (activity as SignUpActivity) + ) + + Log.e("checkRequest", Gson().toJson(partnerRequest).toString()) + } + private fun validate(): Boolean { return if (binding.edtDate.text.toString().isEmpty()) { // EditText Common.commonErrorMethod( @@ -258,8 +278,8 @@ class AlmostThereFragment : BaseFragment() { ) } else if (!Common.isValidEmail(binding.edtEmail.text.toString())) { // EditText Common.commonErrorMethod( - binding.edtFullName, - binding.tlFullName, + binding.edtEmail, + binding.tlEmail, getString(R.string.invalidEmail) ) } else if (binding.edtAddressLine1.text.toString().isEmpty()) { // EditText diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/GetStartedFragment.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/GetStartedFragment.kt index 698cb11..b9d8cfa 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/GetStartedFragment.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/GetStartedFragment.kt @@ -5,6 +5,7 @@ package com.nivesh.production.partnerOnBoarding.ui.fragments import android.Manifest import android.annotation.SuppressLint import android.app.Activity +import android.app.Dialog import android.content.DialogInterface import android.content.pm.PackageManager import android.database.Cursor @@ -42,7 +43,9 @@ import com.nivesh.production.partnerOnBoarding.BuildConfig import com.nivesh.production.partnerOnBoarding.R import com.nivesh.production.partnerOnBoarding.api.ApiClient import com.nivesh.production.partnerOnBoarding.databinding.FragmentGetStartedBinding +import com.nivesh.production.partnerOnBoarding.db.PreferenceManager import com.nivesh.production.partnerOnBoarding.model.DataX +import com.nivesh.production.partnerOnBoarding.model.ImageSelectedModel import com.nivesh.production.partnerOnBoarding.model.request.PartnerRequest import com.nivesh.production.partnerOnBoarding.model.response.* import com.nivesh.production.partnerOnBoarding.providerfactory.OnBoardingModelProviderFactory @@ -85,10 +88,12 @@ class GetStartedFragment : BaseFragment() { private var isFront: Boolean = false private lateinit var viewModel: OnBoardingViewModel private lateinit var listOfDocType: List - private var imageSelectedList = ArrayList() + private var imageSelectedList = ArrayList() + private var imageSelectedArnEuinList = ArrayList() private var arnList = ArrayList() - private lateinit var arnData: DataX + private var arnData: DataX? = null private lateinit var panRes: PANResponse + private var selectedDocPosition = -1 private val permissions = arrayOf( Manifest.permission.READ_EXTERNAL_STORAGE, @@ -162,11 +167,11 @@ class GetStartedFragment : BaseFragment() { documentTypeAPI(docType) binding.edtPassingAMFI.setOnClickListener { - Common.datePicker(activity as SignUpActivity, binding.edtPassingAMFI) + Common.datePicker(activity as SignUpActivity, binding.edtPassingAMFI,false) } binding.edtExpiryAMFI.setOnClickListener { - Common.datePicker(activity as SignUpActivity, binding.edtExpiryAMFI) + Common.datePicker(activity as SignUpActivity, binding.edtExpiryAMFI,true) } selectImageIntent = registerForActivityResult(ActivityResultContracts.GetContent()) @@ -180,7 +185,7 @@ class GetStartedFragment : BaseFragment() { binding.edtArnNumber.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - + Common.removeError(binding.tlArnNumber) if (s?.length!! == 7) { apiAMFIDetail("ARN", s.toString()) } @@ -189,6 +194,22 @@ class GetStartedFragment : BaseFragment() { override fun afterTextChanged(s: Editable?) {} }) + binding.edtEUINNumber.addTextChangedListener(object : TextWatcher{ + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + Common.removeError(binding.tlEUINNumber) + } + override fun afterTextChanged(s: Editable?) {} + }) + + binding.edtEUINNumberNF.addTextChangedListener(object : TextWatcher{ + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + Common.removeError(binding.tlEUINNumberNF) + } + override fun afterTextChanged(s: Editable?) {} + }) + binding.ivInfo.setOnClickListener { replaceFragment( activity as BaseActivity, @@ -202,14 +223,14 @@ class GetStartedFragment : BaseFragment() { binding.edtArnNumber.setOnItemClickListener { _, _, position, _ -> if (arnList != null && arnList.size > 0) { arnData = arnList[position] - if (arnData.EUIN != null) - binding.edtEUINNumber.setText(arnData.EUIN) + if (arnData?.EUIN != null) + binding.edtEUINNumber.setText(arnData?.EUIN) - if (arnData.ARNValidFrom != null) - binding.edtPassingAMFI.setText(arnData.ARNValidFrom) + if (arnData?.ARNValidFrom != null) + binding.edtPassingAMFI.setText(arnData?.ARNValidFrom) - if (arnData.ARNValidTill != null) - binding.edtExpiryAMFI.setText(arnData.ARNValidTill) + if (arnData?.ARNValidTill != null) + binding.edtExpiryAMFI.setText(arnData?.ARNValidTill) } else { binding.edtEUINNumber.setText("") binding.edtPassingAMFI.setText("") @@ -227,32 +248,41 @@ class GetStartedFragment : BaseFragment() { } binding.btnNext.setOnClickListener { - if (arguments?.getString("arnType").equals("Associate", false)) { - val pt = PartnerRequest() - pt.Name = binding.edtFullNamePanCard.text.toString() - pt.PAN = binding.edtPanNumber.text.toString() - - val fragment = AlmostThereFragment() - val bundle = Bundle() - bundle.putSerializable("InputValue", pt) - bundle.putSerializable("arnData", arnData) - bundle.putSerializable("panData", panRes) - bundle.putString("mobile", arguments?.getString("mobile")) - fragment.arguments = bundle - - replaceFragment( - activity as BaseActivity, - R.id.signUpContainer, - fragment, - "GET STARTED", - true - ) + apiUploadDocument() + if (arguments?.getString("arnType").equals(getString(R.string.associateText), false)) { + if(validationAssociate()) { + val pt = PartnerRequest() + pt.Name = binding.edtFullNamePanCard.text.toString() + pt.PAN = binding.edtPanNumber.text.toString() + + val fragment = AlmostThereFragment() + val bundle = Bundle() + bundle.putSerializable("InputValue", pt) + if(arnData!=null) + bundle.putSerializable("arnData", arnData) + bundle.putSerializable("panData", panRes) + bundle.putString("mobile", arguments?.getString("mobile")) + bundle.putString("arnType",arguments?.getString("arnType")) + fragment.arguments = bundle + + replaceFragment( + activity as BaseActivity, + R.id.signUpContainer, + fragment, + "GET STARTED", + true + ) + } - } else if (arguments?.getString("arnType").equals("advisory", false)) { - if (validation()) { + } else if (arguments?.getString("arnType").equals(getString(R.string.advisory), false)) { + if (validationAdvisory()) { val pt = PartnerRequest() pt.ARNNumber = binding.edtArnNumber.text.toString() - pt.EUINNumber = binding.edtEUINNumber.text.toString() + + if (binding.edtEUINNumber.visibility == View.VISIBLE) + pt.EUINNumber = binding.edtEUINNumber.text.toString() + else pt.EUINNumber = binding.edtEUINNumberNF.text.toString() + pt.DateOfExpiryAMFICertificate = binding.edtExpiryAMFI.text.toString() pt.Name = binding.edtFullNamePanCard.text.toString() pt.PAN = binding.edtPanNumber.text.toString() @@ -264,6 +294,7 @@ class GetStartedFragment : BaseFragment() { bundle.putSerializable("arnData", arnData) bundle.putSerializable("panData", panRes) bundle.putString("mobile", arguments?.getString("mobile")) + bundle.putString("arnType",arguments?.getString("arnType")) fragment.arguments = bundle replaceFragment( @@ -343,13 +374,15 @@ class GetStartedFragment : BaseFragment() { override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { Common.removeError(binding.tlPanNumber) - if (isValidIndividualPan(s.toString().trim())) { - binding.rlEUINUpload.visibility = View.GONE - } else { - binding.rlEUINUpload.visibility = View.VISIBLE - if (!TextUtils.isEmpty(binding.edtEUINNumber.text)) { - binding.edtEUINNumberNF.setText(binding.edtEUINNumber.text.toString()) - binding.edtEUINNumber.visibility = View.GONE + if (arguments?.getString("arnType").equals(getString(R.string.advisory), true)) { + if (!isValidIndividualPan(s.toString().trim())) { + binding.rlEUINUpload.visibility = View.GONE + } else { + binding.rlEUINUpload.visibility = View.VISIBLE + if (!TextUtils.isEmpty(binding.edtEUINNumber.text)) { + binding.edtEUINNumberNF.setText(binding.edtEUINNumber.text.toString()) + binding.edtEUINNumber.visibility = View.GONE + } } } @@ -390,8 +423,38 @@ class GetStartedFragment : BaseFragment() { val getCodes: Data = parent.getItemAtPosition(position) as Data imageSelectedList.clear() docValue = getCodes.DocumentType + selectedDocPosition = position setVisibility(listOfDocType[position].DocumentType) } + + (activity as SignUpActivity).viewModelOne.getPANDetailMutableData.observe( + viewLifecycleOwner + ) { response -> + showProgress(View.GONE) + val res: PANResponse = + Gson().fromJson( + response?.data.toString(), + PANResponse::class.java + ) + + panRes = res + isPanVerify = if (res.Status == "success") { + binding.edtPanNumber.setCompoundDrawablesWithIntrinsicBounds( + 0, + 0, + R.drawable.svg_pan_verified, + 0 + ) + binding.edtFullNamePanCard.setText(res.Result.data.FullName) + true + } else { + commonErrorMethod( + binding.edtPanNumber, + binding.tlPanNumber, + getString(R.string.invalidPAN) + ) + } + } } private fun commonMethodForVisibility(visibility: Int) { @@ -411,7 +474,7 @@ class GetStartedFragment : BaseFragment() { (activity as SignUpActivity).viewModelOne.getDocumentType( "3",//Currently it is static docType, - Constants.BASE_URL_COMMON + "User/GetAllDocumentsType", +// Constants.BASE_URL_COMMON + "User/GetAllDocumentsType", (activity as SignUpActivity) ) @@ -446,48 +509,21 @@ class GetStartedFragment : BaseFragment() { private fun apiPANVerify(pan: String) { try { - ProgressUtil.showLoading(activity as SignUpActivity) (activity as SignUpActivity).viewModelOne.getPANDetail( pan, - Constants.BASE_URL_COMMON + "User/GetPANDetail", (activity as SignUpActivity) ) - - (activity as SignUpActivity).viewModelOne.getPANDetailMutableData.observe( - viewLifecycleOwner - ) { response -> - ProgressUtil.hideLoading() - val res: PANResponse = - Gson().fromJson( - response?.data.toString(), - PANResponse::class.java - ) - - panRes = res - isPanVerify = if (res.Status == "success") { - binding.edtPanNumber.setCompoundDrawablesWithIntrinsicBounds( - 0, - 0, - R.drawable.svg_pan_verified, - 0 - ) - binding.edtFullNamePanCard.setText(res.Result.data.FullName) - true - } else { - commonErrorMethod( - binding.edtPanNumber, - binding.tlPanNumber, - getString(R.string.invalidPAN) - ) - } - } - + showProgress(View.VISIBLE) } catch (e: Exception) { ProgressUtil.hideLoading() Log.e("checkPANError", e.message.toString()) } } + private fun showProgress(view: Int) { + binding.rlProgress.visibility = view + } + private fun apiAMFIDetail(type: String, value: String?) { val jsonObject = JSONObject() val mediaType = "application/json; charset=utf-8".toMediaType() @@ -519,14 +555,14 @@ class GetStartedFragment : BaseFragment() { if (type == "ARN") { if (arnList.size > 0) { arnData = arnList[0] - if (arnData.EUIN != null) - binding.edtEUINNumber.setText(arnData.EUIN) + if (arnData?.EUIN != null) + binding.edtEUINNumber.setText(arnData?.EUIN) - if (arnData.ARNValidFrom != null) - binding.edtPassingAMFI.setText(arnData.ARNValidFrom) + if (arnData?.ARNValidFrom != null) + binding.edtPassingAMFI.setText(arnData?.ARNValidFrom) - if (arnData.ARNValidTill != null) - binding.edtExpiryAMFI.setText(arnData.ARNValidTill) + if (arnData?.ARNValidTill != null) + binding.edtExpiryAMFI.setText(arnData?.ARNValidTill) } setArnUploadVisibility(View.GONE) @@ -573,19 +609,46 @@ class GetStartedFragment : BaseFragment() { return false } - private fun validation(): Boolean { + private fun validationAssociate(): Boolean { + return if (binding.edtPanNumber.text.toString().isEmpty()) { + commonErrorMethod( + binding.edtPanNumber, + binding.tlPanNumber, + getString(R.string.pleaseArnNum) + ) + }else if (binding.edtFullNamePanCard.text.toString().isEmpty()) { + commonErrorMethod( + binding.edtFullNamePanCard, + binding.tlFullNamePanCard, + getString(R.string.pleaseArnNum) + ) + } else if(imageSelectedList != null && imageSelectedList.size == 0){ + showDialogValidation((activity as SignUpActivity),getString(R.string.addressProofType)) + return false + } + else return true + } + + private fun validationAdvisory(): Boolean { return if (binding.edtArnNumber.text.toString().isEmpty()) { commonErrorMethodAutoComplete( binding.edtArnNumber, binding.tlArnNumber, getString(R.string.pleaseArnNum) ) - } else if (binding.edtEUINNumber.text.toString().isEmpty()) { + } else if (binding.edtEUINNumber.visibility != View.VISIBLE && binding.edtEUINNumber.text.toString().isEmpty()) { commonErrorMethod( binding.edtEUINNumber, binding.tlEUINNumber, getString(R.string.pleaseEuinNum) ) + } else if (binding.edtEUINNumberNF.visibility != View.VISIBLE && binding.edtEUINNumberNF.text.toString().isEmpty() + ) { + commonErrorMethod( + binding.edtEUINNumberNF, + binding.tlEUINNumberNF, + getString(R.string.pleaseEuinNum) + ) } else if (binding.edtPassingAMFI.text.toString().isEmpty()) { commonErrorMethod( binding.edtPassingAMFI, @@ -604,13 +667,20 @@ class GetStartedFragment : BaseFragment() { binding.tlPanNumber, getString(R.string.emptyPAN) ) - } else if (binding.edtFullNamePanCard.text.toString().isEmpty()) { + }else if (!isPanVerify) { + commonErrorMethod( + binding.edtPanNumber, + binding.tlPanNumber, + getString(R.string.invalidPAN) + ) + } + else if (binding.edtFullNamePanCard.text.toString().isEmpty()) { commonErrorMethod( binding.edtFullNamePanCard, binding.tlFullNamePanCard, getString(R.string.full_name_as_on_pan_card) ) - } else if (imageSelectedList == null && imageSelectedList.size == 0) { + } else if (imageSelectedList != null && imageSelectedList.size == 0) { showDialogValidation( (activity as SignUpActivity), resources.getString(R.string.selectAddressProof) @@ -805,8 +875,8 @@ class GetStartedFragment : BaseFragment() { if (size < maxFileSize) { if (type == "c") { encodedPANBase64(fileExtension) - if (isFront) imageSelectedList.add(0, fileExtension) - else imageSelectedList.add(1, fileExtension) + if (isFront) imageSelectedList.add(ImageSelectedModel(0, fileExtension)) + else imageSelectedList.add(ImageSelectedModel(0, fileExtension)) } else { val bitmap: Bitmap = MediaStore.Images.Media.getBitmap(context?.contentResolver, uri) @@ -821,8 +891,8 @@ class GetStartedFragment : BaseFragment() { fOut.close() if (file.exists()) encodedPANBase64(file) - if (isFront) imageSelectedList.add(0, file) - else imageSelectedList.add(1, file) + if (isFront) imageSelectedList.add(ImageSelectedModel(1, file)) + else imageSelectedList.add(ImageSelectedModel(1, file)) Log.e("check_panString", panString + "\n" + bitmap.toString()) } } else { @@ -842,7 +912,8 @@ class GetStartedFragment : BaseFragment() { if (size < maxFileSize) { if (type == "c") { encodedPANBase64(fileExtension) - imageSelectedList.add(2, fileExtension) + imageSelectedArnEuinList.add(ImageSelectedModel(0, fileExtension)) + binding.tvUploadARNTitle.visibility = View.GONE } else { val bitmap: Bitmap = MediaStore.Images.Media.getBitmap(context?.contentResolver, uri) @@ -857,8 +928,8 @@ class GetStartedFragment : BaseFragment() { fOut.close() if (file.exists()) encodedPANBase64(file) - imageSelectedList.add(2, file) - Log.e("check_panString", panString + "\n" + bitmap.toString()) + imageSelectedArnEuinList.add(ImageSelectedModel(0, file)) + binding.tvUploadARNTitle.visibility = View.GONE } } else { panString = "" @@ -877,7 +948,8 @@ class GetStartedFragment : BaseFragment() { if (size < maxFileSize) { if (type == "c") { encodedPANBase64(fileExtension) - imageSelectedList.add(3, fileExtension) + imageSelectedArnEuinList.add(ImageSelectedModel(1, fileExtension)) + binding.tvUploadEUINTitle.visibility = View.GONE } else { val bitmap: Bitmap = MediaStore.Images.Media.getBitmap(context?.contentResolver, uri) @@ -892,8 +964,8 @@ class GetStartedFragment : BaseFragment() { fOut.close() if (file.exists()) encodedPANBase64(file) - imageSelectedList.add(3, file) - Log.e("check_panString", panString + "\n" + bitmap.toString()) + imageSelectedArnEuinList.add(ImageSelectedModel(1, fileExtension)) + binding.tvUploadEUINTitle.visibility = View.GONE } } else { panString = "" @@ -905,17 +977,56 @@ class GetStartedFragment : BaseFragment() { } private fun apiUploadDocument() { - if (imageSelectedList != null && imageSelectedList.size != 0) { val part = ArrayList() - imageSelectedList.forEachIndexed { index, element -> + imageSelectedList.forEachIndexed { _, element -> + + if (element.pos == 0) { + part.add(prepareImagePart(element.file, "front")) + } else { + part.add(prepareImagePart(element.file, "back")) + } + } + + if(selectedDocPosition != -1) { + (activity as SignUpActivity).viewModelOne.getDocumentUpload( + part, + PreferenceManager((activity as SignUpActivity)).getPartnerCode().toInt(), + 5, + listOfDocType[selectedDocPosition].DocumentId, + (activity as SignUpActivity) + ) + }else{ + showDialogValidation((activity as SignUpActivity),"Document Not Selected") + } + + (activity as SignUpActivity).viewModelOne.getDocumentUploadMutableData.observe( + viewLifecycleOwner + ) { response -> + Log.e("check_upload_res", response.toString()) + val res: DocumentUploadResponse = + Gson().fromJson( + response?.data.toString(), + DocumentUploadResponse::class.java + ) + + if (res.Status == getString(R.string.successText)) { + Toast.makeText(activity as SignUpActivity, res.Message, Toast.LENGTH_LONG) + .show() + } + } + } - if (index == 0) { - part.add(prepareImagePart(element, "front")) + if (imageSelectedArnEuinList != null && imageSelectedList.size != 0) { + val part = ArrayList() + + imageSelectedArnEuinList.forEachIndexed { _, element -> + if (element.pos == 0) { + part.add(prepareImagePart(element.file, "ARN")) } else { - part.add(prepareImagePart(element, "back")) + part.add(prepareImagePart(element.file, "EUIN")) } } @@ -926,7 +1037,6 @@ class GetStartedFragment : BaseFragment() { 8, (activity as SignUpActivity) ) - (activity as SignUpActivity).viewModelOne.getDocumentUploadMutableData.observe( viewLifecycleOwner ) { response -> diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/NewDistributorSignStepOne.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/NewDistributorSignStepOne.kt index 46f8c82..9476353 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/NewDistributorSignStepOne.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/NewDistributorSignStepOne.kt @@ -51,7 +51,7 @@ class NewDistributorSignStepOne : BaseFragment() { )[OnBoardingViewModel::class.java] (activity as SignUpActivity).viewModelOne.getAllProduct( - Constants.BASE_URL_COMMON + "User/GetAllProduct", +// Constants.BASE_URL_COMMON + "User/GetAllProduct", (activity as SignUpActivity) ) diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/OTPFragment.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/OTPFragment.kt index 162920e..924cae4 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/OTPFragment.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/OTPFragment.kt @@ -1,6 +1,9 @@ package com.nivesh.production.partnerOnBoarding.ui.fragments +import android.annotation.SuppressLint +import android.app.Activity import android.os.Bundle +import android.os.CountDownTimer import android.text.Editable import android.text.InputFilter import android.text.TextWatcher @@ -10,10 +13,13 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.EditText +import android.widget.TextView import androidx.fragment.app.Fragment +import com.google.gson.Gson import com.nivesh.production.partnerOnBoarding.R import com.nivesh.production.partnerOnBoarding.databinding.FragmentOtpBinding import com.nivesh.production.partnerOnBoarding.model.request.SendOTPRequest +import com.nivesh.production.partnerOnBoarding.model.response.ValidateOTPResponse import com.nivesh.production.partnerOnBoarding.ui.activities.BaseActivity import com.nivesh.production.partnerOnBoarding.ui.activities.SignUpActivity import com.nivesh.production.partnerOnBoarding.util.Common @@ -21,12 +27,17 @@ import okhttp3.MediaType.Companion.toMediaType import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import org.json.JSONObject +import java.util.concurrent.TimeUnit class OTPFragment : BaseFragment() { private var _binding: FragmentOtpBinding? = null private val binding get() = _binding!! private var type: Int? = null private var mobile: String? = null + var countDownTimer: CountDownTimer? = null + var otpExpiryTime: Int = 0 + var timerTime: Long = 0 + var timeInSeconds = 0 override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -67,10 +78,14 @@ class OTPFragment : BaseFragment() { binding.edtOTP5.setOnKeyListener(GenericKeyEvent(binding.edtOTP5, binding.edtOTP4)) binding.edtOTP6.setOnKeyListener(GenericKeyEvent(binding.edtOTP6, binding.edtOTP5)) - binding.txtDigit.text = getString(R.string.sixDigitOTP).plus(" ").plus("+91.00000.00000") + binding.txtDigit.text = getString(R.string.sixDigitOTP).plus(" ").plus("\n+91 ".plus(mobile)) binding.txtResendOTP.setOnClickListener { + smsAPI() + } + binding.txtChangeNumber.setOnClickListener{ + (activity as SignUpActivity).onBackPressedDispatcher.onBackPressed() } binding.btnSubmit.setOnClickListener { @@ -82,7 +97,54 @@ class OTPFragment : BaseFragment() { (activity as SignUpActivity).viewModelOne.getSendOTPMutableData.observe( viewLifecycleOwner ) { response -> - Log.e("check_res_login", response?.data.toString()) + val validateOTPResponse: ValidateOTPResponse = + Gson().fromJson( + response?.data.toString(), + ValidateOTPResponse::class.java + ) + if(validateOTPResponse.Status == getString(R.string.successText)){ + otpExpiryTime = validateOTPResponse.Result.ExpiryTimeInMinute + binding.txtTimer.visibility = View.VISIBLE + + binding.txtTimer.text = otpExpiryTime.toString().plus(": 00") + binding.txtTimerText.text = getString(R.string.secondsTimer).plus(" ").plus(otpExpiryTime).plus(" minute") + showTimer((60000 * otpExpiryTime).toLong()) + } + } + } + + private fun showTimer(timerTime1: Long) { + countDownTimer?.cancel() + timerTime = 0 + timerMethod(timerTime1, binding.txtTimer, activity) + } + + private fun timerMethod(timerMilliSec: Long, txt_timer: TextView, mActivity: Activity?) { + try { + countDownTimer = object : CountDownTimer(timerMilliSec, 1000) { + @SuppressLint("SetTextI18n") + override fun onTick(millisUntilFinished: Long) { + txt_timer.text = "(" + String.format( + "%02d:%02d", + TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished), + TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds( + TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) + ) + ) + ")" + timerTime = millisUntilFinished + timeInSeconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished).toInt() + } + + override fun onFinish() { + txt_timer.text = "00:00" + timerTime = 0 + if (mActivity != null && !mActivity.isFinishing) { + resendOTPItemVisibility(View.VISIBLE) + } + } + }.start() + } catch (e: Exception) { + e.printStackTrace() } } @@ -91,7 +153,7 @@ class OTPFragment : BaseFragment() { obj.put("OTP", "1234") obj.put("Mobile", mobile) obj.put("Email", "test@test.com") - obj.put("ExpiryTimeInMinute", 0) + obj.put("ExpiryTimeInMinute", otpExpiryTime) val mediaType = "application/json; charset=utf-8".toMediaType() val body: RequestBody = obj.toString().toRequestBody(mediaType) @@ -105,12 +167,11 @@ class OTPFragment : BaseFragment() { viewLifecycleOwner ) { response -> Log.e("check_otp_res", response?.data.toString()) - + countDownTimer?.cancel() val bundle = Bundle() bundle.putString("mobile", mobile) bundle.putString("arnType", arguments?.getString("arnType")) var fragment = Fragment() - if (type == 4) { fragment = GetStartedFragment() } else if (type == 3) { @@ -130,6 +191,8 @@ class OTPFragment : BaseFragment() { } private fun smsAPI() { + resendOTPItemVisibility(View.GONE) + val sendOTPRequest = SendOTPRequest() sendOTPRequest.AMCID = "" sendOTPRequest.CommunicationValue = arguments?.getString("mobile").toString() @@ -147,6 +210,11 @@ class OTPFragment : BaseFragment() { ) } + private fun resendOTPItemVisibility(viewType: Int) { + binding.txtResendOTP.visibility = viewType + binding.txtDidNotGetOTP.visibility = viewType + } + private fun validate(): Boolean { return if (binding.edtOTP1.text.toString().isEmpty()) { // EditText Common.commonErrorMethod( diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/PaymentFragment.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/PaymentFragment.kt new file mode 100644 index 0000000..8af0687 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/PaymentFragment.kt @@ -0,0 +1,65 @@ +package com.nivesh.production.partnerOnBoarding.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.nivesh.production.partnerOnBoarding.R +import com.nivesh.production.partnerOnBoarding.databinding.FragmentPaymentBinding +import com.nivesh.production.partnerOnBoarding.ui.activities.BaseActivity +import com.nivesh.production.partnerOnBoarding.ui.activities.SignUpActivity + +class PaymentFragment : BaseFragment() { + + private var _binding: FragmentPaymentBinding? = null + private val binding get() = _binding!! + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + _binding = FragmentPaymentBinding.inflate(inflater,container,false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + init() + } + + private fun init() { + + binding.btnApplyNow.setOnClickListener{ + setUpFragment() + } + + binding.header.tvSkip.setOnClickListener{ + setUpFragment() + } + + binding.header.ivBack.setOnClickListener{ + (activity as SignUpActivity).onBackPressedDispatcher.onBackPressed() + } + + binding.header.tvSkip.setOnClickListener{ + setUpFragment() + } + } + + private fun setUpFragment() { + val bundle = Bundle() + bundle.putSerializable("mobile", arguments?.getString("mobile")!!) + bundle.putSerializable("email", arguments?.getString("email")!!) + bundle.putString("arnType",arguments?.getString("arnType")) + var fragment = SaveEAgreementFragment() + fragment.arguments = bundle + replaceFragment( + activity as BaseActivity, + R.id.signUpContainer, + fragment, + "AlmostThereFragment", + true + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/SaveEAgreementFragment.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/SaveEAgreementFragment.kt index 017fb40..bfc9186 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/SaveEAgreementFragment.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/SaveEAgreementFragment.kt @@ -80,6 +80,26 @@ class SaveEAgreementFragment : BaseFragment() { } Log.e("check_otp_res", response?.data.toString()) } + + binding.header.ivBack.setOnClickListener{ + (activity as SignUpActivity).onBackPressedDispatcher.onBackPressed() + } + + (activity as SignUpActivity).viewModelOne.getSendOTPSaveEAgreementMutableData.observe( + viewLifecycleOwner + ) { response -> + Log.e("check_res_otp", response?.data.toString()) + if(response!=null) { + val res: SendOTPResponse = + Gson().fromJson( + response.data.toString(), + SendOTPResponse::class.java + ) + if (res.Status ==getString(R.string.successText)) { + dialogOTP() + } + } + } } private fun showConfirmDialog(message: String) { @@ -287,28 +307,12 @@ class SaveEAgreementFragment : BaseFragment() { sendOTPRequest.Name = "Manoj Singh" sendOTPRequest.ProductId = 1 sendOTPRequest.UserRole = 3 - sendOTPRequest.UserId = "4988" + sendOTPRequest.UserId = PreferenceManager((activity as SignUpActivity)).getPartnerCode() (activity as SignUpActivity).viewModelOne.getSaveEAgreementSendOTP( sendOTPRequest, "", (activity as SignUpActivity) ) - - (activity as SignUpActivity).viewModelOne.getSendOTPSaveEAgreementMutableData.observe( - viewLifecycleOwner - ) { response -> - Log.e("check_res_otp", response?.data.toString()) - if(response!=null) { - val res: SendOTPResponse = - Gson().fromJson( - response.data.toString(), - SendOTPResponse::class.java - ) - if (res.Status ==getString(R.string.successText)) { - dialogOTP() - } - } - } } class GenericKeyEvent internal constructor( diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/SignUpFragment.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/SignUpFragment.kt index 02106f1..0bd01f4 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/SignUpFragment.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/SignUpFragment.kt @@ -1,5 +1,7 @@ package com.nivesh.production.partnerOnBoarding.ui.fragments +import android.content.res.ColorStateList +import android.graphics.Color import android.os.Bundle import android.text.Editable import android.text.InputFilter @@ -8,7 +10,10 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.content.ContextCompat +import androidx.core.widget.TextViewCompat import androidx.lifecycle.ViewModelProvider +import com.google.android.material.button.MaterialButton import com.google.gson.Gson import com.nivesh.production.partnerOnBoarding.R import com.nivesh.production.partnerOnBoarding.api.ApiClient @@ -59,6 +64,13 @@ class SignUpFragment : BaseFragment() { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { Common.removeError(binding.tlMobileNumber) + if(s.toString().length>=10){ + binding.btnSignUp.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor((activity as SignUpActivity),R.color.buttonRed)) + binding.btnSignUp.isEnabled = true + }else if(s.toString().length<10){ + binding.btnSignUp.isEnabled = false + binding.btnSignUp.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor((activity as SignUpActivity),R.color.buttonLightRed)) + } } }) @@ -137,7 +149,7 @@ class SignUpFragment : BaseFragment() { val fragment = OTPFragment() fragment.arguments = bundle - replaceFragment( + addFragment( activity as BaseActivity, R.id.signUpContainer, fragment, diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/util/Common.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/util/Common.kt index 8a723c2..58c17f6 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/util/Common.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/util/Common.kt @@ -86,7 +86,7 @@ class Common { // val mPattern = Pattern.compile("[A-Z]{3}P[A-Z]\\d{4}[A-Z]") // val mMatcher = mPattern.matcher(pan.toString()) // return mMatcher.matches() - return pan.length == 4 && pan[3] != 'P' + return pan.length > 3 && pan[3] != 'P' } //is Indian mobile Number @@ -238,7 +238,7 @@ class Common { } } - fun datePicker(activity: Activity, edtDOB: TextInputEditText): String { + fun datePicker(activity: Activity, edtDOB: TextInputEditText,futureDate: Boolean): String { val cal = Calendar.getInstance() var preSelectedDate = "" val year: Int @@ -261,17 +261,18 @@ class Common { val datePickerDialog = DatePickerDialog( activity as SignUpActivity, { _, years, monthOfYear, dayOfMonth -> - if (monthOfYear.toString().length == 1) { - "0".plus(monthOfYear) + var monthsCount = (monthOfYear+1) + preSelectedDate = if (monthsCount.toString().length == 1) { + years.toString().plus("-").plus("0".plus(monthOfYear)).plus("-").plus(dayOfMonth) + }else { + years.toString().plus("-").plus(monthOfYear).plus("-").plus(dayOfMonth) } - preSelectedDate = years.toString().plus("-").plus(monthOfYear + 1).plus("-") - .plus(dayOfMonth.toString()) edtDOB.setText(preSelectedDate) edtDOB.setSelection(edtDOB.text.toString().length) }, year, month, day ) - datePickerDialog.datePicker.maxDate = cal.timeInMillis + if(!futureDate) datePickerDialog.datePicker.maxDate = cal.timeInMillis val c = Calendar.getInstance() c.add(Calendar.YEAR, -140) datePickerDialog.datePicker.minDate = c.timeInMillis diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/util/Constants.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/util/Constants.kt index b524b4c..9f34e65 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/util/Constants.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/util/Constants.kt @@ -3,12 +3,7 @@ package com.nivesh.production.partnerOnBoarding.util class Constants { companion object { - const val BASE_URL = "http://3.109.121.6:5001/api/" -// const val BASE_URL = "http://3.109.121.6/partner/api/" - const val BASE_URL_COMMON = "http://3.109.121.6:5002/api/" - // const val token = "636F8F63-06C4-4D95-8562-392B34025FB0" - - const val maxFileSize : Double = 5.0 - + const val BASE_URL = "http://3.109.121.6/api/" + const val maxFileSize: Double = 5.0 } } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/viewModels/OnBoardingViewModel.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/viewModels/OnBoardingViewModel.kt index e69c7f4..e9bd265 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/viewModels/OnBoardingViewModel.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/viewModels/OnBoardingViewModel.kt @@ -93,11 +93,10 @@ open class OnBoardingViewModel(private val mainRepository: MainRepository) : Vie val getPANDetailMutableData: MutableLiveData?> = MutableLiveData() fun getPANDetail( requestBody: String, - url: String, activity: Activity ) = viewModelScope.launch(handleError(activity)) { if (Common.isNetworkAvailable(activity)) { - val response = mainRepository.getPANDetailResponse(url,requestBody) + val response = mainRepository.getPANDetailResponse(requestBody) getPANDetailMutableData.postValue(handleResponse(response)) } } @@ -106,11 +105,10 @@ open class OnBoardingViewModel(private val mainRepository: MainRepository) : Vie fun getDocumentType( value: String, type: String, - url: String, activity: Activity ) = viewModelScope.launch(handleError(activity)) { if (Common.isNetworkAvailable(activity)) { - val response = mainRepository.getDocumentTypeResponse(url,value,type) + val response = mainRepository.getDocumentTypeResponse(value,type) getDocumentTypeMutableData.postValue(handleResponse(response)) } } @@ -143,11 +141,10 @@ open class OnBoardingViewModel(private val mainRepository: MainRepository) : Vie val getAllProductMutableData: MutableLiveData?> = MutableLiveData() fun getAllProduct( - url: String, activity: Activity ) = viewModelScope.launch(handleError(activity)) { if (Common.isNetworkAvailable(activity)) { - val response = mainRepository.getAllProduct(url) + val response = mainRepository.getAllProduct() getAllProductMutableData.postValue(handleResponse(response)) } } diff --git a/app/src/main/res/drawable/circle_red.xml b/app/src/main/res/drawable/circle_red.xml new file mode 100644 index 0000000..966ff34 --- /dev/null +++ b/app/src/main/res/drawable/circle_red.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/nivesh_logo.png b/app/src/main/res/drawable/nivesh_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3971909b04bea1f49cce7cecf3f1cdb0ee9952 GIT binary patch literal 2909 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 + + diff --git a/app/src/main/res/layout/fragment_get_started.xml b/app/src/main/res/layout/fragment_get_started.xml index dcce0fe..f991d1a 100644 --- a/app/src/main/res/layout/fragment_get_started.xml +++ b/app/src/main/res/layout/fragment_get_started.xml @@ -80,7 +80,8 @@ android:id="@+id/edtArnNumber" android:layout_width="match_parent" android:layout_height="wrap_content" - android:inputType="text" + android:inputType="number" + android:maxLength="7" android:textColorHint="@color/greyColor2" android:textSize="@dimen/text_size_14" android:padding="@dimen/margin_15" @@ -126,11 +127,12 @@ android:scaleType="fitXY" /> @@ -151,12 +153,14 @@ android:id="@+id/edtEUINNumber" android:layout_width="match_parent" android:layout_height="wrap_content" - android:inputType="number" - android:maxEms="18" + android:contentDescription="@string/euinNum" android:gravity="top|start" - app:mask="#### / #### / ####" + android:inputType="number" + android:maxLength="18" android:textColorHint="@color/greyColor2" - android:textSize="@dimen/text_size_14" /> + android:textSize="@dimen/text_size_14" + app:mask="#### / #### / ####" + tool:ignore="TouchTargetSizeCheck,EditableContentDescCheck" /> @@ -248,6 +252,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" + android:maxEms="30" android:textColorHint="@color/greyColor2" android:textSize="@dimen/text_size_14" tool:ignore="TextContrastCheck" /> @@ -420,7 +425,6 @@ android:hint="@string/addressProofType" android:inputType="none" android:labelFor="@+id/spInterestPayout" - android:padding="@dimen/margin_5" android:textColorHint="@color/greyColor2" android:textSize="@dimen/text_size_14" /> @@ -652,4 +656,31 @@ app:layout_constraintStart_toStartOf="@+id/btnNext" app:layout_constraintTop_toBottomOf="@+id/btnNext" /> + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_otp.xml b/app/src/main/res/layout/fragment_otp.xml index b059591..356947d 100644 --- a/app/src/main/res/layout/fragment_otp.xml +++ b/app/src/main/res/layout/fragment_otp.xml @@ -5,6 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/containerOTP" + android:background="@color/white" android:orientation="vertical"> @@ -268,6 +268,7 @@ android:layout_marginTop="@dimen/margin_15" android:text="@string/didNotGetOTP" android:textColor="@color/black" + android:visibility="gone" android:textSize="@dimen/text_size_16" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/txtTimerText" /> @@ -280,6 +281,7 @@ android:text="@string/resendOTP" android:textColor="@color/blue1" android:textSize="@dimen/text_size_16" + android:visibility="gone" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/txtDidNotGetOTP" diff --git a/app/src/main/res/layout/fragment_payment.xml b/app/src/main/res/layout/fragment_payment.xml new file mode 100644 index 0000000..06f16cc --- /dev/null +++ b/app/src/main/res/layout/fragment_payment.xml @@ -0,0 +1,352 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_save_e_agreement.xml b/app/src/main/res/layout/fragment_save_e_agreement.xml index 98f94a5..8a2e893 100644 --- a/app/src/main/res/layout/fragment_save_e_agreement.xml +++ b/app/src/main/res/layout/fragment_save_e_agreement.xml @@ -2,7 +2,8 @@ + android:orientation="vertical" + android:background="@color/white"> + + + + + + + + + + + \ 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 9e386d5..78af915 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -349,5 +349,11 @@ EUIN Name (Employee) success Aadhaar + minutes are remaining to complete the process + Associate + advisory + Join Nivesh + APPLY NOW + Please Wait... \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f4f08bc..f94d6d1 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -12,19 +12,23 @@ #E9161E #1F5ACE #00000000 + #99000000 #5077FF #006BFF #1FAEFF #0050A1 - #E92629 + #E92629 + #FFBCBC #323131 #757575 #D9D9D9 #E6EBE0 #303030 + #F6F6F6 + #8F8F99 #41CA00 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5538b84..94dc6a0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -304,7 +304,7 @@ Please enter valid OTP Enter the 6-digit verification code sent to SUBMIT - This session will end in 30 seconds. + This session will end in Didn\'t get the OTP RESEND OTP We sent a code to your mobile number @@ -362,5 +362,11 @@ EUIN Name (Employee) success Aadhaar + minutes are remaining to complete the process + Associate + advisory + Join Nivesh + APPLY NOW + Please Wait... \ No newline at end of file diff --git a/app/src/main/res/values/style.xml b/app/src/main/res/values/style.xml index 53402e2..928e5f8 100644 --- a/app/src/main/res/values/style.xml +++ b/app/src/main/res/values/style.xml @@ -152,7 +152,7 @@ diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index bf2c2ce..d18b55f 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -31,6 +31,12 @@ @color/white + +