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.

462 lines
15 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
  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. static func isVerifiedUser() -> Bool {
  159. let val = (UserDefaults.standard.object(forKey: UserKeys.verified) as? Bool ) ?? false
  160. return val
  161. }
  162. static func didSubmitKyc() -> Bool {
  163. let val = (UserDefaults.standard.object(forKey: UserKeys.kyc) as? Bool ) ?? false
  164. return val
  165. }
  166. static func isCriticalUpdate() -> Bool {
  167. let val = (UserDefaults.standard.object(forKey: AppConstants.criticalUpdate) as? String )?.lowercased() == "Y".lowercased()
  168. return val
  169. }
  170. static func didPennyTestRequested() -> Bool {
  171. let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? "0" == PennyTestStatusCode.requested.rawValue // 0 is false and "1" = true 2 = cancelled
  172. return val
  173. }
  174. static func pennyTestPresentedOnce() -> Bool {
  175. let val = UserDefaults.standard.bool(forKey: AppConstants.pennyTestPresentedOnce)
  176. return val
  177. }
  178. static func didPennyTestCancelled() -> Bool {
  179. let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? "0" == PennyTestStatusCode.cancelled.rawValue
  180. return val
  181. }
  182. static func didPennyTestNotInitiated() -> Bool {
  183. let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.notStarted.rawValue
  184. return val
  185. }
  186. static func pennyTestVerified() -> Bool {
  187. let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue
  188. return val
  189. }
  190. static func shouldShowPennyTestError() -> Bool {
  191. let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue != PennyTestStatusCode.completed.rawValue
  192. return val
  193. }
  194. static func shouldShowPennyTestScreen() -> Bool {
  195. let completed = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue
  196. let cancelled = Utility.didPennyTestCancelled()
  197. let requested = Utility.didPennyTestRequested()
  198. return !cancelled && !completed && !requested
  199. }
  200. static func getMyUserName() -> String {
  201. let defaults = UserDefaults.standard
  202. let myUsername = defaults.string(forKey: UserKeys.userId) ?? ""
  203. return myUsername
  204. }
  205. static func getMyId() -> String {
  206. let defaults = UserDefaults.standard
  207. let myId = defaults.string(forKey: UserKeys.senderId) ?? ""
  208. return myId
  209. }
  210. static func getMyKftcClientId() -> String {
  211. let defaults = UserDefaults.standard
  212. let myId = defaults.string(forKey: UserKeys.kftcClientId) ?? ""
  213. return myId
  214. }
  215. static func getMyIdNumber() -> String {
  216. let defaults = UserDefaults.standard
  217. let myId = defaults.string(forKey: UserKeys.idNumber) ?? ""
  218. return myId
  219. }
  220. static func getMyPrimaryAccountNumber() -> String {
  221. let defaults = UserDefaults.standard
  222. let val = defaults.string(forKey: UserKeys.primaryAccountNumber) ?? ""
  223. print(val)
  224. return val
  225. }
  226. static func isValidEmail(email: String) -> Bool {
  227. let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
  228. let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegex)
  229. return emailTest.evaluate(with: email)
  230. }
  231. static func getCommaSeperatedString(numberString: String) -> String? {
  232. let text = numberString.filter({ $0 != "," })
  233. if let number = Double(text) {
  234. let nsNumber = NSNumber.init(value: number)
  235. let currencyFormatter = NumberFormatter()
  236. currencyFormatter.numberStyle = .decimal
  237. let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber)
  238. let text = commaSeperatedNumberString?.replacingOccurrences(of: ".", with: ",")
  239. return text
  240. }
  241. return nil
  242. }
  243. static func getCommaSeperatedStringWithDecimal(numberString: String) -> String? {
  244. let text = numberString.filter({ $0 != "," })
  245. if let number = Double(text) {
  246. let nsNumber = NSNumber.init(value: number)
  247. let currencyFormatter = NumberFormatter()
  248. currencyFormatter.numberStyle = .decimal
  249. currencyFormatter.groupingSize = 3
  250. currencyFormatter.usesGroupingSeparator = true
  251. let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber)
  252. return commaSeperatedNumberString
  253. }
  254. return nil
  255. }
  256. static func save(user: User?, accessCodeBase64: String? = nil, password: String? = nil, login: Bool? = false) {
  257. func save(value: Any?, forKey: String) {
  258. let defaults = UserDefaults.standard
  259. defaults.set(value, forKey: forKey)
  260. }
  261. save(value: user?.dpUrl ?? "", forKey: UserKeys.dpUrl)
  262. save(value: user?.walletNumber ?? "", forKey: UserKeys.walletNumber)
  263. save(value: user?.primaryBankName ?? "", forKey: UserKeys.primaryBankName)
  264. let firstName = user?.firstName ?? ""
  265. let middleName = user?.lastName ?? ""
  266. let lastName = user?.lastName ?? ""
  267. let fullName = firstName + " " + middleName + " " + lastName
  268. save(value: fullName, forKey: UserKeys.fullName)
  269. save(value: firstName, forKey: UserKeys.firstName)
  270. save(value: lastName, forKey: UserKeys.lastName)
  271. if login ?? false {
  272. save(value: accessCodeBase64, forKey: UserKeys.accessCode)
  273. save(value: user?.kftcClientId ?? "", forKey: UserKeys.kftcClientId)
  274. }
  275. save(value: user?.userId ?? "", forKey: UserKeys.userId)
  276. save(value: user?.nickName ?? "", forKey: UserKeys.nickName)
  277. save(value: user?.availableBalance ?? "", forKey: user?.availableBalance ?? "0" )
  278. save(value: user?.rewardPoint ?? "", forKey: UserKeys.rewardPoint)
  279. save(value: user?.verified ?? false, forKey: UserKeys.verified)
  280. save(value: user?.kyc ?? "", forKey: UserKeys.kyc)
  281. save(value: user?.email ?? "", forKey: UserKeys.email)
  282. save(value: user?.mobileNumber ?? "", forKey: UserKeys.mobileNumber)
  283. save(value: user?.sourceId ?? "", forKey: UserKeys.sourceId)
  284. save(value: password, forKey: "com.gmeremit.password")
  285. save(value: user?.isReferred ?? "", forKey: UserKeys.isReferred)
  286. save(value: user?.idType ?? "", forKey: UserKeys.idType)
  287. save(value: user?.idNumber ?? "", forKey: UserKeys.idNumber)
  288. save(value: user?.country ?? "" , forKey: UserKeys.country)
  289. save(value: user?.countryCode, forKey: UserKeys.countryCode)
  290. save(value: user?.primaryAccountNumber, forKey: UserKeys.primaryAccountNumber)
  291. save(value: user?.senderId, forKey: UserKeys.senderId)
  292. save(value: user?.yearlyLimit, forKey: UserKeys.yearlyLimit)
  293. save(value: user?.dateOfBirth, forKey: UserKeys.dateOfBirth)
  294. save(value: user?.pennyTestStatus, forKey: AppConstants.pennyTestStatusCode)
  295. }
  296. static func numberWithoutprecedingZero(str: String) -> String {
  297. let formatter = NumberFormatter()
  298. let number = formatter.number(from: str)
  299. return "\(number ?? 0)" ?? ""
  300. }
  301. static func getAppVersion () -> String? {
  302. let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
  303. print(version)
  304. return version
  305. }
  306. static func getOsVersion() -> String {
  307. let version = UIDevice.current.systemVersion
  308. return version
  309. }
  310. static func getPhoneBrand() -> String {
  311. let phoneName = UIDevice.current.model
  312. return phoneName
  313. }
  314. static func getPhoneOs() -> String {
  315. let os = UIDevice.current.systemName
  316. return os
  317. }
  318. static func getUUid() -> String? {
  319. let uuid = UIDevice.current.identifierForVendor?.uuidString
  320. return uuid
  321. }
  322. static func getCliendId() -> String {
  323. return "172017F9EC11222E8107142733"
  324. }
  325. }
  326. extension Utility {
  327. static func getLanguages() -> [SendMoneyCountryViewModel] {
  328. let english = SendMoneyCountryViewModel()
  329. english.name = "english_language_text".localized()
  330. english.id = "english_language_text"
  331. english.title = "English"
  332. english.code = "en"
  333. let korean = SendMoneyCountryViewModel()
  334. korean.name = "korean_language_text".localized()
  335. korean.id = "korean_language_text"
  336. korean.title = "한국"
  337. korean.code = "kr"
  338. let cambodia = SendMoneyCountryViewModel()
  339. cambodia.name = "cambodia_lanugage_text".localized()
  340. cambodia.id = "cambodia_lanugage_text"
  341. cambodia.title = "ភាសាខ្មែរ"
  342. cambodia.code = "kh"
  343. let srilanka = SendMoneyCountryViewModel()
  344. srilanka.name = "srilanka_lanugage_text".localized()
  345. srilanka.id = "srilanka_lanugage_text"
  346. srilanka.title = "සිංහල"
  347. srilanka.code = "lk"
  348. let myanmar = SendMoneyCountryViewModel()
  349. myanmar.name = "myanmar_language_text".localized()
  350. myanmar.id = "myanmar_language_text"
  351. myanmar.title = "Myanmar"
  352. myanmar.code = "mm"
  353. let russian = SendMoneyCountryViewModel()
  354. russian.name = "russian_langugae_text".localized()
  355. russian.id = "русский"
  356. russian.title = "русский"
  357. russian.code = "ru"
  358. let vietnam = SendMoneyCountryViewModel()
  359. vietnam.name = "vietnam_language_text".localized()
  360. vietnam.id = "vietnam_language_text"
  361. vietnam.title = "Tiếng Việt"
  362. vietnam.code = "vn"
  363. let thailand = SendMoneyCountryViewModel()
  364. thailand.name = "thailand_language_text".localized()
  365. thailand.id = "thailand_language_text"
  366. thailand.title = "ไทย"
  367. thailand.code = "th"
  368. let indonesia = SendMoneyCountryViewModel()
  369. indonesia.name = "indonesia_language_text".localized()
  370. indonesia.id = "indonesia_language_text"
  371. indonesia.title = "Bahasa Indonesia"
  372. indonesia.code = "id"
  373. let mongolia = SendMoneyCountryViewModel()
  374. mongolia.name = "mongolia_language_text".localized()
  375. mongolia.id = "mongolia_language_text"
  376. mongolia.title = "Монгол"
  377. mongolia.code = "mn"
  378. let nepal = SendMoneyCountryViewModel()
  379. nepal.name = "nepali_language_text".localized()
  380. nepal.id = "nepali_language_text"
  381. nepal.title = "नेपाली"
  382. nepal.code = "np"
  383. let bangladesh = SendMoneyCountryViewModel()
  384. bangladesh.name = "bengali_language_text".localized()
  385. bangladesh.id = "bengali_language_text"
  386. bangladesh.title = "বাংলা"
  387. bangladesh.code = "bd"
  388. let uzbek = SendMoneyCountryViewModel()
  389. uzbek.name = "uzbek_language_text".localized()
  390. uzbek.id = "uzbek_language_text"
  391. uzbek.title = "O'zbek"
  392. uzbek.code = "uz"
  393. let languages = [english, korean, cambodia, srilanka, thailand, indonesia, mongolia, myanmar, nepal, bangladesh, russian, uzbek, vietnam ]
  394. // let languages = [english, korean, cambodia, srilanka, myanmar, russian, vietnam, thailand, indonesia, mongolia]
  395. return languages
  396. }
  397. }