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.
340 lines
13 KiB
340 lines
13 KiB
//
|
|
// SendMoneyVerificationViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by gme_2 on 28/08/2018.
|
|
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class SendMoneyVerificationViewController: UITableViewController {
|
|
|
|
struct StringConstants {
|
|
let recieverDetails = "reciever_details_text".localized()
|
|
let transactionDetails = "transaction_detail_text".localized()
|
|
let readNAgreeText = "i_have_read_to_text".localized()
|
|
let userAgreementText = "jme_user_aggreement_text".localized()
|
|
// let fraudWarningText = "2. "+"GME_fraud_warning_text".localized()
|
|
let agreeAndSendText = "send_money_text".localized()
|
|
}
|
|
|
|
// MARK: IBOutlets
|
|
|
|
// Recievers Details
|
|
@IBOutlet weak var detailBgView: UIView!
|
|
@IBOutlet weak var detailView: UIView!
|
|
@IBOutlet weak var fullNameLabel: UILabel!
|
|
@IBOutlet weak var addressLabel: UILabel!
|
|
@IBOutlet weak var countryLabel: UILabel!
|
|
@IBOutlet weak var mobileLabel: UILabel!
|
|
|
|
@IBOutlet weak var fullNameTitleLabel: UILabel!
|
|
@IBOutlet weak var addressTitleLabel: UILabel!
|
|
@IBOutlet weak var countryTitleLabel: UILabel!
|
|
@IBOutlet weak var mobileTitleLabel: UILabel!
|
|
|
|
// Transation Details
|
|
@IBOutlet weak var payoutCountryLabel: UILabel!
|
|
@IBOutlet weak var payoutModeLabel: UILabel!
|
|
@IBOutlet weak var payingAmountLabel: UILabel!
|
|
@IBOutlet weak var exchangeRateLabel: UILabel!
|
|
@IBOutlet weak var serviceChargeLabel: UILabel!
|
|
@IBOutlet weak var payoutAgentBankLabel: UILabel!
|
|
@IBOutlet weak var accountNoLabel: UILabel!
|
|
|
|
@IBOutlet weak var payoutCountryTitleLabel: UILabel!
|
|
@IBOutlet weak var payoutModeTitleLabel: UILabel!
|
|
@IBOutlet weak var payingAmountTitleLabel: UILabel!
|
|
@IBOutlet weak var exchangeRateTitleLabel: UILabel!
|
|
@IBOutlet weak var serviceChargeTitleLabel: UILabel!
|
|
@IBOutlet weak var payoutAgentBankTitleLabel: UILabel!
|
|
@IBOutlet weak var accountNumTitlelabel: UILabel!
|
|
@IBOutlet weak var rewardPointTitleLabel: UILabel!
|
|
|
|
@IBOutlet weak var rewardPointLabel: UILabel!
|
|
// title labels
|
|
@IBOutlet weak var recieverDetailsLabel: UILabel!
|
|
@IBOutlet weak var transactionDetailsLabel: UILabel!
|
|
@IBOutlet weak var readAndAgreeTextLabel: UILabel!
|
|
@IBOutlet weak var userAgreementButton: UIButton!
|
|
@IBOutlet weak var fraudWarningButton: UIButton!
|
|
|
|
@IBOutlet weak var agreeAndSendButton: UIButton!
|
|
|
|
@IBOutlet weak var rewardPointStackView: UIStackView!
|
|
@IBOutlet weak var bankNameStackView: UIStackView!
|
|
@IBOutlet weak var accountNumberStackView: UIStackView!
|
|
|
|
var url: String?
|
|
|
|
var isUsingBiometricAuth = false {
|
|
didSet {
|
|
self.requestModel?.isUseBiometric = isUsingBiometricAuth
|
|
}
|
|
}
|
|
|
|
// MARK: Properties
|
|
|
|
var presenter: SendMoneyVerificationModuleInterface?
|
|
var reciepient: Recipient?
|
|
var requestModel: SendMoneyRequestModel?
|
|
var discountedFee: String?
|
|
weak var hudDelegate: HUDStatusDelegate?
|
|
weak var actionDelegate: SendMoneyExchangeRateActionDelegate?
|
|
lazy var pinViewOption: Options = {
|
|
var options = Options()
|
|
options.image = UIImage(named: "app logo")
|
|
options.title = "enter_your_transaction_pin_text".localized()
|
|
options.pinColor = #colorLiteral(red: 0.93, green: 0.11, blue: 0.14, alpha: 1)
|
|
return options
|
|
}()
|
|
|
|
var password: String? {
|
|
didSet {
|
|
guard
|
|
let model = self.requestModel,
|
|
let reciepient = self.reciepient,
|
|
let password = self.password,
|
|
password != ""
|
|
else {
|
|
return
|
|
}
|
|
model.transactionPassword = password
|
|
print(password)
|
|
self.presenter?.submit(model: model, reciepient: reciepient)
|
|
}
|
|
}
|
|
|
|
// MARK: VC's Life cycle
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
self.setup()
|
|
self.detailBgView.layer.applyCornerRadiusShadow(alpha: 0.5, x: -2, y: 25, blur: 20, spread: 0, cornerRadiusValue: 10)
|
|
self.configureLanguage()
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
self.navigationItem.title = "resend_money_text".localized()
|
|
populateRecieversInformations()
|
|
populateTransactionDetails()
|
|
|
|
self.bankNameStackView.isHidden = (self.requestModel?.bank?.name ?? "").isEmpty
|
|
self.accountNumberStackView.isHidden = (self.requestModel?.paymemtMode?.accountNumber ?? "").isEmpty
|
|
}
|
|
|
|
override func viewDidDisappear(_ animated: Bool) {
|
|
super.viewDidDisappear(animated)
|
|
}
|
|
|
|
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
|
return UITableView.automaticDimension
|
|
}
|
|
|
|
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
|
|
return 200
|
|
}
|
|
|
|
// MARK: IBActions
|
|
@IBAction func showUserAgreement(_ sender: UIButton) {
|
|
guard let webController = UIStoryboard(name: "Storyboard", bundle: nil)
|
|
.instantiateViewController(withIdentifier: "WebLinksViewController") as? WebLinksViewController
|
|
else { return }
|
|
|
|
webController.titleString = "User Agreement"
|
|
webController.url = self.url ?? "https://online.gmeremit.com/Terms"
|
|
let nav = UINavigationController.init(rootViewController: webController)
|
|
self.present(nav, animated: true, completion: nil)
|
|
}
|
|
|
|
@IBAction func submit(_ sender: UIButton) {
|
|
// self.askPassword()
|
|
actionDelegate?.continueToTermsAndConditions()
|
|
}
|
|
|
|
// MARK: Other Functions
|
|
|
|
private func setup() {
|
|
configureLanguage()
|
|
|
|
agreeAndSendButton.layer.cornerRadius = 12
|
|
agreeAndSendButton.backgroundColor = .themeRed
|
|
agreeAndSendButton.titleLabel?.font = .sanfrancisco(.medium, size: 18)
|
|
|
|
recieverDetailsLabel.textColor = .black
|
|
transactionDetailsLabel.textColor = .black
|
|
userAgreementButton.setTitleColor(.themeBlue, for: .normal)
|
|
}
|
|
|
|
private func configureLanguage() {
|
|
self.fullNameTitleLabel.text = "full_name_text".localized()
|
|
self.addressTitleLabel.text = "address_text".localized()
|
|
self.countryTitleLabel.text = "country_text".localized()
|
|
self.mobileTitleLabel.text = "mobile_text".localized()
|
|
self.payoutCountryTitleLabel.text = "payout_country_text".localized()
|
|
self.payoutModeTitleLabel.text = "payout_mode_text".localized()
|
|
self.payingAmountTitleLabel.text = "paying_amount_text".localized()
|
|
self.exchangeRateTitleLabel.text = "exchange_rate_text".localized()
|
|
self.serviceChargeTitleLabel.text = "service_charge_text".localized()
|
|
self.payoutAgentBankTitleLabel.text = "payout_agent_text".localized()
|
|
self.accountNumTitlelabel.text = "account_text".localized()
|
|
self.recieverDetailsLabel.text = StringConstants().recieverDetails
|
|
self.transactionDetailsLabel.text = StringConstants().transactionDetails
|
|
self.readAndAgreeTextLabel.text = StringConstants().readNAgreeText
|
|
self.userAgreementButton.setTitle(StringConstants().userAgreementText, for: .normal)
|
|
// self.fraudWarningButton.setTitle(StringConstants().fraudWarningText, for: .normal)
|
|
self.agreeAndSendButton.setTitle(StringConstants().agreeAndSendText
|
|
, for: .normal)
|
|
}
|
|
|
|
private func populateRecieversInformations() {
|
|
self.fullNameLabel.text = self.reciepient?.fullName
|
|
self.addressLabel.text = self.reciepient?.address
|
|
self.countryLabel.text = self.reciepient?.country
|
|
self.mobileLabel.text = self.reciepient?.mobile
|
|
|
|
if let rewardPoint = self.requestModel?.discountedFee {
|
|
self.rewardPointStackView.isHidden = false
|
|
self.rewardPointLabel.text = rewardPoint
|
|
} else {
|
|
self.rewardPointStackView.isHidden = true
|
|
}
|
|
}
|
|
|
|
private func populateTransactionDetails() {
|
|
self.payoutCountryLabel.text = self.reciepient?.country
|
|
self.payoutModeLabel.text = self.requestModel?.paymemtMode?.mode
|
|
self.payingAmountLabel.text = (self.requestModel?.exchangeRateDetail?.recipientAmount ?? "") +
|
|
" \(self.requestModel?.exchangeRateDetail?.reciepientCurrency ?? "")"
|
|
|
|
self.exchangeRateLabel.text = self.requestModel?.exchangeRateDetail?.exchangeRate
|
|
self.serviceChargeLabel.text = self.requestModel?.exchangeRateDetail?.transferFee
|
|
|
|
self.payoutAgentBankLabel.text = self.requestModel?.bank?.name
|
|
self.accountNoLabel.text = self.requestModel?.paymemtMode?.accountNumber
|
|
}
|
|
|
|
func showSecureKeypad() {
|
|
|
|
PINKeyboardView.present(config: self.pinViewOption, over: self, pinEntered: {pin,ok in
|
|
if pin.count == 6 && ok == true {
|
|
self.password = pin
|
|
}
|
|
},presented:nil)
|
|
|
|
}
|
|
|
|
func askPassword() {
|
|
// if let isUseBiometric = KeyChain.shared.get(key: .biometricAuth), isUseBiometric == "1" {
|
|
// let biometricAuthenticationWireframe = BiometricAuthenticationWireframe()
|
|
// biometricAuthenticationWireframe.openWithDelegate(on: self, delegate: self)
|
|
// } else {
|
|
// showSecureKeypad()
|
|
//
|
|
|
|
showSecureKeypad()
|
|
}
|
|
}
|
|
|
|
// MARK: SendMoneyVerificationViewInterface
|
|
extension SendMoneyVerificationViewController: SendMoneyVerificationViewInterface {
|
|
func show(model: SendMoneySubmitModelContainer?) {
|
|
guard let message = model?.message, let expectedPoint = model?.extra2 else {
|
|
return
|
|
}
|
|
// let successMessage = "\(message)\n(\("estimated_earning_points_text".localized()): \(expectedPoint.likeCommaMoney() ?? "0"))"
|
|
|
|
self.alertWithOk(
|
|
type: .success,
|
|
message: "Transfer Successful!",
|
|
title: "success_text".localized(),
|
|
okTitle: "OK"
|
|
) {
|
|
if let id = model?.id {
|
|
self.presenter?.openReciept(transactionId: id)
|
|
} else {
|
|
self.alert(type: .error, message: "No Transaction received.")
|
|
}
|
|
}
|
|
}
|
|
|
|
func show(error: String) {
|
|
// self.presenter?.openReciept(transactionId: "1235")
|
|
if isUsingBiometricAuth {
|
|
if error.contains("Invalid Password") {
|
|
MainWireframe
|
|
.logoutWarningAlert(message: "It is different from registered password.\nplease try to login again")
|
|
|
|
}
|
|
}
|
|
|
|
self.alert(type: .error, message: error)
|
|
}
|
|
|
|
func showLoading() {
|
|
self.showProgressHud()
|
|
|
|
}
|
|
|
|
func hideLoading() {
|
|
self.hudDelegate?.hideLoading()
|
|
self.hideProgressHud()
|
|
}
|
|
}
|
|
|
|
extension SendMoneyVerificationViewController {
|
|
override func didMove(toParent parent: UIViewController?) {
|
|
self.viewWillAppear(true)
|
|
}
|
|
}
|
|
|
|
// MARK: - BiometricAuthenticationViewControllerDelegate
|
|
extension SendMoneyVerificationViewController: BiometricAuthenticationViewControllerDelegate {
|
|
|
|
func viewController(
|
|
_ viewController: BiometricAuthenticationViewController,
|
|
informationTitleLabel titleLabel: UILabel,
|
|
authenticationButton button: UIButton
|
|
) {
|
|
titleLabel.text = "bio_sendmoney_intro_text".localized()
|
|
button.setTitle("send_money_text".localized(), for: .normal)
|
|
}
|
|
|
|
func didComplete(_ viewController: BiometricAuthenticationViewController) {
|
|
self.isUsingBiometricAuth = true
|
|
viewController.dismiss(animated: true) {
|
|
guard let encryptedPW = KeyChain.shared.get(key: .password) else {
|
|
MainWireframe.logoutWarningAlert(message: "To use biometrics authentication you have to login again.")
|
|
return
|
|
}
|
|
self.password = encryptedPW
|
|
}
|
|
}
|
|
|
|
func viewController(
|
|
_ viewController: BiometricAuthenticationViewController,
|
|
didFailWithError error: BiometricAuthenticationError,
|
|
errorMessage: String?
|
|
) {
|
|
print("BiometricAuthenticationWireframe Error: \(errorMessage ?? "")")
|
|
viewController.dismiss(animated: true) {
|
|
|
|
switch error {
|
|
case .userFallback:
|
|
self.isUsingBiometricAuth = false
|
|
self.showSecureKeypad()
|
|
case .biometryNotEnrolled, .notBeConfigured, .biometryNotAvailable:
|
|
self.alert(type: .error, message: error.message)
|
|
default:
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
func doSelectLocalAuthenticationPolicy(
|
|
_ viewController: BiometricAuthenticationViewController
|
|
) -> BiometricAuthenticationPolicy {
|
|
return .deviceOwnerAuthenticationWithBiometrics
|
|
}
|
|
}
|