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.

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