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.
294 lines
11 KiB
294 lines
11 KiB
//
|
|
// UserInfoViewModel.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by FMI-12 on 1/30/18.
|
|
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
class UserInfoViewModel: ModelExtension {
|
|
|
|
var userDataAvailable:Box<Bool?> = Box(nil)
|
|
var userOccupationProvinceAvailable:Box<Int?> = Box(nil) // -1 = handle keypad when user is auto logout, 0 = Error, 5 = Occupation, 3 = Province
|
|
var userSourceFundAvailable:Box<Bool?> = Box(nil)
|
|
var userConnectionTimeOut: Box<Bool?> = Box(nil)
|
|
|
|
|
|
private var cddOccupationList: [String] = [String] ()
|
|
private var cddOccupationValueList: [String] = [String] ()
|
|
|
|
private var cddSourceFundList: [String] = [String] ()
|
|
private var cddSourceFundValueList: [String] = [String] ()
|
|
|
|
private var cddProvinceList: [String] = [String] ()
|
|
private var cddProvinceValueList: [String] = [String] ()
|
|
|
|
private var userInfo = KYCModel()
|
|
|
|
let user_id = UserDefaults.standard.object(forKey: "com.gmeremit.username") as? String
|
|
|
|
/**
|
|
APi request for user information
|
|
*/
|
|
func fetchUserInfo() {
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
RestApiMananger.sharedInstance.fetchUserInfoFromKyc(userId: user_id!) { result in
|
|
switch result {
|
|
case let .success(fetchedJSON):
|
|
guard fetchedJSON.count > 0 else {
|
|
self.userDataAvailable.value = false
|
|
return
|
|
}
|
|
|
|
do {
|
|
self.userInfo = try JSONDecoder().decode(KYCModel.self, from: fetchedJSON.rawData())
|
|
|
|
self.userDataAvailable.value = true
|
|
|
|
} catch {
|
|
|
|
self.userDataAvailable.value = false
|
|
}
|
|
case let .failure(errorJSON):
|
|
self.setErrorMessage(message: errorJSON["message"].stringValue)
|
|
self.userDataAvailable.value = false
|
|
case .updateAccessCode:
|
|
RestApiMananger.sharedInstance.updateAccessCode(userId: self.user_id!, password: self.getLoginPassword()) {
|
|
result in
|
|
if result != "Error"{
|
|
let uuid = RestApiMananger.sharedInstance.getUUID()
|
|
UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
|
|
self.fetchUserInfo()
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.userConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
APi Request to update userINfo
|
|
- parameter param: user info in Dictionary
|
|
*/
|
|
func updateUserInfo(param: [String: String]) {
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
|
|
RestApiMananger.sharedInstance.updateUserInfoForKyc(userId: getUserId(), parameter: param) { result in
|
|
switch result {
|
|
case .success(_):
|
|
self.userDataAvailable.value = true
|
|
self.userDataAvailable.value = nil
|
|
case let .failure(errorJSON):
|
|
self.setErrorMessage(message: errorJSON["message"].stringValue)
|
|
self.userDataAvailable.value = false
|
|
self.userDataAvailable.value = nil
|
|
|
|
case .updateAccessCode:
|
|
RestApiMananger.sharedInstance.updateAccessCode(userId: self.user_id!, password: self.getLoginPassword()) {
|
|
result in
|
|
if result != "Error"{
|
|
let uuid = RestApiMananger.sharedInstance.getUUID()
|
|
UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
|
|
self.updateUserInfo(param: param)
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.userConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
Api request for CddList value
|
|
- parameter cddName: Type of cddName
|
|
- parameter param: [:]
|
|
*/
|
|
func fetchCDDList(cddName: String, param: [String: String]?) {
|
|
let cdd_name = cddName
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
RestApiMananger.sharedInstance.getCDDListFor(cddCode: cddName, param: param) { result in
|
|
switch result {
|
|
case let .success(cddJSON):
|
|
switch cddName {
|
|
case cddCode.Occupation.rawValue:
|
|
self.cddOccupationList.removeAll()
|
|
self.cddOccupationValueList.removeAll()
|
|
case cddCode.SourceFund.rawValue:
|
|
self.cddSourceFundList.removeAll()
|
|
self.cddSourceFundValueList.removeAll()
|
|
case cddCode.Province.rawValue:
|
|
self.cddProvinceList.removeAll()
|
|
self.cddProvinceValueList.removeAll()
|
|
default:
|
|
return
|
|
}
|
|
|
|
if cddJSON.count > 0 {
|
|
for i in 0 ... (cddJSON.count-1) {
|
|
do {
|
|
let cddNameValuePair = try JSONDecoder().decode(Cdd.self, from: cddJSON[i].rawData())
|
|
switch cddName {
|
|
case cddCode.Occupation.rawValue:
|
|
self.cddOccupationList.append(cddNameValuePair.name)
|
|
self.cddOccupationValueList.append(cddNameValuePair.value)
|
|
case cddCode.SourceFund.rawValue:
|
|
self.cddSourceFundList.append(cddNameValuePair.name)
|
|
self.cddSourceFundValueList.append(cddNameValuePair.value)
|
|
case cddCode.Province.rawValue:
|
|
self.cddProvinceList.append(cddNameValuePair.name)
|
|
self.cddProvinceValueList.append(cddNameValuePair.value)
|
|
|
|
default:
|
|
return
|
|
}
|
|
} catch {
|
|
switch cddName {
|
|
case cddCode.Occupation.rawValue:
|
|
self.userOccupationProvinceAvailable.value = 0
|
|
case cddCode.SourceFund.rawValue:
|
|
self.userSourceFundAvailable.value = false
|
|
default:
|
|
return
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}
|
|
switch cddName {
|
|
case cddCode.Occupation.rawValue:
|
|
self.userOccupationProvinceAvailable.value = 5
|
|
case cddCode.Province.rawValue:
|
|
self.userOccupationProvinceAvailable.value = 3
|
|
case cddCode.SourceFund.rawValue:
|
|
self.userSourceFundAvailable.value = true
|
|
default:
|
|
return
|
|
}
|
|
|
|
case .failure(_):
|
|
switch cddName {
|
|
case cddCode.Occupation.rawValue:
|
|
self.userOccupationProvinceAvailable.value = 0
|
|
case cddCode.SourceFund.rawValue:
|
|
self.userSourceFundAvailable.value = false
|
|
default:
|
|
return
|
|
}
|
|
|
|
return
|
|
|
|
case .updateAccessCode:
|
|
RestApiMananger.sharedInstance.updateAccessCode(userId: self.user_id!, password: self.getLoginPassword()) {
|
|
result in
|
|
if result != "Error"{
|
|
let uuid = RestApiMananger.sharedInstance.getUUID()
|
|
UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
|
|
self.fetchCDDList(cddName: cdd_name, param: param)
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
self.userOccupationProvinceAvailable.value = -1
|
|
self.userSourceFundAvailable.value = nil
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.userConnectionTimeOut.value = false
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
To get occupation List
|
|
- returns: occupation list
|
|
*/
|
|
func getOccupationList() -> [String] {
|
|
return cddOccupationList
|
|
}
|
|
|
|
/**
|
|
- parameter index: position of occupation in an array
|
|
- returns: occupation
|
|
*/
|
|
|
|
func getOccupationID(index: Int) -> String {
|
|
return cddOccupationValueList[index]
|
|
}
|
|
|
|
/**
|
|
To get province List
|
|
- returns: privince list
|
|
*/
|
|
func getProvinceList() -> [String] {
|
|
return cddProvinceList
|
|
}
|
|
|
|
/**
|
|
- parameter index: position of province in an array
|
|
- returns: province
|
|
*/
|
|
|
|
func getProvinceID(index: Int) -> String {
|
|
return cddProvinceValueList[index]
|
|
}
|
|
|
|
/**
|
|
To get source fund List
|
|
- returns: source fund list
|
|
*/
|
|
func getSourceFundList() -> [String] {
|
|
return cddSourceFundList
|
|
}
|
|
|
|
/**
|
|
- parameter index: position of source fund in an array
|
|
- returns: source fund
|
|
*/
|
|
|
|
func getSourceFundID(index: Int) -> String {
|
|
return cddSourceFundValueList[index]
|
|
}
|
|
|
|
/**
|
|
To get user info
|
|
- returns: user info
|
|
*/
|
|
func getInfo() -> KYCModel {
|
|
return userInfo
|
|
}
|
|
|
|
/**
|
|
To get address
|
|
- returns: address
|
|
*/
|
|
func getAddress() -> String {
|
|
return ""// userInfo.address + ", " + userInfo.city
|
|
}
|
|
|
|
/**
|
|
To get data array
|
|
- returns: empty array
|
|
*/
|
|
func getEmptyData() -> [String] {
|
|
return [String]()
|
|
}
|
|
}
|