diff --git a/app/build.gradle b/app/build.gradle index daf16a0..13e7f3e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,4 +73,6 @@ dependencies { // Navigation Components implementation "androidx.navigation:navigation-fragment-ktx:2.5.3" implementation "androidx.navigation:navigation-ui-ktx:2.5.3" + + implementation 'com.squareup.picasso:picasso:2.71828' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2008589..4438f52 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,6 +8,7 @@ + + @GET("Partner/GetPartnerDetails") + suspend fun getPartnerDetail( + @Query("PartnerCode") code: String, + @Header("AccessKey") value: String + ): Response + @POST("Partner/ValidatePartner") suspend fun postPartnerValidate(@Body validatePartnerRequest: ValidatePartnerRequest): Response @@ -34,15 +41,20 @@ interface ApiInterface { suspend fun getPANDetail(@Query("PAN") value: String): Response @GET("User/GetAllDocumentsType") - suspend fun getDocumentType(@Query("Role") value: String, @Query("Type") type: String): Response + suspend fun getDocumentType( + @Query("Role") value: String, + @Query("Type") type: String + ): Response @Multipart @POST("Partner/DocumentsUpload") suspend fun getUploadDocument( - @Part multiPartBody: List, +// @Part multiPartBody: List, + @Part multiPartBody: MultipartBody.Part, @Part("PartnerCode") partnerCode: Int, @Part("PartnerRole") partnerRole: Int, - @Part("DocumentId") documentId: Int + @Part("DocumentId") documentId: Int, + @Part("FileId") fileId: Int ): Response @POST("Partner/SaveEAgreement") @@ -50,4 +62,7 @@ interface ApiInterface { @GET("User/GetAllProduct") suspend fun getAllProduct(): Response + + @GET("User/GetAreaDetailByPincode") + suspend fun getAreaDetailByPinCode(@Query("Pincode") value: String): Response } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/Data.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/Data.kt index 7ad7875..dddabf6 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/Data.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/Data.kt @@ -1,18 +1,18 @@ package com.nivesh.production.partnerOnBoarding.model data class Data( - val Address1: String, - val Address2: String, - val Address3: String, - val Category: String, - val City: String, - val DOB: String, - val FirstName: String, - val FullName: String, - val Gender: String, - val LastName: String, - val MiddleName: Any, - val Pincode: String, - val State: String, - val Street: String + var Address1: String = "", + var Address2: String = "", + var Address3: String = "", + var Category: String = "", + var City: String = "", + var DOB: String = "", + var FirstName: String = "", + var FullName: String = "", + var Gender: String = "", + var LastName: String = "", + var MiddleName: Any = "", + var Pincode: String = "", + var State: String = "", + var Street: String = "" ) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/Filedetail.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/Filedetail.kt new file mode 100644 index 0000000..de6175f --- /dev/null +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/Filedetail.kt @@ -0,0 +1,8 @@ +package com.nivesh.production.partnerOnBoarding.model.response + +data class Filedetail( + val DocumentId: Int, + val FileId: Int, + val FilePath: String, + val FileSide: String +) : java.io.Serializable \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/GetAreaDetailByPinResponse.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/GetAreaDetailByPinResponse.kt new file mode 100644 index 0000000..0e8f889 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/GetAreaDetailByPinResponse.kt @@ -0,0 +1,7 @@ +package com.nivesh.production.partnerOnBoarding.model.response + +data class GetAreaDetailByPinResponse( + val Message: String, + val Result: ResultXXXXX, + val Status: String +) \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/PartnerDetailResponse.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/PartnerDetailResponse.kt new file mode 100644 index 0000000..ca8a1ae --- /dev/null +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/PartnerDetailResponse.kt @@ -0,0 +1,9 @@ +package com.nivesh.production.partnerOnBoarding.model.response + +import java.io.Serializable + +data class PartnerDetailResponse( + val Message: String, + val Result: ResultXXXX, + val Status: String +) : Serializable \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/ResultXXXX.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/ResultXXXX.kt new file mode 100644 index 0000000..9eabca3 --- /dev/null +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/ResultXXXX.kt @@ -0,0 +1,23 @@ +package com.nivesh.production.partnerOnBoarding.model.response + +import java.io.Serializable + +data class ResultXXXX( + val ARNNumber: String, + val Address1: String, + val Address2: String, + val City: String, + val DateOfExpiryAMFICertificate: String, + val DateOfIncorporation: String, + val DateOfPassingAMFICertificate: String, + val EUINNumber: String, + val Email: String, + val Mobile: String, + val Name: String, + val PAN: String, + val PartnerType: String, + val Pin: String, + val State: String, + val Step: Int, + val filedetails: List = emptyList() +) : Serializable \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/ResultXXXXX.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/ResultXXXXX.kt new file mode 100644 index 0000000..f84f87f --- /dev/null +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/model/response/ResultXXXXX.kt @@ -0,0 +1,8 @@ +package com.nivesh.production.partnerOnBoarding.model.response + +data class ResultXXXXX( + val CityId: String, + val CityName: String, + val StateId: String, + val StateName: 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 cd808f9..f7d8886 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 @@ -12,6 +12,9 @@ class MainRepository constructor(private val apiInterface: ApiInterface) { suspend fun getPartnerCreationResponse(requestBody: PartnerRequest, token: String) = apiInterface.postPartnerCreation(requestBody) + suspend fun getPartnerDetailResponse(value: String, token: String) = + apiInterface.getPartnerDetail(value,token) + suspend fun getValidatePartnerResponse(validatePartnerRequest: ValidatePartnerRequest) = apiInterface.postPartnerValidate(validatePartnerRequest) @@ -33,12 +36,15 @@ class MainRepository constructor(private val apiInterface: ApiInterface) { 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) + suspend fun getDocumentUploadResponse(multipartBody: MultipartBody.Part,pc: Int,pr: Int,di: Int,fileId: Int) = + apiInterface.getUploadDocument(multipartBody,pc,pr,di,fileId) suspend fun getSaveEAgreement(requestBody: RequestBody, token: String) = apiInterface.postSaveEAgreement(requestBody) suspend fun getAllProduct() = apiInterface.getAllProduct() + + suspend fun getAreaDetailByPinCode(value: String) = + apiInterface.getAreaDetailByPinCode(value) } \ No newline at end of file diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/activities/RegisterActivity.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/activities/RegisterActivity.kt index fe09d21..7058504 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/activities/RegisterActivity.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/activities/RegisterActivity.kt @@ -34,11 +34,11 @@ class RegisterActivity : BaseActivity() { } binding.btnDistributor.setOnClickListener { - commonMethod(4, "advisory") + commonMethod(4, "3")//advisory } binding.btnReferrer.setOnClickListener { - commonMethod(3, "Associate") + commonMethod(3, "4")//associate } binding.imgInfo.setOnClickListener { 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 990d31a..35aea22 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 @@ -1,5 +1,7 @@ package com.nivesh.production.partnerOnBoarding.ui.fragments +import android.annotation.SuppressLint +import android.app.Dialog import android.os.Build import android.os.Bundle import android.text.Editable @@ -8,6 +10,10 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.WindowManager +import android.webkit.WebView +import android.webkit.WebViewClient +import android.widget.TextView import android.widget.Toast import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider @@ -18,6 +24,7 @@ import com.nivesh.production.partnerOnBoarding.databinding.FragmentAlmostThereBi import com.nivesh.production.partnerOnBoarding.db.PreferenceManager import com.nivesh.production.partnerOnBoarding.model.DataX import com.nivesh.production.partnerOnBoarding.model.request.PartnerRequest +import com.nivesh.production.partnerOnBoarding.model.response.GetAreaDetailByPinResponse import com.nivesh.production.partnerOnBoarding.model.response.PANResponse import com.nivesh.production.partnerOnBoarding.model.response.PartnerResponse import com.nivesh.production.partnerOnBoarding.providerfactory.OnBoardingModelProviderFactory @@ -27,6 +34,9 @@ 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.util.Constants.Companion.privacyPolicyLink +import com.nivesh.production.partnerOnBoarding.util.Constants.Companion.tcLink +import com.nivesh.production.partnerOnBoarding.util.ProgressUtil import com.nivesh.production.partnerOnBoarding.viewModels.OnBoardingViewModel class AlmostThereFragment : BaseFragment() { @@ -179,11 +189,13 @@ class AlmostThereFragment : BaseFragment() { } binding.tvTermsAndCondition.setOnClickListener { - + dialogTCPrivacyPolicy(tcLink.plus("nivesh.html"), getString(R.string.termsAndCondition)) } - binding.tvPrivacyPolicy.setOnClickListener { + binding.tvPrivacyPolicy.setOnClickListener { + dialogTCPrivacyPolicy(privacyPolicyLink.plus("nivesh.html"), getString(R.string.privacy_policy)) } + binding.tvAgreement.setOnClickListener { } @@ -204,7 +216,7 @@ class AlmostThereFragment : BaseFragment() { partnerRequest.Mobile = arguments?.getString("mobile")!! partnerRequest.OtherProductName = "" partnerRequest.PartnerCode = PreferenceManager((activity as SignUpActivity)).getPartnerCode() - partnerRequest.PartnerType = "advisory" + partnerRequest.PartnerType = getString(R.string.advisory) partnerRequest.DateOfIncorporation = Common.getDateFromTimeMills(System.currentTimeMillis()) Log.e("check_partner", partnerRequest.toString()) apiPartnerCreation(partnerRequest) @@ -244,6 +256,71 @@ class AlmostThereFragment : BaseFragment() { showDialogValidation((activity as SignUpActivity),res.Message) } } + + if(panResponse != null){ + pinAPIForCityState(panResponse.Result.data.Pincode) + } + + (activity as SignUpActivity).viewModelOne.getAreaDetailByPinMutableData.observe( + viewLifecycleOwner + ) { response -> + val res: GetAreaDetailByPinResponse = + Gson().fromJson( + response?.data.toString(), + GetAreaDetailByPinResponse::class.java + ) + + binding.spCity.setText(res.Result.CityName) + binding.spState.setText(res.Result.StateName) + } + } + + private fun pinAPIForCityState(pinCode: String) { + try { + (activity as SignUpActivity).viewModelOne.getAreaDetailByPin( + pinCode, + (activity as SignUpActivity) + ) + } catch (e: Exception) { + ProgressUtil.hideLoading() + Log.e("checkPANError", e.message.toString()) + } + } + + @SuppressLint("SetJavaScriptEnabled") + private fun dialogTCPrivacyPolicy(url: String, type: String) { + var dialog = Dialog(activity as SignUpActivity) + dialog.setContentView(R.layout.dialog_t_c) + + val webViewNeedHelp = dialog.findViewById(R.id.webViewNeedHelp) + val txtCancel = dialog.findViewById(R.id.txtCancel) + val btnOk = dialog.findViewById(R.id.btnOk) + + val wvTitleTxt: TextView = dialog.findViewById(R.id.wvTitleTxt) + wvTitleTxt.text = type + + txtCancel.setOnClickListener{dialog.dismiss() } + btnOk.setOnClickListener{dialog.dismiss() } + + webViewNeedHelp.webViewClient = MyWebViewClient() + webViewNeedHelp.loadUrl(url) + webViewNeedHelp.settings.javaScriptEnabled = true + webViewNeedHelp.settings.domStorageEnabled = true + + dialog.show() + val lp = WindowManager.LayoutParams() + lp.copyFrom(dialog.window!!.attributes) + lp.width = WindowManager.LayoutParams.MATCH_PARENT + lp.height = WindowManager.LayoutParams.MATCH_PARENT + dialog.window!!.attributes = lp + + } + + class MyWebViewClient : WebViewClient() { + override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { + return super.shouldOverrideUrlLoading(view, url) + } + override fun onPageFinished(view: WebView, url: String) {} } private fun apiPartnerCreation(partnerRequest: PartnerRequest) { @@ -320,5 +397,4 @@ class AlmostThereFragment : BaseFragment() { return false } else return binding.cbCheck.isChecked } - } \ No newline at end of file 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 b9d8cfa..6d8fab9 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,7 +5,6 @@ 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 @@ -33,12 +32,14 @@ import androidx.appcompat.app.AlertDialog import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.core.content.FileProvider +import androidx.core.view.isVisible import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import com.google.android.material.textfield.MaterialAutoCompleteTextView import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout import com.google.gson.Gson +import com.google.gson.GsonBuilder import com.nivesh.production.partnerOnBoarding.BuildConfig import com.nivesh.production.partnerOnBoarding.R import com.nivesh.production.partnerOnBoarding.api.ApiClient @@ -53,12 +54,14 @@ import com.nivesh.production.partnerOnBoarding.repositories.MainRepository import com.nivesh.production.partnerOnBoarding.ui.activities.BaseActivity import com.nivesh.production.partnerOnBoarding.ui.activities.SignUpActivity import com.nivesh.production.partnerOnBoarding.util.* +import com.nivesh.production.partnerOnBoarding.util.Common.Companion.getDateFromTimeMills import com.nivesh.production.partnerOnBoarding.util.Common.Companion.getFileExtension import com.nivesh.production.partnerOnBoarding.util.Common.Companion.isValidIndividualPan import com.nivesh.production.partnerOnBoarding.util.Common.Companion.showDialogValidation import com.nivesh.production.partnerOnBoarding.util.Common.Companion.showDialogWithTwoButtons import com.nivesh.production.partnerOnBoarding.util.Constants.Companion.maxFileSize import com.nivesh.production.partnerOnBoarding.viewModels.OnBoardingViewModel +import com.squareup.picasso.Picasso import okhttp3.MediaType.Companion.toMediaType import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MultipartBody @@ -86,14 +89,26 @@ class GetStartedFragment : BaseFragment() { private var panFileExt: String? = "" private var docValue: String = "" private var isFront: Boolean = false + private var isBack: Boolean = false + private var isARN: Boolean = false + private var isEUIN: Boolean = false private lateinit var viewModel: OnBoardingViewModel - private lateinit var listOfDocType: List + private var listOfDocType: List = emptyList() + private var listOfFullDocType: List = emptyList() private var imageSelectedList = ArrayList() private var imageSelectedArnEuinList = ArrayList() private var arnList = ArrayList() private var arnData: DataX? = null private lateinit var panRes: PANResponse - private var selectedDocPosition = -1 + private var selectedDocPosition = -1 + private var documentUrlSelected: String = "" + private var documentTypeSelected: String = "" + private var isDataUpdate: Boolean = false + private val pt = PartnerRequest() + private var frontUpdatedFileId = 0 + private var backUpdatedFileId = 0 + private var arnUpdatedFileId = 0 + private var euinUpdatedFileId = 0 private val permissions = arrayOf( Manifest.permission.READ_EXTERNAL_STORAGE, @@ -156,22 +171,23 @@ class GetStartedFragment : BaseFragment() { )[OnBoardingViewModel::class.java] var docType = "I" - if (arguments?.getString("arnType").equals("Associate", true)) { + if (arguments?.getString("arnType").equals(getString(R.string.associateText), true)) { commonMethodForVisibility(View.GONE) docType = "N" - } else if (arguments?.getString("arnType").equals("advisory", true)) { + } else if (arguments?.getString("arnType").equals(getString(R.string.advisory), true)) { commonMethodForVisibility(View.VISIBLE) docType = "I" } + documentTypeFullAPI() documentTypeAPI(docType) binding.edtPassingAMFI.setOnClickListener { - Common.datePicker(activity as SignUpActivity, binding.edtPassingAMFI,false) + Common.datePicker(activity as SignUpActivity, binding.edtPassingAMFI, false) } binding.edtExpiryAMFI.setOnClickListener { - Common.datePicker(activity as SignUpActivity, binding.edtExpiryAMFI,true) + Common.datePicker(activity as SignUpActivity, binding.edtExpiryAMFI, true) } selectImageIntent = registerForActivityResult(ActivityResultContracts.GetContent()) @@ -194,24 +210,26 @@ class GetStartedFragment : BaseFragment() { override fun afterTextChanged(s: Editable?) {} }) - binding.edtEUINNumber.addTextChangedListener(object : TextWatcher{ + 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{ + 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( + addFragment( activity as BaseActivity, R.id.signUpContainer, QuestionsFragment(), @@ -247,10 +265,52 @@ class GetStartedFragment : BaseFragment() { } } + binding.saveDraft.setOnClickListener { + val partnerRequest = PartnerRequest() + + if (!TextUtils.isEmpty(binding.edtArnNumber.text.toString().trim())) { + partnerRequest.ARNNumber = binding.edtArnNumber.text.toString().trim() + } + if (binding.tlEUINNumber.isVisible && !TextUtils.isEmpty( + binding.edtEUINNumber.text.toString().trim() + ) + ) { + partnerRequest.EUINNumber = binding.edtEUINNumber.text.toString().trim() + } + if (binding.tlEUINNumberNF.isVisible && !TextUtils.isEmpty( + binding.edtEUINNumberNF.text.toString().trim() + ) + ) { + partnerRequest.EUINNumber = binding.edtEUINNumberNF.text.toString().trim() + } + if (!TextUtils.isEmpty(binding.edtPassingAMFI.text.toString().trim())) { + partnerRequest.DateOfPassingAMFICertificate = + binding.edtPassingAMFI.text.toString().trim() + } + if (!TextUtils.isEmpty(binding.edtExpiryAMFI.text.toString().trim())) { + partnerRequest.DateOfExpiryAMFICertificate = + binding.edtExpiryAMFI.text.toString().trim() + } + if (!TextUtils.isEmpty(binding.edtPanNumber.text.toString().trim())) { + partnerRequest.PAN = binding.edtPanNumber.text.toString().trim() + } + if (!TextUtils.isEmpty(binding.edtFullNamePanCard.text.toString().trim())) { + partnerRequest.Name = binding.edtFullNamePanCard.text.toString().trim() + } + + partnerRequest.Mobile = arguments?.getString("mobile")!! + partnerRequest.PartnerCode = + PreferenceManager((activity as SignUpActivity)).getPartnerCode() + partnerRequest.PartnerType = getString(R.string.advisory) + partnerRequest.DateOfIncorporation = + getDateFromTimeMills(System.currentTimeMillis()) + apiPartnerCreation(partnerRequest) + } + binding.btnNext.setOnClickListener { apiUploadDocument() if (arguments?.getString("arnType").equals(getString(R.string.associateText), false)) { - if(validationAssociate()) { + if (validationAssociate()) { val pt = PartnerRequest() pt.Name = binding.edtFullNamePanCard.text.toString() pt.PAN = binding.edtPanNumber.text.toString() @@ -258,14 +318,14 @@ class GetStartedFragment : BaseFragment() { val fragment = AlmostThereFragment() val bundle = Bundle() bundle.putSerializable("InputValue", pt) - if(arnData!=null) - bundle.putSerializable("arnData", arnData) + if (arnData != null) + bundle.putSerializable("arnData", arnData) bundle.putSerializable("panData", panRes) bundle.putString("mobile", arguments?.getString("mobile")) - bundle.putString("arnType",arguments?.getString("arnType")) + bundle.putString("arnType", arguments?.getString("arnType")) fragment.arguments = bundle - replaceFragment( + addFragment( activity as BaseActivity, R.id.signUpContainer, fragment, @@ -274,9 +334,11 @@ class GetStartedFragment : BaseFragment() { ) } - } else if (arguments?.getString("arnType").equals(getString(R.string.advisory), false)) { + } else if (arguments?.getString("arnType") + .equals(getString(R.string.advisory), false) + ) { if (validationAdvisory()) { - val pt = PartnerRequest() + pt.ARNNumber = binding.edtArnNumber.text.toString() if (binding.edtEUINNumber.visibility == View.VISIBLE) @@ -287,30 +349,20 @@ class GetStartedFragment : BaseFragment() { pt.Name = binding.edtFullNamePanCard.text.toString() pt.PAN = binding.edtPanNumber.text.toString() pt.DateOfPassingAMFICertificate = binding.edtPassingAMFI.text.toString() + pt.PartnerType = arguments?.getString("arnType").toString() + pt.PartnerCode = + PreferenceManager((activity as SignUpActivity)).getPartnerCode() + pt.Mobile = arguments?.getString("mobile").toString() + pt.DateOfIncorporation = getDateFromTimeMills(System.currentTimeMillis()) - val fragment = AlmostThereFragment() - val bundle = Bundle() - bundle.putSerializable("InputValue", pt) - 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 - ) + apiPartnerCreationContinue(pt) } } } binding.uploadFront.setOnClickListener { actionType = mainPANUpload - isFront = true + setImageUploadType(front = true, back = false, aRN = false, eUIN = false) if (docValue.isNotBlank() && docValue.isNotEmpty()) { selectImage() } else { @@ -323,9 +375,11 @@ class GetStartedFragment : BaseFragment() { binding.mbUploadChangeFront.setOnClickListener { actionType = mainPANUpload - isFront = true + setImageUploadType(front = true, back = false, aRN = false, eUIN = false) if (docValue.isNotBlank() && docValue.isNotEmpty()) { selectImage() + } else if (binding.ivFront.drawable != null) { + selectImage() } else { showDialogValidation( activity as SignUpActivity, @@ -336,9 +390,11 @@ class GetStartedFragment : BaseFragment() { binding.mbUploadChangeBack.setOnClickListener { actionType = mainPANUpload - isFront = false + setImageUploadType(front = false, back = true, aRN = false, eUIN = false) if (docValue.isNotBlank() && docValue.isNotEmpty()) { selectImage() + } else if (binding.ivBack.drawable != null) { + selectImage() } else { showDialogValidation( activity as SignUpActivity, @@ -349,7 +405,7 @@ class GetStartedFragment : BaseFragment() { binding.uploadBack.setOnClickListener { actionType = mainPANUpload - isFront = false + setImageUploadType(front = false, back = true, aRN = false, eUIN = false) if (docValue.isNotBlank() && docValue.isNotEmpty()) { selectImage() } else { @@ -362,11 +418,13 @@ class GetStartedFragment : BaseFragment() { binding.rlARNUpload.setOnClickListener { actionType = mainARNPhotoUpload + setImageUploadType(front = false, back = false, aRN = true, eUIN = false) selectImage() } binding.rlEUINUpload.setOnClickListener { actionType = mainEUINPhotoUpload + setImageUploadType(front = false, back = false, aRN = false, eUIN = true) selectImage() } @@ -377,11 +435,14 @@ class GetStartedFragment : BaseFragment() { if (arguments?.getString("arnType").equals(getString(R.string.advisory), true)) { if (!isValidIndividualPan(s.toString().trim())) { binding.rlEUINUpload.visibility = View.GONE + binding.edtEUINNumber.visibility = View.VISIBLE + binding.tlEUINNumber.visibility = View.VISIBLE } else { binding.rlEUINUpload.visibility = View.VISIBLE if (!TextUtils.isEmpty(binding.edtEUINNumber.text)) { binding.edtEUINNumberNF.setText(binding.edtEUINNumber.text.toString()) binding.edtEUINNumber.visibility = View.GONE + binding.tlEUINNumber.visibility = View.GONE } } } @@ -455,12 +516,197 @@ class GetStartedFragment : BaseFragment() { ) } } + + (activity as SignUpActivity).viewModelOne.getPartnerCreationSaveMutableData.observe( + viewLifecycleOwner + ) { response -> + val res: PartnerResponse = + Gson().fromJson( + response?.data.toString(), + PartnerResponse::class.java + ) + Log.e("check_res_partner", res.toString()) + if (res.Status != null) { + showDialogValidation((activity as SignUpActivity), "Detail Saved in Draft") + } + } + + (activity as SignUpActivity).viewModelOne.getPartnerCreationContinueMutableData.observe( + viewLifecycleOwner + ) { response -> + val res: PartnerResponse = + Gson().fromJson( + response?.data.toString(), + PartnerResponse::class.java + ) + + if (res.Status != null || res.Status == getString(R.string.successText)) { + val fragment = AlmostThereFragment() + val bundle = Bundle() + bundle.putSerializable("InputValue", pt) + bundle.putSerializable("arnData", arnData) + bundle.putSerializable("panData", panRes) + bundle.putString("mobile", arguments?.getString("mobile")) + bundle.putString("arnType", arguments?.getString("arnType")) + fragment.arguments = bundle + + addFragment( + activity as BaseActivity, + R.id.signUpContainer, + fragment, + "GET STARTED", + true + ) + } + } + + (activity as SignUpActivity).viewModelOne.getDocumentTypeFullMutableData.observe( + viewLifecycleOwner + ) { response -> + val res: DocumentTypeResponse = + Gson().fromJson( + response?.data.toString(), + DocumentTypeResponse::class.java + ) + + if (res.Status == getString(R.string.successText)) { + listOfFullDocType = res.Result.Data + } + } + + (activity as SignUpActivity).viewModelOne.getDocumentTypeMutableData.observe( + viewLifecycleOwner + ) { response -> + ProgressUtil.hideLoading() + val res: DocumentTypeResponse = + Gson().fromJson( + response?.data.toString(), + DocumentTypeResponse::class.java + ) + Log.e("checkDocRes", res.toString()) + if (res.Status == getString(R.string.successText)) { + listOfDocType = res.Result.Data + if (listOfDocType.isNotEmpty()) { + setUpDocAdapter(listOfDocType) + + if (arguments?.containsKey("partnerResponse") == true) { + val partnerDetailResponse: PartnerDetailResponse? = + (arguments?.getSerializable("partnerResponse") as? PartnerDetailResponse) + setUpPartnerResponseData(partnerDetailResponse) + } + } + apiAMFIDetail("Mobile", arguments?.getString("mobile")) + } + } + + (activity as SignUpActivity).viewModelOne.getDocumentUploadMutableData.observe( + viewLifecycleOwner + ) { response -> + 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() + } + } + } + + private fun setImageUploadType(front: Boolean, back: Boolean, aRN: Boolean, eUIN: Boolean) { + isFront = front + isBack = back + isARN = aRN + isEUIN = eUIN + } + + private fun setUpPartnerResponseData(partnerResponse: PartnerDetailResponse?) { + if (partnerResponse?.Result?.ARNNumber != null) { + binding.edtArnNumber.setText(partnerResponse.Result.ARNNumber) + } + + if (partnerResponse?.Result?.EUINNumber != null) { + binding.edtEUINNumber.setText(partnerResponse.Result.EUINNumber) + } + + if (partnerResponse?.Result?.DateOfPassingAMFICertificate != null) { + binding.edtPassingAMFI.setText(partnerResponse.Result.DateOfPassingAMFICertificate) + } + + if (partnerResponse?.Result?.DateOfExpiryAMFICertificate != null) { + binding.edtExpiryAMFI.setText(partnerResponse.Result.DateOfExpiryAMFICertificate) + } + + if (partnerResponse?.Result?.PAN != null) { + binding.edtPanNumber.setText(partnerResponse.Result.PAN) + } + + if (partnerResponse?.Result?.Name != null) { + binding.edtFullNamePanCard.setText(partnerResponse.Result.Name) + } + + if (partnerResponse?.Result?.filedetails != null && partnerResponse.Result.filedetails.isNotEmpty()) { + if (listOfFullDocType != null && listOfFullDocType.isNotEmpty()) { + for (i in listOfFullDocType.indices) { + for (j in partnerResponse.Result.filedetails.indices) { + if (listOfFullDocType[i].DocumentId == partnerResponse.Result.filedetails[j].DocumentId) { + for(k in listOfDocType.indices) { + if(listOfFullDocType[i].DocumentType == listOfDocType[k].DocumentType) { + binding.spDocType.setText(listOfDocType[k].DocumentType) + setUpDocAdapter(listOfDocType) + } + } + if (partnerResponse.Result.filedetails[j].FilePath != null) { + isDataUpdate = true + documentUrlSelected = partnerResponse.Result.filedetails[j].FilePath + documentTypeSelected = listOfFullDocType[i].DocumentType + setVisibilityUrl(documentTypeSelected) + setFrontHideVisibleUrl(j, documentUrlSelected,partnerResponse.Result.filedetails[j].DocumentId, + partnerResponse.Result.filedetails[j].FileId) + } + } + } + } + } + } + } + + private fun setUpDocAdapter(listOfDocType: List) { + val adapter = ArrayAdapter( + activity as SignUpActivity, + android.R.layout.simple_list_item_1, + listOfDocType + ) + binding.spDocType.setAdapter(adapter) + } + + private fun apiPartnerCreation(partnerRequest: PartnerRequest) { + val data = GsonBuilder().create().toJson(partnerRequest, PartnerRequest::class.java) + Log.e("partnerCreation", data.toString()) + (activity as SignUpActivity).viewModelOne.getPartnerCreateSaveData( + partnerRequest, + "", + (activity as SignUpActivity) + ) + } + + private fun apiPartnerCreationContinue(partnerRequest: PartnerRequest) { + val data = GsonBuilder().create().toJson(partnerRequest, PartnerRequest::class.java) + Log.e("partnerCreationContinue", data.toString()) + (activity as SignUpActivity).viewModelOne.getPartnerCreateContinueData( + partnerRequest, + "", + (activity as SignUpActivity) + ) } private fun commonMethodForVisibility(visibility: Int) { binding.edtArnNumber.visibility = visibility binding.tlArnNumber.visibility = visibility binding.edtEUINNumber.visibility = visibility + binding.tlEUINNumber.visibility = visibility binding.tlArnNumber.visibility = visibility binding.edtPassingAMFI.visibility = visibility binding.tlPassingAMFI.visibility = visibility @@ -468,38 +714,29 @@ class GetStartedFragment : BaseFragment() { binding.tlExpiryAMFI.visibility = visibility } - private fun documentTypeAPI(docType: String) { - try { - ProgressUtil.showLoading(activity as SignUpActivity) - (activity as SignUpActivity).viewModelOne.getDocumentType( + private fun documentTypeFullAPI() { + + if (listOfDocType != null && listOfDocType.isEmpty()) { + Log.e("check_activity_name", (activity as SignUpActivity).localClassName) + (activity as SignUpActivity).viewModelOne.getDocumentTypeFull( "3",//Currently it is static - docType, -// Constants.BASE_URL_COMMON + "User/GetAllDocumentsType", + "", (activity as SignUpActivity) ) + } + } - ProgressUtil.hideLoading() - (activity as SignUpActivity).viewModelOne.getDocumentTypeMutableData.observe( - viewLifecycleOwner - ) { response -> - val res: DocumentTypeResponse = - Gson().fromJson( - response?.data.toString(), - DocumentTypeResponse::class.java - ) - Log.e("checkDocRes", res.toString()) - if (res.Status == getString(R.string.successText)) { - listOfDocType = res.Result.Data - if (listOfDocType.isNotEmpty()) { - val adapter = ArrayAdapter( - activity as SignUpActivity, - android.R.layout.simple_list_item_1, - listOfDocType - ) - binding.spDocType.setAdapter(adapter) - } - } - apiAMFIDetail("Mobile", arguments?.getString("mobile")) + @SuppressLint("SuspiciousIndentation") + private fun documentTypeAPI(docType: String) { + try { + if (listOfDocType != null && listOfDocType.isEmpty()) { + ProgressUtil.showLoading(activity as SignUpActivity) + Log.e("check_activity_name", (activity as SignUpActivity).localClassName) + (activity as SignUpActivity).viewModelOne.getDocumentType( + "3",//Currently it is static + docType, + (activity as SignUpActivity) + ) } } catch (e: Exception) { @@ -616,17 +853,13 @@ class GetStartedFragment : BaseFragment() { binding.tlPanNumber, getString(R.string.pleaseArnNum) ) - }else if (binding.edtFullNamePanCard.text.toString().isEmpty()) { + } 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 + } else return true } private fun validationAdvisory(): Boolean { @@ -636,13 +869,16 @@ class GetStartedFragment : BaseFragment() { binding.tlArnNumber, getString(R.string.pleaseArnNum) ) - } else if (binding.edtEUINNumber.visibility != View.VISIBLE && 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() + } else if (binding.edtEUINNumberNF.visibility != View.VISIBLE && binding.edtEUINNumberNF.text.toString() + .isEmpty() ) { commonErrorMethod( binding.edtEUINNumberNF, @@ -667,25 +903,39 @@ class GetStartedFragment : BaseFragment() { binding.tlPanNumber, getString(R.string.emptyPAN) ) - }else if (!isPanVerify) { + } else if (!isPanVerify) { commonErrorMethod( binding.edtPanNumber, binding.tlPanNumber, getString(R.string.invalidPAN) ) - } - else if (binding.edtFullNamePanCard.text.toString().isEmpty()) { + } 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) { - showDialogValidation( - (activity as SignUpActivity), - resources.getString(R.string.selectAddressProof) - ) - false + } else if (!isDataUpdate) { + if (imageSelectedList == null || imageSelectedList.size == 0) { + showDialogValidation( + (activity as SignUpActivity), + resources.getString(R.string.selectAddressProof) + ) + return false + } else true + } else if (isDataUpdate) { + return if (TextUtils.isEmpty(documentTypeSelected) && TextUtils.isEmpty( + documentUrlSelected + ) + ) { + showDialogValidation( + (activity as SignUpActivity), + getString(R.string.addressProofType) + ) + false + } else { + true + } } else { true } @@ -786,6 +1036,19 @@ class GetStartedFragment : BaseFragment() { } } + private fun setVisibilityUrl(s: String) { + binding.llDoc.visibility = View.VISIBLE + if (s.contains(getString(R.string.aadhaarText))) { + binding.txtFront.visibility = View.VISIBLE + binding.txtBack.visibility = View.VISIBLE + binding.llBack.visibility = View.VISIBLE + } else { + binding.txtFront.visibility = View.VISIBLE + binding.txtBack.visibility = View.GONE + binding.llBack.visibility = View.GONE + } + } + private fun getTmpFileUri(): Uri { val tmpFile = File.createTempFile("tmp_image_file", ".png", requireActivity().cacheDir).apply { @@ -876,12 +1139,15 @@ class GetStartedFragment : BaseFragment() { if (type == "c") { encodedPANBase64(fileExtension) if (isFront) imageSelectedList.add(ImageSelectedModel(0, fileExtension)) - else imageSelectedList.add(ImageSelectedModel(0, fileExtension)) + else imageSelectedList.add(ImageSelectedModel(1, fileExtension)) } else { val bitmap: Bitmap = MediaStore.Images.Media.getBitmap(context?.contentResolver, uri) - val fileName: String = System.currentTimeMillis().toString() + var fileName = "" + if (isFront) fileName = "FRONT_".plus(System.currentTimeMillis().toString()) + else if (isBack) fileName = + "BACK_".plus(System.currentTimeMillis().toString()) val file = File(fileDir, fileName.plus(".png")) val fOut = FileOutputStream(file) @@ -891,7 +1157,7 @@ class GetStartedFragment : BaseFragment() { fOut.close() if (file.exists()) encodedPANBase64(file) - if (isFront) imageSelectedList.add(ImageSelectedModel(1, file)) + if (isFront) imageSelectedList.add(ImageSelectedModel(0, file)) else imageSelectedList.add(ImageSelectedModel(1, file)) Log.e("check_panString", panString + "\n" + bitmap.toString()) } @@ -978,83 +1244,62 @@ class GetStartedFragment : BaseFragment() { private fun apiUploadDocument() { if (imageSelectedList != null && imageSelectedList.size != 0) { - - val part = ArrayList() - - 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 + for (i in 0 until imageSelectedList.size) { + if (imageSelectedList[i].pos == 0) { + apiUploadRequest( + prepareImagePart(imageSelectedList[i].file, "front"), + listOfDocType[selectedDocPosition].DocumentId,frontUpdatedFileId + ) + } else if (imageSelectedList[i].pos == 1) { + apiUploadRequest( + prepareImagePart(imageSelectedList[i].file, "back"), + listOfDocType[selectedDocPosition].DocumentId,backUpdatedFileId ) - - if (res.Status == getString(R.string.successText)) { - Toast.makeText(activity as SignUpActivity, res.Message, Toast.LENGTH_LONG) - .show() } } } - 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.file, "EUIN")) - } - } - - (activity as SignUpActivity).viewModelOne.getDocumentUpload( - part, - 3, - 5, - 8, - (activity as SignUpActivity) - ) - (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 (imageSelectedArnEuinList != null) { + for (i in 0 until imageSelectedArnEuinList.size) { + if (imageSelectedArnEuinList[i].pos == 0) { + for (j in listOfFullDocType.indices) { + if (listOfFullDocType[j].DocumentType.contains("ARN", ignoreCase = true)) { + apiUploadRequest( + prepareImagePart( + imageSelectedArnEuinList[i].file, + "front" + ), listOfFullDocType[j].DocumentId,arnUpdatedFileId + ) + break + } + } + } else if (imageSelectedArnEuinList[i].pos == 1) { + for (element in listOfFullDocType) { + if (element.DocumentType.contains("EUIN", ignoreCase = true)) { + apiUploadRequest( + prepareImagePart( + imageSelectedArnEuinList[i].file, + "front" + ), listOfFullDocType[i].DocumentId,euinUpdatedFileId + ) + } + } } } } } + private fun apiUploadRequest(imagePart: MultipartBody.Part, documentId: Int,fileId: Int) { + (activity as SignUpActivity).viewModelOne.getDocumentUpload( + imagePart, + PreferenceManager((activity as SignUpActivity)).getPartnerCode().toInt(), + 5, + documentId, + fileId, + (activity as SignUpActivity) + ) + } + private fun prepareImagePart(file: File, partName: String): MultipartBody.Part { val requestBody: RequestBody = file.asRequestBody("application/octet-stream".toMediaTypeOrNull()) @@ -1080,4 +1325,38 @@ class GetStartedFragment : BaseFragment() { binding.ivBack.setImageURI(uri) } } + + private fun setFrontHideVisibleUrl(pos: Int, url: String, documentId: Int, fileId: Int) { + if (pos == 0) { + binding.uploadFront.visibility = View.GONE + binding.ivFrontLayer.setBackgroundColor(Color.parseColor("#99000000")) + binding.ivFrontTik.setBackgroundResource(R.drawable.svg_tik) + binding.mbUploadChangeFront.visibility = View.VISIBLE + frontUpdatedFileId = fileId + Picasso.get().load(url).into(binding.ivFront) + } else { + binding.uploadBack.visibility = View.GONE + binding.ivBackLayer.setBackgroundColor(Color.parseColor("#99000000")) + binding.ivBackTik.setBackgroundResource(R.drawable.svg_tik) + binding.mbUploadChangeBack.visibility = View.VISIBLE + backUpdatedFileId = fileId + Picasso.get().load(url).into(binding.ivBack) + } + + for(i in listOfFullDocType.indices){ + if(documentId == listOfFullDocType[i].DocumentId){ + if(listOfFullDocType[i].DocumentType.contains("ARN",ignoreCase = true)){ + Picasso.get().load(url).into(binding.ivARNUpload) + binding.tvUploadARNTitle.visibility = View.GONE + arnUpdatedFileId = fileId + break + }else if(listOfFullDocType[i].DocumentType.contains("EUIN",ignoreCase = true)){ + Picasso.get().load(url).into(binding.ivEUINUpload) + binding.tvUploadEUINTitle.visibility = View.GONE + euinUpdatedFileId = fileId + break + } + } + } + } } \ No newline at end of file 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 924cae4..ef026e4 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 @@ -180,7 +180,7 @@ class OTPFragment : BaseFragment() { fragment.arguments = bundle - replaceFragment( + addFragment( activity as BaseActivity, R.id.signUpContainer, fragment, diff --git a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/QuestionsFragment.kt b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/QuestionsFragment.kt index ec3f98a..1cbf443 100644 --- a/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/QuestionsFragment.kt +++ b/app/src/main/java/com/nivesh/production/partnerOnBoarding/ui/fragments/QuestionsFragment.kt @@ -1,5 +1,7 @@ package com.nivesh.production.partnerOnBoarding.ui.fragments +import android.content.Intent +import android.net.Uri import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -33,5 +35,11 @@ class QuestionsFragment : BaseFragment() { binding.header.ivBack.setOnClickListener{ (activity as SignUpActivity).onBackPressedDispatcher.onBackPressed() } + + binding.header.tvHelpCall.setOnClickListener{ + val intent = Intent(Intent.ACTION_CALL); + intent.data = Uri.parse("tel:18001801818") + startActivity(intent) + } } } \ 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 bfc9186..8399b63 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 @@ -3,6 +3,7 @@ package com.nivesh.production.partnerOnBoarding.ui.fragments import android.annotation.SuppressLint import android.app.AlertDialog import android.app.Dialog +import android.content.Intent import android.os.Bundle import android.text.Editable import android.text.InputFilter @@ -22,6 +23,7 @@ import com.nivesh.production.partnerOnBoarding.db.PreferenceManager import com.nivesh.production.partnerOnBoarding.model.request.SendOTPRequest import com.nivesh.production.partnerOnBoarding.model.response.SendOTPResponse import com.nivesh.production.partnerOnBoarding.model.response.ValidateOTPResponse +import com.nivesh.production.partnerOnBoarding.ui.activities.RegisterActivity import com.nivesh.production.partnerOnBoarding.ui.activities.SignUpActivity import com.nivesh.production.partnerOnBoarding.util.Common import okhttp3.MediaType.Companion.toMediaType @@ -57,12 +59,6 @@ class SaveEAgreementFragment : BaseFragment() { smsAPI() } - (activity as SignUpActivity).viewModelOne.getSaveEAgreementMutableData.observe( - viewLifecycleOwner - ) { response -> - - } - (activity as SignUpActivity).viewModelOne.getSaveEAgreementMutableData.observe( viewLifecycleOwner ) { response -> @@ -107,8 +103,13 @@ class SaveEAgreementFragment : BaseFragment() { builder.setMessage(message) builder.setCancelable(false) if (activity != null) { - builder.setPositiveButton(getString(R.string.Ok)) { dialogInterface, _ -> - dialogInterface.dismiss() + builder.setPositiveButton(getString(R.string.Ok)) { _, _ -> + val openIntent = Intent( + (activity as SignUpActivity), + RegisterActivity::class.java + ) + openIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) + (activity as SignUpActivity).startActivity(openIntent) } } builder.show() @@ -218,7 +219,6 @@ class SaveEAgreementFragment : BaseFragment() { txtResendOTP.setOnClickListener{ if(dialog.isShowing) dialog.cancel() - } btnSubmit.setOnClickListener { @@ -295,7 +295,6 @@ class SaveEAgreementFragment : BaseFragment() { "", (activity as SignUpActivity) ) - } private fun smsAPI() { 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 0bd01f4..1933ad2 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 @@ -12,15 +12,18 @@ import android.view.View import android.view.ViewGroup import androidx.core.content.ContextCompat import androidx.core.widget.TextViewCompat +import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import com.google.android.material.button.MaterialButton import com.google.gson.Gson +import com.google.gson.GsonBuilder import com.nivesh.production.partnerOnBoarding.R import com.nivesh.production.partnerOnBoarding.api.ApiClient import com.nivesh.production.partnerOnBoarding.databinding.FragmentSignupBinding import com.nivesh.production.partnerOnBoarding.db.PreferenceManager import com.nivesh.production.partnerOnBoarding.model.request.PartnerRequest import com.nivesh.production.partnerOnBoarding.model.request.ValidatePartnerRequest +import com.nivesh.production.partnerOnBoarding.model.response.PartnerDetailResponse import com.nivesh.production.partnerOnBoarding.model.response.PartnerResponse import com.nivesh.production.partnerOnBoarding.model.response.ValidatePartnerResponse import com.nivesh.production.partnerOnBoarding.providerfactory.OnBoardingModelProviderFactory @@ -29,6 +32,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.isValidMobileNumber +import com.nivesh.production.partnerOnBoarding.util.Constants import com.nivesh.production.partnerOnBoarding.viewModels.OnBoardingViewModel class SignUpFragment : BaseFragment() { @@ -107,7 +111,7 @@ class SignUpFragment : BaseFragment() { (activity as SignUpActivity).viewModelOne.getValidatePartnerMutableData.observe( viewLifecycleOwner ) { response -> - Log.e("check_res_login", response?.data.toString()) + val validatePartnerResponse: ValidatePartnerResponse = Gson().fromJson( response?.data.toString(), @@ -118,7 +122,8 @@ class SignUpFragment : BaseFragment() { if (validatePartnerResponse.Result.IsPartialRegistered) { PreferenceManager(activity as SignUpActivity).setPartnerCode( validatePartnerResponse.Result.PartnerCode) - setUpOTPFragment(validatePartnerResponse.Result.PartnerCode) + + checkPartnerDetail(validatePartnerResponse.Result.PartnerCode) } else { val partnerRequest = PartnerRequest() @@ -137,6 +142,55 @@ class SignUpFragment : BaseFragment() { Common.showDialogValidation((activity as SignUpActivity),validatePartnerResponse.Message) } } + + (activity as SignUpActivity).viewModelOne.getPartnerDetailMutableData.observe( + viewLifecycleOwner + ) { response -> + val partnerDetailResponse: PartnerDetailResponse = + Gson().fromJson( + response?.data.toString(), + PartnerDetailResponse::class.java + ) + if(partnerDetailResponse.Status == getString(R.string.successText)){ + if(partnerDetailResponse.Result.Step == 1){ + setUpOTPFragment(PreferenceManager((activity as SignUpActivity)).getPartnerCode()) + }else if(partnerDetailResponse.Result.Step != 1){ + Log.e("check_otp_res", response?.data.toString()) + val bundle = Bundle() + bundle.putString("mobile", partnerDetailResponse.Result.Mobile) + bundle.putString("arnType", arguments?.getString("arnType")) + bundle.putSerializable("partnerResponse",partnerDetailResponse) + var fragment = Fragment() + if (type == 4) { + when (partnerDetailResponse.Result.Step) { + 2 -> fragment = GetStartedFragment() + 3 -> fragment = AlmostThereFragment() + 4 -> fragment = SaveEAgreementFragment() + } + } else if (type == 3) { + fragment = NewDistributorSignStepOne() + } + + fragment.arguments = bundle + + addFragment( + activity as BaseActivity, + R.id.signUpContainer, + fragment, + "GET STARTED", + true + ) + } + } + } + } + + private fun checkPartnerDetail(partnerCode: String) { + (activity as SignUpActivity).viewModelOne.getPartnerDetailData( + partnerCode, + Constants.accessKey, + (activity as SignUpActivity) + ) } private fun setUpOTPFragment(partnerCode: String) { @@ -158,7 +212,6 @@ class SignUpFragment : BaseFragment() { ) } - private fun validate(): Boolean { return if (binding.edtMobileNumber.text.toString().isEmpty()) { // EditText Common.commonErrorMethod( @@ -182,5 +235,4 @@ class SignUpFragment : BaseFragment() { return true } } - } \ No newline at end of file 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 58c17f6..ad9eb66 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 @@ -262,11 +262,18 @@ class Common { val datePickerDialog = DatePickerDialog( activity as SignUpActivity, { _, years, monthOfYear, dayOfMonth -> var monthsCount = (monthOfYear+1) - preSelectedDate = if (monthsCount.toString().length == 1) { - years.toString().plus("-").plus("0".plus(monthOfYear)).plus("-").plus(dayOfMonth) + var selectedDay = if(dayOfMonth.toString().length == 1){ + "0$dayOfMonth" }else { - years.toString().plus("-").plus(monthOfYear).plus("-").plus(dayOfMonth) + dayOfMonth } + var monthYear = if (monthsCount.toString().length == 1) { + "0".plus(monthOfYear) + }else { + monthOfYear + } + + preSelectedDate = years.toString().plus("-").plus(monthYear).plus("-").plus(selectedDay) edtDOB.setText(preSelectedDate) edtDOB.setSelection(edtDOB.text.toString().length) }, year, month, day 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 9f34e65..b9d512b 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 @@ -4,6 +4,9 @@ class Constants { companion object { const val BASE_URL = "http://3.109.121.6/api/" + const val privacyPolicyLink = "https://androidprivacypolicy.s3.ap-south-1.amazonaws.com/" + const val tcLink = "https://www.nivesh.com/en/terms-and-conditions" const val maxFileSize: Double = 5.0 + const val accessKey: String = "hcdCy0roNswTNTBaHZZdSemiKojB2yrH" } } \ 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 e9bd265..a1e3451 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 @@ -31,6 +31,46 @@ open class OnBoardingViewModel(private val mainRepository: MainRepository) : Vie } } + val getPartnerCreationSaveMutableData: MutableLiveData?> = + MutableLiveData() + + fun getPartnerCreateSaveData( + requestBody: PartnerRequest, + token: String, + activity: Activity + ) = viewModelScope.launch(handleError(activity)) { + if (Common.isNetworkAvailable(activity)) { + val response = mainRepository.getPartnerCreationResponse(requestBody, token) + getPartnerCreationSaveMutableData.postValue(handleResponse(response)) + } + } + + val getPartnerCreationContinueMutableData: MutableLiveData?> = + MutableLiveData() + + fun getPartnerCreateContinueData( + requestBody: PartnerRequest, + token: String, + activity: Activity + ) = viewModelScope.launch(handleError(activity)) { + if (Common.isNetworkAvailable(activity)) { + val response = mainRepository.getPartnerCreationResponse(requestBody, token) + getPartnerCreationContinueMutableData.postValue(handleResponse(response)) + } + } + + val getPartnerDetailMutableData: MutableLiveData?> = MutableLiveData() + fun getPartnerDetailData( + partnerCode: String, + token: String, + activity: Activity + ) = viewModelScope.launch(handleError(activity)) { + if (Common.isNetworkAvailable(activity)) { + val response = mainRepository.getPartnerDetailResponse(partnerCode, token) + getPartnerDetailMutableData.postValue(handleResponse(response)) + } + } + val getValidatePartnerMutableData: MutableLiveData?> = MutableLiveData() fun getPartnerValidate( validatePartnerRequest: ValidatePartnerRequest, @@ -55,7 +95,9 @@ open class OnBoardingViewModel(private val mainRepository: MainRepository) : Vie } } - val getSendOTPSaveEAgreementMutableData: MutableLiveData?> = MutableLiveData() + val getSendOTPSaveEAgreementMutableData: MutableLiveData?> = + MutableLiveData() + fun getSaveEAgreementSendOTP( sendOTPRequest: SendOTPRequest, token: String, @@ -108,21 +150,35 @@ open class OnBoardingViewModel(private val mainRepository: MainRepository) : Vie activity: Activity ) = viewModelScope.launch(handleError(activity)) { if (Common.isNetworkAvailable(activity)) { - val response = mainRepository.getDocumentTypeResponse(value,type) + val response = mainRepository.getDocumentTypeResponse(value, type) getDocumentTypeMutableData.postValue(handleResponse(response)) } } + val getDocumentTypeFullMutableData: MutableLiveData?> = MutableLiveData() + fun getDocumentTypeFull( + value: String, + type: String, + activity: Activity + ) = viewModelScope.launch(handleError(activity)) { + if (Common.isNetworkAvailable(activity)) { + val response = mainRepository.getDocumentTypeResponse(value, type) + getDocumentTypeFullMutableData.postValue(handleResponse(response)) + } + } + val getDocumentUploadMutableData: MutableLiveData?> = MutableLiveData() fun getDocumentUpload( - multipartBody: List, +// multipartBody: List, + multipartBody: MultipartBody.Part, pc: Int, pr: Int, di: Int, + fileId: Int, activity: Activity ) = viewModelScope.launch(handleError(activity)) { if (Common.isNetworkAvailable(activity)) { - val response = mainRepository.getDocumentUploadResponse(multipartBody,pc,pr,di) + val response = mainRepository.getDocumentUploadResponse(multipartBody, pc, pr, di,fileId) getDocumentUploadMutableData.postValue(handleResponse(response)) } } @@ -148,4 +204,15 @@ open class OnBoardingViewModel(private val mainRepository: MainRepository) : Vie getAllProductMutableData.postValue(handleResponse(response)) } } + + val getAreaDetailByPinMutableData: MutableLiveData?> = MutableLiveData() + fun getAreaDetailByPin( + pin: String, + activity: Activity + ) = viewModelScope.launch(handleError(activity)) { + if (Common.isNetworkAvailable(activity)) { + val response = mainRepository.getAreaDetailByPinCode(pin) + getAreaDetailByPinMutableData.postValue(handleResponse(response)) + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/round_blue_solid.xml b/app/src/main/res/drawable/round_blue_solid.xml new file mode 100644 index 0000000..b4da4e0 --- /dev/null +++ b/app/src/main/res/drawable/round_blue_solid.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/svg_close.xml b/app/src/main/res/drawable/svg_close.xml index 5e8560a..844b6b6 100644 --- a/app/src/main/res/drawable/svg_close.xml +++ b/app/src/main/res/drawable/svg_close.xml @@ -1,20 +1,5 @@ - - - - - - - \ No newline at end of file + + + diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml index ed62148..50153e1 100644 --- a/app/src/main/res/layout/activity_register.xml +++ b/app/src/main/res/layout/activity_register.xml @@ -73,7 +73,6 @@ app:layout_constraintStart_toEndOf="@+id/txtAccount" app:layout_constraintTop_toTopOf="parent" /> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_almost_there.xml b/app/src/main/res/layout/fragment_almost_there.xml index cbfb7bc..0b82a06 100644 --- a/app/src/main/res/layout/fragment_almost_there.xml +++ b/app/src/main/res/layout/fragment_almost_there.xml @@ -4,6 +4,7 @@ xmlns:tool="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@color/white" android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_get_started.xml b/app/src/main/res/layout/fragment_get_started.xml index f991d1a..ebca3f1 100644 --- a/app/src/main/res/layout/fragment_get_started.xml +++ b/app/src/main/res/layout/fragment_get_started.xml @@ -4,6 +4,7 @@ xmlns:tool="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@color/white" android:orientation="vertical"> @@ -93,17 +94,17 @@ android:id="@+id/rlARNUpload" android:layout_width="match_parent" android:layout_height="wrap_content" - android:visibility="gone" android:layout_marginTop="@dimen/margin_10" + android:visibility="gone" app:layout_constraintTop_toBottomOf="@+id/tlArnNumber"> + android:text="@string/uploadArnCard" + android:textColor="@color/black" /> - - - - - + android:layout_below="@+id/tvUploadFormat" + android:layout_marginTop="@dimen/margin_5" + android:background="@drawable/dot_rect"> - + + + + + @@ -178,11 +179,11 @@ android:id="@+id/edtPassingAMFI" android:layout_width="match_parent" android:layout_height="wrap_content" - android:inputType="none" - android:focusable="false" android:drawableStart="@drawable/svg_cal" android:drawablePadding="@dimen/margin_10" + android:focusable="false" android:gravity="center_vertical" + android:inputType="none" android:textColorHint="@color/greyColor2" android:textSize="@dimen/text_size_14" /> @@ -202,11 +203,11 @@ android:id="@+id/edtExpiryAMFI" android:layout_width="match_parent" android:layout_height="wrap_content" - android:inputType="none" - android:focusable="false" android:drawableStart="@drawable/svg_cal" android:drawablePadding="@dimen/margin_10" + android:focusable="false" android:gravity="center_vertical" + android:inputType="none" android:textColorHint="@color/greyColor2" android:textSize="@dimen/text_size_14" /> @@ -228,8 +229,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:digits="@string/panDigit" - android:maxLength="10" android:inputType="textCapCharacters" + android:maxLength="10" android:textColorHint="@color/greyColor2" android:textSize="@dimen/text_size_14" tool:ignore="TextContrastCheck" /> @@ -263,8 +264,8 @@ android:id="@+id/rlEUINUpload" android:layout_width="match_parent" android:layout_height="wrap_content" - android:visibility="gone" android:layout_marginTop="@dimen/margin_10" + android:visibility="gone" app:layout_constraintTop_toBottomOf="@+id/tlFullNamePanCard"> + android:padding="@dimen/margin_3"> + android:textSize="@dimen/text_size_14" + app:mask="#### / #### / ####" /> + android:text="@string/uploadEUINCard" + android:textColor="@color/black" /> + android:text="@string/format_png_or_jpg" /> + android:text="@string/upload" + android:textColor="@color/lightBlue1" /> @@ -370,7 +371,7 @@ android:layout_marginStart="@dimen/margin_8" android:layout_marginTop="@dimen/margin_25" android:padding="@dimen/margin_4" - android:text="Add ADDRESS PROOF" + android:text="@string/add_address_proof" android:textColor="@color/black" android:textSize="@dimen/text_size_14" android:textStyle="bold" @@ -398,7 +399,7 @@ android:layout_marginStart="@dimen/margin_8" android:layout_marginTop="@dimen/margin_3" android:padding="@dimen/margin_4" - android:text="Choose the document type" + android:text="@string/choose_the_document_type" android:textColor="@color/black" android:textSize="@dimen/text_size_14" android:textStyle="bold" @@ -623,7 +624,7 @@ app:layout_constraintHorizontal_chainStyle="spread" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@+id/btnNext" - app:layout_constraintStart_toStartOf="parent"/> + app:layout_constraintStart_toStartOf="parent" /> + android:text="@string/pleaseWait" + android:textColor="@color/white" /> diff --git a/app/src/main/res/layout/new_distributor_sign_step_one.xml b/app/src/main/res/layout/new_distributor_sign_step_one.xml index 96d26e9..4531a3a 100644 --- a/app/src/main/res/layout/new_distributor_sign_step_one.xml +++ b/app/src/main/res/layout/new_distributor_sign_step_one.xml @@ -2,6 +2,7 @@ success Aadhaar minutes are remaining to complete the process - Associate - advisory + + 4 + + 3 Join Nivesh APPLY NOW Please Wait... + Privacy Policy + + Choose the document type + Add ADDRESS PROOF \ 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 f94d6d1..16c3ddf 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -11,6 +11,7 @@ #02B92D #E9161E #1F5ACE + #004783 #00000000 #99000000 #5077FF diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 94dc6a0..9415489 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -363,10 +363,16 @@ success Aadhaar minutes are remaining to complete the process - Associate - advisory + + 4 + + 3 Join Nivesh APPLY NOW Please Wait... + Privacy Policy + + Choose the document type + Add ADDRESS PROOF \ No newline at end of file