decidim-meetings 0.30.4 → 0.31.0.rc1

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 (205) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/meetings/cancel_registration_meeting_button/cancelation_modal.erb +7 -4
  3. data/app/cells/decidim/meetings/cancel_registration_meeting_button/show.erb +1 -1
  4. data/app/cells/decidim/meetings/cancel_registration_meeting_button_cell.rb +36 -0
  5. data/app/cells/decidim/meetings/dates_and_map_cell.rb +1 -1
  6. data/app/cells/decidim/meetings/join_meeting_button/registration_modal.erb +4 -5
  7. data/app/cells/decidim/meetings/join_meeting_button/show.erb +25 -28
  8. data/app/cells/decidim/meetings/join_meeting_button/waitlist_button.erb +22 -0
  9. data/app/cells/decidim/meetings/join_meeting_button_cell.rb +28 -0
  10. data/app/cells/decidim/meetings/meeting_cell.rb +6 -1
  11. data/app/cells/decidim/meetings/meeting_s_cell.rb +15 -0
  12. data/app/cells/decidim/meetings/question_responses/show.erb +7 -7
  13. data/app/cells/decidim/meetings/question_responses_cell.rb +28 -28
  14. data/app/commands/decidim/meetings/admin/copy_meeting.rb +5 -2
  15. data/app/commands/decidim/meetings/admin/create_agenda.rb +6 -2
  16. data/app/commands/decidim/meetings/admin/create_meeting.rb +7 -3
  17. data/app/commands/decidim/meetings/admin/mark_as_attendee.rb +44 -0
  18. data/app/commands/decidim/meetings/admin/publish_meeting.rb +2 -1
  19. data/app/commands/decidim/meetings/admin/update_agenda.rb +6 -2
  20. data/app/commands/decidim/meetings/admin/update_meeting.rb +15 -6
  21. data/app/commands/decidim/meetings/admin/update_questionnaire.rb +4 -4
  22. data/app/commands/decidim/meetings/admin/update_registrations.rb +19 -7
  23. data/app/commands/decidim/meetings/create_meeting.rb +2 -3
  24. data/app/commands/decidim/meetings/{create_answer.rb → create_response.rb} +11 -11
  25. data/app/commands/decidim/meetings/join_meeting.rb +4 -6
  26. data/app/commands/decidim/meetings/join_waitlist.rb +53 -0
  27. data/app/commands/decidim/meetings/leave_meeting.rb +14 -5
  28. data/app/commands/decidim/meetings/update_meeting.rb +1 -2
  29. data/app/controllers/concerns/decidim/meetings/admin/filterable.rb +1 -1
  30. data/app/controllers/decidim/meetings/admin/agenda_controller.rb +2 -2
  31. data/app/controllers/decidim/meetings/admin/invites_controller.rb +1 -1
  32. data/app/controllers/decidim/meetings/admin/meeting_closes_controller.rb +1 -1
  33. data/app/controllers/decidim/meetings/admin/meeting_copies_controller.rb +1 -1
  34. data/app/controllers/decidim/meetings/admin/meetings_controller.rb +4 -4
  35. data/app/controllers/decidim/meetings/admin/meetings_poll_controller.rb +10 -10
  36. data/app/controllers/decidim/meetings/admin/registrations_attendees_controller.rb +79 -0
  37. data/app/controllers/decidim/meetings/admin/registrations_controller.rb +1 -22
  38. data/app/controllers/decidim/meetings/meeting_closes_controller.rb +1 -1
  39. data/app/controllers/decidim/meetings/meetings_controller.rb +11 -11
  40. data/app/controllers/decidim/meetings/polls/{answers_controller.rb → responses_controller.rb} +7 -7
  41. data/app/controllers/decidim/meetings/registrations_controller.rb +39 -12
  42. data/app/events/decidim/meetings/registration_marked_as_attendee_event.rb +9 -0
  43. data/app/events/decidim/meetings/upcoming_meeting_event.rb +41 -0
  44. data/app/events/decidim/meetings/update_meeting_event.rb +25 -0
  45. data/app/forms/decidim/meetings/admin/close_meeting_form.rb +2 -1
  46. data/app/forms/decidim/meetings/admin/meeting_agenda_items_form.rb +4 -0
  47. data/app/forms/decidim/meetings/admin/meeting_form.rb +28 -3
  48. data/app/forms/decidim/meetings/admin/question_form.rb +3 -3
  49. data/app/forms/decidim/meetings/admin/{answer_option_form.rb → response_option_form.rb} +3 -3
  50. data/app/forms/decidim/meetings/admin/validate_registration_code_form.rb +1 -1
  51. data/app/forms/decidim/meetings/base_meeting_form.rb +0 -2
  52. data/app/forms/decidim/meetings/close_meeting_form.rb +2 -1
  53. data/app/forms/decidim/meetings/join_meeting_form.rb +0 -1
  54. data/app/forms/decidim/meetings/meeting_form.rb +3 -2
  55. data/app/forms/decidim/meetings/response_choice_form.rb +14 -0
  56. data/app/forms/decidim/meetings/{answer_form.rb → response_form.rb} +7 -7
  57. data/app/helpers/decidim/meetings/application_helper.rb +0 -1
  58. data/app/helpers/decidim/meetings/meetings_helper.rb +14 -5
  59. data/app/jobs/decidim/meetings/promote_from_waitlist_job.rb +63 -0
  60. data/app/jobs/decidim/meetings/upcoming_meeting_notification_job.rb +1 -1
  61. data/app/mailers/decidim/meetings/registration_mailer.rb +13 -0
  62. data/app/models/decidim/meetings/agenda_item.rb +5 -0
  63. data/app/models/decidim/meetings/meeting.rb +15 -12
  64. data/app/models/decidim/meetings/question.rb +12 -12
  65. data/app/models/decidim/meetings/questionnaire.rb +1 -1
  66. data/app/models/decidim/meetings/registration.rb +19 -7
  67. data/app/models/decidim/meetings/{answer.rb → response.rb} +6 -6
  68. data/app/models/decidim/meetings/response_choice.rb +15 -0
  69. data/app/models/decidim/meetings/{answer_option.rb → response_option.rb} +5 -5
  70. data/app/packs/src/decidim/meetings/admin/destroy_meeting_alert.js +1 -1
  71. data/app/packs/src/decidim/meetings/admin/meetings_components_form.js +1 -8
  72. data/app/packs/src/decidim/meetings/admin/meetings_form.js +1 -1
  73. data/app/packs/src/decidim/meetings/admin/registrations_form.js +1 -1
  74. data/app/packs/src/decidim/meetings/admin/registrations_invite_form.js +1 -1
  75. data/app/packs/src/decidim/meetings/meetings_form.js +1 -1
  76. data/app/packs/src/decidim/meetings/meetings_polls.js +1 -1
  77. data/app/packs/src/decidim/meetings/poll.component.js +5 -5
  78. data/app/packs/stylesheets/decidim/meetings/_item.scss +5 -1
  79. data/app/packs/stylesheets/decidim/meetings/meetings.scss +4 -4
  80. data/app/permissions/decidim/meetings/admin/agenda_permissions.rb +34 -0
  81. data/app/permissions/decidim/meetings/admin/meeting_permissions.rb +44 -0
  82. data/app/permissions/decidim/meetings/admin/permissions.rb +5 -66
  83. data/app/permissions/decidim/meetings/admin/questionnaire_permissions.rb +30 -0
  84. data/app/permissions/decidim/meetings/meeting_permissions.rb +90 -0
  85. data/app/permissions/decidim/meetings/permissions.rb +9 -105
  86. data/app/presenters/decidim/meetings/admin_log/value_types/meeting_title_description_presenter.rb +1 -1
  87. data/app/presenters/decidim/meetings/agenda_item_presenter.rb +29 -0
  88. data/app/presenters/decidim/meetings/meeting_presenter.rb +11 -15
  89. data/app/presenters/decidim/meetings/registration_presenter.rb +24 -0
  90. data/app/queries/decidim/meetings/{questionnaire_user_answers.rb → questionnaire_user_responses.rb} +5 -5
  91. data/app/serializers/decidim/meetings/registration_serializer.rb +5 -6
  92. data/app/services/decidim/meetings/diff_renderer.rb +0 -1
  93. data/app/views/decidim/meetings/_calendar_modal.html.erb +1 -0
  94. data/app/views/decidim/meetings/admin/agenda/_agenda_item_fields.html.erb +1 -1
  95. data/app/views/decidim/meetings/admin/invites/_form.html.erb +1 -1
  96. data/app/views/decidim/meetings/admin/meeting_closes/_form.html.erb +1 -1
  97. data/app/views/decidim/meetings/admin/meetings/_form.html.erb +3 -2
  98. data/app/views/decidim/meetings/admin/meetings/_linked_spaces.html.erb +1 -1
  99. data/app/views/decidim/meetings/admin/meetings/_meeting-tr.html.erb +9 -14
  100. data/app/views/decidim/meetings/admin/meetings/_meeting_actions.html.erb +200 -69
  101. data/app/views/decidim/meetings/admin/meetings/_meetings-thead.html.erb +0 -3
  102. data/app/views/decidim/meetings/admin/meetings/_reminders.html.erb +19 -0
  103. data/app/views/decidim/meetings/admin/meetings/_services.html.erb +1 -1
  104. data/app/views/decidim/meetings/admin/meetings/index.html.erb +7 -5
  105. data/app/views/decidim/meetings/admin/meetings/manage_trash.html.erb +2 -1
  106. data/app/views/decidim/meetings/admin/poll/_form.html.erb +8 -37
  107. data/app/views/decidim/meetings/admin/poll/_question.html.erb +19 -9
  108. data/app/views/decidim/meetings/admin/poll/_response_option.html.erb +35 -0
  109. data/app/views/decidim/meetings/admin/poll/_response_option_template.html.erb +7 -0
  110. data/app/views/decidim/meetings/admin/poll/edit.html.erb +3 -3
  111. data/app/views/decidim/meetings/admin/registration_form/edit_questions.html.erb +5 -5
  112. data/app/views/decidim/meetings/admin/registrations/edit.html.erb +19 -39
  113. data/app/views/decidim/meetings/admin/registrations_attendees/index.html.erb +126 -0
  114. data/app/views/decidim/meetings/layouts/live_event.html.erb +1 -1
  115. data/app/views/decidim/meetings/meeting_closes/_form.html.erb +2 -2
  116. data/app/views/decidim/meetings/meetings/_form.html.erb +2 -11
  117. data/app/views/decidim/meetings/meetings/_meeting.html.erb +2 -2
  118. data/app/views/decidim/meetings/meetings/_meeting_actions.html.erb +3 -3
  119. data/app/views/decidim/meetings/meetings/_meeting_agenda.html.erb +2 -2
  120. data/app/views/decidim/meetings/meetings/_meeting_aside.html.erb +11 -10
  121. data/app/views/decidim/meetings/meetings/_meeting_poll_actions.html.erb +3 -3
  122. data/app/views/decidim/meetings/meetings/_registration_code_modal.html.erb +16 -0
  123. data/app/views/decidim/meetings/polls/questions/_index_admin.html.erb +1 -1
  124. data/app/views/decidim/meetings/polls/questions/_published_question.html.erb +5 -5
  125. data/app/views/decidim/meetings/polls/responses/_multiple_option.html.erb +13 -0
  126. data/app/views/decidim/meetings/polls/responses/_single_option.html.erb +13 -0
  127. data/app/views/decidim/meetings/polls/{answers → responses}/admin.html.erb +4 -4
  128. data/app/views/decidim/meetings/polls/{answers → responses}/index.html.erb +4 -4
  129. data/app/views/decidim/meetings/registration_mailer/confirmation.html.erb +6 -1
  130. data/config/assets.rb +2 -2
  131. data/config/locales/ar.yml +1 -26
  132. data/config/locales/bg.yml +2 -32
  133. data/config/locales/ca-IT.yml +87 -44
  134. data/config/locales/ca.yml +87 -44
  135. data/config/locales/cs.yml +71 -46
  136. data/config/locales/de.yml +89 -43
  137. data/config/locales/el.yml +1 -25
  138. data/config/locales/en.yml +89 -46
  139. data/config/locales/es-MX.yml +87 -44
  140. data/config/locales/es-PY.yml +87 -44
  141. data/config/locales/es.yml +87 -44
  142. data/config/locales/eu.yml +93 -50
  143. data/config/locales/fi-plain.yml +86 -43
  144. data/config/locales/fi.yml +85 -42
  145. data/config/locales/fr-CA.yml +79 -41
  146. data/config/locales/fr.yml +79 -41
  147. data/config/locales/ga-IE.yml +1 -8
  148. data/config/locales/gl.yml +1 -19
  149. data/config/locales/hu.yml +1 -23
  150. data/config/locales/id-ID.yml +0 -16
  151. data/config/locales/is-IS.yml +0 -10
  152. data/config/locales/it.yml +1 -30
  153. data/config/locales/ja.yml +88 -45
  154. data/config/locales/lb.yml +1 -16
  155. data/config/locales/lt.yml +1 -28
  156. data/config/locales/lv.yml +0 -16
  157. data/config/locales/nl.yml +1 -26
  158. data/config/locales/no.yml +1 -29
  159. data/config/locales/pl.yml +2 -32
  160. data/config/locales/pt-BR.yml +1 -28
  161. data/config/locales/pt.yml +1 -29
  162. data/config/locales/ro-RO.yml +56 -30
  163. data/config/locales/ru.yml +0 -16
  164. data/config/locales/sk.yml +0 -16
  165. data/config/locales/sl.yml +0 -4
  166. data/config/locales/sv.yml +85 -42
  167. data/config/locales/tr-TR.yml +0 -20
  168. data/config/locales/uk.yml +0 -12
  169. data/config/locales/zh-CN.yml +0 -19
  170. data/config/locales/zh-TW.yml +1 -26
  171. data/db/migrate/20181107175558_add_questionnaire_to_existing_meetings.rb +8 -2
  172. data/db/migrate/20200827153856_add_commentable_counter_cache_to_meetings.rb +8 -2
  173. data/db/migrate/20201016065302_fix_meetings_registration_terms.rb +8 -2
  174. data/db/migrate/20210310120731_add_followable_counter_cache_to_meetings.rb +8 -2
  175. data/db/migrate/20250317103343_rename_answer_to_response_in_decidim_meetings.rb +18 -0
  176. data/db/migrate/20250403094034_add_reminder_customization_to_decidim_meetings.rb +9 -0
  177. data/db/migrate/20250408071941_add_status_to_registrations_to_decidim_meetings_registrations.rb +8 -0
  178. data/lib/decidim/api/agenda_item_type.rb +6 -2
  179. data/lib/decidim/api/agenda_type.rb +6 -2
  180. data/lib/decidim/api/linked_resources_interface.rb +1 -1
  181. data/lib/decidim/api/meeting_type.rb +20 -10
  182. data/lib/decidim/api/service_type.rb +3 -0
  183. data/lib/decidim/meetings/admin_engine.rb +9 -1
  184. data/lib/decidim/meetings/component.rb +29 -8
  185. data/lib/decidim/meetings/engine.rb +6 -21
  186. data/lib/decidim/meetings/meeting_serializer.rb +1 -2
  187. data/lib/decidim/meetings/schema_org_event_meeting_serializer.rb +0 -10
  188. data/lib/decidim/meetings/seeds.rb +4 -13
  189. data/lib/decidim/meetings/test/factories.rb +10 -16
  190. data/lib/decidim/meetings/user_responses_serializer.rb +47 -0
  191. data/lib/decidim/meetings/version.rb +1 -1
  192. data/lib/decidim/meetings.rb +7 -9
  193. metadata +50 -35
  194. data/app/cells/decidim/meetings/attending_organizations_list_cell.rb +0 -32
  195. data/app/forms/decidim/meetings/answer_choice_form.rb +0 -14
  196. data/app/models/decidim/meetings/answer_choice.rb +0 -15
  197. data/app/queries/decidim/meetings/metrics/meeting_followers_metric_measure.rb +0 -31
  198. data/app/queries/decidim/meetings/metrics/meetings_metric_manage.rb +0 -48
  199. data/app/views/decidim/meetings/admin/poll/_answer_option.html.erb +0 -35
  200. data/app/views/decidim/meetings/admin/poll/_answer_option_template.html.erb +0 -7
  201. data/app/views/decidim/meetings/polls/answers/_multiple_option.html.erb +0 -13
  202. data/app/views/decidim/meetings/polls/answers/_single_option.html.erb +0 -13
  203. data/lib/decidim/meetings/download_your_data_user_answers_serializer.rb +0 -39
  204. data/lib/decidim/meetings/user_answers_serializer.rb +0 -47
  205. /data/app/views/decidim/meetings/polls/{answers → responses}/create.js.erb +0 -0
