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.
310 lines
9.7 KiB
310 lines
9.7 KiB
//
|
|
// PennyTestSubmitViewController.swift
|
|
// GME Remit
|
|
//
|
|
// Created by Mac on 11/28/18.
|
|
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import PMAlertController
|
|
import FirebaseInstanceID
|
|
import LGSideMenuController
|
|
|
|
class PennyTestSubmitViewController: UIViewController {
|
|
|
|
struct StringConstants {
|
|
let navigationTitle = "penny_test_title_text".localized()
|
|
let depositReferenceText = "deposit_reference_text".localized()
|
|
let viewSampleText = "view_sample_text".localized()
|
|
let resendRequestText = "resend_request_text".localized()
|
|
let submitText = "submit_text".localized()
|
|
}
|
|
|
|
// MARK: Properties
|
|
|
|
var presenter: PennyTestSubmitModuleInterface?
|
|
weak var parentViewcontroller: UIViewController?
|
|
|
|
private var isValid = false {
|
|
didSet {
|
|
submitButton.isEnabled = isValid
|
|
submitButton.backgroundColor = isValid ? .themeRed : .lightGray
|
|
}
|
|
}
|
|
|
|
// MARK: IBOutlets
|
|
|
|
@IBOutlet weak var dipositReferencelabel: UILabel!
|
|
@IBOutlet weak var titleLabel: UILabel!
|
|
@IBOutlet weak var verificationCodeTextField: UITextField!
|
|
@IBOutlet weak var viewSampleButton: UIButton!
|
|
@IBOutlet weak var resendButton: UIButton!
|
|
@IBOutlet weak var submitButton: UIButton!
|
|
// MARK: VC's Life cycle
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
self.setup()
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
self.setupNormalNavigation()
|
|
self.navigationItem.title = StringConstants().navigationTitle
|
|
self.navigationItem.hidesBackButton = true
|
|
}
|
|
|
|
// MARK: IBActions
|
|
|
|
// MARK: Other Functions
|
|
|
|
private func setup() {
|
|
// all setup should be done here
|
|
requestPennytestInfoDuringViewLoad()
|
|
let message = GMEDB.shared.user.string(.pennyTestServerMessage)
|
|
self.titleLabel.text = message
|
|
configureText()
|
|
|
|
submitButton.layer.cornerRadius = 5
|
|
verificationCodeTextField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
|
|
}
|
|
|
|
@objc private func editingChanged(_ textField: UITextField) {
|
|
guard let text = textField.text else {
|
|
return
|
|
}
|
|
|
|
isValid = text.count == 4 ? true : false
|
|
}
|
|
|
|
private func configureText() {
|
|
self.titleLabel.text = "penny_test_promt_description_text".localized()
|
|
self.dipositReferencelabel.text = StringConstants().depositReferenceText
|
|
self.viewSampleButton.setTitle(StringConstants().viewSampleText, for: UIControl.State.normal)
|
|
self.resendButton.setTitle(StringConstants().resendRequestText, for: UIControl.State.normal)
|
|
self.submitButton.setTitle(StringConstants().submitText, for: UIControl.State.normal)
|
|
}
|
|
|
|
@IBAction func viewSample(_ sender: Any) {
|
|
self.showSampleImage()
|
|
}
|
|
|
|
@IBAction func resend(_ sender: Any) {
|
|
self.proceed()
|
|
}
|
|
|
|
@IBAction func dismiss(_ sender: Any) {
|
|
self.dismiss()
|
|
}
|
|
|
|
private func dismiss() {
|
|
parentViewcontroller?.dismiss(animated: true, completion: nil)
|
|
self.dismiss(animated: true, completion: nil)
|
|
if let navigation = self.navigationController {
|
|
navigation.popViewController(animated: true)
|
|
}
|
|
}
|
|
|
|
func showSampleImage() {
|
|
let image = #imageLiteral(resourceName: "penny3.jpg")
|
|
let alertVC = PMAlertController(title: "", description: "", image: image, style: .alert)
|
|
alertVC.alertView.layer.cornerRadius = 5
|
|
let action = PMAlertAction(title: "ok_text".localized(), style: .cancel)
|
|
alertVC.addAction(action)
|
|
self.present(alertVC, animated: true, completion: nil)
|
|
}
|
|
|
|
// resend
|
|
private func proceed() {
|
|
let userId = Utility.getMyUserName()
|
|
self.showLoading()
|
|
|
|
self.initiate(
|
|
userId: userId,
|
|
isResendRequest: "Y",
|
|
success: { result in
|
|
self.hideLoading()
|
|
self.alertWithOk(
|
|
type: .normal,
|
|
message: result.message,
|
|
title: "success_text".localized(),
|
|
okTitle: "ok_text".localized(),
|
|
okAction: nil
|
|
)
|
|
self.updatePennyTestRequestStatus()
|
|
},
|
|
failure: { (error) in
|
|
self.updatePennyTestRequestStatus()
|
|
self.hideLoading()
|
|
self.alert(type: .error, message: error.localizedDescription)
|
|
}
|
|
)
|
|
}
|
|
|
|
private func requestPennytestInfoDuringViewLoad() {
|
|
let userId = Utility.getMyUserName()
|
|
self.showLoading()
|
|
|
|
self.initiate(
|
|
userId: userId,
|
|
isResendRequest: "N",
|
|
success: { result in
|
|
self.hideLoading()
|
|
self.titleLabel.text = result.message
|
|
GMEDB.shared.user.set(result.message, .pennyTestServerMessage)
|
|
self.updatePennyTestRequestStatus()
|
|
},
|
|
failure: { (error) in
|
|
self.updatePennyTestRequestStatus()
|
|
self.hideLoading()
|
|
self.alert(type: .error, message: error.localizedDescription)
|
|
}
|
|
)
|
|
}
|
|
|
|
private func updatePennyTestRequestStatus() {
|
|
GMEDB.shared.user.set(PennyTestStatusCode.requested.rawValue, .pennyTestStatusCode)
|
|
}
|
|
|
|
private func showLoading() {
|
|
self.showProgressHud()
|
|
}
|
|
|
|
private func hideLoading() {
|
|
self.hideProgressHud()
|
|
}
|
|
|
|
@IBAction func touchVerify(_ sender: UIButton) {
|
|
guard let certNumber = self.verificationCodeTextField.text?.removeSpacesTrailingPreceding()
|
|
else {
|
|
self.alert(type: .error, message: "valid_verification_code_error".localized())
|
|
return
|
|
}
|
|
|
|
let customerId = GMEDB.shared.user.string(.senderId) ?? ""
|
|
let accountNumber = GMEDB.shared.user.string(.primaryAccountNumber) ?? ""
|
|
|
|
let params =
|
|
[
|
|
"AccountNo": accountNumber,
|
|
"CertNumber": certNumber,
|
|
"CustomerId": customerId
|
|
]
|
|
|
|
self.submit(
|
|
params: params,
|
|
success: { (response) in
|
|
// UPDATE BALANCE
|
|
let balance = response.extra ?? ""
|
|
let userInfo = [SideMenuNavigationNotifications.availableBalance : balance]
|
|
|
|
GMEDB.shared.user.set(balance, .availableBalance)
|
|
NotificationCenter.default.post(
|
|
name: self.getAvailableBalanceNotificationName(),
|
|
object: nil,
|
|
userInfo: userInfo
|
|
)
|
|
|
|
// UPDATE YEARLY LIMIT
|
|
let limit = response.yearlyLimit ?? ""
|
|
let userInfo2 = [AppConstants.yearlyLimitNotification : limit]
|
|
NotificationCenter.default.post(
|
|
name: self.getAvailableBalanceNotificationName(),
|
|
object: nil,
|
|
userInfo: userInfo2
|
|
)
|
|
|
|
// show alert and dismiss
|
|
self.alertWithOk(
|
|
type: .normal,
|
|
message: response.message ?? "",
|
|
title: "Success",
|
|
okTitle: "Ok",
|
|
okAction: {
|
|
if self.presentingViewController != nil {
|
|
GMEDB.shared.user.set(PennyTestStatusCode.completed.rawValue, .pennyTestStatusCode)
|
|
self.dismiss()
|
|
} else {
|
|
GMEDB.shared.user.set(PennyTestStatusCode.completed.rawValue, .pennyTestStatusCode)
|
|
self.doLogin()
|
|
}
|
|
})
|
|
},
|
|
failure: { (error) in
|
|
self.alert(type: .error, message: error.localizedDescription)
|
|
}
|
|
)
|
|
}
|
|
|
|
func getAvailableBalanceNotificationName() -> Notification.Name {
|
|
return Notification.Name.init(rawValue: SideMenuNavigationNotifications.availableBalance)
|
|
}
|
|
|
|
private func doLogin() {
|
|
|
|
let loginService = LoginService()
|
|
|
|
guard let userID = KeyChain.shared.get(key: .temporaryID),
|
|
let password = KeyChain.shared.get(key: .temporaryPW) else {
|
|
return
|
|
}
|
|
|
|
self.showProgressHud(backgroundColor: .clear, loadingColor: .white, textColor: .white)
|
|
|
|
loginService.accessCode(
|
|
userId: userID,
|
|
password: password,
|
|
success: { (user) in
|
|
|
|
KeyChain.shared.remove(key: .temporaryID)
|
|
KeyChain.shared.remove(key: .temporaryPW)
|
|
|
|
let accessCode = user?.accessCode ?? ""
|
|
let accessCodeBase64 = accessCode
|
|
|
|
Utility.save(user: user, accessCodeBase64: accessCodeBase64, password: password, login: true)
|
|
|
|
let mainWireFrame = MainWireframe.shared
|
|
let tabBarViewController = mainWireFrame?.getMainView()
|
|
guard let sidemenuVc = UIStoryboard(name: "SideMenu", bundle: nil).instantiateViewController(
|
|
withIdentifier: "SideMenuViewController"
|
|
) as? SideMenuViewController else {
|
|
return
|
|
}
|
|
|
|
let sideMenuController = LGSideMenuController(
|
|
rootViewController: tabBarViewController,
|
|
leftViewController: sidemenuVc,
|
|
rightViewController: nil
|
|
)
|
|
|
|
sideMenuController.rootViewLayerShadowColor = UIColor(white: 0.9, alpha: 0.6)
|
|
sideMenuController.rootViewLayerShadowRadius = 8.0
|
|
sideMenuController.leftViewPresentationStyle = .scaleFromBig
|
|
sideMenuController.leftViewWidth = UIScreen.main.bounds.width - 70.0
|
|
|
|
sideMenuController.leftViewBackgroundBlurEffect = UIBlurEffect(style: .regular)
|
|
|
|
self.hideProgressHud()
|
|
mainWireFrame?.window?.backgroundColor = sidemenuVc.view.backgroundColor
|
|
mainWireFrame?.window?.rootViewController = sideMenuController
|
|
|
|
},
|
|
failure: { (error) in
|
|
self.hideProgressHud()
|
|
self.alert(type: .error, message: error.localizedDescription, title: "Warning") {
|
|
// if failed login, remove all in keychain, change logout status and then go splash screen
|
|
KeyChain.shared.removeAll()
|
|
self.navigationController?.popToRootViewController(animated: false)
|
|
}
|
|
}
|
|
)
|
|
}
|
|
}
|
|
|
|
// MARK: PennyTestSubmitViewInterface
|
|
extension PennyTestSubmitViewController: PennyTestSubmitViewInterface {}
|
|
extension PennyTestSubmitViewController: SubmitPennyTestService {}
|
|
extension PennyTestSubmitViewController: InitiatePennyTestService {}
|
|
extension PennyTestSubmitViewController: UserInfoService {}
|