decidim-elections 0.27.7 → 0.28.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (459) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +60 -3
  3. data/app/cells/decidim/elections/content_blocks/related_elections_cell.rb +13 -0
  4. data/app/cells/decidim/elections/election_cell.rb +7 -2
  5. data/app/cells/decidim/elections/election_g_cell.rb +23 -0
  6. data/app/cells/decidim/elections/election_metadata_cell.rb +57 -0
  7. data/app/cells/decidim/elections/election_preview/show.erb +24 -24
  8. data/app/cells/decidim/elections/election_results/progress_bar.erb +6 -7
  9. data/app/cells/decidim/elections/election_results/show.erb +36 -33
  10. data/app/cells/decidim/elections/election_s_cell.rb +10 -0
  11. data/app/cells/decidim/elections/election_vote_cta/show.erb +14 -26
  12. data/app/cells/decidim/elections/election_vote_cta_cell.rb +0 -9
  13. data/app/cells/decidim/elections/highlighted_elections_for_component/show.erb +18 -0
  14. data/app/cells/decidim/elections/highlighted_elections_for_component_cell.rb +50 -0
  15. data/app/cells/decidim/elections/remaining_time_callout/show.erb +1 -3
  16. data/app/cells/decidim/elections/voting_step_navigation/show.erb +21 -25
  17. data/app/cells/decidim/elections/voting_step_navigation_cell.rb +2 -2
  18. data/app/cells/decidim/votings/content_block_cell.rb +5 -1
  19. data/app/cells/decidim/votings/content_blocks/hero_cell.rb +53 -0
  20. data/app/cells/decidim/votings/content_blocks/hero_settings_form_cell.rb +15 -0
  21. data/app/cells/decidim/votings/content_blocks/highlighted_votings_cell.rb +12 -21
  22. data/app/cells/decidim/votings/content_blocks/highlighted_votings_settings_form/show.erb +1 -1
  23. data/app/cells/decidim/votings/content_blocks/main_data_cell.rb +34 -0
  24. data/app/cells/decidim/votings/content_blocks/metrics_cell.rb +17 -0
  25. data/app/cells/decidim/votings/content_blocks/polling_stations/show.erb +21 -0
  26. data/app/cells/decidim/votings/content_blocks/polling_stations_cell.rb +31 -0
  27. data/app/cells/decidim/votings/content_blocks/statistics_cell.rb +18 -0
  28. data/app/cells/decidim/votings/polling_officers/polling_officers_picker/show.erb +14 -13
  29. data/app/cells/decidim/votings/polling_officers/polling_officers_picker_cell.rb +19 -16
  30. data/app/cells/decidim/votings/polling_station_closure_certificate/show.erb +5 -7
  31. data/app/cells/decidim/votings/polling_station_closure_recount/show.erb +55 -59
  32. data/app/cells/decidim/votings/voting_cell.rb +7 -2
  33. data/app/cells/decidim/votings/voting_dropdown_metadata_cell.rb +19 -0
  34. data/app/cells/decidim/votings/voting_g_cell.rb +19 -0
  35. data/app/cells/decidim/votings/voting_map/show.erb +16 -0
  36. data/app/cells/decidim/votings/voting_map_cell.rb +28 -0
  37. data/app/cells/decidim/votings/voting_metadata_cell.rb +66 -0
  38. data/app/cells/decidim/votings/voting_s_cell.rb +10 -0
  39. data/app/commands/decidim/elections/admin/add_user_as_trustee.rb +5 -5
  40. data/app/commands/decidim/elections/admin/create_answer.rb +0 -1
  41. data/app/commands/decidim/elections/admin/create_election.rb +0 -1
  42. data/app/commands/decidim/elections/admin/destroy_answer.rb +0 -1
  43. data/app/commands/decidim/elections/admin/destroy_election.rb +0 -1
  44. data/app/commands/decidim/elections/admin/end_vote.rb +2 -2
  45. data/app/commands/decidim/elections/admin/import_proposals_to_elections.rb +1 -1
  46. data/app/commands/decidim/elections/admin/publish_election.rb +1 -1
  47. data/app/commands/decidim/elections/admin/publish_results.rb +2 -2
  48. data/app/commands/decidim/elections/admin/report_missing_trustee.rb +2 -2
  49. data/app/commands/decidim/elections/admin/setup_election.rb +2 -2
  50. data/app/commands/decidim/elections/admin/start_key_ceremony.rb +2 -2
  51. data/app/commands/decidim/elections/admin/start_tally.rb +2 -2
  52. data/app/commands/decidim/elections/admin/start_vote.rb +2 -2
  53. data/app/commands/decidim/elections/admin/unpublish_election.rb +1 -1
  54. data/app/commands/decidim/elections/admin/update_answer.rb +0 -1
  55. data/app/commands/decidim/elections/admin/update_answer_selection.rb +1 -1
  56. data/app/commands/decidim/elections/admin/update_election.rb +0 -1
  57. data/app/commands/decidim/elections/trustee_zone/update_election_bulletin_board_status.rb +3 -3
  58. data/app/commands/decidim/elections/voter/cast_vote.rb +1 -1
  59. data/app/commands/decidim/elections/voter/update_vote_status.rb +2 -2
  60. data/app/commands/decidim/votings/admin/create_ballot_style.rb +1 -1
  61. data/app/commands/decidim/votings/admin/create_monitoring_committee_member.rb +4 -4
  62. data/app/commands/decidim/votings/admin/create_polling_officer.rb +4 -4
  63. data/app/commands/decidim/votings/admin/create_polling_station.rb +1 -1
  64. data/app/commands/decidim/votings/admin/create_voting.rb +1 -1
  65. data/app/commands/decidim/votings/admin/destroy_ballot_style.rb +1 -1
  66. data/app/commands/decidim/votings/admin/destroy_monitoring_committee_member.rb +1 -1
  67. data/app/commands/decidim/votings/admin/destroy_polling_officer.rb +1 -1
  68. data/app/commands/decidim/votings/admin/manage_polling_station.rb +1 -1
  69. data/app/commands/decidim/votings/admin/monitoring_committee_validate_polling_station_closure.rb +1 -1
  70. data/app/commands/decidim/votings/admin/update_ballot_style.rb +1 -1
  71. data/app/commands/decidim/votings/admin/update_voting.rb +1 -1
  72. data/app/commands/decidim/votings/census/admin/create_dataset.rb +2 -2
  73. data/app/commands/decidim/votings/census/admin/create_datum.rb +3 -3
  74. data/app/commands/decidim/votings/census/admin/destroy_dataset.rb +1 -1
  75. data/app/commands/decidim/votings/census/admin/increment_dataset_processed_rows.rb +1 -1
  76. data/app/commands/decidim/votings/census/admin/launch_access_codes_generation.rb +1 -1
  77. data/app/commands/decidim/votings/census/admin/update_dataset.rb +1 -1
  78. data/app/commands/decidim/votings/certify_polling_station_closure.rb +1 -2
  79. data/app/commands/decidim/votings/create_polling_station_closure.rb +1 -1
  80. data/app/commands/decidim/votings/create_polling_station_results.rb +1 -1
  81. data/app/commands/decidim/votings/send_access_code.rb +5 -1
  82. data/app/commands/decidim/votings/sign_polling_station_closure.rb +2 -2
  83. data/app/commands/decidim/votings/voter/in_person_vote.rb +1 -1
  84. data/app/constraints/decidim/votings/current_voting.rb +1 -1
  85. data/app/controllers/concerns/decidim/elections/content_security_policy.rb +23 -0
  86. data/app/controllers/concerns/decidim/elections/has_vote_flow.rb +2 -2
  87. data/app/controllers/concerns/decidim/votings/admin/voting_admin.rb +1 -1
  88. data/app/controllers/concerns/decidim/votings/needs_voting.rb +1 -1
  89. data/app/controllers/decidim/elections/admin/answers_controller.rb +9 -10
  90. data/app/controllers/decidim/elections/admin/application_controller.rb +1 -0
  91. data/app/controllers/decidim/elections/admin/elections_controller.rb +7 -7
  92. data/app/controllers/decidim/elections/admin/feedback_forms_controller.rb +2 -2
  93. data/app/controllers/decidim/elections/admin/proposals_imports_controller.rb +3 -3
  94. data/app/controllers/decidim/elections/admin/questions_controller.rb +7 -7
  95. data/app/controllers/decidim/elections/admin/steps_controller.rb +4 -4
  96. data/app/controllers/decidim/elections/admin/trustees_participatory_spaces_controller.rb +2 -2
  97. data/app/controllers/decidim/elections/application_controller.rb +1 -0
  98. data/app/controllers/decidim/elections/elections_controller.rb +5 -2
  99. data/app/controllers/decidim/elections/trustee_zone/application_controller.rb +1 -0
  100. data/app/controllers/decidim/elections/trustee_zone/elections_controller.rb +2 -2
  101. data/app/controllers/decidim/elections/trustee_zone/trustees_controller.rb +3 -3
  102. data/app/controllers/decidim/elections/votes_controller.rb +19 -13
  103. data/app/controllers/decidim/votings/admin/monitoring_committee_election_results_controller.rb +11 -3
  104. data/app/controllers/decidim/votings/admin/monitoring_committee_members_controller.rb +3 -3
  105. data/app/controllers/decidim/votings/admin/monitoring_committee_polling_station_closures_controller.rb +3 -3
  106. data/app/controllers/decidim/votings/admin/polling_officers_controller.rb +3 -3
  107. data/app/controllers/decidim/votings/admin/polling_stations_controller.rb +3 -4
  108. data/app/controllers/decidim/votings/admin/voting_attachment_collections_controller.rb +5 -0
  109. data/app/controllers/decidim/votings/admin/voting_attachments_controller.rb +5 -0
  110. data/app/controllers/decidim/votings/admin/voting_publications_controller.rb +25 -0
  111. data/app/controllers/decidim/votings/admin/votings_controller.rb +2 -26
  112. data/app/controllers/decidim/votings/admin/votings_landing_page_content_blocks_controller.rb +1 -5
  113. data/app/controllers/decidim/votings/admin/votings_landing_page_controller.rb +4 -7
  114. data/app/controllers/decidim/votings/census/admin/census_controller.rb +2 -2
  115. data/app/controllers/decidim/votings/polling_officer_zone/closures_controller.rb +12 -12
  116. data/app/controllers/decidim/votings/polling_officer_zone/in_person_votes_controller.rb +17 -10
  117. data/app/controllers/decidim/votings/polling_officer_zone/polling_officers_controller.rb +1 -1
  118. data/app/controllers/decidim/votings/votings_controller.rb +7 -9
  119. data/app/events/decidim/elections/election_published_event.rb +1 -1
  120. data/app/events/decidim/elections/trustees/notify_new_trustee_event.rb +1 -1
  121. data/app/events/decidim/elections/trustees/notify_trustee_new_election_event.rb +1 -1
  122. data/app/events/decidim/elections/votes/vote_accepted_event.rb +1 -1
  123. data/app/events/decidim/votings/polling_officers/polling_station_assigned_event.rb +1 -1
  124. data/app/forms/decidim/elections/admin/answer_form.rb +1 -1
  125. data/app/forms/decidim/elections/admin/election_form.rb +1 -1
  126. data/app/forms/decidim/votings/admin/publish_results_form.rb +5 -5
  127. data/app/forms/decidim/votings/admin/voting_form.rb +1 -1
  128. data/app/forms/decidim/votings/admin/{polling_officer_form.rb → voting_user_role_form.rb} +1 -1
  129. data/app/forms/decidim/votings/census/frontend_fields.rb +1 -1
  130. data/app/forms/decidim/votings/census/in_person_fields.rb +8 -4
  131. data/app/forms/decidim/votings/closure_result_form.rb +2 -2
  132. data/app/helpers/decidim/elections/admin/trustees_participatory_spaces_helper.rb +4 -2
  133. data/app/helpers/decidim/elections/application_helper.rb +8 -0
  134. data/app/helpers/decidim/votings/map_helper.rb +22 -0
  135. data/app/helpers/decidim/votings/votings_helper.rb +33 -0
  136. data/app/jobs/decidim/votings/census/admin/create_datum_job.rb +1 -1
  137. data/app/jobs/decidim/votings/census/admin/generate_access_codes_job.rb +2 -2
  138. data/app/mailers/decidim/votings/access_code_mailer.rb +1 -1
  139. data/app/mailers/decidim/votings/census/export_mailer.rb +1 -1
  140. data/app/models/decidim/elections/trustee.rb +2 -2
  141. data/app/models/decidim/votings/ballot_style.rb +1 -1
  142. data/app/models/decidim/votings/polling_officer.rb +2 -2
  143. data/app/models/decidim/votings/polling_station.rb +1 -1
  144. data/app/packs/entrypoints/decidim_elections.js +12 -0
  145. data/app/packs/entrypoints/decidim_elections_admin.js +6 -0
  146. data/app/packs/entrypoints/decidim_votings.js +11 -0
  147. data/app/packs/entrypoints/decidim_votings_admin.js +10 -0
  148. data/app/packs/src/decidim/elections/admin/pending_action.js +10 -7
  149. data/app/packs/src/decidim/elections/admin/trustees_process.js +107 -104
  150. data/app/packs/src/decidim/elections/admin/vote_statistics.js +6 -3
  151. data/app/packs/src/decidim/elections/broken_promises_handler.js +9 -7
  152. data/app/packs/src/decidim/elections/election_log.js +126 -128
  153. data/app/packs/src/decidim/elections/trustee/key_ceremony.js +138 -139
  154. data/app/packs/src/decidim/elections/trustee/tally.js +122 -118
  155. data/app/packs/src/decidim/elections/trustee/trustee_zone.js +9 -7
  156. data/app/packs/src/decidim/elections/voter/casting-vote.js +9 -7
  157. data/app/packs/src/decidim/elections/voter/new-vote.js +92 -71
  158. data/app/packs/src/decidim/elections/voter/setup-preview.js +0 -4
  159. data/app/packs/src/decidim/elections/voter/setup-vote.js +0 -4
  160. data/app/packs/src/decidim/elections/voter/verify-vote.js +11 -6
  161. data/app/packs/src/decidim/elections/voter/vote_questions.component.js +74 -28
  162. data/app/packs/src/decidim/votings/admin/polling_officers_picker.js +16 -31
  163. data/app/packs/src/decidim/votings/admin/polling_stations_form.js +4 -1
  164. data/app/packs/src/decidim/votings/admin/{polling_officers_form.js → voting_user_role_form.js} +1 -1
  165. data/app/packs/src/decidim/votings/in-person-vote.js +4 -4
  166. data/app/packs/src/decidim/votings/polling_officer_zone/edit-closure.js +4 -4
  167. data/app/packs/src/decidim/votings/polling_officer_zone/in-person-vote.js +1 -1
  168. data/app/packs/src/decidim/votings/polling_officer_zone/new-closure.js +6 -8
  169. data/app/packs/stylesheets/decidim/elections/elections.scss +200 -6
  170. data/app/packs/stylesheets/decidim/votings/admin/votings/_ballot-styles.scss +3 -3
  171. data/app/packs/stylesheets/decidim/votings/admin/votings/_monitoring-committee-polling-station-closures.scss +2 -2
  172. data/app/packs/stylesheets/decidim/votings/admin/votings/_results.scss +1 -1
  173. data/app/packs/stylesheets/decidim/votings/admin/votings.scss +20 -0
  174. data/app/packs/stylesheets/decidim/votings/votings.scss +53 -2
  175. data/app/permissions/decidim/votings/admin/permissions.rb +2 -2
  176. data/app/presenters/decidim/elections/admin_log/election_presenter.rb +2 -2
  177. data/app/presenters/decidim/elections/admin_log/trustee_presenter.rb +2 -2
  178. data/app/presenters/decidim/elections/trustee_presenter.rb +1 -1
  179. data/app/presenters/decidim/votings/admin_log/ballot_style_presenter.rb +2 -2
  180. data/app/presenters/decidim/votings/admin_log/monitoring_committee_member_presenter.rb +2 -2
  181. data/app/presenters/decidim/votings/admin_log/polling_officer_presenter.rb +2 -2
  182. data/app/presenters/decidim/votings/admin_log/polling_station_presenter.rb +2 -2
  183. data/app/presenters/decidim/votings/admin_log/voting_presenter.rb +2 -2
  184. data/app/presenters/decidim/votings/census/admin_log/dataset_presenter.rb +2 -2
  185. data/app/presenters/decidim/votings/voting_stats_presenter.rb +3 -42
  186. data/app/services/decidim/votings/census/access_codes_exporter.rb +1 -1
  187. data/app/services/decidim/votings/census_vote_flow.rb +3 -3
  188. data/app/views/decidim/elections/admin/answers/_form.html.erb +16 -18
  189. data/app/views/decidim/elections/admin/answers/edit.html.erb +21 -5
  190. data/app/views/decidim/elections/admin/answers/index.html.erb +33 -18
  191. data/app/views/decidim/elections/admin/answers/new.html.erb +21 -5
  192. data/app/views/decidim/elections/admin/elections/_form.html.erb +20 -19
  193. data/app/views/decidim/elections/admin/elections/edit.html.erb +16 -6
  194. data/app/views/decidim/elections/admin/elections/index.html.erb +72 -70
  195. data/app/views/decidim/elections/admin/elections/new.html.erb +16 -6
  196. data/app/views/decidim/elections/admin/proposals_imports/new.html.erb +36 -21
  197. data/app/views/decidim/elections/admin/questions/_form.html.erb +18 -20
  198. data/app/views/decidim/elections/admin/questions/edit.html.erb +20 -6
  199. data/app/views/decidim/elections/admin/questions/index.html.erb +50 -49
  200. data/app/views/decidim/elections/admin/questions/new.html.erb +20 -5
  201. data/app/views/decidim/elections/admin/steps/_create_election.html.erb +41 -36
  202. data/app/views/decidim/elections/admin/steps/_created.html.erb +2 -2
  203. data/app/views/decidim/elections/admin/steps/_key_ceremony.html.erb +7 -7
  204. data/app/views/decidim/elections/admin/steps/_key_ceremony_ended.html.erb +2 -2
  205. data/app/views/decidim/elections/admin/steps/_results_published.html.erb +4 -4
  206. data/app/views/decidim/elections/admin/steps/_tally_ended.html.erb +4 -4
  207. data/app/views/decidim/elections/admin/steps/_tally_started.html.erb +11 -11
  208. data/app/views/decidim/elections/admin/steps/_vote.html.erb +3 -3
  209. data/app/views/decidim/elections/admin/steps/_vote_ended.html.erb +2 -2
  210. data/app/views/decidim/elections/admin/steps/_vote_stats.html.erb +2 -2
  211. data/app/views/decidim/elections/admin/steps/index.html.erb +44 -37
  212. data/app/views/decidim/elections/admin/trustees_participatory_spaces/_form.html.erb +10 -14
  213. data/app/views/decidim/elections/admin/trustees_participatory_spaces/index.html.erb +57 -60
  214. data/app/views/decidim/elections/admin/trustees_participatory_spaces/new.html.erb +16 -5
  215. data/app/views/decidim/elections/elections/_elections.html.erb +9 -16
  216. data/app/views/decidim/elections/elections/election_log.html.erb +171 -179
  217. data/app/views/decidim/elections/elections/index.html.erb +18 -21
  218. data/app/views/decidim/elections/elections/index.js.erb +0 -5
  219. data/app/views/decidim/elections/elections/show.html.erb +63 -39
  220. data/app/views/decidim/elections/shared/_broken_promises_modal.html.erb +18 -27
  221. data/app/views/decidim/elections/trustee_zone/elections/_backup_modal.html.erb +10 -20
  222. data/app/views/decidim/elections/trustee_zone/elections/_key_ceremony_steps.html.erb +32 -27
  223. data/app/views/decidim/elections/trustee_zone/elections/_restore_modal.html.erb +11 -21
  224. data/app/views/decidim/elections/trustee_zone/elections/_tally_started_steps.html.erb +46 -41
  225. data/app/views/decidim/elections/trustee_zone/elections/show.html.erb +4 -6
  226. data/app/views/decidim/elections/trustee_zone/trustees/_no_public_keys.html.erb +30 -0
  227. data/app/views/decidim/elections/trustee_zone/trustees/_public_keys.html.erb +17 -0
  228. data/app/views/decidim/elections/trustee_zone/trustees/_table.html.erb +28 -0
  229. data/app/views/decidim/elections/trustee_zone/trustees/show.html.erb +21 -96
  230. data/app/views/decidim/elections/votes/_new_ballot_decision_step.html.erb +22 -26
  231. data/app/views/decidim/elections/votes/_new_confirm_step.html.erb +59 -47
  232. data/app/views/decidim/elections/votes/_new_encrypting_step.html.erb +8 -19
  233. data/app/views/decidim/elections/votes/_new_question.html.erb +12 -28
  234. data/app/views/decidim/elections/votes/_new_question_modal.html.erb +20 -23
  235. data/app/views/decidim/elections/votes/_onboarding_modal.html.erb +14 -22
  236. data/app/views/decidim/elections/votes/_show_casted.html.erb +28 -30
  237. data/app/views/decidim/elections/votes/_show_casting.html.erb +12 -19
  238. data/app/views/decidim/elections/votes/_show_failed.html.erb +20 -17
  239. data/app/views/decidim/elections/votes/new.html.erb +78 -61
  240. data/app/views/decidim/elections/votes/show.html.erb +12 -11
  241. data/app/views/decidim/elections/votes/verify.html.erb +40 -61
  242. data/app/views/decidim/votings/admin/ballot_styles/_form.html.erb +19 -19
  243. data/app/views/decidim/votings/admin/ballot_styles/edit.html.erb +16 -6
  244. data/app/views/decidim/votings/admin/ballot_styles/index.html.erb +50 -54
  245. data/app/views/decidim/votings/admin/ballot_styles/new.html.erb +16 -6
  246. data/app/views/decidim/votings/admin/monitoring_committee_election_results/_results.html.erb +43 -46
  247. data/app/views/decidim/votings/admin/monitoring_committee_election_results/index.html.erb +23 -25
  248. data/app/views/decidim/votings/admin/monitoring_committee_election_results/show.html.erb +5 -5
  249. data/app/views/decidim/votings/admin/monitoring_committee_members/_form.html.erb +19 -20
  250. data/app/views/decidim/votings/admin/monitoring_committee_members/index.html.erb +32 -34
  251. data/app/views/decidim/votings/admin/monitoring_committee_members/new.html.erb +17 -6
  252. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/_closure_certificate_results.erb +1 -1
  253. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/_closures.html.erb +53 -56
  254. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/_elections.html.erb +22 -25
  255. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/edit.html.erb +12 -11
  256. data/app/views/decidim/votings/admin/monitoring_committee_polling_station_closures/show.html.erb +1 -1
  257. data/app/views/decidim/votings/admin/monitoring_committee_verify_elections/index.html.erb +37 -39
  258. data/app/views/decidim/votings/admin/polling_officers/_form.html.erb +19 -20
  259. data/app/views/decidim/votings/admin/polling_officers/index.html.erb +40 -41
  260. data/app/views/decidim/votings/admin/polling_officers/new.html.erb +17 -6
  261. data/app/views/decidim/votings/admin/polling_stations/_form.html.erb +25 -31
  262. data/app/views/decidim/votings/admin/polling_stations/edit.html.erb +17 -6
  263. data/app/views/decidim/votings/admin/polling_stations/index.html.erb +46 -47
  264. data/app/views/decidim/votings/admin/polling_stations/new.html.erb +17 -6
  265. data/app/views/decidim/votings/admin/votings/_form.html.erb +49 -52
  266. data/app/views/decidim/votings/admin/votings/edit.html.erb +35 -28
  267. data/app/views/decidim/votings/admin/votings/index.html.erb +58 -82
  268. data/app/views/decidim/votings/admin/votings/new.html.erb +16 -9
  269. data/app/views/decidim/votings/census/admin/census/_creating_data.html.erb +4 -4
  270. data/app/views/decidim/votings/census/admin/census/_export_codes.html.erb +3 -3
  271. data/app/views/decidim/votings/census/admin/census/_generate_codes.html.erb +8 -8
  272. data/app/views/decidim/votings/census/admin/census/_new_census.html.erb +8 -7
  273. data/app/views/decidim/votings/census/admin/census/_upload_info.html.erb +5 -5
  274. data/app/views/decidim/votings/census/admin/census/show.html.erb +7 -7
  275. data/app/views/decidim/votings/polling_officer_zone/closures/_answer_results_form_fields.html.erb +2 -3
  276. data/app/views/decidim/votings/polling_officer_zone/closures/_ballot_results_form_fields.html.erb +24 -35
  277. data/app/views/decidim/votings/polling_officer_zone/closures/_certify_form.html.erb +5 -9
  278. data/app/views/decidim/votings/polling_officer_zone/closures/_modal_ballots_count_error.html.erb +34 -48
  279. data/app/views/decidim/votings/polling_officer_zone/closures/_modal_ballots_results_count_error.html.erb +18 -18
  280. data/app/views/decidim/votings/polling_officer_zone/closures/_question_results_form_fields.html.erb +12 -17
  281. data/app/views/decidim/votings/polling_officer_zone/closures/_sign_form.html.erb +34 -49
  282. data/app/views/decidim/votings/polling_officer_zone/closures/edit.html.erb +50 -37
  283. data/app/views/decidim/votings/polling_officer_zone/closures/new.html.erb +57 -51
  284. data/app/views/decidim/votings/polling_officer_zone/closures/show.html.erb +44 -34
  285. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/_complete_voting.html.erb +40 -57
  286. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/_in_person_form.html.erb +34 -47
  287. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/_verify_document.html.erb +19 -22
  288. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/new.html.erb +12 -12
  289. data/app/views/decidim/votings/polling_officer_zone/in_person_votes/show.html.erb +22 -21
  290. data/app/views/decidim/votings/polling_officer_zone/polling_officers/_polling_station.html.erb +34 -41
  291. data/app/views/decidim/votings/polling_officer_zone/polling_officers/index.html.erb +9 -5
  292. data/app/views/decidim/votings/votings/_access_code_modal.html.erb +26 -31
  293. data/app/views/decidim/votings/votings/_check_fields.html.erb +19 -28
  294. data/app/views/decidim/votings/votings/_polling_officers_picker.html.erb +4 -0
  295. data/app/views/decidim/votings/votings/_votings.html.erb +5 -11
  296. data/app/views/decidim/votings/votings/check_census.html.erb +53 -53
  297. data/app/views/decidim/votings/votings/elections_log.html.erb +25 -22
  298. data/app/views/decidim/votings/votings/index.html.erb +24 -25
  299. data/app/views/decidim/votings/votings/index.js.erb +0 -5
  300. data/app/views/decidim/votings/votings/login.html.erb +51 -44
  301. data/app/views/decidim/votings/votings/show.html.erb +5 -7
  302. data/app/views/layouts/decidim/admin/voting.html.erb +11 -11
  303. data/app/views/layouts/decidim/admin/votings.html.erb +16 -0
  304. data/app/views/layouts/decidim/votings.html.erb +10 -14
  305. data/config/assets.rb +3 -28
  306. data/config/locales/ar.yml +0 -6
  307. data/config/locales/bg.yml +0 -1431
  308. data/config/locales/ca.yml +169 -223
  309. data/config/locales/cs.yml +157 -210
  310. data/config/locales/de.yml +161 -215
  311. data/config/locales/el.yml +164 -108
  312. data/config/locales/en.yml +183 -237
  313. data/config/locales/es-MX.yml +164 -218
  314. data/config/locales/es-PY.yml +163 -217
  315. data/config/locales/es.yml +168 -222
  316. data/config/locales/eu.yml +165 -222
  317. data/config/locales/fi-plain.yml +154 -208
  318. data/config/locales/fi.yml +157 -211
  319. data/config/locales/fr-CA.yml +168 -223
  320. data/config/locales/fr.yml +171 -226
  321. data/config/locales/ga-IE.yml +0 -40
  322. data/config/locales/gl.yml +2 -79
  323. data/config/locales/hu.yml +0 -62
  324. data/config/locales/it.yml +6 -243
  325. data/config/locales/ja.yml +173 -227
  326. data/config/locales/lt.yml +135 -204
  327. data/config/locales/lv.yml +0 -34
  328. data/config/locales/nl.yml +2 -211
  329. data/config/locales/no.yml +1 -131
  330. data/config/locales/pl.yml +3 -407
  331. data/config/locales/pt-BR.yml +4 -374
  332. data/config/locales/pt.yml +4 -245
  333. data/config/locales/ro-RO.yml +2 -143
  334. data/config/locales/ru.yml +0 -5
  335. data/config/locales/sk.yml +0 -5
  336. data/config/locales/sv.yml +11 -108
  337. data/config/locales/tr-TR.yml +58 -126
  338. data/config/locales/uk.yml +0 -5
  339. data/config/locales/zh-CN.yml +1 -68
  340. data/config/locales/zh-TW.yml +84 -166
  341. data/db/migrate/20210310120708_add_followable_counter_cache_to_votings.rb +2 -6
  342. data/lib/decidim/api/election_type.rb +1 -1
  343. data/lib/decidim/api/elections_type.rb +1 -1
  344. data/lib/decidim/elections/admin_engine.rb +4 -19
  345. data/lib/decidim/elections/component.rb +4 -452
  346. data/lib/decidim/elections/engine.rb +23 -1
  347. data/lib/decidim/elections/menu.rb +39 -0
  348. data/lib/decidim/elections/seeds.rb +435 -0
  349. data/lib/decidim/elections/test/factories.rb +22 -21
  350. data/lib/decidim/elections/trustee_zone_engine.rb +3 -7
  351. data/lib/decidim/elections/version.rb +1 -1
  352. data/lib/decidim/elections.rb +6 -0
  353. data/lib/decidim/votings/admin_engine.rb +16 -122
  354. data/lib/decidim/votings/census_admin_engine.rb +4 -8
  355. data/lib/decidim/votings/census_menu.rb +18 -0
  356. data/lib/decidim/votings/content_blocks/registry_manager.rb +88 -0
  357. data/lib/decidim/votings/engine.rb +12 -88
  358. data/lib/decidim/votings/menu.rb +164 -0
  359. data/lib/decidim/votings/participatory_space.rb +6 -190
  360. data/lib/decidim/votings/polling_officer_zone_engine.rb +3 -7
  361. data/lib/decidim/votings/polling_officer_zone_menu.rb +17 -0
  362. data/lib/decidim/votings/query_extensions.rb +4 -4
  363. data/lib/decidim/votings/seeds.rb +197 -0
  364. data/lib/decidim/votings/test/factories.rb +29 -13
  365. data/lib/decidim/votings/voting_serializer.rb +1 -1
  366. data/lib/tasks/decidim_elections.rake +2 -2
  367. metadata +76 -125
  368. data/app/cells/decidim/elections/election_m/data.erb +0 -19
  369. data/app/cells/decidim/elections/election_m/footer.erb +0 -5
  370. data/app/cells/decidim/elections/election_m/tags.erb +0 -3
  371. data/app/cells/decidim/elections/election_m_cell.rb +0 -96
  372. data/app/cells/decidim/elections/election_results/blank_votes.erb +0 -7
  373. data/app/cells/decidim/votings/content_blocks/highlighted_votings/show.erb +0 -30
  374. data/app/cells/decidim/votings/content_blocks/landing_page/attachments_and_folders_cell.rb +0 -22
  375. data/app/cells/decidim/votings/content_blocks/landing_page/description/show.erb +0 -15
  376. data/app/cells/decidim/votings/content_blocks/landing_page/description_cell.rb +0 -25
  377. data/app/cells/decidim/votings/content_blocks/landing_page/elections/show.erb +0 -15
  378. data/app/cells/decidim/votings/content_blocks/landing_page/elections/single.erb +0 -11
  379. data/app/cells/decidim/votings/content_blocks/landing_page/elections_cell.rb +0 -47
  380. data/app/cells/decidim/votings/content_blocks/landing_page/header/show.erb +0 -29
  381. data/app/cells/decidim/votings/content_blocks/landing_page/header_cell.rb +0 -108
  382. data/app/cells/decidim/votings/content_blocks/landing_page/header_settings_form_cell.rb +0 -17
  383. data/app/cells/decidim/votings/content_blocks/landing_page/metrics/show.erb +0 -12
  384. data/app/cells/decidim/votings/content_blocks/landing_page/metrics_cell.rb +0 -19
  385. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/address.erb +0 -14
  386. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/map.erb +0 -18
  387. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/show.erb +0 -25
  388. data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations_cell.rb +0 -56
  389. data/app/cells/decidim/votings/content_blocks/landing_page/statistics_cell.rb +0 -24
  390. data/app/cells/decidim/votings/content_blocks/landing_page/timeline/show.erb +0 -7
  391. data/app/cells/decidim/votings/content_blocks/landing_page/timeline_cell.rb +0 -17
  392. data/app/cells/decidim/votings/polling_officers/polling_officers_picker/polling_officers.erb +0 -12
  393. data/app/cells/decidim/votings/voting_m/data.erb +0 -21
  394. data/app/cells/decidim/votings/voting_m/footer.erb +0 -5
  395. data/app/cells/decidim/votings/voting_m_cell.rb +0 -94
  396. data/app/commands/decidim/votings/admin/publish_voting.rb +0 -40
  397. data/app/commands/decidim/votings/admin/unpublish_voting.rb +0 -40
  398. data/app/forms/decidim/votings/admin/monitoring_committee_member_form.rb +0 -27
  399. data/app/helpers/decidim/votings/admin/polling_officers_picker_helper.rb +0 -29
  400. data/app/packs/entrypoints/decidim_elections_admin_pending_action.js +0 -1
  401. data/app/packs/entrypoints/decidim_elections_admin_trustees_process.js +0 -1
  402. data/app/packs/entrypoints/decidim_elections_admin_vote_statistics.js +0 -1
  403. data/app/packs/entrypoints/decidim_elections_election_log.js +0 -1
  404. data/app/packs/entrypoints/decidim_elections_onboarding.js +0 -1
  405. data/app/packs/entrypoints/decidim_elections_trustee_key_ceremony.js +0 -1
  406. data/app/packs/entrypoints/decidim_elections_trustee_tally_started.js +0 -1
  407. data/app/packs/entrypoints/decidim_elections_trustee_trustee_zone.js +0 -1
  408. data/app/packs/entrypoints/decidim_elections_trustee_zone.js +0 -1
  409. data/app/packs/entrypoints/decidim_elections_trustee_zone.scss +0 -1
  410. data/app/packs/entrypoints/decidim_elections_voter_casting-vote.js +0 -1
  411. data/app/packs/entrypoints/decidim_elections_voter_new-vote.js +0 -1
  412. data/app/packs/entrypoints/decidim_elections_voter_setup-preview.js +0 -1
  413. data/app/packs/entrypoints/decidim_elections_voter_setup-vote.js +0 -1
  414. data/app/packs/entrypoints/decidim_elections_voter_verify-vote.js +0 -1
  415. data/app/packs/entrypoints/decidim_votings_admin_monitoring_committee_members_form.js +0 -1
  416. data/app/packs/entrypoints/decidim_votings_admin_polling_officers_form.js +0 -1
  417. data/app/packs/entrypoints/decidim_votings_admin_polling_officers_picker.js +0 -1
  418. data/app/packs/entrypoints/decidim_votings_admin_polling_stations_form.js +0 -1
  419. data/app/packs/entrypoints/decidim_votings_admin_update_census_dataset_status.js +0 -1
  420. data/app/packs/entrypoints/decidim_votings_admin_votings.js +0 -1
  421. data/app/packs/entrypoints/decidim_votings_admin_votings.scss +0 -1
  422. data/app/packs/entrypoints/decidim_votings_in-person-vote.js +0 -1
  423. data/app/packs/entrypoints/decidim_votings_voting-description-cell.js +0 -1
  424. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-edit-closure.js +0 -1
  425. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-in-person-vote.js +0 -1
  426. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-new-closure.js +0 -1
  427. data/app/packs/entrypoints/decidim_votings_voting_polling_officer_zone-sign-closure.js +0 -1
  428. data/app/packs/src/decidim/elections/onboarding.js +0 -5
  429. data/app/packs/src/decidim/votings/admin/monitoring_committee_members_form.js +0 -35
  430. data/app/packs/src/decidim/votings/voting-description-cell.js +0 -34
  431. data/app/packs/stylesheets/decidim/elections/focus/_accordion.scss +0 -36
  432. data/app/packs/stylesheets/decidim/elections/focus/_evote.scss +0 -344
  433. data/app/packs/stylesheets/decidim/elections/focus/_focus.scss +0 -128
  434. data/app/packs/stylesheets/decidim/elections/trustee_zone.scss +0 -24
  435. data/app/packs/stylesheets/decidim/votings/votings/_polling-stations-cell.scss +0 -6
  436. data/app/packs/stylesheets/decidim/votings/votings/_voting-description-cell.scss +0 -29
  437. data/app/views/decidim/elections/admin/answers/proposals_picker.html.erb +0 -1
  438. data/app/views/decidim/elections/elections/_count.html.erb +0 -1
  439. data/app/views/decidim/elections/elections/_election.html.erb +0 -1
  440. data/app/views/decidim/elections/elections/_filters.html.erb +0 -25
  441. data/app/views/decidim/elections/elections/_filters_small_view.html.erb +0 -18
  442. data/app/views/decidim/elections/votes/_focus_header.html.erb +0 -8
  443. data/app/views/decidim/elections/votes/_new_confirm_step_footer.html.erb +0 -23
  444. data/app/views/decidim/votings/admin/votings/polling_officers_picker.html.erb +0 -2
  445. data/app/views/decidim/votings/votings/_count.html.erb +0 -1
  446. data/app/views/decidim/votings/votings/_filters.html.erb +0 -25
  447. data/app/views/decidim/votings/votings/_filters_small_view.html.erb +0 -23
  448. data/app/views/decidim/votings/votings/_promoted_voting.html.erb +0 -27
  449. data/app/views/layouts/decidim/_election_votes_header.html.erb +0 -13
  450. data/app/views/layouts/decidim/election_votes.html.erb +0 -27
  451. data/app/views/layouts/decidim/voting_landing.html.erb +0 -13
  452. data/config/locales/he-IL.yml +0 -1
  453. data/db/seeds/Exampledocument.pdf +0 -0
  454. data/db/seeds/city.jpeg +0 -0
  455. data/db/seeds/city2.jpeg +0 -0
  456. data/decidim-elections.gemspec +0 -37
  457. data/lib/decidim/elections/seeds/city.jpeg +0 -0
  458. data/lib/decidim/votings/test/capybara_polling_officers_picker.rb +0 -49
  459. /data/app/cells/decidim/votings/content_blocks/{landing_page/header_settings_form → hero_settings_form}/show.erb +0 -0
