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.
 
 
 
 

484 lines
13 KiB

//
// AppConstants.swift
// GMERemittance
//
// Created by gme_2 on 10/09/2018.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
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
var code: String {
switch self {
case .en, .th, .id, .mn, .uz:
return self.rawValue
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"
}
}
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"
}
}
}
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 "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"
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 isCriticalUpdate() -> Bool {
return database.app.string(.criticalUpdate)?.lowercased() == "Y".lowercased()
}
static func didPennyTestRequested() -> Bool {
return database.user.string(.pennyTestStatusCode) ??
"0" == PennyTestStatusCode.requested.rawValue
}
static func pennyTestPresentedOnce() -> Bool {
return database.user.bool(.pennyTestPresentedOnce)
}
static func didPennyTestCancelled() -> Bool {
return database.user.string(.pennyTestStatusCode) ??
"0" == PennyTestStatusCode.cancelled.rawValue
}
static func didPennyTestNotInitiated() -> Bool {
return database.user.string(.pennyTestStatusCode) ??
PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.notStarted.rawValue
}
static func pennyTestVerified() -> Bool {
return database.user.string(.pennyTestStatusCode) ??
PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue
}
static func shouldShowPennyTestError() -> Bool {
return database.user.string(.pennyTestStatusCode) ??
PennyTestStatusCode.notStarted.rawValue != PennyTestStatusCode.completed.rawValue
}
static func shouldShowPennyTestScreen() -> Bool {
let completed = database.user.string(.pennyTestStatusCode) ??
PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue
let cancelled = Utility.didPennyTestCancelled()
let requested = Utility.didPennyTestRequested()
return !cancelled && !completed && !requested
}
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 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 "172017F9EC11222E8107142733"
}
}
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 languages = [
english, bangladesh, cambodia, indonesia, korean, nepal, mongolia, myanmar, russian, srilanka,
thailand, uzbek, vietnam
]
return languages
}
}