2014-11-25 10:47:18 +01:00
class CallForPaper < ActiveRecord :: Base
belongs_to :conference
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? ) \
2015-10-14 15:34:23 +02:00
&& self . conference . email_settings . send_on_call_for_papers_dates_updated \
&& ! self . conference . email_settings . call_for_papers_dates_updated_subject . blank? \
&& ! self . conference . email_settings . call_for_papers_dates_updated_body . blank?
2014-08-12 16:04:24 +05:30
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? ) \
2015-10-14 15:34:23 +02:00
&& self . conference . email_settings . send_on_call_for_papers_dates_updated \
&& ! self . conference . email_settings . call_for_papers_dates_updated_subject . blank? \
&& ! self . conference . email_settings . call_for_papers_dates_updated_body . blank?
2014-08-12 16:04:24 +05:30
end
2014-11-29 20:00:26 +02:00
2015-08-21 19:15:02 +02:00
def remaining_days ( date = Date . today )
result = ( self . end_date - date ) . to_i
result > 0 ? result : 0
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