decidim-action_delegator 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +104 -58
  3. data/Rakefile +2 -2
  4. data/app/commands/decidim/action_delegator/admin/create_delegation.rb +1 -3
  5. data/app/commands/decidim/action_delegator/admin/create_setting.rb +5 -2
  6. data/app/commands/decidim/action_delegator/admin/update_setting.rb +4 -2
  7. data/app/controllers/concerns/decidim/action_delegator/devise/sessions_controller_override.rb +1 -1
  8. data/app/controllers/concerns/decidim/action_delegator/election_per_question_votes_controller_override.rb +65 -0
  9. data/app/controllers/concerns/decidim/action_delegator/election_votes_controller_override.rb +38 -0
  10. data/app/controllers/concerns/decidim/action_delegator/votes_controller_methods.rb +46 -0
  11. data/app/controllers/decidim/action_delegator/admin/application_controller.rb +11 -5
  12. data/app/controllers/decidim/action_delegator/admin/delegations_controller.rb +3 -11
  13. data/app/controllers/decidim/action_delegator/admin/invite_participants_controller.rb +0 -8
  14. data/app/controllers/decidim/action_delegator/admin/manage_delegations_controller.rb +13 -21
  15. data/app/controllers/decidim/action_delegator/admin/manage_participants_controller.rb +11 -20
  16. data/app/controllers/decidim/action_delegator/admin/participants_controller.rb +1 -9
  17. data/app/controllers/decidim/action_delegator/admin/permissions_controller.rb +1 -24
  18. data/app/controllers/decidim/action_delegator/admin/ponderations_controller.rb +0 -8
  19. data/app/controllers/decidim/action_delegator/admin/settings_controller.rb +12 -12
  20. data/app/controllers/decidim/action_delegator/application_controller.rb +3 -3
  21. data/app/controllers/decidim/action_delegator/elections/admin/results_controller.rb +58 -0
  22. data/app/controllers/decidim/action_delegator/elections/results_controller.rb +36 -0
  23. data/app/controllers/decidim/action_delegator/user_delegations_controller.rb +1 -1
  24. data/app/controllers/decidim/action_delegator/verifications/delegations_verifier/authorizations_controller.rb +14 -18
  25. data/app/forms/decidim/action_delegator/admin/action_delegator_census_form.rb +44 -0
  26. data/app/forms/decidim/action_delegator/admin/csv_import_form.rb +17 -0
  27. data/app/forms/decidim/action_delegator/admin/delegation_form.rb +6 -2
  28. data/app/forms/decidim/action_delegator/admin/ponderation_form.rb +2 -1
  29. data/app/forms/decidim/action_delegator/admin/setting_form.rb +16 -10
  30. data/app/forms/decidim/action_delegator/censuses/internal_users_form.rb +32 -0
  31. data/app/forms/decidim/action_delegator/verifications/delegations_verifier_form.rb +41 -25
  32. data/app/helpers/decidim/action_delegator/admin/{delegation_helper.rb → settings_helper.rb} +3 -16
  33. data/app/helpers/decidim/action_delegator/settings_helper.rb +124 -0
  34. data/app/jobs/decidim/action_delegator/admin/invite_participants_job.rb +1 -1
  35. data/app/jobs/decidim/action_delegator/send_sms_job.rb +2 -2
  36. data/app/jobs/decidim/action_delegator/twilio_send_sms_job.rb +2 -2
  37. data/app/models/decidim/action_delegator/delegation.rb +35 -9
  38. data/app/models/decidim/action_delegator/participant.rb +15 -9
  39. data/app/models/decidim/action_delegator/ponderation.rb +0 -2
  40. data/app/models/decidim/action_delegator/setting.rb +14 -32
  41. data/app/overrides/decidim/elections/admin/dashboard/_results/_add_results_contents.html.erb.deface +10 -0
  42. data/app/overrides/decidim/elections/admin/dashboard/_results/_add_results_tabs.html.erb.deface +3 -0
  43. data/app/overrides/decidim/elections/elections/_election_aside/add_delegation_buttons.html.erb.deface +3 -0
  44. data/app/overrides/decidim/elections/elections/_vote_results/replace_results_div.html.erb.deface +8 -0
  45. data/app/overrides/decidim/elections/per_question_votes/show/add_delegation_hidden_input.html.erb.deface +3 -0
  46. data/app/overrides/decidim/elections/per_question_votes/show/add_delegation_id_to_links.html.erb.deface +3 -0
  47. data/app/overrides/decidim/elections/per_question_votes/waiting/add_delegation_buttons.html.erb.deface +3 -0
  48. data/app/overrides/decidim/elections/votes/receipt/add_delegation_buttons.html.erb.deface +3 -0
  49. data/app/packs/entrypoints/decidim_action_delegator_elections.js +1 -0
  50. data/app/packs/src/decidim/action_delegator/elections_live_results.js +160 -0
  51. data/app/permissions/decidim/action_delegator/admin/permissions.rb +29 -0
  52. data/app/permissions/decidim/action_delegator/permissions.rb +6 -30
  53. data/app/presenters/decidim/action_delegator/setting_presenter.rb +33 -0
  54. data/app/queries/decidim/action_delegator/action_delegator_census_users.rb +51 -0
  55. data/app/queries/decidim/action_delegator/authorized_resources.rb +28 -0
  56. data/app/queries/decidim/action_delegator/election_settings.rb +23 -0
  57. data/app/queries/decidim/action_delegator/{delegated_votes_versions.rb → elections_delegated_votes_versions.rb} +8 -8
  58. data/app/queries/decidim/action_delegator/elections_question_responses_by_type.rb +33 -0
  59. data/app/queries/decidim/action_delegator/elections_question_weighted_responses.rb +28 -0
  60. data/app/queries/decidim/action_delegator/elections_votes_with_ponderations.rb +62 -0
  61. data/app/services/decidim/action_delegator/delegations_csv_importer.rb +3 -3
  62. data/app/services/decidim/action_delegator/participants_csv_importer.rb +1 -1
  63. data/app/services/decidim/action_delegator/sms_gateway.rb +2 -2
  64. data/app/views/decidim/action_delegator/admin/censuses/_action_delegator_census_form.html.erb +44 -0
  65. data/app/views/decidim/action_delegator/admin/censuses/_action_delegator_census_options_form.html.erb +25 -0
  66. data/app/views/decidim/action_delegator/admin/delegations/index.html.erb +12 -13
  67. data/app/views/decidim/action_delegator/admin/delegations/new.html.erb +29 -27
  68. data/app/views/decidim/action_delegator/admin/manage_delegations/new.html.erb +36 -24
  69. data/app/views/decidim/action_delegator/admin/manage_participants/new.html.erb +47 -33
  70. data/app/views/decidim/action_delegator/admin/participants/_form.html.erb +14 -8
  71. data/app/views/decidim/action_delegator/admin/participants/edit.html.erb +11 -13
  72. data/app/views/decidim/action_delegator/admin/participants/index.html.erb +20 -25
  73. data/app/views/decidim/action_delegator/admin/participants/new.html.erb +11 -13
  74. data/app/views/decidim/action_delegator/admin/ponderations/_form.html.erb +13 -7
  75. data/app/views/decidim/action_delegator/admin/ponderations/edit.html.erb +11 -13
  76. data/app/views/decidim/action_delegator/admin/ponderations/index.html.erb +8 -11
  77. data/app/views/decidim/action_delegator/admin/ponderations/new.html.erb +11 -13
  78. data/app/views/decidim/action_delegator/admin/settings/_form.html.erb +26 -12
  79. data/app/views/decidim/action_delegator/admin/settings/_participants_sync_check.html.erb +1 -1
  80. data/app/views/decidim/action_delegator/admin/settings/_setting_checks.html.erb +11 -16
  81. data/app/views/decidim/action_delegator/admin/settings/edit.html.erb +11 -12
  82. data/app/views/decidim/action_delegator/admin/settings/index.html.erb +22 -19
  83. data/app/views/decidim/action_delegator/admin/settings/new.html.erb +11 -12
  84. data/app/views/decidim/action_delegator/admin/shared/_tabs_menu.html.erb +15 -0
  85. data/app/views/decidim/action_delegator/censuses/_internal_users_form.html.erb +61 -0
  86. data/app/views/decidim/action_delegator/elections/_delegation_buttons.html.erb +10 -0
  87. data/app/views/decidim/action_delegator/elections/_normal_election_buttons.html.erb +13 -0
  88. data/app/views/decidim/action_delegator/elections/_per_question_buttons.html.erb +9 -0
  89. data/app/views/decidim/action_delegator/elections/_per_question_waiting_buttons.html.erb +19 -0
  90. data/app/views/decidim/action_delegator/elections/_vote_results.html.erb +10 -0
  91. data/app/views/decidim/action_delegator/elections/_vote_results_question.html.erb +13 -0
  92. data/app/views/decidim/action_delegator/elections/admin/dashboard/_by_type_and_weight.html.erb +45 -0
  93. data/app/views/decidim/action_delegator/elections/admin/dashboard/_results_tabs.html.erb +5 -0
  94. data/app/views/decidim/action_delegator/elections/admin/dashboard/_results_type_info.html.erb +4 -0
  95. data/app/views/decidim/action_delegator/elections/admin/dashboard/_sum_of_weights.html.erb +43 -0
  96. data/app/views/decidim/action_delegator/elections/admin/dashboard/_totals.html.erb +27 -0
  97. data/app/views/decidim/action_delegator/user_delegations/index.html.erb +13 -14
  98. data/app/views/decidim/action_delegator/verifications/delegations_verifier/authorizations/edit.html.erb +19 -29
  99. data/app/views/decidim/action_delegator/verifications/delegations_verifier/authorizations/new.html.erb +42 -40
  100. data/config/assets.rb +3 -35
  101. data/config/i18n-tasks.yml +27 -5
  102. data/config/locales/ca.yml +70 -56
  103. data/config/locales/cs.yml +161 -145
  104. data/config/locales/en.yml +110 -67
  105. data/config/locales/es.yml +70 -56
  106. data/db/migrate/20200824113801_create_settings.rb +1 -1
  107. data/db/migrate/20250729104037_add_title_to_action_delegator_settings.rb +31 -0
  108. data/lib/decidim/action_delegator/admin_engine.rb +72 -45
  109. data/lib/decidim/action_delegator/common_rake.rb +13 -0
  110. data/lib/decidim/action_delegator/engine.rb +49 -19
  111. data/lib/decidim/action_delegator/test/delegation_examples.rb +144 -0
  112. data/lib/decidim/action_delegator/test/factories.rb +11 -6
  113. data/lib/decidim/action_delegator/verifications/delegations_authorizer.rb +80 -47
  114. data/lib/decidim/action_delegator/version.rb +3 -3
  115. data/lib/decidim/action_delegator.rb +8 -26
  116. data/lib/tasks/migrate_consultations.rake +382 -0
  117. data/lib/tasks/upgrade_tasks.rake +5 -0
  118. data/package.json +10 -27
  119. metadata +72 -112
  120. data/app/commands/concerns/decidim/action_delegator/consultations/multiple_vote_question_override.rb +0 -31
  121. data/app/commands/concerns/decidim/action_delegator/consultations/vote_question_override.rb +0 -44
  122. data/app/commands/decidim/action_delegator/admin/fix_resource_permissions.rb +0 -46
  123. data/app/commands/decidim/action_delegator/vote_delegation.rb +0 -28
  124. data/app/controllers/concerns/decidim/action_delegator/consultations/consultations_controller_override.rb +0 -16
  125. data/app/controllers/concerns/decidim/action_delegator/consultations/question_multiple_votes_controller_override.rb +0 -29
  126. data/app/controllers/concerns/decidim/action_delegator/consultations/question_votes_controller_override.rb +0 -57
  127. data/app/controllers/concerns/decidim/action_delegator/consultations/questions_controller_override.rb +0 -16
  128. data/app/controllers/concerns/decidim/action_delegator/needs_consultation_styles.rb +0 -24
  129. data/app/controllers/decidim/action_delegator/admin/consultations/exports_controller.rb +0 -27
  130. data/app/controllers/decidim/action_delegator/admin/consultations_controller.rb +0 -47
  131. data/app/controllers/decidim/action_delegator/admin/exports/_sum_of_weights_controller.rb +0 -15
  132. data/app/forms/concerns/decidim/action_delegator/consultations/vote_form_override.rb +0 -15
  133. data/app/helpers/decidim/action_delegator/delegation_helper.rb +0 -13
  134. data/app/jobs/decidim/action_delegator/export_consultation_results_job.rb +0 -51
  135. data/app/models/concerns/decidim/action_delegator/consultations/question_override.rb +0 -18
  136. data/app/models/concerns/decidim/action_delegator/consultations/vote_override.rb +0 -15
  137. data/app/models/decidim/action_delegator/unversioned_vote.rb +0 -19
  138. data/app/models/decidim/action_delegator/whodunnit_vote.rb +0 -28
  139. data/app/overrides/decidim/consultations/admin/consultations/results/add_ongoing_warning.html.erb.deface +0 -3
  140. data/app/overrides/decidim/consultations/consultations/_question/add_delegation_link.html.erb.deface +0 -3
  141. data/app/overrides/decidim/consultations/consultations/_regular_questions/prevent_empty_questions.html.erb.deface +0 -10
  142. data/app/overrides/decidim/consultations/consultations/_regular_questions/remove_highlighted_scopes.html.erb.deface +0 -5
  143. data/app/overrides/decidim/consultations/question_multiple_votes/_form/add_delegation_notice.html.erb.deface +0 -8
  144. data/app/overrides/decidim/consultations/questions/_vote_button/add_delegations_link.html.erb.deface +0 -3
  145. data/app/overrides/decidim/consultations/questions/_vote_button/add_modal.html.erb.deface +0 -3
  146. data/app/overrides/decidim/consultations/questions/_vote_button/add_modal_javascript.html.erb.deface +0 -4
  147. data/app/overrides/decidim/consultations/questions/_vote_button/replace_delegation_to_multivote_link.html.erb.deface +0 -8
  148. data/app/overrides/decidim/consultations/questions/_vote_modal/add_delegation_callout.html.erb.deface +0 -3
  149. data/app/overrides/decidim/consultations/questions/_vote_modal_confirm/add_delegation_callout.html.erb.deface +0 -3
  150. data/app/overrides/decidim/consultations/questions/_vote_modal_confirm/add_hidden_field.html.erb.deface +0 -3
  151. data/app/overrides/layouts/decidim/admin/remove_deprecation.rb +0 -10
  152. data/app/packs/entrypoints/decidim_action_delegator.scss +0 -1
  153. data/app/packs/entrypoints/decidim_action_delegator_questions.js +0 -5
  154. data/app/packs/src/decidim/action_delegator/questions.js +0 -33
  155. data/app/packs/stylesheets/decidim/action_delegator/questions.scss +0 -26
  156. data/app/permissions/concerns/decidim/action_delegator/consultations/permissions_override.rb +0 -35
  157. data/app/presenters/decidim/action_delegator/question_with_totals.rb +0 -24
  158. data/app/queries/decidim/action_delegator/consultation_delegations.rb +0 -25
  159. data/app/queries/decidim/action_delegator/delegates_votes_by_consultation.rb +0 -24
  160. data/app/queries/decidim/action_delegator/delegates_votes_by_question.rb +0 -26
  161. data/app/queries/decidim/action_delegator/delegation_votes.rb +0 -30
  162. data/app/queries/decidim/action_delegator/grantee_delegations.rb +0 -24
  163. data/app/queries/decidim/action_delegator/organization_delegations.rb +0 -26
  164. data/app/queries/decidim/action_delegator/organization_settings.rb +0 -31
  165. data/app/queries/decidim/action_delegator/responses.rb +0 -24
  166. data/app/queries/decidim/action_delegator/responses_by_membership.rb +0 -58
  167. data/app/queries/decidim/action_delegator/scrutiny.rb +0 -87
  168. data/app/queries/decidim/action_delegator/setting_delegations.rb +0 -19
  169. data/app/queries/decidim/action_delegator/sum_of_membership_weight.rb +0 -44
  170. data/app/queries/decidim/action_delegator/sum_of_weights.rb +0 -25
  171. data/app/queries/decidim/action_delegator/type_and_weight.rb +0 -26
  172. data/app/queries/decidim/action_delegator/voted_with_ponderations.rb +0 -30
  173. data/app/queries/decidim/action_delegator/votes_count_aggregation.rb +0 -34
  174. data/app/serializers/decidim/action_delegator/consultation_results_serializer.rb +0 -19
  175. data/app/views/decidim/action_delegator/admin/consultations/_ongoing_consultation_warning.html.erb +0 -3
  176. data/app/views/decidim/action_delegator/admin/consultations/results.html.erb +0 -65
  177. data/app/views/decidim/action_delegator/admin/consultations/weighted_results.html.erb +0 -66
  178. data/app/views/decidim/action_delegator/consultations/_link_to_question.html.erb +0 -11
  179. data/app/views/decidim/action_delegator/consultations/questions/_callout.html.erb +0 -5
  180. data/app/views/decidim/action_delegator/consultations/questions/_delegations_modal.html.erb +0 -34
  181. data/app/views/decidim/action_delegator/consultations/questions/_link_to_delegations.html.erb +0 -11
  182. data/app/views/decidim/action_delegator/consultations/questions/_vote_delegated_active.html.erb +0 -32
  183. data/app/views/decidim/action_delegator/consultations/questions/_vote_delegated_finished.html.erb +0 -9
  184. data/app/views/decidim/action_delegator/consultations/questions/_vote_delegated_upcoming.html.erb +0 -8
  185. data/app/views/decidim/consultations/question_votes/update_vote_button.js.erb +0 -82
  186. data/lib/tasks/import_direct_verification.rake +0 -30
