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