// // 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 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() let notNowText = "not_now_text".localized() } // MARK: Properties var presenter: PennyTestSubmitModuleInterface? weak var parentViewcontroller: UIViewController? // 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! @IBOutlet weak var notNowButton: 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 = UserDefaults.standard.string(forKey: AppConstants.pennyTestServerMessage) self.titleLabel.text = message configureText() } private func configureText() { self.titleLabel.text = "penny_test_promt_description_text".localized() self.dipositReferencelabel.text = StringConstants().depositReferenceText self.viewSampleButton.setTitle(StringConstants().viewSampleText, for: UIControlState.normal) self.resendButton.setTitle(StringConstants().resendRequestText, for: UIControlState.normal) self.submitButton.setTitle(StringConstants().submitText, for: UIControlState.normal) self.notNowButton.setTitle(StringConstants().notNowText, for: UIControlState.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 = 10 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(message: result.message, title: "success_text".localized(), okTitle: "ok_text".localized(), style: UIAlertControllerStyle.alert, OkStyle: UIAlertActionStyle.default, okAction: nil) self.updatePennyTestRequestStatus() }) { (error) in self.updatePennyTestRequestStatus() self.hideLoading() self.alert(message: error.localizedDescription) } } private func requestPennytestInfoDuringViewLoad() { let message = UserDefaults.standard.string(forKey: AppConstants.pennyTestServerMessage) let userId = Utility.getMyUserName() self.showLoading() self.initiate(userId: userId, isResendRequest: "N", success: { result in self.hideLoading() self.titleLabel.text = result.message UserDefaults.standard.set(result.message, forKey: AppConstants.pennyTestServerMessage) self.updatePennyTestRequestStatus() }) { (error) in self.updatePennyTestRequestStatus() self.hideLoading() self.alert(message: error.localizedDescription) } } private func updatePennyTestRequestStatus() { let _default = UserDefaults.standard _default.set(PennyTestStatusCode.requested.rawValue, forKey: AppConstants.pennyTestStatusCode) } private func showLoading() { self.showProgressHud() } private func hideLoading() { self.hideProgressHud() } @IBAction func Verify(_ sender: UIButton) { let customerId = Utility.getMyId() let certNumber = self.verificationCodeTextField.text!.removeSpacesTrailingPreceding() if certNumber.isEmpty || certNumber.count != 4 { self.alert(message: "valid_verification_code_error".localized()) return } let accountNumber = Utility.getMyPrimaryAccountNumber() 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] UserDefaults.standard.set(balance, forKey: UserKeys.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(message: response.message ?? "", title: "Success", okTitle: "Ok", style: UIAlertControllerStyle.alert , OkStyle: .default, okAction: { UserDefaults.standard.set(PennyTestStatusCode.completed.rawValue, forKey: AppConstants.pennyTestStatusCode) self.dismiss() }) }) { (error) in self.alert(message: error.localizedDescription) } } func getAvailableBalanceNotificationName() -> Notification.Name { return Notification.Name.init(rawValue: SideMenuNavigationNotifications.availableBalance) } private func getFcmToken() -> String? { let token = InstanceID.instanceID().token() return token } func fetchUserInfo() { let userId = Utility.getMyUserName() var param = ["userId" : userId] param["uuid"] = Utility.getUUid() ?? "" param["appVersion"] = Utility.getAppVersion() param["phoneBrand"] = Utility.getPhoneBrand() param["phoneOs"] = Utility.getPhoneOs() param["fcmId"] = self.getFcmToken() param["osVersion"] = Utility.getOsVersion() self.fetchUserInfo(param: param, success: { user in self.navigationController?.popToRootViewController(animated: true) }) { error in self.navigationController?.popToRootViewController(animated: true) } } } // MARK: PennyTestSubmitViewInterface extension PennyTestSubmitViewController: PennyTestSubmitViewInterface { } extension PennyTestSubmitViewController: SubmitPennyTestService { } extension PennyTestSubmitViewController: InitiatePennyTestService { } extension PennyTestSubmitViewController: UserInfoService { }