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.

203 lines
5.5 KiB

5 years ago
  1. //
  2. // KycViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 12/09/2018.
  6. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import XLPagerTabStrip
  10. protocol KYCForm1Delegate: class {
  11. func `continue`(model: KycForm1Model)
  12. func show(model: KycModel)
  13. func addModel(model: KycForm1Model)
  14. }
  15. protocol KYCForm2Delegate: class {
  16. func addModel(model: KycForm2Model)
  17. func `continue`(model: KycForm2Model)
  18. }
  19. protocol KYCForm3Delegate: class {
  20. func isAllCompleted(isCompletedKYC3: Bool) -> Bool
  21. func submit(model: KycForm3Model)
  22. }
  23. class KYCRequestModel {
  24. var kycForm1: KycForm1Model?
  25. var kycForm2: KycForm2Model?
  26. var kycForm3: KycForm3Model?
  27. }
  28. class KycViewController: ButtonBarPagerTabStripViewController {
  29. enum KycViewControllers: Int {
  30. case form1 = 0
  31. case form2
  32. case fomr3
  33. }
  34. struct Constants {
  35. static let stateRedColor = UIColor.init(hex: "#EC1C24")
  36. static let stateGreenColor = UIColor.init(hex: "8CC241")
  37. static let stateLabelGreyColor = UIColor.init(hex: "4a4a4a")
  38. static let xlbarButtonTextColor = UIColor.init(hex: "#ed1c24")
  39. static let xlOldSelectedCellColor = UIColor.init(hex: "#7b7a7a")
  40. static let xlTabBarFont = UIFont.sanfrancisco(.bold, size: 14)
  41. }
  42. // MARK: IBOutlets
  43. // MARK: Properties
  44. var form1: UIViewController = UIViewController()
  45. var form2: UIViewController = UIViewController()
  46. var form3: UIViewController = UIViewController()
  47. var errorOnForm1 = false
  48. var errorOnForm2 = false
  49. var errorOnForm3 = false
  50. var requestModel: KYCRequestModel?
  51. var kycModel: KycModel? {
  52. didSet {
  53. if let vc2 = self.form2 as? KycForm2ViewController {
  54. vc2.kycModel = self.kycModel
  55. }
  56. }
  57. }
  58. var presenter: KycModuleInterface?
  59. // MARK: VC's Life cycle
  60. override func viewDidLoad() {
  61. buttonBarView.selectedBar.backgroundColor = Constants.xlbarButtonTextColor
  62. settings.style.buttonBarBackgroundColor = .themeMainBackground
  63. settings.style.buttonBarItemBackgroundColor = .themeMainBackground
  64. settings.style.buttonBarItemFont = Constants.xlTabBarFont
  65. settings.style.selectedBarHeight = 2
  66. settings.style.selectedBarBackgroundColor = Constants.xlbarButtonTextColor
  67. settings.style.buttonBarMinimumLineSpacing = 0
  68. settings.style.buttonBarItemsShouldFillAvailiableWidth = true
  69. settings.style.buttonBarLeftContentInset = 0
  70. settings.style.buttonBarRightContentInset = 0
  71. changeCurrentIndexProgressive = {(
  72. oldCell: ButtonBarViewCell?,
  73. newCell: ButtonBarViewCell?,
  74. progressPercentage: CGFloat,
  75. changeCurrentIndex: Bool,
  76. animated: Bool
  77. ) -> Void in
  78. guard changeCurrentIndex == true else { return }
  79. oldCell?.label.textColor = Constants.xlOldSelectedCellColor
  80. newCell?.label.textColor = Constants.xlbarButtonTextColor
  81. }
  82. super.viewDidLoad()
  83. self.setup()
  84. }
  85. override func viewControllers(
  86. for pagerTabStripController: PagerTabStripViewController
  87. ) -> [UIViewController] {
  88. self.form1 = KycForm1Wireframe().getMainViewWithDelegate(delegate: self)
  89. self.form2 = KycForm2Wireframe().getMainViewWithDelegate(delegate: self)
  90. self.form3 = KycForm3Wireframe().getMainViewWithDelegate(delegate: self)
  91. return [form1, form2, form3]
  92. }
  93. // MARK: IBActions
  94. // MARK: Other Functions
  95. private func setup() {
  96. // all setup should be done here
  97. self.requestModel = KYCRequestModel()
  98. self.setupPicturedNavBar()
  99. self.navigationItem.setHidesBackButton(true, animated: true)
  100. }
  101. func initiateSubmitProcess() {
  102. // first validate.
  103. guard let requestModel = self.requestModel else {return}
  104. self.presenter?.submit(model: requestModel)
  105. // if error show them to respect page (if possible)
  106. // then submit to server.
  107. // then show result.
  108. }
  109. private func showErrorView() {
  110. if self.errorOnForm1 {
  111. self.moveToViewController(at: KycViewControllers.form1.rawValue)
  112. } else if self.errorOnForm2 {
  113. self.moveToViewController(at: KycViewControllers.form2.rawValue)
  114. } else if errorOnForm3 {
  115. self.moveToViewController(at: KycViewControllers.fomr3.rawValue)
  116. }
  117. }
  118. }
  119. // MARK: KycViewInterface
  120. extension KycViewController: KycViewInterface {
  121. func show(error: String) {
  122. self.alert(type: .error, message: error)
  123. }
  124. func showLoading() {
  125. self.showProgressHud()
  126. }
  127. func hideLoading() {
  128. self.hideProgressHud()
  129. }
  130. }
  131. extension KycViewController: KYCForm1Delegate {
  132. func addModel(model: KycForm1Model) {
  133. self.requestModel?.kycForm1 = model
  134. }
  135. func `continue`(model: KycForm1Model) {
  136. self.requestModel?.kycForm1 = model
  137. moveToViewController(at: KycViewControllers.form2.rawValue)
  138. }
  139. func view1DisappearWith(model: KycForm1Model) {
  140. self.requestModel?.kycForm1 = model
  141. }
  142. func show(model: KycModel) {
  143. self.kycModel = model
  144. }
  145. }
  146. extension KycViewController: KYCForm2Delegate {
  147. func addModel(model: KycForm2Model) {
  148. self.requestModel?.kycForm2 = model
  149. }
  150. func `continue`(model: KycForm2Model) {
  151. self.requestModel?.kycForm2 = model
  152. moveToViewController(at: KycViewControllers.fomr3.rawValue)
  153. }
  154. }
  155. extension KycViewController: KYCForm3Delegate {
  156. func isAllCompleted(isCompletedKYC3: Bool) -> Bool {
  157. return requestModel?.kycForm1?.isCompleted ?? false &&
  158. requestModel?.kycForm2?.isCompleted ?? false &&
  159. isCompletedKYC3
  160. }
  161. func submit(model: KycForm3Model) {
  162. self.requestModel?.kycForm3 = model
  163. self.initiateSubmitProcess()
  164. }
  165. }