PengisianSurveyVC.swift 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. //
  2. // PengisianSurveyVC.swift
  3. // Sirani
  4. //
  5. // Created by Anhar Solehudin on 14/04/19.
  6. // Copyright © 2019 Anhar Solehudin. All rights reserved.
  7. //
  8. import UIKit
  9. class PengisianSurveyVC: UIViewController {
  10. // Outlets
  11. @IBOutlet weak var lblPertanyaan: UILabel!
  12. @IBOutlet weak var rbAnswer1: UIButton!
  13. @IBOutlet weak var btnAnswer1: UIButton!
  14. @IBOutlet weak var rbAnswer2: UIButton!
  15. @IBOutlet weak var btnAnswer2: UIButton!
  16. @IBOutlet weak var rbAnswer3: UIButton!
  17. @IBOutlet weak var btnAnswer3: UIButton!
  18. @IBOutlet weak var rbAnswer4: UIButton!
  19. @IBOutlet weak var btnAnswer4: UIButton!
  20. @IBOutlet weak var rbAnswer5: UIButton!
  21. @IBOutlet weak var btnAnswer5: UIButton!
  22. @IBOutlet weak var progressLayout: UIView!
  23. @IBOutlet weak var progress: UIActivityIndicatorView!
  24. // String Message
  25. private let alertNoConnectionTitle = "Informasi"
  26. private let alertNoConnectionMsg = "Sepertinya Anda sedang tidak tersambung pada koneksi internet"
  27. private let alertNoConnectionActionYes = "OK"
  28. private let saveFailedMsg = "Mengirim jawaban gagal, silahkan ulangi kembali"
  29. // Initialize
  30. private var presenter: PengisianSurveyPresenter!
  31. private var answers: [SurveyList] = [SurveyList]()
  32. private var selected_pertanyaan_id = 0
  33. private var selected_answer_id = 0
  34. // Others
  35. private var loading = false
  36. // View Lifecycles
  37. override var preferredStatusBarStyle: UIStatusBarStyle {
  38. return .lightContent
  39. }
  40. override func viewDidLoad() {
  41. super.viewDidLoad()
  42. presenter = PengisianSurveyPresenter(siraniApiServices: SiraniApiServices())
  43. }
  44. override func viewWillAppear(_ animated: Bool) {
  45. presenter.attachView(view: self)
  46. }
  47. override func viewDidAppear(_ animated: Bool) {
  48. loadPertanyaan()
  49. }
  50. override func viewDidDisappear(_ animated: Bool) {
  51. presenter.detachView()
  52. }
  53. // private functions
  54. private func loadPertanyaan() {
  55. if !loading {
  56. if ConnectionHelper.isConnectedToNetwork() {
  57. presenter.loadPertanyaan()
  58. presenter.loadListJawaban()
  59. } else {
  60. showNoConnection()
  61. }
  62. }
  63. }
  64. private func selectanswer1() {
  65. selected_pertanyaan_id = answers[0].survey_id
  66. selected_answer_id = answers[0].id_jawaban
  67. rbAnswer1.setImage(UIImage(named: "checked-rb"), for: .normal)
  68. rbAnswer2.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  69. rbAnswer3.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  70. rbAnswer4.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  71. rbAnswer5.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  72. }
  73. private func selectanswer2() {
  74. selected_pertanyaan_id = answers[1].survey_id
  75. selected_answer_id = answers[1].id_jawaban
  76. rbAnswer1.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  77. rbAnswer2.setImage(UIImage(named: "checked-rb"), for: .normal)
  78. rbAnswer3.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  79. rbAnswer4.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  80. rbAnswer5.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  81. }
  82. private func selectanswer3() {
  83. selected_pertanyaan_id = answers[2].survey_id
  84. selected_answer_id = answers[2].id_jawaban
  85. rbAnswer1.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  86. rbAnswer2.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  87. rbAnswer3.setImage(UIImage(named: "checked-rb"), for: .normal)
  88. rbAnswer4.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  89. rbAnswer5.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  90. }
  91. private func selectanswer4() {
  92. selected_pertanyaan_id = answers[3].survey_id
  93. selected_answer_id = answers[3].id_jawaban
  94. rbAnswer1.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  95. rbAnswer2.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  96. rbAnswer3.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  97. rbAnswer4.setImage(UIImage(named: "checked-rb"), for: .normal)
  98. rbAnswer5.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  99. }
  100. private func selectanswer5() {
  101. selected_pertanyaan_id = answers[4].survey_id
  102. selected_answer_id = answers[4].id_jawaban
  103. rbAnswer1.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  104. rbAnswer2.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  105. rbAnswer3.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  106. rbAnswer4.setImage(UIImage(named: "unchecked-rb"), for: .normal)
  107. rbAnswer5.setImage(UIImage(named: "checked-rb"), for: .normal)
  108. }
  109. private func saveAnswer() {
  110. if !loading {
  111. if ConnectionHelper.isConnectedToNetwork() {
  112. if selected_answer_id > 0 {
  113. presenter.saveAnswer(survey_id: selected_pertanyaan_id, jawaban: selected_answer_id)
  114. }
  115. } else {
  116. showNoConnection()
  117. }
  118. }
  119. }
  120. // actions
  121. @IBAction func onBtnBackTap(_ sender: Any) {
  122. performSegue(withIdentifier: "unwindPengisianSurveyToHomeSegueId", sender: self)
  123. }
  124. @IBAction func onRbAnswer1Tap(_ sender: Any) {
  125. selectanswer1()
  126. }
  127. @IBAction func onBtnAnswer1Tap(_ sender: Any) {
  128. selectanswer1()
  129. }
  130. @IBAction func onRbAnswer2Tap(_ sender: Any) {
  131. selectanswer2()
  132. }
  133. @IBAction func onBtnAnswer2Tap(_ sender: Any) {
  134. selectanswer2()
  135. }
  136. @IBAction func onRbAnswer3Tap(_ sender: Any) {
  137. selectanswer3()
  138. }
  139. @IBAction func onBtnAnswer3Tap(_ sender: Any) {
  140. selectanswer3()
  141. }
  142. @IBAction func onRbAnswer4Tap(_ sender: Any) {
  143. selectanswer4()
  144. }
  145. @IBAction func onBtnAnswer4Tap(_ sender: Any) {
  146. selectanswer4()
  147. }
  148. @IBAction func onRbAnswer5Tap(_ sender: Any) {
  149. selectanswer5()
  150. }
  151. @IBAction func onBtnAnswer5Tap(_ sender: Any) {
  152. selectanswer5()
  153. }
  154. @IBAction func onBtnSimpanTap(_ sender: Any) {
  155. saveAnswer()
  156. }
  157. }
  158. extension PengisianSurveyVC: PengisianSurveyViewDelegate {
  159. func showNoConnection() {
  160. let alertNoConnection = UIAlertController(
  161. title: alertNoConnectionTitle,
  162. message: alertNoConnectionMsg,
  163. preferredStyle: .alert
  164. )
  165. alertNoConnection.addAction(
  166. UIAlertAction(title: alertNoConnectionActionYes, style: .default, handler: nil)
  167. )
  168. self.present(alertNoConnection, animated: true, completion: nil)
  169. }
  170. func showLoading() {
  171. loading = true
  172. progress.startAnimating()
  173. progressLayout.show()
  174. }
  175. func hideLoading() {
  176. loading = false
  177. progress.stopAnimating()
  178. progressLayout.hide()
  179. }
  180. func setPertanyaan(pertanyaan: String) {
  181. lblPertanyaan.text = pertanyaan
  182. }
  183. func setJawabanList(jawabanList: [SurveyList]) {
  184. answers.removeAll()
  185. if jawabanList.count > 0 {
  186. answers.append(jawabanList[0])
  187. answers.append(jawabanList[1])
  188. answers.append(jawabanList[2])
  189. answers.append(jawabanList[3])
  190. answers.append(jawabanList[4])
  191. btnAnswer1.setTitle(jawabanList[0].nama_jawaban, for: .normal)
  192. btnAnswer2.setTitle(jawabanList[1].nama_jawaban, for: .normal)
  193. btnAnswer3.setTitle(jawabanList[2].nama_jawaban, for: .normal)
  194. btnAnswer4.setTitle(jawabanList[3].nama_jawaban, for: .normal)
  195. btnAnswer5.setTitle(jawabanList[4].nama_jawaban, for: .normal)
  196. } else {
  197. btnAnswer1.setTitle("", for: .normal)
  198. btnAnswer2.setTitle("", for: .normal)
  199. btnAnswer3.setTitle("", for: .normal)
  200. btnAnswer4.setTitle("", for: .normal)
  201. btnAnswer5.setTitle("", for: .normal)
  202. }
  203. }
  204. func onSaveSuccess(msg: String) {
  205. let alertNoConnection = UIAlertController(
  206. title: alertNoConnectionTitle,
  207. message: msg,
  208. preferredStyle: .alert
  209. )
  210. alertNoConnection.addAction(
  211. UIAlertAction(title: alertNoConnectionActionYes, style: .default, handler: nil)
  212. )
  213. self.present(alertNoConnection, animated: true, completion: nil)
  214. }
  215. func onSaveFailed() {
  216. let alertNoConnection = UIAlertController(
  217. title: alertNoConnectionTitle,
  218. message: saveFailedMsg,
  219. preferredStyle: .alert
  220. )
  221. alertNoConnection.addAction(
  222. UIAlertAction(title: alertNoConnectionActionYes, style: .default, handler: nil)
  223. )
  224. self.present(alertNoConnection, animated: true, completion: nil)
  225. }
  226. }