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.

676 lines
21 KiB

5 years ago
5 years ago
5 years ago
6 years ago
5 years ago
5 years ago
5 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. import Hero
  10. class SendMoneyExchangeRateCurrencyViewModel {
  11. var countryCode: String?
  12. var currency: String?
  13. }
  14. extension SendMoneyExchangeRateCurrencyViewModel: TablePresenterProtocol {
  15. var cellTitle: String? {
  16. return currency
  17. }
  18. var cellImage: UIImage? {
  19. return CountryInfo().getFlag(for: countryCode ?? "")
  20. }
  21. }
  22. enum ActionBehaviour {
  23. case calculate
  24. case `continue`
  25. }
  26. protocol SelectCouponDelegate: class {
  27. func selectBoxView(
  28. _ viewController: SelectCouponViewController,
  29. didSelectModel model: CouponBoxModel?
  30. )
  31. }
  32. class SendMoneyExchangeRateViewController: UIViewController {
  33. private enum DiscountType: String {
  34. case percent = "1"
  35. case value = "2"
  36. }
  37. // MARK: IBOutlets
  38. @IBOutlet private weak var exchangeBackground1: UIView!
  39. @IBOutlet private weak var exchangeBackground2: UIView!
  40. @IBOutlet private weak var dropDownImageView: UIImageView!
  41. @IBOutlet private weak var backgroundViewCountryLabel1: UIView!
  42. @IBOutlet private weak var backgroundViewCountryLabel2: UIView!
  43. @IBOutlet private weak var countryListStackView: UIStackView!
  44. @IBOutlet private weak var countryCodeLabel: UILabel!
  45. @IBOutlet private weak var countryFlagImage: UIImageView!
  46. @IBOutlet private weak var continueButton: UIButton!
  47. @IBOutlet private weak var senderTextField: GMENumberTextField!
  48. @IBOutlet private weak var reciepientTextField: GMENumberTextField!
  49. @IBOutlet private weak var transferFeeInfoLabel: UILabel!
  50. @IBOutlet weak var appliedCouponStackView: UIStackView!
  51. @IBOutlet weak var appliedCouponFee: UILabel!
  52. @IBOutlet private weak var exchangeRateLabel: UILabel!
  53. @IBOutlet private weak var youSendTitleLabel: UILabel!
  54. @IBOutlet private weak var recipientGetsTitleLabel: UILabel!
  55. @IBOutlet private weak var couponBackgroundView: UIView!
  56. @IBOutlet private weak var couponNameTitleLabel: UILabel!
  57. @IBOutlet private weak var couponNameLabel: UILabel!
  58. @IBOutlet private weak var couponDropDownImageView: UIImageView!
  59. @IBOutlet private weak var realSenderView: UIView!
  60. @IBOutlet private weak var realSenderTitleLabel: UILabel!
  61. @IBOutlet private weak var realSenderLabel: UILabel!
  62. @IBOutlet weak var couponDetailView: UIStackView!
  63. @IBOutlet weak var calculatedInfoView: UIView!
  64. @IBOutlet weak var serviceChargeView: UIStackView!
  65. @IBOutlet weak var exchangeRateView: UIStackView!
  66. @IBOutlet weak var couponListFetch: UIView!
  67. @IBOutlet weak var couponListShow: UIStackView!
  68. // MARK: Properties
  69. var presenter: SendMoneyExchangeRateModuleInterface?
  70. var requestModel: SendMoneyRequestModel?
  71. weak var actionDelegate: SendMoneyExchangeRateActionDelegate?
  72. weak var selectedCouponDelegate: SelectCouponDelegate?
  73. var reciepient: Recipient?
  74. var netServiceFee: String?
  75. var couponSchemeId: String?
  76. private var applyDefaultCoupon: CouponBoxModel?
  77. private lazy var countryListTapGuesture: UITapGestureRecognizer = UITapGestureRecognizer()
  78. private lazy var couponListTapGesture: UITapGestureRecognizer = UITapGestureRecognizer()
  79. private var plainSendingAmount: String?
  80. private var action: ActionBehaviour? {
  81. didSet {
  82. if let action = self.action {
  83. switch action {
  84. case .calculate:
  85. continueButton.setTitle("calculate_text".localized(), for: .normal)
  86. case .continue:
  87. continueButton.setTitle("continue_text".localized(), for: .normal)
  88. }
  89. }
  90. }
  91. }
  92. private var couponInfo: [CouponBoxModel]? {
  93. didSet {
  94. if couponInfo?.count ?? 0 > 0 {
  95. let defaultApplyCoupon = couponInfo?.sorted(by: { (couponModel1, couponModel2) -> Bool in
  96. guard let date1 = couponModel1.expireDate else { return true }
  97. guard let date2 = couponModel2.expireDate else { return false }
  98. return date1 > date2
  99. })
  100. applyDefaultCoupon = defaultApplyCoupon?.first
  101. }
  102. }
  103. }
  104. private var selectCoupon: CouponBoxModel?
  105. private var transferFeeCharge: ExchangeRateModel?
  106. private var currencyInfoViewModel: [SendMoneyExchangeRateCurrencyViewModel]? {
  107. didSet {
  108. selectedCurrencyViewModel = currencyInfoViewModel?.first
  109. }
  110. }
  111. private var exchangeRateModel: SendMoneyExchangeRateModel? {
  112. didSet {
  113. guard let model = exchangeRateModel else {
  114. self.showExchangeRateInfomation(isHidden: true)
  115. return
  116. }
  117. reciepientTextField.text = Utility.getCommaSeperatedStringWithDecimal(
  118. numberString: model.recipientAmount ?? ""
  119. )
  120. senderTextField.text = Utility.getCommaSeperatedStringWithDecimal(
  121. numberString: model.senderAmount ?? ""
  122. )
  123. let serviceCharge = model.transferFee?.likeCommaMoney() ??
  124. model.transferFee ??
  125. "0.00"
  126. let transferFee = serviceCharge != "0.00" ? "-\(serviceCharge)" : "\(serviceCharge)"
  127. transferFeeInfoLabel.text = "\(transferFee) (\("transfer_fee_included_text".localized()))"
  128. exchangeRateLabel.text =
  129. "\(model.exchangeRate ?? "") (\("current_exchange_rate_text".localized()))"
  130. setCoupon()
  131. self.showExchangeRateInfomation(isHidden: false)
  132. action = .continue
  133. }
  134. }
  135. private var calcBy = ""
  136. private var isFirst = true
  137. private var currencies: [String]? {
  138. didSet {
  139. let models: [SendMoneyExchangeRateCurrencyViewModel] =
  140. (currencies ?? []).map {[weak self] in
  141. guard let `self` = self else {
  142. return SendMoneyExchangeRateCurrencyViewModel()
  143. }
  144. let viewmodel = SendMoneyExchangeRateCurrencyViewModel()
  145. viewmodel.countryCode = self.reciepient?.countryCode ?? ""
  146. viewmodel.currency = $0
  147. return viewmodel
  148. }
  149. currencyInfoViewModel = models
  150. }
  151. }
  152. var selectedCurrencyViewModel: SendMoneyExchangeRateCurrencyViewModel? {
  153. didSet {
  154. setCurrencyLabel(currency: selectedCurrencyViewModel?.currency ?? "")
  155. action = .calculate
  156. }
  157. }
  158. weak var hudDelegate: HUDStatusDelegate?
  159. // MARK: VC's Life cycle
  160. override func viewDidLoad() {
  161. super.viewDidLoad()
  162. setup()
  163. }
  164. override func viewWillAppear(_ animated: Bool) {
  165. super.viewWillAppear(animated)
  166. configureViews()
  167. action = ActionBehaviour.calculate
  168. senderTextField.receiverNativeCountry = reciepient?.countryCode ?? ""
  169. reciepientTextField.receiverNativeCountry = reciepient?.countryCode ?? ""
  170. presenter?.fetchCoupons()
  171. sendingAmountChanged()
  172. }
  173. override func viewDidAppear(_ animated: Bool) {
  174. super.viewDidAppear(animated)
  175. if isFirst {
  176. self.senderTextField.becomeFirstResponder()
  177. self.isFirst = false
  178. }
  179. if couponNameLabel.text == "" {
  180. couponNameLabel.text = "\(couponInfo?.count ?? 0)"
  181. } else {
  182. }
  183. }
  184. override func viewWillDisappear(_ animated: Bool) {
  185. super.viewWillDisappear(animated)
  186. view.endEditing(true)
  187. }
  188. // MARK: IBActions
  189. @IBAction private func continueButton(_ sender: UIButton) {
  190. view.endEditing(true)
  191. if let action = self.action {
  192. switch action {
  193. case .calculate:
  194. calculate()
  195. case .continue:
  196. goToVerification()
  197. }
  198. }
  199. }
  200. // MARK: Other Functions
  201. private func setup() {
  202. // all setup should be done here
  203. realSenderView.isHidden = true
  204. backgroundViewCountryLabel2.hero.id = reciepient?.receiverID
  205. backgroundViewCountryLabel2.hero.modifiers = [.translate()]
  206. setupTargets()
  207. action = .calculate
  208. senderTextField.delegate = self
  209. reciepientTextField.delegate = self
  210. calcBy = "c"
  211. [backgroundViewCountryLabel1, backgroundViewCountryLabel2].forEach { $0?.layer.cornerRadius = 5 }
  212. [exchangeBackground1, exchangeBackground2, couponBackgroundView].forEach {
  213. $0?.layer.borderWidth = 1
  214. $0?.layer.borderColor = UIColor.themeSeparate.cgColor
  215. // UIColor.init(hex: "#E0E0E0").cgColor
  216. $0?.layer.cornerRadius = 5
  217. }
  218. configureLanguage()
  219. continueButton.layer.cornerRadius = 5
  220. continueButton.backgroundColor = .themeRed
  221. continueButton.titleLabel?.font = .sanfrancisco(.medium, size: 18)
  222. senderTextField.textColor = .themeRed
  223. reciepientTextField.textColor = .themeRed
  224. realSenderLabel.textColor = .themeRed
  225. backgroundViewCountryLabel1.backgroundColor = .themeBlue
  226. backgroundViewCountryLabel2.backgroundColor = .themeBlue
  227. }
  228. private func showExchangeRateInfomation(isHidden flag: Bool) {
  229. calculatedInfoView.isHidden = flag
  230. calculatedInfoView.alpha = flag ? 0.0 : 1.0
  231. if !flag {
  232. self.serviceChargeView.isHidden = false
  233. self.exchangeRateView.isHidden = false
  234. self.couponBackgroundView.isHidden = false
  235. let animator = UIViewPropertyAnimator(duration: 0.3, curve: .easeIn) {
  236. self.serviceChargeView.alpha = 1.0
  237. }
  238. animator.addCompletion { _ in
  239. let subAnimator = UIViewPropertyAnimator(duration: 0.3, curve: .easeIn) {
  240. self.exchangeRateView.alpha = 1.0
  241. }
  242. subAnimator.addCompletion { _ in
  243. let subSubAnimator = UIViewPropertyAnimator(duration: 0.2, curve: .easeIn) {
  244. self.couponBackgroundView.alpha = 1.0
  245. }
  246. subSubAnimator.startAnimation()
  247. }
  248. subAnimator.startAnimation()
  249. }
  250. animator.startAnimation()
  251. } else {
  252. serviceChargeView.isHidden = true
  253. serviceChargeView.alpha = 0.0
  254. exchangeRateView.isHidden = true
  255. exchangeRateView.alpha = 0.0
  256. couponBackgroundView.isHidden = true
  257. couponBackgroundView.alpha = 0.0
  258. }
  259. }
  260. private func setCoupon() {
  261. guard
  262. let selectedCoupon = applyDefaultCoupon,
  263. // selectedCoupon.couponType == "1",
  264. let schemeId = selectedCoupon.schemeId,
  265. schemeId != "",
  266. let discountType = selectedCoupon.discountType,
  267. let type = DiscountType(rawValue: discountType),
  268. var discountValue = Double(selectedCoupon.discountValue ?? ""),
  269. let senderMoney = Double(senderTextField?.text?.stringRemovingComma() ?? ""),
  270. let serviceFee = Double(exchangeRateModel?.transferFee?.stringRemovingComma() ?? "")
  271. else {
  272. resetCouponandAppliedMoney()
  273. return
  274. }
  275. realSenderView.isHidden = false
  276. couponSchemeId = schemeId
  277. switch type {
  278. case .percent:
  279. discountValue = serviceFee * (discountValue / 100)
  280. couponNameLabel.text = "Service Discount \(selectedCoupon.discountValue ?? "0")%"
  281. case .value:
  282. couponNameLabel.text = "Service Discount \(selectedCoupon.discountValue ?? "0") KRW"
  283. }
  284. netServiceFee = "\(serviceFee - discountValue)".likeCommaMoney()
  285. realSenderLabel.text = "\(senderMoney - discountValue)".likeCommaMoney()
  286. }
  287. private func configureLanguage() {
  288. youSendTitleLabel.text = "you_send_text".localized()
  289. recipientGetsTitleLabel.text = "recepient_gets_text".localized()
  290. continueButton.setTitle("calculate_text".localized(), for: .normal)
  291. }
  292. private func setCountryFlag(countryCode: String) {
  293. let countryEnum = CountryEnum(rawValue: countryCode.lowercased())
  294. countryFlagImage.image = countryEnum?.flag
  295. }
  296. private func setCurrencyLabel(currency: String) {
  297. countryCodeLabel.text = currency.uppercased()
  298. }
  299. private func setupTargets() {
  300. let tapGuesture = UITapGestureRecognizer(target: self, action: #selector(showCountryList(_:)))
  301. countryListTapGuesture = tapGuesture
  302. countryListStackView.addGestureRecognizer(countryListTapGuesture)
  303. let couponTapGuesture = UITapGestureRecognizer(target: self, action: #selector(showCouponList(_:)))
  304. couponListTapGesture = couponTapGuesture
  305. couponListShow.addGestureRecognizer(couponListTapGesture)
  306. reciepientTextField.addTarget(
  307. self,
  308. action: #selector(textChanged(sender:)),
  309. for: UIControl.Event.editingChanged
  310. )
  311. senderTextField.addTarget(
  312. self,
  313. action: #selector(textChanged(sender:)),
  314. for: UIControl.Event.editingChanged
  315. )
  316. }
  317. @objc private func showCountryList(_ sender: UITapGestureRecognizer) {
  318. TablePresenterWireframe().openWith(
  319. delegate: self,
  320. model: currencyInfoViewModel,
  321. source: self
  322. )
  323. }
  324. @objc private func showCouponList(_ sender: UITapGestureRecognizer) {
  325. SelectCouponWireframe().openSelectCoupon(
  326. didSelect: selectCoupon,
  327. with: couponInfo,
  328. delegate: self,
  329. in: self
  330. )
  331. }
  332. private func configureViews() {
  333. exchangeRateModel = nil
  334. let dropDownImage = #imageLiteral(resourceName: "dropdown_white").withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
  335. let image = dropDownImage
  336. dropDownImageView.image = image
  337. dropDownImageView.tintColor = UIColor.white
  338. setCountryFlag(countryCode: reciepient?.countryCode ?? "")
  339. let deliveryMethod = requestModel?.paymemtMode
  340. if (deliveryMethod?.bankRequired ?? "false").lowercased() == "true" {
  341. currencies = requestModel?.bank?.payCurrency ?? []
  342. } else {
  343. currencies = deliveryMethod?.payCurrency ?? []
  344. }
  345. couponBackgroundView.isHidden = true
  346. couponBackgroundView.alpha = 0
  347. couponDropDownImageView.image = dropDownImage
  348. couponDropDownImageView.tintColor = .themeBlue
  349. }
  350. private func calculate(
  351. senderAmt: String?,
  352. senderCurrency: String? = "KRW",
  353. recieverAmt: String?,
  354. recieverCurrency: String?,
  355. recieverCountryName: String?,
  356. recieverCountryId: String?,
  357. paymentMethod: String?,
  358. paymentMethodId: String?,
  359. calcBy: String?,
  360. senderCountryId: String? = "118",
  361. payoutPartner: String?,
  362. userId: String?,
  363. bankId: String?
  364. ) {
  365. presenter?.calculate(
  366. senderAmt: senderAmt,
  367. senderCurrency: senderCurrency,
  368. recieverAmt: recieverAmt,
  369. recieverCurrency: recieverCurrency,
  370. recieverCountryName: recieverCountryName,
  371. recieverCountryId: recieverCountryId,
  372. paymentMethod: paymentMethod,
  373. paymentMethodId: paymentMethodId,
  374. calcBy: calcBy,
  375. senderCountryId: senderCountryId,
  376. payoutPartner: payoutPartner,
  377. userId: userId,
  378. bankId: bankId
  379. )
  380. }
  381. @objc private func textChanged(sender: UITextField) {
  382. action = .calculate
  383. sendingAmountChanged()
  384. switch sender {
  385. case senderTextField:
  386. reciepientTextField.text = ""
  387. calcBy = "c"
  388. senderTextField.text = Utility.getCommaSeperatedString(numberString: senderTextField.text!)
  389. resetCouponandAppliedMoney()
  390. case reciepientTextField:
  391. senderTextField.text = ""
  392. calcBy = "p"
  393. reciepientTextField.text = Utility.getCommaSeperatedString(numberString: reciepientTextField.text!)
  394. resetCouponandAppliedMoney()
  395. default:
  396. break
  397. }
  398. }
  399. private func resetCouponandAppliedMoney() {
  400. netServiceFee = nil
  401. couponNameLabel.text = "\(couponInfo?.count ?? 0)"
  402. couponNameTitleLabel.text = "coupon_text".localized()
  403. realSenderView.isHidden = true
  404. }
  405. private func sendingAmountChanged() {
  406. selectCoupon = nil
  407. couponNameLabel.font = .sanfrancisco(.medium, size: 13)
  408. if couponNameLabel.text == "\(couponInfo?.count ?? 0)" { //selectCoupon?.couponType == "1" {
  409. couponNameTitleLabel.text = "coupon_text".localized()
  410. }
  411. realSenderTitleLabel.text = "applied_amount_text".localized()
  412. }
  413. private func calculate() {
  414. let senderAmount = senderTextField.text!
  415. let reciepientAmount = reciepientTextField.text!
  416. calculateExchangeRate(senderAmount: senderAmount, reciepientAmount: reciepientAmount, calcBy: calcBy)
  417. }
  418. private func goToVerification() {
  419. exchangeRateModel?.calcBy = calcBy
  420. exchangeRateModel?.reciepientCurrency = selectedCurrencyViewModel?.currency ?? ""
  421. exchangeRateModel?.autodebitSendingAmount = getPlainNumbers(number: senderTextField.text!)
  422. checkIfCouponIsApplied()
  423. actionDelegate?.calculated(model: exchangeRateModel)
  424. actionDelegate?.continueToVerificationAction()
  425. }
  426. private func checkIfCouponIsApplied() {
  427. guard let serviceFee = netServiceFee else {
  428. exchangeRateModel?.discountedServiceFee = exchangeRateModel?.transferFee
  429. exchangeRateModel?.schemeId = nil
  430. return
  431. }
  432. exchangeRateModel?.discountedServiceFee = "\(serviceFee).00"
  433. exchangeRateModel?.schemeId = couponSchemeId
  434. }
  435. private func getPlainNumbers(number: String) -> String {
  436. return number.stringRemovingComma()
  437. }
  438. private func calculateExchangeRate(senderAmount: String, reciepientAmount: String, calcBy: String) {
  439. let senderAmount = senderAmount.stringRemovingComma() // send sAmt amount
  440. let reciepientAmount = reciepientAmount.stringRemovingComma()
  441. let recipientCurrency = selectedCurrencyViewModel?.currency
  442. let reciepientCountryId = reciepient?.countryID
  443. let paymentMethod = requestModel?.autoDebitAccount?.type ?? ""
  444. let paymentMethodId = requestModel?.paymemtMode?.id
  445. let payoutPartner = requestModel?.paymemtMode?.payoutPartner
  446. let myUsername = Utility.getMyUserName()
  447. let bankId = requestModel?.bank?.id //bank id if selected bank
  448. let reciepientCountryName = reciepient?.country
  449. calculate(
  450. senderAmt: senderAmount,
  451. recieverAmt: reciepientAmount,
  452. recieverCurrency: recipientCurrency,
  453. recieverCountryName: reciepientCountryName,
  454. recieverCountryId: reciepientCountryId,
  455. paymentMethod: paymentMethod,
  456. paymentMethodId: paymentMethodId,
  457. calcBy: calcBy,
  458. payoutPartner: payoutPartner,
  459. userId: myUsername,
  460. bankId: bankId
  461. )
  462. }
  463. }
  464. // MARK: SendMoneyExchangeRateViewInterface
  465. extension SendMoneyExchangeRateViewController: SendMoneyExchangeRateViewInterface {
  466. func show(model: SendMoneyExchangeRateModel) {
  467. exchangeRateModel = model
  468. }
  469. func show(error: String) {
  470. showExchangeRateInfomation(isHidden: true)
  471. alert(type: .error, message: error)
  472. }
  473. func showLoading() {
  474. hudDelegate?.showLoading()
  475. }
  476. func hideLoading() {
  477. hudDelegate?.hideLoading()
  478. }
  479. func setCouponModel(with model: [CouponBoxModel]?) {
  480. let filterCoupon = model?.filter({ (coupon) -> Bool in
  481. return (coupon.couponType?.contains("1") ?? false)
  482. })
  483. // couponInfo = model
  484. couponInfo = filterCoupon
  485. }
  486. func setError(with error: Error) {
  487. alert(message: error.localizedDescription)
  488. }
  489. }
  490. extension SendMoneyExchangeRateViewController {
  491. override func didMove(toParent parent: UIViewController?) {
  492. self.viewWillAppear(true)
  493. if senderTextField.text != "" || reciepientTextField.text != "" {
  494. calculate()
  495. }
  496. }
  497. }
  498. // MARK: - SelectCouponViewDelegate
  499. extension SendMoneyExchangeRateViewController: SelectCouponViewDelegate {
  500. func viewController(_ viewController: SelectCouponViewController, didSelect coupon: CouponBoxModel?) {
  501. selectCoupon = coupon
  502. guard
  503. let selectedCoupon = coupon,
  504. // selectedCoupon.couponType == "1",
  505. let schemeId = selectedCoupon.schemeId,
  506. schemeId != "",
  507. let discountType = selectedCoupon.discountType,
  508. let type = DiscountType(rawValue: discountType),
  509. var discountValue = Double(selectedCoupon.discountValue ?? ""),
  510. let senderMoney = Double(senderTextField?.text?.stringRemovingComma() ?? ""),
  511. let serviceFee = Double(exchangeRateModel?.transferFee?.stringRemovingComma() ?? "")
  512. else {
  513. resetCouponandAppliedMoney()
  514. return
  515. }
  516. realSenderView.isHidden = false
  517. couponSchemeId = schemeId
  518. switch type {
  519. case .percent:
  520. discountValue = serviceFee * (discountValue / 100)
  521. couponNameLabel.text = "Service Discount \(selectedCoupon.discountValue ?? "0")%"
  522. case .value:
  523. couponNameLabel.text = "Service Discount \(selectedCoupon.discountValue ?? "0") KRW"
  524. }
  525. netServiceFee = "\(serviceFee - discountValue)".likeCommaMoney()
  526. realSenderLabel.text = "\(senderMoney - discountValue)".likeCommaMoney()
  527. }
  528. }
  529. // MARK: - UITextFieldDelegate
  530. extension SendMoneyExchangeRateViewController: UITextFieldDelegate {
  531. func textFieldDidEndEditing(_ textField: UITextField) {
  532. switch textField {
  533. case senderTextField, reciepientTextField:
  534. if senderTextField.text != "" || reciepientTextField.text != "" {
  535. calculate()
  536. }
  537. default:
  538. break
  539. }
  540. }
  541. }
  542. // MARK: - TablePresenterDelegate
  543. extension SendMoneyExchangeRateViewController: TablePresenterDelegate {
  544. func tablePresenterView(_ viewController: TablePresenterViewController) -> TablePresenterConfiguration {
  545. return TablePresenterConfiguration(
  546. presenterTitle: "search_currency_text".localized(),
  547. closeButtonTitle: "cancel_text".localized(),
  548. notFoundTitle: "no_result_found_text".localized(),
  549. searchBarPlaceHolder: "search_currency_text".localized()
  550. )
  551. }
  552. func tablePresenterView(
  553. _ viewController: TablePresenterViewController,
  554. didSelectModel model: TablePresenterProtocol?
  555. ) {
  556. selectedCurrencyViewModel =
  557. (model as? SendMoneyExchangeRateCurrencyViewModel) ?? selectedCurrencyViewModel
  558. calcBy.lowercased() == "c" ? (reciepientTextField.text = "") : (senderTextField.text = "")
  559. }
  560. }