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.
145 lines
5.5 KiB
145 lines
5.5 KiB
//
|
|
// ExchangeViewModel.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by FMI-12 on 2/4/18.
|
|
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
class ExchangeRateViewModel: ModelExtension {
|
|
|
|
var exchangeRateAvailable: Box<Bool?> = Box(nil)
|
|
var currencyInfoAvailable: Box<Bool?> = Box(nil)
|
|
|
|
var exchangeRateConnectionTimeOut: Box<Bool?> = Box(nil)
|
|
|
|
var currenciesData = [CurrenciesData]()
|
|
var exchangeRateData: ExchangeRateData?
|
|
|
|
private var exchangeRate: Float = 0.0
|
|
private var transferLimit: Double = 0.0
|
|
|
|
let userId = UserDefaults.standard.object(forKey: "com.gmeremit.username") as? String
|
|
|
|
/**
|
|
To get currency
|
|
- parameter currencyInfo: currency info
|
|
*/
|
|
func fetchCurrencies(currencyInfo: [String: String]){
|
|
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
self.currenciesData.removeAll()
|
|
RestApiMananger.sharedInstance.getCurrencies(param: currencyInfo) { result in
|
|
switch result {
|
|
case let .success(currencyJSON):
|
|
if currencyJSON.count > 0 {
|
|
for i in 0 ... (currencyJSON.count-1) {
|
|
do {
|
|
let currencyDetail = try JSONDecoder().decode(CurrenciesData.self, from: currencyJSON[i].rawData())
|
|
self.currenciesData.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.fetchCurrencies(currencyInfo: currencyInfo)
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.exchangeRateConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
To get exchange rate
|
|
- parameter exchangeData: exchange data in dictionary[:] datatype
|
|
*/
|
|
func fetchExchangeRate(exchangeData: [String: Any]) {
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
var exchangeRate = ExchangeRateData()
|
|
RestApiMananger.sharedInstance.getExchangeRates(param: exchangeData) { result in
|
|
switch result {
|
|
case let .success(exchangeRateJSON):
|
|
do {
|
|
exchangeRate = try JSONDecoder().decode(ExchangeRateData.self, from: exchangeRateJSON.rawData())
|
|
self.exchangeRateData = exchangeRate
|
|
} catch {
|
|
|
|
self.exchangeRateAvailable.value = false
|
|
}
|
|
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.exchangeRateConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
To get exchange rate
|
|
- returns: ExchangeRateData
|
|
*/
|
|
func getExchangeRateData() -> ExchangeRateData{
|
|
if self.exchangeRateData != nil{
|
|
return self.exchangeRateData!
|
|
}
|
|
return ExchangeRateData()
|
|
}
|
|
|
|
/**
|
|
To get currencies
|
|
- returns: currencies data list
|
|
*/
|
|
func getCurrencies() -> [CurrenciesData]{
|
|
return self.currenciesData
|
|
}
|
|
|
|
/**
|
|
To get currencies exchange rate in terms of KRW
|
|
- parameter krw: krw amount
|
|
- returns: exchange rate
|
|
*/
|
|
func getKRWtoOtherCurrency(krw: Float) -> Float {
|
|
return krw * exchangeRate
|
|
}
|
|
|
|
}
|