mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-12 23:09:03 +01:00
58 lines
2.0 KiB
Ruby
58 lines
2.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Provides an helper method to create the slots for an Availability and optionnaly, for its multiple occurrences
|
|
class Availabilities::CreateAvailabilitiesService
|
|
def create(availability, occurrences)
|
|
occurrences = [] if occurrences.nil?
|
|
|
|
availability.update(occurrence_id: availability.id)
|
|
create_slots(availability)
|
|
|
|
occurrences.each do |o|
|
|
start_at = Time.zone.parse(o[:start_at])
|
|
end_at = Time.zone.parse(o[:end_at])
|
|
|
|
next if availability.start_at == start_at && availability.end_at == end_at
|
|
|
|
occ = Availability.create!(
|
|
start_at: start_at,
|
|
end_at: end_at,
|
|
available_type: availability.available_type,
|
|
is_recurrent: availability.is_recurrent,
|
|
period: availability.period,
|
|
nb_periods: availability.nb_periods,
|
|
end_date: availability.end_date,
|
|
occurrence_id: availability.occurrence_id,
|
|
machine_ids: availability.machine_ids,
|
|
training_ids: availability.training_ids,
|
|
space_ids: availability.space_ids,
|
|
tag_ids: availability.tag_ids,
|
|
nb_total_places: availability.nb_total_places,
|
|
slot_duration: availability.slot_duration,
|
|
plan_ids: availability.plan_ids
|
|
)
|
|
create_slots(occ)
|
|
end
|
|
end
|
|
|
|
def create_slots(availability)
|
|
slot_duration = availability.slot_duration || Setting.get('slot_duration').to_i
|
|
|
|
if %w[machines space].include?(availability.available_type)
|
|
((availability.end_at - availability.start_at) / slot_duration.minutes).to_i.times do |i|
|
|
Slot.new(
|
|
start_at: availability.start_at + (i * slot_duration).minutes,
|
|
end_at: availability.start_at + (i * slot_duration).minutes + slot_duration.minutes,
|
|
availability_id: availability.id
|
|
).save!
|
|
end
|
|
else
|
|
Slot.new(
|
|
start_at: availability.start_at,
|
|
end_at: availability.end_at,
|
|
availability_id: availability.id
|
|
).save!
|
|
end
|
|
end
|
|
end
|