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.

325 lines
11 KiB

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
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
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
  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. }
  14. enum ReceiptType {
  15. case domestic
  16. case overseas
  17. }
  18. class SendMoneyReceiptViewController: UIViewController {
  19. // MARK: IBOutlets
  20. struct StringConstants {
  21. let transferSuccessText = "transfer_success_text".localized()
  22. let transactionDateText = "transaction_date_text".localized()
  23. let recieverText = "receiver_text".localized()
  24. let addressText = "email_address_text".localized()
  25. let mobileNoText = "mobile_number_text".localized()
  26. let payoutAgentText = "payout_agent_text".localized()
  27. let totalSentAmountText = "total_sent_amount_text".localized()
  28. let branchText = "branch_text".localized()
  29. let accountNumberText = "account_number_text".localized()
  30. let totalPayoutAmountText = "total_payout_amount_text".localized()
  31. let serviceFeeText = "service_fee_text".localized()
  32. let exRateText = "ex_rate_text".localized()
  33. let payoutAmountText = "total_amount_text".localized()
  34. let gmeControlNumberText = "gme_control_no_text".localized()
  35. let doneText = "done_text".localized()
  36. }
  37. @IBOutlet weak var fullnameLabel: UILabel!
  38. @IBOutlet weak var transactionDateLabel: UILabel!
  39. @IBOutlet weak var exchangeRateLabel: UILabel!
  40. @IBOutlet weak var relationLabel: UILabel!
  41. @IBOutlet weak var addressLabel: UILabel!
  42. @IBOutlet weak var mobileNoLabel: UILabel!
  43. @IBOutlet weak var recieverNameLabelLabel: UILabel!
  44. @IBOutlet weak var agentBankLabel: UILabel!
  45. @IBOutlet weak var branchLabel: UILabel!
  46. @IBOutlet weak var accountNoLabel: UILabel!
  47. @IBOutlet weak var transferFeeLabel: UILabel!
  48. @IBOutlet weak var totalAmountLabel: UILabel!
  49. @IBOutlet weak var gmeControlNumberLabel: UILabel!
  50. @IBOutlet weak var totalAmountHeaderLabel: UILabel!
  51. @IBOutlet weak var doneButton: UIButton!
  52. @IBOutlet weak var requestToChangeButton: UIButton!
  53. @IBOutlet weak var requestToCancelButton: UIButton!
  54. @IBOutlet weak var transactionReportButtonStackView: UIStackView!
  55. @IBOutlet weak var accountNoView: UIView!
  56. @IBOutlet weak var branchView: UIView!
  57. // title labels
  58. @IBOutlet weak var transferSuccessfullTitleLabel: UILabel!
  59. @IBOutlet weak var moneygramImageView: UIImageView!
  60. @IBOutlet weak var moneygramLogoLabel: UILabel!
  61. @IBOutlet weak var warningLabel: UILabel!
  62. @IBOutlet weak var moneygramStackView: UIStackView!
  63. // Body labels
  64. @IBOutlet weak var tansactionDateTitleLabel: UILabel!
  65. @IBOutlet weak var recieverTitleLabel: UILabel!
  66. @IBOutlet weak var addressTitleLabel: UILabel!
  67. @IBOutlet weak var mobileTitleLabel: UILabel!
  68. @IBOutlet weak var payoutAgentTitleLabel: UILabel!
  69. @IBOutlet weak var sentAmountTitleLabel: UILabel!
  70. @IBOutlet weak var branchTitleLabel: UILabel!
  71. @IBOutlet weak var accountNumberTitleLabel: UILabel!
  72. @IBOutlet weak var serviceTitleLabel: UILabel!
  73. @IBOutlet weak var exRateTitleLabel: UILabel!
  74. @IBOutlet weak var totalPayoutAmountTitleLabel: UILabel!
  75. @IBOutlet weak var usedCouponTitleLabel: UILabel!
  76. @IBOutlet weak var usedCouponLabel: UILabel!
  77. @IBOutlet private weak var transactionDateContainerView: UIView!
  78. @IBOutlet private weak var receiverNameContainerView: UIView!
  79. @IBOutlet private weak var addressContainerView: UIView!
  80. @IBOutlet private weak var mobileContainerView: UIView!
  81. @IBOutlet private weak var bankContainerView: UIView!
  82. @IBOutlet private weak var totalSentAmountContainerView: UIView!
  83. @IBOutlet private weak var serviceFeeContainerView: UIView!
  84. @IBOutlet private weak var usedCouponContainerView: UIView!
  85. @IBOutlet private weak var exchangeRateContainerView: UIView!
  86. @IBOutlet private weak var totalPayoutAmountContainerView: UIView!
  87. // MARK: Properties
  88. var presenter: SendMoneyReceiptModuleInterface?
  89. weak var hudDelegate: HUDStatusDelegate?
  90. var shouldShowCancelAmmendButton = false
  91. var isFromTransactionHistory = false
  92. var controlNo: String?
  93. var transactionId: String?
  94. var type: MailBoxType?
  95. var receiptType: ReceiptType = .overseas
  96. var reciept: SendMoneyReciept? {
  97. didSet {
  98. self.showRecipt()
  99. }
  100. }
  101. // MARK: VC's Life cycle
  102. override func viewDidLoad() {
  103. super.viewDidLoad()
  104. self.setup()
  105. self.presenter?.viewIsReady(type: receiptType)
  106. }
  107. override func viewWillAppear(_ animated: Bool) {
  108. super.viewWillAppear(animated)
  109. self.navigationItem.title = "Receipt"
  110. self.setupBackButton()
  111. switch receiptType {
  112. case .domestic:
  113. transactionDateContainerView.isHidden = false
  114. receiverNameContainerView.isHidden = false
  115. mobileContainerView.isHidden = false
  116. bankContainerView.isHidden = false
  117. totalSentAmountContainerView.isHidden = false
  118. accountNoView.isHidden = false
  119. serviceFeeContainerView.isHidden = false
  120. addressContainerView.isHidden = true
  121. branchView.isHidden = true
  122. usedCouponContainerView.isHidden = true
  123. exchangeRateContainerView.isHidden = true
  124. totalPayoutAmountContainerView.isHidden = true
  125. case .overseas:
  126. transactionDateContainerView.isHidden = false
  127. receiverNameContainerView.isHidden = false
  128. mobileContainerView.isHidden = false
  129. bankContainerView.isHidden = false
  130. totalSentAmountContainerView.isHidden = false
  131. accountNoView.isHidden = false
  132. serviceFeeContainerView.isHidden = false
  133. addressContainerView.isHidden = false
  134. branchView.isHidden = false
  135. usedCouponContainerView.isHidden = false
  136. exchangeRateContainerView.isHidden = false
  137. totalPayoutAmountContainerView.isHidden = false
  138. }
  139. }
  140. override func viewWillDisappear(_ animated: Bool) {
  141. super.viewWillAppear(animated)
  142. self.navigationItem.title = ""
  143. }
  144. override func viewDidAppear(_ animated: Bool) {
  145. super.viewDidAppear(animated)
  146. if !isFromTransactionHistory {
  147. StoreReviewHelper.shared.checkAndAskForReview()
  148. }
  149. }
  150. // MARK: IBActions
  151. @IBAction func done(_ sender: UIButton) {
  152. if (isFromTransactionHistory) {
  153. self.navigationController?.popViewController(animated: true)
  154. } else {
  155. self.navigationController?.popToRootViewController(animated: true)
  156. }
  157. }
  158. // MARK: Other Functions
  159. @IBAction func requestToCancel(_ sender: UIButton) {
  160. self.sendMail(type: .cancel)
  161. }
  162. @IBAction func requestToChange(_ sender: UIButton) {
  163. self.sendMail(type: .edit)
  164. }
  165. func sendMail(type: MailBoxType) {
  166. self.presenter?.openMail(
  167. controlNO: self.controlNo ?? "",
  168. transactionId: self.transactionId ?? "",
  169. type: type
  170. )
  171. }
  172. private func setup() {
  173. // all setup should be done here
  174. setupBackButton()
  175. configureLanguage()
  176. }
  177. func configureLanguage() {
  178. self.transferSuccessfullTitleLabel.text = StringConstants().transferSuccessText
  179. self.tansactionDateTitleLabel.text = StringConstants().transactionDateText
  180. self.recieverTitleLabel.text = StringConstants().recieverText
  181. self.addressTitleLabel.text = StringConstants().addressText
  182. self.mobileTitleLabel.text = StringConstants().mobileNoText
  183. self.payoutAgentTitleLabel.text = StringConstants().payoutAgentText
  184. self.totalPayoutAmountTitleLabel.text = StringConstants().totalSentAmountText
  185. self.branchTitleLabel.text = StringConstants().branchText
  186. self.accountNumberTitleLabel.text = StringConstants().accountNumberText
  187. self.serviceTitleLabel.text = StringConstants().serviceFeeText
  188. self.exRateTitleLabel.text = StringConstants().exRateText
  189. self.totalPayoutAmountTitleLabel.text = StringConstants().payoutAmountText
  190. self.sentAmountTitleLabel.text = StringConstants().totalSentAmountText
  191. self.doneButton.setTitle(StringConstants().doneText, for: UIControl.State.normal)
  192. self.requestToCancelButton.setTitle("request_to_cancel_text".localized(), for: UIControl.State.normal)
  193. self.requestToChangeButton.setTitle("request_to_change_text".localized(), for: UIControl.State.normal)
  194. usedCouponTitleLabel.text = "used_coupon_title_text".localized()
  195. }
  196. func setupBackButton() {
  197. if shouldShowCancelAmmendButton {
  198. self.navigationController?.navigationItem.hidesBackButton = false
  199. let button = UIBarButtonItem.init(
  200. image: #imageLiteral(resourceName: "backIconBlack"), style: UIBarButtonItem.Style.plain,
  201. target: self,
  202. action: #selector(self.back)
  203. )
  204. self.navigationItem.backBarButtonItem = button
  205. self.doneButton.isHidden = true
  206. self.transactionReportButtonStackView.isHidden = false
  207. } else {
  208. self.doneButton.isHidden = false
  209. self.doneButton.backgroundColor = .themeRed
  210. self.doneButton.layer.cornerRadius = 5
  211. self.transactionReportButtonStackView.isHidden = true
  212. self.navigationController?.navigationItem.hidesBackButton = true
  213. let button = UIBarButtonItem.init(
  214. title: nil,
  215. style: UIBarButtonItem.Style.plain,
  216. target: nil,
  217. action: nil
  218. )
  219. self.navigationItem.leftBarButtonItem = button
  220. }
  221. }
  222. @objc private func back() {
  223. self.presenter?.dismiss()
  224. }
  225. private func showRecipt() {
  226. let firstName = self.reciept?.rFirstName ?? ""
  227. let lastName = self.reciept?.rLastName ?? ""
  228. let middleName = self.reciept?.rMiddleName ?? ""
  229. let fullName = firstName + " " + middleName + " " + lastName
  230. self.recieverNameLabelLabel.text = fullName.uppercased()
  231. self.fullnameLabel.text = "To: \(fullName.uppercased())"
  232. self.transactionDateLabel.text = reciept?.transactionDate
  233. self.addressLabel.text = self.reciept?.rAddress
  234. self.mobileNoLabel.text = self.reciept?.rContactNo ?? "N/A"
  235. self.agentBankLabel.text = self.reciept?.agentBank
  236. let branch = self.reciept?.payoutBankBranch ?? ""
  237. self.branchLabel.text = branch
  238. self.branchView.isHidden = branch == ""
  239. let accountNo = self.reciept?.accountNo ?? ""
  240. self.accountNoView.isHidden = accountNo == ""
  241. self.accountNoLabel.text = self.reciept?.accountNo
  242. self.relationLabel.text = self.reciept?.collAmount?.decimalToCurrency(as: .krw)
  243. self.transferFeeLabel.text = self.reciept?.serviceCharge?.decimalToCurrency(as: .krw)
  244. self.exchangeRateLabel.text = self.reciept?.exRate
  245. let controlNo = self.reciept?.controNo ?? ""
  246. self.gmeControlNumberLabel.text = StringConstants().gmeControlNumberText + ": " + controlNo
  247. let totalAmount = (receiptType == .overseas) ? (self.reciept?.payoutAmount ?? "") :
  248. (self.reciept?.payoutAmount ?? "").decimalToCurrency(as: .krw)
  249. self.totalAmountLabel.text = totalAmount
  250. self.totalAmountHeaderLabel.text = StringConstants().totalPayoutAmountText + ": \(totalAmount)"
  251. usedCouponLabel.text = reciept?.formattedCouponName
  252. if reciept?.showPartnerLogo == "Y" {
  253. moneygramLogoLabel.text = reciept?.logoText
  254. } else {
  255. moneygramStackView.isHidden = true
  256. }
  257. warningLabel.text = reciept?.note
  258. }
  259. }
  260. // MARK: SendMoneyReceiptViewInterface
  261. extension SendMoneyReceiptViewController: SendMoneyReceiptViewInterface {
  262. func showLoading() {
  263. self.hudDelegate?.showLoading()
  264. }
  265. func hideLoading() {
  266. self.hudDelegate?.hideLoading()
  267. }
  268. func show(error: String) {
  269. self.alert(type: .error, message: error)
  270. }
  271. func show(model: SendMoneyReciept) {
  272. self.reciept = model
  273. }
  274. }