// // SendMoneyExchangeRateViewController.swift // GMERemittance // // Created by gme_2 on 28/08/2018. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit class SendMoneyExchangeRateCurrencyViewModel{ var countryCode: String? var currency: String? } class SendMoneyExchangeRateViewController: UIViewController { enum ActionBehaviour { case calculate case _continue } struct StringConstants { let youSendText = "you_send_text".localized() let reciepientGetsText = "recepient_gets_text".localized() let calculateText = "calculate_text".localized() } // MARK: IBOutlets @IBOutlet weak var exchangeBackground1: UIView! @IBOutlet weak var exchangeBackground2: UIView! @IBOutlet weak var dropDownImageView: UIImageView! @IBOutlet weak var backgroundViewCountryLabel1: UIView! @IBOutlet weak var backgroundViewCountryLabel2: UIView! @IBOutlet weak var countryListStackView: UIStackView! @IBOutlet weak var countryCodeLabel: UILabel! @IBOutlet weak var countryFlagImage: UIImageView! @IBOutlet weak var continueButton: UIButton! @IBOutlet weak var senderTextField: UITextField! @IBOutlet weak var reciepientTextField: UITextField! @IBOutlet weak var transferFeeInfoLabel: UILabel! @IBOutlet weak var exchangeRateLabel: UILabel! @IBOutlet weak var exchangeInfoStackView: UIStackView! @IBOutlet weak var youSendTitleLabel: UILabel! @IBOutlet weak var recipientGetsTitleLabel: UILabel! var countryListTapGuesture: UITapGestureRecognizer? var action: ActionBehaviour? { didSet { if let _action = action { switch _action { case .calculate: self.continueButton.setTitle("calculate_text".localized(), for: .normal) case ._continue: self.continueButton.setTitle("continue_text".localized(), for: .normal) } } } } var actionDelegate: SendMoneyExchangeRateActionDelegate? // MARK: Properties var presenter: SendMoneyExchangeRateModuleInterface? var currencyInfoViewModel: [SendMoneyExchangeRateCurrencyViewModel]? { didSet { self.selectedCurrencyViewModel = self.currencyInfoViewModel?.first } } var reciepient: Recipient? var exchangeRateModel: SendMoneyExchangeRateModel? { didSet { self.reciepientTextField.text = Utility.getCommaSeperatedStringWithDecimal(numberString: self.exchangeRateModel?.recipientAmount ?? "") // todo // self.senderTextField.text = Utility.getCommaSeperatedString(numberString: self.exchangeRateModel?.senderAmount ?? "") self.senderTextField.text = Utility.getCommaSeperatedStringWithDecimal(numberString: self.exchangeRateModel?.senderAmount ?? "") let transferFee = self.exchangeRateModel?.transferFee ?? "" self.transferFeeInfoLabel.text = transferFee + "(" + "transfer_fee_included_text".localized() + ")" let exchangeRate = self.exchangeRateModel?.exchangeRate ?? "" self.exchangeRateLabel.text = exchangeRate + " (" + "current_exchange_rate_text".localized() + ")" UIView.animate(withDuration: 0.33) { self.transferFeeInfoLabel.isHidden = false self.exchangeRateLabel.isHidden = false self.exchangeInfoStackView.isHidden = false self.transferFeeInfoLabel.alpha = 1 self.exchangeRateLabel.alpha = 1 self.exchangeInfoStackView.alpha = 1 } self.action = ._continue } } var requestModel: SendMoneyRequestModel? var calcBy = "" var currencies: [String]? { didSet { // self.setCurrencyLabel(currency: self.currencies?.first ?? "") let models: [SendMoneyExchangeRateCurrencyViewModel] = (self.currencies ?? []).map({ let viewmodel = SendMoneyExchangeRateCurrencyViewModel() viewmodel.countryCode = self.reciepient?.countryCode ?? "" viewmodel.currency = $0 return viewmodel }) self.currencyInfoViewModel = models } } var selectedCurrencyViewModel: SendMoneyExchangeRateCurrencyViewModel? { didSet { self.setCurrencyLabel(currency: selectedCurrencyViewModel?.currency ?? "") self.action = .calculate } } var hudDelegate: HUDStatusDelegate? // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() self.setup() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) configureViews() self.action = ActionBehaviour.calculate } // MARK: IBActions @IBAction func continueButton(_ sender: UIButton) { self.view.endEditing(true) if let _action = action { switch _action { case .calculate: self.calculate() case ._continue: // todo self.goToVerification() } } } func calculate() { let senderAmount = self.senderTextField.text! let reciepientAmount = self.reciepientTextField.text! self.calculateExchangeRate(senderAmount: senderAmount, reciepientAmount: reciepientAmount, calcBy: self.calcBy) } private func goToVerification() { self.exchangeRateModel?.calcBy = self.calcBy self.exchangeRateModel?.reciepientCurrency = self.selectedCurrencyViewModel?.currency ?? "" self.actionDelegate?.calculated(model: self.exchangeRateModel) self.actionDelegate?.continueToVerificationAction() } func calculateExchangeRate(senderAmount: String, reciepientAmount: String, calcBy: String) { let senderAmount = senderAmount // send sAmt amount let reciepientAmount = reciepientAmount let recipientCurrency = self.selectedCurrencyViewModel?.currency let reciepientCountryId = self.reciepient?.countryId let paymentMethod = self.requestModel?.autoDebitAccount?.type ?? "" let paymentMethodId = self.requestModel?.paymemtMode?.id let payoutPartner = self.requestModel?.paymemtMode?.payoutPartner let myUsername = Utility.getMyUserName() let bankId = self.requestModel?.bank?.id //bank id if selected bank let reciepientCountryName = self.reciepient?.country self.calculate(senderAmt: senderAmount, recieverAmt: reciepientAmount, recieverCurrency: recipientCurrency, recieverCountryName: reciepientCountryName, recieverCountryId: reciepientCountryId, paymentMethod: paymentMethod, paymentMethodId: paymentMethodId, calcBy: calcBy, payoutPartner: payoutPartner, userId: myUsername, bankId: bankId) } // MARK: Other Functions private func setup() { // all setup should be done here self.setupTargets() self.action = .calculate self.senderTextField.delegate = self self.reciepientTextField.delegate = self calcBy = "c" // corner Radius [backgroundViewCountryLabel1, backgroundViewCountryLabel2].forEach({ $0?.layer.cornerRadius = 5 }) [exchangeBackground1, exchangeBackground2].forEach({ $0?.layer.borderWidth = 1 $0?.layer.borderColor = UIColor.init(hex: "#E0E0E0").cgColor $0?.layer.cornerRadius = 5 }) configureLanguage() } private func configureLanguage() { self.youSendTitleLabel.text = StringConstants().youSendText self.recipientGetsTitleLabel.text = StringConstants().reciepientGetsText self.continueButton.setTitle(StringConstants().calculateText, for: .normal) } private func setCountryFlag(countryCode: String) { let flag = CountryInfo().getFlag(for: countryCode) self.countryFlagImage.image = flag } private func setCurrencyLabel(currency: String) { self.countryCodeLabel.text = currency.uppercased() } private func setupTargets() { let tapGuesture = UITapGestureRecognizer(target: self, action: #selector(self.showCountryList(_:))) self.countryListTapGuesture = tapGuesture self.countryListStackView.addGestureRecognizer(self.countryListTapGuesture!) self.reciepientTextField.addTarget(self, action: #selector(self.textChanged(sender:)), for: UIControlEvents.editingChanged) self.senderTextField.addTarget(self, action: #selector(self.textChanged(sender:)), for: UIControlEvents.editingChanged) } @objc func showCountryList(_ sender: UITapGestureRecognizer) { print("show Country List") let viewcontroller = UIStoryboard.init(name: "CurrencyPicker", bundle: nil).instantiateViewController(withIdentifier: "CurrencyPickerViewController") as! CurrencyPickerViewController viewcontroller.data = self.currencyInfoViewModel ?? [] viewcontroller.type = PickerTitle.currency viewcontroller.doneAction = self.currencySelected self.present(viewcontroller, animated: true, completion: nil) } func currencySelected(models: [SendMoneyExchangeRateCurrencyViewModel?]) { if let model = models.first { self.selectedCurrencyViewModel = model calcBy.lowercased() == "c" ? (reciepientTextField.text = "") : (senderTextField.text = "") } // self.calculate() } private func configureViews() { self.exchangeRateModel = nil self.exchangeRateLabel.isHidden = true self.exchangeRateLabel.alpha = 0 self.transferFeeInfoLabel.isHidden = true self.transferFeeInfoLabel.alpha = 0 self.exchangeInfoStackView.isHidden = true exchangeInfoStackView.alpha = 0 let dropDownImage = #imageLiteral(resourceName: "dropdown_white").withRenderingMode(UIImageRenderingMode.alwaysTemplate) let image = dropDownImage self.dropDownImageView.image = image self.dropDownImageView.tintColor = UIColor.white self.setCountryFlag(countryCode: self.reciepient?.countryCode ?? "") let deliveryMethod = self.requestModel?.paymemtMode if (deliveryMethod?.bankRequired ?? "false").lowercased() == "true" { self.currencies = self.requestModel?.bank?.payCurrency ?? [] }else { self.currencies = deliveryMethod?.payCurrency ?? [] } } 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?) { 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) } @objc private func textChanged(sender: UITextField) { self.action = .calculate switch sender { case senderTextField: self.reciepientTextField.text = "" self.calcBy = "c" senderTextField.text = Utility.getCommaSeperatedString(numberString: senderTextField.text!) case reciepientTextField: self.senderTextField.text = "" self.calcBy = "p" reciepientTextField.text = Utility.getCommaSeperatedString(numberString: reciepientTextField.text!) default: break } } } // MARK: SendMoneyExchangeRateViewInterface extension SendMoneyExchangeRateViewController: SendMoneyExchangeRateViewInterface { func show(model: SendMoneyExchangeRateModel) { self.exchangeRateModel = model } func show(error: String) { self.alert(message: error) } func showLoading() { self.hudDelegate?.showLoading() } func hideLoading() { self.hudDelegate?.hideLoading() } } extension SendMoneyExchangeRateViewController { override func didMove(toParentViewController parent: UIViewController?) { self.viewWillAppear(true) } } extension SendMoneyExchangeRateViewController: UITextFieldDelegate { func textFieldDidEndEditing(_ textField: UITextField) { // self.calculate() } }