SDK Functions Code Samples

This guide will provide you with guidance on various code samples that you can use to enable various functions that we have in our iOS SDK.

📘

Note:

The code samples shown here are the backend of the program and not including the interface. You can modify the interface as needed when you build your own app.

1. Authentication

You should start with the authentication first when you use our iOS SDK. There are log in and log out functions within authentication.

1.1 Log in

To enable the login function, simply follow the code below:

Code sample:

import UIKit
import RMSCocoapodsLibrary

@available(iOS 13.0, *)
class LoginVC: UIViewController {

    let scope = "rms/pos:read+rms/pos:write";
    let redirectURL =  URL.init(string: "rmssdk://www.rmssdk.com/callback");
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    var activityView = UIActivityIndicatorView(style: .large)
    
    @IBOutlet weak var loginbutton: UIButton!
    override func viewDidLoad() {
        super.viewDidLoad();
        appDelegate.rmsOAuth.allowMissingStateCheck = true;
        let defaults1 = UserDefaults.standard
        if let stringOne = defaults1.string(forKey: "refreshToken") {
            self.showActivityIndicatory();
            loginbutton.isHidden = true;
            appDelegate.rmsOAuth.renewAccessToken(withRefreshToken: stringOne, completionHandler: { result in
            print("result:::::::",result)
            switch result {
            case .success(let (credential, _, _)):
              print("result success refresh:::::::",credential.oauthToken)
                self.activityView.stopAnimating();
                self.activityView.removeFromSuperview();
                self.loginbutton.isHidden = false;
                let defaults = UserDefaults.standard
                defaults.set(credential.oauthToken, forKey: "accessToken");
                if let terminalvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "terminals") as? TerminalVC {
                    self.navigationController?.pushViewController(terminalvc, animated: true)
                }
                
            case .failure(let error):
                self.activityView.stopAnimating();
                self.activityView.removeFromSuperview();
                self.loginbutton.isHidden = false;
                print(error.localizedDescription)
            }
        })
        }
    }
    func showActivityIndicatory() {
       activityView.center = self.view.center
       self.view.addSubview(activityView)
       activityView.startAnimating()
   }
    @IBAction func setAuthorize(_ sender: Any) {
        appDelegate.rmsOAuth.authorize(withCallbackURL:  redirectURL, scope: scope, state: "", completionHandler: { result in
            print("result:::::::",result)
            switch result {
            case .success(let (credential, _, _)):
                // Setting
                let defaults = UserDefaults.standard
                defaults.set(credential.oauthToken, forKey: "accessToken")
                defaults.set(credential.oauthRefreshToken, forKey: "refreshToken")
              // Do your request
                if let terminalvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "terminals") as? TerminalVC {
                    self.navigationController?.pushViewController(terminalvc, animated: true)
                    }
            case .failure(let error):
              print(error.localizedDescription)
            }
        })
    }

}

2. Select the terminal

To enable the terminal selection function, please refer to the code sample below.

Code sample:

func getTerminals() {
        appDelegate.rmsOAuth.client.getTerminalList(completionHandler: { result in
            switch result {
            case .success(let data):
                let response: RMSOAuthResponse = data
             
                let getResponse = response.dataString(encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
                
                if let data = getResponse!.data(using: String.Encoding.utf8) {
                    do {
                        let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any]
                        if let appJson = json!["_embedded"] as? Dictionary<String, Any> {
                            let results: NSArray = appJson["terminals"] as! NSArray
                         self.terminals = results;
                         print("self.terminals::::::",self.terminals);
                         self.terminalList.reloadData();

                            
                            
                        }
                    } catch {
                        print("Something went wrong")
                    }
                }
            case .failure(let error):
              print(error.localizedDescription)
            }
        })

3. Initiate a sale

To enable the sale initiation function, please refer to the code sample below.

Code sample:

@IBAction func saleClicked(_ sender: Any) {
        if amount.text == "0.00" {
            let alert = UIAlertController(title: "", message: "Please Enter Amount", preferredStyle: UIAlertController.Style.alert)
            alert.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default, handler: nil))
            self.present(alert, animated: true, completion: nil)
            return;
        }
        cashbackView.isHidden = true;
        print(((terminal.value(forKey: "_links") as! NSDictionary).value(forKey: "self") as! NSDictionary).value(forKey: "href") as! NSString);
        let terminalURL = ((terminal.value(forKey: "_links") as! NSDictionary).value(forKey: "self") as! NSDictionary).value(forKey: "href") as! NSString;
        let params1 = NSMutableDictionary();
        let finalAmount =  amount.text?.replacingOccurrences(of: ".", with: "");
        params1["amount"] = Int(finalAmount!)
        params1["currency"] = "GBP"
        params1["transactionType"] = "SALE"

        let headers = NSMutableDictionary();
        headers["Accept"] = "*/*"
        headers["Content-Type"] = "application/json"
        headers["Connection"] = "keep-alive"
        appDelegate.rmsOAuth.client.post("\(terminalURL)/transaction", parameters: params1 as! RMSOAuth.Parameters, headers: (headers as! RMSOAuth.Headers), body: nil, completionHandler: { result in
            print("terminal result:::::::",result);
            switch result {
            case .success(let data):
              print("result success datadatadatadata:::::::",data)
                let response: RMSOAuthResponse = data
                //print("data string:::::::::::",data.jsonObject)
                let getResponse = response.dataString(encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
                
                if let data = getResponse!.data(using: String.Encoding.utf8) {
                    do {
                        let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any]
                        print("json::::::::",json!);
                        self.transView.isHidden = false;
                        self.cashbackView.isHidden = true;
                        self.amount.resignFirstResponder();
                        self.cashback.resignFirstResponder();
                        self.updateReceiptStatus(jsonValue: json!)
                    } catch {
                        print("Something went wrong")
                    }
                }
                
               
            case .failure(let error):
              print(error.localizedDescription)
            }
        })
       
    }

4. Initiate a refund

To enable the refund initiation function, please refer to the code sample below.

Code sample:

@IBAction func refundClicked(_ sender: Any) {
        let finalAmount =  Int((amount.text?.replacingOccurrences(of: ".", with: ""))!);
        appDelegate.rmsOAuth.client.CreateTransaction(amount:finalAmount!, currency: "GBP", transactionType: "REFUND", completion: { result in
            switch result {
            case .success(let data):
              print("refundClicked success datadatadatadata:::::::",data)
                let response: RMSOAuthResponse = data
                //print("data string:::::::::::",data.jsonObject)
                let getResponse = response.dataString(encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
                
                if let data = getResponse!.data(using: String.Encoding.utf8) {
                    do {
                        let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any]
                        print("json::::::::",json!);
                        self.transView.isHidden = false;
                        self.cashbackView.isHidden = true;
                        self.amount.resignFirstResponder();
                        self.cashback.resignFirstResponder();
                        self.updateReceiptStatus(jsonValue: json!)
                    } catch {
                        print("Something went wrong")
                    }
                }
                
               
            case .failure(let error):
              print(error.localizedDescription)
            }
        })
    }

5. Initiate a cashback

To enable the cashback initiation function, please refer to the code sample below.

Code sample:

@IBAction func cashbackClicked(_ sender: Any) {
        if amount.text == "0.00" {
            let alert = UIAlertController(title: "", message: "Please Enter Amount", preferredStyle: UIAlertController.Style.alert)
            alert.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default, handler: nil))
            self.present(alert, animated: true, completion: nil)
            return;
        }
        else if cashback.text == "0.00" {
            let alert = UIAlertController(title: "", message: "Please Enter Cashback Amount", preferredStyle: UIAlertController.Style.alert)
            alert.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default, handler: nil))
            self.present(alert, animated: true, completion: nil)
            return;
        }
        transView.isHidden = true;
        print(((terminal.value(forKey: "_links") as! NSDictionary).value(forKey: "self") as! NSDictionary).value(forKey: "href") as! NSString);
        let terminalURL = ((terminal.value(forKey: "_links") as! NSDictionary).value(forKey: "self") as! NSDictionary).value(forKey: "href") as! NSString;
        let params1 = NSMutableDictionary();
        let finalAmount =  amount.text?.replacingOccurrences(of: ".", with: "");
        let cashbackAmount =  cashback.text?.replacingOccurrences(of: ".", with: "");
        params1["amount"] = Int(finalAmount!)
        params1["currency"] = "GBP"
        params1["transactionType"] = "SALE"
        params1["amountCashback"] = Int(cashbackAmount!)
        

        let headers = NSMutableDictionary();
        headers["Accept"] = "*/*"
        headers["Content-Type"] = "application/json"
        headers["Connection"] = "keep-alive"
        appDelegate.rmsOAuth.client.post("\(terminalURL)/transaction", parameters: params1 as! RMSOAuth.Parameters, headers: (headers as! RMSOAuth.Headers), body: nil, completionHandler: { result in
            print("terminal result:::::::",result);
            switch result {
            case .success(let data):
              print("result success datadatadatadata:::::::",data)
                let response: RMSOAuthResponse = data
                //print("data string:::::::::::",data.jsonObject)
                let getResponse = response.dataString(encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
                
                if let data = getResponse!.data(using: String.Encoding.utf8) {
                    do {
                        let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any]
                        print("json::::::::",json!);
                        //print("transURLtransURLtransURLtransURL:: %@",self.transURL!);
                        self.transView.isHidden = true;
                        self.cashbackView.isHidden = false;
                        self.amount.resignFirstResponder();
                        self.cashback.resignFirstResponder();
                        self.updateReceiptStatus(jsonValue: json!)
                    } catch {
                        print("Something went wrong")
                    }
                }
                
               
            case .failure(let error):
              print(error.localizedDescription)
            }
        })
       
    }

