You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
597 lines
22 KiB
597 lines
22 KiB
//
|
|
// KYCPersonalInfoViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by Sujal on 12/18/17.
|
|
// Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
//import SDWebImage
|
|
|
|
class KYCPersonalInfoViewController: UIViewController {
|
|
|
|
@IBOutlet weak var scrollView: UIScrollView!
|
|
|
|
@IBOutlet weak var viewOutlet: UIView!
|
|
|
|
@IBOutlet weak var viewProgressBarOutlet: UIView!
|
|
|
|
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
|
|
private var kycviewmodel = KYCViewModel()
|
|
|
|
let pickerView = UIPickerView()
|
|
var pickerData: [String] = [String]()
|
|
|
|
let datePicker = UIDatePicker()
|
|
|
|
@IBOutlet weak var textFieldFirstName: UITextField!
|
|
@IBOutlet weak var textFieldMiddleName: UITextField!
|
|
@IBOutlet weak var textFieldLastName: UITextField!
|
|
@IBOutlet weak var textFieldNickName: UITextField!
|
|
@IBOutlet weak var textFieldGender: UITextField!
|
|
@IBOutlet weak var textFieldDOB: UITextField!
|
|
@IBOutlet weak var textFieldPhone: UITextField!
|
|
@IBOutlet weak var textFieldEmail: UITextField!
|
|
@IBOutlet weak var textFieldNativeCountry: UITextField!
|
|
@IBOutlet weak var textFieldCountry: UITextField!
|
|
@IBOutlet weak var textFieldProvince: UITextField!
|
|
@IBOutlet weak var textFieldOccupation: UITextField!
|
|
|
|
var activeTextField: UITextField?
|
|
|
|
var arrayOftextFields: [UITextField]!
|
|
var selectedIndexFor: [String: Int] = [String: Int]()
|
|
|
|
var personalInfo: [String]!
|
|
|
|
var isPhone: Bool!
|
|
var noConnectionTimeOutDialog: Bool?
|
|
|
|
@IBOutlet weak var kycFirstStep: UIView!
|
|
@IBOutlet weak var kycProgessOne: UIView!
|
|
@IBOutlet weak var kycSecondStep: UIView!
|
|
@IBOutlet weak var kycProgessSecond: UIView!
|
|
@IBOutlet weak var kycFinalStep: UIView!
|
|
|
|
var referralCodepopUpViewController: ReferralCodeViewController!
|
|
|
|
@IBAction func submitPersonalInformation(_ sender: Any) {
|
|
|
|
activeTextField?.resignFirstResponder()
|
|
|
|
personalInfo = [textFieldFirstName.text!, textFieldLastName.text!, textFieldGender.text!, textFieldDOB.text!,
|
|
textFieldPhone.text!, textFieldEmail.text!, textFieldNativeCountry.text!, textFieldCountry.text!, textFieldProvince.text!, textFieldOccupation.text!]
|
|
|
|
guard kycviewmodel.allFieldsFilled(arrayofInfo: personalInfo) else {
|
|
self.popUpMessageError(value: 11, message: "Please fill all the fields")
|
|
return
|
|
}
|
|
|
|
guard kycviewmodel.isValidAge(dob: textFieldDOB.text!) else {
|
|
self.popUpMessageError(value: 11, message: "User is under age")
|
|
return
|
|
}
|
|
|
|
if isPhone {
|
|
kycviewmodel.updateSetMobileNumber(inputDigit: textFieldPhone.text!)
|
|
} else {
|
|
kycviewmodel.updateSetEmail(email: textFieldEmail.text!)
|
|
}
|
|
|
|
performSegue(withIdentifier: "fillKYCSecurityInfo", sender: nil)
|
|
|
|
}
|
|
|
|
@objc func keyboardWillShow(notification: NSNotification) {
|
|
|
|
var userInfo = notification.userInfo!
|
|
var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
|
|
keyboardFrame = self.view.convert(keyboardFrame, from: nil)
|
|
|
|
var contentInset:UIEdgeInsets = self.scrollView.contentInset
|
|
contentInset.bottom = keyboardFrame.size.height + 100
|
|
scrollView.contentInset = contentInset
|
|
}
|
|
|
|
@objc func keyboardWillHide(notification: NSNotification) {
|
|
|
|
self.scrollView.contentInset = UIEdgeInsets.zero
|
|
}
|
|
|
|
|
|
@objc func clearKeyboard() {
|
|
|
|
activeTextField?.resignFirstResponder()
|
|
}
|
|
|
|
/**
|
|
Date limit to current date
|
|
*/
|
|
func setDatePickerLimit() {
|
|
var components = DateComponents()
|
|
components.year = -0
|
|
let maxDate = Calendar.current.date(byAdding: components, to: Date())
|
|
datePicker.maximumDate = maxDate
|
|
}
|
|
|
|
/**
|
|
Update Country and occupation name to picker view
|
|
*/
|
|
|
|
func bindCountryAndOccupationToUI() {
|
|
kycviewmodel.countryAndOccupationFetched.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
guard $0! != 0 else {
|
|
self.kycviewmodel.countryAndOccupationFetched.value = nil
|
|
return
|
|
}
|
|
if $0! == 1 {
|
|
self.kycviewmodel.countryAndOccupationFetched.value = nil
|
|
|
|
//SET COUNTRY TEXT FIELD AND COUNTRY ID
|
|
self.pickerData = self.kycviewmodel.getCountryName()
|
|
|
|
self.showCountryWithFlag(textField: self.textFieldCountry, flagUrlString: self.kycviewmodel.getCountryFlagUrl(), index: 0)
|
|
|
|
} else if $0 == 2 {
|
|
self.kycviewmodel.countryAndOccupationFetched.value = nil
|
|
//SET OCCUPATION TEXT FIELD
|
|
|
|
let defaultOccupationIndex = self.kycviewmodel.getIndexForDefaultOccupation()
|
|
|
|
self.selectedIndexFor["occupation"] = defaultOccupationIndex
|
|
|
|
self.textFieldOccupation.text = self.kycviewmodel.getDefaultOccupation(index: defaultOccupationIndex)
|
|
|
|
self.kycviewmodel.setOccupation(referenceIndex: defaultOccupationIndex)
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
Display dialog to add referral code
|
|
*/
|
|
func showReferralCodeDialog() {
|
|
|
|
let storyboard = UIStoryboard.init(name: "Main", bundle: Bundle.main)
|
|
|
|
referralCodepopUpViewController = storyboard.instantiateViewController(withIdentifier: "referralCodepopUp") as? ReferralCodeViewController
|
|
|
|
self.navigationController?.navigationBar.isHidden = true
|
|
|
|
self.addChildViewController(referralCodepopUpViewController)
|
|
referralCodepopUpViewController.view.frame = self.view.bounds
|
|
self.view.addSubview(referralCodepopUpViewController.view)
|
|
referralCodepopUpViewController.didMove(toParentViewController: self)
|
|
|
|
referralCodepopUpViewController.referralCodeAvailable.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.setUpNavBar(id: 102, title: "")
|
|
if $0! {
|
|
self.kycviewmodel.setReferralCode(referralCode: self.referralCodepopUpViewController.getReferralCode())
|
|
}
|
|
//self.showWelcomeMessage()
|
|
}
|
|
}
|
|
|
|
/**
|
|
Display welcome dialog
|
|
*/
|
|
func showWelcomeMessage() {
|
|
let storyboard = UIStoryboard.init(name: "Main", bundle: Bundle.main)
|
|
|
|
if let popUpViewController = storyboard.instantiateViewController(withIdentifier: "popUpInfo") as? PopUpGeneralInfo {
|
|
self.navigationController?.navigationBar.isHidden = true
|
|
popUpViewController.indexValue = 0
|
|
|
|
self.addChildViewController(popUpViewController)
|
|
popUpViewController.view.frame = self.view.bounds
|
|
self.view.addSubview(popUpViewController.view)
|
|
popUpViewController.didMove(toParentViewController: self)
|
|
}
|
|
}
|
|
|
|
/**
|
|
internet check
|
|
*/
|
|
func setUpNetworkListener() {
|
|
kycviewmodel.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
if !$0! {
|
|
self.popUpMessage(value: 15)
|
|
self.kycviewmodel.internetConnection.value = nil
|
|
}
|
|
}
|
|
}
|
|
|
|
override func viewDidAppear(_ animated: Bool) {
|
|
setUpNetworkListener()
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
|
|
super.viewDidLoad()
|
|
|
|
setUpAnotherLoginListener(genericviewmodel: kycviewmodel)
|
|
|
|
setUpNavBar(id: 102, title: "")
|
|
|
|
noConnectionTimeOutDialog = false
|
|
viewOutlet.backgroundColor = UIColor(hex:0xec1c24)
|
|
viewProgressBarOutlet.backgroundColor = UIColor(hex:0xec1c24)
|
|
|
|
self.showWelcomeDialog()
|
|
|
|
setDatePickerLimit()
|
|
|
|
kycviewmodel.kycViewModelConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
kycviewmodel.kycViewModelConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
if !self.noConnectionTimeOutDialog! {
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 20)
|
|
}
|
|
self.noConnectionTimeOutDialog = true
|
|
}
|
|
|
|
bindCountryAndOccupationToUI()
|
|
kycviewmodel.fetchRequiredCDDValues()
|
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
|
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
|
|
|
|
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(clearKeyboard))
|
|
|
|
view.addGestureRecognizer(tap)
|
|
|
|
let userId: String = UserDefaults.standard.object(forKey: "com.gmeremit.username") as! String
|
|
|
|
|
|
if let _ = Int(userId) {
|
|
isPhone = true
|
|
textFieldPhone.text = userId
|
|
} else {
|
|
isPhone = false
|
|
textFieldEmail.text = userId
|
|
}
|
|
|
|
arrayOftextFields = [textFieldFirstName, textFieldMiddleName, textFieldLastName, textFieldNickName, textFieldGender, textFieldDOB, textFieldPhone, textFieldEmail, textFieldNativeCountry, textFieldCountry, textFieldProvince, textFieldOccupation]
|
|
|
|
selectedIndexFor["gender"] = 0
|
|
selectedIndexFor["nativeCountry"] = 0
|
|
selectedIndexFor["province"] = 0
|
|
selectedIndexFor["occupation"] = 0
|
|
|
|
for textField in arrayOftextFields! {
|
|
textField.delegate = self
|
|
}
|
|
|
|
pickerView.dataSource = self
|
|
pickerView.delegate = self
|
|
|
|
textFieldGender.inputView = pickerView
|
|
textFieldNativeCountry.inputView = pickerView
|
|
textFieldProvince.inputView = pickerView
|
|
textFieldOccupation.inputView = pickerView
|
|
|
|
datePicker.datePickerMode = .date
|
|
textFieldDOB.inputView = datePicker
|
|
datePicker.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)
|
|
|
|
kycFirstStep.layer.cornerRadius = kycFirstStep.frame.size.width/2
|
|
kycFirstStep.layer.borderColor = UIColor.white.cgColor
|
|
kycFirstStep.layer.borderWidth = 1.0
|
|
|
|
kycSecondStep.layer.cornerRadius = kycSecondStep.frame.size.width/2
|
|
//kycSecondStep.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor
|
|
//kycSecondStep.layer.borderWidth = 1.0
|
|
|
|
kycFinalStep.layer.cornerRadius = kycFinalStep.frame.size.width/2
|
|
//kycFinalStep.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor
|
|
// kycFinalStep.layer.borderWidth = 1.0
|
|
|
|
keyboardInteractionForTextFields()
|
|
}
|
|
|
|
/**
|
|
To display keboard on text field according to user id i.e email or phone no
|
|
*/
|
|
func keyboardInteractionForTextFields(){
|
|
|
|
if isPhone {
|
|
textFieldPhone.isEnabled = false
|
|
|
|
} else {
|
|
textFieldEmail.isEnabled = false
|
|
}
|
|
|
|
textFieldCountry.isEnabled = false
|
|
}
|
|
/**
|
|
Set the Date format to "MM/dd/yyyy"
|
|
*/
|
|
@objc func handleDatePicker(sender: UIDatePicker) {
|
|
|
|
let dateFormatter = DateFormatter()
|
|
dateFormatter.dateFormat = "MM/dd/yyyy"
|
|
textFieldDOB.text = dateFormatter.string(from: sender.date)
|
|
kycviewmodel.setDOB(dob: textFieldDOB.text!)
|
|
}
|
|
|
|
/**
|
|
Show welcome dialog message when referral status is true
|
|
*/
|
|
func showWelcomeDialog(){
|
|
if let referralStatus = UserDefaults.standard.object(forKey: "com.gmeremit.isReferred") as? Bool {
|
|
if referralStatus {
|
|
showWelcomeMessage()
|
|
} else {
|
|
showReferralCodeDialog()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
extension KYCPersonalInfoViewController: UITextFieldDelegate {
|
|
|
|
func textFieldDidBeginEditing(_ textField: UITextField) {
|
|
|
|
|
|
activeTextField = textField
|
|
|
|
if textField == textFieldGender ||
|
|
textField == textFieldNativeCountry ||
|
|
textField == textFieldProvince ||
|
|
textField == textFieldOccupation {
|
|
|
|
switch textField {
|
|
case textFieldGender:
|
|
pickerData = kycviewmodel.getCddGenderList()
|
|
case textFieldNativeCountry:
|
|
pickerData = kycviewmodel.getNativeCountryName()
|
|
case textFieldProvince:
|
|
pickerData = kycviewmodel.getProvince()
|
|
case textFieldOccupation:
|
|
pickerData = kycviewmodel.getCddOccupationList()
|
|
default:
|
|
return
|
|
}
|
|
|
|
|
|
guard pickerData.count > 0 else {
|
|
self.popUpMessageInfo(value: 16, title: "Fetching data", message: "Please fill other fields while some data are being loaded")
|
|
return
|
|
}
|
|
|
|
pickerView.reloadAllComponents()
|
|
|
|
switch textField {
|
|
|
|
case textFieldGender:
|
|
if let genderIndex = selectedIndexFor["gender"] {
|
|
pickerView.selectRow(genderIndex, inComponent: 0, animated: true)
|
|
}
|
|
if let genderIndex = selectedIndexFor["gender"] {
|
|
textField.text = pickerData[genderIndex]
|
|
}
|
|
if let genderIndex = selectedIndexFor["gender"]{
|
|
kycviewmodel.setGender(referenceIndex: genderIndex)
|
|
}
|
|
case textFieldNativeCountry:
|
|
if let countryIndex = selectedIndexFor["nativeCountry"]{
|
|
pickerView.selectRow(countryIndex, inComponent: 0, animated: true)
|
|
}
|
|
if let countryIndex = selectedIndexFor["nativeCountry"]{
|
|
showCountryWithFlag(textField: textField, flagUrlString: kycviewmodel.getNativeCountryFlagUrl(index: countryIndex), index: countryIndex)
|
|
}
|
|
if let countryIndex = selectedIndexFor["nativeCountry"]{
|
|
kycviewmodel.setNativeCountry(referenceIndex: countryIndex)
|
|
}
|
|
|
|
case textFieldOccupation:
|
|
|
|
if let occupationIndex = selectedIndexFor["occupation"]{
|
|
pickerView.selectRow(occupationIndex, inComponent: 0, animated: true)
|
|
}
|
|
if let occupationIndex = selectedIndexFor["occupation"]{
|
|
textField.text = pickerData[occupationIndex]
|
|
}
|
|
if let occupationIndex = selectedIndexFor["occupation"]{
|
|
kycviewmodel.setOccupation(referenceIndex: occupationIndex)
|
|
}
|
|
|
|
case textFieldProvince:
|
|
if let provinceIndex = selectedIndexFor["province"]{
|
|
pickerView.selectRow(provinceIndex, inComponent: 0, animated: true)
|
|
}
|
|
if let provinceIndex = selectedIndexFor["province"]{
|
|
textField.text = pickerData[provinceIndex]
|
|
}
|
|
if let provinceIndex = selectedIndexFor["province"]{
|
|
kycviewmodel.setProvince(referenceIndex: provinceIndex)
|
|
}
|
|
|
|
default:
|
|
return
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
|
let index: Int = arrayOftextFields.index(of: textField)!
|
|
guard index == (arrayOftextFields.count-1) else {
|
|
arrayOftextFields[index+1].becomeFirstResponder()
|
|
return true
|
|
}
|
|
//textField.resignFirstResponder()
|
|
return true
|
|
}
|
|
|
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
|
|
|
if textField == textFieldGender ||
|
|
textField == textFieldOccupation ||
|
|
textField == textFieldCountry ||
|
|
textField == textFieldNativeCountry ||
|
|
textField == textFieldProvince ||
|
|
textField == textFieldDOB {
|
|
return false
|
|
}
|
|
|
|
let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
|
|
|
|
switch textField {
|
|
case textFieldFirstName:
|
|
self.kycviewmodel.updateName(namePart: 1, inputString: inputText)
|
|
case textFieldMiddleName:
|
|
self.kycviewmodel.updateName(namePart: 2, inputString: inputText)
|
|
case textFieldLastName:
|
|
self.kycviewmodel.updateName(namePart: 3, inputString: inputText)
|
|
case textFieldNickName:
|
|
self.kycviewmodel.updateName(namePart: 0, inputString: inputText)
|
|
case textFieldPhone:
|
|
if isPhone {
|
|
return false
|
|
} else {
|
|
self.kycviewmodel.updateSetMobileNumber(inputDigit: inputText)
|
|
return true
|
|
}
|
|
case textFieldEmail:
|
|
if isPhone {
|
|
self.kycviewmodel.updateSetEmail(email: inputText)
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
default:
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
}
|
|
|
|
|
|
extension KYCPersonalInfoViewController: UIPickerViewDataSource, UIPickerViewDelegate {
|
|
|
|
func numberOfComponents(in pickerView: UIPickerView) -> Int {
|
|
return 1
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
|
|
return pickerData.count
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
|
|
|
|
if activeTextField == textFieldNativeCountry {
|
|
|
|
selectedIndexFor["nativeCountry"] = row
|
|
|
|
self.kycviewmodel.setNativeCountry(referenceIndex: row)
|
|
|
|
let flagUrl = kycviewmodel.getNativeCountryFlagUrl(index: row)
|
|
|
|
showCountryWithFlag(textField: activeTextField!, flagUrlString: flagUrl, index: row)
|
|
|
|
} else {
|
|
|
|
switch activeTextField! {
|
|
case self.textFieldGender:
|
|
selectedIndexFor["gender"] = row
|
|
self.kycviewmodel.setGender(referenceIndex: row)
|
|
case self.textFieldOccupation:
|
|
selectedIndexFor["occupation"] = row
|
|
self.kycviewmodel.setOccupation(referenceIndex: row)
|
|
case self.textFieldProvince:
|
|
selectedIndexFor["province"] = row
|
|
self.kycviewmodel.setProvince(referenceIndex: row)
|
|
default:
|
|
break
|
|
}
|
|
|
|
activeTextField!.text = pickerData[row]
|
|
}
|
|
|
|
|
|
}
|
|
|
|
func showCountryWithFlag(textField: UITextField, flagUrlString: String, index: Int) {
|
|
|
|
let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
|
|
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
|
|
|
|
imageView.center = paddingView.center
|
|
paddingView.addSubview(imageView)
|
|
|
|
|
|
if let flagUrl = URL(string: flagUrlString) {
|
|
|
|
imageView.sd_setImage(with: flagUrl, placeholderImage: nil, options: [.progressiveDownload,.scaleDownLargeImages], completed: nil)
|
|
}
|
|
|
|
textField.leftViewMode = UITextFieldViewMode.always
|
|
textField.leftView = paddingView
|
|
textField.text = pickerData[index]
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
|
|
return 60
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
|
|
|
|
var myImageView: UIImageView?
|
|
|
|
let myView = UIView(frame: CGRect(x: 0, y: 0, width: pickerView.bounds.width - 30, height: 60))
|
|
|
|
let myLabel = UILabel(frame: CGRect(x: 60, y: 0, width: pickerView.bounds.width - 90, height: 60 ))
|
|
|
|
myLabel.text = pickerData[row]
|
|
|
|
myView.addSubview(myLabel)
|
|
|
|
if activeTextField == textFieldNativeCountry {
|
|
|
|
myImageView = UIImageView(frame: CGRect(x: 0, y: 5, width: 50, height: 50))
|
|
|
|
|
|
let flagUrlString = kycviewmodel.getNativeCountryFlagUrl(index: row)
|
|
|
|
if let flagUrl = URL(string: flagUrlString) {
|
|
|
|
myImageView?.sd_setImage(with: flagUrl, placeholderImage: nil, options: [.progressiveDownload,.scaleDownLargeImages], completed: nil)
|
|
|
|
myView.addSubview(myImageView!)
|
|
}
|
|
}
|
|
|
|
return myView
|
|
}
|
|
|
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
|
if segue.identifier == "fillKYCSecurityInfo" {
|
|
let kycBankIDViewController
|
|
= segue.destination as! KYCBankAndIDViewController
|
|
kycBankIDViewController.kycviewmodel = self.kycviewmodel
|
|
|
|
}
|
|
}
|
|
}
|