mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-16 15:20:13 +01:00
52 lines
1.4 KiB
Ruby
52 lines
1.4 KiB
Ruby
module RecurringTodos
|
|
|
|
class DailyRecurrencePattern < AbstractRecurrencePattern
|
|
|
|
def initialize(user)
|
|
super user
|
|
end
|
|
|
|
def every_x_days
|
|
get :every_other1
|
|
end
|
|
|
|
def only_work_days?
|
|
get :only_work_days
|
|
end
|
|
|
|
def recurrence_pattern
|
|
if only_work_days?
|
|
I18n.t("todos.recurrence.pattern.on_work_days")
|
|
elsif every_x_days > 1
|
|
I18n.t("todos.recurrence.pattern.every_n_days", :n => every_x_days)
|
|
else
|
|
I18n.t("todos.recurrence.pattern.every_day")
|
|
end
|
|
end
|
|
|
|
def validate
|
|
super
|
|
errors[:base] << "Every other nth day may not be empty for this daily recurrence setting" if (!only_work_days?) && every_x_days.blank?
|
|
end
|
|
|
|
def get_next_date(previous)
|
|
# previous is the due date of the previous todo or it is the completed_at
|
|
# date when the completed_at date is after due_date (i.e. you did not make
|
|
# the due date in time)
|
|
|
|
start = determine_start(previous, 1.day)
|
|
|
|
if only_work_days?
|
|
# jump over weekend if necessary
|
|
return start + 2.day if start.wday() == 6 # saturday
|
|
return start + 1.day if start.wday() == 0 # sunday
|
|
return start
|
|
else
|
|
# if there was no previous todo, do not add n: the first todo starts on
|
|
# today or on start_from
|
|
return previous == nil ? start : start+every_x_days.day-1.day
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|