Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 6 additions & 60 deletions app/controllers/admin/invitations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ class Admin::InvitationsController < Admin::ApplicationController
include Admin::WorkshopConcerns

def update
set_and_decorate_workshop
@attendance_manager = Managers::AttendanceManager.new(params[:workshop_id], invitation_id, current_user)
@workshop = WorkshopPresenter.decorate(@attendance_manager.workshop)
authorize @workshop
set_invitation

message = update_attendance(attending: params[:attending], attended: params[:attended])
@invitation = @attendance_manager.invitation
message = @attendance_manager.update(attending: is_attending?, attended: params[:attended])

if request.xhr?
set_admin_workshop_data
Expand All @@ -18,62 +18,8 @@ def update

private

def update_attendance(attending:, attended:)
return update_to_attended if attended

result = attending.eql?('true') ? update_to_attending : update_to_not_attending
message, error = result.values_at(:message, :error)

unless error
waiting_listed = WaitingList.find_by(invitation: @invitation)
waiting_listed&.destroy
end

message
end

def update_to_attended
@invitation.update(attended: true)

"You have verified #{@invitation.member.full_name}’s attendace."
end

def update_to_attending
update_successful = @invitation.update(
attending: true,
rsvp_time: Time.zone.now,
automated_rsvp: true,
last_overridden_by_id: current_user.id
)

{
message: update_successful ? attending_successful : attending_failed,
error: !update_successful
}
end

def attending_successful
@workshop.send_attending_email(@invitation) if @workshop.future?

"You have added #{@invitation.member.full_name} to the workshop as a #{@invitation.role}."
end

def attending_failed
"Error adding #{@invitation.member.full_name} as a #{@invitation.role}. "\
"#{@invitation.errors.full_messages.to_sentence}."
end

def update_to_not_attending
@invitation.update!(attending: false, last_overridden_by_id: current_user.id)

{
message: "You have removed #{@invitation.member.full_name} from the workshop.",
error: false
}
end

def set_invitation
@invitation = @workshop.invitations.find_by(token: invitation_id)
def is_attending?
ActiveRecord::Type::Boolean.new.cast(params[:attending])
end

def invitation_id
Expand Down
66 changes: 66 additions & 0 deletions app/services/managers/attendance_manager.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# frozen_string_literal: true
module Managers
class AttendanceManager
attr_reader :workshop, :invitation
def initialize(workshop_id, invitation_id, current_user)
@workshop = WorkshopPresenter.decorate(Workshop.find(workshop_id))
@invitation = @workshop.invitations.find_by(token: invitation_id)
@current_user = current_user
end

def update(attending:, attended:)
return update_to_attended if attended

result = attending ? update_to_attending : update_to_not_attending
message, error = result.values_at(:message, :error)

unless error
waiting_listed = WaitingList.find_by(invitation: @invitation)
waiting_listed&.destroy!
end

message
end

private
def update_to_attended
@invitation.update(attended: true)

"You have verified #{@invitation.member.full_name}’s attendance."
end

def update_to_attending
update_successful = @invitation.update(
attending: true,
rsvp_time: Time.zone.now,
automated_rsvp: true,
last_overridden_by_id: @current_user.id
)

{
message: update_successful ? attending_successful : attending_failed,
error: !update_successful
}
end

def update_to_not_attending
@invitation.update!(attending: false, last_overridden_by_id: @current_user.id)

{
message: "You have removed #{@invitation.member.full_name} from the workshop.",
error: false
}
end

def attending_successful
@workshop.send_attending_email(@invitation) if @workshop.future?

"You have added #{@invitation.member.full_name} to the workshop as a #{@invitation.role}."
end

def attending_failed
"Error adding #{@invitation.member.full_name} as a #{@invitation.role}. "\
"#{@invitation.errors.full_messages.to_sentence}."
end
end
end