@@ -2,6 +2,8 @@
2
2
  es:
3
3
  activemodel:
4
4
  attributes:
5
+ csv_import:
6
+ csv_file: Archivo CSV
5
7
  delegations_verifier:
6
8
  email: Correo electrónico
7
9
  phone: Número de teléfono móvil
@@ -13,11 +15,13 @@ es:
13
15
  name: Tipo de miembro
14
16
  name_help: Tipo de miembro
15
17
  setting:
16
- decidim_consultation_id: Consulta
18
+ active: Activo
17
19
  max_grants: Número máximo de delegaciones de voto que una participante puede recibir
18
20
  phone_freezed: Utilice el número de teléfono del censo. No permita que los participantes lo editen.
19
21
  verify_with_sms: Verificar con SMS
20
22
  errors:
23
+ messages:
24
+ only_one_active_setting_per_phone_required: Solo puede haber una configuración activa con verificación telefónica a la vez.
21
25
  models:
22
26
  delegations_verifier:
23
27
  attributes:
@@ -28,11 +32,8 @@ es:
28
32
  decidim:
29
33
  action_delegator:
30
34
  admin:
31
- consultations:
32
- results:
33
- title: Resultados por respuesta, tipo de membresía y peso
34
- weighted_results:
35
- title: Resultados por respuesta sumando pesos por membresía
35
+ census:
36
+ setting_group: Grupo de configuración
36
37
  delegations:
