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
341 lines
13 KiB
//
|
|
// 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?
|
|
}
|
|
|
|
enum ActionBehaviour {
|
|
case calculate
|
|
case _continue
|
|
}
|
|
|
|
class SendMoneyExchangeRateViewController: UIViewController {
|
|
|
|
|
|
|
|
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?
|
|
|
|
// MARK: Properties
|
|
|
|
var plainSendingAmount: String?
|
|
|
|
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?
|
|
|
|
|
|
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.exchangeRateModel?.autodebitSendingAmount = self.getPlainNumbers(number: self.senderTextField.text!)
|
|
self.actionDelegate?.calculated(model: self.exchangeRateModel)
|
|
self.actionDelegate?.continueToVerificationAction()
|
|
}
|
|
|
|
private func getPlainNumbers(number: String) -> String {
|
|
return number.stringRemovingComma()
|
|
}
|
|
|
|
func calculateExchangeRate(senderAmount: String, reciepientAmount: String, calcBy: String) {
|
|
let senderAmount = senderAmount.stringRemovingComma() // send sAmt amount
|
|
let reciepientAmount = reciepientAmount.stringRemovingComma()
|
|
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
|
|
|
|
senderTextField.becomeFirstResponder()
|
|
|
|
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()
|
|
}
|
|
}
|