Browse Source

renew kftc token

pull/1/head
InKwon James Kim 5 years ago
parent
commit
00eb1907a9
  1. 2
      GMERemittance/AppDelegate.swift
  2. 16
      GMERemittance/Extension/UIViewControllerExtension.swift
  3. 35
      GMERemittance/Library/WebLinks/WkWebView/WKWebView.storyboard
  4. 12
      GMERemittance/Library/WebLinks/WkWebView/WkWebViewController.swift
  5. 2
      GMERemittance/Module/AutoDebitModules/AddAccount/User Interface/View/AddAccountViewController.swift
  6. 34
      GMERemittance/Module/AutoDebitModules/AutoDebit/Application Logic/Interactor/AutoDebitInteractor.swift
  7. 18
      GMERemittance/Module/AutoDebitModules/AutoDebit/Application Logic/Interactor/AutoDebitInteractorIO.swift
  8. 2
      GMERemittance/Module/AutoDebitModules/AutoDebit/Application Logic/Service/AutoDebitService.swift
  9. 13
      GMERemittance/Module/AutoDebitModules/AutoDebit/Application Logic/Service/AutoDebitServiceType.swift
  10. 7
      GMERemittance/Module/AutoDebitModules/AutoDebit/Module Interface/AutoDebitModuleInterface.swift
  11. 12
      GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/Presenter/AutoDebitPresenter.swift
  12. 55
      GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitViewController.swift
  13. 1
      GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitViewInterface.swift
  14. 11
      GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/Wireframe/AutoDebitWireframe.swift
  15. 8
      GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/Wireframe/AutoDebitWireframeInput.swift
  16. 3
      GMERemittance/Module/SideMenu/SideMenuViewController.swift
  17. 2
      GMERemittanceTests/APITest.swift

2
GMERemittance/AppDelegate.swift

@ -20,7 +20,7 @@ import IQKeyboardManagerSwift
import LGSideMenuController import LGSideMenuController
import Localize_Swift import Localize_Swift
let server: Server = .stagging
let server: Server = .kftcTest
var overlayView: UIView? var overlayView: UIView?
@UIApplicationMain @UIApplicationMain

16
GMERemittance/Extension/UIViewControllerExtension.swift

@ -80,8 +80,20 @@ extension UIViewController {
style: style style: style
) )
alertController.addAction(title: okTitle,style: OkStyle, handler: okAction)
alertController.addAction(title: cancelTitle, style: cancelStyle, handler: cancelAction)
let cancelAlertAction = UIAlertAction(title: cancelTitle, style: cancelStyle, handler: {_ in
cancelAction?()
})
let okAlertAction = UIAlertAction(title: okTitle, style: OkStyle, handler: {_ in
okAction?()
})
cancelAlertAction.setValue(UIColor.black, forKey: "titleTextColor")
okAlertAction.setValue(UIColor.black, forKey: "titleTextColor")
alertController.addAction(cancelAlertAction)
alertController.addAction(okAlertAction)
// noAction.setValue(UIColor.black, forKey: "titleTextColor")
self.present(alertController, animated: true, completion: nil) self.present(alertController, animated: true, completion: nil)
} }

35
GMERemittance/Library/WebLinks/WkWebView/WKWebView.storyboard

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait"> <device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/> <adaptation id="fullscreen"/>
</device> </device>
<dependencies> <dependencies>
<deployment identifier="iOS"/> <deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
@ -20,10 +20,39 @@
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<viewLayoutGuide key="safeArea" id="Lea-Xa-Pyv"/> <viewLayoutGuide key="safeArea" id="Lea-Xa-Pyv"/>
</view> </view>
<navigationItem key="navigationItem" id="6vb-bC-T1D">
<barButtonItem key="leftBarButtonItem" title="Close" id="dbg-t3-cjc">
<color key="tintColor" red="0.92941176469999998" green="0.1137254902" blue="0.1960784314" alpha="1" colorSpace="calibratedRGB"/>
<connections>
<action selector="touchCloseButton:" destination="5lk-h3-UEb" id="qBz-nF-Q8Y"/>
</connections>
</barButtonItem>
</navigationItem>
<connections>
<outlet property="closeButton" destination="dbg-t3-cjc" id="06R-77-ZtT"/>
</connections>
</viewController> </viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="5DM-OP-Cof" userLabel="First Responder" sceneMemberID="firstResponder"/> <placeholder placeholderIdentifier="IBFirstResponder" id="5DM-OP-Cof" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects> </objects>
<point key="canvasLocation" x="-487" y="-560"/>
<point key="canvasLocation" x="452" y="-560.86956521739137"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="B3A-Uv-cRJ">
<objects>
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="gxd-re-aTS" sceneMemberID="viewController">
<toolbarItems/>
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="khf-h7-VJy">
<rect key="frame" x="0.0" y="20" width="375" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>
<connections>
<segue destination="5lk-h3-UEb" kind="relationship" relationship="rootViewController" id="Mfw-Ad-CdZ"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="RlY-CU-N0Q" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-487.19999999999999" y="-560.86956521739137"/>
</scene> </scene>
</scenes> </scenes>
</document> </document>

