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.
348 lines
14 KiB
348 lines
14 KiB
//
|
|
// TransactionViewModel.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by Sujal on 1/5/18.
|
|
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
class TransactionViewModel: ModelExtension {
|
|
|
|
var exchangeRateAvailable: Box<Bool?> = Box(nil)
|
|
var transactionInfoAvailable: Box<Bool?> = Box(nil)
|
|
var currencyInfoAvailable: Box<Bool?> = Box(nil)
|
|
var countryInfoAvailable: Box<Bool?> = Box(nil)
|
|
var transactionViewConnectionTimeOut: Box<Bool?> = Box(nil)
|
|
|
|
private var exchangeRate: String?
|
|
private var transferFee: String?
|
|
private var transferLimit: Double = 0.0
|
|
private var transactionLimit: Int = 0
|
|
private var cAmt: String?
|
|
private var pAmt: String?
|
|
private var exchangeRateRefId: String?
|
|
private var agentRefId: String?
|
|
private var from: String?
|
|
private var to: String?
|
|
private var tAmount: String?
|
|
private var rewardPoint: Int = 0
|
|
private var transferDetails: [String: String] = [String: String]()
|
|
private var minimumTransferAmountPerTransaction:String = "nil"
|
|
|
|
var currencyArray = [Currency]()
|
|
var countryArray = [AgentCountryList]()
|
|
|
|
let userId = UserDefaults.standard.object(forKey: "com.gmeremit.username") as? String
|
|
let sourceId = UserDefaults.standard.object(forKey: "com.gmeremit.sourceId") as? String
|
|
|
|
/**
|
|
To get exchange rate
|
|
- parameter exchangeData: exchange rate info
|
|
*/
|
|
func fetchExchangeRate(exchangeData: [String: Any]) {
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
|
|
RestApiMananger.sharedInstance.getExchangeRates(param: exchangeData) { result in
|
|
switch result {
|
|
case let .success(exchangeRateJSON):
|
|
self.exchangeRate = exchangeRateJSON["currentRate"].stringValue
|
|
self.transferFee = exchangeRateJSON["transferFee"].stringValue
|
|
self.cAmt = exchangeRateJSON["cAmt"].stringValue
|
|
self.pAmt = exchangeRateJSON["pAmt"].stringValue
|
|
self.tAmount = exchangeRateJSON["tAmt"].stringValue
|
|
self.exchangeRateRefId = exchangeRateJSON["exchangeRateRefId"].stringValue
|
|
self.agentRefId = exchangeRateJSON["agentRefId"].stringValue
|
|
self.from = exchangeRateJSON["from"].stringValue
|
|
self.to = exchangeRateJSON["to"].stringValue
|
|
self.rewardPoint = exchangeRateJSON["rewardPoint"].intValue
|
|
self.exchangeRateAvailable.value = true
|
|
case let .failure(errorJSON):
|
|
self.setErrorMessage(message: errorJSON["message"].stringValue)
|
|
self.exchangeRateAvailable.value = false
|
|
|
|
case .updateAccessCode:
|
|
RestApiMananger.sharedInstance.updateAccessCode(userId: self.userId!, password: self.getLoginPassword()) {
|
|
result in
|
|
if result != "Error"{
|
|
let uuid = RestApiMananger.sharedInstance.getUUID()
|
|
UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
|
|
self.fetchExchangeRate(exchangeData: exchangeData)
|
|
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.transactionViewConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
To get transaction Information
|
|
- parameter transactionInfo: transactionInfo (country id and paymethod id)
|
|
*/
|
|
func fetchTransactionInfo(transactionInfo: [String: String]) {
|
|
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
RestApiMananger.sharedInstance.getTransactionInfo(param: transactionInfo) { result in
|
|
switch result {
|
|
case let .success(transactionInfoJSON):
|
|
self.transferLimit = transactionInfoJSON["transferLimit"].doubleValue
|
|
self.transactionLimit = transactionInfoJSON["transactionLimit"].intValue
|
|
self.minimumTransferAmountPerTransaction = transactionInfoJSON["minimumTransferAmountPerTransaction"].stringValue
|
|
self.transactionInfoAvailable.value = true
|
|
case let .failure(errorJSON):
|
|
self.setErrorMessage(message: errorJSON["message"].stringValue)
|
|
self.transactionInfoAvailable.value = false
|
|
case .updateAccessCode:
|
|
RestApiMananger.sharedInstance.updateAccessCode(userId: self.userId!, password: self.getLoginPassword()) {
|
|
result in
|
|
if result != "Error"{
|
|
let uuid = RestApiMananger.sharedInstance.getUUID()
|
|
UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
|
|
self.fetchTransactionInfo(transactionInfo: transactionInfo)
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.transactionViewConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
To get currency
|
|
- parameter currencyInfo: currencyInfo (country id , payment method, payout locaiton id)
|
|
*/
|
|
func fetchCurrency(currencyInfo: [String: String]){
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
RestApiMananger.sharedInstance.getCurrency(param: currencyInfo) { result in
|
|
switch result {
|
|
case let .success(currencyJSON):
|
|
for i in 0 ... (currencyJSON.count-1) {
|
|
do {
|
|
let currencyDetail = try JSONDecoder().decode(Currency.self, from: currencyJSON[i].rawData())
|
|
self.currencyArray.append(currencyDetail)
|
|
} catch let err {
|
|
self.setErrorMessage(message: err as! String)
|
|
self.currencyInfoAvailable.value = false
|
|
}
|
|
}
|
|
|
|
self.currencyInfoAvailable.value = true
|
|
case let .failure(errorJSON):
|
|
self.setErrorMessage(message: errorJSON["message"].stringValue)
|
|
self.currencyInfoAvailable.value = false
|
|
case .updateAccessCode:
|
|
RestApiMananger.sharedInstance.updateAccessCode(userId: self.userId!, password: self.getLoginPassword()) {
|
|
result in
|
|
if result != "Error"{
|
|
let uuid = RestApiMananger.sharedInstance.getUUID()
|
|
UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
|
|
self.fetchCurrency(currencyInfo: currencyInfo)
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.transactionViewConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
To get a country detail
|
|
- parameter countryId: country id
|
|
*/
|
|
func fetchCountry(countryId: String){
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
RestApiMananger.sharedInstance.getCountryInfo(countryId: countryId) { result in
|
|
switch result {
|
|
case let .success(countryJSON):
|
|
for i in 0 ... (countryJSON.count-1) {
|
|
do {
|
|
let countryDetail = try JSONDecoder().decode(AgentCountryList.self, from: countryJSON[i].rawData())
|
|
self.countryArray.append(countryDetail)
|
|
} catch {
|
|
self.countryInfoAvailable.value = false
|
|
}
|
|
}
|
|
|
|
self.countryInfoAvailable.value = true
|
|
case let .failure(errorJSON):
|
|
self.setErrorMessage(message: errorJSON["message"].stringValue)
|
|
self.countryInfoAvailable.value = false
|
|
case .updateAccessCode:
|
|
RestApiMananger.sharedInstance.updateAccessCode(userId: self.userId!, password: self.getLoginPassword()) {
|
|
result in
|
|
if result != "Error"{
|
|
let uuid = RestApiMananger.sharedInstance.getUUID()
|
|
UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
|
|
self.fetchCountry(countryId: countryId)
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.transactionViewConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
To get currency list
|
|
- returns: list of currency
|
|
*/
|
|
func getCurrencyArray() -> [Currency]{
|
|
return currencyArray
|
|
}
|
|
|
|
/**
|
|
To get country list
|
|
- returns: list of currency
|
|
*/
|
|
func getCountryDetail() -> [AgentCountryList]{
|
|
return countryArray
|
|
}
|
|
|
|
/**
|
|
To set transfer details
|
|
- parameter transferDetails: transferDetails information
|
|
*/
|
|
func setTransferDetails(transferDetails: [String: String]) {
|
|
self.transferDetails = transferDetails
|
|
}
|
|
|
|
/**
|
|
To get transfer details
|
|
- parameter recipient: recipient info
|
|
- parameter paymentMethodId: payment method id
|
|
- parameter calcBy: calculate by
|
|
- returns: transferDetails
|
|
*/
|
|
func getTransferDetails(recipient: Recipient, paymentMethodId: String, calcBy: String) -> [String: String] {
|
|
transferDetails["sourceId"] = sourceId
|
|
transferDetails["from"] = from
|
|
transferDetails["to"] = to
|
|
transferDetails["reasonId"] = recipient.reasonId
|
|
transferDetails["recipientId"] = recipient.recipientId
|
|
transferDetails["payoutMethodId"] = paymentMethodId
|
|
transferDetails["exRate"] = exchangeRate
|
|
transferDetails["calcBy"] = calcBy
|
|
transferDetails["transferFee"] = transferFee
|
|
transferDetails["cAmount"] = cAmt
|
|
transferDetails["pAmount"] = pAmt
|
|
transferDetails["tAmount"] = tAmount
|
|
transferDetails["userId"] = userId
|
|
transferDetails["agentRefId"] = agentRefId
|
|
transferDetails["countryId"] = recipient.countryId
|
|
return transferDetails
|
|
}
|
|
|
|
/**
|
|
To get transfer details for home delivery
|
|
- parameter recipient: recipient info
|
|
- parameter paymentMethodId: payment method id
|
|
- parameter calcBy: calculate by
|
|
- returns: transferDetails
|
|
*/
|
|
func getTransferDetailsForHomeDelivery(recipient: Recipient, paymentMethodId: String, calcBy: String, homeDetails: [String: String]) -> [String: String] {
|
|
transferDetails["sourceId"] = sourceId
|
|
transferDetails["from"] = from
|
|
transferDetails["to"] = to
|
|
transferDetails["reasonId"] = recipient.reasonId
|
|
transferDetails["recipientId"] = recipient.recipientId
|
|
transferDetails["payoutMethodId"] = paymentMethodId
|
|
transferDetails["exRate"] = exchangeRate
|
|
transferDetails["calcBy"] = calcBy
|
|
transferDetails["transferFee"] = transferFee
|
|
transferDetails["cAmount"] = cAmt
|
|
transferDetails["pAmount"] = pAmt
|
|
transferDetails["tAmount"] = tAmount
|
|
transferDetails["userId"] = userId
|
|
transferDetails["agentRefId"] = agentRefId
|
|
transferDetails["countryId"] = recipient.countryId
|
|
/// stateid is send as body
|
|
transferDetails["updatedState"] = homeDetails["stateId"]
|
|
/// to dispaly state name in view
|
|
transferDetails["updatedStateId"] = homeDetails["state"]
|
|
/// districtid is send as body
|
|
transferDetails["updatedDistrict"] = homeDetails["districtId"]
|
|
/// to display district name in view
|
|
transferDetails["updatedDistrictId"] = homeDetails["district"]
|
|
transferDetails["updatedCity"] = homeDetails["city"]
|
|
transferDetails["updatedAddress"] = homeDetails["address"]
|
|
|
|
return transferDetails
|
|
}
|
|
|
|
|
|
/**
|
|
To get minimun transfer amount per transaction
|
|
- returns: amount
|
|
*/
|
|
func getMinimumTransferAmountPerTransaction() -> String{
|
|
if minimumTransferAmountPerTransaction != "nil"{
|
|
return self.minimumTransferAmountPerTransaction
|
|
}
|
|
return minimumTransferAmountPerTransaction
|
|
}
|
|
|
|
/// - returns: exchange rate
|
|
func getExchangeRate() -> String {
|
|
return exchangeRate ?? "0.0"
|
|
|
|
}
|
|
|
|
/// - returns: transfer fee
|
|
func getTransferFee() -> String {
|
|
return transferFee ?? "0.0"
|
|
}
|
|
|
|
/// - returns: transfer limit
|
|
func getTransferLimit() -> Double {
|
|
return transferLimit
|
|
}
|
|
|
|
/// - returns: transaction limit
|
|
func getTransactionLimit() -> Int{
|
|
return transactionLimit
|
|
}
|
|
|
|
/// - returns: reward point
|
|
func getRewardPoint() -> Int {
|
|
return rewardPoint
|
|
}
|
|
|
|
/// - returns: collection Amount
|
|
func getcAmt() -> String {
|
|
return cAmt ?? "0.0"
|
|
}
|
|
|
|
/// - returns: payment Amount
|
|
func getpAmt() -> String {
|
|
return pAmt ?? "0.0"
|
|
}
|
|
|
|
}
|