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.

464 lines
12 KiB

6 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
5 years ago
5 years ago
6 years ago
4 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. import UIKit
  10. class AppConstants {
  11. static let uuid = "uuid"
  12. static let dateFormat = "yyyy-MM-dd"
  13. static let humanReadableDateFormat = "MMM d, yyyy"
  14. static let errorBorderWidth: CGFloat = 0.1
  15. static let emergencyLogoutErrorCode = -1111
  16. static let maxKoreanMobileNoLength = 11
  17. static let MainWireFrameNotificationName = "MainViewControllerSelect"
  18. static let yearlyLimitNotification = "Yearly LImit"
  19. }
  20. enum Devices {
  21. case iphone5
  22. case iphone678
  23. case iphone678Plus
  24. case iphoneX
  25. case ipad
  26. case other
  27. }
  28. //pennyTestStatus='0'-----0 not started, 1 requested , 2 completed
  29. enum PennyTestStatusCode: String {
  30. case notStarted = "0"
  31. case requested = "1"
  32. case completed = "2"
  33. case cancelled = "3"
  34. }
  35. enum Language: String {
  36. case en
  37. case kr
  38. case kh
  39. case lk
  40. case th
  41. case id
  42. case mn
  43. case mm
  44. case np
  45. case bd
  46. case ru
  47. case uz
  48. case vn
  49. case pk
  50. var code: String {
  51. switch self {
  52. case .en, .th, .id, .mn, .uz:
  53. return self.rawValue
  54. case .pk:
  55. return "ur-PK"
  56. case .kr:
  57. return "ko"
  58. case .kh:
  59. return "km"
  60. case .lk:
  61. return "si"
  62. case .mm:
  63. return "my"
  64. case .np:
  65. return "ne"
  66. case .bd:
  67. return "bn"
  68. case .ru:
  69. return "ru-RU"
  70. case .vn:
  71. return "vi-VN"
  72. }
  73. }
  74. var title: String {
  75. switch self {
  76. case .en:
  77. return "English"
  78. case .kr:
  79. return "한국"
  80. case .kh:
  81. return "ភាសាខ្មែរ"
  82. case .lk:
  83. return "සිංහල"
  84. case .th:
  85. return "ไทย"
  86. case .id:
  87. return "Bahasa Indonesia"
  88. case .mn:
  89. return "Монгол"
  90. case .mm:
  91. return "Myanmar"
  92. case .np:
  93. return "नेपाली"
  94. case .bd:
  95. return "বাংলা"
  96. case .ru:
  97. return "русский"
  98. case .uz:
  99. return "O\'zbek"
  100. case .vn:
  101. return "Tiếng Việt"
  102. case .pk:
  103. return "پاکستان"
  104. }
  105. }
  106. }
  107. extension String {
  108. var languageCode: Language? {
  109. switch self {
  110. case "ko", "kr":
  111. return .kr
  112. case "km", "kh":
  113. return .kh
  114. case "si", "lk":
  115. return .lk
  116. case "my", "mm":
  117. return .mm
  118. case "ne", "np":
  119. return .np
  120. case "bn", "bd":
  121. return .bd
  122. case "ru-RU", "ru":
  123. return .ru
  124. case "vi-VN", "vn":
  125. return .vn
  126. case "ur-PK", "pk":
  127. return .pk
  128. case "en", "th", "id", "mn", "uz":
  129. return Language.init(rawValue: self)!
  130. default:
  131. return nil
  132. }
  133. }
  134. }
  135. class Utility {
  136. static let database = GMEDB.shared
  137. static func getDeviceModel() -> Devices {
  138. if UIDevice.current.userInterfaceIdiom == .phone {
  139. switch UIScreen.main.nativeBounds.height {
  140. case 1136:
  141. return .iphone5
  142. case 1334:
  143. return .iphone678
  144. case 2208:
  145. return .iphone678Plus
  146. case 2436:
  147. return .iphoneX
  148. default:
  149. return .other
  150. }
  151. } else {
  152. return .ipad
  153. }
  154. }
  155. static func getLanguageHeader(for currentLanugage: String) -> String {
  156. var header = ""
  157. switch currentLanugage {
  158. case "ko":
  159. header = "kr"
  160. case "km":
  161. header = "kh"
  162. case "si":
  163. header = "lk"
  164. case "my":
  165. header = "mm"
  166. case "ne":
  167. header = "np"
  168. case "bn":
  169. header = "bd"
  170. case "ru-RU":
  171. header = "ru"
  172. case "vi-VN":
  173. header = "vn"
  174. case "uz":
  175. header = "uz"
  176. case "mn":
  177. header = "mn"
  178. case "id":
  179. header = "id"
  180. case "th":
  181. header = "th"
  182. case "ur-PK":
  183. header = "pk"
  184. default:
  185. header = "en"
  186. }
  187. return header
  188. }
  189. static func isVerifiedUser() -> Bool {
  190. return database.user.bool(.verified)
  191. }
  192. static func didSubmitKyc() -> Bool {
  193. return database.user.bool(.kyc)
  194. }
  195. static func isCriticalUpdate() -> Bool {
  196. return database.app.string(.criticalUpdate)?.lowercased() == "Y".lowercased()
  197. }
  198. static func getMyUserName() -> String {
  199. return database.user.string(.userId) ?? ""
  200. }
  201. static func getMyId() -> String {
  202. return database.user.string(.senderId) ?? ""
  203. }
  204. static func getMyKftcClientId() -> String {
  205. return database.user.string(.kftcClientId) ?? ""
  206. }
  207. static func getMyIdNumber() -> String {
  208. return database.user.string(.idNumber) ?? ""
  209. }
  210. static func getMyPrimaryAccountNumber() -> String {
  211. return database.user.string(.primaryAccountNumber) ?? ""
  212. }
  213. static func isValidEmail(email: String) -> Bool {
  214. let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
  215. let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegex)
  216. return emailTest.evaluate(with: email)
  217. }
  218. static func getCommaSeperatedString(numberString: String) -> String? {
  219. let text = numberString.extract(regex: "[0-9.]")
  220. if let number = Double(text) {
  221. let nsNumber = NSNumber.init(value: number)
  222. let currencyFormatter = NumberFormatter()
  223. currencyFormatter.locale = Locale(identifier: "en_US")
  224. currencyFormatter.numberStyle = .decimal
  225. let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber)
  226. let text = commaSeperatedNumberString?.replacingOccurrences(of: ".", with: ",")
  227. return text
  228. }
  229. return nil
  230. }
  231. static func getCommaSeperatedStringWithDecimal(numberString: String) -> String? {
  232. let text = numberString.extract(regex: "[0-9.]")
  233. if let number = Double(text) {
  234. let nsNumber = NSNumber.init(value: number)
  235. let currencyFormatter = NumberFormatter()
  236. currencyFormatter.locale = Locale(identifier: "en_US")
  237. currencyFormatter.numberStyle = .decimal
  238. currencyFormatter.groupingSize = 3
  239. currencyFormatter.usesGroupingSeparator = true
  240. let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber)
  241. return commaSeperatedNumberString
  242. }
  243. return nil
  244. }
  245. static func save(
  246. user: User?,
  247. accessCodeBase64: String? = nil,
  248. password: String? = nil,
  249. login: Bool? = false
  250. ) {
  251. if login ?? false {
  252. GMEDB
  253. .shared
  254. .user
  255. .set(accessCodeBase64, .accessCode)
  256. .set(user?.kftcClientId, .kftcClientId)
  257. }
  258. GMEDB
  259. .shared
  260. .setUser(user)
  261. // save remind day of KFTC Token
  262. let remindDay = calculateDDay(registDate: user?.accessTokenRegTime)
  263. // let remindDay = calculateDDay(registDate: "7/20/2018 4:49:32 PM")
  264. GMEDB.shared.user.set(remindDay, .remindKFTCTokenDay)
  265. guard let encryptedPassword = password else { return }
  266. let id = GMEDB.shared.user.string(.userId) ?? ""
  267. if id != KeyChain.shared.get(key: .id) {
  268. KeyChain.shared.remove(key: .biometricAuth)
  269. }
  270. KeyChain.shared.save(data: id, key: .id)
  271. KeyChain.shared.save(data: encryptedPassword, key: .password)
  272. KeyChain.shared.save(data: "1", key: .login)
  273. }
  274. static func calculateDDay(registDate: String?) -> String? {
  275. let dateFormatter = DateFormatter()
  276. dateFormatter.dateFormat = "M/d/yyyy h:mm:ss a"
  277. dateFormatter.locale = Locale(identifier: "ko_kr")
  278. dateFormatter.timeZone = TimeZone(abbreviation: "KST")
  279. var dateComponent = DateComponents()
  280. dateComponent.year = 1
  281. guard
  282. let resigstDate = registDate,
  283. let date = dateFormatter.date(from: resigstDate),
  284. let expireDate = Calendar.current.date(byAdding: dateComponent, to: date) else {return nil}
  285. let now = Date()
  286. let calendar = Calendar.current
  287. let startDate = calendar.startOfDay(for: now)
  288. let endDate = calendar.startOfDay(for: expireDate)
  289. guard let remindDay = calendar.dateComponents([.day], from: startDate, to: endDate).day else {
  290. return nil
  291. }
  292. return "\(remindDay)"
  293. }
  294. static func numberWithoutprecedingZero(str: String) -> String {
  295. let formatter = NumberFormatter()
  296. let number = formatter.number(from: str)
  297. return "\(number ?? 0)"
  298. }
  299. static func getAppVersion () -> String? {
  300. let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
  301. return version
  302. }
  303. static func getOsVersion() -> String {
  304. let version = UIDevice.current.systemVersion
  305. return version
  306. }
  307. static func getPhoneBrand() -> String {
  308. let phoneName = UIDevice.current.model
  309. return phoneName
  310. }
  311. static func getPhoneOs() -> String {
  312. let os = UIDevice.current.systemName
  313. return os
  314. }
  315. static func getUUid() -> String? {
  316. let uuid = UIDevice.current.identifierForVendor?.uuidString
  317. return uuid
  318. }
  319. static func getCliendId() -> String {
  320. return "172017F9EC11222E8107142733"
  321. }
  322. }
  323. extension Utility {
  324. static func getLanguages() -> [SendMoneyCountryViewModel] {
  325. let english = SendMoneyCountryViewModel()
  326. english.name = "english_language_text".localized()
  327. english.id = "english_language_text"
  328. english.title = "English"
  329. english.code = "en"
  330. let korean = SendMoneyCountryViewModel()
  331. korean.name = "korean_language_text".localized()
  332. korean.id = "korean_language_text"
  333. korean.title = "한국"
  334. korean.code = "kr"
  335. let cambodia = SendMoneyCountryViewModel()
  336. cambodia.name = "cambodia_lanugage_text".localized()
  337. cambodia.id = "cambodia_lanugage_text"
  338. cambodia.title = "ភាសាខ្មែរ"
  339. cambodia.code = "kh"
  340. let srilanka = SendMoneyCountryViewModel()
  341. srilanka.name = "srilanka_lanugage_text".localized()
  342. srilanka.id = "srilanka_lanugage_text"
  343. srilanka.title = "සිංහල"
  344. srilanka.code = "lk"
  345. let myanmar = SendMoneyCountryViewModel()
  346. myanmar.name = "myanmar_language_text".localized()
  347. myanmar.id = "myanmar_language_text"
  348. myanmar.title = "Myanmar"
  349. myanmar.code = "mm"
  350. let russian = SendMoneyCountryViewModel()
  351. russian.name = "russian_langugae_text".localized()
  352. russian.id = "русский"
  353. russian.title = "русский"
  354. russian.code = "ru"
  355. let vietnam = SendMoneyCountryViewModel()
  356. vietnam.name = "vietnam_language_text".localized()
  357. vietnam.id = "vietnam_language_text"
  358. vietnam.title = "Tiếng Việt"
  359. vietnam.code = "vn"
  360. let thailand = SendMoneyCountryViewModel()
  361. thailand.name = "thailand_language_text".localized()
  362. thailand.id = "thailand_language_text"
  363. thailand.title = "ไทย"
  364. thailand.code = "th"
  365. let indonesia = SendMoneyCountryViewModel()
  366. indonesia.name = "indonesia_language_text".localized()
  367. indonesia.id = "indonesia_language_text"
  368. indonesia.title = "Bahasa Indonesia"
  369. indonesia.code = "id"
  370. let mongolia = SendMoneyCountryViewModel()
  371. mongolia.name = "mongolia_language_text".localized()
  372. mongolia.id = "mongolia_language_text"
  373. mongolia.title = "Монгол"
  374. mongolia.code = "mn"
  375. let nepal = SendMoneyCountryViewModel()
  376. nepal.name = "nepali_language_text".localized()
  377. nepal.id = "nepali_language_text"
  378. nepal.title = "नेपाली"
  379. nepal.code = "np"
  380. let bangladesh = SendMoneyCountryViewModel()
  381. bangladesh.name = "bengali_language_text".localized()
  382. bangladesh.id = "bengali_language_text"
  383. bangladesh.title = "বাংলা"
  384. bangladesh.code = "bd"
  385. let uzbek = SendMoneyCountryViewModel()
  386. uzbek.name = "uzbek_language_text".localized()
  387. uzbek.id = "uzbek_language_text"
  388. uzbek.title = "O'zbek"
  389. uzbek.code = "uz"
  390. let pakistan = SendMoneyCountryViewModel()
  391. pakistan.name = "pakistan_language_text".localized()
  392. pakistan.id = "pakistan_language_text"
  393. pakistan.title = "پاکستان"
  394. pakistan.code = "pk"
  395. let languages = [
  396. english, bangladesh, cambodia, indonesia, korean, nepal, mongolia, myanmar, russian, srilanka,
  397. thailand, uzbek, vietnam
  398. ]
  399. return languages
  400. }
  401. }