// // 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) } } }