|
|
@ -10,200 +10,190 @@ import UIKit |
|
|
|
|
|
|
|
class AutoDebitViewController: UIViewController { |
|
|
|
|
|
|
|
struct StringConstants { |
|
|
|
let navigationTitle = "auto_debit_title_text".localized() |
|
|
|
let languageUnavailableError = "no_lanugages_available_text".localized() |
|
|
|
let pickerTitle = "select_language_text".localized() |
|
|
|
let cancelText = "cancel_text".localized() |
|
|
|
let deleteTitleText = "auto_debit_delete_confirm_description".localized() |
|
|
|
let confirmationText = "are_you_sure_text".localized() |
|
|
|
let deleteText = "delete_text".localized() |
|
|
|
let editText = "Edit".localized() |
|
|
|
let addAccountText = "add_auto_debit_account_text".localized() |
|
|
|
let swipeInfoText = "swift_to_delete_account_text".localized() |
|
|
|
} |
|
|
|
|
|
|
|
// MARK:- IBOutlets |
|
|
|
@IBOutlet weak var tableView: UITableView! |
|
|
|
@IBOutlet weak var viewAddAccount: UIView! // this is the view that contains add reciepient. should be header |
|
|
|
@IBOutlet weak var labelSwipeInfo: UILabel! |
|
|
|
|
|
|
|
@IBOutlet weak var addAccountLabel: UILabel! |
|
|
|
var presenter: AutoDebitPresenter? |
|
|
|
// MARK:- properties |
|
|
|
var kftcDetail: KFTCModel? { |
|
|
|
didSet { |
|
|
|
self.accounts = kftcDetail?.model ?? [] |
|
|
|
self.languages = kftcDetail?.languages |
|
|
|
self.header = kftcDetail?.header |
|
|
|
self.url = kftcDetail?.url |
|
|
|
self.tableView.reloadData() |
|
|
|
struct MultiLanguages { |
|
|
|
let navigationTitle = "auto_debit_title_text".localized() |
|
|
|
let languageUnavailableError = "no_lanugages_available_text".localized() |
|
|
|
let pickerTitle = "select_language_text".localized() |
|
|
|
let cancelText = "cancel_text".localized() |
|
|
|
let deleteTitleText = "auto_debit_delete_confirm_description".localized() |
|
|
|
let confirmationText = "are_you_sure_text".localized() |
|
|
|
let deleteText = "delete_text".localized() |
|
|
|
let editText = "Edit".localized() |
|
|
|
let addAccountText = "add_auto_debit_account_text".localized() |
|
|
|
let swipeInfoText = "swift_to_delete_account_text".localized() |
|
|
|
} |
|
|
|
|
|
|
|
// MARK:- IBOutlets |
|
|
|
@IBOutlet private weak var tableView: UITableView! |
|
|
|
@IBOutlet private weak var viewAddAccount: UIView! |
|
|
|
@IBOutlet private weak var labelSwipeInfo: UILabel! |
|
|
|
@IBOutlet private weak var addAccountLabel: UILabel! |
|
|
|
|
|
|
|
// MARK:- properties |
|
|
|
var presenter: AutoDebitPresenter? |
|
|
|
|
|
|
|
private var kftcDetail: KFTCModel? { |
|
|
|
didSet { |
|
|
|
accounts = kftcDetail?.model |
|
|
|
tableView.reloadData() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private var accounts: [Account]? { |
|
|
|
didSet { |
|
|
|
guard |
|
|
|
let account = accounts, |
|
|
|
!account.isEmpty |
|
|
|
else { |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
var accounts: [Account]? { |
|
|
|
didSet { |
|
|
|
if (accounts ?? []).isEmpty { |
|
|
|
}else { |
|
|
|
self.tableView.isHidden = false |
|
|
|
self.labelSwipeInfo.isHidden = false |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var languages: [KftcLanguage]? |
|
|
|
var header: [KftcHeader]? |
|
|
|
var url: String? |
|
|
|
|
|
|
|
var selectedLanguage: KftcLanguage? { |
|
|
|
didSet { |
|
|
|
if var url = self.url { |
|
|
|
let string = "&lang=\(selectedLanguage?.key ?? "")" |
|
|
|
url.append(string) |
|
|
|
var _header: [String: String] = [:] |
|
|
|
self.header?.forEach({ (header) in |
|
|
|
_header[header.key ?? ""] = header.value ?? "" |
|
|
|
}) |
|
|
|
self.showProgressHud() |
|
|
|
self.fetchKftcUrlService(url: url, header: _header , success: { (location) in |
|
|
|
guard var location = location else { |
|
|
|
self.hideProgressHud() |
|
|
|
print("cannot get location from server") |
|
|
|
return |
|
|
|
} |
|
|
|
location = location.components(separatedBy: .whitespaces).joined() |
|
|
|
self.hideProgressHud() |
|
|
|
self.openWkWebViewWith(url: location) |
|
|
|
}) { (error) in |
|
|
|
self.alert(message: error.localizedDescription) |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
tableView.isHidden = false |
|
|
|
labelSwipeInfo.isHidden = false |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// MARK:- Life Cycle |
|
|
|
override func viewWillAppear(_ animated: Bool) { |
|
|
|
super.viewWillAppear(animated) |
|
|
|
self.setupNormalNavigation() |
|
|
|
self.navigationItem.title = StringConstants().navigationTitle |
|
|
|
fetchReceipients() |
|
|
|
} |
|
|
|
private let multiLanguages = MultiLanguages() |
|
|
|
|
|
|
|
override func viewDidLoad() { |
|
|
|
super.viewDidLoad() |
|
|
|
self.setupDelegates() |
|
|
|
viewAddAccount.layer.cornerRadius = 10 |
|
|
|
} |
|
|
|
// MARK:- Life Cycle |
|
|
|
|
|
|
|
override func viewWillDisappear(_ animated: Bool) { |
|
|
|
super.viewWillDisappear(animated) |
|
|
|
// self.title = "" |
|
|
|
self.navigationItem.title = "" |
|
|
|
} |
|
|
|
override func viewWillAppear(_ animated: Bool) { |
|
|
|
super.viewWillAppear(animated) |
|
|
|
|
|
|
|
private func openWkWebViewWith(url: String) { |
|
|
|
let viewcontroller = UIStoryboard.init(name: "WKWebView", bundle: nil).instantiateViewController(withIdentifier: "WkWebViewController") as! WkWebViewController |
|
|
|
viewcontroller.url = url |
|
|
|
viewcontroller.headers = self.header |
|
|
|
let nvc = UINavigationController.init(rootViewController: viewcontroller) |
|
|
|
self.present(nvc, animated: true, completion: nil) |
|
|
|
} |
|
|
|
setupNormalNavigation() |
|
|
|
navigationItem.title = multiLanguages.navigationTitle |
|
|
|
|
|
|
|
// MARK:- IBAction |
|
|
|
@IBAction func loadMoreAction(_ sender: Any) { |
|
|
|
} |
|
|
|
presenter?.fetchKFTCBankAccountList() |
|
|
|
} |
|
|
|
|
|
|
|
@IBAction func addNewAccount(_ sender: UITapGestureRecognizer) { |
|
|
|
if (self.languages ?? []).isEmpty { |
|
|
|
self.alert(message: StringConstants().languageUnavailableError) |
|
|
|
} |
|
|
|
override func viewDidLoad() { |
|
|
|
super.viewDidLoad() |
|
|
|
|
|
|
|
showLanguageSelection() |
|
|
|
} |
|
|
|
setupDelegates() |
|
|
|
|
|
|
|
// MARK:- other functions |
|
|
|
private func setupDelegates() { |
|
|
|
self.tableView.delegate = self |
|
|
|
self.tableView.dataSource = self |
|
|
|
configureText() |
|
|
|
} |
|
|
|
viewAddAccount.layer.cornerRadius = 10 |
|
|
|
} |
|
|
|
|
|
|
|
private func configureText() { |
|
|
|
self.addAccountLabel.text = StringConstants().addAccountText |
|
|
|
self.labelSwipeInfo.text = StringConstants().swipeInfoText |
|
|
|
} |
|
|
|
override func viewWillDisappear(_ animated: Bool) { |
|
|
|
super.viewWillDisappear(animated) |
|
|
|
navigationItem.title = "" |
|
|
|
} |
|
|
|
|
|
|
|
private func showLanguageSelection() { |
|
|
|
//TODO: addAccount 모듈을 presenter에서 호출 |
|
|
|
self.presenter?.goAddAccount(model: self.kftcDetail) |
|
|
|
} |
|
|
|
|
|
|
|
// MARK:- IBAction |
|
|
|
|
|
|
|
@IBAction |
|
|
|
private func addNewAccount(_ sender: UITapGestureRecognizer) { |
|
|
|
presenter?.goAddAccount(model: kftcDetail) |
|
|
|
} |
|
|
|
|
|
|
|
// MARK:- other functions |
|
|
|
|
|
|
|
private func setupDelegates() { |
|
|
|
tableView.delegate = self |
|
|
|
tableView.dataSource = self |
|
|
|
|
|
|
|
configureText() |
|
|
|
} |
|
|
|
|
|
|
|
private func configureText() { |
|
|
|
addAccountLabel.text = multiLanguages.addAccountText |
|
|
|
labelSwipeInfo.text = multiLanguages.swipeInfoText |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
extension AutoDebitViewController: UITableViewDelegate,UITableViewDataSource { |
|
|
|
|
|
|
|
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { |
|
|
|
return 120.0 |
|
|
|
} |
|
|
|
// MARK: - UITableViewDataSource |
|
|
|
|
|
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
|
|
|
return self.accounts?.count ?? 0 |
|
|
|
} |
|
|
|
extension AutoDebitViewController: UITableViewDataSource { |
|
|
|
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { |
|
|
|
return 120.0 |
|
|
|
} |
|
|
|
|
|
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
|
|
|
let cell = tableView.dequeueReusableCell(withIdentifier: "AutoDebitTableViewCell", for: indexPath) as! AutoDebitTableViewCell |
|
|
|
cell.model = self.accounts?.elementAt(index: indexPath.row) |
|
|
|
cell.setup() |
|
|
|
return cell |
|
|
|
} |
|
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
|
|
|
return accounts?.count ?? 0 |
|
|
|
} |
|
|
|
|
|
|
|
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { |
|
|
|
let delete = UITableViewRowAction(style: .destructive, title: StringConstants().deleteText) { (action, indexPath) in |
|
|
|
self.alertWithOkCancel(message: StringConstants().deleteTitleText, title: StringConstants().confirmationText, okTitle: StringConstants().deleteText ,OkStyle: UIAlertActionStyle.destructive, okAction: { |
|
|
|
let defaults = UserDefaults.standard |
|
|
|
let myUsername = defaults.string(forKey: "com.gmeremit.username") ?? "" |
|
|
|
self.showProgressHud() |
|
|
|
if let account = self.accounts?.elementAt(index: indexPath.row) { |
|
|
|
self.deleteAccount(username: myUsername, account: account, success: { |
|
|
|
self.fetchReceipients() |
|
|
|
}, failure: { (error) in |
|
|
|
self.hideProgressHud() |
|
|
|
self.alert(message: error.localizedDescription) |
|
|
|
}) |
|
|
|
self.showProgressHud() |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
delete.backgroundColor = UIColor.init(hex: "DE333C") |
|
|
|
return [delete] |
|
|
|
} |
|
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
|
|
|
let cell = tableView.dequeueReusableCell( |
|
|
|
withIdentifier: "AutoDebitTableViewCell", |
|
|
|
for: indexPath |
|
|
|
) as! AutoDebitTableViewCell |
|
|
|
|
|
|
|
func fetchReceipients() { |
|
|
|
self.showProgressHud() |
|
|
|
let defaults = UserDefaults.standard |
|
|
|
let myUsername = defaults.string(forKey: UserKeys.email) ?? "" |
|
|
|
self.fetchAccountList(username: myUsername, success: { (kftc) in |
|
|
|
self.hideProgressHud() |
|
|
|
self.kftcDetail = kftc |
|
|
|
}) { (error) in |
|
|
|
self.hideProgressHud() |
|
|
|
self.alert(message: error.localizedDescription) |
|
|
|
} |
|
|
|
} |
|
|
|
cell.setup(with: accounts?.elementAt(index: indexPath.row)) |
|
|
|
|
|
|
|
return cell |
|
|
|
} |
|
|
|
|
|
|
|
private func showAddNewReciepientViewController() { |
|
|
|
let viewcontroller = AddReciepientWireframe().getMainView() |
|
|
|
self.navigationController?.pushViewController(viewcontroller, animated: true) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
extension AutoDebitViewController: FetchAccountList, DeleteAccountService { |
|
|
|
|
|
|
|
} |
|
|
|
// MARK: - UITableViewDelegate |
|
|
|
|
|
|
|
extension AutoDebitViewController: AutoDebitViewInterface { |
|
|
|
extension AutoDebitViewController: UITableViewDelegate { |
|
|
|
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { |
|
|
|
let delete = UITableViewRowAction( |
|
|
|
style: .destructive, |
|
|
|
title: multiLanguages.deleteText |
|
|
|
) { [weak self] (action, indexPath) in |
|
|
|
guard let `self` = self else { return } |
|
|
|
|
|
|
|
self.alertWithOkCancel( |
|
|
|
message: self.multiLanguages.deleteTitleText, |
|
|
|
title: self.multiLanguages.confirmationText, |
|
|
|
okTitle: self.multiLanguages.deleteText, |
|
|
|
OkStyle: UIAlertActionStyle.destructive, |
|
|
|
okAction: { [weak self] in |
|
|
|
guard let `self` = self else { return } |
|
|
|
|
|
|
|
let email = UserDefaults |
|
|
|
.standard |
|
|
|
.string(forKey: "com.gmeremit.username") ?? "" |
|
|
|
|
|
|
|
guard let account = self.accounts?.elementAt(index: indexPath.row) else { return } |
|
|
|
|
|
|
|
self.presenter?.deleteKFTCBankAccount(of: email, with: account) |
|
|
|
} |
|
|
|
) |
|
|
|
} |
|
|
|
|
|
|
|
delete.backgroundColor = UIColor.init(hex: "DE333C") |
|
|
|
return [delete] |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
extension AutoDebitViewController: FetchKftcUrlService { |
|
|
|
// MARK: - AutoDebitViewInterface |
|
|
|
|
|
|
|
extension AutoDebitViewController: AutoDebitViewInterface { |
|
|
|
func didDeleteAccount() { |
|
|
|
presenter?.fetchKFTCBankAccountList() |
|
|
|
} |
|
|
|
|
|
|
|
func didFailDeleteAccount(with error: Error) { |
|
|
|
alert( |
|
|
|
message: error.localizedDescription, |
|
|
|
title: "Failed Delete", |
|
|
|
okAction: nil |
|
|
|
) |
|
|
|
} |
|
|
|
|
|
|
|
func startLoading() { |
|
|
|
showProgressHud() |
|
|
|
} |
|
|
|
|
|
|
|
func endLoading() { |
|
|
|
hideProgressHud() |
|
|
|
} |
|
|
|
|
|
|
|
func setModel(with model: KFTCModel?){ |
|
|
|
kftcDetail = model |
|
|
|
} |
|
|
|
|
|
|
|
func didFailSetModel(with error: Error) { |
|
|
|
alert( |
|
|
|
message: error.localizedDescription, |
|
|
|
title: "Failed Fetch KFTC Account List", |
|
|
|
okAction: nil |
|
|
|
) |
|
|
|
} |
|
|
|
} |