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.
1187 lines
43 KiB
1187 lines
43 KiB
//
|
|
// ExchangeRateMultipleCountryViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by Fm-user on 4/4/18.
|
|
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class ExchangeRateMultipleCountryViewController: UIViewController,UICollectionViewDataSource, UICollectionViewDelegate {
|
|
|
|
@IBOutlet weak var collectionViewOutlet: UICollectionView!
|
|
@IBOutlet weak var countryListTextField: UITextField!
|
|
@IBOutlet weak var bankListTextField: UITextField!
|
|
@IBOutlet weak var selectPayoutModeTitleOutlet: UILabel!
|
|
@IBOutlet weak var bankListTitleOutlet: UILabel!
|
|
@IBOutlet weak var currencyListTextField: UITextField!
|
|
@IBOutlet weak var fromUnitLabel: UILabel!
|
|
@IBOutlet weak var toUnitLabel: UILabel!
|
|
@IBOutlet weak var currencyTitleLabel: UILabel!
|
|
@IBOutlet weak var fromKRWLabelOutlet: UILabel!
|
|
@IBOutlet weak var rateTitleViewOutlet: UILabel!
|
|
@IBOutlet weak var arrowIconViewOutlet: UIImageView!
|
|
@IBOutlet weak var calculateButtonOutlet: UIButton!
|
|
@IBOutlet weak var scrollViewOutlet: UIScrollView!
|
|
@IBOutlet weak var bankConstraint: NSLayoutConstraint!
|
|
|
|
private var agentViewModel = AgentViewModel()
|
|
private var paymentMethodViewModel = PaymentMethodViewModel()
|
|
private var exchanageRateViewModel = ExchangeRateViewModel()
|
|
private var transactionViewModel = TransactionViewModel()
|
|
private var agentCountryList = [AgentCountryList]()
|
|
private var payoutModeTypeArray = [PayoutMode]()
|
|
private var bankAgentArray = [AgentModel]()
|
|
private var cashAgentArray = [AgentModel]()
|
|
private var homeDeliveryArray = [AgentModel]()
|
|
private var currenciesArray = [CurrenciesData]()
|
|
private var exchangeRateData: ExchangeRateData?
|
|
|
|
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
|
|
private var pickerView: UIPickerView = UIPickerView()
|
|
|
|
private var items = [String]()
|
|
private var images = [String]()
|
|
private var pId: String = "nil"
|
|
private var countryId: String = "nil"
|
|
private var status: String = "nil"
|
|
private var selectedIndexPath: Int?
|
|
private var payoutIdGlobal: String?
|
|
private var imageView: UIImageView?
|
|
|
|
private var countryNameSelected: String?
|
|
private var bankNameSelected: String?
|
|
private var currencySelected: String?
|
|
private var transferLimit: Double?
|
|
|
|
private var dialogBoolean = 0
|
|
|
|
public static var exchangeRateAgentConnectionCheck = 0
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
setUpNavBar(id: 201, title: "Today's Rate")
|
|
setUpAnotherLoginListener(genericviewmodel: agentViewModel)
|
|
setUpAnotherLoginListener(genericviewmodel: paymentMethodViewModel)
|
|
setUpAnotherLoginListener(genericviewmodel: exchanageRateViewModel)
|
|
setUpAnotherLoginListener(genericviewmodel: transactionViewModel)
|
|
|
|
scrollViewOutlet.isScrollEnabled = false
|
|
|
|
countryListTextField.layer.sublayerTransform = CATransform3DMakeTranslation(10, 0, 0);
|
|
bankListTextField.layer.sublayerTransform = CATransform3DMakeTranslation(10, 0, 0);
|
|
currencyListTextField.layer.sublayerTransform = CATransform3DMakeTranslation(10, 0, 0);
|
|
|
|
agentViewModel.agentConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
agentViewModel.agentConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.stopLoading()
|
|
if ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck == 0{
|
|
ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck = ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck+1
|
|
self.popUpMessage(value: 26)
|
|
}
|
|
}
|
|
|
|
paymentMethodViewModel.paymentMethodConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
paymentMethodViewModel.paymentMethodConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.stopLoading()
|
|
if ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck == 0{
|
|
ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck = ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck+1
|
|
self.popUpMessage(value: 26)
|
|
}
|
|
}
|
|
|
|
transactionViewModel.transactionViewConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
transactionViewModel.transactionViewConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.stopLoading()
|
|
if ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck == 0{
|
|
ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck = ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck+1
|
|
self.popUpMessage(value: 26)
|
|
}
|
|
}
|
|
|
|
exchanageRateViewModel.exchangeRateConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
exchanageRateViewModel.exchangeRateConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.stopLoading()
|
|
if ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck == 0{
|
|
ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck = ExchangeRateMultipleCountryViewController.exchangeRateAgentConnectionCheck+1
|
|
self.popUpMessage(value: 26)
|
|
}
|
|
}
|
|
|
|
/**
|
|
Check Internet Connection
|
|
*/
|
|
|
|
agentViewModel.internetConnection.value = nil
|
|
agentViewModel.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 15)
|
|
}
|
|
|
|
/**
|
|
Request Country List
|
|
*/
|
|
agentViewModel.agentCountryListAvailable.bind { [weak self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self?.stopLoading()
|
|
guard $0! else {
|
|
self?.stopLoading()
|
|
self?.popUpMessageError(value: 10, message: (self?.agentViewModel.getErrorMessage())!);
|
|
return
|
|
}
|
|
self?.stopLoading()
|
|
self?.setAgentCountryList()
|
|
}
|
|
self.startLoading()
|
|
self.agentViewModel.fetchListOfCountry()
|
|
self.setTextFieldAndPickerViewDelegate()
|
|
|
|
|
|
/**
|
|
Check Internet Connection
|
|
*/
|
|
self.paymentMethodViewModel.internetConnection.value = nil
|
|
self.paymentMethodViewModel.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.stopLoading()
|
|
self.popUpMessage(value: 15)
|
|
}
|
|
/**
|
|
Request Payment Method Type (Cash,Bank,Home)
|
|
*/
|
|
self.paymentMethodViewModel.payoutMethodType.bind{[weak self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self?.stopLoading()
|
|
guard $0! else {
|
|
self?.popUpMessageError(value: 10, message: (self?.paymentMethodViewModel.getErrorMessage())!)
|
|
return
|
|
}
|
|
self?.setPayoutModeData()
|
|
self?.stopLoading()
|
|
}
|
|
|
|
|
|
/**
|
|
TransactionInfo
|
|
*/
|
|
self.transactionViewModel.internetConnection.value = nil
|
|
self.transactionViewModel.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.stopLoading()
|
|
self.popUpMessage(value: 15)
|
|
}
|
|
|
|
self.transactionViewModel.transactionInfoAvailable.bind{[weak self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self?.stopLoading()
|
|
guard $0! else {
|
|
self?.popUpMessageError(value: 10, message: (self?.transactionViewModel.getErrorMessage())!)
|
|
return
|
|
}
|
|
self?.setMinimumTransferAmountPerTransaction()
|
|
self?.transferLimit = self?.transactionViewModel.getTransferLimit()
|
|
}
|
|
|
|
|
|
/**
|
|
Request List of Bank or Cash Agent
|
|
*/
|
|
self.paymentMethodViewModel.payoutBankAvailable.bind{[weak self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self?.stopLoading()
|
|
guard $0! else {
|
|
//self?.popUpMessageError(value: 10, message: (self?.paymentMethodViewModel.getErrorMessage())!)
|
|
return
|
|
}
|
|
self?.setBankOrCashData()
|
|
self?.stopLoading()
|
|
}
|
|
|
|
|
|
/**
|
|
Check Internet Connection
|
|
*/
|
|
exchanageRateViewModel.internetConnection.value = nil
|
|
exchanageRateViewModel.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
//self.popUpMessage(value: 15)
|
|
}
|
|
|
|
/**
|
|
Request List of Currencies
|
|
*/
|
|
self.exchanageRateViewModel.currencyInfoAvailable.bind{[weak self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self?.stopLoading()
|
|
guard $0! else {
|
|
//self?.popUpMessageError(value: 10, message: (self?.exchanageRateViewModel.getErrorMessage())!)
|
|
return
|
|
}
|
|
self?.setCurrenciesList()
|
|
self?.stopLoading()
|
|
}
|
|
|
|
/**
|
|
Request Exchange Rate Details
|
|
*/
|
|
self.exchanageRateViewModel.exchangeRateAvailable.bind{[weak self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self?.stopLoading()
|
|
guard $0! else {
|
|
self?.hideRateViews(visible: true)
|
|
self?.popUpMessageError(value: 10, message: (self?.exchanageRateViewModel.getErrorMessage())!)
|
|
return
|
|
}
|
|
self?.setExchangeRateList()
|
|
self?.stopLoading()
|
|
}
|
|
}
|
|
|
|
/**
|
|
- returns: minimum transfer amount in KRW
|
|
*/
|
|
func setMinimumTransferAmountPerTransaction() -> String{
|
|
let minimumTransferAmountPerTransaction = transactionViewModel.getMinimumTransferAmountPerTransaction()
|
|
|
|
if minimumTransferAmountPerTransaction != "nil"{
|
|
let replace = minimumTransferAmountPerTransaction.replacingOccurrences(of: "KRW", with:"")
|
|
replace.trimmingCharacters(in: .whitespaces)
|
|
return replace
|
|
}
|
|
return "nil"
|
|
}
|
|
|
|
/**
|
|
Redirect to ExchangeRateViewController
|
|
*/
|
|
@IBAction func rateCalculateActionButton(_ sender: Any) {
|
|
performSegue(withIdentifier: "exchangeRate", sender: nil)
|
|
}
|
|
|
|
/**
|
|
Passing a dictionary object to ExchangeRateViewController
|
|
*/
|
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
|
var exchangeRateData = [String:Any]()
|
|
if segue.identifier == "exchangeRate" {
|
|
let exchangeRateViewController
|
|
= segue.destination as! ExchangeRateViewController
|
|
let amount = "\(String(describing: self.exchangeRateData!.currentRate!))"
|
|
if let countryIndex = returnCountryList().index(of: countryListTextField.text!){
|
|
if let countryId = self.agentCountryList[countryIndex].countryId,let flagUrl = self.agentCountryList[countryIndex].flagUrl{
|
|
exchangeRateData = ["toAmountAndUnit":amount,
|
|
"currencyUnit":currencyListTextField.text!,
|
|
"countryId": countryId,
|
|
"flagUrl": flagUrl,
|
|
"payoutmethodId":self.pId] as [String : Any]
|
|
}
|
|
}
|
|
exchangeRateViewController.exchangeRateData = exchangeRateData
|
|
exchangeRateViewController.transferLimit = transferLimit
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
Setting delegate to views
|
|
*/
|
|
func setTextFieldAndPickerViewDelegate(){
|
|
currencyListTextField.delegate = self
|
|
countryListTextField.delegate = self
|
|
bankListTextField.delegate = self
|
|
pickerView.dataSource = self
|
|
pickerView.delegate = self
|
|
}
|
|
|
|
/**
|
|
Get 1KRW unit value of other currencies
|
|
*/
|
|
func setExchangeRateList(){
|
|
self.exchangeRateData = exchanageRateViewModel.getExchangeRateData()
|
|
if self.exchangeRateData != nil{
|
|
self.hideRateViews(visible: false)
|
|
self.updateExchangeRateUI()
|
|
|
|
}else{
|
|
self.hideRateViews(visible: true)
|
|
}
|
|
}
|
|
|
|
/**
|
|
Update 1KRW unit values with other currencies
|
|
*/
|
|
func updateExchangeRateUI(){
|
|
fromUnitLabel.text = "1 KRW"
|
|
toUnitLabel.text =
|
|
"\(String(describing: self.exchangeRateData!.currentRate!)) \(currencyListTextField.text!)"
|
|
}
|
|
|
|
/**
|
|
Get list of currencies as per the selected bank or cash type
|
|
*/
|
|
func setCurrenciesList(){
|
|
self.currenciesArray = exchanageRateViewModel.getCurrencies()
|
|
if self.currenciesArray.count > 0 {
|
|
self.scrollViewOutlet.isScrollEnabled = true
|
|
hideCurrencyViews(visible: false)
|
|
}else{
|
|
stopLoading()
|
|
hideCurrencyViews(visible: true)
|
|
}
|
|
}
|
|
|
|
/**
|
|
Get bank or cash types as per selected payout mode.
|
|
*/
|
|
func setBankOrCashData(){
|
|
switch self.pId {
|
|
case "1":
|
|
if paymentMethodViewModel.getPayoutCashArray().count > 0 {
|
|
self.cashAgentArray = paymentMethodViewModel.getPayoutCashArray()
|
|
hideBankOrCashViews(visible: false)
|
|
}else{
|
|
hideRateViews(visible: true)
|
|
hideCurrencyViews(visible: true)
|
|
hideBankOrCashViews(visible: true)
|
|
}
|
|
break
|
|
case "2":
|
|
if paymentMethodViewModel.getPayoutBankDetailArray().count > 0{
|
|
self.bankAgentArray = paymentMethodViewModel.getPayoutBankDetailArray()
|
|
hideBankOrCashViews(visible: false)
|
|
}else{
|
|
hideRateViews(visible: true)
|
|
hideCurrencyViews(visible: true)
|
|
hideBankOrCashViews(visible: true)
|
|
}
|
|
break
|
|
case "12":
|
|
if paymentMethodViewModel.getPayoutBankDetailArray().count > 0{
|
|
self.homeDeliveryArray = paymentMethodViewModel.getPayoutBankDetailArray()
|
|
hideBankOrCashViews(visible: false)
|
|
}else{
|
|
hideRateViews(visible: true)
|
|
hideCurrencyViews(visible: true)
|
|
hideBankOrCashViews(visible: true)
|
|
}
|
|
break
|
|
default:
|
|
break
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
Get payout mode as per selected country.
|
|
*/
|
|
func setPayoutModeData(){
|
|
self.payoutModeTypeArray = (self.paymentMethodViewModel.getPayoutMethodArray())
|
|
self.updatePayoutUI(payoutModeArray: self.payoutModeTypeArray)
|
|
}
|
|
|
|
/**
|
|
Get list of country
|
|
*/
|
|
func setAgentCountryList(){
|
|
for country in agentViewModel.getCountryList() {
|
|
if country.countryId != "118"{
|
|
self.agentCountryList.append(country)
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
- parameter payoutModeArray: Update payout mode UI as per payoutMethodId
|
|
*/
|
|
func updatePayoutUI(payoutModeArray: [PayoutMode]){
|
|
for payout in payoutModeArray{
|
|
switch payout.payoutMethodId{
|
|
case "1"?:
|
|
self.items.append("Cash Payment")
|
|
self.images.append("ic_cash")
|
|
case "2"?:
|
|
self.items.append("Bank Deposit")
|
|
self.images.append("ic_bank")
|
|
case "12"?:
|
|
self.items.append("Home Delivery")
|
|
self.images.append("ic_homeDelivery")
|
|
default:
|
|
break
|
|
}
|
|
}
|
|
if self.items.count > 0{
|
|
hidePayoutModeViews(visible: false)
|
|
self.collectionViewOutlet.reloadData()
|
|
}else{
|
|
hidePayoutModeViews(visible: true)
|
|
}
|
|
}
|
|
|
|
/**
|
|
Remove previous data to store new data
|
|
*/
|
|
func clearExistingPayoutArray(){
|
|
self.payoutModeTypeArray.removeAll()
|
|
self.items.removeAll()
|
|
self.images.removeAll()
|
|
}
|
|
|
|
/**
|
|
Visible bank and cash types only if data available
|
|
*/
|
|
func hideBankOrCashViews(visible: Bool){
|
|
if visible == true{
|
|
self.bankConstraint.constant = 0
|
|
self.bankListTextField.isHidden = visible
|
|
self.bankListTitleOutlet.isHidden = visible
|
|
}else{
|
|
self.bankConstraint.constant = 43
|
|
self.bankListTextField.isHidden = visible
|
|
self.bankListTitleOutlet.isHidden = visible
|
|
}
|
|
}
|
|
|
|
/**
|
|
Visible payout modes only if payout mode is available
|
|
*/
|
|
func hidePayoutModeViews(visible: Bool){
|
|
self.collectionViewOutlet.isHidden = visible
|
|
self.selectPayoutModeTitleOutlet.isHidden = visible
|
|
}
|
|
|
|
/**
|
|
Visible currency list only if currency is available
|
|
*/
|
|
func hideCurrencyViews(visible: Bool){
|
|
self.currencySelected = nil
|
|
self.currencyListTextField.text = ""
|
|
self.currencyListTextField.isHidden = visible
|
|
self.currencyTitleLabel.isHidden = visible
|
|
}
|
|
|
|
/**
|
|
Visible unit conversion view only if data is available
|
|
*/
|
|
func hideRateViews(visible: Bool){
|
|
self.fromUnitLabel.isHidden = visible
|
|
self.toUnitLabel.isHidden = visible
|
|
self.rateTitleViewOutlet.isHidden = visible
|
|
self.arrowIconViewOutlet.isHidden = visible
|
|
self.calculateButtonOutlet.isHidden = visible
|
|
}
|
|
|
|
/**
|
|
-returns: List of country with whom GME is tag with
|
|
*/
|
|
func returnCountryList() -> [String]{
|
|
var countryList = [String]()
|
|
if agentCountryList.count>0{
|
|
for country in agentCountryList{
|
|
if let countryName = country.country{
|
|
countryList.append(countryName)
|
|
}
|
|
}
|
|
}
|
|
return countryList
|
|
}
|
|
|
|
/**
|
|
- returns: List of currency
|
|
*/
|
|
func returnCurrencyList() -> [String]{
|
|
var currencyList = [String]()
|
|
if self.currenciesArray.count>0{
|
|
for currency in currenciesArray{
|
|
if let currency = currency.name{
|
|
currencyList.append(currency)
|
|
}
|
|
}
|
|
}
|
|
return currencyList
|
|
}
|
|
|
|
/**
|
|
-parameter payoutId: cash,bank or home delivery
|
|
|
|
-returns: array list of agent as per bank, cash or home depending upon payoutId
|
|
*/
|
|
func returnBankName(payoutId: String) -> [String]{
|
|
var bankList = [String]()
|
|
switch payoutId {
|
|
case "1":
|
|
self.payoutIdGlobal = "1"
|
|
if cashAgentArray.count>0{
|
|
for cash in cashAgentArray{
|
|
if let cashName = cash.name{
|
|
bankList.append(cashName)
|
|
}
|
|
}
|
|
}
|
|
case "2":
|
|
self.payoutIdGlobal = "2"
|
|
if bankAgentArray.count>0{
|
|
for bank in bankAgentArray{
|
|
if let bankName = bank.name{
|
|
bankList.append(bankName)
|
|
}
|
|
}
|
|
}
|
|
case "12":
|
|
self.payoutIdGlobal = "12"
|
|
if homeDeliveryArray.count>0{
|
|
for home in homeDeliveryArray{
|
|
if let homeDelivery = home.name{
|
|
bankList.append(homeDelivery)
|
|
}
|
|
}
|
|
}
|
|
default:
|
|
break
|
|
}
|
|
return bankList
|
|
}
|
|
|
|
/**
|
|
Disable user interaction while fetching data from api
|
|
*/
|
|
func startLoading(){
|
|
self.showActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.disableUserInteractions()
|
|
}
|
|
|
|
/**
|
|
Enable user interaction while fetching data from api
|
|
*/
|
|
func stopLoading(){
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.enableUserInteractions()
|
|
}
|
|
|
|
/**
|
|
|
|
-returns: update list as per payout out type i.e. cash,bank or home.
|
|
*/
|
|
func clickLogic(textFieldType: String){
|
|
switch textFieldType {
|
|
case "countryList":
|
|
if countryListTextField.text != ""{
|
|
if let index = returnCountryList().index(where: { $0 == countryListTextField.text}) {
|
|
self.countryListTextField.inputView = self.pickerView
|
|
self.status = "countryList"
|
|
self.countryListTextField.becomeFirstResponder()
|
|
self.pickerView.selectRow(index, inComponent: 0, animated: true)
|
|
}
|
|
}else{
|
|
self.countryListTextField.inputView = self.pickerView
|
|
self.status = "countryList"
|
|
self.countryListTextField.becomeFirstResponder()
|
|
}
|
|
case "bankList":
|
|
if bankListTextField.text != ""{
|
|
if let id = self.payoutIdGlobal{
|
|
if let index = returnBankName(payoutId: id).index(where: { $0 == bankListTextField.text}) {
|
|
self.bankListTextField.inputView = self.pickerView
|
|
self.status = "bankList"
|
|
self.bankListTextField.becomeFirstResponder()
|
|
self.pickerView.selectRow(index, inComponent: 0, animated: true)
|
|
}
|
|
}
|
|
}else{
|
|
self.bankListTextField.inputView = self.pickerView
|
|
self.status = "bankList"
|
|
self.bankListTextField.becomeFirstResponder()
|
|
}
|
|
break
|
|
case "currencyList":
|
|
if currencyListTextField.text != ""{
|
|
if let index = returnCurrencyList().index(where: { $0 == currencyListTextField.text}) {
|
|
self.currencyListTextField.inputView = self.pickerView
|
|
self.status = "currencyList"
|
|
self.currencyListTextField.becomeFirstResponder()
|
|
self.pickerView.selectRow(index, inComponent: 0, animated: true)
|
|
}
|
|
}else{
|
|
self.currencyListTextField.inputView = self.pickerView
|
|
self.status = "currencyList"
|
|
self.currencyListTextField.becomeFirstResponder()
|
|
}
|
|
default:
|
|
break
|
|
}
|
|
}
|
|
|
|
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
|
return self.items.count
|
|
}
|
|
|
|
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
|
|
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath as IndexPath) as! MyCollectionViewCell
|
|
|
|
cell.myLabel.text = self.items[indexPath.item]
|
|
let imageName = self.images[indexPath.item]
|
|
cell.myImage.image = UIImage(named: imageName)
|
|
|
|
var borderColor: CGColor! = UIColor.clear.cgColor
|
|
var borderWidth: CGFloat = 0
|
|
|
|
if indexPath.row == selectedIndexPath{
|
|
borderColor = UIColor.red.cgColor
|
|
borderWidth = 1 //or whatever you please
|
|
}else{
|
|
borderColor = UIColor.clear.cgColor
|
|
borderWidth = 0
|
|
}
|
|
|
|
cell.viewForBorder.layer.borderWidth = borderWidth
|
|
cell.viewForBorder.layer.borderColor = borderColor
|
|
|
|
return cell
|
|
}
|
|
|
|
|
|
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
|
hideRateViews(visible: true)
|
|
hideCurrencyViews(visible: true)
|
|
hideBankOrCashViews(visible: true)
|
|
self.selectedIndexPath = indexPath.row
|
|
self.collectionViewOutlet.reloadData()
|
|
self.bankListTextField.text = ""
|
|
|
|
if let index = returnCountryList().index(of: countryListTextField.text!){
|
|
if indexPath.row != 2{
|
|
if let countryId = self.agentCountryList[index].countryId, let payoutId = self.payoutModeTypeArray[indexPath.row].payoutMethodId{
|
|
startLoading()
|
|
self.paymentMethodViewModel.fetchPayoutBankDetail(countryId: countryId, payoutMethodId: payoutId)
|
|
let param = ["countryId":countryId,"payoutMethodId":payoutId]
|
|
self.transactionViewModel.fetchTransactionInfo(transactionInfo: param)
|
|
self.pId = payoutId
|
|
}
|
|
}else{
|
|
if let countryId = self.agentCountryList[index].countryId, let payoutId = self.payoutModeTypeArray[indexPath.row].payoutMethodId{
|
|
startLoading()
|
|
let param = ["countryId":countryId,"payoutMethodId":payoutId]
|
|
self.transactionViewModel.fetchTransactionInfo(transactionInfo: param)
|
|
self.pId = payoutId
|
|
var value = [String:String]()
|
|
value["countryId"] = countryId
|
|
value["payoutMethodId"] = payoutId
|
|
|
|
self.hideBankOrCashViews(visible: true)
|
|
exchanageRateViewModel.fetchCurrencies(currencyInfo: value)
|
|
}
|
|
}
|
|
|
|
if indexPath.row == 0{
|
|
bankListTitleOutlet.text = "Agents"
|
|
}else if indexPath.row == 1{
|
|
self.bankListTitleOutlet.text = "Bank Name"
|
|
}else{
|
|
self.bankListTitleOutlet.text = "Agents"
|
|
}
|
|
}
|
|
}
|
|
|
|
//Doing Picker view button
|
|
func pickUp(_ textField : UITextField){
|
|
// UIPickerView
|
|
self.pickerView = UIPickerView(frame:CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 216))
|
|
self.pickerView.delegate = self
|
|
self.pickerView.dataSource = self
|
|
//self.pickerView.backgroundColor = UIColor.white
|
|
textField.inputView = self.pickerView
|
|
|
|
// ToolBar
|
|
let toolBar = UIToolbar()
|
|
toolBar.barStyle = .default
|
|
toolBar.isTranslucent = true
|
|
toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1)
|
|
toolBar.sizeToFit()
|
|
|
|
// Adding Button ToolBar
|
|
let customButton = UIButton()
|
|
customButton.setTitle("Done", for: .normal)
|
|
|
|
var cancel = UIBarButtonItem()
|
|
|
|
if textField == self.countryListTextField{
|
|
customButton.addTarget(self, action: #selector(ExchangeRateMultipleCountryViewController.doneClick), for: .touchUpInside)
|
|
cancel = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(self.cancelClick))
|
|
cancel.tintColor = UIColor.black
|
|
}else if textField == self.bankListTextField{
|
|
customButton.addTarget(self, action: #selector(ExchangeRateMultipleCountryViewController.doneClickBank), for: .touchUpInside)
|
|
cancel = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(self.cancelClickBank))
|
|
cancel.tintColor = UIColor.black
|
|
}else if textField == self.currencyListTextField{
|
|
customButton.addTarget(self, action: #selector(ExchangeRateMultipleCountryViewController.doneClickCurrency), for: .touchUpInside)
|
|
cancel = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(self.cancelClickCurrency))
|
|
cancel.tintColor = UIColor.black
|
|
}
|
|
customButton.setTitleColor(UIColor(hex : 0xED1C24), for: .normal)
|
|
customButton.frame = CGRect(x: 0, y: 0, width: 60, height: 30)
|
|
|
|
let doneButton = UIBarButtonItem(customView: customButton)
|
|
let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
|
|
|
|
toolBar.setItems([cancel,spaceButton, doneButton], animated: false)
|
|
toolBar.isUserInteractionEnabled = true
|
|
textField.inputAccessoryView = toolBar
|
|
|
|
}
|
|
|
|
/**
|
|
Action to close country list pickerview
|
|
*/
|
|
@objc func cancelClick() {
|
|
countryListTextField.resignFirstResponder()
|
|
}
|
|
|
|
/**
|
|
Action to close bank list pickerview
|
|
*/
|
|
@objc func cancelClickBank(){
|
|
bankListTextField.resignFirstResponder()
|
|
}
|
|
|
|
/**
|
|
Action to close currency list pickerview
|
|
*/
|
|
@objc func cancelClickCurrency(){
|
|
currencyListTextField.resignFirstResponder()
|
|
}
|
|
|
|
/**
|
|
User selects a country
|
|
*/
|
|
@objc func doneClick() {
|
|
if let cName = self.countryNameSelected {
|
|
countryListTextField.text = cName
|
|
}else{
|
|
if returnCountryList().count > 0{
|
|
countryListTextField.text = returnCountryList()[0]
|
|
}
|
|
}
|
|
self.scrollViewOutlet.isScrollEnabled = false
|
|
hidePayoutModeViews(visible: true)
|
|
hideRateViews(visible: true)
|
|
hideCurrencyViews(visible: true)
|
|
hideBankOrCashViews(visible: true)
|
|
self.selectedIndexPath = 100
|
|
self.collectionViewOutlet.reloadData()
|
|
self.countryListTextField.resignFirstResponder()
|
|
if let cName = self.countryListTextField.text{
|
|
if let countryIndex = returnCountryList().index(of: cName){
|
|
if let countryId = self.agentCountryList[countryIndex].countryId{
|
|
startLoading()
|
|
clearExistingPayoutArray()
|
|
self.paymentMethodViewModel.fetchCountryPayoutMode(countryId: countryId)
|
|
}
|
|
}
|
|
}
|
|
if let countryIndex = returnCountryList().index(of: countryListTextField.text!){
|
|
if let flagUrl = self.agentCountryList[countryIndex].flagUrl{
|
|
self.downloadImage(url: Foundation.URL(string:flagUrl)!)
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
User selects a bank,cash or home_deliver type
|
|
*/
|
|
@objc func doneClickBank() {
|
|
if let name = self.bankNameSelected{
|
|
if name != ""{
|
|
self.bankListTextField.text = name
|
|
}else {
|
|
setInitialValueWhenDoneIsClickWithScrollingPickerView()
|
|
}
|
|
}else{
|
|
setInitialValueWhenDoneIsClickWithScrollingPickerView()
|
|
}
|
|
self.bankNameSelected = ""
|
|
if self.bankListTextField.text != ""{
|
|
self.requestApiForCurrency()
|
|
}
|
|
self.bankListTextField.resignFirstResponder()
|
|
}
|
|
|
|
/**
|
|
When user click done without scrolling a pickerview
|
|
*/
|
|
func setInitialValueWhenDoneIsClickWithScrollingPickerView(){
|
|
if self.pId == "1"{
|
|
if cashAgentArray.count > 0 {
|
|
self.bankListTextField.text = cashAgentArray[0].name
|
|
}
|
|
}else if self.pId == "2"{
|
|
if bankAgentArray.count > 0 {
|
|
self.bankListTextField.text = bankAgentArray[0].name
|
|
}
|
|
}else if self.pId == "12"{
|
|
if homeDeliveryArray.count > 0 {
|
|
self.bankListTextField.text = homeDeliveryArray[0].name
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
User selects a currency
|
|
*/
|
|
@objc func doneClickCurrency() {
|
|
if let currency = self.currencySelected{
|
|
self.currencyListTextField.text = currency
|
|
}else{
|
|
if returnCurrencyList().count>0{
|
|
self.currencyListTextField.text = returnCurrencyList()[0]
|
|
}
|
|
}
|
|
if self.currencyListTextField.text != ""{
|
|
startLoading()
|
|
self.requestApiForCurrentRate()
|
|
}
|
|
self.currencyListTextField.resignFirstResponder()
|
|
}
|
|
|
|
/**
|
|
Request api for current rate as per 1 KRW unit
|
|
*/
|
|
func requestApiForCurrentRate(){
|
|
if self.setMinimumTransferAmountPerTransaction() != "nil"{
|
|
if let countryIndex = returnCountryList().index(of: countryListTextField.text!){
|
|
if let countryId = self.agentCountryList[countryIndex].countryId{
|
|
let exchangedata = ["from":"KRW",
|
|
"to":currencyListTextField.text ?? "nil",
|
|
"calcBy":"C",
|
|
"cAmt":self.setMinimumTransferAmountPerTransaction(),
|
|
"payoutmethodId":self.pId ,
|
|
"countryId":countryId,
|
|
"sendMoney":false] as [String : Any]
|
|
exchanageRateViewModel.fetchExchangeRate(exchangeData: exchangedata)
|
|
}
|
|
}
|
|
}else{
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
Request an api for list of currency
|
|
*/
|
|
func requestApiForCurrency(){
|
|
self.startLoading()
|
|
var value = [String:String]()
|
|
var payoutId: String = "nil"
|
|
if let countryIndex = returnCountryList().index(of: countryListTextField.text!),
|
|
let paymentIndex = returnBankName(payoutId: self.pId).index(of: bankListTextField.text!) {
|
|
if self.pId == "1"{
|
|
payoutId = self.cashAgentArray[paymentIndex].payoutId
|
|
}else if self.pId == "2"{
|
|
payoutId = self.bankAgentArray[paymentIndex].payoutId
|
|
}else if self.pId == "12"{
|
|
payoutId = self.homeDeliveryArray[paymentIndex].payoutId
|
|
}
|
|
if let countryId = self.agentCountryList[countryIndex].countryId{
|
|
value["countryId"] = countryId
|
|
if payoutId != "nil"{
|
|
value["paymentLocationId"] = payoutId
|
|
if self.pId != "nil"{
|
|
value["payoutmethodId"] = self.pId
|
|
exchanageRateViewModel.fetchCurrencies(currencyInfo: value)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func getDataFromUrl(url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) {
|
|
URLSession.shared.dataTask(with: url) { data, response, error in
|
|
completion(data, response, error)
|
|
}.resume()
|
|
}
|
|
|
|
/**
|
|
- parameter url: var url to download country flag.
|
|
*/
|
|
func downloadImage(url: URL) {
|
|
getDataFromUrl(url: url) { data, response, error in
|
|
guard let data = data, error == nil else { return }
|
|
|
|
DispatchQueue.main.async() {
|
|
let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
|
|
self.imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
|
|
let image = UIImage(data: data)
|
|
self.imageView?.center = paddingView.center
|
|
self.imageView?.image = image
|
|
paddingView.addSubview(self.imageView!)
|
|
|
|
self.countryListTextField.leftViewMode = UITextFieldViewMode.always
|
|
self.countryListTextField.leftView = paddingView
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension ExchangeRateMultipleCountryViewController: UIPickerViewDataSource, UIPickerViewDelegate {
|
|
|
|
func numberOfComponents(in pickerView: UIPickerView) -> Int {
|
|
return 1
|
|
}
|
|
/**
|
|
Function to display Flag image with country Name
|
|
- parameter textField: selected textField
|
|
- parameter url: Image url
|
|
- parameter index: index of image and country
|
|
*/
|
|
func showCountryWithFlag(textField: UITextField, url: String, index: Int) {
|
|
|
|
let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
|
|
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
|
|
|
|
imageView.center = paddingView.center
|
|
|
|
if let flagUrl = URL(string: url) {
|
|
|
|
imageView.sd_setImage(with: flagUrl, placeholderImage: #imageLiteral(resourceName: "gme-logo"), options: [.progressiveDownload,.scaleDownLargeImages], completed: nil)
|
|
}
|
|
paddingView.addSubview(imageView)
|
|
|
|
textField.leftViewMode = UITextFieldViewMode.always
|
|
textField.leftView = paddingView
|
|
textField.text = agentCountryList[index].country
|
|
}
|
|
|
|
/**
|
|
Set total number of row
|
|
*/
|
|
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
|
|
if self.status == "countryList"{
|
|
return self.agentCountryList.count
|
|
}
|
|
else if self.status == "bankList"{
|
|
if self.pId == "1"{
|
|
return self.cashAgentArray.count
|
|
}else if self.pId == "2"{
|
|
return self.bankAgentArray.count
|
|
}else if self.pId == "12"{
|
|
return homeDeliveryArray.count
|
|
}
|
|
}
|
|
else if self.status == "currencyList"{
|
|
return currenciesArray.count
|
|
}
|
|
return 0
|
|
}
|
|
|
|
/**
|
|
Set type of data to be shown in pickerview
|
|
*/
|
|
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
|
|
if self.status == "countryList"{
|
|
return self.agentCountryList[row].country
|
|
}else if self.status == "bankList"{
|
|
if self.pId == "1"{
|
|
if cashAgentArray.indices.contains(row){
|
|
if let name = cashAgentArray[row].name{
|
|
return name
|
|
}
|
|
}
|
|
}else if self.pId == "2"{
|
|
if bankAgentArray.indices.contains(row){
|
|
if let name = self.bankAgentArray[row].name{
|
|
return name
|
|
}
|
|
}
|
|
}else if self.pId == "12"{
|
|
if homeDeliveryArray.indices.contains(row){
|
|
if let name = homeDeliveryArray[row].name{
|
|
return name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if self.status == "currencyList"{
|
|
return self.currenciesArray[row].name
|
|
}
|
|
return ""
|
|
}
|
|
|
|
/**
|
|
Select an element from pickerview
|
|
*/
|
|
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
|
|
if self.status == "countryList"{
|
|
if let countryName = self.agentCountryList[row].country{
|
|
self.countryNameSelected = countryName
|
|
}
|
|
}else if self.status == "bankList"{
|
|
if self.pId == "1"{
|
|
if cashAgentArray.indices.contains(row){
|
|
if let name = self.cashAgentArray[row].name{
|
|
self.bankNameSelected = name
|
|
}
|
|
}
|
|
}else if self.pId == "2" {
|
|
if bankAgentArray.indices.contains(row){
|
|
if let name = self.bankAgentArray[row].name{
|
|
self.bankNameSelected = name
|
|
}
|
|
}
|
|
}
|
|
else if self.pId == "12"{
|
|
if homeDeliveryArray.indices.contains(row){
|
|
if let name = homeDeliveryArray[row].name{
|
|
self.bankNameSelected = name
|
|
}
|
|
}
|
|
}
|
|
}else if self.status == "currencyList"{
|
|
self.currencySelected = self.currenciesArray[row].name
|
|
}
|
|
if row <= self.agentCountryList.count{
|
|
if agentCountryList.indices.contains(row){
|
|
if let id = self.agentCountryList[row].countryId {
|
|
self.countryId = id
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
To display image on picker view row
|
|
*/
|
|
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
|
|
var myImageView: UIImageView?
|
|
|
|
let myView = UIView(frame: CGRect(x: 0, y: 0, width: pickerView.bounds.width - 30, height: 60))
|
|
|
|
|
|
if self.status == "countryList"{
|
|
let myLabel = UILabel(frame: CGRect(x: 60, y: 0, width: pickerView.bounds.width - 90, height: 60 ))
|
|
myView.addSubview(myLabel)
|
|
myLabel.text = agentCountryList[row].country
|
|
|
|
myImageView = UIImageView(frame: CGRect(x: 0, y: 15, width: 30, height: 30))
|
|
myImageView?.sd_setImage(with:URL(string: self.agentCountryList[row].flagUrl ?? ""), placeholderImage: nil, options: [.progressiveDownload,.scaleDownLargeImages], completed: nil)
|
|
myView.addSubview(myImageView!)
|
|
|
|
} else if self.status == "bankList" {
|
|
let myLabel = UILabel(frame: CGRect(x: 10, y: 0, width: pickerView.bounds.width - 90, height: 60 ))
|
|
myView.addSubview(myLabel)
|
|
|
|
if self.pId == "1"{
|
|
if cashAgentArray.indices.contains(row){
|
|
if let name = self.cashAgentArray[row].name{
|
|
myLabel.text = name
|
|
}
|
|
}
|
|
}else if self.pId == "2" {
|
|
if bankAgentArray.indices.contains(row){
|
|
if let name = self.bankAgentArray[row].name{
|
|
myLabel.text = name
|
|
}
|
|
}
|
|
}
|
|
else if self.pId == "12"{
|
|
if homeDeliveryArray.indices.contains(row){
|
|
if let name = homeDeliveryArray[row].name{
|
|
myLabel.text = name
|
|
}
|
|
}
|
|
}
|
|
|
|
} else if self.status == "currencyList"{
|
|
let myLabel = UILabel(frame: CGRect(x: 10, y: 0, width: pickerView.bounds.width - 90, height: 60 ))
|
|
myView.addSubview(myLabel)
|
|
|
|
myLabel.text = currenciesArray[row].name
|
|
}
|
|
return myView
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
|
|
return 60
|
|
}
|
|
|
|
}
|
|
|
|
extension ExchangeRateMultipleCountryViewController: UITextFieldDelegate {
|
|
func textFieldDidBeginEditing(_ textField: UITextField) {
|
|
if textField == countryListTextField{
|
|
|
|
if agentCountryList.count > 0 {
|
|
self.pickUp(textField)
|
|
clickLogic(textFieldType: "countryList")
|
|
} else {
|
|
textField.resignFirstResponder()
|
|
popUpMessageInfo(value: 16, title: "Alert", message: "No country List")
|
|
}
|
|
}else if textField == bankListTextField{
|
|
|
|
self.pickUp(textField)
|
|
clickLogic(textFieldType: "bankList")
|
|
}else if textField == currencyListTextField{
|
|
self.pickUp(textField)
|
|
clickLogic(textFieldType: "currencyList")
|
|
}
|
|
}
|
|
|
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
|
|
|
return true
|
|
}
|
|
|
|
|
|
func textFieldDidEndEditing(_ textField: UITextField) {
|
|
|
|
}
|
|
}
|