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.
269 lines
8.4 KiB
269 lines
8.4 KiB
//
|
|
// InviteViewModel.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by FMI-12 on 3/1/18.
|
|
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
class InviteViewModel: ModelExtension {
|
|
|
|
private var name: String!
|
|
private var mobileNumber: String!
|
|
private var email: String?
|
|
|
|
var inviteeCreated: Box<Bool?> = Box(nil)
|
|
var inviteeFetch: Box<Bool?> = Box(nil)
|
|
|
|
var inviteeConnectionTimeOut: Box<Bool?> = Box(nil)
|
|
|
|
private var newInvitee: InviteeModel = InviteeModel()
|
|
private var inviteeArray: [InviteeModel] = [InviteeModel] ()
|
|
|
|
/**
|
|
Create invitee
|
|
|
|
- parameter name: name of the invitee
|
|
- parameter mobileNumber: mobile number of the invitee
|
|
- parameter email: email of the invitee
|
|
*/
|
|
func createInvitee(name: String, mobileNumber: String, email: String){
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
newInvitee.name = name
|
|
newInvitee.mobileNumber = mobileNumber
|
|
newInvitee.email = email
|
|
newInvitee.userId = getUserId()
|
|
|
|
var encodedInviteeDictionary: [String: String]!
|
|
do {
|
|
let encodedInvitee = try JSONEncoder().encode(newInvitee)
|
|
encodedInviteeDictionary = try JSONSerialization.jsonObject(with: encodedInvitee, options: .allowFragments) as? [String: String]
|
|
} catch {
|
|
|
|
}
|
|
|
|
RestApiMananger.sharedInstance.createInvitee(param: encodedInviteeDictionary){
|
|
result in
|
|
switch result {
|
|
case let .success(createdJSON):
|
|
do {
|
|
self.newInvitee = try JSONDecoder().decode(InviteeModel.self, from: createdJSON.rawData())
|
|
self.inviteeCreated.value = true
|
|
} catch {
|
|
self.inviteeCreated.value = false
|
|
}
|
|
|
|
case let .failure(errorJSON):
|
|
self.setErrorMessage(message: errorJSON["message"].stringValue)
|
|
self.inviteeCreated.value = false
|
|
case .updateAccessCode:
|
|
RestApiMananger.sharedInstance.updateAccessCode(userId: self.getUserId(), password: self.getLoginPassword()) {
|
|
result in
|
|
if result != "Error"{
|
|
let uuid = "8da2e516-df9e-4aaa-b629-725150c4d8cc"
|
|
UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode")
|
|
self.createInvitee(name: name, mobileNumber: mobileNumber, email: email)
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.inviteeConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
Get invitee data
|
|
*/
|
|
func fetchInvitee(){
|
|
if !Reachability.isConnectedToNetwork() {
|
|
self.internetConnection.value = false
|
|
} else {
|
|
RestApiMananger.sharedInstance.getInvitee(userId: getUserId()) { result in
|
|
switch result {
|
|
case let .success(fetchedJSON):
|
|
self.inviteeArray.removeAll()
|
|
guard fetchedJSON.count > 0 else {
|
|
self.inviteeFetch.value = true
|
|
return
|
|
}
|
|
if fetchedJSON.count > 0 {
|
|
for i in 0 ... (fetchedJSON.count-1) {
|
|
do {
|
|
let invitee = try JSONDecoder().decode(InviteeModel.self, from: fetchedJSON[i].rawData())
|
|
self.inviteeArray.append(invitee)
|
|
|
|
} catch {
|
|
|
|
self.inviteeFetch.value = false
|
|
}
|
|
}
|
|
}
|
|
|
|
self.inviteeFetch.value = true
|
|
|
|
case let .failure(errorJSON):
|
|
self.setErrorMessage(message: errorJSON["message"].stringValue)
|
|
self.inviteeFetch.value = false
|
|
|
|
case .updateAccessCode:
|
|
RestApiMananger.sharedInstance.updateAccessCode(userId: self.getUserId(), password: self.getLoginPassword()) {
|
|
result in
|
|
if result != "Error"{
|
|
UserDefaults.standard.set((result + ":" + RestApiMananger.sharedInstance.getUUID()).toBase64(), forKey: "com.gmeremit.accessCode")
|
|
self.fetchInvitee()
|
|
}
|
|
}
|
|
case .logOutUser():
|
|
RestApiMananger.sharedInstance.cancelExistingNetworkCalls()
|
|
self.anotherLogin.value = true
|
|
case .timeOut:
|
|
self.inviteeConnectionTimeOut.value = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
Create invitee
|
|
|
|
- returns: object of Invitee Model
|
|
*/
|
|
func getCreatedInvitee() -> InviteeModel {
|
|
return newInvitee
|
|
}
|
|
|
|
/**
|
|
- returns: total size of inviteeArray
|
|
*/
|
|
func getCount() -> Int {
|
|
return inviteeArray.count
|
|
}
|
|
|
|
/**
|
|
- returns: array of InviteeModel
|
|
*/
|
|
func getInviteeArray() -> [InviteeModel] {
|
|
return inviteeArray
|
|
}
|
|
|
|
/**
|
|
- parameter index: position of object
|
|
- returns: position object of InviteeModel
|
|
*/
|
|
func getInvitee(index: Int) -> InviteeModel {
|
|
return inviteeArray[index]
|
|
}
|
|
|
|
/**
|
|
- parameter index: position of referral id in an array
|
|
- returns: referral id
|
|
*/
|
|
func getReferralId(index:Int) -> String {
|
|
if let getReferralId = inviteeArray[index].referralId{
|
|
return getReferralId
|
|
}
|
|
else {
|
|
return "N/A"
|
|
}
|
|
}
|
|
|
|
/**
|
|
- parameter index: position of name in an array
|
|
- returns: name
|
|
*/
|
|
func getName(index:Int) -> String {
|
|
if let getName = inviteeArray[index].name{
|
|
return getName
|
|
}
|
|
else {
|
|
return "N/A"
|
|
}
|
|
}
|
|
|
|
/**
|
|
- parameter index: position of mobile number in an array
|
|
- returns: referral id
|
|
*/
|
|
func getMobileNumber(index:Int) -> String {
|
|
if let getMobileNumber = inviteeArray[index].mobileNumber{
|
|
return getMobileNumber
|
|
}
|
|
else {
|
|
return "N/A"
|
|
}
|
|
}
|
|
|
|
/**
|
|
- parameter index: position of email in an array
|
|
- returns: email
|
|
*/
|
|
func getEmail(index:Int) -> String {
|
|
if let getEmail = inviteeArray[index].email{
|
|
return getEmail
|
|
}
|
|
else {
|
|
return "N/A"
|
|
}
|
|
}
|
|
|
|
/**
|
|
- parameter index: position of userId in an array
|
|
- returns: userId
|
|
*/
|
|
func getUserId(index:Int) -> String {
|
|
if let getUserId = inviteeArray[index].userId{
|
|
return getUserId
|
|
}
|
|
else {
|
|
return "N/A"
|
|
}
|
|
}
|
|
|
|
/**
|
|
- parameter index: position of status in an array
|
|
- returns: status
|
|
*/
|
|
func getStatus(index:Int) -> String {
|
|
if let getStatus = inviteeArray[index].status{
|
|
return getStatus
|
|
}
|
|
else {
|
|
return "N/A"
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension InviteViewModel {
|
|
/**
|
|
- parameter arrayofInfo: array of textfield input checking null
|
|
- returns: if blank return false else true
|
|
*/
|
|
func allFieldsFilled(arrayofInfo: [String]) -> Bool {
|
|
if arrayofInfo.count > 0{
|
|
for info in arrayofInfo {
|
|
if info.isBlank {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
/**
|
|
- parameter email: Invitee email
|
|
- returns: true if valid email
|
|
*/
|
|
func isValidEmail(email:String) -> Bool {
|
|
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
|
|
return NSPredicate(format:"SELF MATCHES %@", emailRegEx).evaluate(with: email)
|
|
}
|
|
}
|