summaryrefslogtreecommitdiff
path: root/app/models/occurrence.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/occurrence.rb')
-rw-r--r--app/models/occurrence.rb24
1 files changed, 13 insertions, 11 deletions
diff --git a/app/models/occurrence.rb b/app/models/occurrence.rb
index 3baf447..c6a2380 100644
--- a/app/models/occurrence.rb
+++ b/app/models/occurrence.rb
@@ -1,19 +1,19 @@
1# TODO Make a gem out of the c wrapper
2require 'chaos_calendar' 1require 'chaos_calendar'
3 2
4class Occurrence < ApplicationRecord 3class Occurrence < ApplicationRecord
5 4
6 # Associations 5 # Associations
7 6
8 belongs_to :node 7 belongs_to :node, optional: true
9 belongs_to :event 8 belongs_to :event
10 9
11 # Class Methods 10 # Class Methods
12 11
13 def self.find_in_range start_time, end_time 12 def self.find_in_range start_time, end_time
14 includes(:node) 13 joins(:event)
15 .where("start_time > ? AND end_time < ?", start_time, end_time) 14 .includes(:node)
16 .order("start_time") 15 .where("occurrences.start_time > ? AND occurrences.end_time < ?", start_time, end_time)
16 .order("occurrences.start_time")
17 end 17 end
18 18
19 def self.find_next 19 def self.find_next
@@ -27,6 +27,7 @@ class Occurrence < ApplicationRecord
27 # event are then calculated and created. 27 # event are then calculated and created.
28 def self.generate event 28 def self.generate event
29 self.where(:event_id => event.id).delete_all 29 self.where(:event_id => event.id).delete_all
30 return if event.start_time.nil?
30 31
31 node = event.node 32 node = event.node
32 duration = (event.end_time - event.start_time) 33 duration = (event.end_time - event.start_time)
@@ -36,7 +37,7 @@ class Occurrence < ApplicationRecord
36 self.create( 37 self.create(
37 :start_time => occurrence, 38 :start_time => occurrence,
38 :end_time => (occurrence + duration), 39 :end_time => (occurrence + duration),
39 :node_id => node.id, 40 :node_id => node&.id,
40 :event_id => event.id 41 :event_id => event.id
41 ) 42 )
42 end 43 end
@@ -49,10 +50,11 @@ class Occurrence < ApplicationRecord
49 # Return value is always an array of Time objects. 50 # Return value is always an array of Time objects.
50 def self.generate_dates event 51 def self.generate_dates event
51 if event.rrule && !event.rrule.empty? 52 if event.rrule && !event.rrule.empty?
52 ChaosCalendar::occurrences( 53 ChaosCalendar::occurrences_for_timezone(
53 event.start_time, 54 event.start_time,
54 (Time.now + 5.years), 55 (Time.now + 5.years),
55 event.rrule 56 event.rrule,
57 Time.zone.tzinfo.identifier
56 ) 58 )
57 else 59 else
58 [event.start_time] 60 [event.start_time]
@@ -64,7 +66,7 @@ class Occurrence < ApplicationRecord
64 # Instance Methods 66 # Instance Methods
65 67
66 def summary 68 def summary
67 node.head.title 69 node&.head&.title || event.display_title
68 end 70 end
69 71
70end 72end