6. Cancel transaction

To enable the transaction cancellation function, please refer to the code sample below.

Code sample:

@IBAction func cancelTransaction(_ sender: Any) {
        print("transURL::::: %@",self.transURL!)
        appDelegate.rmsOAuth.client.delete(self.transURL!, completionHandler: { result in
            print("refreshStatus result:::::::",result);
            switch result {
            case .success(let data):
              print("result success datadatadatadata:::::::",data)
                let response: RMSOAuthResponse = data
                //print("data string:::::::::::",data.jsonObject)
                let getResponse = response.dataString(encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
                
                if let data = getResponse!.data(using: String.Encoding.utf8) {
                    do {
                        let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any]
                        print("json refreshStatus::::::::",json!)
                        self.updateReceiptStatus(jsonValue: json!)
                      
                    } catch {
                        print("Something went wrong")
                    }
                }
            case .failure(let error):
              print(error.localizedDescription)
            }
        })
        
    }

7. List/filter transactions and retrieve the transaction's status

You can list/filter the transactions by status, type, and, transaction ID and retrieve the transaction's status. To do that, please refer to the code sample below.

Code sample:

//
//  TransactionList.swift
//  RMSExample
//
//  Created by Developer on 15/11/21.
//
import UIKit
import RMSCocoapodsLibrary

@available(iOS 13.0, *)
class TransactionList: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate {
    
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let barHeight: CGFloat = UIApplication.shared.statusBarFrame.size.height
    var terminal : NSDictionary = [:];
    var transURL : String? = nil;
    private var transactions: NSArray = []
    private var transactionList: UITableView!
    lazy var searchBar:UISearchBar = UISearchBar()
    var isSearch : Bool = false
    var filteredTableData: NSArray = []
    var transactionType : String? = "";
    var transactionStatus : String? = "";
    @IBOutlet weak var sideView: UIView!
    @IBOutlet weak var saleImg: UIImageView!
    @IBOutlet weak var refundImg: UIImageView!
    @IBOutlet weak var successfulImg: UIImageView!
    @IBOutlet weak var referralImg: UIImageView!
    @IBOutlet weak var cancelUserImg: UIImageView!
    @IBOutlet weak var notSuccessImg: UIImageView!
    @IBOutlet weak var cancelPOSImg: UIImageView!
    @IBOutlet weak var revertPOSImg: UIImageView!
    @IBOutlet weak var timeoutImg: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "Transaction List";
        let rightButtonItem = UIBarButtonItem.init(
              title: "Filter",
            style: .done,
              target: self,
            action: #selector(rightButtonAction)
        )

