1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-04 15:24:23 +01:00
fab-manager/app/services/event/create_event_service.rb
Sylvain 2cf18c277c (bug) create recurrent event
Also: (test) test trainings API
Also: (test) test create recurrent event
2022-12-21 14:12:16 +01:00

72 lines
2.7 KiB
Ruby

# frozen_string_literal: true
# Provides helper methods to create new Events and its recurring occurrences
class Event::CreateEventService
extend ApplicationHelper
class << self
def create_occurence(event, date)
service = Availabilities::CreateAvailabilitiesService.new
occurrence = Event.new(
recurrence: 'none',
title: event.title,
description: event.description,
event_image: occurrence_image(event),
event_files: occurrence_files(event),
availability: Availability.new(start_at: occurence_start_date(event, date),
end_at: occurrence_end_date(event, date),
available_type: 'event'),
availability_id: nil,
category_id: event.category_id,
age_range_id: event.age_range_id,
event_themes: event.event_themes,
amount: event.amount,
event_price_categories: occurrence_price_categories(event),
nb_total_places: event.nb_total_places,
recurrence_id: event.id,
advanced_accounting: occurrence_advanced_accounting(event)
)
occurrence.save
service.create_slots(occurrence.availability)
end
private
def occurence_start_date(event, date)
start_at = DateTime.new(date.year, date.month, date.day,
event.availability.start_at.hour, event.availability.start_at.min, event.availability.start_at.sec,
event.availability.start_at.zone)
dst_correction(event.availability.start_at, start_at)
end
def occurrence_end_date(event, date)
days_diff = event.availability.end_at.day - event.availability.start_at.day
end_date = date + days_diff.days
end_at = DateTime.new(end_date.year, end_date.month, end_date.day,
event.availability.end_at.hour, event.availability.end_at.min, event.availability.end_at.sec,
event.availability.end_at.zone)
dst_correction(event.availability.start_at, end_at)
end
def occurrence_image(event)
EventImage.new(attachment: event.event_image.attachment) if event.event_image
end
def occurrence_files(event)
event.event_files.map do |f|
EventFile.new(attachment: f.attachment)
end
end
def occurrence_price_categories(event)
event.event_price_categories.map do |epc|
EventPriceCategory.new(price_category_id: epc.price_category_id, amount: epc.amount)
end
end
def occurrence_advanced_accounting(event)
AdvancedAccounting.new(code: event.advanced_accounting.code, analytical_section: event.advanced_accounting.analytical_section)
end
end
end