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