@@ -37,6 +37,9 @@ FactoryBot.define do
37
37
  longitude { Faker::Address.longitude }
38
38
  start_time { 1.day.from_now }
39
39
  end_time { start_time.advance(hours: 2) }
40
+ reminder_enabled { true }
41
+ send_reminders_before_hours { 48 }
42
+ reminder_message_custom_content { generate_localized_description(:meeting_reminder_message, skip_injection:) }
40
43
  private_meeting { false }
41
44
  transparent { true }
42
45
  questionnaire { build(:questionnaire) }
@@ -105,15 +108,6 @@ FactoryBot.define do
105
108
 
106
109
  trait(:participant_author) { not_official }
107
110
 
108
- trait :user_group_author do
109
- author do
110
- create(:user, organization: component.organization, skip_injection:) if component
111
- end
112
- user_group do
113
- create(:user_group, :verified, organization: component.organization, users: [author], skip_injection:) if component
114
- end
115
- end
116
-
117
111
  trait :closed do
118
112
  closing_report { generate_localized_title(:meeting_closing_report, skip_injection:) }
119
113
  attendees_count { rand(50) }
@@ -291,8 +285,8 @@ FactoryBot.define do
291
285
  status { 0 }
292
286
  question_type { Decidim::Meetings::Question::QUESTION_TYPES.first }
