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.
216 lines
6.5 KiB
216 lines
6.5 KiB
//
|
|
// AddAccountViewController.swift
|
|
// GME Remit
|
|
//
|
|
// Created by InKwon Devik Kim on 12/04/2019.
|
|
//Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import RxSwift
|
|
import RxCocoa
|
|
|
|
class AddAccountViewController: UIViewController {
|
|
|
|
// MARK: Properties
|
|
|
|
var presenter: AddAccountModuleInterface?
|
|
|
|
private var selectedLanguage: KftcLanguage?
|
|
private var selectedBank: BankInformation?
|
|
|
|
private let disposeBag = DisposeBag()
|
|
|
|
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 ? .themeRed : .lightGray
|
|
}
|
|
}
|
|
|
|
private var banks: [String]? = ["--- Select Bank ---"]
|
|
private var languages: [String]? = ["--- Select Language ---"]
|
|
|
|
private var model: (bankList: [BankInformation]?, kftcModel: KFTCModel?) {
|
|
didSet {
|
|
let bankConfigure = TablePresenterConfiguration(presenterTitle: "Select Bank")
|
|
bankNameTextField.useAsDropDown(with: bankConfigure, items: model.bankList)
|
|
|
|
let languageConfigure = TablePresenterConfiguration(presenterTitle: "Select Bank")
|
|
languageTextField.useAsDropDown(with: languageConfigure, items: model.kftcModel?.languages)
|
|
}
|
|
}
|
|
|
|
// 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!
|
|
|
|
@IBOutlet weak var closeButton: UIBarButtonItem!
|
|
@IBOutlet weak var titleInfoLabel: UILabel!
|
|
// MARK: VC's Life cycle
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
setup()
|
|
|
|
bankNameTextField.selectedItem.map {$0 as? BankInformation}.asDriverOnErrorJustComplete()
|
|
.drive(onNext: {[weak self] in
|
|
self?.selectedBank = $0
|
|
self?.bankNameTextField.setBank(with: $0?.bankCode)
|
|
}).disposed(by: disposeBag)
|
|
|
|
languageTextField.selectedItem.map {$0 as? KftcLanguage}.asDriverOnErrorJustComplete()
|
|
.drive(onNext: {[weak self] in
|
|
self?.selectedLanguage = $0
|
|
}).disposed(by: disposeBag)
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
title = "add_auto_debit_account_text".localized()
|
|
setupNormalNavigation()
|
|
}
|
|
|
|
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: GMEDB.shared.user.string(.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 = 5
|
|
setValidTextField()
|
|
setMultilanguage()
|
|
}
|
|
|
|
private func setValidTextField() {
|
|
bankNameTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
|
|
|
|
languageTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
|
|
|
|
accountTextField.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged)
|
|
|
|
accountTextField.validCondition = {$0.count > 9}
|
|
languageTextField.validCondition = {$0.count > 1}
|
|
bankNameTextField.validCondition = {$0.count > 1}
|
|
}
|
|
|
|
@objc
|
|
func textFieldDidChange(_ textfield: UITextField) {
|
|
guard let tf = textfield as? ValidationTextField else { return }
|
|
|
|
switch tf {
|
|
case bankNameTextField:
|
|
validDic["bank"] = tf.isValid
|
|
case accountTextField:
|
|
validDic["account"] = tf.isValid
|
|
case languageTextField:
|
|
validDic["language"] = tf.isValid
|
|
default:
|
|
break
|
|
}
|
|
|
|
isValid = validDic.allSatisfy {$0.value}
|
|
}
|
|
|
|
private func setMultilanguage() {
|
|
closeButton.title = "penny_test_close_text".localized()
|
|
titleInfoLabel.text = "to_add_account_enter_information".localized()
|
|
bankNameTextField.placeholder = "select_your_bank".localized()
|
|
accountTextField.placeholder = "enter_bank_ac_no".localized()
|
|
languageTextField.placeholder = "select_language".localized()
|
|
verifyAccountButton.setTitle("verify_account_button_text".localized(), for: .normal)
|
|
|
|
}
|
|
}
|
|
|
|
// MARK: AddAccountViewInterface
|
|
|
|
extension AddAccountViewController: AddAccountViewInterface {
|
|
func setModel(model: (bankList: [BankInformation]?, kftcModel: KFTCModel?)) {
|
|
self.model = model
|
|
}
|
|
|
|
func failureSetModel(error: Error) {
|
|
alert(type: .error, message: error.localizedDescription) {[weak self] in
|
|
guard let `self` = self else {return}
|
|
self.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) {
|
|
if error.localizedDescription.contains("JSON") {
|
|
let url = "\(model.kftcModel?.url ?? "")&lang=\(selectedLanguage?.key ?? "")"
|
|
|
|
let bankCode = KftcHeader(key: "Kftc-Bfop-BankCodeStd", value: selectedBank?.bankCode ?? "")
|
|
let accountNumber = KftcHeader(key: "Kftc-Bfop-AccountNum", value: accountTextField.text ?? "")
|
|
|
|
model.kftcModel?.header?.append(bankCode)
|
|
model.kftcModel?.header?.append(accountNumber)
|
|
|
|
presenter?.goKFTC(url: url, header: self.model.kftcModel?.header)
|
|
} else {
|
|
alert(type: .error, message: error.localizedDescription, okAction: nil)
|
|
}
|
|
}
|
|
|
|
func startLoading() {
|
|
showProgressHud()
|
|
}
|
|
|
|
func endLoading() {
|
|
hideProgressHud()
|
|
}
|
|
}
|