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.

792 lines
29 KiB

6 years ago
  1. //
  2. // RecipientTranscationViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by Fm-user on 12/22/17.
  6. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. class RecipientTranscationViewController: UIViewController {
  10. @IBOutlet weak var pickerViewCurrency: UIPickerView!
  11. @IBOutlet weak var viewContainWithKoreanCurrency: UIView!
  12. @IBOutlet weak var viewContainWithOtherCountryCurrency: UIView!
  13. @IBOutlet weak var availableBalance: UILabel!
  14. @IBOutlet weak var viewContentMain: UIView!
  15. @IBOutlet weak var buttonSave: UIButton!
  16. @IBOutlet weak var dropDownCountryButton: UIButton!
  17. @IBOutlet weak var imageViewCountry: UIImageView!
  18. @IBOutlet weak var transferLimitMessageLabel: UILabel!
  19. @IBOutlet weak var moneySendingMessageLabel: UILabel!
  20. @IBOutlet weak var rewardPointlabel: UILabel!
  21. @IBOutlet weak var serviceFeeLabel: UILabel!
  22. @IBOutlet weak var transactionLimit: UILabel!
  23. @IBOutlet weak var labelCurrency: UILabel!
  24. @IBOutlet weak var labelExchangeRate: UILabel!
  25. @IBOutlet weak var viewBalance: UIView!
  26. @IBOutlet weak var viewExchange: UIView!
  27. @IBOutlet weak var textFieldKRW: UITextField!
  28. @IBOutlet weak var textFieldNPR: UITextField!
  29. private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
  30. private var numberPad = UIKeyboardType.numberPad
  31. private var amountNPR: Float!
  32. private var networkDialogShown: Bool = false
  33. private var buttomCurrencyStatus: Bool?
  34. private var isScrolled: Bool = false
  35. //Recieved from previous ViewController
  36. var recipient: Recipient?
  37. var paymentMode: String?
  38. var paymentMethodId: String?
  39. //Recieved, updated and transferred to next
  40. var transferDetails: [String: String]?
  41. //Added for home delivery
  42. var homeDetails: [String: String]?
  43. /// to send exchange body
  44. private var exchangeData: [String: Any]?
  45. private var pickerData: [String] = [String]()
  46. private var calculateBy: String?
  47. private var currencyDetailArray: [Currency] = [Currency]()
  48. private var currencyArray = [String]()
  49. private var transactionviewmodel = TransactionViewModel()
  50. public static var recipientListViewControllerConnectionCheck = 0
  51. @IBAction func selectPaymentMethod(_ sender: Any) {
  52. dismissKeyboard()
  53. performSegue(withIdentifier: "reviewTransfer", sender: nil)
  54. }
  55. override func viewDidLoad() {
  56. super.viewDidLoad()
  57. setUpAnotherLoginListener(genericviewmodel: transactionviewmodel)
  58. pickerViewCurrency.dataSource = self
  59. pickerViewCurrency.delegate = self
  60. let tap = UITapGestureRecognizer(target: self, action: #selector(handleTapKoreanCurrencyView))
  61. tap.delegate = self as? UIGestureRecognizerDelegate
  62. viewContainWithKoreanCurrency.addGestureRecognizer(tap)
  63. let tapOtherView = UITapGestureRecognizer(target: self, action: #selector(handleTapOtherCountryCurrencyView))
  64. tap.delegate = self as? UIGestureRecognizerDelegate
  65. viewContainWithOtherCountryCurrency.addGestureRecognizer(tapOtherView)
  66. ///Background listner
  67. let notificationCenter = NotificationCenter.default
  68. notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: Notification.Name.UIApplicationWillResignActive, object: nil)
  69. setUpNavBar(id: 201, title: "Send Money")
  70. viewContentMain.isHidden = true
  71. buttomCurrencyStatus = true
  72. buttonSave.isUserInteractionEnabled = false
  73. buttonSave.alpha = 0.3
  74. textFieldPlaceHolderAttribute()
  75. countryPickerViewButtonDesign()
  76. transactionviewmodel.transactionViewConnectionTimeOut.value = nil
  77. /**
  78. connection timeout
  79. */
  80. transactionviewmodel.transactionViewConnectionTimeOut.bind { [unowned self] in
  81. guard $0 != nil else {
  82. return
  83. }
  84. self.stopLoading()
  85. if RecipientTranscationViewController.recipientListViewControllerConnectionCheck == 0{
  86. RecipientTranscationViewController.recipientListViewControllerConnectionCheck = RecipientTranscationViewController.recipientListViewControllerConnectionCheck+1
  87. self.popUpMessage(value: 25)
  88. }
  89. }
  90. /**
  91. Check internet connection
  92. */
  93. transactionviewmodel.internetConnection.value = nil
  94. transactionviewmodel.internetConnection.bind { [unowned self] in
  95. guard $0 != nil else {
  96. return
  97. }
  98. self.stopLoading()
  99. if !self.networkDialogShown {
  100. self.popUpMessage(value: 15)
  101. self.networkDialogShown = true
  102. }
  103. }
  104. guard paymentMode != nil else {
  105. self.popUpMessageError(value: 10, message: "Error getting data")
  106. return
  107. }
  108. if paymentMode! == paymentModeType.cashPayment.rawValue {
  109. guard recipient != nil else {
  110. self.popUpMessageError(value: 10, message: "Error getting data")
  111. return
  112. }
  113. } else {
  114. guard transferDetails?.count != 0 && recipient != nil else {
  115. self.popUpMessageError(value: 10, message: "Error getting data")
  116. return
  117. }
  118. transactionviewmodel.setTransferDetails(transferDetails: transferDetails!)
  119. }
  120. exchangeRateBindCall()
  121. transactionInfoBindCall()
  122. currrencyBindCall()
  123. countryBindCall()
  124. self.startLoading()
  125. transactionviewmodel.fetchTransactionInfo(transactionInfo: transactionInfoParam())
  126. transactionviewmodel.fetchCurrency(currencyInfo: currencyParam())
  127. if let countryId = recipient?.countryId{
  128. transactionviewmodel.fetchCountry(countryId: countryId)
  129. }
  130. textFieldKRW.delegate = self
  131. textFieldNPR.delegate = self
  132. viewBalance.layer.cornerRadius = 10
  133. viewExchange.layer.cornerRadius = 10
  134. }
  135. /**
  136. In case when app move to background
  137. */
  138. @objc func appMovedToBackground() {
  139. textFieldKRW.resignFirstResponder()
  140. textFieldNPR.resignFirstResponder()
  141. }
  142. /**
  143. Disable user interaction while fetching data from api
  144. */
  145. func startLoading(){
  146. disableUserInteractions()
  147. showActivityIndicator(activityIndicator: activityIndicator)
  148. }
  149. /**
  150. Enable user interaction while fetching data from api
  151. */
  152. func stopLoading(){
  153. self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
  154. self.enableUserInteractions()
  155. }
  156. /**
  157. Handle tap action in view
  158. */
  159. @objc func handleTapKoreanCurrencyView(){
  160. textFieldKRW.becomeFirstResponder()
  161. }
  162. /**
  163. Handle tap action in view
  164. */
  165. @objc func handleTapOtherCountryCurrencyView(){
  166. textFieldNPR.becomeFirstResponder()
  167. }
  168. /**
  169. Api request for exchange rate
  170. */
  171. func exchangeRateBindCall(){
  172. transactionviewmodel.exchangeRateAvailable.bind { [unowned self] in
  173. guard $0 != nil else {
  174. return
  175. }
  176. self.stopLoading()
  177. guard $0! else {
  178. self.popUpMessageError(value: 10, message: self.transactionviewmodel.getErrorMessage())
  179. self.viewContentMain.isHidden = false
  180. return
  181. }
  182. self.exchangeRateDisplay()
  183. self.serviceFeeDataDisplay()
  184. if self.paymentMode != paymentModeType.cashPayment.rawValue{
  185. if let transferDetails = self.transferDetails{
  186. self.transactionviewmodel.setTransferDetails(transferDetails: transferDetails)
  187. }
  188. }
  189. self.textFieldNPR.text = self.transactionviewmodel.getpAmt()
  190. self.textFieldKRW.text = self.transactionviewmodel.getcAmt()
  191. self.rewardPointlabel.text = "+" + String(self.transactionviewmodel.getRewardPoint())
  192. self.viewContentMain.isHidden = false
  193. self.buttonSave.isUserInteractionEnabled = true
  194. self.buttonSave.alpha = 1
  195. }
  196. }
  197. /**
  198. Api request for transaction info
  199. */
  200. func transactionInfoBindCall(){
  201. transactionviewmodel.transactionInfoAvailable.bind { [weak self] in
  202. guard $0 != nil else {
  203. return
  204. }
  205. self?.stopLoading()
  206. guard $0! else {
  207. self?.popUpMessageError(value: 10, message: (self?.transactionviewmodel.getErrorMessage())!)
  208. self?.viewContentMain.isHidden = false
  209. return
  210. }
  211. if let availableBalance = UserDefaults.standard.object(forKey: "com.gmeremit.balance") as? String {
  212. self?.availableBalance.text = (self?.getCommaAddedAmountString(amountString: availableBalance ))! + " KRW"
  213. }
  214. self?.setTransferLimitMessage(amount: String(format: "%.0f", (self?.transactionviewmodel.getTransferLimit())!))
  215. self?.setTransactionLimit(amount:String(format: "%d", (self?.transactionviewmodel.getTransactionLimit())!))
  216. self?.setMoneySendingMessage(sender:(self?.recipient?.getFullName())!)
  217. self?.viewContentMain.isHidden = false
  218. }
  219. }
  220. /**
  221. Api request for currency
  222. */
  223. func currrencyBindCall(){
  224. transactionviewmodel.currencyInfoAvailable.bind{[weak self] in
  225. guard $0 != nil else {
  226. return
  227. }
  228. self?.stopLoading()
  229. guard $0! else {
  230. self?.popUpMessageError(value: 10, message: (self?.transactionviewmodel.getErrorMessage())!)
  231. self?.viewContentMain.isHidden = false
  232. return
  233. }
  234. if let count = self?.transactionviewmodel.getCurrencyArray().count{
  235. if count > 0{
  236. self?.currencyDetailArray = (self?.transactionviewmodel.getCurrencyArray())!
  237. self?.currencyArray = (self!.currencyDetailArray.map{$0.name!})
  238. if let count = self?.currencyArray.count{
  239. if count > 0{
  240. self?.pickerData = (self?.currencyArray)!
  241. }
  242. }
  243. if let currency = self?.pickerData[0]{
  244. self?.labelCurrency.text = currency
  245. self?.dropDownCountryButton.setTitle(currency + " ", for: UIControlState.normal)
  246. }
  247. }
  248. }
  249. }
  250. }
  251. /**
  252. Api request for country
  253. */
  254. func countryBindCall(){
  255. transactionviewmodel.countryInfoAvailable.bind{[weak self] in
  256. guard $0 != nil else {
  257. return
  258. }
  259. self?.stopLoading()
  260. guard $0! else {
  261. self?.popUpMessageError(value: 10, message: (self?.transactionviewmodel.getErrorMessage())!)
  262. self?.viewContentMain.isHidden = false
  263. return
  264. }
  265. if let flagUrl = self?.transactionviewmodel.getCountryDetail()[0].flagUrl{
  266. self?.imageViewCountry?.sd_setImage(with:URL(string: flagUrl), placeholderImage: nil, options: [.progressiveDownload,.scaleDownLargeImages], completed: nil)
  267. }
  268. }
  269. }
  270. @IBAction func buttonCurrencyTap(_ sender: Any) {
  271. pickerViewCurrency.reloadAllComponents()
  272. if currencyArray.count != 0{
  273. self.pickerData = self.currencyArray
  274. }
  275. buttomCurrencyStatus = !buttomCurrencyStatus!
  276. if buttomCurrencyStatus! {
  277. pickerViewCurrency.isHidden = true
  278. } else {
  279. pickerViewCurrency.isHidden = false
  280. }
  281. }
  282. /**
  283. Get payment method id
  284. */
  285. func getPaymentMethodId() -> String{
  286. if paymentMode == paymentModeType.cashPayment.rawValue || paymentMode == paymentModeType.cashPaymentPartner.rawValue {
  287. paymentMethodId = paymentMethodIdType.cashMethod.rawValue
  288. } else if paymentMode == paymentModeType.bankPayment.rawValue {
  289. paymentMethodId = paymentMethodIdType.bankMethod.rawValue
  290. } else if paymentMode == paymentModeType.homeDelivery.rawValue {
  291. paymentMethodId = paymentMethodIdType.homeMethod.rawValue
  292. }
  293. return paymentMethodId!
  294. }
  295. /**
  296. Get transaction info param
  297. */
  298. func transactionInfoParam() -> [String: String]{
  299. var transactionParam: [String: String]?
  300. if let countryId = recipient?.countryId{
  301. transactionParam = ["countryId": (countryId),
  302. "payoutMethodId": getPaymentMethodId()]
  303. }
  304. return transactionParam!
  305. }
  306. /**
  307. Get currency param
  308. */
  309. func currencyParam() -> [String: String]{
  310. var pam: [String: Any]?
  311. if let countryId = recipient?.countryId{
  312. pam = ["countryId": countryId,
  313. "payoutMethodId": getPaymentMethodId(),
  314. "payoutLocationId": transferDetails?["bankPayoutId"] ?? ""
  315. ] as [String : Any]
  316. }
  317. return pam as! [String : String]
  318. }
  319. /**
  320. Text field place holder attribute
  321. */
  322. func textFieldPlaceHolderAttribute(){
  323. textFieldKRW.attributedPlaceholder = NSAttributedString(string: "0",
  324. attributes: [NSAttributedStringKey.foregroundColor: UIColor(red:0.93, green:0.11, blue:0.14, alpha:1.0)])
  325. textFieldNPR.attributedPlaceholder = NSAttributedString(string: "0",
  326. attributes: [NSAttributedStringKey.foregroundColor: UIColor(red:0.93, green:0.11, blue:0.14, alpha:1.0)])
  327. }
  328. /**
  329. Country picker view button design
  330. */
  331. func countryPickerViewButtonDesign(){
  332. dropDownCountryButton.layer.borderColor = UIColor(red:0.93, green:0.11, blue:0.14, alpha:1.0).cgColor
  333. dropDownCountryButton.layer.borderWidth = 1.0
  334. dropDownCountryButton.layer.cornerRadius = 8
  335. }
  336. /**
  337. Exchange rate value display
  338. */
  339. func exchangeRateDisplay(){
  340. let exchangeRateValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
  341. let exchangeRate: String = String("Exchange Rate: ")
  342. let mutableExchangeRate = NSMutableAttributedString(string: exchangeRate)
  343. let mutableExchangeRateValue = NSMutableAttributedString(string: String(transactionviewmodel.getExchangeRate()))
  344. mutableExchangeRateValue.addAttribute(NSAttributedStringKey.foregroundColor, value: exchangeRateValueColor, range: NSRange(location:0, length: mutableExchangeRateValue.length))
  345. let exchangeRateData = NSMutableAttributedString()
  346. exchangeRateData.append(mutableExchangeRate)
  347. exchangeRateData.append(mutableExchangeRateValue)
  348. labelExchangeRate.attributedText = exchangeRateData
  349. }
  350. /**
  351. Display service fee data
  352. */
  353. func serviceFeeDataDisplay(){
  354. let serviceFeeValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
  355. let serviceFee: String = String("Service Fee: ")
  356. let mutableServiceFee = NSMutableAttributedString(string: serviceFee)
  357. let mutableServiceFeeValue = NSMutableAttributedString(string: transactionviewmodel.getTransferFee() + " KRW" + " (Inclusive)")
  358. mutableServiceFeeValue.addAttribute(NSAttributedStringKey.foregroundColor, value: serviceFeeValueColor, range: NSRange(location:0, length: mutableServiceFeeValue.length))
  359. let transferFee = NSMutableAttributedString()
  360. transferFee.append(mutableServiceFee)
  361. transferFee.append(mutableServiceFeeValue)
  362. serviceFeeLabel.attributedText = transferFee
  363. }
  364. /**
  365. Set custom first transaction message
  366. */
  367. func setFirstTransactionFreeMessage(){
  368. let feeMessage: String = String("Your First Transfer Fees is ")
  369. let mutableFeeMessage1 = NSMutableAttributedString(string: feeMessage)
  370. let attrs = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 15),NSAttributedStringKey.foregroundColor:UIColor.red]
  371. let freeMessageInBold = NSMutableAttributedString(string:"Free", attributes:attrs)
  372. let mutableFeeMessage = NSMutableAttributedString()
  373. mutableFeeMessage.append(mutableFeeMessage1)
  374. mutableFeeMessage.append(freeMessageInBold)
  375. }
  376. /**
  377. Set custom message money sending
  378. */
  379. func setMoneySendingMessage(sender:String){
  380. let sendingMessage: String = String("You are sending money to ")
  381. let mutableSenderMessage1 = NSMutableAttributedString(string: sendingMessage)
  382. let attrs = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 15)]
  383. let senderMessageInBold = NSMutableAttributedString(string:sender, attributes:attrs)
  384. let mutableSenderMessage = NSMutableAttributedString()
  385. mutableSenderMessage.append(mutableSenderMessage1)
  386. mutableSenderMessage.append(senderMessageInBold)
  387. moneySendingMessageLabel.attributedText = mutableSenderMessage
  388. }
  389. /**
  390. Set transfer limit message
  391. */
  392. func setTransferLimitMessage(amount:String){
  393. let transferMessage1: String = String("Transfer Limit Max \n")
  394. let transferMessage3: String = String(" KRW per day")
  395. let mutableTransferMessage1 = NSMutableAttributedString(string: transferMessage1)
  396. let mutableTransferMessage3 = NSMutableAttributedString(string: transferMessage3)
  397. let attrs = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 15)]
  398. let transferMessageInBold = NSMutableAttributedString(string:"\(amount)", attributes:attrs)
  399. let mutableTransferMessage = NSMutableAttributedString()
  400. mutableTransferMessage.append(mutableTransferMessage1)
  401. mutableTransferMessage.append(transferMessageInBold)
  402. mutableTransferMessage.append(mutableTransferMessage3)
  403. transferLimitMessageLabel.attributedText = mutableTransferMessage
  404. }
  405. /**
  406. Set transaction limit message
  407. */
  408. func setTransactionLimit(amount:String){
  409. let transactionLimitMessage1: String = String("Transaction Limit Upto \n")
  410. let transactionLimitMessage2: String = String(" times per day")
  411. let mutableTransactionLimitMessage1 = NSMutableAttributedString(string: transactionLimitMessage1)
  412. let mutableTransactionLimitMessage2 = NSMutableAttributedString(string: transactionLimitMessage2)
  413. let attrs = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 15)]
  414. let transactionLimitMessageInBold = NSMutableAttributedString(string:amount, attributes:attrs)
  415. let mutableTransactionLimitMessage = NSMutableAttributedString()
  416. mutableTransactionLimitMessage.append(mutableTransactionLimitMessage1)
  417. mutableTransactionLimitMessage.append(transactionLimitMessageInBold)
  418. mutableTransactionLimitMessage.append(mutableTransactionLimitMessage2)
  419. transactionLimit.attributedText = mutableTransactionLimitMessage
  420. }
  421. @IBAction func buttonSavedMoney(_ sender: Any) {
  422. guard let navController = self.navigationController else { return }
  423. let popOverVC = UIStoryboard(name: "RecipientListViewController", bundle: nil).instantiateViewController(withIdentifier: "savingPopup") as! PopUpSavingViewController
  424. navController.addChildViewController(popOverVC)
  425. popOverVC.view.frame = navController.view.bounds
  426. navController.view.addSubview(popOverVC.view)
  427. popOverVC.didMove(toParentViewController: navController)
  428. }
  429. /**
  430. Add done and cancel button
  431. */
  432. func addDoneButtonOnKeyboard()
  433. {
  434. let doneToolbar: UIToolbar = UIToolbar(frame: CGRect.init(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
  435. doneToolbar.barStyle = .default
  436. let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
  437. let done: UIBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.doneButtonAction))
  438. done.tintColor = UIColor(hex: 0xED1C24)
  439. let cancel: UIBarButtonItem = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(self.cancelAction))
  440. cancel.tintColor = UIColor.black
  441. let items = [cancel, flexSpace, done]
  442. doneToolbar.items = items
  443. doneToolbar.sizeToFit()
  444. self.textFieldKRW.inputAccessoryView = doneToolbar
  445. self.textFieldNPR.inputAccessoryView = doneToolbar
  446. }
  447. /**
  448. Add cancel button in keypad
  449. */
  450. @objc func cancelAction()
  451. {
  452. textFieldKRW.text = ""
  453. textFieldNPR.text = ""
  454. serviceFeeLabel.text = "Exchange Rate:"
  455. labelExchangeRate.text = "Service Fee:"
  456. rewardPointlabel.text = ""
  457. textFieldNPR.resignFirstResponder()
  458. textFieldKRW.resignFirstResponder()
  459. pickerViewCurrency.isHidden = true
  460. if !buttomCurrencyStatus! {
  461. buttomCurrencyStatus! = !buttomCurrencyStatus!
  462. }
  463. }
  464. /**
  465. Picker view done action button
  466. */
  467. @objc func doneButtonAction()
  468. {
  469. self.networkDialogShown = false
  470. textFieldKRW.resignFirstResponder()
  471. textFieldNPR.resignFirstResponder()
  472. guard textFieldNPR.text != "" || textFieldKRW.text != "" else {
  473. self.popUpMessageInfo(value: 16, title: "Missing amount", message: "Please enter amount")
  474. return
  475. }
  476. viewContentMain.isHidden = true
  477. self.startLoading()
  478. transactionviewmodel.fetchExchangeRate(exchangeData: exchangeData!)
  479. }
  480. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  481. if segue.identifier == "reviewTransfer" {
  482. let reviewViewController
  483. = segue.destination as! ReviewViewController
  484. //ADDED FOR HOMEDELIVERY
  485. if paymentMode! == paymentModeType.homeDelivery.rawValue {
  486. if let localRecipient = recipient, let localCalculateBy = calculateBy , let localHomeDetails = homeDetails{
  487. reviewViewController.transferDetails = transactionviewmodel.getTransferDetailsForHomeDelivery(recipient: localRecipient, paymentMethodId: getPaymentMethodId(), calcBy: localCalculateBy, homeDetails: localHomeDetails)
  488. }
  489. } else {
  490. if let localRecipient = recipient, let localCalculateBy = calculateBy{
  491. reviewViewController.transferDetails = transactionviewmodel.getTransferDetails(recipient: localRecipient, paymentMethodId: getPaymentMethodId(), calcBy: localCalculateBy)
  492. }
  493. }
  494. reviewViewController.recipient = recipient
  495. reviewViewController.paymentMode = self.paymentMode
  496. }
  497. }
  498. }
  499. extension RecipientTranscationViewController: UITextFieldDelegate {
  500. func textFieldDidBeginEditing(_ textField: UITextField) {
  501. addDoneButtonOnKeyboard()
  502. buttonSave.isUserInteractionEnabled = false
  503. buttonSave.alpha = 0.3
  504. if textField == textFieldKRW {
  505. textFieldNPR.text = ""
  506. } else {
  507. textFieldKRW.text = ""
  508. }
  509. checkScroll()
  510. }
  511. func textFieldDidEndEditing(_ textField: UITextField) {
  512. checkScroll()
  513. if textField == textFieldKRW {
  514. calculateBy = "C"
  515. if let countryId = recipient?.countryId{
  516. exchangeData = ["from":"KRW",
  517. "to":labelCurrency.text!,
  518. "calcBy": calculateBy!,
  519. "cAmt": textFieldKRW.text!,
  520. "payoutmethodid": getPaymentMethodId(),
  521. "countryId":countryId,
  522. "sendMoney":true
  523. ]
  524. }
  525. } else {
  526. if let countryId = recipient?.countryId{
  527. calculateBy = "P"
  528. exchangeData = ["from":"KRW",
  529. "to":labelCurrency.text!,
  530. "calcBy": calculateBy!,
  531. "pAmt": textFieldNPR.text!,
  532. "payoutmethodid": getPaymentMethodId(),
  533. "countryId":countryId,
  534. "sendMoney":true
  535. ]
  536. }
  537. }
  538. textFieldKRW.sizeToFit()
  539. textFieldNPR.sizeToFit()
  540. }
  541. func getWidth(text: String) -> CGFloat
  542. {
  543. let txtField = UITextField(frame: .zero)
  544. txtField.text = text
  545. txtField.sizeToFit()
  546. return txtField.frame.size.width
  547. }
  548. override open func viewWillDisappear(_ animated: Bool) {
  549. super.viewWillDisappear(true)
  550. }
  551. func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString
  552. string: String) -> Bool {
  553. let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
  554. let currentText = textField.text ?? ""
  555. guard let stringRange = Range(range, in: currentText) else { return false }
  556. let updatedText = currentText.replacingCharacters(in: stringRange, with: string)
  557. if updatedText.count != 0 {
  558. if textField == textFieldKRW {
  559. if inputText.isDouble() {
  560. if Double(inputText)! <= transactionviewmodel.getTransferLimit() {
  561. return true
  562. } else {
  563. return false
  564. }
  565. }
  566. } else {
  567. if inputText.isDouble() {
  568. if Double(inputText)! <= 999999999999999 {
  569. return true
  570. } else {
  571. return false
  572. }
  573. }
  574. }
  575. }
  576. return true
  577. }
  578. }
  579. extension RecipientTranscationViewController: UIPickerViewDelegate, UIPickerViewDataSource {
  580. func numberOfComponents(in pickerView: UIPickerView) -> Int {
  581. return 1
  582. }
  583. func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
  584. return pickerData.count
  585. }
  586. func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
  587. return pickerData[row]
  588. }
  589. func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
  590. let label = (view as? UILabel) ?? UILabel()
  591. label.textColor = UIColor(red:0.29, green:0.29, blue:0.29, alpha:1.0)
  592. label.textAlignment = .center
  593. label.font = UIFont.systemFont(ofSize: 18)
  594. label.text = pickerData[row]
  595. return label
  596. }
  597. func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
  598. buttomCurrencyStatus = true
  599. pickerViewCurrency.isHidden = true
  600. dropDownCountryButton.setTitle(pickerData[row] + " ", for: UIControlState.normal)
  601. labelCurrency.text = pickerData[row]
  602. if textFieldKRW.text != "" && textFieldNPR.text != "" {
  603. textFieldNPR.text = ""
  604. buttonSave.isUserInteractionEnabled = false
  605. buttonSave.alpha = 0.3
  606. }
  607. }
  608. }
  609. extension RecipientTranscationViewController : ScrollableProtocol {
  610. var offset: CGFloat {
  611. get {
  612. return 160
  613. }
  614. }
  615. var viewScrolled: Bool {
  616. get {
  617. return isScrolled
  618. }
  619. }
  620. func checkScroll() {
  621. if !viewScrolled {
  622. performScroll(direction: 0)
  623. isScrolled = !isScrolled
  624. } else {
  625. performScroll(direction: 1)
  626. isScrolled = !isScrolled
  627. }
  628. }
  629. func registerTapListener() {
  630. let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(clearKeyboard))
  631. view.addGestureRecognizer(tap)
  632. }
  633. @objc func clearKeyboard() {
  634. textFieldKRW.resignFirstResponder()
  635. textFieldNPR.resignFirstResponder()
  636. if viewScrolled {
  637. performScroll(direction: 1)
  638. isScrolled = !isScrolled
  639. }
  640. }
  641. func performScroll(direction: Int) {
  642. if direction == 0 {
  643. UIView.animate(withDuration: 0.3, animations: {
  644. self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset * -1)
  645. })
  646. } else if direction == 1 {
  647. UIView.animate(withDuration: 0.3, animations: {
  648. self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset)
  649. })
  650. }
  651. }
  652. }
  653. extension String {
  654. func isDouble() -> Bool {
  655. if let doubleValue = Double(self) {
  656. if doubleValue >= 0 {
  657. return true
  658. }
  659. }
  660. return false
  661. }
  662. }