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.

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