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.

530 lines
17 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. //
  2. // AppConstants.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 10/09/2018.
  6. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import Foundation
  9. class AppConstants {
  10. static let uuid = "uuid"
  11. static let dateFormat = "yyyy-MM-dd"
  12. static let humanReadableDateFormat = "MMM d, yyyy"
  13. static let errorBorderWidth: CGFloat = 0.1
  14. static let themeRedColor = UIColor.init(hex: "#ed1b24")
  15. static let themeDarkRedColor = UIColor.init(hex: "#be0007")
  16. static let themeBlueColor = UIColor.init(hex: "#303e9f") // 2D368F
  17. static let themWhiteColor = UIColor.init(hex: "#ffffff")
  18. static let emergencyLogoutErrorCode = -1111
  19. static let maxKoreanMobileNoLength = 11
  20. static let MainWireFrameNotificationName = "MainViewControllerSelect"
  21. static let pennyTestServerMessage = "pennyTestServerMessage"
  22. static let pennyTestStatusCode = "pennyTestStatusCode"
  23. static let pennyTestRequested = "pennyTestRequested"
  24. static let pennyTestPresentedOnce = "pennyTestPresentedOnce"
  25. static let criticalUpdate = "criticalUpdate"
  26. static let primaryBankWArningMessage = "Please verify your primary bank account to complete the registration."
  27. static let yearlyLimitNotification = "Yearly LImit"
  28. static let firstTimeLanguageIsSet = "firstTimeLanguageIsSet"
  29. static let currentLanguage = "currentLanguage"
  30. }
  31. enum Devices {
  32. case iphone5
  33. case iphone678
  34. case iphone678Plus
  35. case iphoneX
  36. case ipad
  37. case other
  38. }
  39. //pennyTestStatus='0'-----0 not started, 1 requested , 2 completed
  40. enum PennyTestStatusCode: String {
  41. case notStarted = "0"
  42. case requested = "1"
  43. case completed = "2"
  44. case cancelled = "3"
  45. }
  46. enum Language: String {
  47. case en
  48. case kr
  49. case kh
  50. case lk
  51. case th
  52. case id
  53. case mn
  54. case mm
  55. case np
  56. case bd
  57. case ru
  58. case uz
  59. case vn
  60. var code: String {
  61. switch self {
  62. case .en, .th, .id, .mn, .uz:
  63. return self.rawValue
  64. case .kr:
  65. return "ko"
  66. case .kh:
  67. return "km"
  68. case .lk:
  69. return "si"
  70. case .mm:
  71. return "my"
  72. case .np:
  73. return "ne"
  74. case .bd:
  75. return "bn"
  76. case .ru:
  77. return "ru-RU"
  78. case .vn:
  79. return "vi-VN"
  80. }
  81. }
  82. var title: String {
  83. switch self {
  84. case .en:
  85. return "English"
  86. case .kr:
  87. return "한국"
  88. case .kh:
  89. return "ភាសាខ្មែរ"
  90. case .lk:
  91. return "සිංහල"
  92. case .th:
  93. return "ไทย"
  94. case .id:
  95. return "Bahasa Indonesia"
  96. case .mn:
  97. return "Монгол"
  98. case .mm:
  99. return "Myanmar"
  100. case .np:
  101. return "नेपाली"
  102. case .bd:
  103. return "বাংলা"
  104. case .ru:
  105. return "русский"
  106. case .uz:
  107. return "O\'zbek"
  108. case .vn:
  109. return "Tiếng Việt"
  110. }
  111. }
  112. }
  113. extension String {
  114. var languageCode: Language? {
  115. switch self {
  116. case "ko", "kr":
  117. return .kr
  118. case "km", "kh":
  119. return .kh
  120. case "si", "lk":
  121. return .lk
  122. case "my", "mm":
  123. return .mm
  124. case "ne", "np":
  125. return .np
  126. case "bn", "bd":
  127. return .bd
  128. case "ru-RU", "ru":
  129. return .ru
  130. case "vi-VN", "vn":
  131. return .vn
  132. case "en", "th", "id", "mn", "uz":
  133. return Language.init(rawValue: self)!
  134. default:
  135. return nil
  136. }
  137. }
  138. }
  139. class Utility {
  140. static func getDeviceModel() -> Devices {
  141. if UIDevice().userInterfaceIdiom == .phone {
  142. switch UIScreen.main.nativeBounds.height {
  143. case 1136:
  144. return .iphone5
  145. case 1334:
  146. return .iphone678
  147. case 2208:
  148. return .iphone678Plus
  149. case 2436:
  150. return .iphoneX
  151. default:
  152. return .other
  153. }
  154. }else {
  155. return .ipad
  156. }
  157. }
  158. // var code: String {
  159. // switch self {
  160. // case .en, .th, .id, .mn, .uz:
  161. // return self.rawValue
  162. // case .kr:
  163. // return "ko"
  164. // case .kh:
  165. // return "km"
  166. // case .lk:
  167. // return "si"
  168. // case .mm:
  169. // return "my"
  170. // case .np:
  171. // return "ne"
  172. // case .bd:
  173. // return "bn"
  174. // case .ru:
  175. // return "ru-RU"
  176. // case .vn:
  177. // return "vi-VN"
  178. // }
  179. static func getLanguageHeader(for currentLanugage: String) -> String {
  180. var header = ""
  181. switch currentLanugage {
  182. case "ko":
  183. header = "kr"
  184. case "km":
  185. header = "kh"
  186. case "si":
  187. header = "lk"
  188. case "my":
  189. header = "mm"
  190. case "ne":
  191. header = "np"
  192. case "bn":
  193. header = "bd"
  194. case "ru-RU":
  195. header = "ru"
  196. case "vi-VN":
  197. header = "vn"
  198. case "uz":
  199. header = "uz"
  200. case "mn":
  201. header = "mn"
  202. case "id":
  203. header = "id"
  204. case "th":
  205. header = "th"
  206. default:
  207. header = "en"
  208. }
  209. return header
  210. }
  211. static func isVerifiedUser() -> Bool {
  212. let val = (UserDefaults.standard.object(forKey: UserKeys.verified) as? Bool ) ?? false
  213. return val
  214. }
  215. static func didSubmitKyc() -> Bool {
  216. let val = (UserDefaults.standard.object(forKey: UserKeys.kyc) as? Bool ) ?? false
  217. return val
  218. }
  219. static func isCriticalUpdate() -> Bool {
  220. let val = (UserDefaults.standard.object(forKey: AppConstants.criticalUpdate) as? String )?.lowercased() == "Y".lowercased()
  221. return val
  222. }
  223. static func didPennyTestRequested() -> Bool {
  224. let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? "0" == PennyTestStatusCode.requested.rawValue // 0 is false and "1" = true 2 = cancelled
  225. return val
  226. }
  227. static func pennyTestPresentedOnce() -> Bool {
  228. let val = UserDefaults.standard.bool(forKey: AppConstants.pennyTestPresentedOnce)
  229. return val
  230. }
  231. static func didPennyTestCancelled() -> Bool {
  232. let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? "0" == PennyTestStatusCode.cancelled.rawValue
  233. return val
  234. }
  235. static func didPennyTestNotInitiated() -> Bool {
  236. let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.notStarted.rawValue
  237. return val
  238. }
  239. static func pennyTestVerified() -> Bool {
  240. let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue
  241. return val
  242. }
  243. static func shouldShowPennyTestError() -> Bool {
  244. let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue != PennyTestStatusCode.completed.rawValue
  245. return val
  246. }
  247. static func shouldShowPennyTestScreen() -> Bool {
  248. let completed = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue
  249. let cancelled = Utility.didPennyTestCancelled()
  250. let requested = Utility.didPennyTestRequested()
  251. return !cancelled && !completed && !requested
  252. }
  253. static func getMyUserName() -> String {
  254. let defaults = UserDefaults.standard
  255. let myUsername = defaults.string(forKey: UserKeys.userId) ?? ""
  256. return myUsername
  257. }
  258. static func getMyId() -> String {
  259. let defaults = UserDefaults.standard
  260. let myId = defaults.string(forKey: UserKeys.senderId) ?? ""
  261. return myId
  262. }
  263. static func getMyKftcClientId() -> String {
  264. let defaults = UserDefaults.standard
  265. let myId = defaults.string(forKey: UserKeys.kftcClientId) ?? ""
  266. return myId
  267. }
  268. static func getMyIdNumber() -> String {
  269. let defaults = UserDefaults.standard
  270. let myId = defaults.string(forKey: UserKeys.idNumber) ?? ""
  271. return myId
  272. }
  273. static func getMyPrimaryAccountNumber() -> String {
  274. let defaults = UserDefaults.standard
  275. let val = defaults.string(forKey: UserKeys.primaryAccountNumber) ?? ""
  276. print(val)
  277. return val
  278. }
  279. static func isValidEmail(email: String) -> Bool {
  280. let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
  281. let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegex)
  282. return emailTest.evaluate(with: email)
  283. }
  284. static func getCommaSeperatedString(numberString: String) -> String? {
  285. let text = numberString.filter({ $0 != "," })
  286. if let number = Double(text) {
  287. let nsNumber = NSNumber.init(value: number)
  288. let currencyFormatter = NumberFormatter()
  289. currencyFormatter.numberStyle = .decimal
  290. let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber)
  291. let text = commaSeperatedNumberString?.replacingOccurrences(of: ".", with: ",")
  292. return text
  293. }
  294. return nil
  295. }
  296. static func getCommaSeperatedStringWithDecimal(numberString: String) -> String? {
  297. let text = numberString.filter({ $0 != "," })
  298. if let number = Double(text) {
  299. let nsNumber = NSNumber.init(value: number)
  300. let currencyFormatter = NumberFormatter()
  301. currencyFormatter.numberStyle = .decimal
  302. currencyFormatter.groupingSize = 3
  303. currencyFormatter.usesGroupingSeparator = true
  304. let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber)
  305. return commaSeperatedNumberString
  306. }
  307. return nil
  308. }
  309. static func save(user: User?, accessCodeBase64: String? = nil, password: String? = nil, login: Bool? = false) {
  310. func save(value: Any?, forKey: String) {
  311. let defaults = UserDefaults.standard
  312. defaults.set(value, forKey: forKey)
  313. }
  314. save(value: user?.dpUrl ?? "", forKey: UserKeys.dpUrl)
  315. save(value: user?.walletNumber ?? "", forKey: UserKeys.walletNumber)
  316. save(value: user?.primaryBankName ?? "", forKey: UserKeys.primaryBankName)
  317. let firstName = user?.firstName ?? ""
  318. let middleName = user?.lastName ?? ""
  319. let lastName = user?.lastName ?? ""
  320. let fullName = firstName + " " + middleName + " " + lastName
  321. save(value: fullName, forKey: UserKeys.fullName)
  322. save(value: firstName, forKey: UserKeys.firstName)
  323. save(value: lastName, forKey: UserKeys.lastName)
  324. if login ?? false {
  325. save(value: accessCodeBase64, forKey: UserKeys.accessCode)
  326. save(value: user?.kftcClientId ?? "", forKey: UserKeys.kftcClientId)
  327. }
  328. save(value: user?.userId ?? "", forKey: UserKeys.userId)
  329. save(value: user?.nickName ?? "", forKey: UserKeys.nickName)
  330. save(value: user?.availableBalance ?? "", forKey: user?.availableBalance ?? "0" )
  331. save(value: user?.rewardPoint ?? "", forKey: UserKeys.rewardPoint)
  332. save(value: user?.verified ?? false, forKey: UserKeys.verified)
  333. save(value: user?.kyc ?? "", forKey: UserKeys.kyc)
  334. save(value: user?.email ?? "", forKey: UserKeys.email)
  335. save(value: user?.mobileNumber ?? "", forKey: UserKeys.mobileNumber)
  336. save(value: user?.sourceId ?? "", forKey: UserKeys.sourceId)
  337. save(value: "111111", forKey: "com.gmeremit.password")
  338. save(value: user?.isReferred ?? "", forKey: UserKeys.isReferred)
  339. save(value: user?.idType ?? "", forKey: UserKeys.idType)
  340. save(value: user?.idNumber ?? "", forKey: UserKeys.idNumber)
  341. save(value: user?.country ?? "" , forKey: UserKeys.country)
  342. save(value: user?.countryCode, forKey: UserKeys.countryCode)
  343. save(value: user?.primaryAccountNumber, forKey: UserKeys.primaryAccountNumber)
  344. save(value: user?.senderId, forKey: UserKeys.senderId)
  345. save(value: user?.yearlyLimit, forKey: UserKeys.yearlyLimit)
  346. save(value: user?.dateOfBirth, forKey: UserKeys.dateOfBirth)
  347. save(value: user?.pennyTestStatus, forKey: AppConstants.pennyTestStatusCode)
  348. guard let encryptedPassword = password else { return }
  349. let email = UserDefaults.standard.string(forKey: UserKeys.email) ?? ""
  350. if email != KeyChain.shared.get(key: .email) {
  351. KeyChain.shared.remove(key: .biometricAuth)
  352. }
  353. KeyChain.shared.save(data: email, key: .email)
  354. KeyChain.shared.save(data: encryptedPassword, key: .password)
  355. KeyChain.shared.save(data: "1", key: .login)
  356. }
  357. static func numberWithoutprecedingZero(str: String) -> String {
  358. let formatter = NumberFormatter()
  359. let number = formatter.number(from: str)
  360. return "\(number ?? 0)" ?? ""
  361. }
  362. static func getAppVersion () -> String? {
  363. let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
  364. print(version)
  365. return version
  366. }
  367. static func getOsVersion() -> String {
  368. let version = UIDevice.current.systemVersion
  369. return version
  370. }
  371. static func getPhoneBrand() -> String {
  372. let phoneName = UIDevice.current.model
  373. return phoneName
  374. }
  375. static func getPhoneOs() -> String {
  376. let os = UIDevice.current.systemName
  377. return os
  378. }
  379. static func getUUid() -> String? {
  380. let uuid = UIDevice.current.identifierForVendor?.uuidString
  381. return uuid
  382. }
  383. static func getCliendId() -> String {
  384. return "172017F9EC11222E8107142733"
  385. }
  386. }
  387. extension Utility {
  388. static func getLanguages() -> [SendMoneyCountryViewModel] {
  389. let english = SendMoneyCountryViewModel()
  390. english.name = "english_language_text".localized()
  391. english.id = "english_language_text"
  392. english.title = "English"
  393. english.code = "en"
  394. let korean = SendMoneyCountryViewModel()
  395. korean.name = "korean_language_text".localized()
  396. korean.id = "korean_language_text"
  397. korean.title = "한국"
  398. korean.code = "kr"
  399. let cambodia = SendMoneyCountryViewModel()
  400. cambodia.name = "cambodia_lanugage_text".localized()
  401. cambodia.id = "cambodia_lanugage_text"
  402. cambodia.title = "ភាសាខ្មែរ"
  403. cambodia.code = "kh"
  404. let srilanka = SendMoneyCountryViewModel()
  405. srilanka.name = "srilanka_lanugage_text".localized()
  406. srilanka.id = "srilanka_lanugage_text"
  407. srilanka.title = "සිංහල"
  408. srilanka.code = "lk"
  409. let myanmar = SendMoneyCountryViewModel()
  410. myanmar.name = "myanmar_language_text".localized()
  411. myanmar.id = "myanmar_language_text"
  412. myanmar.title = "Myanmar"
  413. myanmar.code = "mm"
  414. let russian = SendMoneyCountryViewModel()
  415. russian.name = "russian_langugae_text".localized()
  416. russian.id = "русский"
  417. russian.title = "русский"
  418. russian.code = "ru"
  419. let vietnam = SendMoneyCountryViewModel()
  420. vietnam.name = "vietnam_language_text".localized()
  421. vietnam.id = "vietnam_language_text"
  422. vietnam.title = "Tiếng Việt"
  423. vietnam.code = "vn"
  424. let thailand = SendMoneyCountryViewModel()
  425. thailand.name = "thailand_language_text".localized()
  426. thailand.id = "thailand_language_text"
  427. thailand.title = "ไทย"
  428. thailand.code = "th"
  429. let indonesia = SendMoneyCountryViewModel()
  430. indonesia.name = "indonesia_language_text".localized()
  431. indonesia.id = "indonesia_language_text"
  432. indonesia.title = "Bahasa Indonesia"
  433. indonesia.code = "id"
  434. let mongolia = SendMoneyCountryViewModel()
  435. mongolia.name = "mongolia_language_text".localized()
  436. mongolia.id = "mongolia_language_text"
  437. mongolia.title = "Монгол"
  438. mongolia.code = "mn"
  439. let nepal = SendMoneyCountryViewModel()
  440. nepal.name = "nepali_language_text".localized()
  441. nepal.id = "nepali_language_text"
  442. nepal.title = "नेपाली"
  443. nepal.code = "np"
  444. let bangladesh = SendMoneyCountryViewModel()
  445. bangladesh.name = "bengali_language_text".localized()
  446. bangladesh.id = "bengali_language_text"
  447. bangladesh.title = "বাংলা"
  448. bangladesh.code = "bd"
  449. let uzbek = SendMoneyCountryViewModel()
  450. uzbek.name = "uzbek_language_text".localized()
  451. uzbek.id = "uzbek_language_text"
  452. uzbek.title = "O'zbek"
  453. uzbek.code = "uz"
  454. let languages = [english, korean, cambodia, srilanka, thailand, indonesia, mongolia, myanmar, nepal, bangladesh, russian, uzbek, vietnam ]
  455. // let languages = [english, korean, cambodia, srilanka, myanmar, russian, vietnam, thailand, indonesia, mongolia]
  456. return languages
  457. }
  458. }