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

//
// 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
}
}