        self.navigationItem.rightBarButtonItem = rightButtonItem
        
        
        let displayWidth: CGFloat = self.view.frame.width
        let displayHeight: CGFloat = self.view.frame.height
        searchBar = UISearchBar(frame: CGRect(x: 0, y: barHeight+44, width: displayWidth, height:44))
        searchBar.searchBarStyle = UISearchBar.Style.default
        searchBar.placeholder = " Search by Transaction Id"
        searchBar.sizeToFit()
        searchBar.isTranslucent = false
        searchBar.backgroundImage = UIImage()
        searchBar.delegate = self
        transactionList = UITableView(frame: CGRect(x: 0, y: barHeight+98, width: displayWidth, height: displayHeight - barHeight-98))
        transactionList.register(TransactionTableCell.self, forCellReuseIdentifier: "MyCell")
        transactionList.dataSource = self
        transactionList.delegate = self
        self.view.addSubview(transactionList)
        self.view.addSubview(searchBar)
        self.getTransactionList();
    }
    func getTransactionList() {
        appDelegate.rmsOAuth.client.getTransactionList(completionHandler: { result in
            print("TransactionList result:::::::",result);
            switch result {
            case .success(let data):
                let response: RMSOAuthResponse = data
                let getResponse = response.dataString(encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))

                if let data = getResponse!.data(using: String.Encoding.utf8) {
                    do {
                        let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any]
                        if let appJson = json!["_embedded"] as? Dictionary<String, Any> {
                            let results: NSArray = appJson["transactions"] as! NSArray
                            print("transaction result:::::",results);
                         self.transactions = results;
                         self.transactionList.reloadData();
                        }

                    } catch {
                        print("Something went wrong")
                    }
                }
            case .failure(let error):
              print(error.localizedDescription)
            }
        })
    }
    @objc func rightButtonAction(sender: UIBarButtonItem) {
        if self.sideView.isHidden {
            self.view.bringSubviewToFront(self.sideView)
            self.sideView.isHidden = false
            searchBar.resignFirstResponder()
            self.title = "Filter";
        }
        else
        {
            self.title = "Transaction List";
            self.sideView.isHidden = true
        }
    }
    func getAmount(amountValue : String) -> String {
        var amountText = amountValue
        let count = amountValue.count
        if count > 2 {
            let deciamlIndex = count - 2
            let suffixAmount = amountValue.suffix(2)
            let prefixAmount = amountValue.prefix(deciamlIndex)
            amountText = NSString.init(format: "%@.%@", prefixAmount as CVarArg,suffixAmount as CVarArg) as String
        }
        return amountText;
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        isSearch ? filteredTableData.count : transactions.count
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        let transaction: NSDictionary = isSearch ? filteredTableData[indexPath.row] as! NSDictionary : transactions[indexPath.row] as! NSDictionary;
        if transaction["finalTransactionAmount"] != nil
        {
            return 170.0
        }
        return 140.0
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//        let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath as IndexPath)
//        cell.textLabel!.text = "\(indexPath.row)"
//        return cell
        
        let transaction: NSDictionary = isSearch ? filteredTableData[indexPath.row] as! NSDictionary : transactions[indexPath.row] as! NSDictionary;
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! TransactionTableCell
        let amountString = transaction["amount"] ?? "";
        let amountText = self.getAmount(amountValue: NSString.init(format: "%@", amountString as! CVarArg) as String)
        if transaction["finalTransactionAmount"] != nil
        {
            let cashbackAmountString = transaction["amountCashback"] ?? "";
            let cashbackAmountText = self.getAmount(amountValue: NSString.init(format: "%@", cashbackAmountString as! CVarArg) as String)
            let finalAmountString = transaction["finalTransactionAmount"] ?? "";
            let finalAmountText = self.getAmount(amountValue: NSString.init(format: "%@", finalAmountString as! CVarArg) as String)
            cell.label.text = "Transaction Amount: \(amountText) GBP\nCashback  Amount: \(cashbackAmountText) GBP\nFinal Transaction Amount: \(finalAmountText) GBP\nTransaction Id: \(transaction.value(forKey: "transactionRefId") as! String)\nTransaction Stage: \(transaction.value(forKey: "transactionStage") as! String)\nTransaction Status: \(transaction.value(forKey: "transactionStatus") as! String)\nTransaction Type: \(transaction.value(forKey: "transactionType") as! String)";
        }
        else
        {
            cell.label.text = "Transaction Amount: \(amountText) GBP\nTransaction Id: \(transaction.value(forKey: "transactionRefId") as! String)\nTransaction Stage: \(transaction.value(forKey: "transactionStage") as! String)\nTransaction Status: \(transaction.value(forKey: "transactionStatus") as! String)\nTransaction Type: \(transaction.value(forKey: "transactionType") as! String)";
        }
        
        return cell
        
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        sideView.isHidden = true;
    }
    
    //MARK: UISearchbar delegate
        func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
            isSearch = true;
            sideView.isHidden = true;
        }
           
        func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
               searchBar.resignFirstResponder()
               isSearch = false
        }
           
        func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
               searchBar.resignFirstResponder()
               isSearch = false
        }
           
        func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
               searchBar.resignFirstResponder()
               isSearch = false
        }
        func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
            if searchText.count == 0 {
                isSearch = false
                self.transactionList.reloadData()
            } else {
                let filterPredicate = NSPredicate(format: "transactionRefId BEGINSWITH[c] %@", searchText)
                filteredTableData = transactions.filtered(using: filterPredicate) as NSArray
              
//                filteredTableData = transactions.filter({ (text) -> Bool in
//                    let tmp: NSString = text as NSString
//                    let range = tmp.range(of: searchText, options: NSString.CompareOptions.caseInsensitive)
//                    return range.location != NSNotFound
//                })
                if(filteredTableData.count == 0){
                    isSearch = false
                } else {
                    isSearch = true
                }
                self.transactionList.reloadData()
            }
        }
    func updateTrasactionType(updateValue: Bool, index: Int) {
        if index == 1 && updateValue{
            self.transactionType = "SALE"
        }
        else if index == 2 && updateValue{
            self.transactionType = "REFUND"
        }
        else if !updateValue{
            self.transactionType = ""
        }
    }
    func updateTrasactionStatus(updateValue: Bool, index: Int) {
        if index == 3 && updateValue{
            self.transactionStatus = "SUCCESSFUL"
        }
        else if index == 4 && updateValue{
            self.transactionStatus = "REFERRAL"
        }
        else if index == 5 && updateValue{
            self.transactionStatus = "CANCELLED_BY_USER"
        }
        else if index == 6 && updateValue{
            self.transactionStatus = "NOT_SUCCESSFUL"
        }
        else if index == 7 && updateValue{
            self.transactionStatus = "CANCELLED_BY_POS"
        }
        else if index == 8 && updateValue{
            self.transactionStatus = "REVERTED_BY_POS"
        }
        else if index == 9 && updateValue{
            self.transactionStatus = "TIMEOUT"
        }
        else if !updateValue{
            self.transactionStatus = ""
        }
    }
    @IBAction func filterButtonCalled(sender: UIButton)
    {
        
        if sender.tag == 1 {
            self.updateTransactionImage(senderimg: saleImg, index: sender.tag)
        }
        else if sender.tag == 2 {
            self.updateTransactionImage(senderimg: refundImg, index: sender.tag)
        }
        else if sender.tag == 3 {
            self.updateStatusImage(senderimg: successfulImg, index: sender.tag)
        }
        else if sender.tag == 4 {
            self.updateStatusImage(senderimg: referralImg, index: sender.tag)
        }
        else if sender.tag == 5 {
            self.updateStatusImage(senderimg: cancelUserImg, index: sender.tag)
        }
        else if sender.tag == 6 {
            self.updateStatusImage(senderimg: notSuccessImg, index: sender.tag)
        }
        else if sender.tag == 7 {
            self.updateStatusImage(senderimg: cancelPOSImg, index: sender.tag)
        }
        else if sender.tag == 8 {
            self.updateStatusImage(senderimg: revertPOSImg, index: sender.tag)
        }
        else if sender.tag == 9 {
            self.updateStatusImage(senderimg: timeoutImg, index: sender.tag)
        }
        
    }
    func updateTransactionType(senderimg: UIImageView, index: Int)  {
        switch index {
        case 1:
            refundImg.image = UIImage(systemName: "square");
            self.transactionType = "SALE"
        case 2:
            saleImg.image = UIImage(systemName: "square");
            self.transactionType = "REFUND"
        default:
            refundImg.image = UIImage(systemName: "square");
            saleImg.image = UIImage(systemName: "square");
            self.transactionType = ""
        }
    }
    func updateTransactionStatus(senderimg: UIImageView, index: Int)  {
        switch index {
        case 3:
            referralImg.image = UIImage(systemName: "square");
            cancelUserImg.image = UIImage(systemName: "square");
            notSuccessImg.image = UIImage(systemName: "square");
            cancelPOSImg.image = UIImage(systemName: "square");
            revertPOSImg.image = UIImage(systemName: "square");
            timeoutImg.image = UIImage(systemName: "square");
            self.transactionStatus = "SUCCESSFUL"
        case 4:
            successfulImg.image = UIImage(systemName: "square");
            cancelUserImg.image = UIImage(systemName: "square");
            notSuccessImg.image = UIImage(systemName: "square");
            cancelPOSImg.image = UIImage(systemName: "square");
            revertPOSImg.image = UIImage(systemName: "square");
            timeoutImg.image = UIImage(systemName: "square");
            self.transactionStatus = "REFERRAL"
        case 5:
            referralImg.image = UIImage(systemName: "square");
            successfulImg.image = UIImage(systemName: "square");
            notSuccessImg.image = UIImage(systemName: "square");
            cancelPOSImg.image = UIImage(systemName: "square");
            revertPOSImg.image = UIImage(systemName: "square");
            timeoutImg.image = UIImage(systemName: "square");
            self.transactionStatus = "CANCELLED_BY_USER"
        case 6:
            referralImg.image = UIImage(systemName: "square");
            cancelUserImg.image = UIImage(systemName: "square");
            successfulImg.image = UIImage(systemName: "square");
            cancelPOSImg.image = UIImage(systemName: "square");
            revertPOSImg.image = UIImage(systemName: "square");
            timeoutImg.image = UIImage(systemName: "square");
            self.transactionStatus = "NOT_SUCCESSFUL"
        case 7:
            referralImg.image = UIImage(systemName: "square");
            cancelUserImg.image = UIImage(systemName: "square");
            notSuccessImg.image = UIImage(systemName: "square");
            successfulImg.image = UIImage(systemName: "square");
            revertPOSImg.image = UIImage(systemName: "square");
            timeoutImg.image = UIImage(systemName: "square");
            self.transactionStatus = "CANCELLED_BY_POS"
        case 8:
            referralImg.image = UIImage(systemName: "square");
            cancelUserImg.image = UIImage(systemName: "square");
            notSuccessImg.image = UIImage(systemName: "square");
            cancelPOSImg.image = UIImage(systemName: "square");
            successfulImg.image = UIImage(systemName: "square");
            timeoutImg.image = UIImage(systemName: "square");
            self.transactionStatus = "REVERTED_BY_POS"
        case 9:
            referralImg.image = UIImage(systemName: "square");
            cancelUserImg.image = UIImage(systemName: "square");
            notSuccessImg.image = UIImage(systemName: "square");
            cancelPOSImg.image = UIImage(systemName: "square");
            revertPOSImg.image = UIImage(systemName: "square");
            successfulImg.image = UIImage(systemName: "square");
            self.transactionStatus = "TIMEOUT"
        default:
            successfulImg.image = UIImage(systemName: "square");
            referralImg.image = UIImage(systemName: "square");
            cancelUserImg.image = UIImage(systemName: "square");
            notSuccessImg.image = UIImage(systemName: "square");
            cancelPOSImg.image = UIImage(systemName: "square");
            revertPOSImg.image = UIImage(systemName: "square");
            timeoutImg.image = UIImage(systemName: "square");
            self.transactionStatus = ""
        }
    }
    func updateTransactionImage(senderimg: UIImageView, index: Int){
        if (senderimg.image?.isEqual(UIImage(systemName: "square")))! {
            senderimg.image = UIImage(systemName: "checkmark.square.fill");
            self.updateTransactionType(senderimg: senderimg, index: index)
        }
        else
        {
            senderimg.image = UIImage(systemName: "square");
            self.transactionType = ""
        }
    }
    func updateStatusImage(senderimg: UIImageView, index: Int){
        if (senderimg.image?.isEqual(UIImage(systemName: "square")))! {
            senderimg.image = UIImage(systemName: "checkmark.square.fill");
            self.updateTransactionStatus(senderimg: senderimg, index: index)
            
        }
        else
        {
            senderimg.image = UIImage(systemName: "square");
            self.transactionStatus = ""
        }
    }
    @IBAction func filterSearchClicked(_ sender: Any) {
        sideView.isHidden = true;
        self.transactions = [];
        self.transactionList.reloadData();
        appDelegate.rmsOAuth.client.getTransactionListByAll(transactionType: self.transactionType!, transactionStage: "", transactionStatus: self.transactionStatus!, parameters: [:], headers: nil, completionHandler: { result in
                switch result {
                case .success(let data):
                    let response: RMSOAuthResponse = data
                    let getResponse = response.dataString(encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
                    print("check getResponse:::::",getResponse as Any)
                    if let data = getResponse!.data(using: String.Encoding.utf8) {
                        do {
                            let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any]
                            if let appJson = json!["_embedded"] as? Dictionary<String, Any> {
                                let results: NSArray = appJson["transactions"] as! NSArray
                                print("transaction result:::::",results);
                             self.transactions = results;
                             self.transactionList.reloadData();
                            }

                        } catch {
                            print("Something went wrong")
                        }
                    }
                case .failure(let error):
                  print(error.localizedDescription)
                }
            })
        
        
    }
    @IBAction func filterResetClicked(_ sender: Any) {
        saleImg.image = UIImage(systemName: "square");
        refundImg.image = UIImage(systemName: "square");
        successfulImg.image = UIImage(systemName: "square");
        referralImg.image = UIImage(systemName: "square");
        cancelUserImg.image = UIImage(systemName: "square");
        notSuccessImg.image = UIImage(systemName: "square");
        cancelPOSImg.image = UIImage(systemName: "square");
        revertPOSImg.image = UIImage(systemName: "square");
        timeoutImg.image = UIImage(systemName: "square");
        sideView.isHidden = true;
        self.getTransactionList();
        
    }
    
}