37
38
  create:
38
39
  error: Se ha producido un error al crear la delegación
@@ -51,21 +52,16 @@ es:
51
52
  actions:
52
53
  csv_import: Importar un fichero CSV
53
54
  new_delegation: Nueva participante
54
- consultation: Consulta
55
55
  created_at: Creado el
56
- delete: Eliminar
57
56
  description_html: Estas son las delegaciones actuales para esta consulta
58
57
  grantee: Receptora (a)
59
58
  grantee_voted: '¿Se ha utilizado la delegación?'
60
59
  granter: Otorgante
61
- granter_voted: '¿Ha votado la otorgante?'
62
- title: Participantes
63
60
  new:
64
61
  grantee: Beneficiario
65
62
  granter: Otorgante
66
63
  save: Crear
67
64
  select_member: Seleccionar miembro
68
- title: Nueva delegación
69
65
  invite_participants:
70
66
  invite_all_users:
71
67
  error: Hubo un error al invitar a las participantes
@@ -87,6 +83,8 @@ es:
87
83
  required_fields: 'Campos requeridos: correo del otorgante, correo del receptor'
88
84
  title: Importar delegaciones
89
85
  title_example: 'Ejemplo:'
86
+ upload_button: Cargar archivo CSV
87
+ upload_help: 'Debe ser un archivo en formato CSV con un encabezado. Columnas requeridas: from, to.'
90
88
  upload_instructions: Debe ser un archivo en formato CSV con un encabezado.