293
287
  questionnaire factory: :meetings_poll_questionnaire
294
- answer_options do
295
- Array.new(3).collect { build(:meetings_poll_answer_option, question: nil, skip_injection:) }
288
+ response_options do
289
+ Array.new(3).collect { build(:meetings_poll_response_option, question: nil, skip_injection:) }
296
290
  end
297
291
 
298
292
  trait :unpublished do
@@ -308,7 +302,7 @@ FactoryBot.define do
308
302
  end
309
303
  end
310
304
 
311
- factory :meetings_poll_answer, class: "Decidim::Meetings::Answer" do
305
+ factory :meetings_poll_response, class: "Decidim::Meetings::Response" do
312
306
  transient do
313
307
  skip_injection { false }
314
308
  end
@@ -317,7 +311,7 @@ FactoryBot.define do
317
311
  user { create(:user, organization: questionnaire.questionnaire_for.organization, skip_injection:) }
318
312
  end
319
313
 
320
- factory :meetings_poll_answer_option, class: "Decidim::Meetings::AnswerOption" do
314
+ factory :meetings_poll_response_option, class: "Decidim::Meetings::ResponseOption" do
321
315
  transient do
322
316
  skip_injection { false }
323
317
  end
@@ -325,11 +319,11 @@ FactoryBot.define do
325
319
  body { generate_localized_title }
