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.
462 lines
17 KiB
462 lines
17 KiB
//
|
|
// SendMoneyParentViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by gme_2 on 28/08/2018.
|
|
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import Localize_Swift
|
|
|
|
// controls the progress hud of parent view from child view
|
|
protocol HUDStatusDelegate: class {
|
|
func showLoading()
|
|
func hideLoading()
|
|
}
|
|
|
|
// Actions from SendMoneyExchangeRateViewController are delegated to Parent View
|
|
protocol SendMoneyExchangeRateActionDelegate: class {
|
|
func continueToVerificationAction(model: CDDIRequestData)
|
|
func calculated(model: SendMoneyExchangeRateModel?)
|
|
func continueToCDDI()
|
|
func continueToTermsAndConditions()
|
|
}
|
|
|
|
// A model encapsulating all field required to make the api request for send money
|
|
class SendMoneyRequestModel {
|
|
var paymemtMode: SendMoneyPayoutMode? = SendMoneyPayoutMode()
|
|
var bank: SendMoneyBank? = SendMoneyBank()
|
|
var branch: SendMoneyBankBranch? = SendMoneyBankBranch()
|
|
var accountNumber: String?
|
|
var payingAmount: String?
|
|
var exchangeRateDetail: SendMoneyExchangeRateModel?
|
|
var transactionPassword: String?
|
|
var autoDebitAccount: Account?
|
|
var isUseBiometric: Bool?
|
|
}
|
|
|
|
class SendMoneyParentViewController: UIViewController {
|
|
|
|
private enum StateButtons: Int {
|
|
case exchange = 1
|
|
case cddi = 2
|
|
case verification = 3
|
|
case terms = 4
|
|
}
|
|
|
|
private struct Constants {
|
|
static let stateRedColor = UIColor.init(hex: "#EC1C24")
|
|
static let stateGreenColor = UIColor.themeBlue
|
|
static let stateLabelGreyColor = UIColor.init(hex: "4a4a4a")
|
|
}
|
|
|
|
private struct StringConstants {
|
|
let payoutModeText = "payout_mode_text".localized()
|
|
let amountDetailText = "amount_detail_text".localized()
|
|
let verificationDetailText = "verification_detail_text".localized()
|
|
}
|
|
|
|
// MARK: IBOutlets
|
|
// Container view holds the child view controllers
|
|
// There are three child view controllers.
|
|
// 2. SendMoneyExchangeRateViewController
|
|
// 3. SendMoneyVerificationViewController
|
|
|
|
@IBOutlet weak var containerView: UIView!
|
|
@IBOutlet weak var exchangeRateButton: UIButton!
|
|
@IBOutlet weak var verificationButton: UIButton!
|
|
@IBOutlet weak var exchangeRateLabel: UILabel!
|
|
@IBOutlet weak var verificationLabel: UILabel!
|
|
@IBOutlet weak var cddiButton: UIButton!
|
|
@IBOutlet weak var termsButton: UIButton!
|
|
@IBOutlet weak var cddiLabel: UILabel!
|
|
@IBOutlet weak var termsLabel: UILabel!
|
|
|
|
// MARK: Properties
|
|
var sendMoneyExchangeRateViewController: SendMoneyExchangeRateViewController?
|
|
var sendMoneyVerificationViewController: SendMoneyVerificationViewController?
|
|
var cddiViewController: CDDIViewControllerViewController?
|
|
var termsViewController: TermsAndConditionViewController?
|
|
|
|
lazy private var requestModel = SendMoneyRequestModel()
|
|
lazy private var cddiModel = CDDIRequestData()
|
|
var presenter: SendMoneyParentModuleInterface?
|
|
|
|
// Buttons representing the pages marked as 1, 2, 3 in UI.
|
|
var stateButtons: [UIButton] = []
|
|
|
|
private var state: StateButtons = .exchange {
|
|
didSet {
|
|
self.updateState(state: state)
|
|
}
|
|
}
|
|
var receipient: Recipient? {
|
|
didSet {
|
|
self.requestModel.bank?.id = receipient?.agent?.id
|
|
self.requestModel.bank?.name = receipient?.agent?.name
|
|
self.requestModel.bank?.payCurrency = receipient?.agent?.currency
|
|
|
|
self.requestModel.accountNumber = receipient?.agent?.accountNumber
|
|
|
|
self.requestModel.branch?.id = receipient?.agent?.branch?.id
|
|
self.requestModel.branch?.name = receipient?.agent?.branch?.name
|
|
|
|
self.requestModel.paymemtMode?.id = receipient?.paymentMethod?.id
|
|
self.requestModel.paymemtMode?.mode = receipient?.paymentMethod?.name
|
|
self.requestModel.paymemtMode?.payCurrency = receipient?.paymentMethod?.currency
|
|
self.requestModel.paymemtMode?.payoutPartner = receipient?.payoutPartner
|
|
self.requestModel.paymemtMode?.accountNumber = receipient?.agent?.accountNumber
|
|
}
|
|
}
|
|
|
|
// MARK: VC's Life cycle
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
self.setup()
|
|
self.presenter?.viewIsReady()
|
|
self.setupViewControllers()
|
|
self.addExchangeViewController()
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
self.setupNormalNavigation()
|
|
setTitle(title: "send_money_text".localized())
|
|
}
|
|
|
|
override func viewWillDisappear(_ animated: Bool) {
|
|
super.viewWillDisappear(animated)
|
|
self.navigationItem.title = ""
|
|
view.endEditing(true)
|
|
}
|
|
|
|
// MARK: IBActions
|
|
|
|
@IBAction func exchangeRate(_ sender: UIButton) {
|
|
self.addExchangeViewController()
|
|
self.state = StateButtons.exchange
|
|
}
|
|
|
|
@IBAction func verification(_ sender: UIButton) {
|
|
self.addVerificationViewController()
|
|
self.state = StateButtons.verification
|
|
}
|
|
|
|
@IBAction func cddiTapped(_ sender: UIButton) {
|
|
self.addCddiViewController()
|
|
self.state = StateButtons.cddi
|
|
}
|
|
|
|
@IBAction func termsAndConditions(_ sender: UIButton) {
|
|
self.addTermsAndConditions()
|
|
self.state = StateButtons.terms
|
|
}
|
|
// MARK: Other Functions
|
|
|
|
private func setup() {
|
|
// all setup should be done here
|
|
self.setTitle(title: "send_money_text".localized())
|
|
self.state = StateButtons.exchange
|
|
self.configureViews()
|
|
self.requestModel = SendMoneyRequestModel()
|
|
configureLanguage()
|
|
}
|
|
|
|
private func configureLanguage() {
|
|
self.exchangeRateLabel.text = StringConstants().amountDetailText
|
|
self.verificationLabel.text = StringConstants().verificationDetailText
|
|
}
|
|
|
|
private func setTitle(title: String) {
|
|
self.navigationItem.title = title
|
|
}
|
|
|
|
private func setupViewControllers() {
|
|
sendMoneyExchangeRateViewController = SendMoneyExchangeRateWireframe()
|
|
.getMainView() as? SendMoneyExchangeRateViewController
|
|
sendMoneyExchangeRateViewController?.reciepient = self.receipient
|
|
sendMoneyExchangeRateViewController?.actionDelegate = self
|
|
sendMoneyExchangeRateViewController?.hudDelegate = self
|
|
|
|
sendMoneyVerificationViewController = SendMoneyVerificationWireframe()
|
|
.getMainView() as? SendMoneyVerificationViewController
|
|
sendMoneyVerificationViewController?.reciepient = self.receipient
|
|
sendMoneyVerificationViewController?.requestModel = self.requestModel
|
|
sendMoneyVerificationViewController?.hudDelegate = self
|
|
|
|
cddiViewController = CDDIViewControllerWireframe().getMainView() as? CDDIViewControllerViewController
|
|
cddiViewController?.reciepient = self.receipient
|
|
cddiViewController?.requestModel = self.requestModel
|
|
cddiViewController?.hudDelegate = self
|
|
|
|
termsViewController = TermsAndConditionWireframe().getMainView() as? TermsAndConditionViewController
|
|
termsViewController?.reciepient = self.receipient
|
|
termsViewController?.requestModel = self.requestModel
|
|
termsViewController?.hudDelegate = self
|
|
}
|
|
|
|
private func configureViews() {
|
|
self.exchangeRateButton.tag = 2
|
|
self.verificationButton.tag = 3
|
|
self.cddiButton.tag = 4
|
|
self.termsButton.tag = 5
|
|
self.stateButtons = [exchangeRateButton, verificationButton, cddiButton, termsButton]
|
|
[exchangeRateButton, verificationButton, cddiButton, termsButton].forEach({
|
|
$0?.rounded()
|
|
})
|
|
}
|
|
|
|
private func updateState(state: StateButtons) {
|
|
switch state {
|
|
case .exchange:
|
|
// buttons
|
|
self.exchangeRateButton.backgroundColor = .themeBlue
|
|
self.exchangeRateButton.setTitleColor(.white, for: .normal)
|
|
|
|
self.verificationButton.backgroundColor = .white
|
|
self.verificationButton.setTitleColor(.black, for: .normal)
|
|
self.verificationButton.layer.borderColor = UIColor.lightGray.cgColor
|
|
self.verificationButton.layer.borderWidth = 1
|
|
|
|
self.cddiButton.backgroundColor = .white
|
|
self.cddiButton.setTitleColor(.black, for: .normal)
|
|
self.cddiButton.layer.borderColor = UIColor.lightGray.cgColor
|
|
self.cddiButton.layer.borderWidth = 1
|
|
|
|
self.termsButton.backgroundColor = .white
|
|
self.termsButton.setTitleColor(.black, for: .normal)
|
|
self.termsButton.layer.borderColor = UIColor.lightGray.cgColor
|
|
self.termsButton.layer.borderWidth = 1
|
|
|
|
self.exchangeRateButton.isUserInteractionEnabled = true
|
|
self.verificationButton.isUserInteractionEnabled = false
|
|
self.cddiButton.isUserInteractionEnabled = false
|
|
self.termsButton.isUserInteractionEnabled = false
|
|
|
|
// labels
|
|
self.exchangeRateLabel.textColor = .themeText
|
|
self.verificationLabel.textColor = .themeText
|
|
self.cddiLabel.textColor = .themeText
|
|
self.termsLabel.textColor = .themeText
|
|
|
|
case .cddi:
|
|
self.exchangeRateButton.backgroundColor = .themeBlue
|
|
self.exchangeRateButton.setTitleColor(.white, for: .normal)
|
|
self.exchangeRateButton.isUserInteractionEnabled = true
|
|
|
|
self.cddiButton.backgroundColor = .themeBlue
|
|
self.cddiButton.setTitleColor(.white, for: .normal)
|
|
self.cddiButton.layer.borderWidth = 0
|
|
|
|
self.verificationButton.backgroundColor = .white
|
|
self.verificationButton.setTitleColor(.black, for: .normal)
|
|
self.verificationButton.layer.borderColor = UIColor.lightGray.cgColor
|
|
self.verificationButton.layer.borderWidth = 1
|
|
|
|
self.termsButton.backgroundColor = .white
|
|
self.termsButton.setTitleColor(.black, for: .normal)
|
|
self.termsButton.layer.borderColor = UIColor.lightGray.cgColor
|
|
self.termsButton.layer.borderWidth = 1
|
|
|
|
self.exchangeRateButton.isUserInteractionEnabled = true
|
|
self.verificationButton.isUserInteractionEnabled = false
|
|
self.cddiButton.isUserInteractionEnabled = true
|
|
self.termsButton.isUserInteractionEnabled = false
|
|
|
|
// labels
|
|
self.exchangeRateLabel.textColor = .themeText
|
|
self.verificationLabel.textColor = .themeText
|
|
self.cddiLabel.textColor = .themeText
|
|
self.termsLabel.textColor = .themeText
|
|
|
|
case .verification:
|
|
|
|
// button
|
|
self.exchangeRateButton.backgroundColor = .themeBlue
|
|
self.exchangeRateButton.setTitleColor(.white, for: .normal)
|
|
self.exchangeRateButton.isUserInteractionEnabled = true
|
|
|
|
self.cddiButton.backgroundColor = .themeBlue
|
|
self.cddiButton.setTitleColor(.white, for: .normal)
|
|
self.cddiButton.isUserInteractionEnabled = true
|
|
|
|
self.verificationButton.backgroundColor = .themeBlue
|
|
self.verificationButton.setTitleColor(.white, for: .normal)
|
|
self.verificationButton.layer.borderWidth = 0
|
|
self.verificationButton.isUserInteractionEnabled = true
|
|
|
|
self.termsButton.backgroundColor = .white
|
|
self.termsButton.setTitleColor(.black, for: .normal)
|
|
self.termsButton.layer.borderColor = UIColor.lightGray.cgColor
|
|
self.termsButton.layer.borderWidth = 1
|
|
self.termsButton.isUserInteractionEnabled = false
|
|
|
|
// labels
|
|
self.exchangeRateLabel.textColor = .themeText
|
|
self.verificationLabel.textColor = .themeText
|
|
self.cddiLabel.textColor = .themeText
|
|
self.termsLabel.textColor = .themeText
|
|
|
|
case .terms:
|
|
self.exchangeRateButton.backgroundColor = .themeBlue
|
|
self.exchangeRateButton.isUserInteractionEnabled = true
|
|
self.exchangeRateButton.setTitleColor(.white, for: .normal)
|
|
|
|
self.cddiButton.backgroundColor = .themeBlue
|
|
self.cddiButton.isUserInteractionEnabled = true
|
|
self.cddiButton.setTitleColor(.white, for: .normal)
|
|
|
|
self.verificationButton.backgroundColor = .themeBlue
|
|
self.verificationButton.setTitleColor(.white, for: .normal)
|
|
self.cddiButton.isUserInteractionEnabled = true
|
|
|
|
self.termsButton.backgroundColor = .themeBlue
|
|
self.termsButton.setTitleColor(.white, for: .normal)
|
|
self.termsButton.layer.borderWidth = 0
|
|
self.termsButton.isUserInteractionEnabled = true
|
|
|
|
// labels
|
|
self.exchangeRateLabel.textColor = .themeText
|
|
self.verificationLabel.textColor = .themeText
|
|
self.cddiLabel.textColor = .themeText
|
|
self.termsLabel.textColor = .themeText
|
|
|
|
}
|
|
}
|
|
|
|
private func addExchangeViewController() {
|
|
guard let exchangeViewController = sendMoneyExchangeRateViewController else { return }
|
|
|
|
exchangeViewController.requestModel = self.requestModel
|
|
exchangeViewController.actionDelegate = self
|
|
|
|
self.addChild(exchangeViewController)
|
|
|
|
UIView.transition(
|
|
with: self.containerView,
|
|
duration: 0.33,
|
|
options: .transitionCrossDissolve,
|
|
animations: {
|
|
self.containerView.addSubview(exchangeViewController.view)
|
|
},
|
|
completion: nil
|
|
)
|
|
|
|
exchangeViewController.view.frame = containerView.bounds
|
|
exchangeViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
|
exchangeViewController.didMove(toParent: self)
|
|
}
|
|
|
|
private func addCddiViewController() {
|
|
|
|
guard let ccdiView = cddiViewController else {return}
|
|
ccdiView.requestModel = self.requestModel
|
|
ccdiView.actionDelegate = self
|
|
|
|
self.addChild(ccdiView)
|
|
|
|
UIView.transition(
|
|
with: self.containerView,
|
|
duration: 0.33,
|
|
options: .transitionCrossDissolve,
|
|
animations: {
|
|
self.containerView.addSubview(ccdiView.view)
|
|
},
|
|
completion: nil
|
|
)
|
|
|
|
ccdiView.view.frame = containerView.bounds
|
|
ccdiView.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
|
ccdiView.didMove(toParent: self)
|
|
|
|
}
|
|
|
|
// Make SendMoneyExchangeRateViewController as front View Controller
|
|
private func addVerificationViewController() {
|
|
guard let verificationViewController = sendMoneyVerificationViewController else {return}
|
|
|
|
verificationViewController.reciepient = self.receipient
|
|
verificationViewController.requestModel = self.requestModel
|
|
verificationViewController.actionDelegate = self
|
|
|
|
self.addChild(verificationViewController)
|
|
|
|
UIView.transition(
|
|
with: self.containerView,
|
|
duration: 0.33,
|
|
options: .transitionCrossDissolve,
|
|
animations: {
|
|
self.containerView.addSubview(verificationViewController.view)
|
|
},
|
|
completion: nil
|
|
)
|
|
|
|
verificationViewController.view.frame = containerView.bounds
|
|
verificationViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
|
verificationViewController.didMove(toParent: self)
|
|
}
|
|
|
|
private func addTermsAndConditions() {
|
|
guard let termsView = termsViewController else {return}
|
|
termsView.reciepient = self.receipient
|
|
termsView.requestModel = self.requestModel
|
|
termsView.cddiModel = self.cddiModel
|
|
self.addChild(termsView)
|
|
|
|
UIView.transition(
|
|
with: self.containerView,
|
|
duration: 0.33,
|
|
options: .transitionCrossDissolve,
|
|
animations: {
|
|
self.containerView.addSubview(termsView.view)
|
|
},
|
|
completion: nil
|
|
)
|
|
|
|
termsView.view.frame = containerView.bounds
|
|
termsView.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
|
termsView.didMove(toParent: self)
|
|
}
|
|
}
|
|
|
|
// MARK: SendMoneyParentViewInterface
|
|
extension SendMoneyParentViewController: SendMoneyParentViewInterface {
|
|
func show(model: Recipient) {
|
|
self.receipient = model
|
|
}
|
|
}
|
|
|
|
extension SendMoneyParentViewController: HUDStatusDelegate {
|
|
func showLoading() {
|
|
self.tabBarController?.showProgressHud()
|
|
}
|
|
|
|
func hideLoading() {
|
|
self.tabBarController?.hideProgressHud()
|
|
}
|
|
}
|
|
|
|
extension SendMoneyParentViewController: SendMoneyExchangeRateActionDelegate {
|
|
func continueToCDDI() {
|
|
self.addCddiViewController()
|
|
self.state = StateButtons.cddi
|
|
}
|
|
|
|
func continueToTermsAndConditions() {
|
|
self.addTermsAndConditions()
|
|
self.state = StateButtons.terms
|
|
}
|
|
|
|
func continueToVerificationAction(model: CDDIRequestData) {
|
|
self.cddiModel = model
|
|
print("model:\(model)")
|
|
self.addVerificationViewController()
|
|
self.state = StateButtons.verification
|
|
}
|
|
|
|
func calculated(model: SendMoneyExchangeRateModel?) {
|
|
self.requestModel.exchangeRateDetail = model
|
|
}
|
|
}
|