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.
 
 
 
 

246 lines
8.3 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
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 {
}