decidim-action_delegator 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +97 -36
  3. data/app/commands/{decidim → concerns/decidim}/action_delegator/consultations/vote_question_override.rb +9 -1
  4. data/app/commands/decidim/action_delegator/admin/create_delegation.rb +5 -1
  5. data/app/commands/decidim/action_delegator/admin/create_participant.rb +41 -0
  6. data/app/commands/decidim/action_delegator/admin/create_ponderation.rb +38 -0
  7. data/app/commands/decidim/action_delegator/admin/create_setting.rb +49 -0
  8. data/app/commands/decidim/action_delegator/admin/fix_resource_permissions.rb +46 -0
  9. data/app/commands/decidim/action_delegator/admin/update_participant.rb +42 -0
  10. data/app/commands/decidim/action_delegator/admin/update_ponderation.rb +41 -0
  11. data/app/commands/decidim/action_delegator/admin/update_setting.rb +66 -0
  12. data/app/controllers/concerns/decidim/action_delegator/consultations/consultations_controller_override.rb +16 -0
  13. data/app/controllers/{decidim → concerns/decidim}/action_delegator/consultations/question_multiple_votes_controller_override.rb +2 -1
  14. data/app/controllers/{decidim → concerns/decidim}/action_delegator/consultations/question_votes_controller_override.rb +2 -0
  15. data/app/controllers/concerns/decidim/action_delegator/consultations/questions_controller_override.rb +16 -0
  16. data/app/controllers/concerns/decidim/action_delegator/needs_consultation_styles.rb +24 -0
  17. data/app/controllers/decidim/action_delegator/admin/consultations_controller.rb +22 -8
  18. data/app/controllers/decidim/action_delegator/admin/delegations_controller.rb +9 -9
  19. data/app/controllers/decidim/action_delegator/admin/invite_participants_controller.rb +84 -0
  20. data/app/controllers/decidim/action_delegator/admin/manage_delegations_controller.rb +48 -0
  21. data/app/controllers/decidim/action_delegator/admin/manage_participants_controller.rb +59 -0
  22. data/app/controllers/decidim/action_delegator/admin/participants_controller.rb +102 -0
  23. data/app/controllers/decidim/action_delegator/admin/permissions_controller.rb +40 -0
  24. data/app/controllers/decidim/action_delegator/admin/ponderations_controller.rb +101 -0
  25. data/app/controllers/decidim/action_delegator/admin/settings_controller.rb +51 -12
  26. data/app/controllers/decidim/action_delegator/verifications/delegations_verifier/authorizations_controller.rb +108 -0
  27. data/app/forms/decidim/action_delegator/admin/delegation_form.rb +23 -4
  28. data/app/forms/decidim/action_delegator/admin/invitation_participant_form.rb +10 -0
  29. data/app/forms/decidim/action_delegator/admin/participant_form.rb +44 -0
  30. data/app/forms/decidim/action_delegator/admin/ponderation_form.rb +28 -0
  31. data/app/forms/decidim/action_delegator/admin/setting_form.rb +28 -0
  32. data/app/forms/decidim/action_delegator/verifications/delegations_verifier_form.rb +131 -0
  33. data/app/helpers/decidim/action_delegator/admin/delegation_helper.rb +40 -3
  34. data/app/helpers/decidim/action_delegator/delegation_helper.rb +13 -0
  35. data/app/jobs/decidim/action_delegator/admin/import_csv_job.rb +27 -0
  36. data/app/jobs/decidim/action_delegator/admin/invite_participants_job.rb +39 -0
  37. data/app/jobs/decidim/action_delegator/sync_participants_job.rb +27 -0
  38. data/app/mailers/decidim/action_delegator/import_mailer.rb +31 -0
  39. data/app/models/decidim/action_delegator/delegation.rb +11 -0
  40. data/app/models/decidim/action_delegator/participant.rb +106 -0
  41. data/app/models/decidim/action_delegator/ponderation.rb +28 -0
  42. data/app/models/decidim/action_delegator/setting.rb +50 -1
  43. data/app/overrides/decidim/consultations/consultations/_question/add_delegation_link.html.erb.deface +3 -0
  44. data/app/overrides/decidim/consultations/consultations/_regular_questions/remove_highlighted_scopes.html.erb.deface +4 -0
  45. data/app/overrides/decidim/consultations/question_multiple_votes/_form/add_delegation_notice.html.erb.deface +8 -0
  46. data/app/overrides/decidim/consultations/questions/_vote_button/add_delegations_link.html.erb.deface +3 -0
  47. data/app/overrides/decidim/consultations/questions/_vote_button/add_modal.html.erb.deface +3 -0
  48. data/app/overrides/decidim/consultations/questions/_vote_button/replace_delegation_to_multivote_link.html.erb.deface +8 -0
  49. data/app/overrides/decidim/consultations/questions/_vote_modal/add_delegation_callout.html.erb.deface +3 -0
  50. data/app/overrides/decidim/consultations/questions/_vote_modal_confirm/add_delegation_callout.html.erb.deface +3 -0
  51. data/app/overrides/decidim/consultations/questions/_vote_modal_confirm/add_hidden_field.html.erb.deface +3 -0
  52. data/app/overrides/layouts/decidim/admin/remove_deprecation.rb +10 -0
  53. data/app/packs/entrypoints/decidim_action_delegator_questions.js +2 -0
  54. data/app/packs/src/decidim/action_delegator/questions.js +27 -0
  55. data/app/packs/stylesheets/decidim/action_delegator/questions.scss +4 -3
  56. data/app/permissions/concerns/decidim/action_delegator/consultations/permissions_override.rb +35 -0
  57. data/app/permissions/decidim/action_delegator/permissions.rb +6 -2
  58. data/app/queries/decidim/action_delegator/delegated_votes_versions.rb +5 -11
  59. data/app/queries/decidim/action_delegator/organization_settings.rb +6 -0
  60. data/app/queries/decidim/action_delegator/responses_by_membership.rb +3 -20
  61. data/app/queries/decidim/action_delegator/sum_of_membership_weight.rb +1 -5
  62. data/app/queries/decidim/action_delegator/sum_of_weights.rb +1 -1
  63. data/app/queries/decidim/action_delegator/type_and_weight.rb +1 -1
  64. data/app/queries/decidim/action_delegator/voted_with_ponderations.rb +30 -0
  65. data/app/services/decidim/action_delegator/csv_importer.rb +86 -0
  66. data/app/services/decidim/action_delegator/delegations_csv_importer.rb +54 -0
  67. data/app/services/decidim/action_delegator/participants_csv_importer.rb +131 -0
  68. data/app/views/decidim/action_delegator/admin/consultations/results.html.erb +3 -3
  69. data/app/views/decidim/action_delegator/admin/{results/sum_of_weights/index.html.erb → consultations/weighted_results.html.erb} +3 -3
  70. data/app/views/decidim/action_delegator/admin/delegations/index.html.erb +8 -3
  71. data/app/views/decidim/action_delegator/admin/delegations/new.html.erb +15 -12
  72. data/app/views/decidim/action_delegator/admin/manage_delegations/new.html.erb +25 -0
  73. data/app/views/decidim/action_delegator/admin/manage_participants/new.html.erb +33 -0
  74. data/app/views/decidim/action_delegator/admin/participants/_form.html.erb +9 -0
  75. data/app/views/decidim/action_delegator/admin/participants/_missing_registered_check.html.erb +17 -0
  76. data/app/views/decidim/action_delegator/admin/participants/edit.html.erb +21 -0
  77. data/app/views/decidim/action_delegator/admin/participants/index.html.erb +72 -0
  78. data/app/views/decidim/action_delegator/admin/participants/new.html.erb +21 -0
  79. data/app/views/decidim/action_delegator/admin/ponderations/_form.html.erb +8 -0
  80. data/app/views/decidim/action_delegator/admin/ponderations/edit.html.erb +21 -0
  81. data/app/views/decidim/action_delegator/admin/ponderations/index.html.erb +40 -0
  82. data/app/views/decidim/action_delegator/admin/ponderations/new.html.erb +21 -0
  83. data/app/views/decidim/action_delegator/admin/settings/_check_verifier.html.erb +5 -0
  84. data/app/views/decidim/action_delegator/admin/settings/_form.html.erb +16 -0
  85. data/app/views/decidim/action_delegator/admin/settings/_participants_email_check.html.erb +7 -0
  86. data/app/views/decidim/action_delegator/admin/settings/_participants_sync_check.html.erb +11 -0
  87. data/app/views/decidim/action_delegator/admin/settings/_setting_checks.html.erb +81 -0
  88. data/app/views/decidim/action_delegator/admin/settings/edit.html.erb +18 -0
  89. data/app/views/decidim/action_delegator/admin/settings/index.html.erb +25 -5
  90. data/app/views/decidim/action_delegator/admin/settings/new.html.erb +14 -26
  91. data/app/views/decidim/action_delegator/consultations/_link_to_question.html.erb +11 -0
  92. data/app/views/decidim/action_delegator/consultations/questions/_delegations_modal.html.erb +36 -0
  93. data/app/views/decidim/action_delegator/consultations/questions/_link_to_delegations.html.erb +11 -0
  94. data/app/views/decidim/action_delegator/consultations/questions/_vote_delegated_active.html.erb +32 -0
  95. data/app/views/decidim/action_delegator/consultations/questions/_vote_delegated_finished.html.erb +9 -0
  96. data/app/views/decidim/action_delegator/consultations/questions/_vote_delegated_upcoming.html.erb +8 -0
  97. data/app/views/decidim/action_delegator/import_mailer/import.html.erb +11 -0
  98. data/app/views/decidim/{verifications/sms/authorizations/new.html.erb → action_delegator/verifications/delegations_verifier/authorizations/edit.html.erb} +12 -7
  99. data/app/views/decidim/action_delegator/verifications/delegations_verifier/authorizations/new.html.erb +49 -0
  100. data/config/assets.rb +1 -3
  101. data/config/i18n-tasks.yml +8 -0
  102. data/config/locales/ca.yml +287 -23
  103. data/config/locales/cs.yml +286 -18
  104. data/config/locales/en.yml +331 -24
  105. data/config/locales/es.yml +288 -24
  106. data/db/migrate/20230323101247_create_decidim_action_delegator_ponderations.rb +12 -0
  107. data/db/migrate/20230323210000_create_decidim_action_delegator_participants.rb +13 -0
  108. data/db/migrate/20230323223752_add_decidim_action_delegator_verification_method.rb +7 -0
  109. data/db/migrate/20230412105710_add_decidim_action_delegator_participants_user_id.rb +7 -0
  110. data/lib/decidim/action_delegator/admin_engine.rb +68 -6
  111. data/lib/decidim/action_delegator/engine.rb +25 -15
  112. data/lib/decidim/action_delegator/test/factories.rb +22 -7
  113. data/lib/decidim/action_delegator/verifications/delegations_authorizer.rb +85 -0
  114. data/lib/decidim/action_delegator/verifications/delegations_verifier/engine.rb +25 -0
  115. data/lib/decidim/action_delegator/verifications/delegations_verifier.rb +12 -0
  116. data/lib/decidim/action_delegator/version.rb +3 -3
  117. data/lib/decidim/action_delegator.rb +41 -0
  118. data/lib/tasks/import_direct_verification.rake +30 -0
  119. data/package.json +57 -0
  120. metadata +115 -50
  121. data/app/controllers/decidim/action_delegator/admin/results/sum_of_weights_controller.rb +0 -37
  122. data/app/controllers/decidim/action_delegator/verifications/sms/authorizations_controller_override.rb +0 -38
  123. data/app/packs/entrypoints/decidim_action_delegator_admin_action_delegator_js.js +0 -1
  124. data/app/packs/entrypoints/decidim_action_delegator_questions_js.js +0 -1
  125. data/app/packs/src/decidim/action_delegator/admin/action_delegator.js.es6 +0 -3
  126. data/app/packs/src/decidim/action_delegator/questions.js.es6 +0 -26
  127. data/app/permissions/decidim/action_delegator/consultations_permissions_extension.rb +0 -27
  128. data/app/presenters/decidim/action_delegator/admin/consultation_presenter.rb +0 -15
  129. data/app/presenters/decidim/action_delegator/admin/setting_presenter.rb +0 -13
  130. data/app/queries/decidim/action_delegator/decrypted_authorizations.rb +0 -112
  131. data/app/queries/decidim/action_delegator/json_build_object_query.rb +0 -45
  132. data/app/queries/decidim/action_delegator/voted_with_direct_verification.rb +0 -53
  133. data/app/views/decidim/action_delegator/_delegations_modal.html.erb +0 -93
  134. data/app/views/decidim/action_delegator/_link_to_delegations.html.erb +0 -5
  135. data/app/views/decidim/action_delegator/_link_to_question.html.erb +0 -5
  136. data/app/views/decidim/consultations/consultations/_question.html.erb +0 -41
  137. data/app/views/decidim/consultations/consultations/show.html.erb +0 -14
  138. data/app/views/decidim/consultations/question_multiple_votes/_form.html.erb +0 -25
  139. data/app/views/decidim/consultations/questions/_vote_button.html.erb +0 -106
  140. data/app/views/decidim/consultations/questions/_vote_modal.html.erb +0 -30
  141. data/app/views/decidim/consultations/questions/_vote_modal_confirm.html.erb +0 -38
  142. data/app/views/layouts/decidim/action_delegator/admin/_users_sidebar.html.erb +0 -56
  143. data/app/views/layouts/decidim/action_delegator/admin/delegations.html.erb +0 -13
  144. data/app/views/layouts/decidim/admin/consultation.html.erb +0 -56
  145. data/app/views/layouts/decidim/admin/question.html.erb +0 -98
  146. data/app/views/layouts/decidim/admin/users.html.erb +0 -7
  147. data/config/initializers/doorkeeper.rb +0 -492
  148. data/lib/json_key.rb +0 -10
  149. /data/app/commands/{decidim → concerns/decidim}/action_delegator/consultations/multiple_vote_question_override.rb +0 -0
  150. /data/app/controllers/decidim/action_delegator/admin/exports/{sum_of_weights_controller.rb → _sum_of_weights_controller.rb} +0 -0
  151. /data/app/forms/{decidim → concerns/decidim}/action_delegator/consultations/vote_form_override.rb +0 -0
  152. /data/app/models/{decidim → concerns/decidim}/action_delegator/consultations/vote_override.rb +0 -0
  153. /data/app/views/decidim/action_delegator/{_callout.html.erb → consultations/questions/_callout.html.erb} +0 -0
