2014-11-25 10:47:18 +01:00
class CallForPaper < ActiveRecord :: Base
belongs_to :conference
2014-06-04 16:47:50 +02:00
attr_accessible :start_date , :end_date ,
2014-11-25 10:47:18 +01:00
:schedule_changes , :rating ,
2014-08-12 11:51:59 +03:00
:schedule_public , :include_cfp_in_splash , :conference_id
2013-01-07 09:04:09 +01:00
2014-06-04 16:47:50 +02:00
validates_presence_of :start_date , :end_date
2014-07-21 14:49:05 +02:00
validates :rating , numericality : { greater_than_or_equal_to : 0 , less_than_or_equal_to : 10 }
2014-11-29 20:00:26 +02:00
validate :before_end_of_conference
validate :start_after_end_date
2013-01-07 09:04:09 +01:00
2014-06-02 12:37:57 +02:00
##
# Calculates how many weeks the call for paper is.
#
# ====Returns
# * +Integer+ -> start week
def weeks
result = end_week - start_week + 1
2014-06-12 21:07:07 +03:00
weeks = Date . new ( start_date . year , 12 , 31 ) . strftime ( '%W' ) . to_i
2014-06-02 12:37:57 +02:00
result < 0 ? result + weeks : result
2014-05-30 10:10:47 +02:00
end
2014-06-02 12:37:57 +02:00
##
# Calculates the end week of the cfp
#
# ====Returns
2014-05-30 10:10:47 +02:00
def start_week
start_date . strftime ( '%W' ) . to_i
end
2014-06-02 12:37:57 +02:00
##
# Calculates the end week of the cfp
#
# ====Returns
2014-05-30 10:10:47 +02:00
def end_week
end_date . strftime ( '%W' ) . to_i
end
2014-08-12 16:04:24 +05:30
##
# Checks whether cfp dates is updated
#
# ====Returns
# * +True+ -> If cfp dates is updated and all other parameters are set
# * +False+ -> Either cfp date is not updated or one or more parameter is not set
def notify_on_cfp_date_update?
! self . end_date . blank? && ! self . start_date . blank? \
&& ( self . start_date_changed? || self . end_date_changed? ) \
&& self . conference . email_settings . send_on_call_for_papers_dates_updates \
&& ! self . conference . email_settings . call_for_papers_dates_updates_subject . blank? \
&& ! self . conference . email_settings . call_for_papers_dates_updates_template . blank?
end
##
# Checks whether cfp dates is updated
#
# ====Returns
# * +True+ -> If cfp dates is updated and all other parameters are set
# * +False+ -> Either cfp date is not updated or one or more parameter is not set
def notify_on_schedule_public?
! self . end_date . blank? && ! self . start_date . blank? \
&& ( self . start_date_changed? || self . end_date_changed? ) \
&& self . conference . email_settings . send_on_call_for_papers_dates_updates \
&& ! self . conference . email_settings . call_for_papers_dates_updates_subject . blank? \
&& ! self . conference . email_settings . call_for_papers_dates_updates_template . blank?
end
2014-11-29 20:00:26 +02:00
private
def before_end_of_conference
errors .
add ( :end_date , " can't be after the conference end date ( #{ conference . end_date } ) " ) if conference && conference . end_date && end_date && ( end_date > conference . end_date )
errors .
add ( :start_date , " can't be after the conference end date ( #{ conference . end_date } ) " ) if conference && conference . end_date && start_date && ( start_date > conference . end_date )
end
def start_after_end_date
errors .
add ( :start_date , " can't be after the end date " ) if start_date && end_date && start_date > end_date
end
2013-08-16 16:09:29 +03:00
end