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.
 
 
 
 

493 lines
14 KiB

//
// AppConstants.swift
// GMERemittance
//
// Created by gme_2 on 10/09/2018.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
import UIKit
class AppConstants {
static let uuid = "uuid"
static let dateFormat = "yyyy-MM-dd"
static let humanReadableDateFormat = "MMM d, yyyy"
static let errorBorderWidth: CGFloat = 0.1
static let emergencyLogoutErrorCode = -1111
static let maxKoreanMobileNoLength = 11
static let MainWireFrameNotificationName = "MainViewControllerSelect"
static let yearlyLimitNotification = "Yearly LImit"
}
enum Devices {
case iphone5
case iphone678
case iphone678Plus
case iphoneX
case ipad
case other
}
//pennyTestStatus='0'-----0 not started, 1 requested , 2 completed
enum PennyTestStatusCode: String {
case notStarted = "0"
case requested = "1"
case completed = "2"
case cancelled = "3"
}
enum Language: String {
case en
case kr
case kh
case lk
case th
case id
case mn
case mm
case np
case bd
case ru
case uz
case vn
case pk
case jp
case ja
var code: String {
switch self {
case .en, .th, .id, .mn, .uz:
return self.rawValue
case .pk:
return "ur-PK"
case .kr:
return "ko"
case .kh:
return "km"
case .lk:
return "si"
case .mm:
return "my"
case .np:
return "ne"
case .bd:
return "bn"
case .ru:
return "ru-RU"
case .vn:
return "vi-VN"
case .jp:
return "jp"
case .ja:
return "ja"
}
}
var title: String {
switch self {
case .en:
return "English"
case .kr:
return "한국"
case .kh:
return "ភាសាខ្មែរ"
case .lk:
return "සිංහල"
case .th:
return "ไทย"
case .id:
return "Bahasa Indonesia"
case .mn:
return "Монгол"
case .mm:
return "Myanmar"
case .np:
return "नेपाली"
case .bd:
return "বাংলা"
case .ru:
return "русский"
case .uz:
return "O\'zbek"
case .vn:
return "Tiếng Việt"
case .pk:
return "پاکستان"
case .jp, .ja:
return "日本語"
}
}
}
extension String {
var languageCode: Language? {
switch self {
case "ko", "kr":
return .kr
case "km", "kh":
return .kh
case "si", "lk":
return .lk
case "my", "mm":
return .mm
case "ne", "np":
return .np
case "bn", "bd":
return .bd
case "ru-RU", "ru":
return .ru
case "vi-VN", "vn":
return .vn
case "ur-PK", "pk":
return .pk
case "jp" , "ja":
return .ja
case "en", "th", "id", "mn", "uz":
return Language.init(rawValue: self)!
default:
return nil
}
}
}
class Utility {
static let database = GMEDB.shared
static func getDeviceModel() -> Devices {
if UIDevice.current.userInterfaceIdiom == .phone {
switch UIScreen.main.nativeBounds.height {
case 1136:
return .iphone5
case 1334:
return .iphone678
case 2208:
return .iphone678Plus
case 2436:
return .iphoneX
default:
return .other
}
} else {
return .ipad
}
}
static func getLanguageHeader(for currentLanugage: String) -> String {
var header = ""
switch currentLanugage {
case "ko":
header = "kr"
case "km":
header = "kh"
case "si":
header = "lk"
case "my":
header = "mm"
case "ne":
header = "np"
case "bn":
header = "bd"
case "ru-RU":
header = "ru"
case "vi-VN":
header = "vn"
case "uz":
header = "uz"
case "mn":
header = "mn"
case "id":
header = "id"
case "th":
header = "th"
case "ur-PK":
header = "pk"
case "jp", "ja":
header = "ja"
default:
header = "en"
}
return header
}
static func isVerifiedUser() -> Bool {
return database.user.bool(.verified)
}
static func didSubmitKyc() -> Bool {
return database.user.bool(.kyc)
}
static func isExistingUser() -> Bool {
return database.user.bool(.isExistingUser)
}
static func hasUpdatedDefaultCredentials() -> Int {
return database.user.integer(.hasUpdatedDefaultCredentials)
}
static func isCriticalUpdate() -> Bool {
return database.app.string(.criticalUpdate)?.lowercased() == "Y".lowercased()
}
static func getMyUserName() -> String {
return database.user.string(.userId) ?? ""
}
static func getMyId() -> String {
return database.user.string(.senderId) ?? ""
}
static func getMyKftcClientId() -> String {
return database.user.string(.kftcClientId) ?? ""
}
static func getMyIdNumber() -> String {
return database.user.string(.idNumber) ?? ""
}
static func getMyPrimaryAccountNumber() -> String {
return database.user.string(.primaryAccountNumber) ?? ""
}
static func hasVerifiedOtp() -> Bool {
return database.user.bool(.hasVerifiedOTP)
}
static func isValidEmail(email: String) -> Bool {
let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegex)
return emailTest.evaluate(with: email)
}
static func getCommaSeperatedString(numberString: String) -> String? {
let text = numberString.extract(regex: "[0-9.]")
if let number = Double(text) {
let nsNumber = NSNumber.init(value: number)
let currencyFormatter = NumberFormatter()
currencyFormatter.locale = Locale(identifier: "en_US")
currencyFormatter.numberStyle = .decimal
let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber)
let text = commaSeperatedNumberString?.replacingOccurrences(of: ".", with: ",")
return text
}
return nil
}
static func getCommaSeperatedStringWithDecimal(numberString: String) -> String? {
let text = numberString.extract(regex: "[0-9.]")
if let number = Double(text) {
let nsNumber = NSNumber.init(value: number)
let currencyFormatter = NumberFormatter()
currencyFormatter.locale = Locale(identifier: "en_US")
currencyFormatter.numberStyle = .decimal
currencyFormatter.groupingSize = 3
currencyFormatter.usesGroupingSeparator = true
let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber)
return commaSeperatedNumberString
}
return nil
}
static func save(
user: User?,
accessCodeBase64: String? = nil,
password: String? = nil,
login: Bool? = false
) {
if login ?? false {
GMEDB
.shared
.user
.set(accessCodeBase64, .accessCode)
.set(user?.kftcClientId, .kftcClientId)
}
GMEDB
.shared
.setUser(user)
// save remind day of KFTC Token
let remindDay = calculateDDay(registDate: user?.accessTokenRegTime)
// let remindDay = calculateDDay(registDate: "7/20/2018 4:49:32 PM")
GMEDB.shared.user.set(remindDay, .remindKFTCTokenDay)
guard let encryptedPassword = password else { return }
let id = GMEDB.shared.user.string(.userId) ?? ""
if id != KeyChain.shared.get(key: .id) {
KeyChain.shared.remove(key: .biometricAuth)
}
KeyChain.shared.save(data: id, key: .id)
KeyChain.shared.save(data: encryptedPassword, key: .password)
KeyChain.shared.save(data: "1", key: .login)
}
static func calculateDDay(registDate: String?) -> String? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "M/d/yyyy h:mm:ss a"
dateFormatter.locale = Locale(identifier: "ko_kr")
dateFormatter.timeZone = TimeZone(abbreviation: "KST")
var dateComponent = DateComponents()
dateComponent.year = 1
guard
let resigstDate = registDate,
let date = dateFormatter.date(from: resigstDate),
let expireDate = Calendar.current.date(byAdding: dateComponent, to: date) else {return nil}
let now = Date()
let calendar = Calendar.current
let startDate = calendar.startOfDay(for: now)
let endDate = calendar.startOfDay(for: expireDate)
guard let remindDay = calendar.dateComponents([.day], from: startDate, to: endDate).day else {
return nil
}
return "\(remindDay)"
}
static func numberWithoutprecedingZero(str: String) -> String {
let formatter = NumberFormatter()
let number = formatter.number(from: str)
return "\(number ?? 0)"
}
static func getAppVersion () -> String? {
let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
return version
}
static func getOsVersion() -> String {
let version = UIDevice.current.systemVersion
return version
}
static func getPhoneBrand() -> String {
let phoneName = UIDevice.current.model
return phoneName
}
static func getPhoneOs() -> String {
let os = UIDevice.current.systemName
return os
}
static func getUUid() -> String? {
let uuid = UIDevice.current.identifierForVendor?.uuidString
return uuid
}
static func getCliendId() -> String {
return "162021E171B825A55C52024823"
}
}
extension Utility {
static func getLanguages() -> [SendMoneyCountryViewModel] {
let english = SendMoneyCountryViewModel()
english.name = "english_language_text".localized()
english.id = "english_language_text"
english.title = "English"
english.code = "en"
let korean = SendMoneyCountryViewModel()
korean.name = "korean_language_text".localized()
korean.id = "korean_language_text"
korean.title = "한국"
korean.code = "kr"
let cambodia = SendMoneyCountryViewModel()
cambodia.name = "cambodia_lanugage_text".localized()
cambodia.id = "cambodia_lanugage_text"
cambodia.title = "ភាសាខ្មែរ"
cambodia.code = "kh"
let srilanka = SendMoneyCountryViewModel()
srilanka.name = "srilanka_lanugage_text".localized()
srilanka.id = "srilanka_lanugage_text"
srilanka.title = "සිංහල"
srilanka.code = "lk"
let myanmar = SendMoneyCountryViewModel()
myanmar.name = "myanmar_language_text".localized()
myanmar.id = "myanmar_language_text"
myanmar.title = "Myanmar"
myanmar.code = "mm"
let russian = SendMoneyCountryViewModel()
russian.name = "russian_langugae_text".localized()
russian.id = "русский"
russian.title = "русский"
russian.code = "ru"
let vietnam = SendMoneyCountryViewModel()
vietnam.name = "vietnam_language_text".localized()
vietnam.id = "vietnam_language_text"
vietnam.title = "Tiếng Việt"
vietnam.code = "vn"
let thailand = SendMoneyCountryViewModel()
thailand.name = "thailand_language_text".localized()
thailand.id = "thailand_language_text"
thailand.title = "ไทย"
thailand.code = "th"
let indonesia = SendMoneyCountryViewModel()
indonesia.name = "indonesia_language_text".localized()
indonesia.id = "indonesia_language_text"
indonesia.title = "Bahasa Indonesia"
indonesia.code = "id"
let mongolia = SendMoneyCountryViewModel()
mongolia.name = "mongolia_language_text".localized()
mongolia.id = "mongolia_language_text"
mongolia.title = "Монгол"
mongolia.code = "mn"
let nepal = SendMoneyCountryViewModel()
nepal.name = "nepali_language_text".localized()
nepal.id = "nepali_language_text"
nepal.title = "नेपाली"
nepal.code = "np"
let bangladesh = SendMoneyCountryViewModel()
bangladesh.name = "bengali_language_text".localized()
bangladesh.id = "bengali_language_text"
bangladesh.title = "বাংলা"
bangladesh.code = "bd"
let uzbek = SendMoneyCountryViewModel()
uzbek.name = "uzbek_language_text".localized()
uzbek.id = "uzbek_language_text"
uzbek.title = "O'zbek"
uzbek.code = "uz"
let pakistan = SendMoneyCountryViewModel()
pakistan.name = "pakistan_language_text".localized()
pakistan.id = "pakistan_language_text"
pakistan.title = "پاکستان"
pakistan.code = "pk"
let japanese = SendMoneyCountryViewModel()
japanese.name = "japanese_language_text".localized()
japanese.id = "japanese_language_text"
japanese.title = "日本語"
japanese.code = "ja"
let languages = [
english, japanese, bangladesh, nepal, vietnam,
]
return languages
}
}