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.
 
 
 
 

270 lines
11 KiB

//
// WalletTransactionListViewController.swift
// GMERemittance
//
// Created by Sujal on 3/2/18.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class WalletTransactionListViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var walletCell: WalletTransactionTableViewCell?
private var tracktransactionviewmodel = TrackTransactionViewModel()
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
var walletStatus: String?
private var showLoadMoreButton: Bool = false
private var size: String = "10"
private var page: Int = 0
private var arrayIndexPath = [IndexPath] ()
static var notificationCode: String = ""
public static var walletListConnectionTimeOutCheck = 0
/**
Call transaction api
*/
func fetchTransactions() {
self.startLoading()
tracktransactionviewmodel.fetchTransactionListForTrackAndWallet(recipientId: "", recipientName: "", transactionType: walletStatus!, startDate: nil, endDate: nil, txPage: String(page), txSize: size)
}
/**
Check internet connection
*/
func setUpNetworkListener() {
tracktransactionviewmodel.internetConnection.value = nil
tracktransactionviewmodel.internetConnection.bind { [unowned self] in
guard $0 != nil else {
return
}
self.enableUserInteractions()
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
self.popUpMessage(value: 15)
self.tracktransactionviewmodel.internetConnection.value = nil
}
}
/**
Api listener
*/
func setUpTransactionListListener() {
tracktransactionviewmodel.transactionListObtained.bind{ [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
guard $0! else {
if WalletTransactionListViewController.walletListConnectionTimeOutCheck == 0{
WalletTransactionListViewController.walletListConnectionTimeOutCheck = WalletTransactionListViewController.walletListConnectionTimeOutCheck+1
self.popUpMessageError(value: 10, message: self.tracktransactionviewmodel.getErrorMessage())
}
return
}
let count = self.tracktransactionviewmodel.getCount()
if count < Int(self.size)! || count == 0 {
self.showLoadMoreButton = false
if count == 0 {
self.tableView.reloadSections(NSIndexSet(index: 1) as IndexSet, with: .none)
}
} else {
self.showLoadMoreButton = true
}
if count > 0 {
self.arrayIndexPath.removeAll()
self.tableView.beginUpdates()
let totalCount = self.tracktransactionviewmodel.getTotalCount()
for i in 0...count-1 {
self.arrayIndexPath.append(IndexPath.init(row: totalCount - count + i, section: 0))
}
self.tableView.insertRows(at: self.arrayIndexPath, with: .automatic)
self.tableView.endUpdates()
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
if WalletTransactionListViewController.notificationCode == "p202" || WalletTransactionListViewController.notificationCode == "p205"{
setUpNavBar(id: 208, title: "Wallet to Wallet Transfer")
}else {
setUpNavBar(id: 204, title: "Wallet to Wallet Transfer")
}
guard walletStatus != nil else {
return
}
tableView.tableFooterView = UIView()
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.estimatedRowHeight = 82
self.tableView.rowHeight = UITableViewAutomaticDimension
setUpAnotherLoginListener(genericviewmodel: tracktransactionviewmodel)
tracktransactionviewmodel.transactionListConnectionTimeOut.value = nil
/**
connection timeout
*/
print("wallet status \(String(describing: walletStatus))")
tracktransactionviewmodel.transactionListConnectionTimeOut.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
if self.walletStatus != "walletTransfer"{
if self.walletStatus != "walletBorrow"{
if WalletTransactionListViewController.walletListConnectionTimeOutCheck == 0{
WalletTransactionListViewController.walletListConnectionTimeOutCheck = WalletTransactionListViewController.walletListConnectionTimeOutCheck+1
self.popUpMessage(value: 32)
}
}
}
}
setUpNetworkListener()
setUpTransactionListListener()
fetchTransactions()
}
/**
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()
}
}
extension WalletTransactionListViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return tracktransactionviewmodel.getTotalCount()
default:
return 1
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.section {
case 0:
walletCell = tableView.dequeueReusableCell(withIdentifier: "walletCell", for: indexPath) as? WalletTransactionTableViewCell
walletCell?.labelAmount.text = getCommaAddedAmountString(amountString: tracktransactionviewmodel.getAmountForWallet(index: indexPath.row))
if tracktransactionviewmodel.getDateForWallet(index: indexPath.row) != "N/A"{
walletCell?.labelDate.text = unixTimeStampToDate(unixTimeStamp: tracktransactionviewmodel.getDateForWallet(index: indexPath.row))
}
if tracktransactionviewmodel.getRecipientForWallet(index: indexPath.row) != "N/A"{
walletCell?.labelName.text = "To: " + tracktransactionviewmodel.getRecipientForWallet(index: indexPath.row)
}
if tracktransactionviewmodel.getAmountForWallet(index: indexPath.row) != "N/A"{
walletCell?.labelAmount.text = getCommaAddedAmountString(amountString: tracktransactionviewmodel.getAmountForWallet(index: indexPath.row))
}
if tracktransactionviewmodel.getTransactionIdForWallet(index: indexPath.row) != "N/A"{
walletCell?.labelTransactionNumber.text = "Transaction No. " + tracktransactionviewmodel.getTransactionIdForWallet(index: indexPath.row)
}
if tracktransactionviewmodel.getPaymentMethodUpdatedForWallet(index: indexPath.row) != "N/A"{
walletCell?.labelPayoutMethod.text = tracktransactionviewmodel.getPaymentMethodUpdatedForWallet(index: indexPath.row)
}
if walletStatus == "walletBorrow" {
walletCell?.labelName.text = "To: " + tracktransactionviewmodel.getSenderForWallet(index: indexPath.row)
if self.tracktransactionviewmodel.getBorrowStatusForWallet(index: indexPath.row) != "N/A"{
let status = self.tracktransactionviewmodel.getBorrowStatusForWallet(index: indexPath.row)
if status != "N/A"{
walletCell?.labelStatus.text = status.capitalizeFirstLetter()
switch status.lowercased() {
case "paid":
walletCell?.labelAmount.textColor = UIColor(hex: 0x2e3192)
walletCell?.labelStatus.textColor = UIColor.white
walletCell?.labelStatus.backgroundColor = UIColor(hex: 0xec1c24)
walletCell?.labelStatus.clipsToBounds = true
walletCell?.labelStatus.layer.cornerRadius = 5.0
case "rejected":
walletCell?.labelAmount.textColor = UIColor(hex: 0xec1c24)
walletCell?.labelStatus.textColor = UIColor(hex: 0xec1c24)
walletCell?.labelStatus.backgroundColor = UIColor(hex: 0xd6e3ee)
walletCell?.labelStatus.clipsToBounds = true
walletCell?.labelStatus.layer.cornerRadius = 5.0
case "pending":
walletCell?.labelAmount.textColor = UIColor(hex: 0x4a4a4a)
walletCell?.labelStatus.textColor = UIColor.white
walletCell?.labelStatus.backgroundColor = UIColor(hex: 0x2e3192)
walletCell?.labelStatus.clipsToBounds = true
walletCell?.labelStatus.layer.cornerRadius = 5.0
default:
walletCell?.labelAmount.isHidden = true
walletCell?.labelStatus.isHidden = true
}
}
}
}
else {
walletCell?.labelStatus.isHidden = true
walletCell?.labelAmount.textColor = UIColor(hex: 0xec1c24)
}
return walletCell!
default:
let loadMoreCell = tableView.dequeueReusableCell(withIdentifier: "walletLoadMore", for: indexPath) as! WalletLoadMoreTableViewCell
loadMoreCell.buttonLoadMore.addTarget(self, action: #selector(loadMore(sender:)), for: .touchUpInside)
if showLoadMoreButton {
loadMoreCell.buttonLoadMore.isHidden = false
}
return loadMoreCell
}
}
@objc func loadMore(sender: WalletLoadMoreTableViewCell) {
page = page + 1
fetchTransactions()
}
}