SearchOdsSp2BeforeVC.swift 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. //
  2. // SearchOdsSp2BeforeVC.swift
  3. // Sirani
  4. //
  5. // Created by Anhar Solehudin on 20/04/19.
  6. // Copyright © 2019 Anhar Solehudin. All rights reserved.
  7. //
  8. import UIKit
  9. protocol SearchOdsSp2BeforeDelegate {
  10. func onSearch(search: String, parameter: String, jenis: String)
  11. }
  12. class SearchOdsSp2BeforeVC: UIViewController {
  13. @IBOutlet weak var inputSearch: RoundTextField!
  14. @IBOutlet weak var optionsTV: UITableView!
  15. @IBOutlet weak var optionsLayout: UIView!
  16. @IBOutlet weak var optionsBg: UIView!
  17. @IBOutlet weak var btnParameterOptions: UIButton!
  18. @IBOutlet weak var btnJenisOptions: UIButton!
  19. // Initialize
  20. var delegate: SearchOdsSp2BeforeDelegate?
  21. // id
  22. private let unwindSegueId = "unwindSearchToOdsSp2BeforeSegueId"
  23. private let cellId = "searchOdsSp2BeforeOptionCellId"
  24. // constants vallue data
  25. private let OPTION_PARAMATER_ID = 1
  26. private let OPTION_JENIS_ID = 2
  27. private let OPTION_PARAMATER_LABEL = "Pilih Parameter"
  28. private let OPTION_JENIS_LABEL = "Pilih Jenis"
  29. private let parameterOptionItems = [
  30. OptionItem(label: "Semua", value: ""),
  31. OptionItem(label: "Nomor RESI", value: "resi_cekdok"),
  32. OptionItem(label: "Tanggal Resi (dd-mm-yyyy)", value: "date_cekdok"),
  33. OptionItem(label: "Nama Customer", value: "custs"),
  34. OptionItem(label: "Nama Perangkat", value: "eqp_name"),
  35. OptionItem(label: "Merk & Model", value: "models"),
  36. OptionItem(label: "Pembuat", value: "mfc_name"),
  37. OptionItem(label: "ID Aplikasi", value: "apl_id")
  38. ]
  39. private let jenisOptionItems = [
  40. OptionItem(label: "SEMUA", value: ""),
  41. OptionItem(label: "PERMOHONAN BARU", value: "BRU"),
  42. OptionItem(label: "PENGGANTIAN", value: "PGL"),
  43. OptionItem(label: "PERPANJANGAN", value: "PPJ"),
  44. OptionItem(label: "PERUBAHAN / REVISI", value: "RVS"),
  45. OptionItem(label: "EVALUASI DOKUMEN", value: "UJD"),
  46. OptionItem(label: "PERPANJANGAN DATA LAMA", value: "PLM")
  47. ]
  48. // variables
  49. private var selectedOptions = 0
  50. private var selectedOptionItems = [OptionItem]()
  51. private var optionsShown = false
  52. // Result Values
  53. private var search = ""
  54. private var parameter = ""
  55. private var jenis = ""
  56. // View Lifecycles
  57. override var preferredStatusBarStyle: UIStatusBarStyle {
  58. return .lightContent
  59. }
  60. override func viewWillAppear(_ animated: Bool) {
  61. btnParameterOptions.layer.masksToBounds = false
  62. btnParameterOptions.layer.shadowColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)
  63. btnParameterOptions.layer.shadowOpacity = 0.5
  64. btnParameterOptions.layer.shadowOffset = CGSize(width: 1, height: 1)
  65. btnParameterOptions.layer.shadowRadius = 1
  66. btnJenisOptions.layer.masksToBounds = false
  67. btnJenisOptions.layer.shadowColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1)
  68. btnJenisOptions.layer.shadowOpacity = 0.5
  69. btnJenisOptions.layer.shadowOffset = CGSize(width: 1, height: 1)
  70. btnJenisOptions.layer.shadowRadius = 1
  71. hideOptions()
  72. optionsTV.bringSubviewToFront(optionsBg)
  73. let onOptionsBgTapped = UITapGestureRecognizer(target: self, action: #selector(hideOptions))
  74. optionsBg.addGestureRecognizer(onOptionsBgTapped)
  75. }
  76. override func viewDidLoad() {
  77. super.viewDidLoad()
  78. optionsTV.delegate = self
  79. optionsTV.dataSource = self
  80. optionsTV.tableFooterView = UIView()
  81. }
  82. // private functions
  83. private func showOptions() {
  84. optionsLayout.show()
  85. optionsShown = true
  86. }
  87. @objc private func hideOptions() {
  88. optionsLayout.hide()
  89. optionsShown = false
  90. }
  91. // actions
  92. @IBAction func onBtnBackTap(_ sender: Any) {
  93. performSegue(withIdentifier: unwindSegueId, sender: self)
  94. }
  95. @IBAction func onInputSearchKeyTap(_ sender: Any) {
  96. view.endEditing(true)
  97. }
  98. @IBAction func onParameterOptionsTapped(_ sender: Any) {
  99. selectedOptions = OPTION_PARAMATER_ID
  100. selectedOptionItems.removeAll()
  101. selectedOptionItems += parameterOptionItems
  102. optionsTV.reloadData()
  103. showOptions()
  104. }
  105. @IBAction func onJenisOptionsTapped(_ sender: Any) {
  106. selectedOptions = OPTION_JENIS_ID
  107. selectedOptionItems.removeAll()
  108. selectedOptionItems += jenisOptionItems
  109. optionsTV.reloadData()
  110. showOptions()
  111. }
  112. @IBAction func onBtnResetTap(_ sender: Any) {
  113. search = ""
  114. parameter = ""
  115. jenis = ""
  116. inputSearch.text = ""
  117. btnParameterOptions.setTitle(OPTION_PARAMATER_LABEL, for: .normal)
  118. btnJenisOptions.setTitle(OPTION_JENIS_LABEL, for: .normal)
  119. }
  120. @IBAction func onBtnSearchTap(_ sender: Any) {
  121. if let searchText = inputSearch.getText() {
  122. search = searchText
  123. }
  124. self.delegate?.onSearch(search: search, parameter: parameter, jenis: jenis)
  125. performSegue(withIdentifier: unwindSegueId, sender: self)
  126. }
  127. }
  128. extension SearchOdsSp2BeforeVC: UITableViewDelegate, UITableViewDataSource {
  129. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  130. return selectedOptionItems.count
  131. }
  132. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  133. if let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as? OptionsCell {
  134. let optionItem = selectedOptionItems[indexPath.row]
  135. cell.updateViews(item: optionItem)
  136. return cell
  137. } else {
  138. return OptionsCell()
  139. }
  140. }
  141. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  142. if selectedOptions == OPTION_PARAMATER_ID {
  143. parameter = selectedOptionItems[indexPath.row].value as! String
  144. let parameterLabel = selectedOptionItems[indexPath.row].label
  145. btnParameterOptions.setTitle(parameterLabel, for: .normal)
  146. } else if selectedOptions == OPTION_JENIS_ID {
  147. jenis = selectedOptionItems[indexPath.row].value as! String
  148. let jenisLabel = selectedOptionItems[indexPath.row].label
  149. btnJenisOptions.setTitle(jenisLabel, for: .normal)
  150. }
  151. hideOptions()
  152. }
  153. }