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

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