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