91
89
  manage_participants:
92
90
  create:
@@ -102,13 +100,22 @@ es:
102
100
  required_fields: 'Campos requeridos: %{authorization_method}'
103
101
  title: Importar participantes
104
102
  title_example: 'Ejemplo:'
103
+ upload_button: Cargar archivo CSV
104
+ upload_help: Debe ser un archivo en formato CSV con un encabezado.
105
105
  upload_instructions: Debe ser un archivo en formato CSV con un encabezado.
106
106
  menu:
107
- consultations_submenu:
107
+ action_delegator_menu:
108
+ delegations: Delegaciones
109
+ main: General
110
+ participants: Participantes
111
+ ponderations: Ponderaciones
112
+ settings: Configuración
113
+ delegations: Gobernanza Societaria
114
+ elections_submenu:
108
115
  by_answer: Por respuesta
109
116
  by_type_and_weight: Por tipo y peso
110
117
  sum_of_weights: Por suma de pesos
111
- delegations: Gobernanza Societaria
118
+ totals: Totales
112
119
  participants: Participantes
113
120
  participants:
114
121
  create:
@@ -119,7 +126,6 @@ es:
119
126
  success: Participante correctamente eliminado
120
127
  edit:
121
128
  save: Guardar
122
- title: Editar participante
123
129
  index:
124
130
  actions:
125
131
  csv_import: Importar CSV
@@ -136,12 +142,10 @@ es:
136
142
  phone: Teléfono
137
143
  ponderation: Tipos de ponderación
138
144
  send_invitation_link: Haga clic aquí para enviarles una invitación
139
- title: Censo
140
145
  user: Nombre
141
146
  voted: '¿Ha votado?'
142
147
  new:
143
148
  save: Crear
144
- title: Nueva participante
145
149
  remove_census:
146
150
  confirm: '¿Está seguro de que quiere eliminar el censo? Esta acción no se puede deshacer'
147
151
  success: "%{participants_count} entradas fueron eliminadas de la página con éxito"
@@ -163,7 +167,6 @@ es:
163
167
  success: Ponderación destruida correctamente
164
168
  edit:
165
169
  save: Guardar
166
- title: Editar tipos de ponderación
167
170
  form:
168
171
  name_help: Tipo de asociado, p. ej., "socio", "consumidor", "patrón". Debe ser único.
169
172
  name_placeholder: 'Prueba, por ejemplo: "miembro", "asociado", "partidario"...'
@@ -174,7 +177,6 @@ es:
174
177
  created_at: Creado el
175
178
  name: Tipo de miembro
176
179
  num_users: Censo total
177
- title: Ponderaciones
178
180
  weight: Peso del voto
179
181
  new:
180
182
  save: Crear
@@ -187,8 +189,9 @@ es:
187
189
  both: Correo electrónico y número de teléfono
188
190
  email: Solo correo electrónico
189
191
  phone: Solo número de teléfono móvil
190
- authorization_method_help: |
192
+ authorization_method_help_html: |
191
193
  Las opciones disponibles son:
194
+ <br><br>
192
195
  <ul>
193
196
  <li><b>Solo número de teléfono:</b> Utiliza verificación por SMS. Las participantes deben ingresar su número de teléfono que coincida con el censo.</li>
194
197
  <li><b>Solo correo electrónico:</b> El correo electrónico de la participante debe coincidir con el censo.</li>
@@ -205,7 +208,6 @@ es:
205
208
  success: Configuración eliminada correctamente
206
209
  edit:
207
210
  save: Guardar
208
- title: Editar grupo de delegación
209
211
  form:
210
212
  max_grants: Máximas delegaciones por participante
211
213
  index:
@@ -214,9 +216,9 @@ es:
214
216
  delegations: Edita las delegaciones
215
217
  new_setting: Nueva configuración