12
GMERemittance/Library/WebLinks/WkWebView/WkWebViewController.swift

@ -17,6 +17,7 @@ class WkWebViewController: UIViewController {
var activityIndicator: UIActivityIndicatorView? var activityIndicator: UIActivityIndicatorView?
let userContentController = WKUserContentController() let userContentController = WKUserContentController()
@IBOutlet weak var closeButton: UIBarButtonItem!
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
@ -49,6 +50,17 @@ class WkWebViewController: UIViewController {
let myRequest = URLRequest(url: myURL) let myRequest = URLRequest(url: myURL)
webView.load(myRequest) webView.load(myRequest)
} }
closeButton.title = "penny_test_close_text".localized()
if let count = navigationController?.viewControllers.count,
count > 1 {
navigationItem.leftBarButtonItem = nil
}
}
@IBAction func touchCloseButton(_ sender: UIBarButtonItem) {
dismiss(animated: true, completion: nil)
} }
} }

2
GMERemittance/Module/AutoDebitModules/AddAccount/User Interface/View/AddAccountViewController.swift

@ -39,10 +39,12 @@ class AddAccountViewController: UIViewController {
languagePickerView.delegate = self languagePickerView.delegate = self
languagePickerView.dataSource = self languagePickerView.dataSource = self
languageTextField.inputView = languagePickerView languageTextField.inputView = languagePickerView
languagePickerView.backgroundColor = .white
bankPickerView.delegate = self bankPickerView.delegate = self
bankPickerView.dataSource = self bankPickerView.dataSource = self
bankNameTextField.inputView = bankPickerView bankNameTextField.inputView = bankPickerView
bankPickerView.backgroundColor = .white
let originalBanks = model.bankList?.map{ $0.bankName ?? "" } let originalBanks = model.bankList?.map{ $0.bankName ?? "" }
let originalLanguages = model.kftcModel?.languages?.map { $0.value ?? ""} let originalLanguages = model.kftcModel?.languages?.map { $0.value ?? ""}

34
GMERemittance/Module/AutoDebitModules/AutoDebit/Application Logic/Interactor/AutoDebitInteractor.swift

@ -64,4 +64,38 @@ extension AutoDebitInteractor: AutoDebitInteractorInput {
} }
) )
} }
func refreshToken(language: KftcLanguage?) {
guard
let email = UserDefaults.standard.string(forKey: UserKeys.email),
let language = language else { return }
let service2 = AddAccountService()
service.refreshTokenStep1(
username: email,
success: { response in
let url = "\(response?.url?.replacingOccurrences(of: "&lang=", with: "&lang=\(language.key ?? "eng")") ?? "")"
var header = [String: String]()
response?.header?.forEach({
header[$0.key ?? ""] = $0.value ?? ""
})
service2.fetchKftcUrlService(
url: url,
header: header,
success: {
self.output?.refreshTokenSuccess(header: response?.header, url: $0)
},
failure: {
self.output?.refreshTokenError(with: $0)
}
)
},
failure: {
self.output?.refreshTokenError(with: $0)
}
)
}
} }

18
GMERemittance/Module/AutoDebitModules/AutoDebit/Application Logic/Interactor/AutoDebitInteractorIO.swift

