// // ResendExchangeViewController.swift // GME Remit // // Created by gme_2 on 18/03/2019. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit class ResendExchangeViewController: UIViewController { // MARK: IBOutlets @IBOutlet weak var exchangeBackground1: UIView! @IBOutlet weak var exchangeBackground2: UIView! @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! // MARK: Properties var reciepient: Recipient? { didSet { self.requestModel?.reciepient = reciepient } } var requestModel: ResendRequestModel? var transactionId: String? var resendInfoModel: ResendDetail? { didSet { self.senderTextField.text = Utility.getCommaSeperatedStringWithDecimal(numberString: resendInfoModel?.exchangeRate?.cAmount ?? "") self.reciepientTextField.text = Utility.getCommaSeperatedStringWithDecimal(numberString: resendInfoModel?.exchangeRate?.pAmount ?? "") self.calcBy = resendInfoModel?.exchangeRate?.calcBy ?? "" guard let reciever = resendInfoModel?.receiver else {return} self.reciepient = self.convertReciepient(model: reciever) self.setCountryFlag(countryCode: self.resendInfoModel?.receiver?.rCountryCode ?? "") } } var exchangeRateModel: SendMoneyExchangeRateModel? { didSet { self.reciepientTextField.text = Utility.getCommaSeperatedStringWithDecimal(numberString: self.exchangeRateModel?.recipientAmount ?? "") 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() + ")" self.countryCodeLabel.text = exchangeRateModel?.reciepientCurrency 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 self.requestModel?.exchangeRateDetail = exchangeRateModel } } var presenter: ResendExchangeModuleInterface? var calcBy = "" 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 selectedCurrencyViewModel: SendMoneyExchangeRateCurrencyViewModel? // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() self.setup() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationItem.title = "resend_money_text".localized() initialSetup() self.presenter?.viewIsReady() self.action = ActionBehaviour.calculate } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationItem.title = "" } // 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.showReceiverDetailPage() } } } // MARK: Other Functions private func setup() { // all setup should be done here initialSetup() setupTargets() setupView() configureLanguage() } private func configureLanguage() { self.recipientGetsTitleLabel.text = "recepient_gets_text".localized() self.youSendTitleLabel.text = "you_send_text".localized() } func setupView() { [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 }) } private func showReceiverDetailPage() { let sendmoneyModel = self.convertModel() if let navigation = self.navigationController, let reciepient = self.reciepient { let wireframe = SendMoneyVerificationWireframe() wireframe.openVerification(reciepient: reciepient, model: sendmoneyModel, source: navigation) } } func convertReciepient(model: ResendReceiver) -> Recipient { var reciepient = Recipient() reciepient.firstName = model.rFullName reciepient.recipientId = self.resendInfoModel?.remitDetial?.ReceiverId reciepient.reasonId = self.resendInfoModel?.remitDetial?.PurposeOfRemittance reciepient.relationId = self.resendInfoModel?.remitDetial?.RelWithSender reciepient.address = model.rAddress reciepient.country = model.rCountry reciepient.mobileNumber = model.rMobile return reciepient } private func convertModel() -> SendMoneyRequestModel { let model = SendMoneyRequestModel() self.exchangeRateModel?.calcBy = self.calcBy self.exchangeRateModel?.autodebitSendingAmount = self.senderTextField.text!.stringRemovingComma() model.exchangeRateDetail = self.exchangeRateModel model.autoDebitAccount = self.requestModel?.autoDebitAccount /* SendMoneyPayoutMode */ // "deliveryMethodId": model.paymemtMode?.id ?? "", // "payOutPartner": model.paymemtMode?.payoutPartner ?? "", // "ReceiverAccountNo": model.paymemtMode?.accountNumber ?? "", let paymentMode = SendMoneyPayoutMode() paymentMode.id = self.resendInfoModel?.remitDetial?.DeliveryMethodId paymentMode.payoutPartner = self.resendInfoModel?.remitDetial?.PayOutPartner paymentMode.accountNumber = self.resendInfoModel?.remitDetial?.ReceiverAccountNo paymentMode.mode = self.resendInfoModel?.receiver?.deliveryMethod model.paymemtMode = paymentMode /* SendMoneyBank */ // "pAgent": model.bank?.id ?? "", let bank = SendMoneyBank() bank.id = self.resendInfoModel?.remitDetial?.PAgent bank.name = self.requestModel?.transaction?.bankName model.bank = bank /* SendMoneyBankBranch */ // branch // "pBranch": model.branch?.id ?? "", let branch = SendMoneyBankBranch() branch.id = self.resendInfoModel?.remitDetial?.PBranch model.branch = branch return model } private func initialSetup() { 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 self.setCountryFlag(countryCode: self.reciepient?.countryCode ?? "") let deliveryMethod = self.requestModel?.paymemtMode } private func setCountryFlag(countryCode: String) { let flag = CountryInfo().getFlag(for: countryCode) self.countryFlagImage.image = flag } private func setupTargets() { self.reciepientTextField.addTarget(self, action: #selector(self.textChanged(sender:)), for: UIControlEvents.editingChanged) self.senderTextField.addTarget(self, action: #selector(self.textChanged(sender:)), for: UIControlEvents.editingChanged) } func calculate() { let senderAmount = self.senderTextField.text! let reciepientAmount = self.reciepientTextField.text! self.calculateExchangeRate(senderAmount: senderAmount, reciepientAmount: reciepientAmount, calcBy: self.calcBy) } func calculateExchangeRate(senderAmount: String, reciepientAmount: String, calcBy: String) { let senderAmount = senderAmount.stringRemovingComma() // send sAmt amount let reciepientAmount = reciepientAmount.stringRemovingComma() let recipientCurrency = self.resendInfoModel?.exchangeRate?.pCurrency let reciepientCountryId = self.resendInfoModel?.exchangeRate?.pCountryId let paymentMethod = self.requestModel?.autoDebitAccount?.type let paymentMethodId = self.resendInfoModel?.exchangeRate?.serviceType let payoutPartner = self.resendInfoModel?.exchangeRate?.payoutPartner let myUsername = Utility.getMyUserName() let bankId = self.resendInfoModel?.exchangeRate?.payoutAgent let reciepientCountryName = self.resendInfoModel?.exchangeRate?.pCountryName self.calculate(senderAmt: senderAmount, recieverAmt: reciepientAmount, recieverCurrency: recipientCurrency, recieverCountryName: reciepientCountryName, recieverCountryId: reciepientCountryId, paymentMethod: paymentMethod, paymentMethodId: paymentMethodId, calcBy: calcBy, payoutPartner: payoutPartner, userId: myUsername, bankId: bankId) } 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 } self.exchangeRateModel?.calcBy = calcBy } } // MARK: ResendExchangeViewInterface extension ResendExchangeViewController: ResendExchangeViewInterface { func show(model: ResendDetail) { self.resendInfoModel = model self.calculateExchangeRate(senderAmount: self.senderTextField.text!, reciepientAmount: self.reciepientTextField.text!, calcBy: self.calcBy) } func showExchangeRate(error: String) { self.alert(message: error) } func show(error: String) { self.alert(message: error, title: nil) { self.navigationController?.popViewController(animated: true) } } func showLoading() { self.showProgressHud() } func hideLoading() { self.hideProgressHud() } func show(model: SendMoneyExchangeRateModel) { self.exchangeRateModel = model } } extension ResendExchangeViewController: FetchSendMoneyExchangeRateService { }