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.

354 lines
14 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. //
  2. // SendMoneyVerificationViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 28/08/2018.
  6. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. class SendMoneyVerificationViewController: UITableViewController {
  10. struct StringConstants {
  11. let recieverDetails = "reciever_details_text".localized()
  12. let transactionDetails = "transaction_detail_text".localized()
  13. let readNAgreeText = "i_have_read_to_text".localized()
  14. let userAgreementText = "gme_user_aggreement_text".localized()
  15. let agreeAndSendText = "agree_and_send_text".localized()
  16. }
  17. // MARK: IBOutlets
  18. // Recievers Details
  19. @IBOutlet weak var fullNameLabel: UILabel!
  20. @IBOutlet weak var addressLabel: UILabel!
  21. @IBOutlet weak var countryLabel: UILabel!
  22. @IBOutlet weak var mobileLabel: UILabel!
  23. @IBOutlet weak var fullNameTitleLabel: UILabel!
  24. @IBOutlet weak var addressTitleLabel: UILabel!
  25. @IBOutlet weak var countryTitleLabel: UILabel!
  26. @IBOutlet weak var mobileTitleLabel: UILabel!
  27. // Transation Details
  28. @IBOutlet weak var payoutCountryLabel: UILabel!
  29. @IBOutlet weak var payoutModeLabel: UILabel!
  30. @IBOutlet weak var payingAmountLabel: UILabel!
  31. @IBOutlet weak var exchangeRateLabel: UILabel!
  32. @IBOutlet weak var serviceChargeLabel: UILabel!
  33. @IBOutlet weak var payoutAgentBankLabel: UILabel!
  34. @IBOutlet weak var payoutCountryTitleLabel: UILabel!
  35. @IBOutlet weak var payoutModeTitleLabel: UILabel!
  36. @IBOutlet weak var payingAmountTitleLabel: UILabel!
  37. @IBOutlet weak var exchangeRateTitleLabel: UILabel!
  38. @IBOutlet weak var serviceChargeTitleLabel: UILabel!
  39. @IBOutlet weak var payoutAgentBankTitleLabel: UILabel!
  40. // title labels
  41. @IBOutlet weak var recieverDetailsLabel: UILabel!
  42. @IBOutlet weak var transactionDetailsLabel: UILabel!
  43. @IBOutlet weak var readAndAgreeTextLabel: UILabel!
  44. @IBOutlet weak var userAgreementButton: UIButton!
  45. @IBOutlet weak var agreeAndSendButton: UIButton!
  46. var url: String?
  47. // MARK: Keyoboard Properties
  48. var mQwertyTransKeyView : TransKeyView!
  49. var mNumberTransKeyView : TransKeyView!
  50. var secureKey : NSData!
  51. var numberCipherString : String!
  52. var qwertyCipherString : String!
  53. var isTranskeyShowing : Bool!
  54. var isShowQwerty : Bool!
  55. var isShowNumber : Bool!
  56. var encryptedText: String! {
  57. didSet {
  58. self.password = encryptedText
  59. }
  60. }
  61. var encryptedNumber: String! {
  62. didSet {
  63. self.password = encryptedNumber
  64. }
  65. }
  66. // MARK: Properties
  67. var presenter: SendMoneyVerificationModuleInterface?
  68. var reciepient: Recipient?
  69. var requestModel: SendMoneyRequestModel?
  70. var hudDelegate: HUDStatusDelegate?
  71. var password: String? {
  72. didSet {
  73. if let model = self.requestModel, let reciepient = self.reciepient {
  74. model.transactionPassword = password ?? ""
  75. self.presenter?.submit(model: model, reciepient: reciepient)
  76. }
  77. }
  78. }
  79. // MARK: VC's Life cycle
  80. override func viewDidLoad() {
  81. super.viewDidLoad()
  82. self.keyboardSetup()
  83. self.setup()
  84. self.configureLanguage()
  85. }
  86. override func viewWillAppear(_ animated: Bool) {
  87. super.viewWillAppear(animated)
  88. populateRecieversInformations()
  89. populateTransactionDetails()
  90. }
  91. override func viewDidDisappear(_ animated: Bool) {
  92. super.viewDidDisappear(animated)
  93. mQwertyTransKeyView?.mTK_ClearDelegateSubviews()
  94. mNumberTransKeyView?.mTK_ClearDelegateSubviews()
  95. if isTranskeyShowing == false{
  96. mQwertyTransKeyView?.delegate = nil;
  97. mNumberTransKeyView?.delegate = nil;
  98. }
  99. }
  100. override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  101. return UITableViewAutomaticDimension
  102. }
  103. override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
  104. return 200
  105. }
  106. // MARK: IBActions
  107. @IBAction func showUserAgreement(_ sender: UIButton) {
  108. let webController = UIStoryboard.init(name: "Storyboard", bundle: nil).instantiateViewController(withIdentifier: "WebLinksViewController") as! WebLinksViewController
  109. webController.titleString = "User Agreement"
  110. webController.url = self.url ?? "https://online.gmeremit.com/Terms"
  111. let nav = UINavigationController.init(rootViewController: webController)
  112. self.present(nav, animated: true, completion: nil)
  113. }
  114. @IBAction func submit(_ sender: UIButton) {
  115. self.askPassword()
  116. }
  117. // MARK: Other Functions
  118. private func setup() {
  119. configureLanguage()
  120. }
  121. private func configureLanguage() {
  122. self.fullNameTitleLabel.text = "full_name_text".localized()
  123. self.addressTitleLabel.text = "address_text".localized()
  124. self.countryTitleLabel.text = "country_text".localized()
  125. self.mobileTitleLabel.text = "mobile_text".localized()
  126. self.payoutCountryTitleLabel.text = "payout_country_text".localized()
  127. self.payoutModeTitleLabel.text = "payout_mode_text".localized()
  128. self.payingAmountTitleLabel.text = "paying_amount_text".localized()
  129. self.exchangeRateTitleLabel.text = "exchange_rate_text".localized()
  130. self.serviceChargeTitleLabel.text = "service_charge_text".localized()
  131. self.payoutAgentBankTitleLabel.text = "payout_agent_text".localized()
  132. self.recieverDetailsLabel.text = StringConstants().recieverDetails
  133. self.transactionDetailsLabel.text = StringConstants().transactionDetails
  134. self.readAndAgreeTextLabel.text = StringConstants().readNAgreeText
  135. self.userAgreementButton.setTitle(StringConstants().userAgreementText, for: .normal)
  136. self.agreeAndSendButton.setTitle(StringConstants().agreeAndSendText
  137. , for: .normal)
  138. }
  139. private func keyboardSetup() {
  140. isShowNumber = false
  141. isShowQwerty = false
  142. isTranskeyShowing = false
  143. let iv: Array<String> = ["M", "o", "b", "i", "l", "e", "T", "r" , "a", "n", "s", "K", "e", "y", "1", "0"]
  144. secureKey = NSData(bytes: iv, length: 16)
  145. setQwertyTranskey()
  146. setNumberTranskey()
  147. }
  148. private func setQwertyTranskey(){
  149. mQwertyTransKeyView = TransKeyView()
  150. mQwertyTransKeyView?.mTK_Init(self)
  151. mQwertyTransKeyView?.delegate = self
  152. mQwertyTransKeyView?.mTK_MakeSecureKey()
  153. mQwertyTransKeyView?.mTK_Supported(byDeviceOrientation: SupportedByDevicePortraitAndLandscape)
  154. mQwertyTransKeyView?.mTK_LicenseCheck("license_IBK_TEST_IONEBANK_20181105_20190531")
  155. }
  156. private func setNumberTranskey(){
  157. mNumberTransKeyView = TransKeyView()
  158. mNumberTransKeyView?.mTK_Init(self)
  159. mNumberTransKeyView?.delegate = self
  160. mNumberTransKeyView?.mTK_MakeSecureKey()
  161. mNumberTransKeyView?.mTK_Supported(byDeviceOrientation: SupportedByDevicePortraitAndLandscape)
  162. mNumberTransKeyView?.mTK_LicenseCheck("license_IBK_TEST_IONEBANK_20181105_20190531")
  163. }
  164. private func populateRecieversInformations() {
  165. self.fullNameLabel.text = self.reciepient?.getFullName()
  166. self.addressLabel.text = self.reciepient?.address
  167. self.countryLabel.text = self.reciepient?.country
  168. self.mobileLabel.text = self.reciepient?.mobileNumber
  169. }
  170. private func populateTransactionDetails() {
  171. self.payoutCountryLabel.text = self.reciepient?.country
  172. self.payoutModeLabel.text = self.requestModel?.paymemtMode?.mode
  173. self.payingAmountLabel.text = (self.requestModel?.exchangeRateDetail?.recipientAmount ?? "") + " \(self.requestModel?.exchangeRateDetail?.reciepientCurrency ?? "")"
  174. self.exchangeRateLabel.text = self.requestModel?.exchangeRateDetail?.exchangeRate
  175. self.serviceChargeLabel.text = self.requestModel?.exchangeRateDetail?.transferFee
  176. self.payoutAgentBankLabel.text = self.requestModel?.bank?.name
  177. }
  178. func askPassword() {
  179. if (self.requestModel?.autoDebitAccount?.type ?? "").lowercased() == "wallet" {
  180. showQwertyTranskeyAction()
  181. return
  182. }
  183. SendMoneyCodeWireframe().open(completion: self.otpEntered, source: self)
  184. }
  185. func otpEntered(otp: String) {
  186. self.encryptedNumber = otp
  187. }
  188. // start keyboard
  189. private func showQwertyTranskeyAction() {
  190. if mQwertyTransKeyView?.isBeingPresented == false {
  191. isShowQwerty = true
  192. isTranskeyShowing = true
  193. let hintStr = String(format:"pasword", 0)
  194. let font = UIFont(name: "Arial", size: 15)
  195. mQwertyTransKeyView?.mTK_SetHint(hintStr, font: font)
  196. // mQwertyTransKeyView?.mTK_ShowMessageIfMaxLength("16 .")i
  197. mQwertyTransKeyView?.mTK_UseCursor(true)
  198. mQwertyTransKeyView?.mTK_UseAllDeleteButton(true)
  199. mQwertyTransKeyView?.mTK_UseNavigationBar(true)
  200. mQwertyTransKeyView?.mTK_UseVoiceOver(true)
  201. mQwertyTransKeyView?.mTK_setHideInputPasswordDelay(3)
  202. mQwertyTransKeyView?.mTK_SetControlCenter(false)
  203. mQwertyTransKeyView?.mTK_setIgnoreStatusbar(false)
  204. mQwertyTransKeyView?.mTK_Supported(byDeviceOrientation: SupportedByDevicePortraitAndLandscape)
  205. mQwertyTransKeyView?.setKeyboardType(self,
  206. keypadType: 0,
  207. mTK_inputType: 2,
  208. mTK_inputTitle: "입력",
  209. mTK_cryptType: 0,
  210. mTK_maxLength: 100,
  211. mTK_minLength: 0,
  212. mTK_keypadUpper: false,
  213. mTK_languageType: 0)
  214. mQwertyTransKeyView?.mTK_EnableSamekeyInputDataEncrypt(false)
  215. mQwertyTransKeyView?.mTK_SetUseBalloonImageButton(true)
  216. if let mQwertyTransKeyView = mQwertyTransKeyView {
  217. self.present(mQwertyTransKeyView, animated: true, completion: nil)
  218. }
  219. }
  220. }
  221. func showNumberTranskeyAction(){
  222. if mNumberTransKeyView?.isBeingPresented == false{
  223. isShowNumber = true
  224. isTranskeyShowing = true
  225. mNumberTransKeyView?.mTK_SetHint("password", font:UIFont(name:"Arial", size: 15.0))
  226. mNumberTransKeyView?.mTK_ShowMessageIfMinLength("0자리 이상 입력해주세요.")
  227. mNumberTransKeyView?.mTK_ShowMessageIfMaxLength("16자리 입력이 초과되었습니다.")
  228. mNumberTransKeyView?.mTK_UseVoiceOver(false)
  229. mNumberTransKeyView?.mTK_setIgnoreStatusbar(false)
  230. mNumberTransKeyView?.mTK_SetControlCenter(false)
  231. mNumberTransKeyView?.mTK_UseAllDeleteButton(false)
  232. mNumberTransKeyView?.mTK_Supported(byDeviceOrientation: SupportedByDevicePortraitAndLandscape)
  233. mNumberTransKeyView?.setKeyboardType(self,
  234. keypadType: TransKeyKeypadTypeText,
  235. mTK_inputType: 2,
  236. mTK_inputTitle: "password",
  237. mTK_cryptType: 0,
  238. mTK_maxLength: 16,
  239. mTK_minLength: 0,
  240. mTK_keypadUpper: false,
  241. mTK_languageType: Int(mTK_Language_English.rawValue))
  242. if let mNumberTransKeyView = mNumberTransKeyView {
  243. self.present(mNumberTransKeyView, animated: true, completion: nil)
  244. }
  245. }
  246. }
  247. }
  248. // MARK: SendMoneyVerificationViewInterface
  249. extension SendMoneyVerificationViewController: SendMoneyVerificationViewInterface {
  250. func show(model: SendMoneySubmitModelContainer?) {
  251. self.alertWithOk(message: model?.message , title: "Success", okTitle: "OK", style: UIAlertControllerStyle.alert, OkStyle: .default) {
  252. if let id = model?.id {
  253. self.presenter?.openReciept(transactionId: id)
  254. }else {
  255. self.alert(message: "No Transaction recievied.")
  256. }
  257. }
  258. }
  259. func show(error: String) {
  260. // self.presenter?.openReciept(transactionId: "1235")
  261. self.alert(message: error)
  262. }
  263. func showLoading() {
  264. self.hudDelegate?.showLoading()
  265. }
  266. func hideLoading() {
  267. self.hudDelegate?.hideLoading()
  268. }
  269. }
  270. extension SendMoneyVerificationViewController {
  271. override func didMove(toParentViewController parent: UIViewController?) {
  272. self.viewWillAppear(true)
  273. }
  274. }
  275. extension SendMoneyVerificationViewController: TransKeyViewDelegate {
  276. func secureInputFinish(_ type: Int) {
  277. NSLog("secureInputFinish Btn Type : %d", type)
  278. NSLog("secureInputFinish");
  279. var targetView : TransKeyView?
  280. NSLog("qwerty : " + isShowQwerty.description + " number : " + isShowNumber.description)
  281. if isShowQwerty == true{
  282. qwertyCipherString = mQwertyTransKeyView?.mTK_GetSecureData()
  283. if mQwertyTransKeyView?.mTK_GetDataLength() == 0 {
  284. self.encryptedText = ""
  285. }else {
  286. self.encryptedText = qwertyCipherString
  287. }
  288. self.encryptedText = qwertyCipherString
  289. targetView = mQwertyTransKeyView
  290. }
  291. if isShowNumber == true{
  292. numberCipherString = mNumberTransKeyView?.mTK_GetSecureData()
  293. self.encryptedNumber = numberCipherString
  294. self.encryptedText = numberCipherString
  295. targetView = mNumberTransKeyView
  296. }
  297. isShowQwerty = false
  298. isShowNumber = false
  299. isTranskeyShowing = false
  300. targetView?.dismiss(animated: true, completion: nil)
  301. }
  302. }