2014-08-10 19:57:46 +03:00
class Conference < ActiveRecord :: Base
validates :title , presence : true , uniqueness : true
validates :email , presence : true , format : { with : / \ A[^@]+@[^@]+ \ z / }
validates :description , presence : true
validates :start_date , presence : true
validates :end_date , presence : true
2014-11-04 21:16:06 +02:00
validate :start_date_is_before_end_date
2014-08-10 19:57:46 +03:00
2014-09-01 13:44:41 +03:00
translates :title , :description
2014-11-04 23:02:28 +02:00
has_many :tracks
has_many :halls
2015-07-19 20:01:52 +03:00
has_many :event_types
2015-08-14 23:58:19 +03:00
has_many :events
2015-09-01 11:09:26 +03:00
has_many :volunteer_teams
2015-04-20 18:55:06 +03:00
has_one :call_for_participation , dependent : :destroy
2015-07-29 17:54:41 +03:00
has_many :participants , class_name : 'User' , through : :events
2015-10-17 19:34:17 +03:00
has_many :slots , through : :halls
2014-08-10 20:30:37 +03:00
2015-09-01 11:09:26 +03:00
accepts_nested_attributes_for :tracks , :halls , :event_types , :volunteer_teams ,
reject_if : :all_blank , allow_destroy : true
2014-10-14 18:27:28 +03:00
2015-05-23 18:47:08 +03:00
after_create :create_call_for_participation
2015-07-30 21:19:03 +03:00
def participants
events . where ( conference_id : id ) . map ( & :user )
end
2015-04-20 19:11:39 +03:00
def submissions_grouped_by_day
2015-08-10 21:18:12 +03:00
submissions = events . group ( 'date(events.created_at)' ) . select ( 'date(events.created_at) as created_at, count(events.id) as number' )
2015-04-20 19:11:39 +03:00
submissions . group_by { | s | s . created_at . to_date }
end
def submissions_grouped_by_confirmation_day
2015-10-19 00:25:11 +03:00
submissions = events . approved . confirmed . group ( 'date(propositions.confirmed_at)' ) . select ( 'date(propositions.confirmed_at) as confirmed_at, count(events.id) as number' )
2015-04-20 19:11:39 +03:00
submissions . group_by { | s | s . confirmed_at . to_date }
end
2014-08-10 19:57:46 +03:00
private
2014-11-04 21:16:06 +02:00
def start_date_is_before_end_date
2014-08-10 19:57:46 +03:00
if start_date . present? and end_date . present? and start_date > end_date
errors . add ( :end_date , :cannot_be_before_start_date )
end
end
end