// // PaymentMethodViewController.swift // GMERemittance // // Created by Fm-user on 12/25/17. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit class PaymentMethodViewController: UIViewController { @IBOutlet weak var viewMain: UIView! @IBOutlet weak var viewMainCash: UIView! @IBOutlet weak var viewCash: UIView! @IBOutlet weak var viewCashDetail: UIView! @IBOutlet weak var viewCashBankBranch: UIView! @IBOutlet weak var viewMainHomeDelivery: UIView! @IBOutlet weak var viewHomeDeliveryDetail: UIView! @IBOutlet weak var viewHomeDelivery: UIView! @IBOutlet weak var viewMainBank: UIView! @IBOutlet weak var viewBankDetail: UIView! @IBOutlet weak var viewBank: UIView! @IBOutlet weak var viewBankBranch: UIView! @IBOutlet weak var buttonSave: UIButton! @IBOutlet weak var constraintCashPaymentView: NSLayoutConstraint! @IBOutlet weak var constrainBankPaymentView: NSLayoutConstraint! @IBOutlet weak var constraintMainHomeDeliveryView: NSLayoutConstraint! @IBOutlet weak var textFieldCashPartner: UITextField! @IBOutlet weak var textFieldCashBankBranch: UITextField! @IBOutlet weak var textFieldState: UITextField! @IBOutlet weak var textFieldDistrict: UITextField! @IBOutlet weak var textFieldCity: UITextField! @IBOutlet weak var textFieldAddress: UITextField! @IBOutlet weak var textFieldBankName: UITextField! @IBOutlet weak var textFieldBankBranch: UITextField! @IBOutlet weak var textFieldAccountNumber: UITextField! @IBOutlet weak var labelQuestion: UILabel! @IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var labelCashPayment: UILabel! @IBOutlet weak var labelHomeDelivery: UILabel! @IBOutlet weak var labelBankDeposit: UILabel! @IBOutlet weak var labelServiceFeeCash: UILabel! @IBOutlet weak var labelServiceFeeBank: UILabel! @IBOutlet weak var labelServiceFeeHomeDelivery: UILabel! @IBOutlet weak var labelServiceRangeCash: UILabel! @IBOutlet weak var labelServiceRangeBank: UILabel! @IBOutlet weak var labelServiceRangeHome: UILabel! @IBOutlet weak var buttonCashInfoRange: UIButton! @IBOutlet weak var buttonHomeInfoRange: UIButton! @IBOutlet weak var buttonBankInfoRange: UIButton! @IBOutlet weak var tableViewAutoComplete: UITableView! @IBOutlet weak var tableViewConstraint: NSLayoutConstraint! //ADDED for solving multiple dialog issue var networkDialogShown: Bool = false /// used for auto completion var bankBranchAutoCompeletionArray: [String] = [String]() var bankBranchAutoCompeletionList:[String] = [String]() var cellSelected: Int = 0 var recipient: Recipient? static var paymentMethodConnectionCheck = 0 private var paymentviewmodel = PaymentMethodViewModel() private var payoutMethodArray:[PayoutMode] = [PayoutMode]() private var payoutBankDetailArray:[AgentModel] = [AgentModel]() private var payoutCashArray:[AgentModel] = [AgentModel]() private var payoutBankBranchArray:[BankBranch] = [BankBranch]() private var activeTextField: UITextField? private var pickerView = UIPickerView() private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() private var pickerData: [String] = [String]() private var pickerSelecteRow: Int = 0 private var bankArray:[String] = [String]() private var bankCashArray:[String] = [String]() private var bankBranchNameList:[String] = [String]() private var bankBranchArray: [String] = [String]() private var bankBranchList:[String] = [String]() private var cashRangeArray: [String] = [String]() private var cashFeeArray: [String] = [String]() private var homeRangeArray:[String] = [String]() private var homeFeeArray:[String] = [String]() private var bankRangeArray:[String] = [String]() private var bankFeeArray:[String] = [String]() private var stateNameListArray: [String] = [String]() private var stateValueListArray: [String] = [String]() private var districtNameListArray: [String] = [String]() private var districtValueListArray: [String] = [String]() private var selectedIndexFor: [String: Int] = [String: Int]() private var bankIdReferenceValue: Int = 0 private var branchIdReferenceValue: Int = 0 private var branchName = "" private var branchPayoutId = "" private var bottomMargin: CGFloat = 0 private var keyboardHeight: CGFloat = 0 /// To show and hide the section private var cashPayment = false private var bankPayment = false private var homeDelivery = false private var paymentMode: String? private var paymentMethodId: String? private var serviceChargeCashPayment: String = "nil" private var serviceChargeHomePayment: String = "nil" private var serviceChargeBankPayment: String = "nil" private let serviceFeeColor = UIColor(hex:0xec1c24) private let serviceFee = NSMutableAttributedString(string: "Service Fee: ") override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(true) setUpAnotherLoginListener(genericviewmodel: paymentviewmodel) let desiredOffset = CGPoint(x: 0, y: -self.scrollView.contentInset.top) self.scrollView.setContentOffset(desiredOffset, animated: false) textFieldBankBranch.text = "" textFieldAccountNumber.text = "" tableViewAutoComplete.isHidden = true payoutMethodBindCall() } @IBAction func buttomCashRangeInfo(_ sender: Any) { paymentMethodId = paymentMethodIdType.cashMethod.rawValue popUpServiceFeeRange() } @IBAction func buttomHomeRangeInfo(_ sender: Any) { paymentMethodId = paymentMethodIdType.homeMethod.rawValue popUpServiceFeeRange() } @IBAction func buttomBankRangeInfo(_ sender: Any) { paymentMethodId = paymentMethodIdType.bankMethod.rawValue popUpServiceFeeRange() } @IBAction func showExchangeRateCashPayment(_ sender: Any) { if textFieldCashPartner.text == "" || (textFieldCashBankBranch.text?.isBlank)! { if viewCashBankBranch.isHidden == true && (textFieldCashBankBranch.text?.isBlank)! { performSegue(withIdentifier: "exchangeRate", sender: nil) } else { self.popUpMessageError(value: 11, message: "Please fill all the fields") } } else { performSegue(withIdentifier: "exchangeRate", sender: nil) } activeTextField?.resignFirstResponder() } @IBAction func showExchangeRateHomeDelivery(_ sender: Any) { if (textFieldCity.text?.isBlank)! || textFieldState.text == "" || textFieldDistrict.text == "" || (textFieldAddress.text?.isBlank)! { self.popUpMessageError(value: 11, message: "Please fill all the fields") } else { performSegue(withIdentifier: "exchangeRate", sender: nil) } activeTextField?.resignFirstResponder() } @IBAction func showExchangeRate(_ sender: Any) { if textFieldBankName.text == "" || (textFieldAccountNumber.text?.isBlank)! || textFieldBankBranch.text == "" { if viewBankBranch.isHidden == true && textFieldBankBranch.text == "" && !(textFieldAccountNumber.text?.isBlank)! { performSegue(withIdentifier: "exchangeRate", sender: nil) } else { self.popUpMessageError(value: 11, message: "Please fill all the fields.") } } else { if bankBranchAutoCompeletionList.contains(textFieldBankBranch.text!) { performSegue(withIdentifier: "exchangeRate", sender: nil) } else { self.textFieldBankBranch.text = "" if bankBranchAutoCompeletionArray.isEmpty { bankBranchAutoCompeletionArray = bankBranchAutoCompeletionList } self.popUpMessageInfo(value: 16, title: "Invalid Branch Selected", message: "Please select a branch from the list.") } } activeTextField?.resignFirstResponder() } @IBAction func agentLocationTap(_ sender: UITapGestureRecognizer) { let storyboard = UIStoryboard.init(name: "Agent", bundle: Bundle.main) let vController = storyboard.instantiateViewController(withIdentifier: "AgentBankViewController") as! AgentBankViewController vController.sendMoneyAgentLocationStatus = true if let country = recipient?.country{ vController.selectedCountry = country } self.navigationController!.pushViewController(vController, animated: true) } func setUpHeaderMessage() { let recipientColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0) let questionPart1: String = String("How would you like ") var questionPart2: String = String("to pick your money ?") if let country = recipient?.country{ questionPart2 = String(" to pick your money in " + (country) + "?") } let mutableQuestion1 = NSMutableAttributedString(string: questionPart1) let mutableQuestion2 = NSMutableAttributedString(string: questionPart2) var mutableRecipient = NSMutableAttributedString(string: "") if let fullName = recipient?.getFullName(){ mutableRecipient = NSMutableAttributedString(string: (fullName)) } mutableRecipient.addAttribute(NSAttributedStringKey.foregroundColor, value: recipientColor, range: NSRange(location:0, length: mutableRecipient.length)) let mutableQuestion = NSMutableAttributedString() mutableQuestion.append(mutableQuestion1) mutableQuestion.append(mutableRecipient) mutableQuestion.append(mutableQuestion2) labelQuestion.attributedText = mutableQuestion } @objc func keyboardWillShow(notification: NSNotification) { var userInfo = notification.userInfo! var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue keyboardFrame = self.view.convert(keyboardFrame, from: nil) var contentInset:UIEdgeInsets = self.scrollView.contentInset keyboardHeight = keyboardFrame.size.height contentInset.bottom = keyboardHeight + 100.00 scrollView.contentInset = contentInset } @objc func keyboardWillHide(notification: NSNotification) { var contentInset = UIEdgeInsets.zero contentInset.bottom = -75.00 self.scrollView.contentInset = contentInset } @objc func clearKeyboard() { activeTextField?.resignFirstResponder() } override func viewDidLoad() { super.viewDidLoad() setUpNavBar(id: 201, title: "Send Money") tableViewAutoComplete.delegate = self tableViewAutoComplete.dataSource = self scrollView.delegate = self bottomMargin = scrollView.contentInset.bottom selectedIndexFor["district"] = 0 selectedIndexFor["state"] = 0 NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil) startLoading() viewMain.isHidden = true paymentviewmodel.paymentMethodConnectionTimeOut.value = nil /** connection timeout */ paymentviewmodel.paymentMethodConnectionTimeOut.bind { [weak self] in guard $0 != nil else { return } self?.stopLoading() if PaymentMethodViewController.paymentMethodConnectionCheck == 0{ PaymentMethodViewController.paymentMethodConnectionCheck = PaymentMethodViewController.paymentMethodConnectionCheck+1 self?.popUpMessage(value: 20) self?.viewMain.isHidden = true } // self?.viewMain.isHidden = true } /** Check internet connection */ paymentviewmodel.internetConnection.value = nil paymentviewmodel.internetConnection.bind { [unowned self] in guard $0 != nil else { return } self.stopLoading() if !self.networkDialogShown { self.networkDialogShown = true self.popUpMessage(value: 15) self.viewMain.isHidden = true } } guard recipient != nil else { self.popUpMessageError(value: 10, message: "Error getting data") stopLoading() viewMain.isHidden = false return } buttonSave.isHidden = true setUpHeaderMessage() // payoutMethodBindCall() if let countryId = self.recipient?.countryId{ self.paymentviewmodel.fetchCountryPayoutMode(countryId: countryId) } payoutBankBindCall() self.payoutBankBranchBindCall() if let countryId = self.recipient?.countryId{ self.paymentviewmodel.fetchPayoutBankDetail(countryId: countryId, payoutMethodId: "1") } cddListBindCall() fetchStates() if let stateId = self.recipient?.stateId { fetchDistrict(stateId: stateId) } textFieldBankName.delegate = self textFieldBankBranch.delegate = self textFieldAccountNumber.delegate = self textFieldCity.delegate = self textFieldState.delegate = self textFieldDistrict.delegate = self textFieldAddress.delegate = self textFieldCashBankBranch.delegate = self textFieldCashPartner.delegate = self pickerView.delegate = self pickerView.dataSource = self textFieldBankBranch.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor textFieldBankBranch.layer.borderWidth = 1.0 textFieldBankBranch.layer.cornerRadius = 5 textFieldBankName.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor textFieldBankName.layer.borderWidth = 1.0 textFieldBankName.layer.cornerRadius = 5 textFieldAccountNumber.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor textFieldAccountNumber.layer.borderWidth = 1.0 textFieldAccountNumber.layer.cornerRadius = 5 self.textFieldBankBranch.addTarget(self, action: #selector(self.searchRecords(_:)), for: .editingChanged) } @objc func searchRecords(_ textField: UITextField){ bankBranchAutoCompeletionArray.removeAll() if textField.text?.count != 0 { for bankBranch in bankBranchAutoCompeletionList { if let branchToSearch = textField.text { let range = bankBranch.lowercased().range(of:branchToSearch , options: .caseInsensitive, range: nil, locale: nil) if range != nil { self.bankBranchAutoCompeletionArray.append(bankBranch) } } } } else{ for bankBranch in bankBranchAutoCompeletionList { bankBranchAutoCompeletionArray.append(bankBranch) } } tableViewAutoComplete.reloadData() } override func viewWillDisappear(_ animated: Bool) { payoutMethodBindCall() } /** Disable user interaction while fetching data from api */ func startLoading(){ disableUserInteractions() showActivityIndicator(activityIndicator: activityIndicator) } /** Enable user interaction while fetching data from api */ func stopLoading(){ self.dismissActivityIndicator(activityIndicator: self.activityIndicator) self.enableUserInteractions() } func payoutMethodBindCall(){ paymentviewmodel.payoutMethodType.bind{[weak self] in guard $0 != nil else { return } // self?.stopLoading() guard $0! else { self?.popUpMessageError(value: 10, message: (self?.paymentviewmodel.getErrorMessage())!) self?.stopLoading() self?.viewMain.isHidden = true return } self?.payoutMethodArray = (self?.paymentviewmodel.getPayoutMethodArray())! self?.paymentSectionHide() self?.setUpPayoutMethod() self?.stopLoading() self?.viewMain.isHidden = false self?.toGetAmuountRange() } } /** Api request for payout Bank */ func payoutBankBindCall(){ paymentviewmodel.payoutBankAvailable.bind{[weak self] in guard $0 != nil else { return } guard $0! else { // self?.popUpMessageError(value: 10, message: (self?.paymentviewmodel.getErrorMessage())!) self?.stopLoading() self?.viewMain.isHidden = true return } self?.payoutBankDetailArray = (self?.paymentviewmodel.getPayoutBankDetailArray())! self?.bankArray = (self?.payoutBankDetailArray.map{$0.name!})! if self?.paymentviewmodel.getPayoutCashArray() != nil { self?.payoutCashArray = (self?.paymentviewmodel.getPayoutCashArray())! self?.bankCashArray = (self?.payoutCashArray.map{$0.name!})! } self?.stopLoading() self?.paymentviewmodel.payoutBankAvailable.value = nil } } /** Api request to fetch state data */ func fetchStates() { if let countryId = recipient?.countryId{ paymentviewmodel.fetchCDDListFor(cddName: cddCode.Province.rawValue, param: ["countryId": countryId]) } } /** Api request to fetch district data - parameter stateId: Required state id to fetch district value */ func fetchDistrict(stateId: String) { if let countryId = recipient?.countryId{ paymentviewmodel.fetchCDDListFor(cddName: cddCode.District.rawValue, param: [ "countryId": countryId, "provinceId": stateId]) } } /** Api request to cdd List i.e. state and district */ func cddListBindCall(){ paymentviewmodel.cddListAvailable.bind { [weak self] in guard $0 != nil else { return } guard $0! != 0 else { // self?.popUpMessageError(value: 10, message: (self?.paymentviewmodel.getErrorMessage())!) return } // self?.stopLoading() switch $0!{ case 2: if let stateList = self?.paymentviewmodel.getStateList(){ self?.stateNameListArray = stateList } if let stateValueList = self?.paymentviewmodel.getStateValueList(){ self?.stateValueListArray = stateValueList } case 3: if let districtList = self?.paymentviewmodel.getDistrictList(){ self?.districtNameListArray = districtList.map{$0.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)} } if let districtListValue = self?.paymentviewmodel.getDistrictValueList(){ self?.districtValueListArray = districtListValue } default: return } self?.stopLoading() self?.paymentviewmodel.cddListAvailable.value = nil } } /** Api request to fetch payout Bank Branch */ func payoutBankBranchBindCall(){ paymentviewmodel.payoutBankBranchAvailable.bind{[unowned self] in guard $0 != nil else { return } self.stopLoading() guard $0! else { self.popUpMessageError(value: 10, message: (self.paymentviewmodel.getErrorMessage())) self.stopLoading() self.viewMain.isHidden = false return } // to remove branch when bank name selected self.bankBranchAutoCompeletionList.removeAll() self.bankBranchAutoCompeletionArray.removeAll() self.payoutBankBranchArray = (self.paymentviewmodel.getPayoutBankBranchArray()) if self.payoutBankBranchArray.count > 0{ self.bankBranchNameList = (self.payoutBankBranchArray.map{$0.name!}) } if self.payoutBankBranchArray.count > 0 { self.bankBranchArray = (self.payoutBankBranchArray.map{$0.name!}) } self.bankBranchAutoCompeletionArray = (self.payoutBankBranchArray.map{$0.name!}) if self.bankBranchAutoCompeletionArray.count > 0{ for bankBranch in self.bankBranchAutoCompeletionArray { self.bankBranchAutoCompeletionList.append(bankBranch) } } self.tableViewAutoComplete.reloadData() } } /** Set up values as per payout method */ func setUpPayoutMethod(){ for payoutMethod in payoutMethodArray{ switch payoutMethod.payoutMethodId { case paymentMethodIdType.cashMethod.rawValue?: cashPaymentMethod() if payoutMethod.serviceCharge.count > 0 { if let serviceCharge = payoutMethod.serviceCharge[0].transferFee { serviceChargeCashPayment = serviceCharge if payoutMethod.serviceCharge.count > 0{ let firstRange1 = payoutMethod.serviceCharge[0].range!.split(separator: "-") let cashFirstRangeServiceFee = firstRange1[1] labelServiceRangeCash.text = "(Upto \(cashFirstRangeServiceFee )" } labelServiceRangeCash.isHidden = false buttonCashInfoRange.isHidden = false } } else { serviceChargeCashPayment = "N/A" labelServiceRangeCash.isHidden = true buttonCashInfoRange.isHidden = true } setupCashFee() case paymentMethodIdType.bankMethod.rawValue?: bankPaymentMethod() if payoutMethod.serviceCharge.count > 0 { if let serviceCharge = payoutMethod.serviceCharge[0].transferFee { serviceChargeBankPayment = serviceCharge if payoutMethod.serviceCharge.count > 0{ let firstRange1 = payoutMethod.serviceCharge[0].range!.split(separator: "-") let lastpart = firstRange1[1] labelServiceRangeBank.text = "(Upto \(lastpart)" } labelServiceRangeBank.isHidden = false buttonBankInfoRange.isHidden = false } } else { serviceChargeCashPayment = "N/A" labelServiceRangeBank.isHidden = true buttonBankInfoRange.isHidden = true } setupbankFee() case paymentMethodIdType.homeMethod.rawValue?: textFieldState.text = recipient?.state textFieldCity.text = recipient?.city textFieldDistrict.text = recipient?.district textFieldAddress.text = recipient?.address homePaymentMethod() if payoutMethod.serviceCharge.count > 0 { if let serviceCharge = payoutMethod.serviceCharge[0].transferFee { serviceChargeHomePayment = serviceCharge if payoutMethod.serviceCharge.count > 0{ let firstRange1 = payoutMethod.serviceCharge[0].range!.split(separator: "-") let lastpart = firstRange1[1] labelServiceRangeHome.text = "(Upto \(lastpart)" } labelServiceRangeHome.isHidden = false buttonHomeInfoRange.isHidden = false } } else { serviceChargeHomePayment = "N/A" labelServiceRangeHome.isHidden = true buttonHomeInfoRange.isHidden = true } setupHomeFee() default: return } } } /** Get amount range as per payout method id */ func toGetAmuountRange() { for payoutMethod in payoutMethodArray{ switch payoutMethod.payoutMethodId { case paymentMethodIdType.cashMethod.rawValue?: let seviceFeeRanges = payoutMethod.serviceCharge if seviceFeeRanges.count > 0{ for serviceCharge in seviceFeeRanges[0.. 0{ for serviceCharge in seviceFeeRanges[0.. 0{ for serviceCharge in seviceFeeRanges[0.. 0{ for i in 0.. 0{ for i in 0.. 0 { for i in 0.. 0 else { textFieldBankName.resignFirstResponder() return } self.activeTextField?.resignFirstResponder() if activeTextField == textFieldBankName { bankIdReferenceValue = pickerSelecteRow //Clear the branch for the selected bank textFieldBankBranch.text = "" //Fetch the branch for the selected bank if payoutBankDetailArray[pickerSelecteRow].hasBranch! == true { viewBankBranch.isHidden = false constrainBankPaymentView.constant = 420 startLoading() if let country = recipient?.countryId, let payoutId = payoutBankDetailArray[pickerSelecteRow].payoutId{ paymentviewmodel.fetchPayoutBankBranchDetail(countryId: country, payoutId: payoutId) } } else { viewBankBranch.isHidden = true constrainBankPaymentView.constant = 363 viewBankDetail.layer.cornerRadius = 10 } activeTextField!.text = pickerData[pickerSelecteRow] } else if activeTextField == textFieldCashPartner { bankIdReferenceValue = pickerSelecteRow //Resetting the branch for newly selected bank branchIdReferenceValue = 0 textFieldCashBankBranch.text = "" if payoutCashArray[pickerSelecteRow].hasBranch! == true { startLoading() viewCashBankBranch.isHidden = false constraintCashPaymentView.constant = 320 if let country = recipient?.countryId , let payoutId = payoutCashArray[pickerSelecteRow].payoutId{ paymentviewmodel.fetchPayoutBankBranchDetail(countryId: country, payoutId: payoutId) } } else { viewCashBankBranch.isHidden = true constraintCashPaymentView.constant = 243 } activeTextField!.text = pickerData[pickerSelecteRow] } else if activeTextField == textFieldCashBankBranch{ branchIdReferenceValue = pickerSelecteRow activeTextField!.text = pickerData[pickerSelecteRow] } else if activeTextField == textFieldState { textFieldDistrict.text = "" selectedIndexFor["district"] = 0 if pickerData.count > 0{ if let state = selectedIndexFor["state"]{ textFieldState.text = pickerData[state] } } if stateNameListArray.count > 0 { if textFieldState.text != ""{ fetchDistrict(stateId: stateValueListArray[stateNameListArray.index(of: textFieldState.text!)!]) } } startLoading() } else if activeTextField == textFieldDistrict { if pickerData.count > 0 { if let district = selectedIndexFor["district"]{ textFieldDistrict.text = pickerData[district] } } } } /** Cancel click */ @objc func cancelClick(){ activeTextField?.resignFirstResponder() } func setTransactionDetail(bankPayoutIdIndex: Int, branchPayoutIdIndex: Int) -> [String: String]{ var bankTransactionDetail: [String: String]? if paymentMode == paymentModeType.bankPayment.rawValue { bankPaymentBranchEmpty(bankPayoutIdIndex: bankPayoutIdIndex, branchPayoutIdIndex: branchPayoutIdIndex) bankTransactionDetail = ["bankName":payoutBankDetailArray[bankPayoutIdIndex].name, "bankBranch": branchName, "bankId": payoutBankDetailArray[bankPayoutIdIndex].payoutId, "branchId": branchPayoutId, "accountNumber": textFieldAccountNumber.text!] } else if paymentMode == paymentModeType.cashPaymentPartner.rawValue { bankPaymentBranchEmpty(bankPayoutIdIndex: bankPayoutIdIndex, branchPayoutIdIndex: branchPayoutIdIndex) bankTransactionDetail = ["bankName": payoutCashArray[bankPayoutIdIndex].name, "bankId": payoutCashArray[bankPayoutIdIndex].payoutId, "bankBranch": branchName, "branchId": branchPayoutId ] } else if paymentMode == paymentModeType.homeDelivery.rawValue { bankTransactionDetail = ["updatedState": textFieldState.text!, "updatedDistrict": textFieldDistrict.text!, "updatedCity": textFieldCity.text!, "updatedAddress": textFieldAddress.text! ] } return bankTransactionDetail! } /** Bank payment branch empty - parameter bankPayoutIdIndex: bank payout id index - parameter branchPayoutIndex: bank payout index */ func bankPaymentBranchEmpty(bankPayoutIdIndex: Int, branchPayoutIdIndex: Int){ if !payoutBankBranchArray.isEmpty{ branchName = payoutBankBranchArray[branchPayoutIdIndex].name branchPayoutId = payoutBankBranchArray[branchPayoutIdIndex].payoutBranchId } else { branchName = "-" branchPayoutId = "" } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "exchangeRate" { hideBankSection() hideCashPaymentSection() let exchangeRateViewController = segue.destination as! RecipientTranscationViewController exchangeRateViewController.recipient = self.recipient exchangeRateViewController.paymentMode = self.paymentMode if paymentMode != paymentModeType.cashPayment.rawValue { exchangeRateViewController.transferDetails = setTransactionDetail(bankPayoutIdIndex: bankIdReferenceValue, branchPayoutIdIndex: branchIdReferenceValue) } //ADDED FOR HOME-DELIVERY if paymentMode == paymentModeType.homeDelivery.rawValue { //BETTER TO SET THE VALUES IN VIEW MODEL, FOR NOW ITS BEEN DONE IN VIEW CONTROLLER exchangeRateViewController.homeDetails = getHomeDetails() } } } func getHomeDetails() -> [String: String] { var homeDetails = [String: String]() homeDetails["state"] = textFieldState.text if stateNameListArray.count > 0{ if textFieldState.text != ""{ if let index = stateNameListArray.index(of: textFieldState.text!){ homeDetails["stateId"] = stateValueListArray[index] } else { // print("no state") } } } let districtName = (textFieldDistrict.text!).removeSpacesTrailingPreceding() homeDetails["district"] = districtName if districtNameListArray.count > 0{ if textFieldDistrict.text != ""{ if let index = districtNameListArray.index(of: districtName){ homeDetails["districtId"] = districtValueListArray[index] } else { // print("NO district") } } } homeDetails["city"] = textFieldCity.text homeDetails["address"] = textFieldAddress.text return homeDetails } } extension PaymentMethodViewController: UITextFieldDelegate { func textFieldDidBeginEditing(_ textField: UITextField) { activeTextField = textField if textField == textFieldBankName { bankNames(paymentType: paymentModeType.bankPayment.rawValue) self.pickUp(textField) } else if textField == textFieldBankBranch { if textFieldBankName.text != "" { if textField.text != "" { if bankBranchNameList.count > 0 { textField.text = bankBranchAutoCompeletionList[cellSelected] } } tableViewAutoComplete.isHidden = false } else { textField.resignFirstResponder() tableViewAutoComplete.isHidden = true popUpMessageInfo(value: 16, title: "No Bank Name", message: "Please Select the Bank.") } if bankBranchAutoCompeletionList.contains(textFieldBankBranch.text!){ tableViewAutoComplete.isHidden = true } } else if textField == textFieldCashPartner { self.pickUp(textField) bankPartnerName() if textField.text != ""{ self.textFieldCashPartner.inputView = self.pickerView textField.text = pickerData[bankIdReferenceValue] } } else if textField == textFieldCashBankBranch { guard textFieldCashPartner.text != "" else { textField.resignFirstResponder() popUpMessageInfo(value: 16, title: "No Payout Partner Name", message: "Please Select the Payout Partner.") return } self.pickUp(textField) if bankBranchNameList.count != 0 { self.textFieldCashBankBranch.inputView = self.pickerView pickerData = bankBranchNameList pickerView.reloadAllComponents() guard pickerData.count > 0 else { self.popUpMessageInfo(value: 16, title: "Data being fetched", message: "Please wait few moments") return } pickerView.selectRow(branchIdReferenceValue, inComponent: 0, animated: true) } if textField.text != ""{ textField.text = pickerData[branchIdReferenceValue] } } else if textField == textFieldState { self.textFieldState.inputView = self.pickerView self.pickUp(textField) pickerData = stateNameListArray if textFieldState.text != ""{ if let index = pickerData.index(of: textFieldState.text!) { self.selectedIndexFor["state"]! = index pickerView.selectRow(index, inComponent: 0, animated: true) } } }else if textField == textFieldDistrict { self.textFieldDistrict.inputView = self.pickerView self.pickUp(textField) pickerData = districtNameListArray let districtName = (textFieldDistrict.text!).removeSpacesTrailingPreceding() if textFieldDistrict.text != ""{ if let index = pickerData.index(of: districtName){ self.selectedIndexFor["district"]! = index pickerView.selectRow(index, inComponent: 0, animated: true) } } } tableViewAutoComplete.reloadData() } /** Bank names */ func bankNames(paymentType: String){ pickerData = bankArray pickerView.reloadAllComponents() guard pickerData.count > 0 else { textFieldBankName.resignFirstResponder() return } pickerView.selectRow(bankIdReferenceValue, inComponent: 0, animated: true) } /** Bank partner name */ func bankPartnerName(){ pickerData = bankCashArray pickerView.reloadAllComponents() guard pickerData.count > 0 else { textFieldCashPartner.resignFirstResponder() return } pickerView.selectRow(bankIdReferenceValue, inComponent: 0, animated: true) } func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() self.tableViewAutoComplete.isHidden = true return true } func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string) if textField == textFieldAccountNumber { let accountNumber = (textField.text! as NSString).replacingCharacters(in: range, with: string) paymentviewmodel.updateAccountNumber(acNumber: accountNumber) return true } else if textField == textFieldBankBranch { if inputText == "" { tableViewAutoComplete.isHidden = false } return true }else if textField == textFieldAddress || textField == textFieldCity { return true } else { return false } } } extension PaymentMethodViewController: UIPickerViewDataSource, UIPickerViewDelegate { func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return pickerData.count } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return pickerData[row] } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { if activeTextField == textFieldState { selectedIndexFor["state"] = row } else if activeTextField == textFieldDistrict{ selectedIndexFor["district"] = row } else { pickerSelecteRow = row } } } extension PaymentMethodViewController: UITableViewDelegate, UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return bankBranchAutoCompeletionArray.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) cell.textLabel?.text = bankBranchAutoCompeletionArray[indexPath.row] return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { cellSelected = indexPath.row if bankBranchNameList.count > 0{ branchIdReferenceValue = bankBranchNameList.index(of: bankBranchAutoCompeletionList[indexPath.row])! } activeTextField?.text = bankBranchAutoCompeletionArray[indexPath.row] tableViewAutoComplete.isHidden = true } } extension PaymentMethodViewController: UIScrollViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView) { if scrollView.contentOffset.y > (867) { scrollView.isScrollEnabled = false } else { scrollView.isScrollEnabled = true } } }