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.
311 lines
11 KiB
311 lines
11 KiB
//
|
|
// SendMoneyParentViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by gme_2 on 28/08/2018.
|
|
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
protocol HUDStatusDelegate {
|
|
func showLoading()
|
|
func hideLoading()
|
|
}
|
|
|
|
protocol SendMoneyPaymentModeActionDelegate {
|
|
func selected(bank: SendMoneyBank?)
|
|
func selected(branch: SendMoneyBankBranch?)
|
|
func selected(payoutMethod: SendMoneyPayoutMode?)
|
|
func added(acountNumber: String)
|
|
func continueToExchangeAction()
|
|
}
|
|
|
|
protocol SendMoneyExchangeRateActionDelegate {
|
|
func continueToVerificationAction()
|
|
func calculated(model: SendMoneyExchangeRateModel?)
|
|
}
|
|
|
|
class SendMoneyRequestModel {
|
|
var paymemtMode: SendMoneyPayoutMode?
|
|
var bank: SendMoneyBank?
|
|
var branch: SendMoneyBankBranch?
|
|
var accountNumber: String?
|
|
var payingAmount: String?
|
|
var exchangeRateDetail: SendMoneyExchangeRateModel?
|
|
var transactionPassword: String?
|
|
}
|
|
|
|
class SendMoneyParentViewController: UIViewController {
|
|
|
|
enum StateButtons: Int {
|
|
case paymentMode = 1
|
|
case exchange = 2
|
|
case verification = 3
|
|
}
|
|
|
|
struct Constants {
|
|
static let stateRedColor = UIColor.init(hex: "#EC1C24")
|
|
static let stateGreenColor = AppConstants.themeBlueColor
|
|
static let stateLabelGreyColor = UIColor.init(hex: "4a4a4a")
|
|
}
|
|
|
|
// MARK: IBOutlets
|
|
|
|
@IBOutlet weak var containerView: UIView!
|
|
@IBOutlet weak var paymentModeButton: UIButton!
|
|
@IBOutlet weak var exchangeRateButton: UIButton!
|
|
@IBOutlet weak var verificationButton: UIButton!
|
|
@IBOutlet weak var paymentModeLabel: UILabel!
|
|
@IBOutlet weak var exchangeRateLabel: UILabel!
|
|
@IBOutlet weak var verificationLabel: UILabel!
|
|
|
|
|
|
// MARK: Properties
|
|
|
|
var paymentModeViewController: UIViewController?
|
|
var exchangeViewController: UIViewController?
|
|
var verificationViewController: UIViewController?
|
|
var requestModel: SendMoneyRequestModel?
|
|
|
|
var presenter: SendMoneyParentModuleInterface?
|
|
|
|
var stateButtons: [UIButton] = []
|
|
var state: StateButtons = .paymentMode {
|
|
didSet {
|
|
self.updateState(state: state)
|
|
}
|
|
}
|
|
var receipient: Recipient? {
|
|
didSet {
|
|
print( self.receipient?.firstName)
|
|
}
|
|
}
|
|
|
|
// MARK: VC's Life cycle
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
self.setup()
|
|
|
|
self.presenter?.viewIsReady()
|
|
self.setupViewControllers()
|
|
self.addPaymentModeViewController()
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
setTitle(title: "Send Money")
|
|
}
|
|
|
|
override func viewWillDisappear(_ animated: Bool) {
|
|
super.viewWillDisappear(animated)
|
|
self.navigationItem.title = ""
|
|
}
|
|
|
|
// MARK: IBActions
|
|
|
|
@IBAction func paymentMode(_ sender: UIButton) {
|
|
self.addPaymentModeViewController()
|
|
self.state = StateButtons.paymentMode
|
|
}
|
|
|
|
@IBAction func exchangeRate(_ sender: UIButton) {
|
|
self.addExchangeViewController()
|
|
self.state = StateButtons.exchange
|
|
}
|
|
|
|
@IBAction func verification(_ sender: UIButton) {
|
|
self.addVerificationViewController()
|
|
self.state = StateButtons.verification
|
|
}
|
|
|
|
// MARK: Other Functions
|
|
|
|
private func setup() {
|
|
// all setup should be done here
|
|
self.setTitle(title: "Send Money")
|
|
self.state = StateButtons.paymentMode
|
|
self.configureViews()
|
|
self.requestModel = SendMoneyRequestModel()
|
|
}
|
|
|
|
private func setupNavigationBar() {
|
|
|
|
}
|
|
|
|
private func setTitle(title: String) {
|
|
self.navigationItem.title = title
|
|
}
|
|
|
|
private func setupViewControllers() {
|
|
let paymentModelWireframe = SendMoneyPaymentModeWireframe()
|
|
let pvc = paymentModelWireframe.getMainView() as! SendMoneyPaymentModeViewController
|
|
pvc.recipient = self.receipient
|
|
pvc.hudDelegate = self
|
|
pvc.actionDelegate = self
|
|
self.paymentModeViewController = pvc
|
|
|
|
let exchangeViewWireframe = SendMoneyExchangeRateWireframe()
|
|
let evc = exchangeViewWireframe.getMainView() as! SendMoneyExchangeRateViewController
|
|
evc.reciepient = self.receipient
|
|
evc.actionDelegate = self
|
|
evc.hudDelegate = self
|
|
self.exchangeViewController = evc
|
|
|
|
let verificationWireframe = SendMoneyVerificationWireframe()
|
|
let vvc = verificationWireframe.getMainView() as! SendMoneyVerificationViewController
|
|
vvc.reciepient = self.receipient
|
|
vvc.requestModel = self.requestModel
|
|
vvc.hudDelegate = self
|
|
self.verificationViewController = vvc
|
|
|
|
}
|
|
|
|
|
|
|
|
private func configureViews() {
|
|
self.paymentModeButton.tag = 1
|
|
self.exchangeRateButton.tag = 2
|
|
self.verificationButton.tag = 3
|
|
self.stateButtons = [paymentModeButton,exchangeRateButton, verificationButton ]
|
|
[paymentModeButton, exchangeRateButton, verificationButton].forEach({
|
|
$0?.rounded()
|
|
})
|
|
}
|
|
|
|
func updateState(state: StateButtons) {
|
|
switch state {
|
|
case .paymentMode:
|
|
// buttons
|
|
self.paymentModeButton.backgroundColor = Constants.stateGreenColor
|
|
self.exchangeRateButton.backgroundColor = Constants.stateRedColor
|
|
self.verificationButton.backgroundColor = Constants.stateRedColor
|
|
|
|
self.exchangeRateButton.isUserInteractionEnabled = false
|
|
self.verificationButton.isUserInteractionEnabled = false
|
|
|
|
// labels
|
|
self.paymentModeLabel.textColor = Constants.stateGreenColor
|
|
self.exchangeRateLabel.textColor = Constants.stateLabelGreyColor
|
|
self.verificationLabel.textColor = Constants.stateLabelGreyColor
|
|
|
|
case .exchange:
|
|
// buttons
|
|
self.paymentModeButton.backgroundColor = Constants.stateGreenColor
|
|
self.exchangeRateButton.backgroundColor = Constants.stateGreenColor
|
|
self.verificationButton.backgroundColor = Constants.stateRedColor
|
|
|
|
self.exchangeRateButton.isUserInteractionEnabled = true
|
|
self.verificationButton.isUserInteractionEnabled = false
|
|
|
|
// labels
|
|
self.paymentModeLabel.textColor = Constants.stateLabelGreyColor
|
|
self.exchangeRateLabel.textColor = Constants.stateGreenColor
|
|
self.verificationLabel.textColor = Constants.stateLabelGreyColor
|
|
|
|
case .verification:
|
|
|
|
// button
|
|
self.paymentModeButton.backgroundColor = Constants.stateGreenColor
|
|
self.exchangeRateButton.backgroundColor = Constants.stateGreenColor
|
|
self.verificationButton.backgroundColor = Constants.stateGreenColor
|
|
self.exchangeRateButton.isUserInteractionEnabled = true
|
|
|
|
// labels
|
|
self.paymentModeLabel.textColor = Constants.stateLabelGreyColor
|
|
self.exchangeRateLabel.textColor = Constants.stateLabelGreyColor
|
|
self.verificationLabel.textColor = Constants.stateLabelGreyColor
|
|
}
|
|
}
|
|
|
|
func addPaymentModeViewController() {
|
|
guard let paymentModeViewController = self.paymentModeViewController else {return}
|
|
self.addChildViewController(paymentModeViewController)
|
|
UIView.transition(with: self.containerView, duration: 0.33, options: .transitionCrossDissolve, animations: {
|
|
self.containerView.addSubview(paymentModeViewController.view)
|
|
}, completion: nil)
|
|
paymentModeViewController.view.frame = containerView.bounds
|
|
paymentModeViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
|
paymentModeViewController.didMove(toParentViewController: self)
|
|
}
|
|
|
|
func addExchangeViewController() {
|
|
guard let exchangeViewController = self.exchangeViewController as? SendMoneyExchangeRateViewController else {return}
|
|
exchangeViewController.requestModel = self.requestModel
|
|
exchangeViewController.actionDelegate = self
|
|
self.addChildViewController(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(toParentViewController: self)
|
|
}
|
|
|
|
func addVerificationViewController() {
|
|
guard let verificationViewController = self.verificationViewController as? SendMoneyVerificationViewController else {return}
|
|
verificationViewController.reciepient = self.receipient
|
|
verificationViewController.requestModel = self.requestModel
|
|
self.addChildViewController(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(toParentViewController: self)
|
|
}
|
|
}
|
|
|
|
// MARK: SendMoneyParentViewInterface
|
|
extension SendMoneyParentViewController: SendMoneyParentViewInterface {
|
|
func show(model: Recipient) {
|
|
self.receipient = model
|
|
}
|
|
}
|
|
|
|
extension SendMoneyParentViewController: HUDStatusDelegate {
|
|
func showLoading() {
|
|
self.showProgressHud()
|
|
}
|
|
|
|
func hideLoading() {
|
|
self.hideProgressHud()
|
|
}
|
|
}
|
|
|
|
extension SendMoneyParentViewController: SendMoneyPaymentModeActionDelegate {
|
|
func selected(bank: SendMoneyBank?) {
|
|
self.requestModel?.bank = bank
|
|
}
|
|
|
|
func selected(branch: SendMoneyBankBranch?) {
|
|
self.requestModel?.branch = branch
|
|
}
|
|
|
|
func selected(payoutMethod: SendMoneyPayoutMode?) {
|
|
self.requestModel?.paymemtMode = payoutMethod
|
|
}
|
|
|
|
func continueToExchangeAction() {
|
|
self.addExchangeViewController()
|
|
self.state = StateButtons.exchange
|
|
|
|
}
|
|
|
|
func added(acountNumber: String) {
|
|
self.requestModel?.accountNumber = acountNumber
|
|
}
|
|
}
|
|
|
|
extension SendMoneyParentViewController: SendMoneyExchangeRateActionDelegate {
|
|
func continueToVerificationAction() {
|
|
self.addVerificationViewController()
|
|
self.state = StateButtons.verification
|
|
}
|
|
|
|
func calculated(model: SendMoneyExchangeRateModel?) {
|
|
self.requestModel?.exchangeRateDetail = model
|
|
}
|
|
}
|