326
320
  end
327
321
 
328
- factory :meetings_poll_answer_choice, class: "Decidim::Meetings::AnswerChoice" do
322
+ factory :meetings_poll_response_choice, class: "Decidim::Meetings::ResponseChoice" do
329
323
  transient do
330
324
  skip_injection { false }
331
325
  end
332
- answer factory: :meetings_poll_answer
333
- answer_option { create(:meetings_poll_answer_option, question: answer.question, skip_injection:) }
326
+ response factory: :meetings_poll_response
327
+ response_option { create(:meetings_poll_response_option, question: response.question, skip_injection:) }
334
328
  end
335
329
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Meetings
5
+ # This class serializes the responses given by a User for questionnaire so can be
6
+ # exported to CSV, JSON or other formats.
7
+ class UserResponsesSerializer < Decidim::Exporters::Serializer
8
+ include Decidim::TranslationsHelper
9
+
10
+ # Public: Initializes the serializer with a collection of Responses.
11
+ def initialize(responses)
12
+ @responses = responses
13
+ end
14
+
15
+ # Public: Exports a hash with the serialized data for the user responses.
16
+ def serialize
17
+ @responses.each_with_index.inject({}) do |serialized, (response, idx)|
18
+ serialized.update(
19
+ response_translated_attribute_name(:id) => [response.id, response.user.id].join("_"),
20
+ response_translated_attribute_name(:created_at) => response.created_at,
21
+ response_translated_attribute_name(:user_status) => response_translated_attribute_name(response.decidim_user_id.present? ? "registered" : "unregistered"),
22
+ "#{idx + 1}. #{translated_attribute(response.question.body)}" => normalize_body(response)
23
+ )
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :responses
30
+ alias resource responses
31
+
32
+ def normalize_body(response)
33
+ normalize_choices(response.choices)
34
+ end
35
+
36
+ def normalize_choices(choices)
37
+ choices.map do |choice|
38
+ choice.try(:body)
39
+ end
40
+ end
41
+
42
+ def response_translated_attribute_name(attribute)
43
+ I18n.t(attribute.to_sym, scope: "decidim.forms.user_responses_serializer")
44
+ end
45
+ end
46
+ end
47
+ end
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-meetings version.
5
5
  module Meetings
6
6
  def self.version
7
- "0.30.4"
7
+ "0.31.0.rc1"
8
8
  end
9
9
  end
10
10
  end
@@ -14,24 +14,22 @@ module Decidim
14
14
  module Meetings
15
15
  autoload :Registrations, "decidim/meetings/registrations"
16
16
  autoload :MeetingSerializer, "decidim/meetings/meeting_serializer"
17
- autoload :UserAnswersSerializer, "decidim/meetings/user_answers_serializer"
18
- autoload :DownloadYourDataUserAnswersSerializer, "decidim/meetings/download_your_data_user_answers_serializer"
17
+ autoload :UserResponsesSerializer, "decidim/meetings/user_responses_serializer"
19
18
  autoload :SchemaOrgEventMeetingSerializer, "decidim/meetings/schema_org_event_meeting_serializer"
20
19
 
21
20
  include ActiveSupport::Configurable
22
21
 
23
- # Public Setting that defines whether proposals can be linked to meetings
24
- config_accessor :enable_proposal_linking do
25
- Decidim.const_defined?("Proposals")
26
- end
27
-
28
22
  # Public Setting that defines the interval when the upcoming meeting will be sent
29
23
  config_accessor :upcoming_meeting_notification do
30
- 2.days
24
+ Decidim::Env.new("MEETINGS_UPCOMING_MEETING_NOTIFICATION", 2).to_i.days
31
25
  end
32
26
 
33
27
  config_accessor :embeddable_services do
