class ConferenceRegistration < ActiveRecord::Base belongs_to :conference belongs_to :user has_many :conference_registration_responses AttendingOptions = [:yes, :no] def languages user.languages end def self.all_housing_options [:none, :tent, :house] end def self.all_spaces [:bed_space, :floor_space, :tent_space] end def self.all_bike_options [:yes, :no] end def self.all_food_options [:meat, :vegetarian, :vegan] end def self.all_considerations [:vegan, :smoking, :pets, :quiet] end def city city_id.present? ? City.find(city_id) : nil end def status(was = false) return :unregistered if user.nil? steps = ((was ? steps_completed_was : steps_completed) || []).map(&:to_sym) return :registered if steps.include?(:hosting) || steps.include?(:questions) return :preregistered if steps.include?(:contact_info) end around_update :check_status def check_status yield old_status = status(true) new_status = status if old_status.present? && old_status != new_status if (conference.registration_status == :pre && new_status == :preregistered) || (conference.registration_status == :open && new_status == :registered) UserMailer.send_mail :registration_confirmation do { :args => self } end end end end end