@ -18,6 +18,12 @@ protocol AutoDebitInteractorInput: class {
/// - username: customer name /// - username: customer name
/// - account: bank account /// - account: bank account
func deleteKFTCBankAccount(of username: String, with account: Account) func deleteKFTCBankAccount(of username: String, with account: Account)
/// Refresh Token
///
/// - Parameter language: selected language
func refreshToken(language: KftcLanguage?)
} }
protocol AutoDebitInteractorOutput: class { protocol AutoDebitInteractorOutput: class {
@ -39,4 +45,16 @@ protocol AutoDebitInteractorOutput: class {
/// ///
/// - Parameter error: Error /// - Parameter error: Error
func didFailSetModel(with error: Error) func didFailSetModel(with error: Error)
/// If did fail refreshToken
///
/// - Parameter error: Error
func refreshTokenError(with error: Error)
/// if Succeess then get url for refresh token
///
/// - Parameter url: String
func refreshTokenSuccess(header: [KftcHeader]?, url: String?)
} }

2
GMERemittance/Module/AutoDebitModules/AutoDebit/Application Logic/Service/AutoDebitService.swift

@ -73,7 +73,7 @@ class AutoDebitService: AutoDebitServiceType {
) )
} }
func refreshAccount(
func refreshTokenStep1(
username: String, username: String,
success: @escaping (KFTCModel?) -> Void, success: @escaping (KFTCModel?) -> Void,
failure: @escaping (Error) -> Void failure: @escaping (Error) -> Void

13
GMERemittance/Module/AutoDebitModules/AutoDebit/Application Logic/Service/AutoDebitServiceType.swift

@ -35,4 +35,17 @@ protocol AutoDebitServiceType: class, ApiServiceType {
success: @escaping () -> Void, success: @escaping () -> Void,
failure: @escaping (Error) -> Void failure: @escaping (Error) -> Void
) )
/// Refresh token
///
/// - Parameters:
/// - username: username
/// - success: (KFTCModel?) -> Void)
/// - failure: (Error) -> Void)
func refreshTokenStep1(
username: String,
success: @escaping (KFTCModel?) -> Void,
failure: @escaping (Error) -> Void
)
} }

7
GMERemittance/Module/AutoDebitModules/AutoDebit/Module Interface/AutoDebitModuleInterface.swift

@ -24,4 +24,11 @@ protocol AutoDebitModuleInterface: class {
/// ///
/// - Parameter model: KFTCModel /// - Parameter model: KFTCModel
func goAddAccount(model: KFTCModel?) func goAddAccount(model: KFTCModel?)
/// Present Refresh Token
///
/// - Parameters:
/// - model: KFTCModel
/// - selectedLanguage: KftcLanguage
func goRefreshToken(selectedLanguage: KftcLanguage?)
} }

12
GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/Presenter/AutoDebitPresenter.swift