34
- %w(www.youtube.com www.twitch.tv meet.jit.si)
28
+ Decidim::Env.new("MEETINGS_EMBEDDABLE_SERVICES", "www.youtube.com www.twitch.tv meet.jit.si").to_array(separator: " ")
29
+ end
30
+
31
+ config_accessor :waiting_list_enabled do
32
+ Decidim::Env.new("MEETINGS_WAITING_LIST_ENABLED", true).present?
35
33
  end
36
34
  end
37
35
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-meetings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.4
4
+ version: 0.31.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2025-11-20 00:00:00.000000000 Z
13
+ date: 2025-09-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: decidim-core
@@ -18,28 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.30.4
21
+ version: 0.31.0.rc1
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 0.30.4
28
+ version: 0.31.0.rc1
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: decidim-forms
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.30.4
35
+ version: 0.31.0.rc1
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - '='
41
41
  - !ruby/object:Gem::Version
42
- version: 0.30.4
42
+ version: 0.31.0.rc1
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: icalendar
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -60,56 +60,56 @@ dependencies:
60
60
  requirements:
61
61
  - - '='
62
62
  - !ruby/object:Gem::Version
63
- version: 0.30.4
63
+ version: 0.31.0.rc1
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - '='
69
69
  - !ruby/object:Gem::Version
70
- version: 0.30.4
70
+ version: 0.31.0.rc1
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: decidim-assemblies
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - '='
76
76
  - !ruby/object:Gem::Version
77
- version: 0.30.4
77
+ version: 0.31.0.rc1
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: 0.30.4
84
+ version: 0.31.0.rc1
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: decidim-dev
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - '='
90
90
  - !ruby/object:Gem::Version
91
- version: 0.30.4
91
+ version: 0.31.0.rc1
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
96
  - - '='
97
97
  - !ruby/object:Gem::Version
98
- version: 0.30.4
98
+ version: 0.31.0.rc1
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: decidim-participatory_processes
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - '='
104
104
  - !ruby/object:Gem::Version
105
- version: 0.30.4
105
+ version: 0.31.0.rc1
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - '='
111
111
  - !ruby/object:Gem::Version
112
- version: 0.30.4
112
+ version: 0.31.0.rc1
113
113
  description: A meetings component for decidim's participatory spaces.
114
114
  email:
115
115
  - josepjaume@gmail.com
@@ -121,7 +121,6 @@ extra_rdoc_files: []
121
121
  files:
122
122
  - README.md
123
123
  - Rakefile
124
- - app/cells/decidim/meetings/attending_organizations_list_cell.rb
125
124
  - app/cells/decidim/meetings/cancel_registration_meeting_button/cancelation_modal.erb
126
125
  - app/cells/decidim/meetings/cancel_registration_meeting_button/show.erb
127
126
  - app/cells/decidim/meetings/cancel_registration_meeting_button_cell.rb
@@ -136,6 +135,7 @@ files:
136
135
  - app/cells/decidim/meetings/join_meeting_button/registration_modal.erb
137
136
  - app/cells/decidim/meetings/join_meeting_button/remaining_slots.erb
138
137
  - app/cells/decidim/meetings/join_meeting_button/show.erb
138
+ - app/cells/decidim/meetings/join_meeting_button/waitlist_button.erb
139
139
  - app/cells/decidim/meetings/join_meeting_button_cell.rb
140
140
  - app/cells/decidim/meetings/meeting_activity_cell.rb
141
141
  - app/cells/decidim/meetings/meeting_card_metadata_cell.rb
@@ -144,6 +144,7 @@ files:
144
144
  - app/cells/decidim/meetings/meeting_l_cell.rb
145
145
  - app/cells/decidim/meetings/meeting_month/show.erb
146
146
  - app/cells/decidim/meetings/meeting_month_cell.rb
147
+ - app/cells/decidim/meetings/meeting_s_cell.rb
147
148
  - app/cells/decidim/meetings/meeting_url/show.erb
148
149
  - app/cells/decidim/meetings/meeting_url_cell.rb
149
150
  - app/cells/decidim/meetings/online_meeting_cell.rb
@@ -161,6 +162,7 @@ files:
161
162
  - app/commands/decidim/meetings/admin/create_meeting.rb
162
163
  - app/commands/decidim/meetings/admin/export_meeting_registrations.rb
163
164
  - app/commands/decidim/meetings/admin/invite_user_to_join_meeting.rb
165
+ - app/commands/decidim/meetings/admin/mark_as_attendee.rb
164
166
  - app/commands/decidim/meetings/admin/publish_meeting.rb
165
167
  - app/commands/decidim/meetings/admin/unpublish_meeting.rb
166
168
  - app/commands/decidim/meetings/admin/update_agenda.rb
@@ -170,10 +172,11 @@ files:
170
172
  - app/commands/decidim/meetings/admin/update_registrations.rb
171
173
  - app/commands/decidim/meetings/admin/validate_registration_code.rb
172
174
  - app/commands/decidim/meetings/close_meeting.rb
173
- - app/commands/decidim/meetings/create_answer.rb
174
175
  - app/commands/decidim/meetings/create_meeting.rb
176
+ - app/commands/decidim/meetings/create_response.rb
175
177
  - app/commands/decidim/meetings/decline_invitation.rb
176
178
  - app/commands/decidim/meetings/join_meeting.rb
179
+ - app/commands/decidim/meetings/join_waitlist.rb
177
180
  - app/commands/decidim/meetings/leave_meeting.rb
178
181
  - app/commands/decidim/meetings/update_meeting.rb
179
182
  - app/commands/decidim/meetings/withdraw_meeting.rb
@@ -191,6 +194,7 @@ files:
191
194
  - app/controllers/decidim/meetings/admin/meetings_controller.rb
192
195
  - app/controllers/decidim/meetings/admin/meetings_poll_controller.rb
193
196
  - app/controllers/decidim/meetings/admin/registration_form_controller.rb
197
+ - app/controllers/decidim/meetings/admin/registrations_attendees_controller.rb
194
198
  - app/controllers/decidim/meetings/admin/registrations_controller.rb