216
218
  ponderate: Establecer los pesos para la ponderación de votos
219
+ active: Activo
217
220
  authorization_method: Método de autorización
218
221
  census: Censo total
219
- consultation: Consulta
220
222
  created_at: Creado el
221
223
  delegations: Total de delegaciones
222
224
  description_html: |
@@ -224,9 +226,9 @@ es:
224
226
  <br>
225
227
  Cada grupo se puede configurar con un número diferente de delegaciones máximas por usuario, diferentes concesiones de delegaciones de usuario y diferentes conjuntos de tipos de ponderación.
226
228
  max_grants: Máx. delegaciones/persona
229
+ name: Nombre
227
230
  open: Abierto
228
231
  ponderations: Tipos de ponderación
229
- state: Estado
230
232
  title: Gobernanza Societaria
231
233
  new:
232
234
  save: Guardar
@@ -234,22 +236,18 @@ es:
234
236
  setting_checks:
235
237
  all_users_authorized_html: Todas las participantes están verificadas por el <i>Verificador de Gobernanza Societaria</i>.
236
238
  all_users_registered_html: Todos los participantes están registrados en la plataforma.
239
+ applies_to: Se aplica a los siguientes espacios de votación
237
240
  click_to_fix: Haga clic aquí para arreglar esto automáticamente
238
- consultation_questions_all_verified_html: Todas las preguntas están restringidas por el <i>Verificador de Gobernanza Societaria</i>.
239
- consultation_questions_missing_verifier_html: Hay %{count} preguntas que no están restringidas por el <i>Verificador de Gobernanza Societaria</i>. <b>Sin la restricción, cualquiera podrá votar las preguntas.</b> <em>Esto está bien si está utilizando otros métodos de autorización o si todas las registradas pueden votar.</em>
240
241
  missing_authorizations_html: Hay %{count} participantes que no están verificadas por el <i>Verificador de Gobernanza Societaria</i>. <em>Está bien si estas participantes tienen sus votos delegados a otras o si está utilizando otros métodos de verificación (o ninguno).</em>
241
242
  missing_emails: El método de autorización no requiere un correo electrónico. Por esto, %{count} debe registrarse en la plataforma
242
243
  missing_registered_users_html: Hay %{count} participantes que no están registrados en la plataforma.
243
244
  no_delegations_html: No hay votos delegados.
244
245
  no_participants_html: '¡No hay censo! <b>Añade participantes o nadie podrá votar si el <i>Verificador de Gobernanza Societaria</i> está activo.</b> <em>Está bien si está utilizando otros métodos de autorización o si todas las registradas pueden votar.</em>'
245
246
  no_ponderations_html: No hay ponderaciones de votos. <b>Todos los usuarios tendrán el mismo peso en sus votos</b>
247
+ no_resources_found: '¡No hay espacios de votación usando esta configuración!'
246
248
  participant: participante
247
249
  user: participante
248
250
  users_need_sync_html: La lista de participantes debe sincronizarse. <b>¡Los resultados de la consulta pueden ser incorrectos!</b>
249
- state:
250
- closed: Cerrado
251
- ongoing: En proceso
252
- pending: Pendiente
253
251
  update:
254
252
  error: Se ha producido un problema al actualizar la configuración
255
253
  success: Configuración guardada correctamente
@@ -261,23 +259,47 @@ es:
261
259
  phone_warning: Este número de teléfono ha sido importado por el administrador. Por favor, contacta si no es correcto.
262
260
  delegations:
263
261
  has_delegations: Voto delegado realizado
264
- link: Tienes delegaciones concedidas
262
+ link: "\U0001F449 Tienes delegaciones concedidas"
265
263
  delegations_authorizer:
266
264
  email: Estamos utilizando el correo electrónico %{email} para verificar su identidad. Si cree que esto está mal, póngase en contacto con nosotros.
267
- no_setting: No se encontró ningún grupo de delegación para esta consulta. Póngase en contacto con el administrador para solucionarlo.
268
- not_in_census: No estás en el censo
265
+ inactive_setting_html: El censo "%{census}" no está activo. Puedes intentar <a href="%{renew_path}" class="underline">renovar tu verificación</a>. De lo contrario, contacta con el administrador si crees que se trata de un error.
266
+ no_setting_html: El censo "%{census}" no está activo. Puedes intentar <a href="%{renew_path}" class="underline">renovar tu verificación</a>. De lo contrario, contacta con el administrador si crees que se trata de un error.
267
+ not_in_census_html: El censo "%{census}" no está activo. Puedes intentar <a href="%{renew_path}" class="underline">renovar tu verificación</a>. De lo contrario, contacta con el administrador si crees que se trata de un error.
269
268
  phone: Estamos usando el teléfono %{phone} para verificar su identidad. Si cree que esto está mal, póngase en contacto con nosotros.