@@ -1,79 +1,306 @@
1
+ ---
1
2
  es:
3
+ activemodel:
4
+ attributes:
5
+ delegations_verifier:
6
+ email: Correo electrónico
7
+ phone: Número de teléfono móvil
8
+ participant:
9
+ decidim_action_delegator_ponderation_id: Ponderación
10
+ email: Correo electrónico
11
+ phone: Teléfono
12
+ ponderation:
13
+ name: Tipo de miembro
14
+ name_help: Tipo de miembro
15
+ setting:
16
+ decidim_consultation_id: Consulta
17
+ max_grants: Número máximo de delegaciones de voto que una participante puede recibir
18
+ phone_freezed: Utilice el número de teléfono del censo. No permita que los participantes lo editen.
19
+ verify_with_sms: Verificar con SMS
20
+ errors:
21
+ models:
22
+ delegations_verifier:
23
+ attributes:
24
+ email:
25
+ email_not_found: Lo sentimos, este correo electrónico no está en el censo. Por favor, póngase en contacto con nosotros si cree que esto es un error.
26
+ phone:
27
+ phone_not_found: Lo sentimos, este correo electrónico no está en el censo. Por favor, póngase en contacto con nosotros si cree que esto es un error.
2
28
  decidim:
3
29
  action_delegator:
4
30
  admin:
5
31
  consultations:
6
32
  results:
7
33
  title: Resultados por respuesta, tipo de membresía y peso
34
+ weighted_results:
35
+ title: Resultados por respuesta sumando pesos por membresía
8
36
  delegations:
9
37
  create:
10
38
  error: Se ha producido un error al crear la delegación
11
39
  error_granter_unique: ya ha delegado su voto
12
40
  error_max_grants: You reached the limit of allowed delegations
13
41
  success: Delegación creada correctamente
42
+ csv_imports:
43
+ invalid: Se ha producido un error al importar las delegaciones
44
+ success: Delegaciones importadas correctamente
14
45
  destroy:
15
46
  error: Se ha producido un error al eliminar esta delegación
16
47
  success: Delegación eliminada correctamente
48
+ grantee_missing: El receptor no está registrado en la plataforma
49
+ granter_missing: El otorgante no está registrado en la plataforma
17
50
  index:
18
51
  actions:
52
+ csv_import: Importar un fichero CSV
19
53
  new_delegation: Nueva participante
20
54
  consultation: Consulta
21
55
  created_at: Creado el
22
56
  delete: Eliminar
23
- grantee: Beneficiario
24
- granter: Concedente
57
+ description_html: Estas son las delegaciones actuales para esta consulta
58
+ grantee: Receptora (a)
59
+ grantee_voted: '¿Se ha utilizado la delegación?'
60
+ granter: Otorgante
61
+ granter_voted: '¿Ha votado la otorgante?'
25
62
  title: Participantes
