|
|
@ -9,233 +9,237 @@ |
|
|
|
import UIKit |
|
|
|
|
|
|
|
class AddAccountViewController: UIViewController { |
|
|
|
|
|
|
|
// MARK: Properties |
|
|
|
|
|
|
|
var presenter: AddAccountModuleInterface? |
|
|
|
|
|
|
|
private lazy var languagePickerView = UIPickerView() |
|
|
|
private lazy var bankPickerView = UIPickerView() |
|
|
|
|
|
|
|
private var validDic = ["bank": false, "account": false, "language": false] |
|
|
|
|
|
|
|
private var isValid = false { |
|
|
|
didSet{ |
|
|
|
self.verifyAccountButton.isEnabled = self.isValid |
|
|
|
self.verifyAccountButton.backgroundColor = self.isValid ? AppConstants.themeRedColor : .lightGray |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private var model: (bankList: [BankInformation]?, kftcModel: KFTCModel?) { |
|
|
|
didSet { |
|
|
|
self.languagePickerView.delegate = self |
|
|
|
self.languagePickerView.dataSource = self |
|
|
|
self.languageTextField.inputView = languagePickerView |
|
|
|
|
|
|
|
self.bankPickerView.delegate = self |
|
|
|
self.bankPickerView.dataSource = self |
|
|
|
self.bankNameTextField.inputView = bankPickerView |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private var selectedLanguage: KftcLanguage? { |
|
|
|
didSet { |
|
|
|
self.languageTextField.text = self.selectedLanguage?.value |
|
|
|
self.languageTextField.sendActions(for: .editingChanged) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private var selectedBank: BankInformation? { |
|
|
|
didSet { |
|
|
|
self.bankNameTextField.text = self.selectedBank?.bankName |
|
|
|
self.bankNameTextField.sendActions(for: .editingChanged) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: IBOutlets |
|
|
|
|
|
|
|
@IBOutlet private weak var bankNameTextField: ValidationTextField! |
|
|
|
@IBOutlet private weak var accountTextField: ValidationTextField! |
|
|
|
@IBOutlet private weak var languageTextField: ValidationTextField! |
|
|
|
@IBOutlet private weak var verifyAccountButton: UIButton! |
|
|
|
|
|
|
|
// MARK: VC's Life cycle |
|
|
|
|
|
|
|
override func viewDidLoad() { |
|
|
|
super.viewDidLoad() |
|
|
|
self.setup() |
|
|
|
} |
|
|
|
|
|
|
|
override func viewWillAppear(_ animated: Bool) { |
|
|
|
super.viewWillAppear(animated) |
|
|
|
self.title = "Add Auto Debit Account" |
|
|
|
} |
|
|
|
|
|
|
|
override func viewDidAppear(_ animated: Bool) { |
|
|
|
super.viewDidAppear(animated) |
|
|
|
} |
|
|
|
|
|
|
|
override func viewWillDisappear(_ animated: Bool) { |
|
|
|
super.viewWillDisappear(animated) |
|
|
|
self.title = "" |
|
|
|
|
|
|
|
self.view.endEditing(true) |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: IBActions |
|
|
|
|
|
|
|
@IBAction private func verifyAccountButtonTouch(_ sender: UIButton) { |
|
|
|
self.presenter?.verifyAccount( |
|
|
|
customerID: UserDefaults.standard.string(forKey: UserKeys.senderId) ?? "", // senderID |
|
|
|
bankCode: self.selectedBank?.bankCode ?? "", |
|
|
|
accountNumber: self.accountTextField.text ?? "") |
|
|
|
} |
|
|
|
|
|
|
|
@IBAction private func closeButtonTouch(_ sender: UIBarButtonItem) { |
|
|
|
self.dismiss(animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// MARK: Other Functions |
|
|
|
|
|
|
|
private func setup() { |
|
|
|
// all setup should be done here |
|
|
|
|
|
|
|
self.presenter?.viewIsReady() |
|
|
|
self.verifyAccountButton.rounded() |
|
|
|
self.setValidTextField() |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func setValidTextField(){ |
|
|
|
self.bankNameTextField.completedColor = UIColor(hex: "#6F7179") |
|
|
|
self.bankNameTextField.completedTitleFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
self.bankNameTextField.errorFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
self.bankNameTextField.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged) |
|
|
|
|
|
|
|
self.languageTextField.completedColor = UIColor(hex: "#6F7179") |
|
|
|
self.languageTextField.completedTitleFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
self.languageTextField.errorFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
self.languageTextField.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged) |
|
|
|
|
|
|
|
self.accountTextField.completedColor = UIColor(hex: "#6F7179") |
|
|
|
self.accountTextField.completedTitleFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
self.accountTextField.errorFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
self.accountTextField.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged) |
|
|
|
|
|
|
|
self.accountTextField.validCondition = {$0.count > 9} |
|
|
|
} |
|
|
|
|
|
|
|
@objc |
|
|
|
func textFieldDidChange(_ textfield: UITextField) { |
|
|
|
let tf = textfield as! ValidationTextField |
|
|
|
|
|
|
|
switch tf { |
|
|
|
case bankNameTextField: |
|
|
|
validDic["bank"] = tf.isValid |
|
|
|
case accountTextField: |
|
|
|
validDic["account"] = tf.isValid |
|
|
|
case languageTextField: |
|
|
|
validDic["language"] = tf.isValid |
|
|
|
default: |
|
|
|
break |
|
|
|
} |
|
|
|
|
|
|
|
self.isValid = self.validDic.reduce(true){ $0 && $1.value} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// MARK: Properties |
|
|
|
|
|
|
|
var presenter: AddAccountModuleInterface? |
|
|
|
|
|
|
|
private lazy var languagePickerView = UIPickerView() |
|
|
|
private lazy var bankPickerView = UIPickerView() |
|
|
|
|
|
|
|
private var validDic = [ |
|
|
|
"bank": false, |
|
|
|
"account": false, |
|
|
|
"language": false |
|
|
|
] |
|
|
|
|
|
|
|
private var isValid = false { |
|
|
|
didSet{ |
|
|
|
verifyAccountButton.isEnabled = isValid |
|
|
|
verifyAccountButton.backgroundColor = isValid ? AppConstants.themeRedColor : .lightGray |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private var model: (bankList: [BankInformation]?, kftcModel: KFTCModel?) { |
|
|
|
didSet { |
|
|
|
languagePickerView.delegate = self |
|
|
|
languagePickerView.dataSource = self |
|
|
|
languageTextField.inputView = languagePickerView |
|
|
|
|
|
|
|
bankPickerView.delegate = self |
|
|
|
bankPickerView.dataSource = self |
|
|
|
bankNameTextField.inputView = bankPickerView |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private var selectedLanguage: KftcLanguage? { |
|
|
|
didSet { |
|
|
|
languageTextField.text = selectedLanguage?.value |
|
|
|
languageTextField.sendActions(for: .editingChanged) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private var selectedBank: BankInformation? { |
|
|
|
didSet { |
|
|
|
bankNameTextField.text = selectedBank?.bankName |
|
|
|
bankNameTextField.sendActions(for: .editingChanged) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: IBOutlets |
|
|
|
|
|
|
|
@IBOutlet private weak var bankNameTextField: ValidationTextField! |
|
|
|
@IBOutlet private weak var accountTextField: ValidationTextField! |
|
|
|
@IBOutlet private weak var languageTextField: ValidationTextField! |
|
|
|
@IBOutlet private weak var verifyAccountButton: UIButton! |
|
|
|
|
|
|
|
// MARK: VC's Life cycle |
|
|
|
|
|
|
|
override func viewDidLoad() { |
|
|
|
super.viewDidLoad() |
|
|
|
setup() |
|
|
|
} |
|
|
|
|
|
|
|
override func viewWillAppear(_ animated: Bool) { |
|
|
|
super.viewWillAppear(animated) |
|
|
|
title = "Add Auto Debit Account" |
|
|
|
} |
|
|
|
|
|
|
|
override func viewDidAppear(_ animated: Bool) { |
|
|
|
super.viewDidAppear(animated) |
|
|
|
} |
|
|
|
|
|
|
|
override func viewWillDisappear(_ animated: Bool) { |
|
|
|
super.viewWillDisappear(animated) |
|
|
|
title = "" |
|
|
|
|
|
|
|
view.endEditing(true) |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: IBActions |
|
|
|
|
|
|
|
@IBAction private func verifyAccountButtonTouch(_ sender: UIButton) { |
|
|
|
presenter?.verifyAccount( |
|
|
|
customerID: UserDefaults.standard.string(forKey: UserKeys.senderId) ?? "", // senderID |
|
|
|
bankCode: selectedBank?.bankCode ?? "", |
|
|
|
accountNumber: accountTextField.text ?? "") |
|
|
|
} |
|
|
|
|
|
|
|
@IBAction private func closeButtonTouch(_ sender: UIBarButtonItem) { |
|
|
|
dismiss(animated: true, completion: nil) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// MARK: Other Functions |
|
|
|
|
|
|
|
private func setup() { |
|
|
|
// all setup should be done here |
|
|
|
|
|
|
|
presenter?.viewIsReady() |
|
|
|
verifyAccountButton.layer.cornerRadius = 10 |
|
|
|
setValidTextField() |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private func setValidTextField(){ |
|
|
|
bankNameTextField.completedColor = AppConstants.themeBlueColor |
|
|
|
bankNameTextField.completedTitleFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
bankNameTextField.errorFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
bankNameTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged) |
|
|
|
|
|
|
|
languageTextField.completedColor = AppConstants.themeBlueColor |
|
|
|
languageTextField.completedTitleFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
languageTextField.errorFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
languageTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged) |
|
|
|
|
|
|
|
accountTextField.completedColor = AppConstants.themeBlueColor |
|
|
|
accountTextField.completedTitleFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
accountTextField.errorFont = UIFont(name: "SanfranciscoDisplay-Regular", size: 13)! |
|
|
|
accountTextField.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged) |
|
|
|
|
|
|
|
accountTextField.validCondition = {$0.count > 9} |
|
|
|
} |
|
|
|
|
|
|
|
@objc |
|
|
|
func textFieldDidChange(_ textfield: UITextField) { |
|
|
|
let tf = textfield as! ValidationTextField |
|
|
|
|
|
|
|
switch tf { |
|
|
|
case bankNameTextField: |
|
|
|
validDic["bank"] = tf.isValid |
|
|
|
case accountTextField: |
|
|
|
validDic["account"] = tf.isValid |
|
|
|
case languageTextField: |
|
|
|
validDic["language"] = tf.isValid |
|
|
|
default: |
|
|
|
break |
|
|
|
} |
|
|
|
|
|
|
|
isValid = validDic.reduce(true){ $0 && $1.value} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// MARK: AddAccountViewInterface |
|
|
|
|
|
|
|
extension AddAccountViewController: AddAccountViewInterface { |
|
|
|
func setModel(model: (bankList: [BankInformation]?, kftcModel: KFTCModel?)) { |
|
|
|
self.model = model |
|
|
|
} |
|
|
|
|
|
|
|
func failureSetModel(error: Error) { |
|
|
|
self.alert(message: error.localizedDescription, title: "Warning"){ |
|
|
|
self.dismiss(animated: true, completion: nil) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func successVerify() { |
|
|
|
let url = "\(self.model.kftcModel?.url ?? "")&lang=\(selectedLanguage?.key ?? "")" |
|
|
|
var header = [String: String]() |
|
|
|
self.model.kftcModel?.header?.forEach({ |
|
|
|
header[$0.key ?? ""] = $0.value ?? "" |
|
|
|
}) |
|
|
|
|
|
|
|
header["Kftc-Bfop-BankCodeStd"] = self.selectedBank?.bankCode ?? "" |
|
|
|
header["Kftc-Bfop-AccountNum"] = self.accountTextField.text ?? "" |
|
|
|
|
|
|
|
self.presenter?.doGetTestURL(url: url, header: header) |
|
|
|
} |
|
|
|
|
|
|
|
func successTestURL(url: String) { |
|
|
|
self.presenter?.goKFTC(url: url, header: self.model.kftcModel?.header) |
|
|
|
} |
|
|
|
|
|
|
|
func failure(error: Error) { |
|
|
|
self.alert(message: error.localizedDescription, title: "Warning", okAction: nil) |
|
|
|
} |
|
|
|
|
|
|
|
func startLoading(){ |
|
|
|
self.showProgressHud() |
|
|
|
} |
|
|
|
|
|
|
|
func endLoading(){ |
|
|
|
self.hideProgressHud() |
|
|
|
} |
|
|
|
func setModel(model: (bankList: [BankInformation]?, kftcModel: KFTCModel?)) { |
|
|
|
self.model = model |
|
|
|
} |
|
|
|
|
|
|
|
func failureSetModel(error: Error) { |
|
|
|
alert(message: error.localizedDescription, title: "Warning"){ |
|
|
|
dismiss(animated: true, completion: nil) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func successVerify() { |
|
|
|
let url = "\(model.kftcModel?.url ?? "")&lang=\(selectedLanguage?.key ?? "")" |
|
|
|
var header = [String: String]() |
|
|
|
model.kftcModel?.header?.forEach({ |
|
|
|
header[$0.key ?? ""] = $0.value ?? "" |
|
|
|
}) |
|
|
|
|
|
|
|
header["Kftc-Bfop-BankCodeStd"] = selectedBank?.bankCode ?? "" |
|
|
|
header["Kftc-Bfop-AccountNum"] = accountTextField.text ?? "" |
|
|
|
|
|
|
|
presenter?.doGetTestURL(url: url, header: header) |
|
|
|
} |
|
|
|
|
|
|
|
func successTestURL(url: String) { |
|
|
|
presenter?.goKFTC(url: url, header: self.model.kftcModel?.header) |
|
|
|
} |
|
|
|
|
|
|
|
func failure(error: Error) { |
|
|
|
alert(message: error.localizedDescription, title: "Warning", okAction: nil) |
|
|
|
} |
|
|
|
|
|
|
|
func startLoading(){ |
|
|
|
showProgressHud() |
|
|
|
} |
|
|
|
|
|
|
|
func endLoading(){ |
|
|
|
hideProgressHud() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: UIPickerViewDataSource |
|
|
|
|
|
|
|
extension AddAccountViewController: UIPickerViewDataSource { |
|
|
|
func numberOfComponents(in pickerView: UIPickerView) -> Int { |
|
|
|
return 1 |
|
|
|
} |
|
|
|
|
|
|
|
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { |
|
|
|
guard |
|
|
|
let model = self.model.kftcModel, |
|
|
|
let bankList = self.model.bankList, |
|
|
|
let languages = model.languages else { return 0 } |
|
|
|
|
|
|
|
switch pickerView { |
|
|
|
case languagePickerView: |
|
|
|
return languages.count |
|
|
|
case bankPickerView: |
|
|
|
return bankList.count |
|
|
|
default: |
|
|
|
return 0 |
|
|
|
} |
|
|
|
} |
|
|
|
func numberOfComponents(in pickerView: UIPickerView) -> Int { |
|
|
|
return 1 |
|
|
|
} |
|
|
|
|
|
|
|
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { |
|
|
|
guard |
|
|
|
let model = model.kftcModel, |
|
|
|
let bankList = self.model.bankList, |
|
|
|
let languages = model.languages else { return 0 } |
|
|
|
|
|
|
|
switch pickerView { |
|
|
|
case languagePickerView: |
|
|
|
return languages.count |
|
|
|
case bankPickerView: |
|
|
|
return bankList.count |
|
|
|
default: |
|
|
|
return 0 |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// MARK: UIPickerViewDelegate |
|
|
|
|
|
|
|
extension AddAccountViewController: UIPickerViewDelegate { |
|
|
|
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { |
|
|
|
switch pickerView { |
|
|
|
case languagePickerView: |
|
|
|
return model.kftcModel?.languages?[row].value |
|
|
|
case bankPickerView: |
|
|
|
return model.bankList?[row].bankName |
|
|
|
default: |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { |
|
|
|
switch pickerView { |
|
|
|
case languagePickerView: |
|
|
|
self.selectedLanguage = self.model.kftcModel?.languages?[row] |
|
|
|
case bankPickerView: |
|
|
|
self.selectedBank = self.model.bankList?[row] |
|
|
|
default: |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { |
|
|
|
switch pickerView { |
|
|
|
case languagePickerView: |
|
|
|
return model.kftcModel?.languages?[row].value |
|
|
|
case bankPickerView: |
|
|
|
return model.bankList?[row].bankName |
|
|
|
default: |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { |
|
|
|
switch pickerView { |
|
|
|
case languagePickerView: |
|
|
|
selectedLanguage = model.kftcModel?.languages?[row] |
|
|
|
case bankPickerView: |
|
|
|
selectedBank = model.bankList?[row] |
|
|
|
default: |
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
} |