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

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