26
63
  new:
27
- form:
28
- title: Información general
29
64
  grantee: Beneficiario
30
- granter: Concedente
65
+ granter: Otorgante
31
66
  save: Crear
32
67
  select_member: Seleccionar miembro
33
68
  title: Nueva delegación
69
+ invite_participants:
70
+ invite_all_users:
71
+ error: Hubo un error al invitar a las participantes
72
+ success: Participantes invitadas correctamente
73
+ invite_user:
74
+ error: Hubo un error al invitar al participante
75
+ success: Participante invitada correctamente
76
+ permissions:
77
+ not_allowed: No tienes permisos para realizar esta acción
78
+ resend_invitation:
79
+ error: Se ha producido un error al reenviar la invitación
80
+ success: Invitación reenviada con éxito
81
+ manage_delegations:
82
+ create:
83
+ error: Se ha producido un error en importar las participantes
84
+ success: El proceso de importación ha comenzado, por favor espere unos minutos y actualice la página para ver la lista de participantes. Los resultados de importación se enviarán por correo electrónico.
85
+ new:
86
+ import: Importar
87
+ required_fields: 'Campos requeridos: correo del otorgante, correo del receptor'
88
+ title: Importar delegaciones
89
+ title_example: 'Ejemplo:'
90
+ upload_instructions: Debe ser un archivo en formato CSV con un encabezado.
91
+ manage_participants:
92
+ create:
93
+ error: Se ha producido un error en importar las participantes
94
+ success: El proceso de importación ha comenzado, por favor espere unos minutos y actualice la página para ver la lista de participantes. Los resultados de importación se enviarán por correo electrónico.
95
+ new:
96
+ authorization_method:
97
+ both: correo electrónico y número de teléfono
98
+ email: correo electrónico
99
+ phone: número de teléfono
100
+ describe: 'Tenga en cuenta que también es posible importar pesos usando el nombre en la tabla de ponderación en lugar del número de peso, por ejemplo:'
101
+ import: Importar
102
+ required_fields: 'Campos requeridos: %{authorization_method}'
103
+ title: Importar participantes
104
+ title_example: 'Ejemplo:'
105
+ upload_instructions: Debe ser un archivo en formato CSV con un encabezado.
34
106
  menu:
35
107
  consultations_submenu:
36
108
  by_answer: Por respuesta
37
109
  by_type_and_weight: Por tipo y peso
38
110
  sum_of_weights: Por suma de pesos
39
- delegations: Delegaciones de usuario
111
+ delegations: Gobernanza Societaria
40
112
  participants: Participantes
41
- results:
42
- sum_of_weights:
43
- index:
44
- title: Resultados por respuesta sumando pesos por membresía
113
+ participants:
114
+ create:
115
+ error: Se ha producido un error en importar las participantes
116
+ success: Participantes creados con éxito
117
+ destroy:
118
+ error: Se ha producido un error al eliminar este participante
119
+ success: Participante correctamente eliminado
120
+ edit:
121
+ save: Guardar
122
+ title: Editar participante
123
+ index:
124
+ actions:
125
+ csv_import: Importar CSV
126
+ new_participant: Nueva participante
127
+ remove_census: Eliminar censo
128
+ all_users_registered_html: Todas las participantes están registradas en la plataforma
129
+ created_at: Creado el
130
+ email: Correo electrónico
131
+ last_login: Último acceso
132
+ missing_emails: El método de autorización no requiere un correo electrónico. Por esto, %{count} debe registrarse en la plataforma
133
+ missing_registered: Hay %{missing_registered} participantes que no están registradas en la plataforma
134
+ never_logged: Nunca ha iniciado sesión
135
+ participant: participante
136
+ phone: Teléfono
137
+ ponderation: Tipos de ponderación
138
+ send_invitation_link: Haga clic aquí para enviarles una invitación
139
+ title: Censo
140
+ user: Nombre
141
+ voted: '¿Ha votado?'
142
+ new:
143
+ save: Crear
144
+ title: Nueva participante
145
+ remove_census:
146
+ confirm: '¿Está seguro de que quiere eliminar el censo? Esta acción no se puede deshacer'
147
+ success: "%{participants_count} entradas fueron eliminadas de la página con éxito"
148
+ update:
149
+ error: Se ha producido un error en actualizar las participantes
150
+ success: Participantes guardados con éxito
151
+ permissions:
152
+ sync:
153
+ started: La sincronización de participantes ha comenzado. Por favor espere unos minutos y actualice esta página.
154
+ update:
155
+ error: Se ha producido un error al actualizar los permisos
156
+ success: Permisos correctamente actualizados.
157
+ ponderations:
158
+ create:
159
+ error: Se ha producido un error al crear la ponderación
160
+ success: Ponderación creada correctamente
161
+ destroy:
162
+ error: Se ha producido un error al eliminar la ponderación
163
+ success: Ponderación destruida correctamente
164
+ edit:
165
+ save: Guardar
166
+ title: Editar tipos de ponderación
167
+ form:
168
+ name_help: Tipo de asociado, p. ej., "socio", "consumidor", "patrón". Debe ser único.
169
+ name_placeholder: 'Prueba, por ejemplo: "miembro", "asociado", "partidario"...'
170
+ weight_help: Peso del voto p. ej., "1", "2", "1.5". Este número se utilizará para sopesar los votos de las participantes en este tipo de ponderación.
171
+ index:
172
+ actions:
173
+ new_ponderation: Nueva ponderación
174
+ created_at: Creado el
175
+ name: Tipo de miembro
176
+ num_users: Censo total
177
+ title: Ponderaciones
178
+ weight: Peso del voto
179
+ new:
180
+ save: Crear
181
+ title: Nuevo tipo de ponderación
182
+ update:
183
+ error: Se ha producido un error al actualizar la ponderación
184
+ success: Ponderación actualizada correctamente
45
185
  settings:
186
+ authorization_method:
187
+ both: Correo electrónico y número de teléfono
188
+ email: Solo correo electrónico
189
+ phone: Solo número de teléfono móvil
190
+ authorization_method_help: |
191
+ Las opciones disponibles son:
192
+ <ul>
193
+ <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
+ <li><b>Solo correo electrónico:</b> El correo electrónico de la participante debe coincidir con el censo.</li>
195
+ <li><b>Correo electrónico y número de teléfono:</b> Utiliza verificación por SMS. El correo electrónico de la participante debe coincidir con el censo y el número de teléfono estará predefinido.</li>
196
+ </ul>
197
+ check_verifier:
198
+ not_installed_html: Parece que el método de autorización "Verificador de Gobernanza Societaria" no está activado. No puedes autenticar el censo sin la activación. Instálelo en <a href="/system">/system</a>.
199
+ copy_setting: 'Copiar ponderaciones y censo de:'
46
200
  create:
47
201
  error: Se ha producido un problema al crear la configuración
48
202
  success: Configuración guardada correctamente
49
203
  destroy:
50
204
  error: Hubo un problema al destruir esta configuración
51
205
  success: Configuración eliminada correctamente
206
+ edit:
207
+ save: Guardar
208
+ title: Editar grupo de delegación
209
+ form:
210
+ max_grants: Máximas delegaciones por participante
52
211
  index:
53
212
  actions:
54
- new_setting: Nueva delegación
213
+ census: Edita el censo
214
+ delegations: Edita las delegaciones
215
+ new_setting: Nueva configuración
216
+ ponderate: Establecer los pesos para la ponderación de votos
217
+ authorization_method: Método de autorización
218
+ census: Censo total
55
219
  consultation: Consulta
56
220
  created_at: Creado el
57
221
  delegations: Total de delegaciones
222
+ description_html: |
223
+ Este módulo está diseñado para organizaciones que votan a través de consultas. Las funcionalidades que tenemos disponibles son: elaboración de censo, delegaciones de participantes y ponderaciones por tipo de miembro. También podemos utilizar el verificador integrado a través de SMS, correo electrónico o ambos. Es posible utilizar este módulo sin importar un censo, puede gestionarlo para realizar delegaciones y/o ponderaciones. Si necesitas más información, ingresa a guia.cercles.coop.
224
+ <br>
225
+ 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.
58
226
  max_grants: Máx. delegaciones/persona
59
- title: Delegaciones
227
+ open: Abierto
228
+ ponderations: Tipos de ponderación
229
+ state: Estado
230
+ title: Gobernanza Societaria
60
231
  new:
61
- form:
62
- title: Información general
63
- max_grants: Maximum delegations
64
232
  save: Guardar
65
- title: Configuración de la delegación
233
+ title: Nueva configuración
234
+ setting_checks:
235
+ all_users_authorized_html: Todas las participantes están verificadas por el <i>Verificador de Gobernanza Societaria</i>.
236
+ all_users_registered_html: Todos los participantes están registrados en la plataforma.
237
+ 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
+ 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
+ missing_emails: El método de autorización no requiere un correo electrónico. Por esto, %{count} debe registrarse en la plataforma
242
+ missing_registered_users_html: Hay %{count} participantes que no están registrados en la plataforma.
243
+ no_delegations_html: No hay votos delegados.
244
+ 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
+ no_ponderations_html: No hay ponderaciones de votos. <b>Todos los usuarios tendrán el mismo peso en sus votos</b>
246
+ participant: participante
247
+ user: participante
248
+ 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
+ update:
254
+ error: Se ha producido un problema al actualizar la configuración
255
+ success: Configuración guardada correctamente
256
+ weighted_results:
257
+ title: Resultados por respuesta sumando pesos de miembros
66
258
  authorizations:
67
259
  new:
68
260
  missing_phone_error: Falta el teléfono de miembro
69
261
  phone_warning: Este número de teléfono ha sido importado por el administrador. Por favor, contacta si no es correcto.
70
262
  delegations:
263
+ has_delegations: Voto delegado realizado
71
264
  link: Tienes delegaciones concedidas