@@ -3,12 +3,15 @@
3
3
  Decidim.register_participatory_space(:votings) do |participatory_space|
4
4
  participatory_space.icon = "media/images/decidim_votings.svg"
5
5
  participatory_space.model_class_name = "Decidim::Votings::Voting"
6
+ participatory_space.content_blocks_scope_name = "voting_landing_page"
6
7
  participatory_space.permissions_class_name = "Decidim::Votings::Permissions"
7
8
  participatory_space.stylesheet = "decidim/votings/votings"
8
9
  participatory_space.query_type = "Decidim::Votings::VotingType"
9
10
 
11
+ participatory_space.breadcrumb_cell = "decidim/votings/voting_dropdown_metadata"
12
+
10
13
  participatory_space.participatory_spaces do |organization|
11
- Decidim::Votings::Voting.where(organization: organization)
14
+ Decidim::Votings::Voting.where(organization:)
12
15
  end
13
16
 
14
17
  participatory_space.register_resource(:voting) do |resource|
@@ -39,196 +42,9 @@ Decidim.register_participatory_space(:votings) do |participatory_space|
39
42
  end
40
43
 
41
44
  participatory_space.seeds do
42
- organization = Decidim::Organization.first
43
- seeds_root = File.join(__dir__, "..", "..", "..", "db", "seeds")
44
-
45
- 3.times do |n|
46
- params = {
47
- organization: organization,
48
- title: Decidim::Faker::Localized.sentence(word_count: 5),
49
- slug: Decidim::Faker::Internet.unique.slug(words: nil, glue: "-"),
50
- description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
51
- Decidim::Faker::Localized.paragraph(sentence_count: 3)
52
- end,
53
- scope: n.positive? ? nil : Decidim::Scope.reorder(Arel.sql("RANDOM()")).first,
54
- banner_image: ActiveStorage::Blob.create_and_upload!(
55
- io: File.open(File.join(seeds_root, "city.jpeg")),
56
- filename: "banner_image.jpeg",
57
- content_type: "image/jpeg",
58
- metadata: nil
59
- ), # Keep after organization
60
- published_at: 2.weeks.ago,
61
- start_time: n.weeks.from_now,
62
- end_time: (n + 1).weeks.from_now + 4.hours,
63
- voting_type: Decidim::Votings::Voting.voting_types.values.sample,
64
- promoted: n.odd?
65
- }
66
-
67
- voting = Decidim.traceability.perform_action!(
68
- "publish",
69
- Decidim::Votings::Voting,
70
- organization.users.first,
71
- visibility: "all"
72
- ) do
73
- Decidim::Votings::Voting.create!(params)
74
- end
75
- voting.add_to_index_as_search_resource
76
-
77
- unless voting.online_voting?
78
- 3.times do
79
- params = {
80
- voting: voting,
81
- title: Decidim::Faker::Localized.sentence(word_count: 5),
82
- address: Faker::Address.full_address,
83
- latitude: Faker::Address.latitude,
84
- longitude: Faker::Address.longitude,
85
- location: Decidim::Faker::Localized.sentence,
86
- location_hints: Decidim::Faker::Localized.sentence
87
- }
88
-
89
- polling_station = Decidim.traceability.create!(
90
- Decidim::Votings::PollingStation,
91
- organization.users.first,
92
- params,
93
- visibility: "all"
94
- )
95
-
96
- email = "voting_#{voting.id}_president_#{polling_station.id}@example.org"
97
-
98
- user = Decidim::User.find_or_initialize_by(email: email)
99
- user.update!(
100
- name: Faker::Name.name,
101
- nickname: Faker::Twitter.unique.screen_name,
102
- password: "decidim123456789",
103
- password_confirmation: "decidim123456789",
104
- organization: organization,
105
- confirmed_at: Time.current,
106
- locale: I18n.default_locale,
107
- tos_agreement: true
108
- )
109
-
110
- Decidim.traceability.create!(
111
- Decidim::Votings::PollingOfficer,
112
- organization.users.first,
113
- {
114
- voting: voting,
115
- user: user,
116
- presided_polling_station: polling_station
117
- },
118
- visibility: "all"
119
- )
120
- end
121
- end
122
-
123
- landing_page_content_blocks = [:header, :description, :elections, :polling_stations, :attachments_and_folders, :stats, :metrics]
124
-
125
- landing_page_content_blocks.each.with_index(1) do |manifest_name, index|
126
- Decidim::ContentBlock.create(
127
- organization: organization,
128
- scope_name: :voting_landing_page,
129
- manifest_name: manifest_name,
130
- weight: index,
131
- scoped_resource_id: voting.id,
132
- published_at: Time.current
133
- )
134
- end
135
-
136
- 2.times do
137
- Decidim::Category.create!(
138
- name: Decidim::Faker::Localized.sentence(word_count: 5),
139
- description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
140
- Decidim::Faker::Localized.paragraph(sentence_count: 3)
141
- end,
142
- participatory_space: voting
143
- )
144
- end
45
+ require "decidim/votings/seeds"
145
46
 
