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.
 
 
 
 

1431 lines
56 KiB

//
// 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..<seviceFeeRanges.count]{
if let serviceChargeRange = serviceCharge.range{
cashRangeArray.append(serviceChargeRange)
}
if let transferFee = serviceCharge.transferFee{
cashFeeArray.append(transferFee)
}
}
}
case paymentMethodIdType.bankMethod.rawValue?:
let seviceFeeRanges = payoutMethod.serviceCharge
if seviceFeeRanges.count > 0{
for serviceCharge in seviceFeeRanges[0..<seviceFeeRanges.count]{
if let serviceChargeRange = serviceCharge.range{
bankRangeArray.append(serviceChargeRange)
}
if let transferFee = serviceCharge.transferFee{
bankFeeArray.append(transferFee)
}
}
}
case paymentMethodIdType.homeMethod.rawValue?:
let seviceFeeRanges = payoutMethod.serviceCharge
if seviceFeeRanges.count > 0{
for serviceCharge in seviceFeeRanges[0..<seviceFeeRanges.count]{
if let serviceChargeRange = serviceCharge.range{
homeRangeArray.append(serviceChargeRange)
}
if let transferFee = serviceCharge.transferFee{
homeFeeArray.append(transferFee)
}
}
}
default:
return
}
}
}
/**
Show fee range in pop up dialog
*/
func popUpServiceFeeRange(){
guard let navController = self.navigationController else { return }
let popUpViewController = UIStoryboard(name: "RecipientListViewController", bundle: nil).instantiateViewController(withIdentifier: "rangePopUp") as! PopUpSavingViewController
switch paymentMethodId {
case paymentMethodIdType.cashMethod.rawValue?:
popUpViewController.rangeCount = cashFeeArray.count
if cashFeeArray.count > 0{
for i in 0..<cashFeeArray.count {
switch i {
case 0:
let firstRange1 = cashRangeArray[i].split(separator: "-")
let lastrange = firstRange1[1]
popUpViewController.firstRange = "Upto - \(lastrange)"
popUpViewController.firstRangefee = cashFeeArray[i]
case 1:
popUpViewController.secondRange = cashRangeArray[i]
popUpViewController.secondRangefee = cashFeeArray[i]
case 2:
popUpViewController.thirdRange = cashRangeArray[i]
popUpViewController.thirdRangefee = cashFeeArray[i]
default:
return
}
}
}
case paymentMethodIdType.homeMethod.rawValue?:
popUpViewController.rangeCount = homeFeeArray.count
if homeFeeArray.count > 0{
for i in 0..<homeFeeArray.count{
switch i {
case 0:
let firstRange1 = homeRangeArray[i].split(separator: "-")
let lastrange = firstRange1[1]
popUpViewController.firstRange = "Upto - \(lastrange)"
popUpViewController.firstRangefee = homeFeeArray[i]
case 1:
popUpViewController.secondRange = homeRangeArray[i]
popUpViewController.secondRangefee = homeFeeArray[i]
case 2:
popUpViewController.thirdRange = homeRangeArray[i]
popUpViewController.thirdRangefee = homeFeeArray[i]
default:
return
}
}
}
case paymentMethodIdType.bankMethod.rawValue?:
popUpViewController.rangeCount = bankFeeArray.count
if bankFeeArray.count > 0 {
for i in 0..<bankFeeArray.count {
switch i {
case 0:
let firstRange1 = bankRangeArray[i].split(separator: "-")
let lastrange = firstRange1[1]
popUpViewController.firstRange = "Upto - \(lastrange)"
popUpViewController.firstRangefee = bankFeeArray[i]
case 1:
popUpViewController.secondRange = bankRangeArray[i]
popUpViewController.secondRangefee = bankFeeArray[i]
case 2:
popUpViewController.thirdRange = bankRangeArray[i]
popUpViewController.thirdRangefee = bankFeeArray[i]
default:
return
}
}
}
default:
return
}
navController.addChildViewController(popUpViewController)
popUpViewController.view.frame = navController.view.bounds
navController.view.addSubview(popUpViewController.view)
popUpViewController.didMove(toParentViewController: navController)
}
/**
Cash payment method
*/
func cashPaymentMethod(){
self.viewMainCash.isHidden = false
if let recipientCountry = recipient?.country{
labelCashPayment.text = "Cash payment in " + recipientCountry
}
self.viewMainCash.layer.cornerRadius = 10
self.constraintCashPaymentView.constant = 81
viewCashDetail.isHidden = true
}
/**
Set up cash fee
*/
func setupCashFee(){
if self.serviceChargeCashPayment != "nil"{
let serviceFeeCashAmount = NSMutableAttributedString(string: serviceChargeCashPayment)
serviceFeeCashAmount.addAttribute(NSAttributedStringKey.foregroundColor, value: serviceFeeColor, range: NSRange(location:0, length: serviceFeeCashAmount.length))
let displayStringCash = NSMutableAttributedString()
displayStringCash.append(serviceFee)
displayStringCash.append(serviceFeeCashAmount)
labelServiceFeeCash.attributedText = displayStringCash
}
}
/**
Bank payment method
*/
func bankPaymentMethod(){
self.viewMainBank.isHidden = false
if let country = recipient?.country{
labelBankDeposit.text = "Bank deposit in " + country
}
viewMainBank.layer.cornerRadius = 10
constrainBankPaymentView.constant = 81
viewBankDetail.isHidden = true
}
/**
Set up bank fee
*/
func setupbankFee(){
if self.serviceChargeBankPayment != "nil"{
let serviceFeeBankAmount = NSMutableAttributedString(string: serviceChargeBankPayment)
serviceFeeBankAmount.addAttribute(NSAttributedStringKey.foregroundColor, value: serviceFeeColor, range: NSRange(location:0, length: serviceFeeBankAmount.length))
let displayStringBank = NSMutableAttributedString()
displayStringBank.append(serviceFee)
displayStringBank.append(serviceFeeBankAmount)
labelServiceFeeBank.attributedText = displayStringBank
}
}
/**
Home payment method
*/
func homePaymentMethod(){
self.viewMainHomeDelivery.isHidden = false
if let country = recipient?.country{
labelHomeDelivery.text = "Home delivery in " + country
}
viewMainHomeDelivery.layer.cornerRadius = 10
constraintMainHomeDeliveryView.constant = 81
viewHomeDeliveryDetail.isHidden = true
}
func setupHomeFee(){
if self.serviceChargeHomePayment != "nil"{
let serviceFeeHomeAmount = NSMutableAttributedString(string: serviceChargeHomePayment)
serviceFeeHomeAmount.addAttribute(NSAttributedStringKey.foregroundColor, value: serviceFeeColor, range: NSRange(location:0, length: serviceFeeHomeAmount.length))
let displayStringHome = NSMutableAttributedString()
displayStringHome.append(serviceFee)
displayStringHome.append(serviceFeeHomeAmount)
labelServiceFeeHomeDelivery.attributedText = displayStringHome
}
}
/**
Payment section hide
*/
func paymentSectionHide(){
self.viewMainCash.isHidden = true
self.viewMainBank.isHidden = true
self.viewMainHomeDelivery.isHidden = true
constraintCashPaymentView.constant = 0
constrainBankPaymentView.constant = 0
constraintMainHomeDeliveryView.constant = 0
}
/**
Tap action
*/
@IBAction func cashPaymentTap(_ sender: Any) {
bankBranchCondition()
paymentMode = paymentModeType.cashPayment.rawValue
let paymentMethodIdArray = payoutMethodArray.filter{$0.payoutMethodId == "1" || $0.payoutMethodId == "2" || $0.payoutMethodId == "12" }
if paymentMethodIdArray.count == 3{
hideHomeDeliverySection()
hideBankSection()
} else if paymentMethodIdArray.count == 1{
constrainBankPaymentView.constant = 0
}
cashPayment = !cashPayment
if cashPayment == false {
hideCashPaymentSection()
}else{
hideBankSection()
showCashPaymentSection()
paymentMode = paymentModeType.cashPaymentPartner.rawValue
}
textFieldCashBankBranch.text = ""
}
/**
Hide cash payment section
*/
func hideCashPaymentSection(){
var contentInset:UIEdgeInsets = self.scrollView.contentInset
contentInset.bottom = 75
scrollView.contentInset = contentInset
constraintCashPaymentView.constant = 81
viewCashDetail.isHidden = true
viewCash.layer.cornerRadius = 10
cashPayment = false
}
/**
Show cash payment section
*/
func showCashPaymentSection(){
var contentInset:UIEdgeInsets = self.scrollView.contentInset
contentInset.bottom = -75
scrollView.contentInset = contentInset
constraintCashPaymentView.constant = 320
viewCashDetail.isHidden = false
viewCash.layer.cornerRadius = 0
}
/**
Home deliver tap action
*/
@IBAction func homeDeliveryTap(_ sender: Any) {
bankBranchCondition()
paymentMode = paymentModeType.homeDelivery.rawValue
hideBankSection()
hideCashPaymentSection()
homeDelivery = !homeDelivery
if homeDelivery == false {
hideHomeDeliverySection()
}else {
showHomeDeliverySection()
}
}
/**
Home delivery section
*/
func hideHomeDeliverySection(){
var contentInset:UIEdgeInsets = self.scrollView.contentInset
contentInset.bottom = 75
scrollView.contentInset = contentInset
constraintMainHomeDeliveryView.constant = 81
viewHomeDeliveryDetail.isHidden = true
viewHomeDelivery.layer.cornerRadius = 10
homeDelivery = false
}
/**
Show home delivery section
*/
func showHomeDeliverySection(){
var contentInset:UIEdgeInsets = self.scrollView.contentInset
contentInset.bottom = -75
scrollView.contentInset = contentInset
constraintMainHomeDeliveryView.constant = 490
viewHomeDeliveryDetail.isHidden = false
viewHomeDelivery.layer.cornerRadius = 0
}
/**
Bank payment tap
*/
@IBAction func bankPaymentTap(_ sender: Any) {
bankIdReferenceValue = 0
bankBranchCondition()
hideCashPaymentSection()
paymentMode = paymentModeType.bankPayment.rawValue
let paymentMethodIdArray = payoutMethodArray.filter{$0.payoutMethodId == "1" || $0.payoutMethodId == "2" || $0.payoutMethodId == "12" }
if paymentMethodIdArray.count == 3{
hideHomeDeliverySection()
hideCashPaymentSection()
} else if paymentMethodIdArray.count == 1{
constraintCashPaymentView.constant = 0
}
bankPayment = !bankPayment
if bankPayment == false {
hideBankSection()
} else {
startLoading()
showbankSection()
if let countryId = recipient?.countryId{
self.paymentviewmodel.fetchPayoutBankDetail(countryId: countryId, payoutMethodId: "2")
}
}
}
/**
Hide bank section
*/
func hideBankSection() {
var contentInset:UIEdgeInsets = self.scrollView.contentInset
contentInset.bottom = 75
scrollView.contentInset = contentInset
constrainBankPaymentView.constant = 81
viewBankDetail.isHidden = true
buttonSave.isHidden = true
viewBank.layer.cornerRadius = 10
bankPayment = false
}
/**
Show bank section
*/
func showbankSection(){
var contentInset:UIEdgeInsets = self.scrollView.contentInset
contentInset.bottom = -75
scrollView.contentInset = contentInset
constrainBankPaymentView.constant = 420
viewBankDetail.isHidden = false
buttonSave.isHidden = false
viewBank.layer.cornerRadius = 0
}
/**
Bank branch condition
*/
func bankBranchCondition(){
viewCashBankBranch.isHidden = false
textFieldCashPartner.text = ""
viewBankBranch.isHidden = false
textFieldBankName.text = ""
textFieldBankBranch.text = ""
tableViewAutoComplete.isHidden = true
activeTextField?.resignFirstResponder()
}
/**
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)
customButton.addTarget(self, action: #selector(doneClick), for: .touchUpInside)
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)
let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelClick))
cancelButton.tintColor = UIColor.black
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.isUserInteractionEnabled = true
textField.inputAccessoryView = toolBar
}
/**
Picker view done click
*/
@objc func doneClick() {
//Added Guard block to prevent crash
guard pickerData.count > 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
}
}
}