2014-01-27 16:42:54 +01:00
|
|
|
module RecurringTodos
|
|
|
|
|
|
|
|
|
|
class MonthlyRepeatPattern < AbstractRepeatPattern
|
|
|
|
|
|
2014-02-07 22:55:52 +01:00
|
|
|
def initialize(user)
|
|
|
|
|
super user
|
2014-01-27 16:42:54 +01:00
|
|
|
end
|
|
|
|
|
|
2014-02-08 11:51:09 +01:00
|
|
|
def recurrence_selector
|
|
|
|
|
get :recurrence_selector
|
|
|
|
|
end
|
|
|
|
|
|
2014-01-27 16:42:54 +01:00
|
|
|
def every_x_day?
|
2014-02-08 11:51:09 +01:00
|
|
|
get(:recurrence_selector) == 0
|
2014-01-27 16:42:54 +01:00
|
|
|
end
|
|
|
|
|
|
2014-02-10 11:45:25 +01:00
|
|
|
def every_x_day
|
|
|
|
|
get(:every_other1)
|
|
|
|
|
end
|
|
|
|
|
|
2014-01-27 16:42:54 +01:00
|
|
|
def every_xth_day?
|
2014-02-08 11:51:09 +01:00
|
|
|
get(:recurrence_selector) == 1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def every_x_month
|
|
|
|
|
# in case monthly pattern is every day x, return every_other2 otherwise
|
|
|
|
|
# return a default value
|
|
|
|
|
get(:recurrence_selector) == 0 ? get(:every_other2) : 1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def every_x_month2
|
|
|
|
|
# in case monthly pattern is every xth day, return every_other2 otherwise
|
|
|
|
|
# return a default value
|
|
|
|
|
get(:recurrence_selector) == 1 ? get(:every_other2) : 1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def every_xth_day(default=nil)
|
|
|
|
|
get(:every_other3) || default
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def day_of_week
|
|
|
|
|
get :every_count
|
|
|
|
|
end
|
|
|
|
|
|
2014-02-23 15:54:02 +01:00
|
|
|
def recurrence_pattern
|
|
|
|
|
if recurrence_selector == 0
|
|
|
|
|
on_day = " #{I18n.t('todos.recurrence.pattern.on_day_n', :n => every_x_day)}"
|
|
|
|
|
if every_xth_day(0) > 1
|
|
|
|
|
I18n.t("todos.recurrence.pattern.every_n", :n => every_xth_day) + " " + I18n.t('common.months') + on_day
|
|
|
|
|
else
|
|
|
|
|
I18n.t("todos.recurrence.pattern.every_month") + on_day
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
n_months = if get(:every_other2) > 1
|
|
|
|
|
"#{get(:every_other2)} #{I18n.t('common.months')}"
|
|
|
|
|
else
|
|
|
|
|
I18n.t('common.month')
|
|
|
|
|
end
|
|
|
|
|
I18n.t('todos.recurrence.pattern.every_xth_day_of_every_n_months',
|
|
|
|
|
:x => xth(every_xth_day), :day => day_of_week_as_text(day_of_week), :n_months => n_months)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2014-02-08 11:51:09 +01:00
|
|
|
def validate
|
|
|
|
|
super
|
2014-02-08 12:26:49 +01:00
|
|
|
|
2014-02-08 11:51:09 +01:00
|
|
|
case recurrence_selector
|
|
|
|
|
when 0 # 'monthly_every_x_day'
|
2014-02-08 12:26:49 +01:00
|
|
|
validate_not_blank(every_x_month, "Every other nth month may not be empty for recurrence setting")
|
2014-02-23 15:13:53 +01:00
|
|
|
when 1 # 'monthly_every_xth_day'
|
2014-02-08 12:26:49 +01:00
|
|
|
validate_not_blank(every_x_month2, "Every other nth month may not be empty for recurrence setting")
|
|
|
|
|
validate_not_blank(day_of_week, "The day of the month may not be empty for recurrence setting")
|
2014-02-08 11:51:09 +01:00
|
|
|
else
|
|
|
|
|
raise Exception.new, "unexpected value of recurrence selector '#{recurrence_selector}'"
|
|
|
|
|
end
|
2014-01-27 16:42:54 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|