146
- Decidim.component_manifests.each do |manifest|
147
- manifest.seed!(voting.reload)
148
- end
149
-
150
- unless voting.online_voting?
151
- voting.reload.published_elections.finished.each do |election|
152
- polling_officer = voting.polling_officers.sample
153
- ps_closure = Decidim::Votings::PollingStationClosure.create!(
154
- election: election,
155
- polling_officer: polling_officer,
156
- polling_station: polling_officer.polling_station,
157
- signed_at: Time.current,
158
- phase: :complete
159
- )
160
-
161
- valid_ballots = Faker::Number.number(digits: 3)
162
- Decidim::Elections::Result.create!(
163
- value: valid_ballots,
164
- closurable: ps_closure,
165
- question: nil,
166
- answer: nil,
167
- result_type: :valid_ballots
168
- )
169
-
170
- null_ballots = Faker::Number.number(digits: 1)
171
- Decidim::Elections::Result.create!(
172
- value: null_ballots,
173
- closurable: ps_closure,
174
- question: nil,
175
- answer: nil,
176
- result_type: :null_ballots
177
- )
178
-
179
- blank_ballots = Faker::Number.number(digits: 2)
180
- Decidim::Elections::Result.create!(
181
- value: blank_ballots,
182
- closurable: ps_closure,
183
- question: nil,
184
- answer: nil,
185
- result_type: :blank_ballots
186
- )
187
-
188
- Decidim::Elections::Result.create!(
189
- value: valid_ballots + null_ballots + blank_ballots,
190
- closurable: ps_closure,
191
- question: nil,
192
- answer: nil,
193
- result_type: :total_ballots
194
- )
195
-
196
- election.questions.each do |question|
197
- question_pending = valid_ballots
198
- question.answers.shuffle.each do |answer|
199
- answer_value = Faker::Number.between(from: 0, to: question_pending)
200
- Decidim::Elections::Result.create!(
201
- value: answer_value,
202
- closurable: ps_closure,
203
- question: question,
204
- answer: answer,
205
- result_type: :valid_answers
206
- )
207
- question_pending -= answer_value
208
- end
209
-
210
- next unless question.nota_option?
211
-
212
- Decidim::Elections::Result.create!(
213
- value: question_pending,
214
- closurable: ps_closure,
215
- question: question,
216
- answer: nil,
217
- result_type: :blank_answers
218
- )
219
- end
220
- end
221
- end
222
-
223
- (1..2).each do |i|
224
- ballot_style = voting.ballot_styles.create!(code: "DISTRICT#{i}")
225
- voting.elections.each do |election|
226
- election.questions.sample(1 + rand(election.questions.count)).each do |question|
227
- ballot_style.ballot_style_questions.create!(question: question)
228
- end
229
- end
230
- end
231
- end
47
+ Decidim::Votings::Seeds.new.call
232
48
  end
