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

6 years ago
  1. //
  2. // ExchangeViewModel.swift
  3. // GMERemittance
  4. //
  5. // Created by FMI-12 on 2/4/18.
  6. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import Foundation
  9. class ExchangeRateViewModel: ModelExtension {
  10. var exchangeRateAvailable: Box<Bool?> = Box(nil)
  11. var currencyInfoAvailable: Box<Bool?> = Box(nil)
  12. var exchangeRateConnectionTimeOut: Box<Bool?> = Box(nil)
  13. var currenciesData = [CurrenciesData]()
  14. var exchangeRateData: ExchangeRateData?
  15. private var exchangeRate: Float = 0.0
  16. private var transferLimit: Double = 0.0
  17. let userId = UserDefaults.standard.object(forKey: "com.gmeremit.username") as? String
  18. /**
  19. To get currency
  20. - parameter currencyInfo: currency info
  21. */
  22. func fetchCurrencies(currencyInfo: [String: String]){
  23. if !Reachability.isConnectedToNetwork() {
  24. self.internetConnection.value = false
  25. } else {
  26. self.currenciesData.removeAll()
  27. RestApiMananger.sharedInstance.getCurrencies(param: currencyInfo) { result in
  28. switch result {
  29. case let .success(currencyJSON):
  30. if currencyJSON.count > 0 {
  31. for i in 0 ... (currencyJSON.count-1) {
  32. do {
  33. let currencyDetail = try JSONDecoder().decode(CurrenciesData.self, from: currencyJSON[i].rawData())
  34. self.currenciesData.append(currencyDetail)
  35. } catch let err {
  36. self.setErrorMessage(message: err as! String)
  37. self.currencyInfoAvailable.value = false
  38. }
  39. }
  40. }
  41. self.currencyInfoAvailable.value = true
  42. case let .failure(errorJSON):
  43. self.setErrorMessage(message: errorJSON["message"].stringValue)
  44. self.currencyInfoAvailable.value = false
  45. case .updateAccessCode:
  46. RestApiMananger.sharedInstance.updateAccessCode(userId: self.userId!, password: self.getLoginPassword()) {
  47. result in
  48. if result != "Error"{
  49. let uuid = RestApiMananger.sharedInstance.getUUID()
  50. UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
  51. self.fetchCurrencies(currencyInfo: currencyInfo)
  52. }
  53. }
  54. case .logOutUser():
  55. RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
  56. self.anotherLogin.value = true
  57. case .timeOut:
  58. self.exchangeRateConnectionTimeOut.value = false
  59. }
  60. }
  61. }
  62. }
  63. /**
  64. To get exchange rate
  65. - parameter exchangeData: exchange data in dictionary[:] datatype
  66. */
  67. func fetchExchangeRate(exchangeData: [String: Any]) {
  68. if !Reachability.isConnectedToNetwork() {
  69. self.internetConnection.value = false
  70. } else {
  71. var exchangeRate = ExchangeRateData()
  72. RestApiMananger.sharedInstance.getExchangeRates(param: exchangeData) { result in
  73. switch result {
  74. case let .success(exchangeRateJSON):
  75. do {
  76. exchangeRate = try JSONDecoder().decode(ExchangeRateData.self, from: exchangeRateJSON.rawData())
  77. self.exchangeRateData = exchangeRate
  78. } catch {
  79. self.exchangeRateAvailable.value = false
  80. }
  81. self.exchangeRateAvailable.value = true
  82. case let .failure(errorJSON):
  83. self.setErrorMessage(message: errorJSON["message"].stringValue)
  84. self.exchangeRateAvailable.value = false
  85. case .updateAccessCode:
  86. RestApiMananger.sharedInstance.updateAccessCode(userId: self.userId!, password: self.getLoginPassword()) {
  87. result in
  88. if result != "Error"{
  89. let uuid = RestApiMananger.sharedInstance.getUUID()
  90. UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
  91. self.fetchExchangeRate(exchangeData: exchangeData)
  92. }
  93. }
  94. case .logOutUser():
  95. RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
  96. self.anotherLogin.value = true
  97. case .timeOut:
  98. self.exchangeRateConnectionTimeOut.value = false
  99. }
  100. }
  101. }
  102. }
  103. /**
  104. To get exchange rate
  105. - returns: ExchangeRateData
  106. */
  107. func getExchangeRateData() -> ExchangeRateData{
  108. if self.exchangeRateData != nil{
  109. return self.exchangeRateData!
  110. }
  111. return ExchangeRateData()
  112. }
  113. /**
  114. To get currencies
  115. - returns: currencies data list
  116. */
  117. func getCurrencies() -> [CurrenciesData]{
  118. return self.currenciesData
  119. }
  120. /**
  121. To get currencies exchange rate in terms of KRW
  122. - parameter krw: krw amount
  123. - returns: exchange rate
  124. */
  125. func getKRWtoOtherCurrency(krw: Float) -> Float {
  126. return krw * exchangeRate
  127. }
  128. }