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.
 
 
 
 

325 lines
13 KiB

//
// 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 // send sAmt amount
let reciepientAmount = reciepientAmount
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 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 {
}