233
49
  end
234
50
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "decidim/votings/polling_officer_zone_menu"
4
+
3
5
  module Decidim
4
6
  module Votings
5
7
  # This is the engine that runs on the public interface for polling officers of `decidim-elections`.
@@ -29,13 +31,7 @@ module Decidim
29
31
  end
30
32
 
31
33
  initializer "decidim_elections.polling_officer_zone.menu" do
32
- Decidim.menu :user_menu do |menu|
33
- menu.add_item :decidim_votings_polling_officer_zone,
34
- I18n.t("menu.polling_officer_zone", scope: "decidim.votings.polling_officer_zone"),
35
- decidim.decidim_votings_polling_officer_zone_path,
36
- active: :inclusive,
37
- if: Decidim::Votings::PollingOfficer.polling_officer?(current_user)
38
- end
34
+ Decidim::Votings::PollingOfficerZoneMenu.register_user_menu!
39
35
  end
40
36
  end
41
37
  end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Votings
5
+ class PollingOfficerZoneMenu
6
+ def self.register_user_menu!
7
+ Decidim.menu :user_menu do |menu|
8
+ menu.add_item :decidim_votings_polling_officer_zone,
9
+ I18n.t("menu.polling_officer_zone", scope: "decidim.votings.polling_officer_zone"),
10
+ decidim.decidim_votings_polling_officer_zone_path,
11
+ active: :inclusive,
12
+ if: Decidim::Votings::PollingOfficer.polling_officer?(current_user)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -15,8 +15,8 @@ module Decidim
15
15
  [Decidim::Votings::VotingType],