265
+ delegations_authorizer:
266
+ 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
269
+ phone: Estamos usando el teléfono %{phone} para verificar su identidad. Si cree que esto está mal, póngase en contacto con nosotros.
72
270
  delegations_modal:
73
271
  callout: Recuerda, estás votando en nombre de
74
272
  contextual_help: 'Se le ha concedido el voto de:'
75
273
  title: 'Consulta: delegaciones concedidas'
274
+ import_mailer:
275
+ import:
276
+ errors_present: Se han producido errores durante la importación
277
+ errors_title: "<b>Se han encontrado:</b> %{errors_count} errores"
278
+ greeting: Hola %{name},
279
+ 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"
281
+ result: "<b>Importado:</b> %{rows_count} filas de %{total_rows_count}."
282
+ row_number: Numero fila
283
+ skipped_rows: "<b>Omitidas:</b> %{skipped_rows} filas."
284
+ subject: CSV importado
285
+ success: CSV importado correctamente
286
+ text_error: Error
287
+ invite_participants_mailer:
288
+ confirmation:
289
+ body: Has sido invitado a participar en la consulta. Por favor, haz clic en el enlace de abajo para confirmar tu participación.
290
+ confirm: Confirmar la participación
291
+ greeting: '¡Hola, %{recipient}!,'
76
292
  name: Módulo Cooperativas - ActionDelegator para Decidim
293
+ participants_csv_importer:
294
+ import:
295
+ error: Se ha producido un error en importar las participantes
296
+ error_field: Motivo para omitir
297
+ field_name:
298
+ phone: teléfono
299
+ weight: peso
300
+ phone_exists: Ya existe un participante con esta dirección de correo electrónico
301
+ ponderation_not_found: Tipo de ponderación no encontrado
302
+ skip_import_info: El participante ya existe %{with_mismatched_fields}
303
+ with_mismatched_fields: "con campos no coincidentes: %{fields}"
77
304
  sms_message: Su código de verificación es %{code}
78
305
  user_delegations:
79
306
  index:
@@ -83,28 +310,65 @@ es:
83
310
  members:
84
311
  index:
85
312
  title: Gestión de miembros
313
+ verifications:
314
+ delegations_verifier:
315
+ authorizations:
316
+ edit:
317
+ confirm_destroy: '¿Seguro que quieres restablecer el código de verificación?'
318
+ destroy: Reiniciar código de verificación
319
+ resend: '¿No has recibido el código de verificación?'
320
+ send: Confirmar
321
+ title: Introduce el código de verificación que recibiste
322
+ new:
323
+ authorize: Autorizar mi cuenta
324
+ missing_phone_error: Falta el teléfono de miembro
325
+ 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
+ participate_in: 'Esta autorización le permite participar en las siguientes consultas: %{consultations}'
327
+ phone_warning: Este número de teléfono ha sido importado por el administrador. Por favor, contacta si no es correcto.
328
+ send_code: Enviar código de verificación
329
+ title: Autorizar con el Verificador de Gobernanza Societaria
86
330
  admin:
331
+ actions:
332
+ invite: Enviar invitación
333
+ invite_all: Enviar invitaciones a participantes no registradas
334
+ resend: Reenviar la invitación
87
335
  consultations:
88
336
  results:
89
337
  default_metadata: "(datos de afiliación no disponibles)"
90
338
  export: Exportar
91
339
  export_filename: consultation_results
92
- membership_type: Membership type
93
- membership_weight: Weight
94
- total_delegates: "%{count} delegated votes"
340
+ membership_type: Tipo de miembro
341
+ membership_weight: Peso
342
+ total_delegates: "%{count} votos delegados"
95
343
  authorization_handlers:
96
344
  admin:
97
345
  delegations_verifier:
98
346
  help:
99
- - A verification method for delegate voting
347
+ - Un método de verificación para el voto delegado
100
348
  delegations_verifier:
101
- explanation: Verified users with this method can delegate votes to other users
102
- name: Delegations Verifier
349
+ explanation: Las participantes verificadas con este método pueden delegar votos a otras participantes
350
+ fields:
351
+ phone: Número de teléfono
352
+ name: Gobernanza Societaria
353
+ resources:
354
+ question:
355
+ actions:
356
+ comment: Comentario
357
+ vote: Votar
358
+ verifications:
359
+ authorizations:
360
+ first_login:
361
+ actions:
362
+ delegations_verifier: Get verified with Corporate Governance Census
363
+ devise:
364
+ mailer:
365
+ invite_participant:
366
+ subject: Has sido invitada a participar en una consulta
103
367
  layouts:
104
368
  decidim:
105
- user_profile:
106
- vote_delegations: Vote delegations
107
369
  admin:
108
370
  question:
109
371
  attachments: Adjuntos
110
372
  categories: Categorías