195
199
  - app/controllers/decidim/meetings/application_controller.rb
196
200
  - app/controllers/decidim/meetings/calendars_controller.rb
@@ -199,8 +203,8 @@ files:
199
203
  - app/controllers/decidim/meetings/live_events_controller.rb
200
204
  - app/controllers/decidim/meetings/meeting_closes_controller.rb
201
205
  - app/controllers/decidim/meetings/meetings_controller.rb
202
- - app/controllers/decidim/meetings/polls/answers_controller.rb
203
206
  - app/controllers/decidim/meetings/polls/questions_controller.rb
207
+ - app/controllers/decidim/meetings/polls/responses_controller.rb
204
208
  - app/controllers/decidim/meetings/registrations_controller.rb
205
209
  - app/controllers/decidim/meetings/versions_controller.rb
206
210
  - app/events/decidim/meetings/close_meeting_event.rb
@@ -210,9 +214,9 @@ files:
210
214
  - app/events/decidim/meetings/meeting_registrations_enabled_event.rb
211
215
  - app/events/decidim/meetings/meeting_registrations_over_percentage_event.rb
212
216
  - app/events/decidim/meetings/registration_code_validated_event.rb
217
+ - app/events/decidim/meetings/registration_marked_as_attendee_event.rb
213
218
  - app/events/decidim/meetings/upcoming_meeting_event.rb
214
219
  - app/events/decidim/meetings/update_meeting_event.rb
215
- - app/forms/decidim/meetings/admin/answer_option_form.rb
216
220
  - app/forms/decidim/meetings/admin/close_meeting_form.rb
217
221
  - app/forms/decidim/meetings/admin/meeting_agenda_form.rb
218
222
  - app/forms/decidim/meetings/admin/meeting_agenda_items_form.rb
@@ -222,13 +226,14 @@ files:
222
226
  - app/forms/decidim/meetings/admin/meeting_service_form.rb
223
227
  - app/forms/decidim/meetings/admin/question_form.rb
224
228
  - app/forms/decidim/meetings/admin/questionnaire_form.rb
229
+ - app/forms/decidim/meetings/admin/response_option_form.rb
225
230
  - app/forms/decidim/meetings/admin/validate_registration_code_form.rb
226
- - app/forms/decidim/meetings/answer_choice_form.rb
227
- - app/forms/decidim/meetings/answer_form.rb
228
231
  - app/forms/decidim/meetings/base_meeting_form.rb
229
232
  - app/forms/decidim/meetings/close_meeting_form.rb
230
233
  - app/forms/decidim/meetings/join_meeting_form.rb
231
234
  - app/forms/decidim/meetings/meeting_form.rb
235
+ - app/forms/decidim/meetings/response_choice_form.rb
236
+ - app/forms/decidim/meetings/response_form.rb
232
237
  - app/helpers/decidim/meetings/admin/application_helper.rb
233
238
  - app/helpers/decidim/meetings/admin/filterable_helper.rb
234
239
  - app/helpers/decidim/meetings/application_helper.rb
@@ -236,6 +241,7 @@ files:
236
241
  - app/helpers/decidim/meetings/meeting_cells_helper.rb
237
242
  - app/helpers/decidim/meetings/meetings_helper.rb
238
243
  - app/jobs/decidim/meetings/hide_all_created_by_author_job.rb
244
+ - app/jobs/decidim/meetings/promote_from_waitlist_job.rb
239
245
  - app/jobs/decidim/meetings/send_close_meeting_reminder_job.rb
240
246
  - app/jobs/decidim/meetings/upcoming_meeting_notification_job.rb
241
247
  - app/mailers/decidim/meetings/admin/invite_join_meeting_mailer.rb
@@ -243,9 +249,6 @@ files:
243
249
  - app/mailers/decidim/meetings/registration_mailer.rb
244
250
  - app/models/decidim/meetings/agenda.rb
245
251
  - app/models/decidim/meetings/agenda_item.rb
246
- - app/models/decidim/meetings/answer.rb
247
- - app/models/decidim/meetings/answer_choice.rb
248
- - app/models/decidim/meetings/answer_option.rb
249
252
  - app/models/decidim/meetings/application_record.rb
250
253
  - app/models/decidim/meetings/invite.rb
251
254
  - app/models/decidim/meetings/meeting.rb
@@ -254,6 +257,9 @@ files:
254
257
  - app/models/decidim/meetings/question.rb
255
258
  - app/models/decidim/meetings/questionnaire.rb
256
259
  - app/models/decidim/meetings/registration.rb
260
+ - app/models/decidim/meetings/response.rb
261
+ - app/models/decidim/meetings/response_choice.rb
262
+ - app/models/decidim/meetings/response_option.rb
257
263
  - app/models/decidim/meetings/service.rb
258
264
  - app/packs/entrypoints/decidim_meetings.js
259
265
  - app/packs/entrypoints/decidim_meetings_admin.js
@@ -273,20 +279,24 @@ files:
273
279
  - app/packs/stylesheets/decidim/meetings/_list.scss
274
280
  - app/packs/stylesheets/decidim/meetings/_live_event.scss
275
281
  - app/packs/stylesheets/decidim/meetings/meetings.scss
282
+ - app/permissions/decidim/meetings/admin/agenda_permissions.rb
283
+ - app/permissions/decidim/meetings/admin/meeting_permissions.rb
276
284
  - app/permissions/decidim/meetings/admin/permissions.rb
285
+ - app/permissions/decidim/meetings/admin/questionnaire_permissions.rb
286
+ - app/permissions/decidim/meetings/meeting_permissions.rb
277
287
  - app/permissions/decidim/meetings/permissions.rb
278
288
  - app/presenters/decidim/meetings/admin_log/invite_presenter.rb
279
289
  - app/presenters/decidim/meetings/admin_log/meeting_presenter.rb
280
290
  - app/presenters/decidim/meetings/admin_log/questionnaire_presenter.rb
