app/commands/decidim/meetings/join_meeting.rb in decidim-meetings-0.17.2 vs app/commands/decidim/meetings/join_meeting.rb in decidim-meetings-0.18.0

- old
+ new

@@ -6,30 +6,28 @@ class JoinMeeting < Rectify::Command # Initializes a JoinMeeting Command. # # meeting - The current instance of the meeting to be joined. # user - The user joining the meeting. - # registration_form - The questionnaire filled by the attendee - def initialize(meeting, user, registration_form = nil) + # registration_form - A form object with params; can be a questionnaire. + def initialize(meeting, user, registration_form) @meeting = meeting @user = user + @user_group = Decidim::UserGroup.find_by(id: registration_form.user_group_id) @registration_form = registration_form end # Creates a meeting registration if the meeting has registrations enabled # and there are available slots. # # Broadcasts :ok if successful, :invalid otherwise. def call meeting.with_lock do return broadcast(:invalid) unless can_join_meeting? + return broadcast(:invalid_form) unless registration_form.valid? - if registration_form - return broadcast(:invalid_form) unless registration_form.valid? - save_registration_form - end - + answer_questionnaire create_registration accept_invitation send_email_confirmation send_notification_confirmation notify_admin_over_percentage @@ -38,35 +36,37 @@ broadcast(:ok) end private - attr_reader :meeting, :user, :registration, :registration_form + attr_reader :meeting, :user, :user_group, :registration, :registration_form def accept_invitation meeting.invites.find_by(user: user)&.accept! end - def save_registration_form + def answer_questionnaire + return unless questionnaire? + Decidim::Forms::AnswerQuestionnaire.call(registration_form, user, meeting.questionnaire) end def create_registration - @registration = Decidim::Meetings::Registration.create!(meeting: meeting, user: user) + @registration = Decidim::Meetings::Registration.create!( + meeting: meeting, + user: user, + user_group: user_group + ) end def can_join_meeting? meeting.registrations_enabled? && meeting.has_available_slots? && !meeting.has_registration_for?(user) end def send_email_confirmation - Decidim::Meetings::RegistrationMailer.confirmation( - @user, - @meeting, - @registration - ).deliver_now + Decidim::Meetings::RegistrationMailer.confirmation(user, meeting, registration).deliver_later end def send_notification_confirmation Decidim::EventsManager.publish( event: "decidim.events.meetings.meeting_registration_confirmed", @@ -105,9 +105,13 @@ Decidim::Gamification.increment_score(user, :attended_meetings) end def occupied_slots_over?(percentage) @meeting.remaining_slots == (@meeting.available_slots * (1 - percentage)).round + end + + def questionnaire? + registration_form.model_name == "Questionnaire" end end end end