373
+ user_profile:
374
+ vote_delegations: Delegación de votos
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateDecidimActionDelegatorPonderations < ActiveRecord::Migration[6.0]
4
+ def change
5
+ create_table :decidim_action_delegator_ponderations do |t|
6
+ t.references :decidim_action_delegator_setting, null: false, index: { name: "index_decidim_action_delegator_ponderations_on_setting_id" }
7
+ t.string :name, null: false
8
+ t.decimal :weight, null: false, default: 1, precision: 5, scale: 2
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateDecidimActionDelegatorParticipants < ActiveRecord::Migration[6.0]
4
+ def change
5
+ create_table :decidim_action_delegator_participants do |t|
6
+ t.references :decidim_action_delegator_setting, null: false, index: { name: "index_decidim_action_delegator_participants_on_setting_id" }
7
+ t.references :decidim_action_delegator_ponderation, index: { name: "index_decidim_action_delegator_participants_on_ponderation_id" }
8
+ t.string :email, null: false
9
+ t.string :phone
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddDecidimActionDelegatorVerificationMethod < ActiveRecord::Migration[6.0]
4
+ def change
5
+ add_column :decidim_action_delegator_settings, :authorization_method, :integer, default: 0, null: false
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddDecidimActionDelegatorParticipantsUserId < ActiveRecord::Migration[6.0]
4
+ def change
5
+ add_reference :decidim_action_delegator_participants, :decidim_user, foreign_key: true, index: true
6
+ end
7
+ end
@@ -10,26 +10,88 @@ module Decidim
10
10
  paths["lib/tasks"] = nil
11
11
 
12
12
  routes do
13
- resources :settings, only: [:index, :new, :create, :destroy] do
13
+ resources :settings do
14
14
  resources :delegations, only: [:index, :new, :create, :destroy]
15
+ resources :ponderations
16
+ resources :participants
17
+ resources :invite_participants do
18
+ post :invite_user, on: :member
19
+ post :invite_all_users, on: :collection
20
+ post :resend_invitation, on: :member
21
+ end
22
+ resources :manage_participants, only: [:new, :create, :destroy_all] do
23
+ delete :destroy_all, on: :collection
24
+ end
25
+ resources :manage_delegations, only: [:new, :create]
26
+ resources :permissions, only: [:create] do
27
+ post :sync, on: :collection
28
+ end
15
29
  end
16
30
 
17
31
  resources :consultations, param: :slug, only: [] do
18
32
  get :results, on: :member
19
- resources :exports, only: [:create], module: :consultations
33
+ get :weighted_results, on: :member
34
+ resources :exports, only: :create, module: :consultations
20
35
 
21
36
  namespace :exports do
22
37
  resources :sum_of_weights, only: :create
23
38
  end
24
-
25
- namespace :results do
26
- resources :sum_of_weights, only: :index
27
- end
28
39
  end
29
40
 
30
41
  root to: "delegations#index"
31
42
  end
32
43
 
44
+ initializer "decidim_admin_action_delegator.admin_user_menu" do
45
+ Decidim.menu :admin_user_menu do |menu|
46
+ menu.add_item :users,
47
+ I18n.t("menu.delegations", scope: "decidim.action_delegator.admin"), decidim_admin_action_delegator.settings_path,
48
+ active: is_active_link?(decidim_admin_action_delegator.settings_path),
49
+ if: allowed_to?(:index, :impersonatable_user)
50
+ end
51
+ end
52
+
53
+ initializer "decidim_admin_action_delegator.admin_consultation_menu" do
54
+ Decidim.menu :admin_consultation_menu do |menu|
55
+ menu.remove_item :results_consultation
56
+ is_results = is_active_link?(decidim_admin_consultations.results_consultation_path(current_consultation)) ||
57
+ is_active_link?(decidim_admin_action_delegator.results_consultation_path(current_consultation)) ||
58
+ is_active_link?(decidim_admin_action_delegator.weighted_results_consultation_path(current_consultation))
59
+ params = {
60
+ position: 1.2,
61
+ active: is_results,
62
+ if: allowed_to?(:read, :question)
63
+ }
64
+ params[:submenu] = { target_menu: :admin_delegation_results_submenu } if is_results
65
+ menu.add_item :delegated_results,
66
+ I18n.t("results", scope: "decidim.admin.menu.consultations_submenu"),
67
+ decidim_admin_consultations.results_consultation_path(current_consultation),
68
+ params
69
+ end
70
+ end
71
+
72
+ initializer "decidim_admin_action_delegator.admin_consultation_menu" do
73
+ Decidim.menu :admin_delegation_results_submenu do |menu|
74
+ menu.add_item :by_answer,
75
+ I18n.t("by_answer", scope: "decidim.action_delegator.admin.menu.consultations_submenu"),
76
+ decidim_admin_consultations.results_consultation_path(current_consultation),
77
+ position: 1.0,
78
+ active: is_active_link?(decidim_admin_consultations.results_consultation_path(current_consultation)),
79
+ if: allowed_to?(:read, :question)
80
+ menu.add_item :by_type_and_weight,
81
+ I18n.t("by_type_and_weight", scope: "decidim.action_delegator.admin.menu.consultations_submenu"),
82
+ decidim_admin_action_delegator.results_consultation_path(current_consultation),
83
+ position: 1.1,
84
+ active: is_active_link?(decidim_admin_action_delegator.results_consultation_path(current_consultation), :exact),
85
+ if: allowed_to?(:read, :question)
86
+ menu.add_item :sum_of_weights,
87
+ I18n.t("sum_of_weights", scope: "decidim.action_delegator.admin.menu.consultations_submenu"),
88
+ decidim_admin_action_delegator.weighted_results_consultation_path(current_consultation),
89
+ position: 1.2,
90
+ active: is_active_link?(decidim_admin_action_delegator.weighted_results_consultation_path(current_consultation)),
91
+ if: allowed_to?(:read, :question)
92
+ end
93
+ end
94
+
33
95
  def load_seed
34
96
  nil
35
97
  end
@@ -4,6 +4,7 @@ require "savon"
4
4
  require "rails"
5
5
  require "decidim/core"
6
6
  require "decidim/consultations"
7
+ require "deface"
7
8
 
8
9
  module Decidim
