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.

385 lines
15 KiB

4 years ago
2 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
2 years ago
4 years ago
5 years ago
2 years ago
4 years ago
3 years ago
5 years ago
4 years ago
4 years ago
4 years ago
4 years ago
6 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
2 years ago
4 years ago
4 years ago
2 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
4 years ago
4 years ago
4 years ago
2 years ago
2 years ago
2 years ago
  1. //
  2. // SendMoneyReceiptViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 04/09/2018.
  6. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import Kingfisher
  10. enum MailBoxType {
  11. case cancel
  12. case edit
  13. case pending
  14. }
  15. enum ReceiptType {
  16. case overseas
  17. }
  18. enum ReceiptParent {
  19. case sendMoney
  20. case notice
  21. case report
  22. }
  23. class SendMoneyReceiptViewController: UIViewController {
  24. // MARK: IBOutlets
  25. struct StringConstants {
  26. let transferSuccessText = "transfer_success_text".localized()
  27. let transactionDateText = "transaction_date_text".localized()
  28. let recieverText = "receiver_text".localized()
  29. let addressText = "address_key_text".localized()
  30. let mobileNoText = "mobile_number_title".localized()
  31. let payoutAgentText = "payout_agent_text".localized()
  32. let totalSentAmountText = "total_sent_amount_text".localized()
  33. let branchText = "branch_text".localized()
  34. let accountNumberText = "account_number_text".localized()
  35. let totalPayoutAmountText = "total_payout_amount_text".localized()
  36. let serviceFeeText = "service_fee_text".localized()
  37. let exRateText = "ex_rate_text".localized()
  38. let payoutAmountText = "total_payout_amount_text".localized()
  39. let gmeControlNumberText = "jme_control_no_text".localized()
  40. let doneText = "done_text".localized()
  41. let headerSuccess = "send_money_success_header_text".localized()
  42. let bodySuccess = "send_money_success_body_text".localized()
  43. let footerSuccess = "send_money_success_footer_text".localized()
  44. }
  45. @IBOutlet weak var fullnameLabel: UILabel!
  46. @IBOutlet weak var sendToLabel: UILabel!
  47. @IBOutlet weak var controlNoInfoLabel: UILabel!
  48. @IBOutlet weak var transactionDateLabel: UILabel!
  49. @IBOutlet weak var infoView: UIView!
  50. @IBOutlet weak var infoViewSuccess: UIView!
  51. @IBOutlet weak var weReceivedLabelSuccess: UILabel!
  52. @IBOutlet weak var amountLabelSuccess: UILabel!
  53. @IBOutlet weak var makePaymentLabelSuccess: UILabel!
  54. @IBOutlet weak var chargeLabelSuccess: UILabel!
  55. @IBOutlet weak var toJmeLabelSuccess: UILabel!
  56. @IBOutlet weak var shadowView: UIView!
  57. @IBOutlet weak var exchangeRateLabel: UILabel!
  58. @IBOutlet weak var relationLabel: UILabel!
  59. @IBOutlet weak var addressLabel: UILabel!
  60. @IBOutlet weak var mobileNoLabel: UILabel!
  61. @IBOutlet weak var recieverNameLabelLabel: UILabel!
  62. @IBOutlet weak var agentBankLabel: UILabel!
  63. @IBOutlet weak var branchLabel: UILabel!
  64. @IBOutlet weak var accountNoLabel: UILabel!
  65. @IBOutlet weak var transferFeeLabel: UILabel!
  66. @IBOutlet weak var totalAmountLabel: UILabel!
  67. @IBOutlet weak var gmeControlNumberLabel: UILabel!
  68. @IBOutlet weak var totalAmountHeaderLabel: UILabel!
  69. @IBOutlet weak var doneButton: UIButton!
  70. @IBOutlet weak var requestToChangeButton: UIButton!
  71. @IBOutlet weak var requestToCancelButton: UIButton!
  72. @IBOutlet weak var transactionReportButtonStackView: UIStackView!
  73. @IBOutlet weak var accountNoView: UIView!
  74. @IBOutlet weak var branchView: UIView!
  75. @IBOutlet weak var rewardPointView: UIView!
  76. // title labels
  77. @IBOutlet weak var transferSuccessfullTitleLabel: UILabel!
  78. // Body labels
  79. @IBOutlet weak var tansactionDateTitleLabel: UILabel!
  80. @IBOutlet weak var recieverTitleLabel: UILabel!
  81. @IBOutlet weak var addressTitleLabel: UILabel!
  82. @IBOutlet weak var mobileTitleLabel: UILabel!
  83. @IBOutlet weak var payoutAgentTitleLabel: UILabel!
  84. @IBOutlet weak var sentAmountTitleLabel: UILabel!
  85. @IBOutlet weak var branchTitleLabel: UILabel!
  86. @IBOutlet weak var accountNumberTitleLabel: UILabel!
  87. @IBOutlet weak var serviceTitleLabel: UILabel!
  88. @IBOutlet weak var exRateTitleLabel: UILabel!
  89. @IBOutlet weak var totalPayoutAmountTitleLabel: UILabel!
  90. @IBOutlet weak var rewardPointTitleLabel: UILabel!
  91. @IBOutlet weak var rewardPointLabel: UILabel!
  92. @IBOutlet private weak var transactionDateContainerView: UIView!
  93. @IBOutlet private weak var receiverNameContainerView: UIView!
  94. @IBOutlet private weak var addressContainerView: UIView!
  95. @IBOutlet private weak var mobileContainerView: UIView!
  96. @IBOutlet private weak var bankContainerView: UIView!
  97. @IBOutlet private weak var totalSentAmountContainerView: UIView!
  98. @IBOutlet private weak var serviceFeeContainerView: UIView!
  99. @IBOutlet private weak var exchangeRateContainerView: UIView!
  100. @IBOutlet private weak var totalPayoutAmountContainerView: UIView!
  101. // MARK: Properties
  102. var presenter: SendMoneyReceiptModuleInterface?
  103. weak var hudDelegate: HUDStatusDelegate?
  104. var shouldShowCancelAmmendButton = false
  105. var displayOption: String?
  106. var receiptParent: ReceiptParent = .sendMoney
  107. var controlNo: String?
  108. var transactionId: String?
  109. var type: MailBoxType?
  110. var receiptType: ReceiptType = .overseas
  111. var reciept: SendMoneyReciept? {
  112. didSet {
  113. self.showRecipt()
  114. }
  115. }
  116. var displayAction: DisplayOption?
  117. // MARK: VC's Life cycle
  118. override func viewDidLoad() {
  119. super.viewDidLoad()
  120. self.setup()
  121. self.presenter?.viewIsReady(type: receiptType, receiptParent: self.receiptParent)
  122. }
  123. override func viewWillAppear(_ animated: Bool) {
  124. super.viewWillAppear(animated)
  125. self.navigationItem.title = "request_summary_text".localized()
  126. self.setupNormalNavigation()
  127. self.setupBackButton()
  128. self.infoView.isHidden = self.receiptParent == .sendMoney
  129. self.infoViewSuccess.isHidden = self.receiptParent != .sendMoney
  130. switch receiptType {
  131. case .overseas:
  132. transactionDateContainerView.isHidden = false
  133. receiverNameContainerView.isHidden = false
  134. mobileContainerView.isHidden = false
  135. bankContainerView.isHidden = false
  136. totalSentAmountContainerView.isHidden = false
  137. accountNoView.isHidden = false
  138. serviceFeeContainerView.isHidden = false
  139. addressContainerView.isHidden = false
  140. branchView.isHidden = false
  141. exchangeRateContainerView.isHidden = false
  142. totalPayoutAmountContainerView.isHidden = false
  143. }
  144. }
  145. override func viewWillDisappear(_ animated: Bool) {
  146. super.viewWillAppear(animated)
  147. self.navigationItem.title = ""
  148. }
  149. override func viewDidAppear(_ animated: Bool) {
  150. super.viewDidAppear(animated)
  151. }
  152. // MARK: IBActions
  153. @IBAction func done(_ sender: UIButton) {
  154. if self.receiptParent == .report {
  155. self.navigationController?.popViewController(animated: true)
  156. } else {
  157. //self.navigationController?.popViewController(animated: true)
  158. self.navigationController?.popToRootViewController(animated: true)
  159. }
  160. }
  161. // MARK: Other Functions
  162. @IBAction func requestToCancel(_ sender: UIButton) {
  163. if (self.displayAction == .pending) || (self.displayAction == .reject) {
  164. self.sendMail(type: .pending)
  165. } else {
  166. self.sendMail(type: .cancel)
  167. }
  168. }
  169. @IBAction func requestToChange(_ sender: UIButton) {
  170. if (self.displayAction == .pending) || (self.displayAction == .reject) {
  171. self.sendMail(type: .pending)
  172. } else {
  173. self.sendMail(type: .edit)
  174. }
  175. }
  176. func sendMail(type: MailBoxType) {
  177. self.presenter?.openMail(
  178. controlNO: self.controlNo ?? "",
  179. transactionId: self.transactionId ?? "",
  180. type: type
  181. )
  182. }
  183. private func setup() {
  184. // all setup should be done here
  185. setupBackButton()
  186. configureLanguage()
  187. infoViewSuccess.layer.cornerRadius = 20
  188. infoView.layer.cornerRadius = 20
  189. requestToCancelButton.layer.cornerRadius = 20
  190. requestToChangeButton.layer.cornerRadius = 20
  191. }
  192. func configureLanguage() {
  193. self.weReceivedLabelSuccess.text = StringConstants().headerSuccess
  194. self.makePaymentLabelSuccess.text = StringConstants().bodySuccess
  195. self.toJmeLabelSuccess.text = StringConstants().footerSuccess
  196. self.transferSuccessfullTitleLabel.text = StringConstants().transferSuccessText
  197. self.tansactionDateTitleLabel.text = StringConstants().transactionDateText
  198. self.recieverTitleLabel.text = StringConstants().recieverText
  199. self.addressTitleLabel.text = StringConstants().addressText
  200. self.mobileTitleLabel.text = StringConstants().mobileNoText
  201. self.payoutAgentTitleLabel.text = StringConstants().payoutAgentText
  202. self.totalPayoutAmountTitleLabel.text = StringConstants().totalSentAmountText
  203. self.branchTitleLabel.text = StringConstants().branchText
  204. self.accountNumberTitleLabel.text = StringConstants().accountNumberText
  205. self.serviceTitleLabel.text = StringConstants().serviceFeeText
  206. self.exRateTitleLabel.text = StringConstants().exRateText
  207. self.totalPayoutAmountTitleLabel.text = StringConstants().payoutAmountText
  208. self.sentAmountTitleLabel.text = StringConstants().totalSentAmountText
  209. self.doneButton.setTitle(StringConstants().doneText, for: UIControl.State.normal)
  210. self.requestToCancelButton.setTitle("request_to_cancel_text".localized(), for: UIControl.State.normal)
  211. self.requestToChangeButton.setTitle("request_to_change_text".localized(), for: UIControl.State.normal)
  212. self.sendToLabel.text = "send_to_text".localized()
  213. self.controlNoInfoLabel.text = "gme_control_security_text".localized()
  214. }
  215. func setupBackButton() {
  216. print(self.displayOption ?? "No display Option")
  217. let displayOption = DisplayOption(rawValue: self.displayOption?.lowercased() ?? "")
  218. self.displayAction = displayOption
  219. switch displayOption {
  220. case .cancelamend:
  221. print("Cancel Amend Found")
  222. case .reject:
  223. self.requestToCancelButton.setTitle("Cancel Transaction", for: .normal)
  224. self.requestToChangeButton.isHidden = true
  225. case .cancel:
  226. self.requestToChangeButton.isHidden = true
  227. case .amend:
  228. self.requestToCancelButton.isHidden = true
  229. case .pending:
  230. self.requestToCancelButton.isHidden = true
  231. self.requestToCancelButton.setTitle("Cancel Transaction", for: .normal)
  232. case .none:
  233. self.transactionReportButtonStackView.isHidden = true
  234. self.doneButton.isHidden = false
  235. }
  236. // if shouldShowCancelAmmendButton {
  237. // self.navigationController?.navigationItem.hidesBackButton = false
  238. // let button = UIBarButtonItem.init(
  239. // image: #imageLiteral(resourceName: "backIconBlack"), style: UIBarButtonItem.Style.plain,
  240. // target: self,
  241. // action: #selector(self.back)
  242. // )
  243. // self.navigationItem.backBarButtonItem = button
  244. // self.doneButton.isHidden = true
  245. // self.transactionReportButtonStackView.isHidden = false
  246. // } else {
  247. // self.doneButton.isHidden = false
  248. // self.doneButton.backgroundColor = .themeRed
  249. // self.doneButton.layer.cornerRadius = 12
  250. //
  251. // self.transactionReportButtonStackView.isHidden = true
  252. // self.navigationController?.navigationItem.hidesBackButton = true
  253. // let button = UIBarButtonItem.init(
  254. // title: nil,
  255. // style: UIBarButtonItem.Style.plain,
  256. // target: nil,
  257. // action: nil
  258. // )
  259. // self.navigationItem.leftBarButtonItem = button
  260. // }
  261. }
  262. @objc private func back() {
  263. self.presenter?.dismiss()
  264. }
  265. private func showRecipt() {
  266. let firstName = self.reciept?.rFirstName ?? ""
  267. let lastName = self.reciept?.rLastName ?? ""
  268. let middleName = self.reciept?.rMiddleName ?? ""
  269. let fullName = firstName + " " + middleName + " " + lastName
  270. self.recieverNameLabelLabel.text = fullName.uppercased()
  271. self.fullnameLabel.text = fullName.uppercased()
  272. self.transactionDateLabel.text = reciept?.transactionDate
  273. self.addressLabel.text = self.reciept?.rAddress
  274. self.mobileNoLabel.text = self.reciept?.rContactNo ?? "N/A"
  275. self.agentBankLabel.text = self.reciept?.agentBank
  276. let branch = self.reciept?.payoutBankBranch ?? ""
  277. self.branchLabel.text = branch
  278. self.branchView.isHidden = branch == ""
  279. let accountNo = self.reciept?.accountNo ?? ""
  280. self.accountNoView.isHidden = accountNo == ""
  281. self.accountNoLabel.text = self.reciept?.accountNo
  282. self.relationLabel.text = self.reciept?.collAmount?.decimalToCurrency(as: .krw)
  283. let charge = self.reciept?.collAmount?.decimalToCurrency(as: .krw)
  284. let servicecharge = self.reciept?.serviceCharge?.decimalToCurrency(as: .krw)
  285. self.transferFeeLabel.text = servicecharge
  286. self.chargeLabelSuccess.text = charge
  287. self.exchangeRateLabel.text = self.reciept?.exRate
  288. let controlNo = self.reciept?.controNo ?? ""
  289. self.controlNo = self.reciept?.controNo ?? ""
  290. self.gmeControlNumberLabel.text = StringConstants().gmeControlNumberText + ". " + controlNo
  291. let totalAmount = (receiptType == .overseas) ? (self.reciept?.payoutAmount ?? "") :
  292. (self.reciept?.payoutAmount ?? "").decimalToCurrency(as: .krw)
  293. self.totalAmountLabel.text = totalAmount
  294. self.totalAmountHeaderLabel.text = totalAmount
  295. self.amountLabelSuccess.text = totalAmount
  296. if let rewardPoint = self.reciept?.rewardPoints {
  297. self.rewardPointView.isHidden = false
  298. self.rewardPointLabel.text = rewardPoint
  299. } else {
  300. self.rewardPointView.isHidden = true
  301. }
  302. }
  303. }
  304. // MARK: SendMoneyReceiptViewInterface
  305. extension SendMoneyReceiptViewController: SendMoneyReceiptViewInterface {
  306. func showLoading() {
  307. self.hudDelegate?.showLoading()
  308. }
  309. func hideLoading() {
  310. self.hudDelegate?.hideLoading()
  311. }
  312. func show(error: String) {
  313. self.alert(type: .error, message: error)
  314. }
  315. func show(model: SendMoneyReciept) {
  316. self.reciept = model
  317. }
  318. }
  319. enum DisplayOption: String {
  320. case cancelamend = "cancel,amend"
  321. case reject = "reject"
  322. case cancel = "cancel"
  323. case amend = "amend"
  324. case pending = "pending"
  325. }