281
291
  - app/presenters/decidim/meetings/admin_log/value_types/meeting_title_description_presenter.rb
292
+ - app/presenters/decidim/meetings/agenda_item_presenter.rb
282
293
  - app/presenters/decidim/meetings/invite_presenter.rb
283
294
  - app/presenters/decidim/meetings/meeting_edition_presenter.rb
284
295
  - app/presenters/decidim/meetings/meeting_presenter.rb
285
296
  - app/presenters/decidim/meetings/official_author_presenter.rb
297
+ - app/presenters/decidim/meetings/registration_presenter.rb
286
298
  - app/queries/decidim/meetings/filtered_meetings.rb
287
- - app/queries/decidim/meetings/metrics/meeting_followers_metric_measure.rb
288
- - app/queries/decidim/meetings/metrics/meetings_metric_manage.rb
289
- - app/queries/decidim/meetings/questionnaire_user_answers.rb
299
+ - app/queries/decidim/meetings/questionnaire_user_responses.rb
290
300
  - app/serializers/decidim/meetings/base_download_your_data_serializer.rb
291
301
  - app/serializers/decidim/meetings/download_your_data_invite_serializer.rb
292
302
  - app/serializers/decidim/meetings/download_your_data_meeting_serializer.rb
@@ -322,20 +332,22 @@ files:
322
332
  - app/views/decidim/meetings/admin/meetings/_meeting-tr.html.erb
323
333
  - app/views/decidim/meetings/admin/meetings/_meeting_actions.html.erb
324
334
  - app/views/decidim/meetings/admin/meetings/_meetings-thead.html.erb
335
+ - app/views/decidim/meetings/admin/meetings/_reminders.html.erb
325
336
  - app/views/decidim/meetings/admin/meetings/_service.html.erb
326
337
  - app/views/decidim/meetings/admin/meetings/_services.html.erb
327
338
  - app/views/decidim/meetings/admin/meetings/edit.html.erb
328
339
  - app/views/decidim/meetings/admin/meetings/index.html.erb
329
340
  - app/views/decidim/meetings/admin/meetings/manage_trash.html.erb
330
341
  - app/views/decidim/meetings/admin/meetings/new.html.erb
331
- - app/views/decidim/meetings/admin/poll/_answer_option.html.erb
332
- - app/views/decidim/meetings/admin/poll/_answer_option_template.html.erb
333
342
  - app/views/decidim/meetings/admin/poll/_form.html.erb
334
343
  - app/views/decidim/meetings/admin/poll/_question.html.erb
344
+ - app/views/decidim/meetings/admin/poll/_response_option.html.erb
345
+ - app/views/decidim/meetings/admin/poll/_response_option_template.html.erb
335
346
  - app/views/decidim/meetings/admin/poll/edit.html.erb
336
347
  - app/views/decidim/meetings/admin/registration_form/edit_questions.html.erb
337
348
  - app/views/decidim/meetings/admin/registrations/_form.html.erb
338
349
  - app/views/decidim/meetings/admin/registrations/edit.html.erb
350
+ - app/views/decidim/meetings/admin/registrations_attendees/index.html.erb
339
351
  - app/views/decidim/meetings/close_meeting_reminder_mailer/close_meeting_reminder.html.erb
340
352
  - app/views/decidim/meetings/directory/meetings/index.html.erb
341
353
  - app/views/decidim/meetings/directory/meetings/index.js.erb
@@ -355,17 +367,13 @@ files:
355
367
  - app/views/decidim/meetings/meetings/_meeting_aside.html.erb
356
368
  - app/views/decidim/meetings/meetings/_meeting_minutes.html.erb
357
369
  - app/views/decidim/meetings/meetings/_meeting_poll_actions.html.erb
370
+ - app/views/decidim/meetings/meetings/_registration_code_modal.html.erb
358
371
  - app/views/decidim/meetings/meetings/_schema_org_event_meeting.html.erb
359
372
  - app/views/decidim/meetings/meetings/edit.html.erb
360
373
  - app/views/decidim/meetings/meetings/index.html.erb
361
374
  - app/views/decidim/meetings/meetings/index.js.erb
362
375
  - app/views/decidim/meetings/meetings/new.html.erb
363
376
  - app/views/decidim/meetings/meetings/show.html.erb
364
- - app/views/decidim/meetings/polls/answers/_multiple_option.html.erb
365
- - app/views/decidim/meetings/polls/answers/_single_option.html.erb
366
- - app/views/decidim/meetings/polls/answers/admin.html.erb
367
- - app/views/decidim/meetings/polls/answers/create.js.erb
368
- - app/views/decidim/meetings/polls/answers/index.html.erb
369
377
  - app/views/decidim/meetings/polls/questions/_closed_question.html.erb
370
378
  - app/views/decidim/meetings/polls/questions/_index.html.erb
371
379
  - app/views/decidim/meetings/polls/questions/_index_admin.html.erb
@@ -373,6 +381,11 @@ files:
373
381
  - app/views/decidim/meetings/polls/questions/_question.html.erb
374
382
  - app/views/decidim/meetings/polls/questions/index.js.erb
375
383
  - app/views/decidim/meetings/polls/questions/index_admin.js.erb
384
+ - app/views/decidim/meetings/polls/responses/_multiple_option.html.erb
385
+ - app/views/decidim/meetings/polls/responses/_single_option.html.erb
386
+ - app/views/decidim/meetings/polls/responses/admin.html.erb
387
+ - app/views/decidim/meetings/polls/responses/create.js.erb
388
+ - app/views/decidim/meetings/polls/responses/index.html.erb
376
389
  - app/views/decidim/meetings/registration_mailer/confirmation.html.erb
377
390
  - app/views/decidim/meetings/shared/_filters.html.erb
378
391
  - app/views/decidim/meetings/shared/_index.html.erb
@@ -527,6 +540,9 @@ files:
527
540
  - db/migrate/20240130135858_add_withdrawn_fields_on_meetings.rb