270
- delegations_modal:
271
- callout: Recuerda, estás votando en nombre de
272
- contextual_help: 'Se le ha concedido el voto de:'
273
- title: 'Consulta: delegaciones concedidas'
269
+ elections:
270
+ admin:
271
+ dashboard:
272
+ questions_table:
273
+ delegated_votes: Votos delegados
274
+ participants: Participantes
275
+ participants_count:
276
+ one: 1 participante
277
+ other: "%{count} participantes"
278
+ unweighted_votes: Votos no ponderados
279
+ weight: Peso
280
+ weighted_votes: Votos ponderados
281
+ results_type_info:
282
+ by_type_and_weight_html: <p>Los resultados que se muestran a continuación se desglosan por tipo de membresía y se ponderan según las ponderaciones de membresía definidas en la configuración de Governanza Societaria.</p> <p> Cada opción de respuesta muestra la cantidad de votos que recibió de cada tipo de membresía, pero no se aplican ponderaciones en esta vista.</p> <p>Por ejemplo, si la opción A recibió 2 votos de miembros con ponderación "3.0" y 1 voto de un miembro con ponderación "1.0", los resultados mostrarán 2 votos de miembros con ponderación "3.0" y 1 voto de miembros con ponderación "1.0". </p> <p>⚠️ Estos resultados no se muestran al público.</p>
283
+ normal_count_html: "<p>Estos resultados se calculan contando cada voto por igual, independientemente del peso de la membresía del participante que lo emitió.</p> <p>⚠️ Estos resultados no se muestran al público.</p>"
284
+ sum_of_weights_html: <p>Los resultados que se muestran a continuación se ponderan según la ponderación de los miembros definida en la configuración de Governanza Societária.</p> <p>Cada voto se multiplica por la ponderación del miembro que lo emitió.</p> <p>Por ejemplo, si un miembro con una ponderación de 3.0 vota por la opción A y un miembro con una ponderación de 1.0 vota por la opción B, los resultados mostrarán 3 votos para la opción A y 1 voto para la opción B.</p> <p><strong>Estos son los resultados que se muestran al público.</strong></p>
285
+ title: '¿Cómo interpretar estos resultados?'
286
+ totals_html: "<p>Los resultados que se muestran a continuación muestran los totales de cada pregunta, sumando todos los votos recibidos por cada opción de respuesta aplicando los pesos de membresía y no aplicándolos.</p> <p>Además, puede ver el número de participantes y cuántos votos delegados se emitieron para cada opción.</p> <p>⚠️ Estos resultados no se muestran al público.</p>"
287
+ delegation_buttons:
288
+ delegations_active: Tienes votos delegados.
289
+ per_question_delegations: 'Puedes votar en nombre de los siguientes participantes en esta elección:'
290
+ vote_for: Votar en nombre de %{name}
291
+ votes:
292
+ delegated_voting: Estás votando en nombre de %{name}
293
+ edit_vote_for: Editar voto para %{name}
294
+ self_voting: Estás votándote a ti mismo (%{name}).
295
+ waiting_for: Estás votando en nombre de %{name}
274
296
  import_mailer:
275
297
  import:
276
298
  errors_present: Se han producido errores durante la importación
277
299
  errors_title: "<b>Se han encontrado:</b> %{errors_count} errores"
278
300
  greeting: Hola %{name},
279
301
  info_messages: Motivo de omisión
280
- instructions: "<p>Se adjunta un archivo con detalles de importación, contiene filas que no fueron importadas.</p>\n<p>Si desea continuar con la importación, corrija las filas especificadas, elimine la última columna del archivo, guarde el archivo e importar de nuevo.</p>\n"
302
+ instructions: "<p>Se adjunta un archivo con detalles de importación, contiene filas que no fueron importadas.</p>\n<p>Si desea continuar con la importación, corrija las filas especificadas, elimine la última columna del archivo, guarde el archivo e importar de nuevo.</p>"
281
303
  result: "<b>Importado:</b> %{rows_count} filas de %{total_rows_count}."
282
304
  row_number: Numero fila
283
305
  skipped_rows: "<b>Omitidas:</b> %{skipped_rows} filas."
@@ -289,7 +311,6 @@ es:
289
311
  body: Has sido invitado a participar en la consulta. Por favor, haz clic en el enlace de abajo para confirmar tu participación.
290
312
  confirm: Confirmar la participación
291
313
  greeting: '¡Hola, %{recipient}!,'
292
- name: Módulo Cooperativas - ActionDelegator para Decidim
293
314
  participants_csv_importer:
294
315
  import:
295
316
  error: Se ha producido un error en importar las participantes
@@ -322,53 +343,46 @@ es:
322
343
  new:
323
344
  authorize: Autorizar mi cuenta
324
345
  missing_phone_error: Falta el teléfono de miembro
346
+ no_resources_found: No se han encontrado recursos. Si cree que esto es un error, póngase en contacto con el administrador (es posible que no haya nada activo ahora mismo).
325
347
  not_in_census: Lo sentimos, pero no puede ser autorizado porque su correo electrónico no está en el censo. Póngase en contacto con el administrador si cree que se trata de un error.
326
348
  participate_in: 'Esta autorización le permite participar en las siguientes consultas: %{consultations}'
327
349
  phone_warning: Este número de teléfono ha sido importado por el administrador. Por favor, contacta si no es correcto.
328
350
  send_code: Enviar código de verificación
329
351
  title: Autorizar con el Verificador de Gobernanza Societaria
352
+ not_active: No es posible verificar con Gobernanza Corporativa debido a que actualmente no hay ningún espacio de voto activo.
330
353
  admin:
331
354
  actions:
332
355
  invite: Enviar invitación
333
356
  invite_all: Enviar invitaciones a participantes no registradas
334
357
  resend: Reenviar la invitación
335
- consultations:
336
- results:
337
- default_metadata: "(datos de afiliación no disponibles)"
338
- export: Exportar
339
- export_filename: consultation_results
340
- membership_type: Tipo de miembro
341
- membership_weight: Peso
342
- total_delegates: "%{count} votos delegados"
343
358
  authorization_handlers:
344
359
  admin:
345
360
  delegations_verifier:
346
361
  help:
347
- - Un método de verificación para el voto delegado
362
+ -
363
+ - censo.
348
364
  delegations_verifier:
349
365
  explanation: Las participantes verificadas con este método pueden delegar votos a otras participantes
350
366
  fields:
351
367
  phone: Número de teléfono
368
+ setting: Setting
369
+ setting_ids: Configuración
352
370
  name: Gobernanza Societaria
353
- resources:
354
- question:
355
- actions:
356
- comment: Comentario
357
- vote: Votar
371
+ elections:
372
+ censuses:
373
+ action_delegator_census:
374
+ authorizer_handler_admin_callout_html: Elija el método de autorización "Gobernanza Societaria" si desea utilizar la lista de participantes del grupo de configuración elegido para validar quién puede votar.<br>También puede utilizar otro método de autorización si su fuente de censo es externa o si no desea utilizar un censo en absoluto (y todos los registrados pueden votar).
375
+ label: Censo Gobernanza Societaria
358
376
  verifications:
359
377
  authorizations:
360
378
  first_login:
361
379
  actions:
362
- delegations_verifier: Get verified with Corporate Governance Census
380
+ delegations_verifier: Verificarse con el Centro de Gobernanza Corporativa
363
381
  devise:
364
382
  mailer:
365
383
  invite_participant:
366
384
  subject: Has sido invitada a participar en una consulta
367
385
  layouts:
368
386
  decidim:
