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.

167 lines
5.0 KiB

  1. //
  2. // WalletStatementViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by gme_2 on 03/10/2018.
  6. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. enum WalletStatementType {
  10. }
  11. class WalletStatementViewController: UIViewController {
  12. // MARK: IBOutlets
  13. @IBOutlet weak var tableView: UITableView!
  14. @IBOutlet weak var dateRangeLabelHeightConstraint: NSLayoutConstraint!
  15. @IBOutlet weak var fromDateLabel: UILabel!
  16. @IBOutlet weak var toDateLabel: UILabel!
  17. @IBOutlet weak var emptyLabel: UILabel!
  18. // MARK: Properties
  19. var presenter: WalletStatementModuleInterface?
  20. var from: String?
  21. var to: String?
  22. var statements: [WalletStatement] = [] {
  23. didSet {
  24. self.emptyLabel.isHidden = !statements.isEmpty
  25. self.tableView.reloadData()
  26. guard let fromDate = from, let toDate = to else {
  27. self.dateRangeLabelHeightConstraint.constant = 0
  28. return
  29. }
  30. self.fromDateLabel.text = self.getHUmanReadableDate(date: fromDate)
  31. self.toDateLabel.text = self.getHUmanReadableDate(date: toDate)
  32. UIView.animate(withDuration: 0.33, animations: {
  33. self.dateRangeLabelHeightConstraint.constant = Constant.heightOfDateRangeLabel
  34. })
  35. }
  36. }
  37. struct Constant {
  38. static let heightOfDateRangeLabel: CGFloat = 35
  39. }
  40. // MARK: VC's Life cycle
  41. override func viewDidLoad() {
  42. super.viewDidLoad()
  43. self.setupNormalNavigation()
  44. self.setupDateFilterButton()
  45. self.setup()
  46. }
  47. override func viewWillAppear(_ animated: Bool) {
  48. super.viewWillAppear(animated)
  49. self.navigationItem.title = "Wallet Statement"
  50. }
  51. override func viewWillDisappear(_ animated: Bool) {
  52. super.viewWillAppear(animated)
  53. self.navigationItem.title = ""
  54. }
  55. // MARK: IBActions
  56. @objc func openSearchFilter() {
  57. // open search filter
  58. let viewController = UIStoryboard.init(name: "TransactionHistoryDatePicker", bundle: nil).instantiateViewController(withIdentifier: "DatePickerViewController") as! DatePickerViewController
  59. viewController.completion = self.selectedDate
  60. self.present(viewController, animated: true, completion: nil)
  61. }
  62. private func selectedDate(from: String?, to: String?) {
  63. self.from = from
  64. self.to = to
  65. guard let fromDate = from, let toDate = to else {return}
  66. self.presenter?.fetchWalletSatement(fromDate: fromDate, toDate: toDate)
  67. }
  68. // MARK: Other Functions
  69. private func setup() {
  70. // all setup should be done here
  71. setupDelegates()
  72. setupDateFilterButton()
  73. configureViews()
  74. self.presenter?.viewIsReady()
  75. }
  76. private func configureViews() {
  77. self.dateRangeLabelHeightConstraint.constant = 0
  78. // self.emptyLabel.textColor = AppConstants.themeBlueColor
  79. }
  80. private func setupDateFilterButton() {
  81. let filterItem = UIBarButtonItem.init(image: #imageLiteral(resourceName: "ic_calender"), style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.openSearchFilter))
  82. self.navigationItem.rightBarButtonItem = filterItem
  83. }
  84. private func getHUmanReadableDate(date: String?) -> String? {
  85. if let date = DateFormatter.toDate(dateString: date ?? "", format: AppConstants.dateFormat) {
  86. let dateString = DateFormatter.toString(date: date, format: AppConstants.humanReadableDateFormat)
  87. return dateString
  88. }
  89. return nil
  90. }
  91. private func setupDelegates() {
  92. self.tableView.delegate = self
  93. self.tableView.dataSource = self
  94. }
  95. }
  96. // MARK: WalletStatementViewInterface
  97. extension WalletStatementViewController: WalletStatementViewInterface {
  98. func showLoading() {
  99. self.showProgressHud()
  100. }
  101. func hideLoading() {
  102. self.hideProgressHud()
  103. }
  104. func show(error: String) {
  105. self.alert(message: error)
  106. }
  107. func show(models: [WalletStatement]) {
  108. self.statements = models
  109. }
  110. }
  111. // MARK: TableViewDelegate
  112. extension WalletStatementViewController: UITableViewDelegate {
  113. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  114. // self.presenter?.showDetailOf(index: indexPath.row)
  115. }
  116. }
  117. // MARK: TableViewDatasource
  118. extension WalletStatementViewController: UITableViewDataSource {
  119. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  120. return statements.count
  121. }
  122. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  123. let cell = tableView.dequeueReusableCell(withIdentifier: "WalletStatementTableViewCell") as! WalletStatementTableViewCell
  124. cell.model = self.statements.elementAt(index: indexPath.row)
  125. cell.setup()
  126. return cell
  127. }
  128. }