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.
 
 
 
 

224 lines
7.5 KiB

//
// AutoDebitViewController.swift
// GME Remit
//
// Created by Mac on 12/19/18.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class AutoDebitViewController: UIViewController {
// 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!
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()
}
}
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)
openWkWebViewWith(url: url)
}
}
}
// MARK:- Life Cycle
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.setupNormalNavigation()
self.navigationItem.title = "My Accounts"
fetchReceipients()
}
override func viewDidLoad() {
super.viewDidLoad()
self.setupDelegates()
viewAddAccount.layer.cornerRadius = 10
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// self.title = ""
self.navigationItem.title = ""
}
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)
}
// MARK:- IBAction
@IBAction func loadMoreAction(_ sender: Any) {
print("load more")
}
@IBAction func addNewAccount(_ sender: UITapGestureRecognizer) {
print("add new account")
if (self.languages ?? []).isEmpty {
self.alert(message: "No Lanugages Available")
}
showLanguageSelection()
}
// MARK:- other functions
private func setupDelegates() {
self.tableView.delegate = self
self.tableView.dataSource = self
}
private func showLanguageSelection() {
let picker = UIAlertController.init(title: "Select Language", message: nil, preferredStyle: UIAlertControllerStyle.actionSheet)
self.languages?.forEach({language in
let action = UIAlertAction.init(title: language.value, style: UIAlertActionStyle.default, handler: { (action) in
self.selectedLanguage = language
})
picker.addAction(action)
})
let cancelAction = UIAlertAction.init(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil)
picker.addAction(cancelAction)
self.present(picker, animated: true, completion: nil)
}
private func createDummyLangugage() -> [KftcLanguage] {
let leng = KftcLanguage()
leng.key = "eng"
leng.value = "English"
let leng1 = KftcLanguage()
leng1.key = "Nepali"
leng1.value = "Nepali"
return [leng, leng1]
}
}
extension AutoDebitViewController: UITableViewDelegate,UITableViewDataSource {
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 120.0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.accounts?.count ?? 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "recipientList", for: indexPath) as! AutoDebitTableViewCell
cell.model = self.accounts?.elementAt(index: indexPath.row)
cell.setup()
return cell
}
// AutoDebitTableViewCell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// startSendMoneyProcess(index: indexPath.row)
}
private func startSendMoneyProcess(index: Int) {
if let navigation = self.navigationController {
if let reciepient = self.accounts?.elementAt(index: index) {
let wireframe = SendMoneyParentWireframe()
// wireframe.open(for: reciepient, in: navigation)
}
}
}
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let delete = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in
self.alertWithOkCancel(message: "Do you want to delete this Account?", title: "Alert!", 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()
}
})
}
let edit = UITableViewRowAction(style: .normal, title: "Edit") { (action, indexPath) in
guard let navigation = self.navigationController else {return}
if let reciepient = self.accounts?.elementAt(index: indexPath.row) {
// do some editing
}
}
edit.backgroundColor = UIColor.init(hex: "#F39826")
delete.backgroundColor = UIColor.init(hex: "DE333C")
return [delete, edit]
}
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)
}
}
// private func
private func showAddNewReciepientViewController() {
let viewcontroller = AddReciepientWireframe().getMainView()
self.navigationController?.pushViewController(viewcontroller, animated: true)
}
}
extension AutoDebitViewController: FetchAccountList, DeleteAccountService {
}
extension AutoDebitViewController: AutoDebitViewInterface {
}
//AutoDebitViewController