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.
 
 
 
 

218 lines
8.2 KiB

//
// TrackTransactionViewController.swift
// GMERemittance
//
// Created by Fm-user on 2/6/18.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class TrackTransactionViewController: UIViewController {
var recipient: Recipient?
var colorCodeRed: CGFloat?
var colorCodeGreen: CGFloat?
var colorCodeBlue: CGFloat?
@IBOutlet weak var labelRecipientName: UILabel!
@IBOutlet weak var labelRecipientPhone: UILabel!
@IBOutlet weak var labelRecipientInitial: UILabel!
@IBOutlet weak var tableViewTransactionDetails: UITableView!
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
private var tracktransactionviewmodel = TrackTransactionViewModel()
private var selectedIndex: Int!
public static var checkTransactionListConnectionTimeOut = 0
override func viewDidAppear(_ animated: Bool) {
setUpAnotherLoginListener(genericviewmodel: tracktransactionviewmodel)
}
override func viewDidLoad() {
super.viewDidLoad()
setUpNavBar(id: 201,title: "Track Your Transfer")
tableViewTransactionDetails.tableFooterView = UIView()
guard recipient != nil else {
self.popUpMessageInfo(value: 16, title: "No data received", message: "Try again")
return
}
setRecipientDetailData()
tableViewTransactionDetails.delegate = self
tableViewTransactionDetails.dataSource = self
tableViewTransactionDetails.isHidden = true
tableViewTransactionDetails.estimatedRowHeight = 80
tableViewTransactionDetails.rowHeight = UITableViewAutomaticDimension
tracktransactionviewmodel.transactionListConnectionTimeOut.value = nil
/**
connection timeout
*/
tracktransactionviewmodel.transactionListConnectionTimeOut.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
if TrackTransactionViewController.checkTransactionListConnectionTimeOut == 0{
TrackTransactionViewController.checkTransactionListConnectionTimeOut = TrackTransactionViewController.checkTransactionListConnectionTimeOut + 1
self.popUpMessage(value: 46)
}
}
/**
Check internet connection
*/
tracktransactionviewmodel.internetConnection.value = nil
tracktransactionviewmodel.internetConnection.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
self.popUpMessage(value: 15)
}
/**
Request an api for list of transaction commit with the recipient
*/
self.startLoading()
tracktransactionviewmodel.fetchTransactionListForTrackAndWallet(recipientId: recipient!.recipientId, recipientName: "", transactionType: "trackTransfer", startDate: nil, endDate: nil, txPage: nil, txSize: nil)
tracktransactionviewmodel.transactionListObtained.bind{ [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
guard $0! else {
if TrackTransactionViewController.checkTransactionListConnectionTimeOut == 0{
TrackTransactionViewController.checkTransactionListConnectionTimeOut = TrackTransactionViewController.checkTransactionListConnectionTimeOut + 1
self.popUpMessageError(value: 10, message: self.tracktransactionviewmodel.getErrorMessage())
}
return
}
self.stopLoading()
self.updateTransactionsDetailTableView()
}
}
/**
Update table view as per list of transaction commit with the recipient
*/
func updateTransactionsDetailTableView(){
if self.tracktransactionviewmodel.getCount() == 0 {
self.popUpMessageError(value: 10, message: "It seems you have made no transactions yet with this person")
} else {
self.tableViewTransactionDetails.isHidden = false
self.tableViewTransactionDetails.reloadData()
}
}
/**
Display UI with recipient detail data
*/
func setRecipientDetailData(){
if (colorCodeRed == nil || colorCodeBlue == nil || colorCodeGreen == nil) {
labelRecipientInitial.layer.backgroundColor = UIColor.gray.cgColor
} else {
labelRecipientInitial.layer.backgroundColor = UIColor(red: colorCodeRed!, green: colorCodeGreen!, blue: colorCodeBlue!, alpha: 1.0).cgColor
}
if let fullName = recipient?.getFullName(){
labelRecipientName.text = fullName
}
if let mobileNumber = recipient?.mobileNumber{
labelRecipientPhone.text = mobileNumber
}
if let firstName = recipient?.firstName{
labelRecipientInitial.text = firstName.prefix(1).uppercased()
}
labelRecipientInitial.layer.cornerRadius = labelRecipientInitial.frame.height / 2
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "trackStage" {
let trackPhaseViewController = segue.destination as! TrackPhaseViewController
trackPhaseViewController.recipient = self.recipient
trackPhaseViewController.transaction = self.tracktransactionviewmodel.getTransaction(index: selectedIndex)
}
}
/**
Disable user interaction while fetching data from api
*/
func startLoading(){
disableUserInteractions()
showActivityIndicator(activityIndicator: activityIndicator)
}
/**
Enable user interaction after fetching data from api
*/
func stopLoading(){
self.enableUserInteractions()
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
}
}
extension TrackTransactionViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tracktransactionviewmodel.getCount()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "trackTransaction", for: indexPath) as! TrackTransactionTableViewCell
let date = self.tracktransactionviewmodel.getDate(index: indexPath.row)
if date != "N/A"{
cell.labelTransactionDate.text = unixTimeStampToDate(unixTimeStamp: date)
}
let recipientName = self.tracktransactionviewmodel.getRecipient(index: indexPath.row)
if recipientName != "N/A"{
cell.labelTransactionRecipient.text = "To: " + firstWord(text: recipientName)
}
let amount = self.tracktransactionviewmodel.getAmount(index: indexPath.row)
if amount != "N/A"{
cell.labelTransactionAmount.text = self.getCommaAddedAmountString(amountString: amount)
}
let transactionMode = self.tracktransactionviewmodel.getPaymentMethodUpdated(index: indexPath.row)
if transactionMode != "N/A"{
cell.labelTransactionMode.text = transactionMode
}
let transactionId = self.tracktransactionviewmodel.getTransactionId(index: indexPath.row)
if transactionId != "N/A"{
cell.labelTransactionID.text = "Transaction No. " + self.tracktransactionviewmodel.getTransactionId(index: indexPath.row)
}
cell.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor
cell.layer.borderWidth = 5
cell.layer.cornerRadius = 15
cell.clipsToBounds = true
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.selectedIndex = indexPath.row
performSegue(withIdentifier: "trackStage", sender: nil)
}
}