mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-04-10 00:53:51 +02:00
use slot duration from the db setting
This commit is contained in:
parent
a63340188b
commit
ba4c39ca99
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# API Controller for resources of type Slot
|
# API Controller for resources of type Slot
|
||||||
# Slots are used to cut Availabilities into reservable slots. The duration of these slots is configured per
|
# Slots are used to cut Availabilities into reservable slots. The duration of these slots is configured per
|
||||||
# availability by Availability.slot_duration, or otherwise globally by ApplicationHelper::SLOT_DURATION minutes
|
# availability by Availability.slot_duration, or otherwise globally by Setting.get('slot_duration')
|
||||||
class API::SlotsController < API::ApiController
|
class API::SlotsController < API::ApiController
|
||||||
before_action :authenticate_user!
|
before_action :authenticate_user!
|
||||||
before_action :set_slot, only: %i[update cancel]
|
before_action :set_slot, only: %i[update cancel]
|
||||||
|
@ -4,9 +4,6 @@
|
|||||||
module ApplicationHelper
|
module ApplicationHelper
|
||||||
require 'message_format'
|
require 'message_format'
|
||||||
|
|
||||||
## machine/spaces availabilities are divided in multiple slots of 60 minutes
|
|
||||||
SLOT_DURATION ||= Setting.get('slot_duration') || 60
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Verify if the provided attribute is in the provided attributes array, whatever it exists or not
|
# Verify if the provided attribute is in the provided attributes array, whatever it exists or not
|
||||||
# @param attributes {Array|nil}
|
# @param attributes {Array|nil}
|
||||||
|
@ -89,7 +89,7 @@ class Availability < ApplicationRecord
|
|||||||
def available_space_places
|
def available_space_places
|
||||||
return unless available_type == 'space'
|
return unless available_type == 'space'
|
||||||
|
|
||||||
duration = slot_duration || ApplicationHelper::SLOT_DURATION
|
duration = slot_duration || Setting.get('slot_duration')
|
||||||
((end_at - start_at) / duration.minutes).to_i * nb_total_places
|
((end_at - start_at) / duration.minutes).to_i * nb_total_places
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -162,7 +162,7 @@ class Availability < ApplicationRecord
|
|||||||
def length_must_be_slot_multiple
|
def length_must_be_slot_multiple
|
||||||
return unless available_type == 'machines' || available_type == 'space'
|
return unless available_type == 'machines' || available_type == 'space'
|
||||||
|
|
||||||
duration = slot_duration || ApplicationHelper::SLOT_DURATION
|
duration = slot_duration || Setting.get('slot_duration')
|
||||||
return unless end_at < (start_at + duration.minutes)
|
return unless end_at < (start_at + duration.minutes)
|
||||||
|
|
||||||
errors.add(:end_at, I18n.t('availabilities.length_must_be_slot_multiple', MIN: duration))
|
errors.add(:end_at, I18n.t('availabilities.length_must_be_slot_multiple', MIN: duration))
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
# Time range, slicing an Availability.
|
# Time range, slicing an Availability.
|
||||||
# Its duration is defined by globally by ApplicationHelper::SLOT_DURATION but can be overridden per availability
|
# Its duration is defined by globally by Setting.get('slot_duration') but can be overridden per availability
|
||||||
# During a slot a Reservation is possible
|
# During a slot a Reservation is possible
|
||||||
# Only reserved slots are persisted in DB, others are instantiated on the fly
|
# Only reserved slots are persisted in DB, others are instantiated on the fly
|
||||||
class Slot < ApplicationRecord
|
class Slot < ApplicationRecord
|
||||||
|
@ -17,7 +17,7 @@ class Availabilities::AvailabilitiesService
|
|||||||
|
|
||||||
slots = []
|
slots = []
|
||||||
availabilities.each do |a|
|
availabilities.each do |a|
|
||||||
slot_duration = a.slot_duration || ApplicationHelper::SLOT_DURATION
|
slot_duration = a.slot_duration || Setting.get('slot_duration')
|
||||||
((a.end_at - a.start_at) / slot_duration.minutes).to_i.times do |i|
|
((a.end_at - a.start_at) / slot_duration.minutes).to_i.times do |i|
|
||||||
next unless (a.start_at + (i * slot_duration).minutes) > DateTime.current || user.admin?
|
next unless (a.start_at + (i * slot_duration).minutes) > DateTime.current || user.admin?
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ class Availabilities::AvailabilitiesService
|
|||||||
|
|
||||||
slots = []
|
slots = []
|
||||||
availabilities.each do |a|
|
availabilities.each do |a|
|
||||||
slot_duration = a.slot_duration || ApplicationHelper::SLOT_DURATION
|
slot_duration = a.slot_duration || Setting.get('slot_duration')
|
||||||
((a.end_at - a.start_at) / slot_duration.minutes).to_i.times do |i|
|
((a.end_at - a.start_at) / slot_duration.minutes).to_i.times do |i|
|
||||||
next unless (a.start_at + (i * slot_duration).minutes) > DateTime.current || user.admin?
|
next unless (a.start_at + (i * slot_duration).minutes) > DateTime.current || user.admin?
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ class Availabilities::PublicAvailabilitiesService
|
|||||||
.where(lock: false)
|
.where(lock: false)
|
||||||
slots = []
|
slots = []
|
||||||
availabilities.each do |a|
|
availabilities.each do |a|
|
||||||
slot_duration = a.slot_duration || ApplicationHelper::SLOT_DURATION
|
slot_duration = a.slot_duration || Setting.get('slot_duration')
|
||||||
a.machines.each do |machine|
|
a.machines.each do |machine|
|
||||||
next unless machine_ids&.include?(machine.id.to_s)
|
next unless machine_ids&.include?(machine.id.to_s)
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ class Availabilities::PublicAvailabilitiesService
|
|||||||
|
|
||||||
slots = []
|
slots = []
|
||||||
availabilities.each do |a|
|
availabilities.each do |a|
|
||||||
slot_duration = a.slot_duration || ApplicationHelper::SLOT_DURATION
|
slot_duration = a.slot_duration || Setting.get('slot_duration')
|
||||||
space = a.spaces.first
|
space = a.spaces.first
|
||||||
((a.end_at - a.start_at) / slot_duration.minutes).to_i.times do |i|
|
((a.end_at - a.start_at) / slot_duration.minutes).to_i.times do |i|
|
||||||
next unless (a.start_at + (i * slot_duration).minutes) > DateTime.current
|
next unless (a.start_at + (i * slot_duration).minutes) > DateTime.current
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
Fablab.fablabWithoutWallet = ('<%= Rails.application.secrets.fablab_without_wallet %>' === 'true');
|
Fablab.fablabWithoutWallet = ('<%= Rails.application.secrets.fablab_without_wallet %>' === 'true');
|
||||||
Fablab.bookSlotAtSameTime = ('<%= Setting.get('book_overlapping_slots') %>' === 'true');
|
Fablab.bookSlotAtSameTime = ('<%= Setting.get('book_overlapping_slots') %>' === 'true');
|
||||||
Fablab.eventsInCalendar = ('<%= Rails.application.secrets.events_in_calendar %>' === 'true');
|
Fablab.eventsInCalendar = ('<%= Rails.application.secrets.events_in_calendar %>' === 'true');
|
||||||
Fablab.slotDuration = parseInt("<%= ApplicationHelper::SLOT_DURATION %>", 10);
|
Fablab.slotDuration = parseInt("<%= Setting.get('slot_duration') %>", 10);
|
||||||
Fablab.featureTourDisplay = "<%= Rails.application.secrets.feature_tour_display %>";
|
Fablab.featureTourDisplay = "<%= Rails.application.secrets.feature_tour_display %>";
|
||||||
Fablab.disqusShortname = "<%= Rails.application.secrets.disqus_shortname %>";
|
Fablab.disqusShortname = "<%= Rails.application.secrets.disqus_shortname %>";
|
||||||
Fablab.defaultHost = "<%= Rails.application.secrets.default_host %>";
|
Fablab.defaultHost = "<%= Rails.application.secrets.default_host %>";
|
||||||
|
@ -16,7 +16,7 @@ wb.add_worksheet(name: t('export_availabilities.machines')) do |sheet|
|
|||||||
|
|
||||||
# data rows
|
# data rows
|
||||||
@availabilities.where(available_type: 'machines').order(:start_at).each do |a|
|
@availabilities.where(available_type: 'machines').order(:start_at).each do |a|
|
||||||
slot_duration = a.slot_duration || ApplicationHelper::SLOT_DURATION
|
slot_duration = a.slot_duration || Setting.get('slot_duration')
|
||||||
a.machines.each do |m|
|
a.machines.each do |m|
|
||||||
((a.end_at - a.start_at) / slot_duration.minutes).to_i.times do |i|
|
((a.end_at - a.start_at) / slot_duration.minutes).to_i.times do |i|
|
||||||
start_at = a.start_at + (i * slot_duration).minutes
|
start_at = a.start_at + (i * slot_duration).minutes
|
||||||
@ -84,7 +84,7 @@ if Rails.application.secrets.fablab_without_spaces != 'false'
|
|||||||
|
|
||||||
# data rows
|
# data rows
|
||||||
@availabilities.where(available_type: 'space').order(:start_at).each do |a|
|
@availabilities.where(available_type: 'space').order(:start_at).each do |a|
|
||||||
slot_duration = a.slot_duration || ApplicationHelper::SLOT_DURATION
|
slot_duration = a.slot_duration || Setting.get('slot_duration')
|
||||||
((a.end_at - a.start_at) / slot_duration.minutes).to_i.times do |i|
|
((a.end_at - a.start_at) / slot_duration.minutes).to_i.times do |i|
|
||||||
start_at = a.start_at + (i * slot_duration).minutes
|
start_at = a.start_at + (i * slot_duration).minutes
|
||||||
end_at = a.start_at + (i * slot_duration).minutes + slot_duration.minutes
|
end_at = a.start_at + (i * slot_duration).minutes + slot_duration.minutes
|
||||||
|
Loading…
x
Reference in New Issue
Block a user