528
541
  - db/migrate/20240712104245_create_decidim_meetings_meeting_link.rb
529
542
  - db/migrate/20240828103603_add_deleted_at_to_decidim_meetings_meetings.rb
543
+ - db/migrate/20250317103343_rename_answer_to_response_in_decidim_meetings.rb
544
+ - db/migrate/20250403094034_add_reminder_customization_to_decidim_meetings.rb
545
+ - db/migrate/20250408071941_add_status_to_registrations_to_decidim_meetings_registrations.rb
530
546
  - decidim-meetings.gemspec
531
547
  - lib/decidim/api/agenda_item_type.rb
532
548
  - lib/decidim/api/agenda_type.rb
@@ -545,7 +561,6 @@ files:
545
561
  - lib/decidim/meetings/content_blocks/registry_manager.rb
546
562
  - lib/decidim/meetings/directory.rb
547
563
  - lib/decidim/meetings/directory_engine.rb
548
- - lib/decidim/meetings/download_your_data_user_answers_serializer.rb
549
564
  - lib/decidim/meetings/engine.rb
550
565
  - lib/decidim/meetings/meeting_serializer.rb
551
566
  - lib/decidim/meetings/polls.rb
@@ -557,7 +572,7 @@ files:
557
572
  - lib/decidim/meetings/test/factories.rb
558
573
  - lib/decidim/meetings/test/notifications_handling.rb
559
574
  - lib/decidim/meetings/test/translated_event.rb
560
- - lib/decidim/meetings/user_answers_serializer.rb
575
+ - lib/decidim/meetings/user_responses_serializer.rb
561
576
  - lib/decidim/meetings/version.rb
562
577
  - lib/tasks/decidim_meetings.rake
563
578
  homepage: https://decidim.org
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "cell/partial"
4
-
5
- module Decidim
6
- module Meetings
7
- # This cell renders the list of public participating
8
- # organizations of a meeting.
9
- #
10
- # Example:
11
- #
12
- # cell("decidim/participating_organizations_list", meeting)
13
- class AttendingOrganizationsListCell < PublicParticipantsListCell
14
- private
15
-
16
- def user_group_ids
17
- model.user_group_registrations.user_group_ids
18
- end
19
-
20
- def user_groups
21
- Decidim::UserGroup.where(id: user_group_ids)
22
- end
23
-
24
- # Finds the public organizations (as user groups) of meeting
25
- #
26
- # Returns an Array of presented UserGroups
27
- def public_participants
28
- @public_participants ||= user_groups.map { |user_group| present(user_group) }
29
- end
30
- end
31
- end
32
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- # This class holds a Form to save the chosen option for an answer
6
- class AnswerChoiceForm < Decidim::Form
7
- attribute :body, String
8
- attribute :position, Integer
9
- attribute :answer_option_id, Integer
10
-
11
- validates :answer_option_id, presence: true
12
- end
13
- end
14
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- class AnswerChoice < Meetings::ApplicationRecord
6
- belongs_to :answer,
7
- class_name: "Decidim::Meetings::Answer",
8
- foreign_key: "decidim_answer_id"
9
-
10
- belongs_to :answer_option,
11
- class_name: "Decidim::Meetings::AnswerOption",
12
- foreign_key: "decidim_answer_option_id"
13
- end
14
- end
15
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- module Metrics
6
- # Searches for unique Users following the next objects
7
- # - Meetings
8
- class MeetingFollowersMetricMeasure < Decidim::MetricMeasure
9
- def valid?
10
- super && @resource.is_a?(Decidim::Component)
11
- end
12
-
13
- def calculate
14
- meetings = Decidim::Meetings::Meeting.where(component: @resource).joins(:component)
15
-
16
- meetings_followers = Decidim::Follow.where(followable: meetings).joins(:user)
17
- .where(decidim_follows: { created_at: ..end_time })
18
- cumulative_users = meetings_followers.pluck(:decidim_user_id)
19
-
20
- meetings_followers = meetings_followers.where(decidim_follows: { created_at: start_time.. })
21
- quantity_users = meetings_followers.pluck(:decidim_user_id)
22
-
23
- {
24
- cumulative_users: cumulative_users.uniq,
25
- quantity_users: quantity_users.uniq
26
- }
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Decidim
4
- module Meetings
5
- module Metrics
6
- class MeetingsMetricManage < Decidim::MetricManage
7
- def metric_name
8
- "meetings"
9
- end
10
-
11
- def save
12
- cumulative.each do |key, cumulative_value|
13
- next if cumulative_value.zero?
14
-
15
- quantity_value = quantity[key] || 0
16
- taxonomy_id, space_type, space_id = key
17
- record = Decidim::Metric.find_or_initialize_by(day: @day.to_s, metric_type: @metric_name,
18
- organization: @organization, decidim_taxonomy_id: taxonomy_id,
19
- participatory_space_type: space_type, participatory_space_id: space_id)
20
- record.assign_attributes(cumulative: cumulative_value, quantity: quantity_value)
21
- record.save!
22
- end
23
- end
24
-
25
- private
26
-
27
- def query
28
- return @query if @query
29
-
30
- spaces = Decidim.participatory_space_manifests.flat_map do |manifest|
31
- manifest.participatory_spaces.call(@organization).public_spaces
32
- end
33
- @query = Decidim::Meetings::Meeting.where(component: visible_components_from_spaces(spaces)).joins(:component)
34
- .left_outer_joins(:taxonomizations).visible
35
- @query = @query.where(decidim_meetings_meetings: { created_at: ..end_time })
36
- @query = @query.group("decidim_taxonomizations.taxonomy_id",
37
- :participatory_space_type,
38
- :participatory_space_id)
39
- @query
40
- end
41
-
42
- def quantity
43
- @quantity ||= query.where(decidim_meetings_meetings: { created_at: start_time.. }).count
44
- end
45
- end
46
- end
47
- end
48
- end