16
16
  null: true,
17
17
  description: "Lists all votings" do
18
- argument :filter, Decidim::ParticipatoryProcesses::ParticipatoryProcessInputFilter, "This argument let's you filter the results", required: false
19
- argument :order, Decidim::ParticipatoryProcesses::ParticipatoryProcessInputSort, "This argument let's you order the results", required: false
18
+ argument :filter, Decidim::ParticipatoryProcesses::ParticipatoryProcessInputFilter, "This argument lets you filter the results", required: false
19
+ argument :order, Decidim::ParticipatoryProcesses::ParticipatoryProcessInputSort, "This argument lets you order the results", required: false
20
20
  end
21
21
 
22
22
  type.field :voting,
@@ -30,13 +30,13 @@ module Decidim
30
30
  def votings(filter: {}, order: {})
31
31
  manifest = Decidim.participatory_space_manifests.select { |m| m.name == :votings }.first
32
32
 
33
- Decidim::Core::ParticipatorySpaceListBase.new(manifest: manifest).call(object, { filter: filter, order: order }, context)
33
+ Decidim::Core::ParticipatorySpaceListBase.new(manifest:).call(object, { filter:, order: }, context)
34
34
  end
35
35
 
36
36
  def voting(id: nil)
37
37
  manifest = Decidim.participatory_space_manifests.select { |m| m.name == :votings }.first
