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

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. //
  2. // SendMoneyParentViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 28/08/2018.
  6. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. protocol HUDStatusDelegate {
  10. func showLoading()
  11. func hideLoading()
  12. }
  13. protocol SendMoneyPaymentModeActionDelegate {
  14. func selected(bank: SendMoneyBank?)
  15. func selected(branch: SendMoneyBankBranch?)
  16. func selected(payoutMethod: SendMoneyPayoutMode?)
  17. func added(acountNumber: String)
  18. func continueToExchangeAction()
  19. }
  20. protocol SendMoneyExchangeRateActionDelegate {
  21. func continueToVerificationAction()
  22. func calculated(model: SendMoneyExchangeRateModel?)
  23. }
  24. class SendMoneyRequestModel {
  25. var paymemtMode: SendMoneyPayoutMode?
  26. var bank: SendMoneyBank?
  27. var branch: SendMoneyBankBranch?
  28. var accountNumber: String?
  29. var payingAmount: String?
  30. var exchangeRateDetail: SendMoneyExchangeRateModel?
  31. var transactionPassword: String?
  32. }
  33. class SendMoneyParentViewController: UIViewController {
  34. enum StateButtons: Int {
  35. case paymentMode = 1
  36. case exchange = 2
  37. case verification = 3
  38. }
  39. struct Constants {
  40. static let stateRedColor = UIColor.init(hex: "#EC1C24")
  41. static let stateGreenColor = AppConstants.themeBlueColor
  42. static let stateLabelGreyColor = UIColor.init(hex: "4a4a4a")
  43. }
  44. // MARK: IBOutlets
  45. @IBOutlet weak var containerView: UIView!
  46. @IBOutlet weak var paymentModeButton: UIButton!
  47. @IBOutlet weak var exchangeRateButton: UIButton!
  48. @IBOutlet weak var verificationButton: UIButton!
  49. @IBOutlet weak var paymentModeLabel: UILabel!
  50. @IBOutlet weak var exchangeRateLabel: UILabel!
  51. @IBOutlet weak var verificationLabel: UILabel!
  52. // MARK: Properties
  53. var paymentModeViewController: UIViewController?
  54. var exchangeViewController: UIViewController?
  55. var verificationViewController: UIViewController?
  56. var requestModel: SendMoneyRequestModel?
  57. var presenter: SendMoneyParentModuleInterface?
  58. var stateButtons: [UIButton] = []
  59. var state: StateButtons = .paymentMode {
  60. didSet {
  61. self.updateState(state: state)
  62. }
  63. }
  64. var receipient: Recipient? {
  65. didSet {
  66. print( self.receipient?.firstName)
  67. }
  68. }
  69. // MARK: VC's Life cycle
  70. override func viewDidLoad() {
  71. super.viewDidLoad()
  72. self.setup()
  73. self.presenter?.viewIsReady()
  74. self.setupViewControllers()
  75. self.addPaymentModeViewController()
  76. }
  77. override func viewWillAppear(_ animated: Bool) {
  78. super.viewWillAppear(animated)
  79. setTitle(title: "Send Money")
  80. }
  81. override func viewWillDisappear(_ animated: Bool) {
  82. super.viewWillDisappear(animated)
  83. self.navigationItem.title = ""
  84. }
  85. // MARK: IBActions
  86. @IBAction func paymentMode(_ sender: UIButton) {
  87. self.addPaymentModeViewController()
  88. self.state = StateButtons.paymentMode
  89. }
  90. @IBAction func exchangeRate(_ sender: UIButton) {
  91. self.addExchangeViewController()
  92. self.state = StateButtons.exchange
  93. }
  94. @IBAction func verification(_ sender: UIButton) {
  95. self.addVerificationViewController()
  96. self.state = StateButtons.verification
  97. }
  98. // MARK: Other Functions
  99. private func setup() {
  100. // all setup should be done here
  101. self.setTitle(title: "Send Money")
  102. self.state = StateButtons.paymentMode
  103. self.configureViews()
  104. self.requestModel = SendMoneyRequestModel()
  105. }
  106. private func setupNavigationBar() {
  107. }
  108. private func setTitle(title: String) {
  109. self.navigationItem.title = title
  110. }
  111. private func setupViewControllers() {
  112. let paymentModelWireframe = SendMoneyPaymentModeWireframe()
  113. let pvc = paymentModelWireframe.getMainView() as! SendMoneyPaymentModeViewController
  114. pvc.recipient = self.receipient
  115. pvc.hudDelegate = self
  116. pvc.actionDelegate = self
  117. self.paymentModeViewController = pvc
  118. let exchangeViewWireframe = SendMoneyExchangeRateWireframe()
  119. let evc = exchangeViewWireframe.getMainView() as! SendMoneyExchangeRateViewController
  120. evc.reciepient = self.receipient
  121. evc.actionDelegate = self
  122. evc.hudDelegate = self
  123. self.exchangeViewController = evc
  124. let verificationWireframe = SendMoneyVerificationWireframe()
  125. let vvc = verificationWireframe.getMainView() as! SendMoneyVerificationViewController
  126. vvc.reciepient = self.receipient
  127. vvc.requestModel = self.requestModel
  128. vvc.hudDelegate = self
  129. self.verificationViewController = vvc
  130. }
  131. private func configureViews() {
  132. self.paymentModeButton.tag = 1
  133. self.exchangeRateButton.tag = 2
  134. self.verificationButton.tag = 3
  135. self.stateButtons = [paymentModeButton,exchangeRateButton, verificationButton ]
  136. [paymentModeButton, exchangeRateButton, verificationButton].forEach({
  137. $0?.rounded()
  138. })
  139. }
  140. func updateState(state: StateButtons) {
  141. switch state {
  142. case .paymentMode:
  143. // buttons
  144. self.paymentModeButton.backgroundColor = Constants.stateGreenColor
  145. self.exchangeRateButton.backgroundColor = Constants.stateRedColor
  146. self.verificationButton.backgroundColor = Constants.stateRedColor
  147. self.exchangeRateButton.isUserInteractionEnabled = false
  148. self.verificationButton.isUserInteractionEnabled = false
  149. // labels
  150. self.paymentModeLabel.textColor = Constants.stateGreenColor
  151. self.exchangeRateLabel.textColor = Constants.stateLabelGreyColor
  152. self.verificationLabel.textColor = Constants.stateLabelGreyColor
  153. case .exchange:
  154. // buttons
  155. self.paymentModeButton.backgroundColor = Constants.stateGreenColor
  156. self.exchangeRateButton.backgroundColor = Constants.stateGreenColor
  157. self.verificationButton.backgroundColor = Constants.stateRedColor
  158. self.exchangeRateButton.isUserInteractionEnabled = true
  159. self.verificationButton.isUserInteractionEnabled = false
  160. // labels
  161. self.paymentModeLabel.textColor = Constants.stateLabelGreyColor
  162. self.exchangeRateLabel.textColor = Constants.stateGreenColor
  163. self.verificationLabel.textColor = Constants.stateLabelGreyColor
  164. case .verification:
  165. // button
  166. self.paymentModeButton.backgroundColor = Constants.stateGreenColor
  167. self.exchangeRateButton.backgroundColor = Constants.stateGreenColor
  168. self.verificationButton.backgroundColor = Constants.stateGreenColor
  169. self.exchangeRateButton.isUserInteractionEnabled = true
  170. // labels
  171. self.paymentModeLabel.textColor = Constants.stateLabelGreyColor
  172. self.exchangeRateLabel.textColor = Constants.stateLabelGreyColor
  173. self.verificationLabel.textColor = Constants.stateLabelGreyColor
  174. }
  175. }
  176. func addPaymentModeViewController() {
  177. guard let paymentModeViewController = self.paymentModeViewController else {return}
  178. self.addChildViewController(paymentModeViewController)
  179. UIView.transition(with: self.containerView, duration: 0.33, options: .transitionCrossDissolve, animations: {
  180. self.containerView.addSubview(paymentModeViewController.view)
  181. }, completion: nil)
  182. paymentModeViewController.view.frame = containerView.bounds
  183. paymentModeViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
  184. paymentModeViewController.didMove(toParentViewController: self)
  185. }
  186. func addExchangeViewController() {
  187. guard let exchangeViewController = self.exchangeViewController as? SendMoneyExchangeRateViewController else {return}
  188. exchangeViewController.requestModel = self.requestModel
  189. exchangeViewController.actionDelegate = self
  190. self.addChildViewController(exchangeViewController)
  191. UIView.transition(with: self.containerView, duration: 0.33, options: .transitionCrossDissolve, animations: {
  192. self.containerView.addSubview(exchangeViewController.view)
  193. }, completion: nil)
  194. exchangeViewController.view.frame = containerView.bounds
  195. exchangeViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
  196. exchangeViewController.didMove(toParentViewController: self)
  197. }
  198. func addVerificationViewController() {
  199. guard let verificationViewController = self.verificationViewController as? SendMoneyVerificationViewController else {return}
  200. verificationViewController.reciepient = self.receipient
  201. verificationViewController.requestModel = self.requestModel
  202. self.addChildViewController(verificationViewController)
  203. UIView.transition(with: self.containerView, duration: 0.33, options: .transitionCrossDissolve, animations: {
  204. self.containerView.addSubview(verificationViewController.view)
  205. }, completion: nil)
  206. verificationViewController.view.frame = containerView.bounds
  207. verificationViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
  208. verificationViewController.didMove(toParentViewController: self)
  209. }
  210. }
  211. // MARK: SendMoneyParentViewInterface
  212. extension SendMoneyParentViewController: SendMoneyParentViewInterface {
  213. func show(model: Recipient) {
  214. self.receipient = model
  215. }
  216. }
  217. extension SendMoneyParentViewController: HUDStatusDelegate {
  218. func showLoading() {
  219. self.showProgressHud()
  220. }
  221. func hideLoading() {
  222. self.hideProgressHud()
  223. }
  224. }
  225. extension SendMoneyParentViewController: SendMoneyPaymentModeActionDelegate {
  226. func selected(bank: SendMoneyBank?) {
  227. self.requestModel?.bank = bank
  228. }
  229. func selected(branch: SendMoneyBankBranch?) {
  230. self.requestModel?.branch = branch
  231. }
  232. func selected(payoutMethod: SendMoneyPayoutMode?) {
  233. self.requestModel?.paymemtMode = payoutMethod
  234. }
  235. func continueToExchangeAction() {
  236. self.addExchangeViewController()
  237. self.state = StateButtons.exchange
  238. }
  239. func added(acountNumber: String) {
  240. self.requestModel?.accountNumber = acountNumber
  241. }
  242. }
  243. extension SendMoneyParentViewController: SendMoneyExchangeRateActionDelegate {
  244. func continueToVerificationAction() {
  245. self.addVerificationViewController()
  246. self.state = StateButtons.verification
  247. }
  248. func calculated(model: SendMoneyExchangeRateModel?) {
  249. self.requestModel?.exchangeRateDetail = model
  250. }
  251. }