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.
266 lines
8.8 KiB
266 lines
8.8 KiB
//
|
|
// ProfileViewModel.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by FMI-12 on 1/29/18.
|
|
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
|
|
class ProfileViewModel: ModelExtension {
|
|
|
|
|
|
var userDataAvailable:Box<Bool?> = Box(nil)
|
|
var imageSubmitted:Box<Bool?> = Box(nil)
|
|
|
|
var profileConnectionTimeOut: Box<Bool?> = Box(nil)
|
|
|
|
var availableBalance: String?
|
|
var rewardPoint: String?
|
|
var walletNumber: String?
|
|
|
|
private var profileInfo: ProfileModel!
|
|
|
|
private var user_id: String!
|
|
|
|
private var userImageDocUrl: String?
|
|
|
|
/**
|
|
Api request for user Information
|
|
- parameter String: UserId
|
|
*/
|
|
func fetchUserInfo(userId: String?) {
|
|
if userId == nil {
|
|
user_id = UserDefaults.standard.object(forKey: "com.gmeremit.username") as? String
|
|
} else {
|
|
user_id = userId!
|
|
}
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
RestApiMananger.sharedInstance.getUserDetails(userId: self.user_id) { result in
|
|
switch result {
|
|
case let .success(userJSON):
|
|
do {
|
|
self.profileInfo = try JSONDecoder().decode(ProfileModel.self, from: userJSON.rawData())
|
|
|
|
if userId == nil {
|
|
self.availableBalance = userJSON["availableBalance"].stringValue
|
|
self.rewardPoint = userJSON["rewardPoint"].stringValue
|
|
self.walletNumber = userJSON["walletNumber"].stringValue
|
|
}
|
|
|
|
self.userDataAvailable.value = true
|
|
|
|
} catch {
|
|
|
|
self.userDataAvailable.value = false
|
|
}
|
|
|
|
case let .failure(errorJSON):
|
|
self.setErrorMessage(message: "Update Failed:" + 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(userId: userId)
|
|
}
|
|
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.profileConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
Submit the Image provided
|
|
- parameter docType: type of document
|
|
- parameter imageBase64 data
|
|
*/
|
|
func provideImageForSubmission(docType: String, imageBase64: String) {
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
|
|
let docParam = ["documentType": docType, "file": imageBase64]
|
|
RestApiMananger.sharedInstance.submitDocument(param: docParam, userId: self.user_id!) { result in
|
|
switch result {
|
|
case let .success(imageJSON):
|
|
if let docUrl = imageJSON["documentUrl"].rawString() {
|
|
self.updateUserInfo(param: ["dpUrl": docUrl])
|
|
} else {
|
|
self.setErrorMessage(message:"No image URL generated")
|
|
self.imageSubmitted.value = false
|
|
}
|
|
case let .failure(errorJSON):
|
|
self.setErrorMessage(message: errorJSON["message"].stringValue)
|
|
self.imageSubmitted.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.provideImageForSubmission(docType: docType, imageBase64: imageBase64)
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.profileConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
Api request to update user information
|
|
- parameter param: User information is in Dictionary
|
|
*/
|
|
func updateUserInfo(param: [String: String]) {
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
RestApiMananger.sharedInstance.updateUserDetail (userId: user_id, param: param) { result in
|
|
switch result {
|
|
case let .success(fetchedJSON):
|
|
UserDefaults.standard.set(fetchedJSON["dpUrl"].stringValue, forKey: "com.gmeremit.dpUrl")
|
|
self.imageSubmitted.value = true
|
|
case let .failure(errorJSON):
|
|
self.setErrorMessage(message: errorJSON["message"].stringValue)
|
|
self.imageSubmitted.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.updateUserInfo(param: param)
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.profileConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
to get proile info
|
|
- returns: profile Info
|
|
*/
|
|
func getProfileModel() -> ProfileModel {
|
|
return profileInfo
|
|
}
|
|
|
|
/**
|
|
To get full name
|
|
- returns: Full name
|
|
*/
|
|
|
|
func getFullName() -> String {
|
|
if profileInfo.middleName == nil {
|
|
return profileInfo.firstName + " " + profileInfo.lastName
|
|
} else {
|
|
return profileInfo.firstName + " " + profileInfo.middleName! + " " + profileInfo.lastName
|
|
}
|
|
}
|
|
/**
|
|
To get user balance
|
|
- returns: Amount
|
|
*/
|
|
func getAvailableBalance() -> String {
|
|
if let balance = availableBalance {
|
|
return balance
|
|
}
|
|
return "N/A"
|
|
|
|
}
|
|
|
|
/**
|
|
To get user email
|
|
- returns: email
|
|
*/
|
|
func getEmail() -> String {
|
|
if let email = profileInfo.email {
|
|
return email
|
|
}
|
|
return "Email: N/A"
|
|
}
|
|
|
|
/**
|
|
To get user Phone nos.
|
|
- returns: Phone nos.
|
|
*/
|
|
func getPhone() -> String {
|
|
if let phone = profileInfo.mobileNumber {
|
|
return phone
|
|
}
|
|
return "Phone: N/A"
|
|
}
|
|
|
|
/**
|
|
To get user wallet Nos.
|
|
- returns: wallet Nos.
|
|
*/
|
|
func getWalletNumber() -> String {
|
|
if let walletNum = walletNumber {
|
|
return walletNum
|
|
}
|
|
return "Wallet Number: N/A"
|
|
}
|
|
|
|
/**
|
|
To get user bank name
|
|
- returns: bank name
|
|
*/
|
|
func getBankName() -> String {
|
|
if let bankName = profileInfo.primaryBankName {
|
|
return bankName
|
|
}
|
|
return "Primary Bank: N/A"
|
|
}
|
|
|
|
//Added to determine if the user has filled kyc form
|
|
func hasFilledKYC() -> Bool {
|
|
if profileInfo.kyc {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
/// To deteemine verified account
|
|
func isVerified() -> Bool {
|
|
if profileInfo.verified! {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
/**
|
|
To get user reward point
|
|
- returns: points
|
|
*/
|
|
func getRewardPoint() -> String {
|
|
if let points = rewardPoint {
|
|
return points
|
|
}
|
|
return "N/A"
|
|
}
|
|
}
|