38
38
 
39
- Decidim::Core::ParticipatorySpaceFinderBase.new(manifest: manifest).call(object, { id: id }, context)
39
+ Decidim::Core::ParticipatorySpaceFinderBase.new(manifest:).call(object, { id: }, context)
40
40
  end
41
41
  end
42
42
  end
@@ -0,0 +1,197 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/seeds"
4
+
5
+ module Decidim
6
+ module Votings
7
+ class Seeds < Decidim::Seeds
8
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
9
+ def call
10
+ organization = Decidim::Organization.first
11
+
12
+ 3.times do |n|
13
+ params = {
14
+ organization:,
15
+ title: Decidim::Faker::Localized.sentence(word_count: 5),
16
+ slug: Decidim::Faker::Internet.unique.slug(words: nil, glue: "-"),
17
+ description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
18
+ Decidim::Faker::Localized.paragraph(sentence_count: 3)
19
+ end,
20
+ scope: n.positive? ? nil : Decidim::Scope.all.sample,
21
+ banner_image: ::Faker::Boolean.boolean(true_ratio: 0.5) ? banner_image : nil, # Keep after organization
22
+ published_at: 2.weeks.ago,
23
+ start_time: n.weeks.from_now,
24
+ end_time: (n + 1).weeks.from_now + 4.hours,
25
+ voting_type: Decidim::Votings::Voting.voting_types.values.sample,
26
+ promoted: n.odd?
27
+ }
28
+
29
+ voting = Decidim.traceability.perform_action!(
30
+ "publish",
31
+ Decidim::Votings::Voting,
32
+ organization.users.first,
33
+ visibility: "all"
34
+ ) do
35
+ Decidim::Votings::Voting.create!(params)
36
+ end
37
+ voting.add_to_index_as_search_resource
38
+
39
+ unless voting.online_voting?
40
+ 3.times do
41
+ params = {
42
+ voting:,
43
+ title: Decidim::Faker::Localized.sentence(word_count: 5),
44
+ address: ::Faker::Address.full_address,
45
+ latitude: ::Faker::Address.latitude,
46
+ longitude: ::Faker::Address.longitude,
47
+ location: Decidim::Faker::Localized.sentence,
48
+ location_hints: Decidim::Faker::Localized.sentence
49
+ }
50
+
51
+ polling_station = Decidim.traceability.create!(
52
+ Decidim::Votings::PollingStation,
53
+ organization.users.first,
54
+ params,
55
+ visibility: "all"
56
+ )
57
+
58
+ email = "voting_#{voting.id}_president_#{polling_station.id}@example.org"
59
+
60
+ user = Decidim::User.find_or_initialize_by(email:)
61
+ user.update!(
62
+ name: ::Faker::Name.name,
63
+ nickname: ::Faker::Twitter.unique.screen_name,
64
+ password: "decidim123456789",
65
+ organization:,
66
+ confirmed_at: Time.current,
67
+ locale: I18n.default_locale,
68
+ tos_agreement: true
69
+ )
70
+
71
+ Decidim.traceability.create!(
72
+ Decidim::Votings::PollingOfficer,
73
+ organization.users.first,
74
+ {
75
+ voting:,
76
+ user:,
77
+ presided_polling_station: polling_station
78
+ },
79
+ visibility: "all"
80
+ )
81
+ end
82
+ end
83
+
84
+ landing_page_content_blocks = [:hero, :title, :related_elections, :polling_stations, :related_documents, :related_images, :stats, :metrics]
85
+
86
+ landing_page_content_blocks.each.with_index(1) do |manifest_name, index|
87
+ Decidim::ContentBlock.create(
88
+ organization:,
89
+ scope_name: :voting_landing_page,
90
+ manifest_name:,
91
+ weight: index,
92
+ scoped_resource_id: voting.id,
93
+ published_at: Time.current
94
+ )
95
+ end
96
+
97
+ 2.times do
98
+ Decidim::Category.create!(
99
+ name: Decidim::Faker::Localized.sentence(word_count: 5),
100
+ description: Decidim::Faker::Localized.wrapped("<p>", "</p>") do
101
+ Decidim::Faker::Localized.paragraph(sentence_count: 3)
102
+ end,
103
+ participatory_space: voting
104
+ )
105
+ end
106
+
107
+ Decidim.component_manifests.each do |manifest|
108
+ manifest.seed!(voting.reload)
109
+ end
110
+
111
+ unless voting.online_voting?
112
+ voting.reload.published_elections.finished.each do |election|
113
+ polling_officer = voting.polling_officers.sample
114
+ ps_closure = Decidim::Votings::PollingStationClosure.create!(
115
+ election:,
116
+ polling_officer:,
117
+ polling_station: polling_officer.polling_station,
118
+ signed_at: Time.current,
119
+ phase: :complete
120
+ )
121
+
122
+ valid_ballots = ::Faker::Number.number(digits: 3)
123
+ Decidim::Elections::Result.create!(
124
+ value: valid_ballots,
125
+ closurable: ps_closure,
126
+ question: nil,
127
+ answer: nil,
128
+ result_type: :valid_ballots
129
+ )
130
+
131
+ null_ballots = ::Faker::Number.number(digits: 1)
132
+ Decidim::Elections::Result.create!(
133
+ value: null_ballots,
134
+ closurable: ps_closure,
135
+ question: nil,
136
+ answer: nil,
137
+ result_type: :null_ballots
138
+ )
139
+
140
+ blank_ballots = ::Faker::Number.number(digits: 2)
141
+ Decidim::Elections::Result.create!(
142
+ value: blank_ballots,
143
+ closurable: ps_closure,
144
+ question: nil,
145
+ answer: nil,
146
+ result_type: :blank_ballots
147
+ )
148
+
149
+ Decidim::Elections::Result.create!(
150
+ value: valid_ballots + null_ballots + blank_ballots,
151
+ closurable: ps_closure,
152
+ question: nil,
153
+ answer: nil,
154
+ result_type: :total_ballots
155
+ )
156
+
157
+ election.questions.each do |question|
158
+ question_pending = valid_ballots
159
+ question.answers.shuffle.each do |answer|
160
+ answer_value = ::Faker::Number.between(from: 0, to: question_pending)
161
+ Decidim::Elections::Result.create!(
162
+ value: answer_value,
163
+ closurable: ps_closure,
164
+ question:,
165
+ answer:,
166
+ result_type: :valid_answers
167
+ )
168
+ question_pending -= answer_value
169
+ end
170
+
171
+ next unless question.nota_option?
172
+
173
+ Decidim::Elections::Result.create!(
174
+ value: question_pending,
175
+ closurable: ps_closure,
176
+ question:,
177
+ answer: nil,
178
+ result_type: :blank_answers
179
+ )
180
+ end
181
+ end
182
+ end
183
+
184
+ (1..2).each do |i|
185
+ ballot_style = voting.ballot_styles.create!(code: "DISTRICT#{i}")
186
+ voting.elections.each do |election|
187
+ election.questions.sample(1 + rand(election.questions.count)).each do |question|
188
+ ballot_style.ballot_style_questions.create!(question:)
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
194
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
195
+ end
196
+ end
197
+ end
@@ -4,7 +4,7 @@ require "decidim/core/test/factories"
4
4
  require "decidim/forms/test/factories"