@ -35,11 +35,23 @@ extension AutoDebitPresenter: AutoDebitModuleInterface {
func goAddAccount(model: KFTCModel?){ func goAddAccount(model: KFTCModel?){
wireframe?.goAddAccountViewController(with: model) wireframe?.goAddAccountViewController(with: model)
} }
func goRefreshToken(selectedLanguage: KftcLanguage?) {
interactor?.refreshToken(language: selectedLanguage)
}
} }
// MARK: AutoDebit interactor output interface // MARK: AutoDebit interactor output interface
extension AutoDebitPresenter: AutoDebitInteractorOutput { extension AutoDebitPresenter: AutoDebitInteractorOutput {
func refreshTokenSuccess(header: [KftcHeader]?, url: String?) {
wireframe?.goRefreshToken(header: header, url: url)
}
func refreshTokenError(with error: Error) {
view?.didFailRefreshToken(with: error)
}
func setModel(with model: KFTCModel?) { func setModel(with model: KFTCModel?) {
view?.endLoading() view?.endLoading()
view?.setModel(with: model) view?.setModel(with: model)

55
GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitViewController.swift

@ -7,6 +7,7 @@
// //
import UIKit import UIKit
import IQKeyboardManagerSwift
class AutoDebitViewController: UIViewController { class AutoDebitViewController: UIViewController {
@ -32,14 +33,15 @@ class AutoDebitViewController: UIViewController {
@IBOutlet weak var refreshAccountButton: UIBarButtonItem! @IBOutlet weak var refreshAccountButton: UIBarButtonItem!
// MARK:- properties // MARK:- properties
var presenter: AutoDebitPresenter?
var presenter: AutoDebitModuleInterface?
var languages: [String] = ["--- Select Language ---"] var languages: [String] = ["--- Select Language ---"]
lazy var languageTextField = UITextField(frame: .zero) lazy var languageTextField = UITextField(frame: .zero)
var selectedLanguage: KftcLanguage? { var selectedLanguage: KftcLanguage? {
didSet { didSet {
print("\(selectedLanguage?.value ?? "undefined")")
// print("\(selectedLanguage?.value ?? "undefined")")
// presenter?.goRefreshToken(selectedLanguage: selectedLanguage)
} }
} }
@ -48,8 +50,10 @@ class AutoDebitViewController: UIViewController {
accounts = kftcDetail?.model accounts = kftcDetail?.model
tableView.reloadData() tableView.reloadData()
let originalLanguages = kftcDetail?.languages?.map { $0.value ?? ""}
languages.append(contentsOf: originalLanguages ?? [])
if languages.count < 2 {
let originalLanguages = kftcDetail?.languages?.map { $0.value ?? ""}
languages.append(contentsOf: originalLanguages ?? [])
}
} }
} }
@ -60,11 +64,16 @@ class AutoDebitViewController: UIViewController {
let account = accounts, let account = accounts,
!account.isEmpty !account.isEmpty
else { else {
refreshAccountButton.isEnabled = false
refreshAccountButton.tintColor = .clear
return return
} }
tableView.isHidden = false tableView.isHidden = false
labelSwipeInfo.isHidden = false labelSwipeInfo.isHidden = false
refreshAccountButton.isEnabled = true
refreshAccountButton.tintColor = .black
} }
} }
@ -94,12 +103,13 @@ class AutoDebitViewController: UIViewController {
super.viewWillDisappear(animated) super.viewWillDisappear(animated)
navigationItem.title = "" navigationItem.title = ""
view.endEditing(true)
if #available(iOS 11.0, *) { if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = false navigationController?.navigationBar.prefersLargeTitles = false
} }
} }
// MARK:- IBAction // MARK:- IBAction
@IBAction func touchAddAccountButton(_ sender: UIBarButtonItem) { @IBAction func touchAddAccountButton(_ sender: UIBarButtonItem) {
addNewAccount(UITapGestureRecognizer()) addNewAccount(UITapGestureRecognizer())
@ -107,15 +117,32 @@ class AutoDebitViewController: UIViewController {
} }
@IBAction func touchRefreshAccountButton(_ sender: UIBarButtonItem) { @IBAction func touchRefreshAccountButton(_ sender: UIBarButtonItem) {
let languagePickerView = UIPickerView()
languagePickerView.delegate = self
languagePickerView.dataSource = self
languageTextField.inputView = languagePickerView
languageTextField.placeholder = "Select Language for Refresh AutoDebit"
languageTextField.becomeFirstResponder()
alertWithOkCancel(
type: .normal,
message: "Do you try to renew token of registered Auto Debit Accounts?\n(It must be renewed every one year.)",
title: "Token Renewal",
okTitle: "yes_text".localized(),
style: .alert,
cancelTitle: "no_text".localized(),
okAction: {
let languagePickerView = UIPickerView()
languagePickerView.delegate = self
languagePickerView.dataSource = self
languagePickerView.backgroundColor = .white
self.languageTextField.inputView = languagePickerView
self.languageTextField.placeholder = "Select Language for Refresh AutoDebit"
self.languageTextField.becomeFirstResponder()
self.languageTextField.keyboardToolbar.doneBarButton.setTarget(self, action: #selector(self.editingDidEnd(_:)))
},
cancelAction: nil
)
} }
@objc func editingDidEnd(_ textField: UITextField) {
presenter?.goRefreshToken(selectedLanguage: selectedLanguage)
}
@IBAction @IBAction
private func addNewAccount(_ sender: UITapGestureRecognizer) { private func addNewAccount(_ sender: UITapGestureRecognizer) {
@ -201,6 +228,10 @@ extension AutoDebitViewController: UITableViewDelegate {
// MARK: - AutoDebitViewInterface // MARK: - AutoDebitViewInterface
extension AutoDebitViewController: AutoDebitViewInterface { extension AutoDebitViewController: AutoDebitViewInterface {
func didFailRefreshToken(with error: Error) {
alert(message: error.localizedDescription)
}
func didDeleteAccount() { func didDeleteAccount() {
presenter?.fetchKFTCBankAccountList() presenter?.fetchKFTCBankAccountList()
} }

1
GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/View/AutoDebitViewInterface.swift

@ -29,6 +29,7 @@ protocol AutoDebitViewInterface: class {
/// - Parameter error: Error /// - Parameter error: Error
func didFailDeleteAccount(with error: Error) func didFailDeleteAccount(with error: Error)
func didFailRefreshToken(with error: Error)
/// Start ActivityIndicator /// Start ActivityIndicator
func startLoading() func startLoading()

11
GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/Wireframe/AutoDebitWireframe.swift

@ -35,4 +35,15 @@ extension AutoDebitWireframe: AutoDebitWireframeInput {
func goAddAccountViewController(with model: KFTCModel?) { func goAddAccountViewController(with model: KFTCModel?) {
AddAccountWireframe().openPushMainView(with: model, source: view) AddAccountWireframe().openPushMainView(with: model, source: view)
} }
func goRefreshToken(header: [KftcHeader]?, url: String?) {
let viewcontroller = UIStoryboard.init(name: "WKWebView", bundle: nil).instantiateViewController(withIdentifier: "WkWebViewController") as! WkWebViewController
viewcontroller.url = url?.components(separatedBy: .whitespaces).joined()
viewcontroller.headers = header
let navigationController = UINavigationController(rootViewController: viewcontroller)
view.present(navigationController, animated: true, completion: nil)
}
} }

8
GMERemittance/Module/AutoDebitModules/AutoDebit/User Interface/Wireframe/AutoDebitWireframeInput.swift

@ -12,4 +12,12 @@ protocol AutoDebitWireframeInput: WireframeInput {
/// ///
/// - Parameter model: KFTCModel /// - Parameter model: KFTCModel
func goAddAccountViewController(with model: KFTCModel?) func goAddAccountViewController(with model: KFTCModel?)
/// Present Refresh Token
///
/// - Parameters:
/// - hearder: [String: String]]
/// - url: String
func goRefreshToken(header: [KftcHeader]?, url: String?)
} }

3
GMERemittance/Module/SideMenu/SideMenuViewController.swift

@ -175,8 +175,9 @@ class SideMenuViewController: UIViewController {
let noAction = UIAlertAction(title: StringConstants().noText, style: .default, handler: nil) let noAction = UIAlertAction(title: StringConstants().noText, style: .default, handler: nil)
noAction.setValue(UIColor.black, forKey: "titleTextColor") noAction.setValue(UIColor.black, forKey: "titleTextColor")
yesAction.setValue(UIColor(hex:0xEC1C24), forKey: "titleTextColor") yesAction.setValue(UIColor(hex:0xEC1C24), forKey: "titleTextColor")
alert.addAction(yesAction)
alert.addAction(noAction) alert.addAction(noAction)
alert.addAction(yesAction)
self.present(alert, animated: true, completion: nil) self.present(alert, animated: true, completion: nil)
} }

2
GMERemittanceTests/APITest.swift

@ -83,7 +83,7 @@ class APITest: XCTestCase {
let service2 = AddAccountService() let service2 = AddAccountService()
let expt = expectation(description: "Test KFTC Refresh") let expt = expectation(description: "Test KFTC Refresh")
service.refreshAccount(
service.refreshTokenStep1(
username: "maxkim@gmeremit.com", username: "maxkim@gmeremit.com",
success: { success: {
let url = "\($0?.url?.replacingOccurrences(of: "&lang=", with: "&lang=kor") ?? "")" let url = "\($0?.url?.replacingOccurrences(of: "&lang=", with: "&lang=kor") ?? "")"

Loading…
Cancel
Save