369
- admin:
370
- question:
371
- attachments: Adjuntos
372
- categories: Categorías
373
387
  user_profile:
374
388
  vote_delegations: Delegación de votos
@@ -5,7 +5,7 @@ class CreateSettings < ActiveRecord::Migration[5.2]
5
5
  create_table :decidim_action_delegator_settings do |t|
6
6
  t.datetime :expires_at, null: false
7
7
  t.integer :max_grants, null: false, default: 0, limit: 2 # Maps to PostgreSQL smallint
8
- t.belongs_to :decidim_consultation, null: false, foreign_key: true, index: { name: "index_decidim_settings_on_decidim_consultation_id" }
8
+ t.belongs_to :decidim_consultation, index: false
9
9
 
10
10
  t.timestamps
11
11
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ class AddTitleToActionDelegatorSettings < ActiveRecord::Migration[7.2]
3
+ class Setting < ApplicationRecord
4
+ self.table_name = :decidim_action_delegator_settings
5
+ end
6
+
7
+ def up
8
+ add_column :decidim_action_delegator_settings, :title, :jsonb
9
+ add_column :decidim_action_delegator_settings, :description, :jsonb
10
+ add_column :decidim_action_delegator_settings, :active, :boolean, default: false, null: false
11
+ add_reference :decidim_action_delegator_settings, :decidim_organization, foreign_key: { to_table: :decidim_organizations }
12
+
13
+ if ActiveRecord::Base.connection.table_exists? "decidim_consultations"
14
+ Setting.find_each do |setting|
15
+ consultation = ActiveRecord::Base.connection.execute("SELECT * FROM decidim_consultations WHERE id = #{setting.decidim_consultation_id}").first
16
+ next unless consultation
17
+
18
+ setting.update!(title: JSON.parse(consultation["title"]), decidim_organization_id: consultation["decidim_organization_id"])
19
+ end
20
+ end
21
+
22
+ change_column_null :decidim_action_delegator_settings, :decidim_organization_id, false
23
+ end
24
+
25
+ def down
26
+ remove_column :decidim_action_delegator_settings, :title
27
+ remove_column :decidim_action_delegator_settings, :description
28
+ remove_reference :decidim_action_delegator_settings, :decidim_organization, index: true, foreign_key: { to_table: :decidim_organizations }
29
+ remove_column :decidim_action_delegator_settings, :active
30
+ end
31
+ end
@@ -23,53 +23,75 @@ module Decidim
23
23
  delete :destroy_all, on: :collection
24
24
  end
25
25
  resources :manage_delegations, only: [:new, :create]
26
- resources :permissions, only: [:create] do
26
+ resources :permissions do
27
27
  post :sync, on: :collection
28
28
  end
29
29
  end
30
30
 
31
- resources :consultations, param: :slug, only: [] do
31
+ # TODO: replace with real implementation once results pages for elections are ready
32
+ resources :elections, param: :slug, only: [] do
32
33
  get :results, on: :member
33
- get :weighted_results, on: :member
34
- resources :exports, only: :create, module: :consultations
34
+ # get :weighted_results, on: :member
35
+ # resources :exports, only: :create, module: :elections
35
36
 
36
- namespace :exports do
37
- resources :sum_of_weights, only: :create
38
- end
37
+ # namespace :exports do
38
+ # resources :sum_of_weights, only: :create
39
+ # end
39
40
  end
40
41
 
41
42
  root to: "delegations#index"
42
43
  end
43
44
 
44
- # marks the main "Users" menu in the admin always active when we are in the action_delegator admin space
45
- initializer "decidim_admin_action_delegator.main_menu" do
46
- Decidim.menu :admin_menu do |menu|
47
- if (item = menu.items.find { |it| it.identifier == :impersonatable_users })
48
- item.active.first << "decidim/action_delegator/admin/settings"
49
- item.active.first << "decidim/action_delegator/admin/ponderations"
50
- item.active.first << "decidim/action_delegator/admin/participants"
51
- item.active.first << "decidim/action_delegator/admin/manage_participants"
52
- item.active.first << "decidim/action_delegator/admin/delegations"
53
- item.active.first << "decidim/action_delegator/admin/manage_delegations"
54
- end
55
- end
56
- end
57
-
58
45
  initializer "decidim_admin_action_delegator.admin_user_menu" do
59
46
  Decidim.menu :admin_user_menu do |menu|
60
47
  menu.add_item :action_delegator,
61
48
  I18n.t("menu.delegations", scope: "decidim.action_delegator.admin"), decidim_admin_action_delegator.settings_path,
62
49
  active: is_active_link?(decidim_admin_action_delegator.settings_path),
50
+ icon_name: "government-line",
63
51
  if: allowed_to?(:index, :impersonatable_user)
64
52
  end
65
53
  end
66
54
 