5
5
 
6
6
  def format_birthdate(birthdate)
7
- format("%04d%02d%02d", birthdate.year, birthdate.month, birthdate.day) # rubocop:disable Style/FormatStringToken
7
+ format("%04d%02d%02d", birthdate.year, birthdate.month, birthdate.day)
8
8
  end
9
9
 
10
10
  def hash_for(*data)
@@ -24,7 +24,7 @@ FactoryBot.define do
24
24
  published_at { Time.current }
25
25
  start_time { 1.day.from_now }
26
26
  end_time { 3.days.from_now }
27
- decidim_scope_id { create(:scope, organization: organization).id }
27
+ decidim_scope_id { create(:scope, organization:).id }
28
28
  banner_image { Decidim::Dev.test_file("city2.jpeg", "image/jpeg") }
29
29
  introductory_image { Decidim::Dev.test_file("city.jpeg", "image/jpeg") }
30
30
  voting_type { "hybrid" }
@@ -69,6 +69,22 @@ FactoryBot.define do
69
69
  trait :hybrid do
70
70
  voting_type { "hybrid" }
71
71
  end
72
+
73
+ trait :with_content_blocks do
74
+ transient { blocks_manifests { [:hero] } }
75
+
76
+ after(:create) do |voting, evaluator|
77
+ evaluator.blocks_manifests.each do |manifest_name|
78
+ create(
79
+ :content_block,
80
+ organization: voting.organization,
81
+ scope_name: :voting_landing_page,
82
+ manifest_name:,
83
+ scoped_resource_id: voting.id
84
+ )
85
+ end
86
+ end
87
+ end
72
88
  end
