clarion/app/models/volunteer.rb

66 lines
2.4 KiB
Ruby
Raw Normal View History

2015-10-21 23:13:39 +03:00
class Volunteer < ActiveRecord::Base
TSHIRT_SIZES = [:s, :m, :l, :xl, :xxl, :xxxl]
TSHIRT_CUTS = [:unisex, :female]
FOOD_PREFERENCES = [:none, :vegetarian, :vegan]
has_one_attached :picture
2015-10-21 23:13:39 +03:00
validates :name, :language, :tshirt_size, :tshirt_cut, :food_preferences, presence: true
validates :tshirt_size, inclusion: {in: TSHIRT_SIZES.map(&:to_s)}
validates :tshirt_cut, inclusion: {in: TSHIRT_CUTS.map(&:to_s)}
validates :food_preferences, inclusion: {in: FOOD_PREFERENCES.map(&:to_s)}
2024-04-18 21:11:08 +03:00
validates :email, format: {with: /\A[^@]+@[^@]+\z/}, presence: true, uniqueness: {scope: :conference_id}
2015-10-21 23:13:39 +03:00
validates :phone, presence: true, format: {with: /\A[+\- \(\)0-9]+\z/}
validates :volunteer_team, presence: true
2024-09-22 22:50:41 +03:00
validates :terms_accepted, acceptance: true
2016-07-06 11:24:20 +03:00
validate :volunteer_teams_belong_to_conference
2015-10-21 23:13:39 +03:00
2019-04-28 21:10:54 +03:00
phony_normalize :phone, default_country_code: "BG"
2015-10-21 23:13:39 +03:00
belongs_to :conference
belongs_to :volunteer_team
has_and_belongs_to_many :additional_volunteer_teams, class_name: "VolunteerTeam"
2015-10-21 23:13:39 +03:00
before_create :ensure_main_volunteer_team_is_part_of_additional_volunteer_teams
2015-10-21 23:13:39 +03:00
before_create :assign_unique_id
2024-04-18 21:11:08 +03:00
before_create :assign_confirmation_token
after_commit :send_email_confirmation_to_volunteer, on: [:create]
2024-09-22 22:50:41 +03:00
after_commit :send_email_to_organisers, on: [:create] # technically the volunteer's email is not confirmed yet
2024-04-18 21:11:08 +03:00
def send_notification_to_volunteer
VolunteerMailer.volunteer_notification(self).deliver_later
end
2015-10-21 23:13:39 +03:00
private
def ensure_main_volunteer_team_is_part_of_additional_volunteer_teams
self.additional_volunteer_teams |= [volunteer_team] if volunteer_team
2015-10-21 23:13:39 +03:00
end
def assign_unique_id
self.unique_id = Digest::SHA256.hexdigest(SecureRandom.uuid)
2015-10-21 23:13:39 +03:00
end
2024-04-18 21:11:08 +03:00
def assign_confirmation_token
self.confirmation_token = Digest::SHA256.hexdigest(SecureRandom.uuid)
end
def send_email_confirmation_to_volunteer
VolunteerMailer.volunteer_email_confirmation(self).deliver_later
2015-10-21 23:13:39 +03:00
end
2016-07-06 11:24:20 +03:00
def send_email_to_organisers
VolunteerMailer.team_notification(self).deliver_later
end
2016-07-06 11:24:20 +03:00
def volunteer_teams_belong_to_conference
conference_volunteer_teams = conference.volunteer_teams
unless additional_volunteer_teams.all? { |team| conference_volunteer_teams.include? team }
errors.add :additional_volunteer_teams, :invalid_volunteer_team
end
unless conference_volunteer_teams.include?(volunteer_team)
errors.add :volunteer_team, :invalid_volunteer_team
2016-07-06 11:24:20 +03:00
end
end
2015-10-21 23:13:39 +03:00
end