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.

211 lines
8.1 KiB

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. // MARK: IBOutlets
  15. @IBOutlet weak var exchangeBackground1: UIView!
  16. @IBOutlet weak var exchangeBackground2: UIView!
  17. @IBOutlet weak var dropDownImageView: UIImageView!
  18. @IBOutlet weak var backgroundViewCountryLabel1: UIView!
  19. @IBOutlet weak var backgroundViewCountryLabel2: UIView!
  20. @IBOutlet weak var countryListStackView: UIStackView!
  21. @IBOutlet weak var countryCodeLabel: UILabel!
  22. @IBOutlet weak var countryFlagImage: UIImageView!
  23. @IBOutlet weak var continueButton: UIButton!
  24. @IBOutlet weak var senderTextField: UITextField!
  25. @IBOutlet weak var reciepientTextField: UITextField!
  26. @IBOutlet weak var transferFeeInfoLabel: UILabel!
  27. var countryListTapGuesture: UITapGestureRecognizer?
  28. // MARK: Properties
  29. var presenter: SendMoneyExchangeRateModuleInterface?
  30. var currencyInfoViewModel: [SendMoneyExchangeRateCurrencyViewModel]? {
  31. didSet {
  32. self.selectedCurrencyViewModel = self.currencyInfoViewModel?.first
  33. }
  34. }
  35. var reciepient: Recipient?
  36. var exchangeRateModel: SendMoneyExchangeRateModel? {
  37. didSet {
  38. self.reciepientTextField.text = self.exchangeRateModel?.recipientAmount
  39. self.senderTextField.text = self.exchangeRateModel?.senderAmount
  40. self.transferFeeInfoLabel.text = self.exchangeRateModel?.transferFee
  41. self.transferFeeInfoLabel.isHidden = false
  42. }
  43. }
  44. var requestModel: SendMoneyRequestModel?
  45. var calcBy = ""
  46. var currencies: [String]? {
  47. didSet {
  48. self.setCurrencyLabel(currency: self.currencies?.first ?? "")
  49. let models: [SendMoneyExchangeRateCurrencyViewModel] =
  50. (self.currencies ?? []).map({
  51. let viewmodel = SendMoneyExchangeRateCurrencyViewModel()
  52. viewmodel.countryCode = self.reciepient?.countryCode ?? ""
  53. viewmodel.currency = $0
  54. return viewmodel
  55. })
  56. self.currencyInfoViewModel = models
  57. }
  58. }
  59. var selectedCurrencyViewModel: SendMoneyExchangeRateCurrencyViewModel? {
  60. didSet {
  61. self.setCurrencyLabel(currency: selectedCurrencyViewModel?.currency ?? "")
  62. }
  63. }
  64. var hudDelegate: HUDStatusDelegate?
  65. var actionDelegate: SendMoneyExchangeRateActionDelegate?
  66. // MARK: VC's Life cycle
  67. override func viewDidLoad() {
  68. super.viewDidLoad()
  69. self.setup()
  70. }
  71. // MARK: IBActions
  72. @IBAction func continueButton(_ sender: UIButton) {
  73. let senderAmount = self.senderTextField.text!
  74. let reciepientAmount = self.reciepientTextField.text!
  75. let recipientCurrency = self.selectedCurrencyViewModel?.currency
  76. let reciepientCountryId = self.reciepient?.countryId
  77. // let paymentMethod = self.requestModel?.paymemtMode?.mode
  78. let paymentMethod = "WALLET"
  79. let paymentMethodId = self.requestModel?.paymemtMode?.id
  80. let payoutPartner = self.requestModel?.paymemtMode?.payoutPartner
  81. let defaults = UserDefaults.standard
  82. let myUsername = defaults.string(forKey: "com.gmeremit.username") ?? ""
  83. let bankId = self.requestModel?.bank?.id //bank id if selected bank
  84. let reciepientCountryName = self.reciepient?.country
  85. self.calculate(senderAmt: senderAmount, recieverAmt: reciepientAmount, recieverCurrency: recipientCurrency, recieverCountryName: reciepientCountryName, recieverCountryId: reciepientCountryId, paymentMethod: paymentMethod, paymentMethodId: paymentMethodId, calcBy: calcBy, payoutPartner: payoutPartner, userId: myUsername, bankId: bankId)
  86. // self.actionDelegate?.continueToVerificationAction()
  87. }
  88. // MARK: Other Functions
  89. private func setup() {
  90. // all setup should be done here
  91. self.setupTargets()
  92. self.configureViews()
  93. calcBy = "c"
  94. }
  95. private func setCountryFlag(countryCode: String) {
  96. let flag = CountryInfo().getFlag(for: countryCode)
  97. self.countryFlagImage.image = flag
  98. }
  99. private func setCurrencyLabel(currency: String) {
  100. self.countryCodeLabel.text = currency.uppercased()
  101. }
  102. private func setupTargets() {
  103. let tapGuesture = UITapGestureRecognizer(target: self, action: #selector(self.showCountryList(_:)))
  104. self.countryListTapGuesture = tapGuesture
  105. self.countryListStackView.addGestureRecognizer(self.countryListTapGuesture!)
  106. self.reciepientTextField.addTarget(self, action: #selector(self.textChanged(sender:)), for: UIControlEvents.editingChanged)
  107. self.senderTextField.addTarget(self, action: #selector(self.textChanged(sender:)), for: UIControlEvents.editingChanged)
  108. }
  109. @objc func showCountryList(_ sender: UITapGestureRecognizer) {
  110. print("show Country List")
  111. let viewcontroller = UIStoryboard.init(name: "CurrencyPicker", bundle: nil).instantiateViewController(withIdentifier: "CurrencyPickerViewController") as! CurrencyPickerViewController
  112. viewcontroller.data = self.currencyInfoViewModel ?? []
  113. viewcontroller.type = PickerTitle.currency
  114. viewcontroller.doneAction = self.currencySelected
  115. self.present(viewcontroller, animated: true, completion: nil)
  116. }
  117. func currencySelected(models: [SendMoneyExchangeRateCurrencyViewModel?]) {
  118. if let model = models.first {
  119. self.selectedCurrencyViewModel = model
  120. }
  121. }
  122. private func configureViews() {
  123. self.transferFeeInfoLabel.isHidden = true
  124. let dropDownImage = #imageLiteral(resourceName: "dropdown_white").withRenderingMode(UIImageRenderingMode.alwaysTemplate)
  125. let image = dropDownImage
  126. self.dropDownImageView.image = image
  127. self.dropDownImageView.tintColor = UIColor.white
  128. self.setCountryFlag(countryCode: self.reciepient?.countryCode ?? "")
  129. let deliveryMethod = self.requestModel?.paymemtMode
  130. if (deliveryMethod?.bankRequired ?? "false").lowercased() == "true" {
  131. self.currencies = self.requestModel?.bank?.payCurrency ?? []
  132. }else {
  133. self.currencies = deliveryMethod?.payCurrency ?? []
  134. }
  135. }
  136. 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?) {
  137. 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)
  138. }
  139. @objc private func textChanged(sender: UITextField) {
  140. switch sender {
  141. case senderTextField:
  142. self.reciepientTextField.text = ""
  143. self.calcBy = "c"
  144. case reciepientTextField:
  145. self.senderTextField.text = ""
  146. self.calcBy = "p"
  147. default:
  148. break
  149. }
  150. }
  151. }
  152. // MARK: SendMoneyExchangeRateViewInterface
  153. extension SendMoneyExchangeRateViewController: SendMoneyExchangeRateViewInterface {
  154. func show(model: SendMoneyExchangeRateModel) {
  155. self.exchangeRateModel = model
  156. }
  157. func show(error: String) {
  158. self.alert(message: error)
  159. }
  160. func showLoading() {
  161. self.hudDelegate?.showLoading()
  162. }
  163. func hideLoading() {
  164. self.hudDelegate?.hideLoading()
  165. }
  166. }