app/models/caboose/calendar_event_group.rb in caboose-cms-0.4.110 vs app/models/caboose/calendar_event_group.rb in caboose-cms-0.4.111

- old
+ new

@@ -24,7 +24,98 @@ PERIOD_YEAR = 'Year' REPEAT_BY_DAY_OF_MONTH = 'Day of month' REPEAT_BY_DAY_OF_WEEK = 'Day of week' + 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) + dates << d.to_date + end + 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) + dates << d.to_date + end + end + end + d = d + (self.frequency-1).weeks + end + + elsif self.period == 'Month' + d = self.date_start + if self.repeat_by == 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) + dates << d.to_date + end + d = d + self.frequency.months + end + elsif self.repeat_by == self::REPEAT_BY_DAY_OF_WEEK + + #d0 = DateTime.new(d.strftime('%Y'), d.strftime('%m'), 1) + #w = d0.strftime('%w').to_i + #i = 0 + #while d0 <= d + # i = i + 1 if d0.strftime('%w').to_i == w + # d0 = d0 + 1.day + #end + # + ## Now set the i'th occurance of the w day of the week + #d = DateTime.new(d.strftime('%Y'), d.strftime('%m'), 1) + #while d <= self.date_end + # d0 = d + # while d + # + # + # if !CalendarEvent.where("calendar_event_group_id = ? and cast(begin_date as date) = ?", self.id, d).exists? + # CalendarEvent.duplicate(d) + # end + # d = d + self.frequency.months + #end + + 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) + dates << d.to_date + end + d = d + 1.year + end + + end + + # Get rid of events that shouldn't be in the group + CalendarEvent.where("calendar_event_group_id = ? and cast(begin_date as date) not in (?)", self.id, dates).destroy_all + + end end end