9
10
  module ActionDelegator
@@ -24,18 +25,30 @@ module Decidim
24
25
  # override votes questions
25
26
  Decidim::Consultations::VoteQuestion.include(Decidim::ActionDelegator::Consultations::VoteQuestionOverride)
26
27
  Decidim::Consultations::MultipleVoteQuestion.include(Decidim::ActionDelegator::Consultations::MultipleVoteQuestionOverride)
27
- Decidim::Consultations::QuestionVotesController.include(Decidim::ActionDelegator::Consultations::QuestionVotesControllerOverride)
28
- Decidim::Consultations::QuestionMultipleVotesController.include(Decidim::ActionDelegator::Consultations::QuestionMultipleVotesControllerOverride)
29
28
  Decidim::Consultations::VoteForm.include(Decidim::ActionDelegator::Consultations::VoteFormOverride)
30
29
  Decidim::Consultations::MultiVoteForm.include(Decidim::ActionDelegator::Consultations::VoteFormOverride)
31
30
  Decidim::Consultations::Vote.include(Decidim::ActionDelegator::Consultations::VoteOverride)
32
- Decidim::Verifications::Sms::AuthorizationsController.include(Decidim::ActionDelegator::Verifications::Sms::AuthorizationsControllerOverride)
31
+ Decidim::Consultations::Permissions.include(Decidim::ActionDelegator::Consultations::PermissionsOverride)
33
32
  end
34
33
 
35
- initializer "decidim_action_delegator.layout_helper" do |_app|
36
- # activate Decidim LayoutHelper for the overriden views
37
- ::Decidim::Admin::ApplicationController.helper ::Decidim::LayoutHelper
38
- ::Decidim::ApplicationController.helper ::Decidim::LayoutHelper
34
+ initializer "decidim_action_delegator.overrides", after: "decidim.action_controller" do
35
+ config.to_prepare do
36
+ Decidim::Consultations::QuestionVotesController.include(Decidim::ActionDelegator::Consultations::QuestionVotesControllerOverride)
37
+ Decidim::Consultations::QuestionsController.include(Decidim::ActionDelegator::Consultations::QuestionsControllerOverride)
38
+ Decidim::Consultations::ConsultationsController.include(Decidim::ActionDelegator::Consultations::ConsultationsControllerOverride)
39
+ Decidim::Consultations::QuestionMultipleVotesController.include(Decidim::ActionDelegator::Consultations::QuestionMultipleVotesControllerOverride)
40
+ end
41
+ end
42
+
43
+ initializer "decidim_action_delegator.authorizations" do
44
+ next unless Decidim::ActionDelegator.authorization_expiration_time.positive?
45
+
46
+ Decidim::Verifications.register_workflow(:delegations_verifier) do |workflow|
47
+ workflow.action_authorizer = "Decidim::ActionDelegator::Verifications::DelegationsAuthorizer"
48
+ workflow.engine = Decidim::ActionDelegator::Verifications::DelegationsVerifier::Engine
49
+ workflow.expires_in = Decidim::ActionDelegator.authorization_expiration_time
50
+ workflow.time_between_renewals = 1.minute
51
+ end
39
52
  end
40
53
 
41
54
  initializer "decidim_action_delegator.webpacker.assets_path" do |_app|
@@ -44,16 +57,13 @@ module Decidim
44
57
 
45
58
  initializer "decidim.user_menu" do
46
59
  Decidim.menu :user_menu do |menu|
47
- menu.item t("vote_delegations", scope: "layouts.decidim.user_profile"),
48
- decidim_action_delegator.user_delegations_path,
49
- position: 5.0,
50
- active: :exact
60
+ menu.add_item :vote_delegations,
61
+ t("vote_delegations", scope: "layouts.decidim.user_profile"),
62
+ decidim_action_delegator.user_delegations_path,
63
+ position: 5.0,
64
+ active: :exact
51
65
  end
52
66
  end
53
-
54
- initializer "decidim_action_delegator.permissions" do
55
- Decidim::Consultations::Permissions.prepend(ConsultationsPermissionsExtension)
56
- end
57
67
  end
58
68
  end
59
69
  end
@@ -10,16 +10,31 @@ FactoryBot.define do
10
10
  grantee { association :user, organization: setting.consultation.organization }
11
11
  end
12
12
 
13
+ factory :ponderation, class: "Decidim::ActionDelegator::Ponderation" do
14
+ setting
15
+ name { Faker::Lorem.sentence }
16
+ weight { Faker::Number.between(from: 1, to: 10) }
17
+ end
18
+
19
+ factory :participant, class: "Decidim::ActionDelegator::Participant" do
20
+ setting
21
+ email { Faker::Internet.email }
22
+ phone { Faker::PhoneNumber.phone_number }
23
+ ponderation { setting.ponderations.first }
24
+ end
25
+
13
26
  factory :setting, class: "Decidim::ActionDelegator::Setting" do
14
27
  max_grants { 3 }
15
28
  consultation
16
- end
17
- end
18
-
19
- FactoryBot.modify do
20
- factory :authorization, class: "Decidim::Authorization" do
21
- trait :direct_verification do
22
- name { "direct_verifications" }
29
+ trait :with_ponderations do
30
+ after(:create) do |setting|
31
+ create_list(:ponderation, 3, setting: setting)
32
+ end
33
+ end
34
+ trait :with_participants do
35
+ after(:create) do |setting|
36
+ create_list(:participant, 3, setting: setting)
37
+ end
23
38
  end
24
39
  end
25
40
  end