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.

294 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
  1. //
  2. // SendMoneyExchangeRateViewController.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. class SendMoneyExchangeRateCurrencyViewModel{
  10. var countryCode: String?
  11. var currency: String?
  12. }
  13. class SendMoneyExchangeRateViewController: UIViewController {
  14. enum ActionBehaviour {
  15. case calculate
  16. case _continue
  17. }
  18. // MARK: IBOutlets
  19. @IBOutlet weak var exchangeBackground1: UIView!
  20. @IBOutlet weak var exchangeBackground2: UIView!
  21. @IBOutlet weak var dropDownImageView: UIImageView!
  22. @IBOutlet weak var backgroundViewCountryLabel1: UIView!
  23. @IBOutlet weak var backgroundViewCountryLabel2: UIView!
  24. @IBOutlet weak var countryListStackView: UIStackView!
  25. @IBOutlet weak var countryCodeLabel: UILabel!
  26. @IBOutlet weak var countryFlagImage: UIImageView!
  27. @IBOutlet weak var continueButton: UIButton!
  28. @IBOutlet weak var senderTextField: UITextField!
  29. @IBOutlet weak var reciepientTextField: UITextField!
  30. @IBOutlet weak var transferFeeInfoLabel: UILabel!
  31. @IBOutlet weak var exchangeRateLabel: UILabel!
  32. @IBOutlet weak var exchangeInfoStackView: UIStackView!
  33. var countryListTapGuesture: UITapGestureRecognizer?
  34. var action: ActionBehaviour? {
  35. didSet {
  36. if let _action = action {
  37. switch _action {
  38. case .calculate:
  39. self.continueButton.setTitle("Calculate", for: .normal)
  40. case ._continue:
  41. self.continueButton.setTitle("Continue", for: .normal)
  42. }
  43. }
  44. }
  45. }
  46. var actionDelegate: SendMoneyExchangeRateActionDelegate?
  47. // MARK: Properties
  48. var presenter: SendMoneyExchangeRateModuleInterface?
  49. var currencyInfoViewModel: [SendMoneyExchangeRateCurrencyViewModel]? {
  50. didSet {
  51. self.selectedCurrencyViewModel = self.currencyInfoViewModel?.first
  52. }
  53. }
  54. var reciepient: Recipient?
  55. var exchangeRateModel: SendMoneyExchangeRateModel? {
  56. didSet {
  57. self.reciepientTextField.text = self.exchangeRateModel?.recipientAmount
  58. self.senderTextField.text = self.exchangeRateModel?.senderAmount
  59. let transferFee = self.exchangeRateModel?.transferFee ?? ""
  60. self.transferFeeInfoLabel.text = transferFee + " (Transfer fee included)"
  61. let exchangeRate = self.exchangeRateModel?.exchangeRate ?? ""
  62. self.exchangeRateLabel.text = exchangeRate + " (Current Exchange Ratess)"
  63. UIView.animate(withDuration: 0.33) {
  64. self.transferFeeInfoLabel.isHidden = false
  65. self.exchangeRateLabel.isHidden = false
  66. self.exchangeInfoStackView.isHidden = false
  67. self.transferFeeInfoLabel.alpha = 1
  68. self.exchangeRateLabel.alpha = 1
  69. self.exchangeInfoStackView.alpha = 1
  70. }
  71. self.action = ._continue
  72. }
  73. }
  74. var requestModel: SendMoneyRequestModel?
  75. var calcBy = ""
  76. var currencies: [String]? {
  77. didSet {
  78. // self.setCurrencyLabel(currency: self.currencies?.first ?? "")
  79. let models: [SendMoneyExchangeRateCurrencyViewModel] =
  80. (self.currencies ?? []).map({
  81. let viewmodel = SendMoneyExchangeRateCurrencyViewModel()
  82. viewmodel.countryCode = self.reciepient?.countryCode ?? ""
  83. viewmodel.currency = $0
  84. return viewmodel
  85. })
  86. self.currencyInfoViewModel = models
  87. }
  88. }
  89. var selectedCurrencyViewModel: SendMoneyExchangeRateCurrencyViewModel? {
  90. didSet {
  91. self.setCurrencyLabel(currency: selectedCurrencyViewModel?.currency ?? "")
  92. }
  93. }
  94. var hudDelegate: HUDStatusDelegate?
  95. // MARK: VC's Life cycle
  96. override func viewDidLoad() {
  97. super.viewDidLoad()
  98. self.setup()
  99. }
  100. override func viewWillAppear(_ animated: Bool) {
  101. super.viewWillAppear(animated)
  102. self.action = ActionBehaviour.calculate
  103. configureViews()
  104. }
  105. // MARK: IBActions
  106. @IBAction func continueButton(_ sender: UIButton) {
  107. if let _action = action {
  108. switch _action {
  109. case .calculate:
  110. let senderAmount = self.senderTextField.text!
  111. let reciepientAmount = self.reciepientTextField.text!
  112. self.calculateExchangeRate(senderAmount: senderAmount, reciepientAmount: reciepientAmount, calcBy: self.calcBy)
  113. case ._continue:
  114. // todo
  115. self.goToVerification()
  116. }
  117. }
  118. }
  119. private func goToVerification() {
  120. self.exchangeRateModel?.calcBy = self.calcBy
  121. self.exchangeRateModel?.reciepientCurrency = self.selectedCurrencyViewModel?.currency ?? ""
  122. self.actionDelegate?.calculated(model: self.exchangeRateModel)
  123. self.actionDelegate?.continueToVerificationAction()
  124. }
  125. func calculateExchangeRate(senderAmount: String, reciepientAmount: String, calcBy: String) {
  126. let senderAmount = senderAmount
  127. let reciepientAmount = reciepientAmount
  128. let recipientCurrency = self.selectedCurrencyViewModel?.currency
  129. let reciepientCountryId = self.reciepient?.countryId
  130. let paymentMethod = "WALLET"
  131. let paymentMethodId = self.requestModel?.paymemtMode?.id
  132. let payoutPartner = self.requestModel?.paymemtMode?.payoutPartner
  133. let defaults = UserDefaults.standard
  134. let myUsername = defaults.string(forKey: UserKeys.userId) ?? ""
  135. let bankId = self.requestModel?.bank?.id //bank id if selected bank
  136. let reciepientCountryName = self.reciepient?.country
  137. self.calculate(senderAmt: senderAmount, recieverAmt: reciepientAmount, recieverCurrency: recipientCurrency, recieverCountryName: reciepientCountryName, recieverCountryId: reciepientCountryId, paymentMethod: paymentMethod, paymentMethodId: paymentMethodId, calcBy: calcBy, payoutPartner: payoutPartner, userId: myUsername, bankId: bankId)
  138. }
  139. // MARK: Other Functions
  140. private func setup() {
  141. // all setup should be done here
  142. self.setupTargets()
  143. self.action = .calculate
  144. calcBy = "c"
  145. // corner Radius
  146. [backgroundViewCountryLabel1, backgroundViewCountryLabel2].forEach({
  147. $0?.layer.cornerRadius = 5
  148. })
  149. [exchangeBackground1, exchangeBackground2].forEach({
  150. $0?.layer.borderWidth = 1
  151. $0?.layer.borderColor = UIColor.init(hex: "#E0E0E0").cgColor
  152. $0?.layer.cornerRadius = 5
  153. })
  154. }
  155. private func setCountryFlag(countryCode: String) {
  156. let flag = CountryInfo().getFlag(for: countryCode)
  157. self.countryFlagImage.image = flag
  158. }
  159. private func setCurrencyLabel(currency: String) {
  160. self.countryCodeLabel.text = currency.uppercased()
  161. }
  162. private func setupTargets() {
  163. let tapGuesture = UITapGestureRecognizer(target: self, action: #selector(self.showCountryList(_:)))
  164. self.countryListTapGuesture = tapGuesture
  165. self.countryListStackView.addGestureRecognizer(self.countryListTapGuesture!)
  166. self.reciepientTextField.addTarget(self, action: #selector(self.textChanged(sender:)), for: UIControlEvents.editingChanged)
  167. self.senderTextField.addTarget(self, action: #selector(self.textChanged(sender:)), for: UIControlEvents.editingChanged)
  168. }
  169. @objc func showCountryList(_ sender: UITapGestureRecognizer) {
  170. print("show Country List")
  171. let viewcontroller = UIStoryboard.init(name: "CurrencyPicker", bundle: nil).instantiateViewController(withIdentifier: "CurrencyPickerViewController") as! CurrencyPickerViewController
  172. viewcontroller.data = self.currencyInfoViewModel ?? []
  173. viewcontroller.type = PickerTitle.currency
  174. viewcontroller.doneAction = self.currencySelected
  175. self.present(viewcontroller, animated: true, completion: nil)
  176. }
  177. func currencySelected(models: [SendMoneyExchangeRateCurrencyViewModel?]) {
  178. if let model = models.first {
  179. self.selectedCurrencyViewModel = model
  180. calcBy.lowercased() == "c" ? (reciepientTextField.text = "") : (senderTextField.text = "")
  181. }
  182. }
  183. private func configureViews() {
  184. self.exchangeRateLabel.isHidden = true
  185. self.exchangeRateLabel.alpha = 0
  186. self.transferFeeInfoLabel.isHidden = true
  187. self.transferFeeInfoLabel.alpha = 0
  188. self.exchangeInfoStackView.isHidden = true
  189. exchangeInfoStackView.alpha = 0
  190. let dropDownImage = #imageLiteral(resourceName: "dropdown_white").withRenderingMode(UIImageRenderingMode.alwaysTemplate)
  191. let image = dropDownImage
  192. self.dropDownImageView.image = image
  193. self.dropDownImageView.tintColor = UIColor.white
  194. self.setCountryFlag(countryCode: self.reciepient?.countryCode ?? "")
  195. let deliveryMethod = self.requestModel?.paymemtMode
  196. if (deliveryMethod?.bankRequired ?? "false").lowercased() == "true" {
  197. self.currencies = self.requestModel?.bank?.payCurrency ?? []
  198. }else {
  199. self.currencies = deliveryMethod?.payCurrency ?? []
  200. }
  201. }
  202. func calculate(senderAmt: String?, senderCurrency: String? = "KRW", recieverAmt: String?, recieverCurrency: String?, recieverCountryName: String?, recieverCountryId: String?, paymentMethod: String?, paymentMethodId: String? ,calcBy: String?, senderCountryId: String? = "118", payoutPartner: String?, userId: String?, bankId: String?) {
  203. self.presenter?.calculate(senderAmt: senderAmt, senderCurrency: senderCurrency, recieverAmt: recieverAmt, recieverCurrency: recieverCurrency, recieverCountryName: recieverCountryName, recieverCountryId: recieverCountryId, paymentMethod: paymentMethod, paymentMethodId: paymentMethodId, calcBy: calcBy, senderCountryId: senderCountryId, payoutPartner: payoutPartner, userId: userId, bankId: bankId)
  204. }
  205. @objc private func textChanged(sender: UITextField) {
  206. self.action = .calculate
  207. switch sender {
  208. case senderTextField:
  209. self.reciepientTextField.text = ""
  210. self.calcBy = "c"
  211. case reciepientTextField:
  212. self.senderTextField.text = ""
  213. self.calcBy = "p"
  214. default:
  215. break
  216. }
  217. }
  218. }
  219. // MARK: SendMoneyExchangeRateViewInterface
  220. extension SendMoneyExchangeRateViewController: SendMoneyExchangeRateViewInterface {
  221. func show(model: SendMoneyExchangeRateModel) {
  222. self.exchangeRateModel = model
  223. }
  224. func show(error: String) {
  225. self.alert(message: error)
  226. }
  227. func showLoading() {
  228. self.hudDelegate?.showLoading()
  229. }
  230. func hideLoading() {
  231. self.hudDelegate?.hideLoading()
  232. }
  233. }
  234. extension SendMoneyExchangeRateViewController {
  235. override func didMove(toParentViewController parent: UIViewController?) {
  236. self.viewWillAppear(true)
  237. }
  238. }