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.

329 lines
13 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
  1. //
  2. // ResendExchangeViewController.swift
  3. // GME Remit
  4. //
  5. // Created by gme_2 on 18/03/2019.
  6. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. class ResendExchangeViewController: UIViewController {
  10. // MARK: IBOutlets
  11. @IBOutlet weak var exchangeBackground1: UIView!
  12. @IBOutlet weak var exchangeBackground2: UIView!
  13. @IBOutlet weak var backgroundViewCountryLabel1: UIView!
  14. @IBOutlet weak var backgroundViewCountryLabel2: UIView!
  15. @IBOutlet weak var countryListStackView: UIStackView!
  16. @IBOutlet weak var countryCodeLabel: UILabel!
  17. @IBOutlet weak var countryFlagImage: UIImageView!
  18. @IBOutlet weak var continueButton: UIButton!
  19. @IBOutlet weak var senderTextField: UITextField!
  20. @IBOutlet weak var reciepientTextField: UITextField!
  21. @IBOutlet weak var transferFeeInfoLabel: UILabel!
  22. @IBOutlet weak var exchangeRateLabel: UILabel!
  23. @IBOutlet weak var exchangeInfoStackView: UIStackView!
  24. @IBOutlet weak var youSendTitleLabel: UILabel!
  25. @IBOutlet weak var recipientGetsTitleLabel: UILabel!
  26. // MARK: Properties
  27. var reciepient: Recipient? {
  28. didSet {
  29. self.requestModel?.reciepient = reciepient
  30. }
  31. }
  32. var requestModel: ResendRequestModel?
  33. var transactionId: String?
  34. var resendInfoModel: ResendDetail? {
  35. didSet {
  36. self.senderTextField.text = Utility.getCommaSeperatedStringWithDecimal(numberString: resendInfoModel?.exchangeRate?.cAmount ?? "")
  37. self.reciepientTextField.text = Utility.getCommaSeperatedStringWithDecimal(numberString: resendInfoModel?.exchangeRate?.pAmount ?? "")
  38. self.calcBy = resendInfoModel?.exchangeRate?.calcBy ?? ""
  39. guard let reciever = resendInfoModel?.receiver else {return}
  40. self.reciepient = self.convertReciepient(model: reciever)
  41. self.setCountryFlag(countryCode: self.resendInfoModel?.receiver?.rCountryCode ?? "")
  42. }
  43. }
  44. var exchangeRateModel: SendMoneyExchangeRateModel? {
  45. didSet {
  46. self.reciepientTextField.text = Utility.getCommaSeperatedStringWithDecimal(numberString: self.exchangeRateModel?.recipientAmount ?? "")
  47. self.senderTextField.text = Utility.getCommaSeperatedStringWithDecimal(numberString: self.exchangeRateModel?.senderAmount ?? "")
  48. let transferFee = self.exchangeRateModel?.transferFee ?? ""
  49. self.transferFeeInfoLabel.text = transferFee + "(" + "transfer_fee_included_text".localized() + ")"
  50. let exchangeRate = self.exchangeRateModel?.exchangeRate ?? ""
  51. self.exchangeRateLabel.text = exchangeRate + " (" + "current_exchange_rate_text".localized() + ")"
  52. self.countryCodeLabel.text = exchangeRateModel?.reciepientCurrency
  53. UIView.animate(withDuration: 0.33) {
  54. self.transferFeeInfoLabel.isHidden = false
  55. self.exchangeRateLabel.isHidden = false
  56. self.exchangeInfoStackView.isHidden = false
  57. self.transferFeeInfoLabel.alpha = 1
  58. self.exchangeRateLabel.alpha = 1
  59. self.exchangeInfoStackView.alpha = 1
  60. }
  61. self.action = ._continue
  62. self.requestModel?.exchangeRateDetail = exchangeRateModel
  63. }
  64. }
  65. var presenter: ResendExchangeModuleInterface?
  66. var calcBy = ""
  67. var action: ActionBehaviour? {
  68. didSet {
  69. if let _action = action {
  70. switch _action {
  71. case .calculate:
  72. self.continueButton.setTitle("calculate_text".localized(), for: .normal)
  73. case ._continue:
  74. self.continueButton.setTitle("continue_text".localized(), for: .normal)
  75. }
  76. }
  77. }
  78. }
  79. var actionDelegate: SendMoneyExchangeRateActionDelegate?
  80. var selectedCurrencyViewModel: SendMoneyExchangeRateCurrencyViewModel?
  81. // MARK: VC's Life cycle
  82. override func viewDidLoad() {
  83. super.viewDidLoad()
  84. self.setup()
  85. }
  86. override func viewWillAppear(_ animated: Bool) {
  87. super.viewWillAppear(animated)
  88. self.navigationItem.title = "resend_money_text".localized()
  89. initialSetup()
  90. self.presenter?.viewIsReady()
  91. self.action = ActionBehaviour.calculate
  92. }
  93. override func viewWillDisappear(_ animated: Bool) {
  94. super.viewWillDisappear(animated)
  95. self.navigationItem.title = ""
  96. }
  97. // MARK: IBActions
  98. @IBAction func continueButton(_ sender: UIButton) {
  99. self.view.endEditing(true)
  100. if let _action = action {
  101. switch _action {
  102. case .calculate:
  103. self.calculate()
  104. case ._continue:
  105. // todo
  106. self.showReceiverDetailPage()
  107. }
  108. }
  109. }
  110. // MARK: Other Functions
  111. private func setup() {
  112. // all setup should be done here
  113. initialSetup()
  114. setupTargets()
  115. setupView()
  116. configureLanguage()
  117. }
  118. private func configureLanguage() {
  119. self.recipientGetsTitleLabel.text = "recepient_gets_text".localized()
  120. self.youSendTitleLabel.text = "you_send_text".localized()
  121. }
  122. func setupView() {
  123. [backgroundViewCountryLabel1, backgroundViewCountryLabel2].forEach({
  124. $0?.layer.cornerRadius = 5
  125. })
  126. [exchangeBackground1, exchangeBackground2].forEach({
  127. $0?.layer.borderWidth = 1
  128. $0?.layer.borderColor = UIColor.init(hex: "#E0E0E0").cgColor
  129. $0?.layer.cornerRadius = 5
  130. })
  131. }
  132. private func showReceiverDetailPage() {
  133. let sendmoneyModel = self.convertModel()
  134. if let navigation = self.navigationController, let reciepient = self.reciepient {
  135. let wireframe = SendMoneyVerificationWireframe()
  136. wireframe.openVerification(reciepient: reciepient, model: sendmoneyModel, source: navigation)
  137. }
  138. }
  139. func convertReciepient(model: ResendReceiver) -> Recipient {
  140. var reciepient = Recipient()
  141. reciepient.firstName = model.rFullName
  142. reciepient.recipientId = self.resendInfoModel?.remitDetial?.ReceiverId
  143. reciepient.reasonId = self.resendInfoModel?.remitDetial?.PurposeOfRemittance
  144. reciepient.relationId = self.resendInfoModel?.remitDetial?.RelWithSender
  145. reciepient.address = model.rAddress
  146. reciepient.country = model.rCountry
  147. reciepient.mobileNumber = model.rMobile
  148. return reciepient
  149. }
  150. private func convertModel() -> SendMoneyRequestModel {
  151. let model = SendMoneyRequestModel()
  152. self.exchangeRateModel?.calcBy = self.calcBy
  153. self.exchangeRateModel?.autodebitSendingAmount = self.senderTextField.text!.stringRemovingComma()
  154. model.exchangeRateDetail = self.exchangeRateModel
  155. model.autoDebitAccount = self.requestModel?.autoDebitAccount
  156. /* SendMoneyPayoutMode */
  157. // "deliveryMethodId": model.paymemtMode?.id ?? "",
  158. // "payOutPartner": model.paymemtMode?.payoutPartner ?? "",
  159. // "ReceiverAccountNo": model.paymemtMode?.accountNumber ?? "",
  160. let paymentMode = SendMoneyPayoutMode()
  161. paymentMode.id = self.resendInfoModel?.remitDetial?.DeliveryMethodId
  162. paymentMode.payoutPartner = self.resendInfoModel?.remitDetial?.PayOutPartner
  163. paymentMode.accountNumber = self.resendInfoModel?.remitDetial?.ReceiverAccountNo
  164. paymentMode.mode = self.resendInfoModel?.receiver?.deliveryMethod
  165. model.paymemtMode = paymentMode
  166. /* SendMoneyBank */
  167. // "pAgent": model.bank?.id ?? "",
  168. let bank = SendMoneyBank()
  169. bank.id = self.resendInfoModel?.remitDetial?.PAgent
  170. bank.name = self.requestModel?.transaction?.bankName
  171. model.bank = bank
  172. /* SendMoneyBankBranch */
  173. // branch
  174. // "pBranch": model.branch?.id ?? "",
  175. let branch = SendMoneyBankBranch()
  176. branch.id = self.resendInfoModel?.remitDetial?.PBranch
  177. model.branch = branch
  178. return model
  179. }
  180. private func initialSetup() {
  181. self.exchangeRateModel = nil
  182. self.exchangeRateLabel.isHidden = true
  183. self.exchangeRateLabel.alpha = 0
  184. self.transferFeeInfoLabel.isHidden = true
  185. self.transferFeeInfoLabel.alpha = 0
  186. self.exchangeInfoStackView.isHidden = true
  187. exchangeInfoStackView.alpha = 0
  188. self.setCountryFlag(countryCode: self.reciepient?.countryCode ?? "")
  189. let deliveryMethod = self.requestModel?.paymemtMode
  190. }
  191. private func setCountryFlag(countryCode: String) {
  192. let flag = CountryInfo().getFlag(for: countryCode)
  193. self.countryFlagImage.image = flag
  194. }
  195. private func setupTargets() {
  196. self.reciepientTextField.addTarget(self, action: #selector(self.textChanged(sender:)), for: UIControlEvents.editingChanged)
  197. self.senderTextField.addTarget(self, action: #selector(self.textChanged(sender:)), for: UIControlEvents.editingChanged)
  198. }
  199. func calculate() {
  200. let senderAmount = self.senderTextField.text!
  201. let reciepientAmount = self.reciepientTextField.text!
  202. self.calculateExchangeRate(senderAmount: senderAmount, reciepientAmount: reciepientAmount, calcBy: self.calcBy)
  203. }
  204. func calculateExchangeRate(senderAmount: String, reciepientAmount: String, calcBy: String) {
  205. let senderAmount = senderAmount.stringRemovingComma() // send sAmt amount
  206. let reciepientAmount = reciepientAmount.stringRemovingComma()
  207. let recipientCurrency = self.resendInfoModel?.exchangeRate?.pCurrency
  208. let reciepientCountryId = self.resendInfoModel?.exchangeRate?.pCountryId
  209. let paymentMethod = self.requestModel?.autoDebitAccount?.type
  210. let paymentMethodId = self.resendInfoModel?.exchangeRate?.serviceType
  211. let payoutPartner = self.resendInfoModel?.exchangeRate?.payoutPartner
  212. let myUsername = Utility.getMyUserName()
  213. let bankId = self.resendInfoModel?.exchangeRate?.payoutAgent
  214. let reciepientCountryName = self.resendInfoModel?.exchangeRate?.pCountryName
  215. self.calculate(senderAmt: senderAmount, recieverAmt: reciepientAmount, recieverCurrency: recipientCurrency, recieverCountryName: reciepientCountryName, recieverCountryId: reciepientCountryId, paymentMethod: paymentMethod, paymentMethodId: paymentMethodId, calcBy: calcBy, payoutPartner: payoutPartner, userId: myUsername, bankId: bankId)
  216. }
  217. func calculate(senderAmt: String?, senderCurrency: String? = "KRW", recieverAmt: String?, recieverCurrency: String?, recieverCountryName: String?, recieverCountryId: String?, paymentMethod: String?, paymentMethodId: String? ,calcBy: String?, senderCountryId: String? = "118", payoutPartner: String?, userId: String?, bankId: String?) {
  218. self.presenter?.calculate(senderAmt: senderAmt ?? "", senderCurrency: senderCurrency ?? "", recieverAmt: recieverAmt ?? "", recieverCurrency: recieverCurrency ?? "", recieverCountryName: recieverCountryName ?? "", recieverCountryId: recieverCountryId ?? "", paymentMethod: paymentMethod ?? "", paymentMethodId: paymentMethodId ?? "", calcBy: calcBy ?? "", senderCountryId: senderCountryId ?? "", payoutPartner: payoutPartner ?? "", userId: userId ?? "", bankId: bankId ?? "")
  219. }
  220. @objc private func textChanged(sender: UITextField) {
  221. self.action = .calculate
  222. switch sender {
  223. case senderTextField:
  224. self.reciepientTextField.text = ""
  225. self.calcBy = "c"
  226. senderTextField.text = Utility.getCommaSeperatedString(numberString: senderTextField.text!)
  227. case reciepientTextField:
  228. self.senderTextField.text = ""
  229. self.calcBy = "p"
  230. reciepientTextField.text = Utility.getCommaSeperatedString(numberString: reciepientTextField.text!)
  231. default:
  232. break
  233. }
  234. self.exchangeRateModel?.calcBy = calcBy
  235. }
  236. }
  237. // MARK: ResendExchangeViewInterface
  238. extension ResendExchangeViewController: ResendExchangeViewInterface {
  239. func show(model: ResendDetail) {
  240. self.resendInfoModel = model
  241. self.calculateExchangeRate(senderAmount: self.senderTextField.text!, reciepientAmount: self.reciepientTextField.text!, calcBy: self.calcBy)
  242. }
  243. func showExchangeRate(error: String) {
  244. self.alert(message: error)
  245. }
  246. func show(error: String) {
  247. self.alert(message: error, title: nil) {
  248. self.navigationController?.popViewController(animated: true)
  249. }
  250. }
  251. func showLoading() {
  252. self.showProgressHud()
  253. }
  254. func hideLoading() {
  255. self.hideProgressHud()
  256. }
  257. func show(model: SendMoneyExchangeRateModel) {
  258. self.exchangeRateModel = model
  259. }
  260. }
  261. extension ResendExchangeViewController: FetchSendMoneyExchangeRateService {
  262. }