73
89
 
74
90
  factory :voting_election, parent: :election do
@@ -77,7 +93,7 @@ FactoryBot.define do
77
93
  base_id { 20_000 }
78
94
  end
79
95
 
80
- component { create(:elections_component, organization: organization, participatory_space: voting) }
96
+ component { create(:elections_component, organization:, participatory_space: voting) }
81
97
  end
82
98
 
83
99
  factory :polling_station, class: "Decidim::Votings::PollingStation" do
@@ -95,7 +111,7 @@ FactoryBot.define do
95
111
  voting { create :voting }
96
112
 
97
113
  trait :president do
98
- presided_polling_station { create :polling_station, voting: voting }
114
+ presided_polling_station { create :polling_station, voting: }
99
115
  end
100
116
  end
101
117
 
@@ -113,13 +129,13 @@ FactoryBot.define do
113
129
 
114
130
  trait :with_data do
115
131
  after(:create) do |dataset|
116
- create_list(:datum, 5, dataset: dataset)
132
+ create_list(:datum, 5, dataset:)
117
133
  end
118
134
  end
119
135
 
120
136
  trait :with_access_code_data do
121
137
  after(:create) do |dataset|
122
- create_list(:datum, 5, :with_access_code, dataset: dataset)
138
+ create_list(:datum, 5, :with_access_code, dataset:)
123
139
  end
124
140
  end
125
141
 
@@ -142,7 +158,7 @@ FactoryBot.define do
142
158
 
143
159
  transient do
144
160
  document_number { Faker::IDNumber.spanish_citizen_number }
145
- document_type { %w(DNI NIE PASSPORT).sample }
161
+ document_type { %w(identification_number passport).sample }
146
162
  birthdate { Faker::Date.birthday(min_age: 18, max_age: 65) }
147
163
  end
148
164
 
@@ -175,7 +191,7 @@ FactoryBot.define do
175
191
  with_questions
176
192
 
177
193
  after(:create) do |ballot_style, evaluator|
178
- evaluator.election.reload.questions.first(2).map { |question| create(:ballot_style_question, question: question, ballot_style: ballot_style) }
194
+ evaluator.election.reload.questions.first(2).map { |question| create(:ballot_style_question, question:, ballot_style:) }
179
195
  end
180
196
  end
181
197
  end
@@ -191,12 +207,12 @@ FactoryBot.define do
191
207
  component { create(:elections_component, participatory_space: voting) }
192
208
  end
193
209
 
194
- election { create(:election, component: component) }
210
+ election { create(:election, component:) }
195
211
  sequence(:voter_id) { |n| "voter_#{n}" }
196
212
  status { "pending" }
197
213
  message_id { "decidim-test-authority.2.vote.in_person+v.5826de088371d1b15b38f00c8203871caec07041ed0c8fb0c6fb875f0df763b6" }
198
214
  polling_station { polling_officer.polling_station }
199
- polling_officer { create(:polling_officer, :president, voting: voting) }
215
+ polling_officer { create(:polling_officer, :president, voting:) }
200
216
 
201
217
  trait :accepted do
202
218
  status { "accepted" }
@@ -232,13 +248,13 @@ FactoryBot.define do
232
248
  max = total_votes
233
249
  question.answers.each do |answer|
234
250
  value = Faker::Number.between(from: 0, to: max)
235
- closure.results << create(:election_result, closurable: closure, election: closure.election, question: question, answer: answer, value: value)
251
+ closure.results << create(:election_result, closurable: closure, election: closure.election, question:, answer:, value:)
236
252
  max -= value
237
253
  end
238
254
  value = Faker::Number.between(from: 0, to: max)
239
- closure.results << create(:election_result, :null_ballots, election: closure.election, question: question, value: value)
255
+ closure.results << create(:election_result, :null_ballots, election: closure.election, question:, value:)
240
256
  max -= value
241
- closure.results << create(:election_result, :blank_ballots, election: closure.election, question: question, value: max)
257
+ closure.results << create(:election_result, :blank_ballots, election: closure.election, question:, value: max)
242
258
  end
243
259
  closure.results << create(:election_result, :total_ballots, closurable: closure, election: closure.election, value: total_votes)
244
260
  end
@@ -18,7 +18,7 @@ module Decidim
18
18
  def serialize
19
19
  {
20
20
  participatory_space_id: voting.id,
21
- url: url,
21
+ url:,
22
22
  title: voting.title,
23
23
  description: voting.description,
24
24
  start_time: voting.start_time,
@@ -21,7 +21,7 @@ namespace :decidim_elections do
21
21
  task :scheduled_tasks, [] => :environment do
22
22
  Decidim::Elections::ElectionsReadyToStart.for.each do |election|
23
23
  puts "\nStarting vote period for election ##{election.id}:"
24
- form = Decidim::Elections::Admin::VotePeriodForm.new.with_context(election: election, current_user: nil)
24
+ form = Decidim::Elections::Admin::VotePeriodForm.new.with_context(election:, current_user: nil)
25
25
  Decidim::Elections::Admin::StartVote.call(form) do
26
26
  on(:ok) do
27
27
  puts "\n✓ Voting period start requested.\n"
@@ -36,7 +36,7 @@ namespace :decidim_elections do
36
36
 
37
37
  Decidim::Elections::ElectionsFinishedToEnd.for.each do |election|
38
38
  puts "\nEnding vote period for election ##{election.id}:"
39
- form = Decidim::Elections::Admin::VotePeriodForm.new.with_context(election: election, current_user: nil)
39
+ form = Decidim::Elections::Admin::VotePeriodForm.new.with_context(election:, current_user: nil)
40
40
  Decidim::Elections::Admin::EndVote.call(form) do
41
41
  on(:ok) do
42
42
  puts "\n✓ Voting period end requested.\n"