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.
342 lines
12 KiB
342 lines
12 KiB
//
|
|
// MoneyRequestViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by Sujal on 3/2/18.
|
|
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class MoneyRequestViewController: UIViewController {
|
|
|
|
@IBOutlet weak var tableView: UITableView!
|
|
|
|
var moneyRequests: [Transaction]?
|
|
static var notificationCode: String = ""
|
|
|
|
private var tracktransactionviewmodel: TrackTransactionViewModel?
|
|
private var moneyrequestviewmodel = MoneyRequestViewModel()
|
|
|
|
private var tappedIndex: Int!
|
|
|
|
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
|
|
|
|
public var fromNotification: Int?
|
|
|
|
public static var moneyTransactionListConnectionTimeOut = 0
|
|
|
|
/**
|
|
Check internet connection
|
|
*/
|
|
func setUpNetworkListenerTransaction() {
|
|
self.tracktransactionviewmodel?.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.tracktransactionviewmodel?.internetConnection.value = nil
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 15)
|
|
}
|
|
}
|
|
|
|
/**
|
|
Check internet connection
|
|
*/
|
|
func setUpNetworkListenerMoneyRequest() {
|
|
self.tracktransactionviewmodel?.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.tracktransactionviewmodel?.internetConnection.value = nil
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 15)
|
|
}
|
|
self.moneyrequestviewmodel.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.moneyrequestviewmodel.internetConnection.value = nil
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.popUpMessage(value: 15)
|
|
}
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
|
|
super.viewDidLoad()
|
|
if MoneyRequestViewController.notificationCode == "p201" {
|
|
setUpNavBar(id: 208, title: "Wallet to Wallet Transfer")
|
|
} else {
|
|
setUpNavBar(id: 204, title: "Wallet to Wallet Transfer")
|
|
}
|
|
|
|
tracktransactionviewmodel?.transactionListConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
tracktransactionviewmodel?.transactionListConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.stopLoading()
|
|
if self.fromNotification != 0{
|
|
if MoneyRequestViewController.moneyTransactionListConnectionTimeOut == 0{
|
|
MoneyRequestViewController.moneyTransactionListConnectionTimeOut = MoneyRequestViewController.moneyTransactionListConnectionTimeOut+1
|
|
self.popUpMessage(value: 35)
|
|
}
|
|
}
|
|
}
|
|
|
|
moneyrequestviewmodel.moneyRequestConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
moneyrequestviewmodel.moneyRequestConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.stopLoading()
|
|
self.popUpMessage(value: 20)
|
|
}
|
|
|
|
|
|
if moneyRequests == nil {
|
|
tracktransactionviewmodel = TrackTransactionViewModel()
|
|
|
|
setUpAnotherLoginListener(genericviewmodel: tracktransactionviewmodel!)
|
|
|
|
setUpTransactionListener()
|
|
setUpNetworkListenerTransaction()
|
|
|
|
self.startLoading()
|
|
tracktransactionviewmodel!.fetchTransactionListForTrackAndWallet(recipientId: "", recipientName: "", transactionType: "moneyRequest", startDate: nil, endDate: nil, txPage: nil, txSize: nil)
|
|
|
|
} else {
|
|
moneyrequestviewmodel.setMoneyRequests(requests: moneyRequests!)
|
|
}
|
|
|
|
setUpAnotherLoginListener(genericviewmodel: moneyrequestviewmodel)
|
|
setUpNetworkListenerMoneyRequest()
|
|
setUpMoneyRequestRejectListener()
|
|
|
|
self.tableView.tableFooterView = UIView()
|
|
self.tableView.delegate = self
|
|
self.tableView.dataSource = self
|
|
|
|
self.tableView.estimatedRowHeight = 136
|
|
self.tableView.rowHeight = UITableViewAutomaticDimension
|
|
}
|
|
|
|
/**
|
|
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()
|
|
}
|
|
|
|
override func didReceiveMemoryWarning() {
|
|
super.didReceiveMemoryWarning()
|
|
// Dispose of any resources that can be recreated.
|
|
}
|
|
|
|
|
|
/**
|
|
Api request to fetch transaction list for track and wallet
|
|
*/
|
|
func setUpTransactionListener() {
|
|
tracktransactionviewmodel!.transactionListObtained.bind{ [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
|
|
self.stopLoading()
|
|
|
|
guard $0! else {
|
|
|
|
//self.popUpMessageError(value: 10, message: (self.tracktransactionviewmodel!.getErrorMessage()))
|
|
return
|
|
}
|
|
|
|
self.moneyrequestviewmodel.setMoneyRequests(requests: self.tracktransactionviewmodel!.getTransactions())
|
|
self.tableView.reloadData()
|
|
}
|
|
}
|
|
|
|
/**
|
|
Api request to remove money request
|
|
*/
|
|
func setUpMoneyRequestRejectListener() {
|
|
moneyrequestviewmodel.requestRejected.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
|
|
self.stopLoading()
|
|
|
|
if !$0! {
|
|
self.popUpMessageError(value: 10, message: self.moneyrequestviewmodel.getErrorMessage())
|
|
} else {
|
|
self.moneyrequestviewmodel.removeMoneyRequest(atIndex: self.tappedIndex)
|
|
self.tableView.deleteRows(at: [IndexPath(item: self.tappedIndex, section: 0)], with: .automatic)
|
|
|
|
}
|
|
self.moneyrequestviewmodel.requestRejected.value = nil
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
extension MoneyRequestViewController: UITableViewDelegate, UITableViewDataSource, MoneyRequestDelegate {
|
|
|
|
func readMessage(_ sender: MoneyRequestTableViewCell) {
|
|
|
|
guard let tappedIndexPath = tableView.indexPath(for: sender) else {
|
|
return
|
|
}
|
|
|
|
guard let navController = self.navigationController else {
|
|
return
|
|
}
|
|
|
|
|
|
if let popUpViewController = UIStoryboard.init(name: "WalletTransfer", bundle: Bundle.main).instantiateViewController(withIdentifier: "walletPopUp") as? WalletPopUpViewController {
|
|
|
|
let moneyRequest = moneyrequestviewmodel.getMoneyRequest(atIndex: tappedIndexPath.row)
|
|
|
|
if let name = moneyRequest.senderName{
|
|
popUpViewController.name = name
|
|
}
|
|
if let date = moneyRequest.date{
|
|
popUpViewController.dateTime = "Message" + " " + "(" + unixTimeStampToDate(unixTimeStamp: date) + ")"
|
|
}
|
|
if let reason = moneyRequest.reason{
|
|
popUpViewController.message = reason
|
|
}
|
|
|
|
navController.addChildViewController(popUpViewController)
|
|
popUpViewController.view.frame = navController.view.bounds
|
|
navController.view.addSubview(popUpViewController.view)
|
|
popUpViewController.didMove(toParentViewController: navController)
|
|
}
|
|
}
|
|
|
|
func acceptRequest(_ sender: MoneyRequestTableViewCell) {
|
|
guard let tappedIndexPath = tableView.indexPath(for: sender) else {
|
|
return
|
|
}
|
|
let storyboard = UIStoryboard.init(name: "WalletTransfer", bundle: Bundle.main)
|
|
if let walletViewController = storyboard.instantiateViewController(withIdentifier: "walletViewController") as? WalletViewController {
|
|
|
|
walletViewController.transaction = moneyrequestviewmodel.getMoneyRequest(atIndex: tappedIndexPath.row)
|
|
|
|
self.navigationController!.pushViewController(walletViewController, animated: true)
|
|
}
|
|
|
|
}
|
|
|
|
func declineRequest(_ sender: MoneyRequestTableViewCell) {
|
|
guard let tappedIndexPath = tableView.indexPath(for: sender) else {
|
|
return
|
|
}
|
|
tappedIndex = tappedIndexPath.row
|
|
displayPasswordDialog(transactionID: moneyrequestviewmodel.getMoneyRequest(atIndex: tappedIndex).transactionId)
|
|
}
|
|
|
|
func displayPasswordDialog(transactionID: String) {
|
|
let alertController = UIAlertController(title: "Enter your login password", message: nil, preferredStyle: .alert)
|
|
|
|
alertController.addTextField { (textField : UITextField!) -> Void in
|
|
textField.placeholder = "Password"
|
|
textField.isSecureTextEntry = true
|
|
textField.tag = 51 //unique identifier set
|
|
textField.delegate = self
|
|
}
|
|
|
|
let confirmAction = UIAlertAction(title: "Confirm", style: .default, handler: {
|
|
alert -> Void in
|
|
|
|
let valueTextField = alertController.textFields![0] as UITextField
|
|
if valueTextField.text != "" {
|
|
self.disableUserInteractions()
|
|
self.showActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.moneyrequestviewmodel.setPassword(password: valueTextField.text!)
|
|
self.moneyrequestviewmodel.rejectRequest(transactionID: transactionID, transferType: "request")
|
|
} else {
|
|
self.popUpMessageInfo(value: 16, title: "Password is missing", message: "Could not complete your request")
|
|
}
|
|
})
|
|
|
|
let cancelAction = UIAlertAction(title: "Cancel", style: .destructive, handler: {
|
|
(action : UIAlertAction!) -> Void in
|
|
|
|
})
|
|
|
|
cancelAction.setValue(UIColor.black, forKey: "titleTextColor")
|
|
confirmAction.setValue(UIColor(hex:0xEC1C24), forKey: "titleTextColor")
|
|
|
|
alertController.addAction(cancelAction)
|
|
alertController.addAction(confirmAction)
|
|
|
|
self.present(alertController, animated: true, completion: nil)
|
|
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
|
|
|
return moneyrequestviewmodel.getMoneyRequests().count
|
|
}
|
|
|
|
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
|
|
|
let moneyRequestCell = tableView.dequeueReusableCell(withIdentifier: "moneyRequestCell", for: indexPath) as? MoneyRequestTableViewCell
|
|
|
|
let moneyRequest = moneyrequestviewmodel.getMoneyRequest(atIndex: indexPath.row)
|
|
|
|
|
|
if let receiverName = moneyRequest.receiverName{
|
|
moneyRequestCell?.labelName.text = receiverName
|
|
}
|
|
if let payoutAmountOriginal = moneyRequest.payoutAmountOriginal{
|
|
moneyRequestCell?.labelAmount.text = getCommaAddedAmountString(amountString: payoutAmountOriginal)
|
|
}
|
|
if let receiverId = moneyRequest.receiverId{
|
|
moneyRequestCell?.labelGMEID.text = receiverId
|
|
}
|
|
if let date = moneyRequest.date{
|
|
moneyRequestCell?.labelDateTime.text = unixTimeStampToDate(unixTimeStamp: date)
|
|
}
|
|
|
|
moneyRequestCell?.labelInitial.text = moneyRequestCell?.labelName.text?.prefix(1).uppercased()
|
|
moneyRequestCell?.labelInitial.backgroundColor = UIColor(hex: 0x92daea)
|
|
|
|
moneyRequestCell?.labelInitial.layer.cornerRadius = (moneyRequestCell?.labelInitial.frame.height)!/2
|
|
|
|
moneyRequestCell?.delegate = self
|
|
|
|
return moneyRequestCell!
|
|
}
|
|
}
|
|
|
|
extension MoneyRequestViewController: UITextFieldDelegate {
|
|
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
|
|
if textField.tag == 51 {
|
|
textField.tag = 0
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
}
|