67
- initializer "decidim_admin_action_delegator.admin_consultation_menu" do
68
- Decidim.menu :admin_consultation_menu do |menu|
69
- menu.remove_item :results_consultation
70
- is_results = is_active_link?(decidim_admin_consultations.results_consultation_path(current_consultation)) ||
71
- is_active_link?(decidim_admin_action_delegator.results_consultation_path(current_consultation)) ||
72
- is_active_link?(decidim_admin_action_delegator.weighted_results_consultation_path(current_consultation))
55
+ initializer "decidim_elections_admin.menu" do
56
+ Decidim.menu :admin_action_delegator_menu do |menu|
57
+ menu.add_item :setting_main,
58
+ I18n.t("main", scope: "decidim.action_delegator.admin.menu.action_delegator_menu"),
59
+ current_setting ? decidim_admin_action_delegator.edit_setting_path(current_setting) : decidim_admin_action_delegator.new_setting_path,
60
+ icon_name: "bill-line",
61
+ active: is_active_link?(decidim_admin_action_delegator.new_setting_path) ||
62
+ (current_setting && is_active_link?(decidim_admin_action_delegator.edit_setting_path(current_setting)))
63
+
64
+ menu.add_item :setting_ponderations,
65
+ I18n.t("ponderations", scope: "decidim.action_delegator.admin.menu.action_delegator_menu"),
66
+ current_setting ? decidim_admin_action_delegator.setting_ponderations_path(current_setting) : "#",
67
+ icon_name: "scales-line",
68
+ active: current_setting && is_active_link?(decidim_admin_action_delegator.setting_ponderations_path(current_setting))
69
+
70
+ menu.add_item :setting_participants,
71
+ I18n.t("participants", scope: "decidim.action_delegator.admin.menu.action_delegator_menu"),
72
+ current_setting ? decidim_admin_action_delegator.setting_participants_path(current_setting) : "#",
73
+ icon_name: "group-line",
74
+ active: current_setting && (is_active_link?(decidim_admin_action_delegator.setting_participants_path(current_setting)) ||
75
+ is_active_link?(decidim_admin_action_delegator.new_setting_participant_path(current_setting)) ||
76
+ is_active_link?(decidim_admin_action_delegator.new_setting_manage_participant_path(current_setting)) ||
77
+ (@participant && is_active_link?(decidim_admin_action_delegator.edit_setting_participant_path(current_setting, @participant))))
78
+
79
+ menu.add_item :setting_delegations,
80
+ I18n.t("delegations", scope: "decidim.action_delegator.admin.menu.action_delegator_menu"),
81
+ current_setting ? decidim_admin_action_delegator.setting_delegations_path(current_setting) : "#",
82
+ icon_name: "user-shared-line",
83
+ active: current_setting && (is_active_link?(decidim_admin_action_delegator.setting_delegations_path(current_setting)) ||
84
+ is_active_link?(decidim_admin_action_delegator.new_setting_delegation_path(current_setting)) ||
85
+ is_active_link?(decidim_admin_action_delegator.new_setting_manage_delegation_path(current_setting)))
86
+ end
87
+ end
88
+
89
+ initializer "decidim_admin_action_delegator.admin_election_menu" do
90
+ Decidim.menu :admin_election_menu do |menu|
91
+ menu.remove_item :results_election
92
+ is_results = is_active_link?(decidim_admin_elections.results_election_path(current_election)) ||
93
+ is_active_link?(decidim_admin_action_delegator.results_election_path(current_election)) ||
94
+ is_active_link?(decidim_admin_action_delegator.weighted_results_election_path(current_election))
73
95
  params = {
74
96
  position: 1.2,
75
97
  active: is_results,
@@ -77,32 +99,37 @@ module Decidim
77
99
  }
78
100
  params[:submenu] = { target_menu: :admin_delegation_results_submenu } if is_results
79
101
  menu.add_item :delegated_results,
80
- I18n.t("results", scope: "decidim.admin.menu.consultations_submenu"),
81
- decidim_admin_consultations.results_consultation_path(current_consultation),
102
+ I18n.t("results", scope: "decidim.admin.menu.elections_submenu"),
103
+ decidim_admin_elections.results_election_path(current_election),
82
104
  params
83
105
  end
84
106
  end
85
107
 
86
- initializer "decidim_admin_action_delegator.admin_consultation_menu" do
108
+ initializer "decidim_admin_action_delegator.admin_election_menu" do
87
109
  Decidim.menu :admin_delegation_results_submenu do |menu|
110
+ election = @election
111
+ current_component_admin_proxy = election ? Decidim::EngineRouter.admin_proxy(election.component) : nil
112
+
88
113
  menu.add_item :by_answer,
89
- I18n.t("by_answer", scope: "decidim.action_delegator.admin.menu.consultations_submenu"),
90
- decidim_admin_consultations.results_consultation_path(current_consultation),
91
- position: 1.0,
92
- active: is_active_link?(decidim_admin_consultations.results_consultation_path(current_consultation)),
93
- if: allowed_to?(:read, :question)
114
+ I18n.t("by_answer", scope: "decidim.action_delegator.admin.menu.elections_submenu"),
115
+ @election.present? && @election.census_ready? ? current_component_admin_proxy&.dashboard_election_path(@election) : "#",
116
+ icon_name: "list-check",
117
+ active: :exact
94
118
  menu.add_item :by_type_and_weight,
95
- I18n.t("by_type_and_weight", scope: "decidim.action_delegator.admin.menu.consultations_submenu"),
96
- decidim_admin_action_delegator.results_consultation_path(current_consultation),
97
- position: 1.1,
98
- active: is_active_link?(decidim_admin_action_delegator.results_consultation_path(current_consultation), :exact),
99
- if: allowed_to?(:read, :question)
119
+ I18n.t("by_type_and_weight", scope: "decidim.action_delegator.admin.menu.elections_submenu"),
120
+ @election.present? && @election.census_ready? ? current_component_admin_proxy&.dashboard_election_path(@election, results: :by_type_and_weight) : "#",
121
+ icon_name: "list-check-2",
122
+ active: :exact
100
123
  menu.add_item :sum_of_weights,
101
- I18n.t("sum_of_weights", scope: "decidim.action_delegator.admin.menu.consultations_submenu"),
102
- decidim_admin_action_delegator.weighted_results_consultation_path(current_consultation),
103
- position: 1.2,
104
- active: is_active_link?(decidim_admin_action_delegator.weighted_results_consultation_path(current_consultation)),
105
- if: allowed_to?(:read, :question)
124
+ I18n.t("sum_of_weights", scope: "decidim.action_delegator.admin.menu.elections_submenu"),
125
+ @election.present? && @election.census_ready? ? current_component_admin_proxy&.dashboard_election_path(@election, results: :sum_of_weights) : "#",
126
+ icon_name: "bar-chart-2-line",
127
+ active: :exact
128
+ menu.add_item :totals,
129
+ I18n.t("totals", scope: "decidim.action_delegator.admin.menu.elections_submenu"),
130
+ @election.present? && @election.census_ready? ? current_component_admin_proxy&.dashboard_election_path(@election, results: :totals) : "#",
131
+ icon_name: "scales-line",
132
+ active: :exact
106
133
  end
107
134
  end
108
135
 
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+ require "decidim/dev"
6
+ # require "parallel_tests/tasks"
7
+
8
+ RSpec::Core::RakeTask.new(:spec) do |t|
9
+ t.rspec_opts = "--format progress --format RspecJunitFormatter -o ~/rspec/rspec.xml" if ENV["CI"]
10
+ end
11
+ task default: [:spec]
12
+
13
+ Decidim::Dev.install_tasks