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

//
// 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) {
}
}