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.
 
 
 
 

325 lines
12 KiB

//
// KYCBankAndIDViewController.swift
// GMERemittance
//
// Created by FMI-12 on 12/20/17.
// Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class KYCBankAndIDViewController: UIViewController {
var kycviewmodel: KYCViewModel?
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var viewOutlet: UIView!
@IBOutlet weak var viewProgressBarOutlet: UIView!
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
var activeTextField: UITextField?
@IBOutlet weak var textFieldBankName: UITextField!
@IBOutlet weak var textFieldAccountNumber: UITextField!
@IBOutlet weak var textFieldVerificationType: UITextField!
@IBOutlet weak var textFieldVerificationID: UITextField!
@IBOutlet weak var textFieldExpiryDate: UITextField!
@IBOutlet weak var textFieldSourceFund: UITextField!
let datePicker = UIDatePicker()
let pickerView = UIPickerView()
var pickerData: [String] = [String]()
var verificationTypeIDValue: [String] = [String]()
var arrayOftextFields: [UITextField]!
var selectedIndexFor: [String: Int] = [String: Int]()
var securityInfo: [String]!
@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!
@IBAction func submitSecurityInformation(_ sender: Any) {
view.endEditing(true)
securityInfo = [textFieldBankName.text!, textFieldAccountNumber.text!, textFieldVerificationType.text!,
textFieldVerificationID.text!, textFieldExpiryDate.text!, textFieldSourceFund.text!]
guard (kycviewmodel?.allFieldsFilled(arrayofInfo: securityInfo))! else {
self.popUpMessageError(value: 11, message: "Please fill all the fields")
return
}
guard (kycviewmodel?.isValidDate(expiryDate: textFieldExpiryDate.text!))! else {
self.popUpMessageError(value: 11, message: "Date already expired")
return
}
performSegue(withIdentifier: "fillKYCDocumentInfo", 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()
}
override func viewDidLoad() {
super.viewDidLoad()
setUpNavBar(id: 103, title: "")
viewOutlet.backgroundColor = UIColor(hex:0xec1c24)
viewProgressBarOutlet.backgroundColor = UIColor(hex:0xec1c24)
guard kycviewmodel != nil else {
return
}
// Do any additional setup after loading the view.
// Kyc progress View
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.white.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
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)
pickerView.dataSource = self
pickerView.delegate = self
textFieldBankName.inputView = pickerView
textFieldVerificationType.inputView = pickerView
textFieldSourceFund.inputView = pickerView
datePicker.datePickerMode = .date
textFieldExpiryDate.inputView = datePicker
datePicker.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)
arrayOftextFields = [textFieldBankName, textFieldAccountNumber, textFieldVerificationType, textFieldVerificationID, textFieldExpiryDate, textFieldSourceFund]
for textField in arrayOftextFields! {
textField.delegate = self
}
/// Inital Index value
selectedIndexFor["bankName"] = 0
selectedIndexFor["verificationType"] = 0
selectedIndexFor["sourceFund"] = 0
}
@objc func handleDatePicker(sender: UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy"
textFieldExpiryDate.text = dateFormatter.string(from: sender.date)
kycviewmodel?.setExpiryDate(expDate: textFieldExpiryDate.text!)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "fillKYCDocumentInfo" {
let kycDocumentViewController
= segue.destination as! KYCDocumentsUploadViewController
kycDocumentViewController.kycviewmodel = self.kycviewmodel
}
}
}
extension KYCBankAndIDViewController: UITextFieldDelegate {
func updatePlaceHolderForVerificationID(verificationIDValue: String) {
switch verificationIDValue {
case "1302", "8008":
textFieldVerificationID.placeholder = "yymmdd-XXXXXXX"
case "10996":
textFieldVerificationID.placeholder = "Enter your Passport No."
case "10988":
textFieldVerificationID.placeholder = "Enter your Business Registration No."
default:
return
}
}
func textFieldDidBeginEditing(_ textField: UITextField) {
activeTextField = textField
if textField == textFieldBankName || textField == textFieldVerificationType || textField == textFieldSourceFund {
switch textField {
case textFieldBankName:
if (kycviewmodel?.getCddPrimaryBankList().count)! > 0 {
pickerData = (kycviewmodel?.getCddPrimaryBankList())!
}
case textFieldVerificationType:
if (kycviewmodel?.getCddVerificationIDList().count)! > 0 {
pickerData = (kycviewmodel?.getCddVerificationIDList())!
}
case textFieldSourceFund:
if (kycviewmodel?.getCddSourceFund().count)! > 0 {
pickerData = (kycviewmodel?.getCddSourceFund())!
}
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 textFieldBankName:
if let bankIndex = selectedIndexFor["bankName"]{
pickerView.selectRow(bankIndex, inComponent: 0, animated: true)
}
if let bankIndex = selectedIndexFor["bankName"]{
textField.text = pickerData[bankIndex]
}
if let bankIndex = selectedIndexFor["bankName"]{
kycviewmodel?.setPrimaryBank(referenceIndex: bankIndex)
}
case textFieldVerificationType:
if let verificationIndex = selectedIndexFor["verificationType"]{
pickerView.selectRow(verificationIndex, inComponent: 0, animated: true)
}
if let verificationIndex = selectedIndexFor["verificationType"]{
textField.text = pickerData[verificationIndex]
}
if let verificationIndex = selectedIndexFor["verificationType"]{
kycviewmodel?.setVerificationType(referenceIndex: verificationIndex)
}
if (kycviewmodel?.getCddVerificationIDValueList().count)! > 0 {
verificationTypeIDValue = (kycviewmodel?.getCddVerificationIDValueList())!
}
if let verificationIndex = selectedIndexFor["verificationType"]{
updatePlaceHolderForVerificationID(verificationIDValue: verificationTypeIDValue[verificationIndex])
}
case textFieldSourceFund:
if let fundIndex = selectedIndexFor["sourceFund"]{
pickerView.selectRow(fundIndex, inComponent: 0, animated: true)
}
if let fundIndex = selectedIndexFor["sourceFund"]{
textField.text = pickerData[fundIndex]
}
if let fundIndex = selectedIndexFor["sourceFund"]{
kycviewmodel?.setSourceFund(referenceIndex: fundIndex)
}
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 == textFieldBankName ||
textField == textFieldVerificationType ||
textField == textFieldExpiryDate {
return false
}
let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
switch textField {
case textFieldAccountNumber:
self.kycviewmodel?.updateAccountNumber(inputString: inputText)
case textFieldVerificationID:
self.kycviewmodel?.updateVerificationIDNumber(inputString: inputText)
case textFieldSourceFund:
return true
default:
return false
}
return true
}
}
extension KYCBankAndIDViewController: 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, titleForRow row: Int, forComponent component: Int) -> String? {
return pickerData[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
activeTextField!.text = pickerData[row]
if activeTextField == textFieldBankName {
selectedIndexFor["bankName"] = row
kycviewmodel?.setPrimaryBank(referenceIndex: row)
} else if activeTextField == textFieldVerificationType {
selectedIndexFor["verificationType"] = row
kycviewmodel?.setVerificationType(referenceIndex: row)
updatePlaceHolderForVerificationID(verificationIDValue: verificationTypeIDValue[row])
} else if activeTextField == textFieldSourceFund {
selectedIndexFor["sourceFund"] = row
kycviewmodel?.setSourceFund(referenceIndex: row)
}
}
}