class TransactionTableCell: UITableViewCell {
    var label = UILabel()
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        contentView.backgroundColor = .white
        contentView.layer.masksToBounds = true
        contentView.layer.borderColor = UIColor.gray.cgColor
        contentView.layer.borderWidth = 0.5
        label = UILabel(frame: CGRect(x: 10, y: 0, width: 400, height: 160))
        //label.center = CGPoint(x: 160, y: 40)
        label.textAlignment = .left
        label.numberOfLines = 7
        label.font = UIFont.systemFont(ofSize: 18.0)
        label.backgroundColor = .white
        label.text = "-"
       
        contentView.addSubview(label)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

8. View all transactions

To enable view all transactions functions, please refer to the code sample below.

Code sample:

@IBAction func transactionListCalled(_ sender: Any) {
        reportUpdate.isHidden = true;
        if let transactionListVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "transactionList") as? TransactionList {
            transactionListVC.terminal = terminal;
            self.navigationController?.pushViewController(transactionListVC, animated: true)
        }
    }

9. Start an XBAL and ZBAL Report

To enable the XBAL and ZBAL report generator function, please refer to the code sample below.

Code sample:

@IBAction func reportXBAL(_ sender: Any) {
        reportUpdate.isHidden = true;
        appDelegate.rmsOAuth.client.requestReportByType(type: "XBAL", completionHandler: { result in
            print("TransactionList result:::::::",result);
            switch result {
            case .success( _):
                self.reportUpdate.isHidden = false;
                self.reportUpdate.text = "XBAL Report created successfully"
            case .failure(let error):
              print(error.localizedDescription)
            }
        })
    }
    
    @IBAction func reportZBAL(_ sender: Any) {
        reportUpdate.isHidden = true;
        appDelegate.rmsOAuth.client.requestReportByType(type: "ZBAL", completionHandler: { result in
            print("TransactionList result:::::::",result);
            switch result {
            case .success( _):
                self.reportUpdate.isHidden = false;
                self.reportUpdate.text = "ZBAL Report created successfully"
            case .failure(let error):
              print(error.localizedDescription)
            }
        })
    }
    
    @IBAction func reportEOD(_ sender: Any) {
        reportUpdate.isHidden = true;
        appDelegate.rmsOAuth.client.requestReportByType(type: "EOD", completionHandler: { result in
            print("TransactionList result:::::::",result);
            switch result {
            case .success( _):
                self.reportUpdate.isHidden = false;
                self.reportUpdate.text = "EOD Report created successfully"
            case .failure(let error):
              print(error.localizedDescription)
            }
        })
    }

💬 We're here to help!

If you're looking for help, shoot us an email. Please include a description of the issues that you are running into.