Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions drivers/place/room_booking_approval.cr
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,47 @@ class Place::RoomBookingApproval < PlaceOS::Driver
calendar.accept_event(calendar_id: calendar_id, event_id: event_id, user_id: user_id, notify: notify, comment: comment)
end

@[Security(Level::Support)]
def accept_recurring_event(calendar_id : String, recurring_event_id : String, user_id : String? = nil, period_start : Int64? = nil, period_end : Int64? = nil, notify : Bool = false, comment : String? = nil)
logger.debug { "accepting recurring event #{recurring_event_id} on #{calendar_id}" }

# Get the original event to find its ical_uid
original_event = calendar.get_event(calendar_id, recurring_event_id, user_id)
unless original_event.ical_uid
logger.error { "Event #{recurring_event_id} has no ical_uid, cannot find recurring instances" }
return
end

# Use provided dates or default to now and 1 year ahead
now = Time.utc
start_time = period_start || now.to_unix
end_time = period_end || (now + 1.year).to_unix

# Find all instances of this recurring event
recurring_instances = calendar.list_events(
calendar_id: calendar_id,
period_start: start_time,
period_end: end_time,
user_id: user_id,
include_cancelled: false,
ical_uid: original_event.ical_uid
)

# Accept each instance
accepted_count = 0
recurring_instances.each do |event|
begin
calendar.accept_event(calendar_id, event.id, user_id: user_id, notify: notify, comment: comment)
accepted_count += 1
logger.debug { "Accepted recurring event instance #{event.id}" }
rescue error
logger.warn(exception: error) { "Failed to accept recurring event instance #{event.id}" }
end
end

logger.info { "Accepted #{accepted_count} instances of recurring event #{recurring_event_id}" }
end

@[Security(Level::Support)]
def decline_event(calendar_id : String, event_id : String, user_id : String? = nil, notify : Bool = false, comment : String? = nil)
calendar.decline_event(calendar_id: calendar_id, event_id: event_id, user_id: user_id, notify: notify, comment: comment)
Expand Down
Loading