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.
533 lines
19 KiB
533 lines
19 KiB
//
|
|
// AgentBankViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by FMI-12 on 2/2/18.
|
|
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import MapKit
|
|
|
|
class AgentBankViewController: UIViewController {
|
|
|
|
@IBOutlet weak var tableViewAgent: UITableView!
|
|
var selectedCell:Int?
|
|
var isSelect:Bool?
|
|
|
|
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
|
|
private var previousIndex: Int = 0
|
|
private var selectedIndex: Int = 10000
|
|
private var tableRowIndex: Int?
|
|
|
|
/// To get data fron sendmoney agentlocation tap
|
|
var sendMoneyAgentLocationStatus:Bool = false
|
|
var selectedCountry: String = ""
|
|
|
|
@IBOutlet weak var searchTextField: UITextField!
|
|
|
|
private var agentCountryList = [AgentCountryList]()
|
|
private var agentPayoutList = [AgentModel]()
|
|
|
|
var agentCell: AgentTableViewCell?
|
|
|
|
var agentViewModel = AgentViewModel()
|
|
|
|
@IBOutlet weak var bgViewSearchBar: UIView!
|
|
|
|
private var pickerView: UIPickerView = UIPickerView()
|
|
|
|
public static var agentConnectionTimeOutCheck = 0
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
self.tabBarController?.navigationController?.navigationBar.barTintColor = UIColor(hex:0xEC1C24)
|
|
setUpAnotherLoginListener(genericviewmodel: agentViewModel)
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
if sendMoneyAgentLocationStatus {
|
|
setUpNavBar(id: 206, title: "Agent")
|
|
} else {
|
|
setUpNavBar(id: 202,title: "")
|
|
}
|
|
setTextFieldAndPickerViewDelegate()
|
|
setTapListenerInBgView()
|
|
|
|
tableViewAgent.tableFooterView = UIView()
|
|
|
|
self.tableViewAgent.delegate = self
|
|
self.tableViewAgent.dataSource = self
|
|
|
|
self.tableViewAgent.estimatedRowHeight = 119
|
|
self.tableViewAgent.rowHeight = UITableViewAutomaticDimension
|
|
|
|
tableViewAgent.sectionIndexColor = UIColor.darkGray
|
|
tableViewAgent.sectionIndexBackgroundColor = UIColor(hex: 0xe7edf2)
|
|
|
|
|
|
agentViewModel.agentConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
agentViewModel.agentConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.stopLoading()
|
|
if AgentBankViewController.agentConnectionTimeOutCheck == 0{
|
|
AgentBankViewController.agentConnectionTimeOutCheck = AgentBankViewController.agentConnectionTimeOutCheck+1
|
|
self.popUpMessage(value: 40)
|
|
}
|
|
}
|
|
|
|
agentViewModel.internetConnection.value = nil
|
|
|
|
/**
|
|
Internet check
|
|
*/
|
|
|
|
agentViewModel.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 15)
|
|
|
|
}
|
|
/**
|
|
Update the 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()
|
|
}
|
|
startLoading()
|
|
self.agentViewModel.fetchListOfCountry()
|
|
|
|
/**
|
|
Update the agent location
|
|
*/
|
|
agentViewModel.agentLocationBool.bind { [unowned 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.setAgentLocationList()
|
|
}
|
|
}
|
|
|
|
/**
|
|
Add Tap gesture in Search bar
|
|
*/
|
|
func setTapListenerInBgView(){
|
|
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(AgentBankViewController.openPickerView))
|
|
tap.cancelsTouchesInView = false
|
|
bgViewSearchBar.addGestureRecognizer(tap)
|
|
}
|
|
|
|
/**
|
|
To display Picker view
|
|
*/
|
|
@objc func openPickerView(){
|
|
if agentCountryList.count > 0{
|
|
self.setPickerViewRowAsSelected()
|
|
self.searchTextField.becomeFirstResponder()
|
|
}
|
|
}
|
|
|
|
/**
|
|
set the country list
|
|
*/
|
|
func setAgentCountryList(){
|
|
self.agentCountryList = agentViewModel.getCountryList()
|
|
self.requestPayoutList(requestType: "first")
|
|
}
|
|
|
|
/**
|
|
Get Agent location address
|
|
- return: address list
|
|
*/
|
|
func getAgentLocationAddress() -> [String]{
|
|
var agentArray = [String]()
|
|
for agent in agentPayoutList{
|
|
if let address = agent.address{
|
|
agentArray.append(address)
|
|
}
|
|
}
|
|
return agentArray
|
|
}
|
|
|
|
/**
|
|
set the agent location list
|
|
*/
|
|
func setAgentLocationList(){
|
|
self.agentPayoutList = agentViewModel.getAgentLocation()
|
|
if self.agentPayoutList.count > 0{
|
|
self.tableViewAgent.reloadData()
|
|
}else{
|
|
self.popUpMessageError(value: 10, message: "Payout agent is not available in this location.");
|
|
}
|
|
}
|
|
|
|
/**
|
|
Dispaly loading indicator
|
|
*/
|
|
func startLoading(){
|
|
self.showActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.disableUserInteractions()
|
|
}
|
|
|
|
/**
|
|
Hide loading indicator
|
|
*/
|
|
func stopLoading(){
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.enableUserInteractions()
|
|
}
|
|
|
|
/**
|
|
Delegate setup
|
|
*/
|
|
func setTextFieldAndPickerViewDelegate(){
|
|
searchTextField.delegate = self
|
|
searchTextField.delegate = self
|
|
pickerView.dataSource = self
|
|
pickerView.delegate = self
|
|
searchTextField.inputView = pickerView
|
|
}
|
|
|
|
/**
|
|
Get country list
|
|
- returns: country list
|
|
*/
|
|
func getCountryList() -> [String]{
|
|
var countryList = [String]()
|
|
if agentCountryList.count > 0 {
|
|
for country in self.agentCountryList{
|
|
if let countryName = country.country{
|
|
countryList.append(countryName)
|
|
}
|
|
}
|
|
return countryList
|
|
}else{
|
|
|
|
}
|
|
return countryList
|
|
}
|
|
|
|
/**
|
|
Display Picker view
|
|
*/
|
|
@IBAction func dropDownButtonAction(_ sender: Any) {
|
|
if getCountryList().count > 0{
|
|
self.setPickerViewRowAsSelected()
|
|
searchTextField.becomeFirstResponder()
|
|
}else{
|
|
}
|
|
}
|
|
|
|
/**
|
|
Set selected row of country list in picker view
|
|
*/
|
|
func setPickerViewRowAsSelected(){
|
|
if let searchText = searchTextField.text{
|
|
if let index = self.getCountryList().index(of: searchText){
|
|
self.pickerView.selectRow(index, inComponent: 0, animated: true)
|
|
}
|
|
}
|
|
}
|
|
|
|
@IBAction func searchButtonAction(_ sender: Any) {
|
|
if searchTextField.text != ""{
|
|
if self.agentCountryList[getCountryList().index(of: searchTextField.text!)!].countryId != nil{
|
|
self.performSegue(withIdentifier: "agentSuccessViewController", sender: nil)
|
|
}
|
|
}
|
|
else{
|
|
|
|
}
|
|
}
|
|
|
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
|
if segue.identifier == "agentSuccessViewController" {
|
|
let agentSearchViewController = segue.destination as! AgentSearchViewController
|
|
agentSearchViewController.countryId = self.agentCountryList[getCountryList().index(of: searchTextField.text!)!].countryId
|
|
}
|
|
}
|
|
|
|
//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(AgentBankViewController.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)
|
|
|
|
toolBar.setItems([spaceButton, doneButton], animated: false)
|
|
toolBar.isUserInteractionEnabled = true
|
|
textField.inputAccessoryView = toolBar
|
|
|
|
}
|
|
|
|
@objc func doneClick() {
|
|
self.searchTextField.resignFirstResponder()
|
|
if self.selectedIndex != 10000{
|
|
if self.isSelect == true{
|
|
self.isSelect = false
|
|
searchTextField.leftView = nil
|
|
self.requestPayoutList(requestType: "later")
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
request of country list
|
|
- parameter requestType: First(Korea) or later(selected country from picker view)
|
|
*/
|
|
func requestPayoutList(requestType: String){
|
|
startLoading()
|
|
self.agentPayoutList.removeAll()
|
|
if requestType == "later"{
|
|
searchTextField.text = getCountryList()[self.selectedIndex]
|
|
if let flagUrl = agentCountryList[selectedIndex].flagUrl{
|
|
self.downloadImage(url: Foundation.URL(string: flagUrl)!)
|
|
} else {
|
|
|
|
}
|
|
let countryId = self.agentCountryList[getCountryList().index(of: searchTextField.text!)!].countryId
|
|
agentViewModel.fetchAgentLocation(countryId: countryId!)
|
|
}else if requestType == "first"{
|
|
|
|
if !(selectedCountry.isEmpty) {
|
|
selectedCountryFromSendMoney()
|
|
} else {
|
|
if let countryId = self.agentCountryList[getCountryList().index(of: "South Korea")!].countryId,let flagUrl = self.agentCountryList[getCountryList().index(of: "South Korea")!].flagUrl{
|
|
searchTextField.text = self.agentCountryList[getCountryList().index(of: "South Korea")!].country
|
|
self.downloadImage(url: Foundation.URL(string: flagUrl)!)
|
|
agentViewModel.fetchAgentLocation(countryId: countryId)
|
|
}else{
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
To get country Agent List through Sendmoney Page
|
|
*/
|
|
func selectedCountryFromSendMoney(){
|
|
if let countrySelectedId = self.agentCountryList[getCountryList().index(of: selectedCountry)!].countryId, let countrySeletedflagUrl = self.agentCountryList[getCountryList().index(of: selectedCountry)!].flagUrl {
|
|
searchTextField.text = self.agentCountryList[getCountryList().index(of: selectedCountry)!].country
|
|
self.downloadImage(url: Foundation.URL(string:countrySeletedflagUrl)!)
|
|
agentViewModel.fetchAgentLocation(countryId: countrySelectedId)
|
|
}
|
|
}
|
|
|
|
func getDataFromUrl(url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) {
|
|
URLSession.shared.dataTask(with: url) { data, response, error in
|
|
completion(data, response, error)
|
|
}.resume()
|
|
}
|
|
|
|
/**
|
|
To download image through url
|
|
- parameter url: url
|
|
*/
|
|
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: 30, height: 50))
|
|
|
|
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
|
|
let image = UIImage(data: data)
|
|
imageView.center = paddingView.center
|
|
|
|
imageView.image = image
|
|
|
|
paddingView.addSubview(imageView)
|
|
|
|
self.searchTextField.leftViewMode = UITextFieldViewMode.always
|
|
self.searchTextField.leftView = paddingView
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
extension AgentBankViewController: UITableViewDelegate, UITableViewDataSource, AgentTableViewCellDelegate {
|
|
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
|
return agentPayoutList.count
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
|
|
|
self.tableRowIndex = indexPath.row
|
|
|
|
agentCell = tableView.dequeueReusableCell(withIdentifier: "agentCell", for: indexPath) as? AgentTableViewCell
|
|
agentCell?.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor
|
|
agentCell?.layer.borderWidth = 2.5
|
|
agentCell?.layer.cornerRadius = 10
|
|
agentCell?.clipsToBounds = true
|
|
|
|
if let name = agentPayoutList[indexPath.row].name {
|
|
agentCell?.labelBranchName.text = name
|
|
}
|
|
if let address = agentPayoutList[indexPath.row].address {
|
|
agentCell?.labelBranchAddress.text = address
|
|
}
|
|
if let phone = agentPayoutList[indexPath.row].phone{
|
|
agentCell?.buttonPhoneNumber.setTitle(phone, for: UIControlState.normal)
|
|
}else{
|
|
agentCell?.buttonPhoneNumber.setTitle(" ", for: UIControlState.normal)
|
|
}
|
|
agentCell?.buttonMap?.addTarget(self, action:#selector(agentTableViewCellDidTapMap(_:)), for:.touchUpInside)
|
|
return agentCell!
|
|
}
|
|
|
|
@objc func agentTableViewCellDidTapMap(_ sender: AgentTableViewCell) {
|
|
guard let clickedCell = sender.superview?.superview?.superview as? AgentTableViewCell else {
|
|
return
|
|
|
|
}
|
|
let clickedCellIndexPath = tableViewAgent.indexPath(for: clickedCell)
|
|
selectedCell = clickedCellIndexPath?.row
|
|
let storyboard = UIStoryboard.init(name: "RecipientListViewController", bundle: Bundle.main)
|
|
if let agentLocationViewController = storyboard.instantiateViewController(withIdentifier: "agentLocation") as? AgentLocation {
|
|
if let lat = agentPayoutList[self.tableRowIndex!].latitude{
|
|
if let lng = agentPayoutList[self.tableRowIndex!].longitude{
|
|
let latitude = String (lat)
|
|
let longitude = String (lng)
|
|
|
|
agentLocationViewController.latitude = CLLocationDegrees(latitude)
|
|
agentLocationViewController.longitude = CLLocationDegrees(longitude)!
|
|
|
|
self.navigationController!.pushViewController(agentLocationViewController, animated: true)
|
|
}
|
|
}
|
|
else{
|
|
self.popUpMessageInfo(value: 16, title: "Location", message: "Map view is not available.")
|
|
}
|
|
}
|
|
}
|
|
|
|
func sectionIndexTitles(for tableView: UITableView) -> [String]? {
|
|
return ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "#"]
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {
|
|
let tappedIndex = getAgentLocationAddress().index(where: {$0.prefix(1).uppercased() == title})
|
|
if tappedIndex != nil {
|
|
self.previousIndex = tappedIndex!
|
|
tableView.scrollToRow(at: IndexPath(row: tappedIndex!, section: 0), at: UITableViewScrollPosition.top, animated: true)
|
|
|
|
}
|
|
return previousIndex //Previous index is set so that in case when there is no data for selected title, the screen remains at the previous selection title
|
|
}
|
|
}
|
|
|
|
extension AgentBankViewController: UIPickerViewDataSource, UIPickerViewDelegate {
|
|
|
|
func numberOfComponents(in pickerView: UIPickerView) -> Int {
|
|
return 1
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
|
|
return getCountryList().count
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
|
|
return getCountryList()[row]
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
|
|
self.selectedIndex = row
|
|
isSelect = true
|
|
}
|
|
|
|
/**
|
|
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))
|
|
|
|
let myLabel = UILabel(frame: CGRect(x: 60, y: 0, width: pickerView.bounds.width - 90, height: 60 ))
|
|
|
|
myLabel.text = agentCountryList[row].country
|
|
|
|
myView.addSubview(myLabel)
|
|
|
|
|
|
/// Display country flag on pickerview
|
|
|
|
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!)
|
|
|
|
|
|
return myView
|
|
}
|
|
|
|
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
|
|
return 60
|
|
}
|
|
}
|
|
|
|
extension AgentBankViewController: UITextFieldDelegate {
|
|
func textFieldDidBeginEditing(_ textField: UITextField) {
|
|
self.pickUp(textField)
|
|
self.setPickerViewRowAsSelected()
|
|
}
|
|
|
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
|
|
|
return false
|
|
}
|
|
|
|
func textFieldDidEndEditing(_ textField: UITextField) {
|
|
|
|
}
|
|
}
|
|
|