29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
# File 'app/models/caboose/calendar_event_group.rb', line 29
def create_events
return if self.date_start.nil?
return if self.date_end.nil?
return if self.date_end < self.date_start
e = self.calendar_events.reorder(:begin_date).first
return if e.nil?
dates = [e.begin_date.to_date]
if self.period == 'Day'
d = self.date_start
while d <= self.date_end
if !CalendarEvent.where("calendar_event_group_id = ? and cast(begin_date as date) = ?", self.id, d).exists?
e.duplicate(d)
end
dates << d.to_date
d = d + 1.day
end
elsif self.period == 'Week'
d = self.date_start - self.date_start.strftime('%w').to_i.days
while d <= self.date_end
(0..6).each do |i|
d = d + 1
Caboose.log("d = #{d}")
next if d < self.date_start
break if d > self.date_end
w = d.strftime('%w').to_i
if (w == 0 && self.sun) || (w == 1 && self.mon) || (w == 2 && self.tue) || (w == 3 && self.wed) || (w == 4 && self.thu) || (w == 5 && self.fri) || (w == 6 && self.sat)
Caboose.log("Found a day")
if !CalendarEvent.where("calendar_event_group_id = ? and cast(begin_date as date) = ?", self.id, d).exists?
e.duplicate(d)
end
dates << d.to_date
end
end
d = d + (self.frequency-1).weeks
end
elsif self.period == 'Month'
d = self.date_start
if self.repeat_by == 'Day of month'
while d <= self.date_end
if !CalendarEvent.where("calendar_event_group_id = ? and cast(begin_date as date) = ?", self.id, d).exists?
e.duplicate(d)
end
dates << d.to_date
d = d + self.frequency.months
end
elsif self.repeat_by == self::REPEAT_BY_DAY_OF_WEEK
end
elsif self.period == 'Year'
d = self.date_start
while d <= self.date_end
if !CalendarEvent.where("calendar_event_group_id = ? and cast(begin_date as date) = ?", self.id, d).exists?
e.duplicate(d)
end
dates << d.to_date
d = d + 1.year
end
end
CalendarEvent.where("calendar_event_group_id = ? and cast(begin_date as date) not in (?)", self.id, dates).destroy_all
end
|