demarches-normaliennes/app/models/zone.rb

36 lines
990 B
Ruby
Raw Normal View History

2021-12-01 20:00:29 +01:00
# == Schema Information
#
# Table name: zones
#
# id :bigint not null, primary key
# acronym :string not null
2021-12-01 20:00:29 +01:00
# label :string
# created_at :datetime not null
# updated_at :datetime not null
#
class Zone < ApplicationRecord
validates :acronym, presence: true, uniqueness: true
2022-08-11 19:05:12 +02:00
has_many :labels, -> { order(designated_on: :desc) }, class_name: 'ZoneLabel', inverse_of: :zone
2022-08-24 12:39:07 +02:00
has_and_belongs_to_many :procedures, -> { order(published_at: :desc) }, inverse_of: :zone
2022-08-11 19:05:12 +02:00
2022-09-26 15:53:28 +02:00
def current_label
2022-08-11 19:05:12 +02:00
labels.first.name
end
2022-08-12 12:24:47 +02:00
def label_at(date)
2022-09-20 15:00:15 +02:00
label = labels.where('designated_on < ?', date)&.first || labels.last
label.name
2022-08-12 12:24:47 +02:00
end
def available_at?(date)
label_at(date) != 'Non attribué'
end
def self.available_at(date)
Zone.all.filter { |zone| zone.available_at?(date) }.sort_by { |zone| zone.label_at(date) }
2022-08-24 15:16:58 +02:00
.map do |zone|
OpenStruct.new(id: zone.id, label: zone.label_at(date))
end
end
2021-12-01 20:00:29 +01:00
end