demarches-normaliennes/app/serializers/champ_serializer.rb

98 lines
1.8 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2018-02-09 17:38:30 +01:00
class ChampSerializer < ActiveModel::Serializer
include Rails.application.routes.url_helpers
2018-02-09 17:38:30 +01:00
attributes :value
has_one :type_de_champ
2018-11-13 18:48:04 +01:00
has_many :geo_areas, if: :include_geo_areas?
has_one :etablissement, if: :include_etablissement?
has_one :entreprise, if: :include_etablissement?
2019-07-11 10:28:44 +02:00
has_many :rows, serializer: RowSerializer, if: :include_rows?
2018-11-13 18:48:04 +01:00
def value
case object
2018-11-27 15:55:14 +01:00
when GeoArea
object.geometry
2018-11-13 18:48:04 +01:00
else
2018-12-28 17:59:14 +01:00
object.for_api
end
end
def type_de_champ
case object
2018-11-27 15:55:14 +01:00
when GeoArea
legacy_type_de_champ
else
object.type_de_champ
end
end
2018-11-13 18:48:04 +01:00
def etablissement
object.etablissement
end
def entreprise
object.etablissement&.entreprise
end
class Row < Hashie::Dash
property :index
property :champs
def read_attribute_for_serialization(attribute)
self[attribute]
end
end
2019-07-11 10:28:44 +02:00
def rows
object.dossier
.champs_for_revision(scope: object.type_de_champ)
.group_by(&:row_id)
.values
.map.with_index(1) { |champs, index| Row.new(index:, champs:) }
2019-07-11 10:28:44 +02:00
end
2018-11-13 18:48:04 +01:00
def include_etablissement?
object.is_a?(Champs::SiretChamp)
end
def include_geo_areas?
object.is_a?(Champs::CarteChamp)
end
2019-07-11 10:28:44 +02:00
def include_rows?
object.is_a?(Champs::RepetitionChamp)
end
private
def legacy_type_de_champ
{
id: -1,
libelle: legacy_carto_libelle,
type_champ: legacy_carto_type_champ,
order_place: -1,
description: ''
}
end
def legacy_carto_libelle
2018-11-27 15:55:14 +01:00
if object.source == GeoArea.sources.fetch(:selection_utilisateur)
'user geometry'
else
2018-11-27 15:55:14 +01:00
object.source.to_s.tr('_', ' ')
end
end
def legacy_carto_type_champ
2018-11-27 15:55:14 +01:00
if object.source == GeoArea.sources.fetch(:selection_utilisateur)
'user_geometry'
else
2018-11-27 15:55:14 +01:00
object.source.to_s
end
end
2018-02-09 17:38:30 +01:00
end