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

6 years ago
  1. //
  2. // KYCBankAndIDViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by FMI-12 on 12/20/17.
  6. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. class KYCBankAndIDViewController: UIViewController {
  10. var kycviewmodel: KYCViewModel?
  11. @IBOutlet weak var scrollView: UIScrollView!
  12. @IBOutlet weak var viewOutlet: UIView!
  13. @IBOutlet weak var viewProgressBarOutlet: UIView!
  14. private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
  15. var activeTextField: UITextField?
  16. @IBOutlet weak var textFieldBankName: UITextField!
  17. @IBOutlet weak var textFieldAccountNumber: UITextField!
  18. @IBOutlet weak var textFieldVerificationType: UITextField!
  19. @IBOutlet weak var textFieldVerificationID: UITextField!
  20. @IBOutlet weak var textFieldExpiryDate: UITextField!
  21. @IBOutlet weak var textFieldSourceFund: UITextField!
  22. let datePicker = UIDatePicker()
  23. let pickerView = UIPickerView()
  24. var pickerData: [String] = [String]()
  25. var verificationTypeIDValue: [String] = [String]()
  26. var arrayOftextFields: [UITextField]!
  27. var selectedIndexFor: [String: Int] = [String: Int]()
  28. var securityInfo: [String]!
  29. @IBOutlet weak var kycFirstStep: UIView!
  30. @IBOutlet weak var kycProgessOne: UIView!
  31. @IBOutlet weak var kycSecondStep: UIView!
  32. @IBOutlet weak var kycProgessSecond: UIView!
  33. @IBOutlet weak var kycFinalStep: UIView!
  34. @IBAction func submitSecurityInformation(_ sender: Any) {
  35. view.endEditing(true)
  36. securityInfo = [textFieldBankName.text!, textFieldAccountNumber.text!, textFieldVerificationType.text!,
  37. textFieldVerificationID.text!, textFieldExpiryDate.text!, textFieldSourceFund.text!]
  38. guard (kycviewmodel?.allFieldsFilled(arrayofInfo: securityInfo))! else {
  39. self.popUpMessageError(value: 11, message: "Please fill all the fields")
  40. return
  41. }
  42. guard (kycviewmodel?.isValidDate(expiryDate: textFieldExpiryDate.text!))! else {
  43. self.popUpMessageError(value: 11, message: "Date already expired")
  44. return
  45. }
  46. performSegue(withIdentifier: "fillKYCDocumentInfo", sender: nil)
  47. }
  48. @objc func keyboardWillShow(notification: NSNotification) {
  49. var userInfo = notification.userInfo!
  50. var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
  51. keyboardFrame = self.view.convert(keyboardFrame, from: nil)
  52. var contentInset:UIEdgeInsets = self.scrollView.contentInset
  53. contentInset.bottom = keyboardFrame.size.height + 100
  54. scrollView.contentInset = contentInset
  55. }
  56. @objc func keyboardWillHide(notification: NSNotification) {
  57. self.scrollView.contentInset = UIEdgeInsets.zero
  58. }
  59. @objc func clearKeyboard() {
  60. activeTextField?.resignFirstResponder()
  61. }
  62. override func viewDidLoad() {
  63. super.viewDidLoad()
  64. setUpNavBar(id: 103, title: "")
  65. viewOutlet.backgroundColor = UIColor(hex:0xec1c24)
  66. viewProgressBarOutlet.backgroundColor = UIColor(hex:0xec1c24)
  67. guard kycviewmodel != nil else {
  68. return
  69. }
  70. // Do any additional setup after loading the view.
  71. // Kyc progress View
  72. kycFirstStep.layer.cornerRadius = kycFirstStep.frame.size.width/2
  73. kycFirstStep.layer.borderColor = UIColor.white.cgColor
  74. kycFirstStep.layer.borderWidth = 1.0
  75. kycSecondStep.layer.cornerRadius = kycSecondStep.frame.size.width/2
  76. kycSecondStep.layer.borderColor = UIColor.white.cgColor
  77. kycSecondStep.layer.borderWidth = 1.0
  78. kycFinalStep.layer.cornerRadius = kycFinalStep.frame.size.width/2
  79. // kycFinalStep.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor
  80. // kycFinalStep.layer.borderWidth = 1.0
  81. NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
  82. NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
  83. let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(clearKeyboard))
  84. view.addGestureRecognizer(tap)
  85. pickerView.dataSource = self
  86. pickerView.delegate = self
  87. textFieldBankName.inputView = pickerView
  88. textFieldVerificationType.inputView = pickerView
  89. textFieldSourceFund.inputView = pickerView
  90. datePicker.datePickerMode = .date
  91. textFieldExpiryDate.inputView = datePicker
  92. datePicker.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)
  93. arrayOftextFields = [textFieldBankName, textFieldAccountNumber, textFieldVerificationType, textFieldVerificationID, textFieldExpiryDate, textFieldSourceFund]
  94. for textField in arrayOftextFields! {
  95. textField.delegate = self
  96. }
  97. /// Inital Index value
  98. selectedIndexFor["bankName"] = 0
  99. selectedIndexFor["verificationType"] = 0
  100. selectedIndexFor["sourceFund"] = 0
  101. }
  102. @objc func handleDatePicker(sender: UIDatePicker) {
  103. let dateFormatter = DateFormatter()
  104. dateFormatter.dateFormat = "MM/dd/yyyy"
  105. textFieldExpiryDate.text = dateFormatter.string(from: sender.date)
  106. kycviewmodel?.setExpiryDate(expDate: textFieldExpiryDate.text!)
  107. }
  108. override func didReceiveMemoryWarning() {
  109. super.didReceiveMemoryWarning()
  110. // Dispose of any resources that can be recreated.
  111. }
  112. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  113. if segue.identifier == "fillKYCDocumentInfo" {
  114. let kycDocumentViewController
  115. = segue.destination as! KYCDocumentsUploadViewController
  116. kycDocumentViewController.kycviewmodel = self.kycviewmodel
  117. }
  118. }
  119. }
  120. extension KYCBankAndIDViewController: UITextFieldDelegate {
  121. func updatePlaceHolderForVerificationID(verificationIDValue: String) {
  122. switch verificationIDValue {
  123. case "1302", "8008":
  124. textFieldVerificationID.placeholder = "yymmdd-XXXXXXX"
  125. case "10996":
  126. textFieldVerificationID.placeholder = "Enter your Passport No."
  127. case "10988":
  128. textFieldVerificationID.placeholder = "Enter your Business Registration No."
  129. default:
  130. return
  131. }
  132. }
  133. func textFieldDidBeginEditing(_ textField: UITextField) {
  134. activeTextField = textField
  135. if textField == textFieldBankName || textField == textFieldVerificationType || textField == textFieldSourceFund {
  136. switch textField {
  137. case textFieldBankName:
  138. if (kycviewmodel?.getCddPrimaryBankList().count)! > 0 {
  139. pickerData = (kycviewmodel?.getCddPrimaryBankList())!
  140. }
  141. case textFieldVerificationType:
  142. if (kycviewmodel?.getCddVerificationIDList().count)! > 0 {
  143. pickerData = (kycviewmodel?.getCddVerificationIDList())!
  144. }
  145. case textFieldSourceFund:
  146. if (kycviewmodel?.getCddSourceFund().count)! > 0 {
  147. pickerData = (kycviewmodel?.getCddSourceFund())!
  148. }
  149. default:
  150. return
  151. }
  152. guard pickerData.count > 0 else {
  153. self.popUpMessageInfo(value: 16, title: "Fetching data", message: "Please fill other fields while some data are being loaded")
  154. return
  155. }
  156. pickerView.reloadAllComponents()
  157. switch textField {
  158. case textFieldBankName:
  159. if let bankIndex = selectedIndexFor["bankName"]{
  160. pickerView.selectRow(bankIndex, inComponent: 0, animated: true)
  161. }
  162. if let bankIndex = selectedIndexFor["bankName"]{
  163. textField.text = pickerData[bankIndex]
  164. }
  165. if let bankIndex = selectedIndexFor["bankName"]{
  166. kycviewmodel?.setPrimaryBank(referenceIndex: bankIndex)
  167. }
  168. case textFieldVerificationType:
  169. if let verificationIndex = selectedIndexFor["verificationType"]{
  170. pickerView.selectRow(verificationIndex, inComponent: 0, animated: true)
  171. }
  172. if let verificationIndex = selectedIndexFor["verificationType"]{
  173. textField.text = pickerData[verificationIndex]
  174. }
  175. if let verificationIndex = selectedIndexFor["verificationType"]{
  176. kycviewmodel?.setVerificationType(referenceIndex: verificationIndex)
  177. }
  178. if (kycviewmodel?.getCddVerificationIDValueList().count)! > 0 {
  179. verificationTypeIDValue = (kycviewmodel?.getCddVerificationIDValueList())!
  180. }
  181. if let verificationIndex = selectedIndexFor["verificationType"]{
  182. updatePlaceHolderForVerificationID(verificationIDValue: verificationTypeIDValue[verificationIndex])
  183. }
  184. case textFieldSourceFund:
  185. if let fundIndex = selectedIndexFor["sourceFund"]{
  186. pickerView.selectRow(fundIndex, inComponent: 0, animated: true)
  187. }
  188. if let fundIndex = selectedIndexFor["sourceFund"]{
  189. textField.text = pickerData[fundIndex]
  190. }
  191. if let fundIndex = selectedIndexFor["sourceFund"]{
  192. kycviewmodel?.setSourceFund(referenceIndex: fundIndex)
  193. }
  194. default:
  195. return
  196. }
  197. }
  198. }
  199. func textFieldShouldReturn(_ textField: UITextField) -> Bool {
  200. let index: Int = arrayOftextFields.index(of: textField)!
  201. guard index == (arrayOftextFields.count-1) else {
  202. arrayOftextFields[index+1].becomeFirstResponder()
  203. return true
  204. }
  205. textField.resignFirstResponder()
  206. return true
  207. }
  208. func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
  209. if textField == textFieldBankName ||
  210. textField == textFieldVerificationType ||
  211. textField == textFieldExpiryDate {
  212. return false
  213. }
  214. let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
  215. switch textField {
  216. case textFieldAccountNumber:
  217. self.kycviewmodel?.updateAccountNumber(inputString: inputText)
  218. case textFieldVerificationID:
  219. self.kycviewmodel?.updateVerificationIDNumber(inputString: inputText)
  220. case textFieldSourceFund:
  221. return true
  222. default:
  223. return false
  224. }
  225. return true
  226. }
  227. }
  228. extension KYCBankAndIDViewController: UIPickerViewDataSource, UIPickerViewDelegate {
  229. func numberOfComponents(in pickerView: UIPickerView) -> Int {
  230. return 1
  231. }
  232. func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
  233. return pickerData.count
  234. }
  235. func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
  236. return pickerData[row]
  237. }
  238. func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
  239. activeTextField!.text = pickerData[row]
  240. if activeTextField == textFieldBankName {
  241. selectedIndexFor["bankName"] = row
  242. kycviewmodel?.setPrimaryBank(referenceIndex: row)
  243. } else if activeTextField == textFieldVerificationType {
  244. selectedIndexFor["verificationType"] = row
  245. kycviewmodel?.setVerificationType(referenceIndex: row)
  246. updatePlaceHolderForVerificationID(verificationIDValue: verificationTypeIDValue[row])
  247. } else if activeTextField == textFieldSourceFund {
  248. selectedIndexFor["sourceFund"] = row
  249. kycviewmodel?.setSourceFund(referenceIndex: row)
  250. }
  251. }
  252. }