Add dossier champs and annotations types
This commit is contained in:
parent
1c10718c11
commit
eb7aba18e6
25 changed files with 454 additions and 3 deletions
|
@ -31,6 +31,22 @@ class Api::V2::Schema < GraphQL::Schema
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
orphan_types Types::Champs::CarteChampType,
|
||||||
|
Types::Champs::CheckboxChampType,
|
||||||
|
Types::Champs::DateChampType,
|
||||||
|
Types::Champs::DecimalNumberChampType,
|
||||||
|
Types::Champs::DossierLinkChampType,
|
||||||
|
Types::Champs::IntegerNumberChampType,
|
||||||
|
Types::Champs::LinkedDropDownListChampType,
|
||||||
|
Types::Champs::MultipleDropDownListChampType,
|
||||||
|
Types::Champs::PieceJustificativeChampType,
|
||||||
|
Types::Champs::RepetitionChampType,
|
||||||
|
Types::Champs::SiretChampType,
|
||||||
|
Types::Champs::TextChampType,
|
||||||
|
Types::GeoAreas::ParcelleCadastraleType,
|
||||||
|
Types::GeoAreas::QuartierPrioritaireType,
|
||||||
|
Types::GeoAreas::SelectionUtilisateurType
|
||||||
|
|
||||||
def self.unauthorized_object(error)
|
def self.unauthorized_object(error)
|
||||||
# Add a top-level error to the response instead of returning nil:
|
# Add a top-level error to the response instead of returning nil:
|
||||||
raise GraphQL::ExecutionError.new("An object of type #{error.type.graphql_name} was hidden due to permissions", extensions: { code: :unauthorized })
|
raise GraphQL::ExecutionError.new("An object of type #{error.type.graphql_name} was hidden due to permissions", extensions: { code: :unauthorized })
|
||||||
|
|
|
@ -6,6 +6,17 @@ type Avis {
|
||||||
updatedAt: ISO8601DateTime!
|
updatedAt: ISO8601DateTime!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CarteChamp implements Champ {
|
||||||
|
geoAreas: [GeoArea!]!
|
||||||
|
id: ID!
|
||||||
|
label: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Champ {
|
||||||
|
id: ID!
|
||||||
|
label: String!
|
||||||
|
}
|
||||||
|
|
||||||
type ChampInfo {
|
type ChampInfo {
|
||||||
description: String
|
description: String
|
||||||
id: ID!
|
id: ID!
|
||||||
|
@ -14,6 +25,29 @@ type ChampInfo {
|
||||||
type: TypeDeChamp!
|
type: TypeDeChamp!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CheckboxChamp implements Champ {
|
||||||
|
id: ID!
|
||||||
|
label: String!
|
||||||
|
value: Boolean!
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
GeoJSON coordinates
|
||||||
|
"""
|
||||||
|
scalar Coordinates
|
||||||
|
|
||||||
|
type DateChamp implements Champ {
|
||||||
|
id: ID!
|
||||||
|
label: String!
|
||||||
|
value: ISO8601DateTime
|
||||||
|
}
|
||||||
|
|
||||||
|
type DecimalNumberChamp implements Champ {
|
||||||
|
id: ID!
|
||||||
|
label: String!
|
||||||
|
value: Float
|
||||||
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Une demarche
|
Une demarche
|
||||||
"""
|
"""
|
||||||
|
@ -119,7 +153,9 @@ enum DemarcheState {
|
||||||
Un dossier
|
Un dossier
|
||||||
"""
|
"""
|
||||||
type Dossier {
|
type Dossier {
|
||||||
|
annotations: [Champ!]!
|
||||||
avis: [Avis!]!
|
avis: [Avis!]!
|
||||||
|
champs: [Champ!]!
|
||||||
createdAt: ISO8601DateTime!
|
createdAt: ISO8601DateTime!
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -173,6 +209,12 @@ type DossierEdge {
|
||||||
node: Dossier
|
node: Dossier
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type DossierLinkChamp implements Champ {
|
||||||
|
dossier: Dossier
|
||||||
|
id: ID!
|
||||||
|
label: String!
|
||||||
|
}
|
||||||
|
|
||||||
enum DossierState {
|
enum DossierState {
|
||||||
"""
|
"""
|
||||||
Accepté
|
Accepté
|
||||||
|
@ -205,11 +247,50 @@ enum DossierState {
|
||||||
sans_suite
|
sans_suite
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface GeoArea {
|
||||||
|
geometry: GeoJSON!
|
||||||
|
id: ID
|
||||||
|
source: GeoAreaSource!
|
||||||
|
}
|
||||||
|
|
||||||
|
enum GeoAreaSource {
|
||||||
|
"""
|
||||||
|
translation missing: fr.activerecord.attributes.geo_area.source.cadastre
|
||||||
|
"""
|
||||||
|
cadastre
|
||||||
|
|
||||||
|
"""
|
||||||
|
translation missing: fr.activerecord.attributes.geo_area.source.parcelle_agricole
|
||||||
|
"""
|
||||||
|
parcelle_agricole
|
||||||
|
|
||||||
|
"""
|
||||||
|
translation missing: fr.activerecord.attributes.geo_area.source.quartier_prioritaire
|
||||||
|
"""
|
||||||
|
quartier_prioritaire
|
||||||
|
|
||||||
|
"""
|
||||||
|
translation missing: fr.activerecord.attributes.geo_area.source.selection_utilisateur
|
||||||
|
"""
|
||||||
|
selection_utilisateur
|
||||||
|
}
|
||||||
|
|
||||||
|
type GeoJSON {
|
||||||
|
coordinates: Coordinates!
|
||||||
|
type: String!
|
||||||
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
An ISO 8601-encoded datetime
|
An ISO 8601-encoded datetime
|
||||||
"""
|
"""
|
||||||
scalar ISO8601DateTime
|
scalar ISO8601DateTime
|
||||||
|
|
||||||
|
type IntegerNumberChamp implements Champ {
|
||||||
|
id: ID!
|
||||||
|
label: String!
|
||||||
|
value: Int
|
||||||
|
}
|
||||||
|
|
||||||
type Message {
|
type Message {
|
||||||
attachment: URL
|
attachment: URL
|
||||||
body: String!
|
body: String!
|
||||||
|
@ -245,11 +326,56 @@ type PageInfo {
|
||||||
startCursor: String
|
startCursor: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ParcelleCadastrale implements GeoArea {
|
||||||
|
codeArr: String!
|
||||||
|
codeCom: String!
|
||||||
|
codeDep: String!
|
||||||
|
feuille: Int!
|
||||||
|
geometry: GeoJSON!
|
||||||
|
id: ID
|
||||||
|
nomCom: String!
|
||||||
|
numero: String!
|
||||||
|
section: String!
|
||||||
|
source: GeoAreaSource!
|
||||||
|
surfaceIntersection: Float!
|
||||||
|
surfaceParcelle: Float!
|
||||||
|
}
|
||||||
|
|
||||||
|
type PersonneMorale {
|
||||||
|
adresse: String!
|
||||||
|
codeInseeLocalite: String!
|
||||||
|
codePostal: String!
|
||||||
|
complementAdresse: String!
|
||||||
|
libelleNaf: String!
|
||||||
|
localite: String!
|
||||||
|
naf: String!
|
||||||
|
nomVoie: String!
|
||||||
|
numeroVoie: String!
|
||||||
|
siegeSocial: String!
|
||||||
|
siret: String!
|
||||||
|
typeVoie: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type PieceJustificativeChamp implements Champ {
|
||||||
|
id: ID!
|
||||||
|
label: String!
|
||||||
|
url: URL
|
||||||
|
}
|
||||||
|
|
||||||
type Profile {
|
type Profile {
|
||||||
email: String!
|
email: String!
|
||||||
id: ID!
|
id: ID!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type QuartierPrioritaire implements GeoArea {
|
||||||
|
code: String!
|
||||||
|
commune: String!
|
||||||
|
geometry: GeoJSON!
|
||||||
|
id: ID
|
||||||
|
nom: String!
|
||||||
|
source: GeoAreaSource!
|
||||||
|
}
|
||||||
|
|
||||||
type Query {
|
type Query {
|
||||||
"""
|
"""
|
||||||
Informations concernant une démarche.
|
Informations concernant une démarche.
|
||||||
|
@ -272,6 +398,30 @@ type Query {
|
||||||
): Dossier!
|
): Dossier!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RepetitionChamp implements Champ {
|
||||||
|
champs: [Champ!]!
|
||||||
|
id: ID!
|
||||||
|
label: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type SelectionUtilisateur implements GeoArea {
|
||||||
|
geometry: GeoJSON!
|
||||||
|
id: ID
|
||||||
|
source: GeoAreaSource!
|
||||||
|
}
|
||||||
|
|
||||||
|
type SiretChamp implements Champ {
|
||||||
|
etablissement: PersonneMorale
|
||||||
|
id: ID!
|
||||||
|
label: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type TextChamp implements Champ {
|
||||||
|
id: ID!
|
||||||
|
label: String!
|
||||||
|
value: String
|
||||||
|
}
|
||||||
|
|
||||||
enum TypeDeChamp {
|
enum TypeDeChamp {
|
||||||
"""
|
"""
|
||||||
Adresse
|
Adresse
|
||||||
|
|
40
app/graphql/types/champ_type.rb
Normal file
40
app/graphql/types/champ_type.rb
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
module Types
|
||||||
|
module ChampType
|
||||||
|
include Types::BaseInterface
|
||||||
|
|
||||||
|
global_id_field :id
|
||||||
|
field :label, String, null: false, method: :libelle
|
||||||
|
field :string_value, String, null: true, method: :for_api_v2
|
||||||
|
|
||||||
|
definition_methods do
|
||||||
|
def resolve_type(object, context)
|
||||||
|
case object
|
||||||
|
when ::Champs::EngagementChamp, ::Champs::YesNoChamp, ::Champs::CheckboxChamp
|
||||||
|
Types::Champs::CheckboxChampType
|
||||||
|
when ::Champs::DateChamp, ::Champs::DatetimeChamp
|
||||||
|
Types::Champs::DateChampType
|
||||||
|
when ::Champs::DossierLinkChamp
|
||||||
|
Types::Champs::DossierLinkChampType
|
||||||
|
when ::Champs::PieceJustificativeChamp
|
||||||
|
Types::Champs::PieceJustificativeChampType
|
||||||
|
when ::Champs::CarteChamp
|
||||||
|
Types::Champs::CarteChampType
|
||||||
|
when ::Champs::NumberChamp, ::Champs::IntegerNumberChamp
|
||||||
|
Types::Champs::IntegerNumberChampType
|
||||||
|
when ::Champs::DecimalNumberChamp
|
||||||
|
Types::Champs::DecimalNumberChampType
|
||||||
|
when ::Champs::SiretChamp
|
||||||
|
Types::Champs::SiretChampType
|
||||||
|
when ::Champs::RepetitionChamp
|
||||||
|
Types::Champs::RepetitionChampType
|
||||||
|
when ::Champs::MultipleDropDownListChamp
|
||||||
|
Types::Champs::MultipleDropDownListChampType
|
||||||
|
when ::Champs::LinkedDropDownListChamp
|
||||||
|
Types::Champs::LinkedDropDownListChampType
|
||||||
|
else
|
||||||
|
Types::Champs::TextChampType
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
11
app/graphql/types/champs/carte_champ_type.rb
Normal file
11
app/graphql/types/champs/carte_champ_type.rb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
module Types::Champs
|
||||||
|
class CarteChampType < Types::BaseObject
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :geo_areas, [Types::GeoAreaType], null: false
|
||||||
|
|
||||||
|
def geo_areas
|
||||||
|
Loaders::Association.for(Champs::CarteChamp, :geo_areas).load(object)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
16
app/graphql/types/champs/checkbox_champ_type.rb
Normal file
16
app/graphql/types/champs/checkbox_champ_type.rb
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
module Types::Champs
|
||||||
|
class CheckboxChampType < Types::BaseObject
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :value, Boolean, null: false
|
||||||
|
|
||||||
|
def value
|
||||||
|
case object.value
|
||||||
|
when 'true', 'on', '1'
|
||||||
|
true
|
||||||
|
else
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
13
app/graphql/types/champs/date_champ_type.rb
Normal file
13
app/graphql/types/champs/date_champ_type.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
module Types::Champs
|
||||||
|
class DateChampType < Types::BaseObject
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :value, GraphQL::Types::ISO8601DateTime, null: true
|
||||||
|
|
||||||
|
def value
|
||||||
|
if object.value.present?
|
||||||
|
Time.zone.parse(object.value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
13
app/graphql/types/champs/decimal_number_champ_type.rb
Normal file
13
app/graphql/types/champs/decimal_number_champ_type.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
module Types::Champs
|
||||||
|
class DecimalNumberChampType < Types::BaseObject
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :value, Float, null: true
|
||||||
|
|
||||||
|
def value
|
||||||
|
if object.value.present?
|
||||||
|
object.value.to_f
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
13
app/graphql/types/champs/dossier_link_champ_type.rb
Normal file
13
app/graphql/types/champs/dossier_link_champ_type.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
module Types::Champs
|
||||||
|
class DossierLinkChampType < Types::BaseObject
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :dossier, Types::DossierType, null: true
|
||||||
|
|
||||||
|
def dossier
|
||||||
|
if object.value.present?
|
||||||
|
Loaders::Record.for(Dossier).load(object.value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
13
app/graphql/types/champs/integer_number_champ_type.rb
Normal file
13
app/graphql/types/champs/integer_number_champ_type.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
module Types::Champs
|
||||||
|
class IntegerNumberChampType < Types::BaseObject
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :value, Int, null: true
|
||||||
|
|
||||||
|
def value
|
||||||
|
if object.value.present?
|
||||||
|
object.value.to_i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,8 @@
|
||||||
|
module Types::Champs
|
||||||
|
class LinkedDropDownListChampType < Types::BaseObject
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :primary_value, String, null: true
|
||||||
|
field :secondary_value, String, null: true
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,7 @@
|
||||||
|
module Types::Champs
|
||||||
|
class MultipleDropDownListChampType < Types::BaseObject
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :values, [String], null: false, method: :selected_options
|
||||||
|
end
|
||||||
|
end
|
10
app/graphql/types/champs/piece_justificative_champ_type.rb
Normal file
10
app/graphql/types/champs/piece_justificative_champ_type.rb
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
module Types::Champs
|
||||||
|
class PieceJustificativeChampType < Types::BaseObject
|
||||||
|
include Rails.application.routes.url_helpers
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :url, Types::URL, null: true, extensions: [
|
||||||
|
{ Extensions::Attachment => { attachment: :piece_justificative_file } }
|
||||||
|
]
|
||||||
|
end
|
||||||
|
end
|
11
app/graphql/types/champs/repetition_champ_type.rb
Normal file
11
app/graphql/types/champs/repetition_champ_type.rb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
module Types::Champs
|
||||||
|
class RepetitionChampType < Types::BaseObject
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :champs, [Types::ChampType], null: false
|
||||||
|
|
||||||
|
def champs
|
||||||
|
Loaders::Association.for(object.class, :champs).load(object)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
13
app/graphql/types/champs/siret_champ_type.rb
Normal file
13
app/graphql/types/champs/siret_champ_type.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
module Types::Champs
|
||||||
|
class SiretChampType < Types::BaseObject
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :etablissement, Types::PersonneMoraleType, null: true
|
||||||
|
|
||||||
|
def etablissement
|
||||||
|
if object.etablissement_id.present?
|
||||||
|
Loaders::Record.for(Etablissement).load(object.etablissement_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
7
app/graphql/types/champs/text_champ_type.rb
Normal file
7
app/graphql/types/champs/text_champ_type.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
module Types::Champs
|
||||||
|
class TextChampType < Types::BaseObject
|
||||||
|
implements Types::ChampType
|
||||||
|
|
||||||
|
field :value, String, null: true
|
||||||
|
end
|
||||||
|
end
|
|
@ -27,6 +27,9 @@ module Types
|
||||||
field :usager, Types::ProfileType, null: false
|
field :usager, Types::ProfileType, null: false
|
||||||
field :instructeurs, [Types::ProfileType], null: false
|
field :instructeurs, [Types::ProfileType], null: false
|
||||||
|
|
||||||
|
field :champs, [Types::ChampType], null: false
|
||||||
|
field :annotations, [Types::ChampType], null: false
|
||||||
|
|
||||||
field :messages, [Types::MessageType], null: false
|
field :messages, [Types::MessageType], null: false
|
||||||
field :avis, [Types::AvisType], null: false
|
field :avis, [Types::AvisType], null: false
|
||||||
|
|
||||||
|
@ -50,6 +53,14 @@ module Types
|
||||||
Loaders::Association.for(object.class, avis: [:instructeur, :claimant]).load(object)
|
Loaders::Association.for(object.class, avis: [:instructeur, :claimant]).load(object)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def champs
|
||||||
|
Loaders::Association.for(object.class, :champs).load(object)
|
||||||
|
end
|
||||||
|
|
||||||
|
def annotations
|
||||||
|
Loaders::Association.for(object.class, :champs_private).load(object)
|
||||||
|
end
|
||||||
|
|
||||||
def self.authorized?(object, context)
|
def self.authorized?(object, context)
|
||||||
authorized_demarche?(object.procedure, context)
|
authorized_demarche?(object.procedure, context)
|
||||||
end
|
end
|
||||||
|
|
30
app/graphql/types/geo_area_type.rb
Normal file
30
app/graphql/types/geo_area_type.rb
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
module Types
|
||||||
|
module GeoAreaType
|
||||||
|
include Types::BaseInterface
|
||||||
|
|
||||||
|
class GeoAreaSource < Types::BaseEnum
|
||||||
|
GeoArea.sources.each do |symbol_name, string_name|
|
||||||
|
value(string_name,
|
||||||
|
I18n.t(symbol_name, scope: [:activerecord, :attributes, :geo_area, :source]),
|
||||||
|
value: symbol_name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
global_id_field :id
|
||||||
|
field :source, GeoAreaSource, null: false
|
||||||
|
field :geometry, Types::GeoJSON, null: false
|
||||||
|
|
||||||
|
definition_methods do
|
||||||
|
def resolve_type(object, context)
|
||||||
|
case object.source
|
||||||
|
when GeoArea.sources.fetch(:cadastre)
|
||||||
|
Types::GeoAreas::ParcelleCadastraleType
|
||||||
|
when GeoArea.sources.fetch(:quartier_prioritaire)
|
||||||
|
Types::GeoAreas::QuartierPrioritaireType
|
||||||
|
when GeoArea.sources.fetch(:selection_utilisateur)
|
||||||
|
Types::GeoAreas::SelectionUtilisateurType
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
15
app/graphql/types/geo_areas/parcelle_cadastrale_type.rb
Normal file
15
app/graphql/types/geo_areas/parcelle_cadastrale_type.rb
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
module Types::GeoAreas
|
||||||
|
class ParcelleCadastraleType < Types::BaseObject
|
||||||
|
implements Types::GeoAreaType
|
||||||
|
|
||||||
|
field :surface_intersection, Float, null: false
|
||||||
|
field :surface_parcelle, Float, null: false
|
||||||
|
field :numero, String, null: false
|
||||||
|
field :feuille, Int, null: false
|
||||||
|
field :section, String, null: false
|
||||||
|
field :code_dep, String, null: false
|
||||||
|
field :nom_com, String, null: false
|
||||||
|
field :code_com, String, null: false
|
||||||
|
field :code_arr, String, null: false
|
||||||
|
end
|
||||||
|
end
|
9
app/graphql/types/geo_areas/quartier_prioritaire_type.rb
Normal file
9
app/graphql/types/geo_areas/quartier_prioritaire_type.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
module Types::GeoAreas
|
||||||
|
class QuartierPrioritaireType < Types::BaseObject
|
||||||
|
implements Types::GeoAreaType
|
||||||
|
|
||||||
|
field :code, String, null: false
|
||||||
|
field :nom, String, null: false
|
||||||
|
field :commune, String, null: false
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
module Types::GeoAreas
|
||||||
|
class SelectionUtilisateurType < Types::BaseObject
|
||||||
|
implements Types::GeoAreaType
|
||||||
|
end
|
||||||
|
end
|
14
app/graphql/types/geo_json.rb
Normal file
14
app/graphql/types/geo_json.rb
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
module Types
|
||||||
|
class GeoJSON < Types::BaseObject
|
||||||
|
class CoordinatesType < Types::BaseScalar
|
||||||
|
description "GeoJSON coordinates"
|
||||||
|
|
||||||
|
def self.coerce_result(ruby_value, context)
|
||||||
|
ruby_value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
field :type, String, null: false
|
||||||
|
field :coordinates, CoordinatesType, null: false
|
||||||
|
end
|
||||||
|
end
|
16
app/graphql/types/personne_morale_type.rb
Normal file
16
app/graphql/types/personne_morale_type.rb
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
module Types
|
||||||
|
class PersonneMoraleType < Types::BaseObject
|
||||||
|
field :siret, String, null: false
|
||||||
|
field :siege_social, String, null: false
|
||||||
|
field :naf, String, null: false
|
||||||
|
field :libelle_naf, String, null: false
|
||||||
|
field :adresse, String, null: false
|
||||||
|
field :numero_voie, String, null: false
|
||||||
|
field :type_voie, String, null: false
|
||||||
|
field :nom_voie, String, null: false
|
||||||
|
field :complement_adresse, String, null: false
|
||||||
|
field :code_postal, String, null: false
|
||||||
|
field :localite, String, null: false
|
||||||
|
field :code_insee_localite, String, null: false
|
||||||
|
end
|
||||||
|
end
|
|
@ -54,6 +54,10 @@ class Champ < ApplicationRecord
|
||||||
value
|
value
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def for_api_v2
|
||||||
|
to_s
|
||||||
|
end
|
||||||
|
|
||||||
def for_tag
|
def for_tag
|
||||||
value.present? ? value.to_s : ''
|
value.present? ? value.to_s : ''
|
||||||
end
|
end
|
||||||
|
@ -62,6 +66,10 @@ class Champ < ApplicationRecord
|
||||||
:value
|
:value
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def to_typed_id
|
||||||
|
type_de_champ.to_typed_id
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def needs_dossier_id?
|
def needs_dossier_id?
|
||||||
|
|
|
@ -21,6 +21,10 @@ class Champs::YesNoChamp < Champ
|
||||||
value == 'true'
|
value == 'true'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def for_api_v2
|
||||||
|
true? ? 'true' : 'false'
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def processed_value
|
def processed_value
|
||||||
|
|
|
@ -163,9 +163,7 @@ class Dossier < ApplicationRecord
|
||||||
}
|
}
|
||||||
|
|
||||||
scope :for_procedure, -> (procedure) { includes(:user, :groupe_instructeur).where(groupe_instructeurs: { procedure: procedure }) }
|
scope :for_procedure, -> (procedure) { includes(:user, :groupe_instructeur).where(groupe_instructeurs: { procedure: procedure }) }
|
||||||
scope :for_api_v2, -> {
|
scope :for_api_v2, -> { includes(procedure: [:administrateurs], etablissement: [], individual: []) }
|
||||||
includes(procedure: [:administrateurs], etablissement: [], individual: [])
|
|
||||||
}
|
|
||||||
|
|
||||||
accepts_nested_attributes_for :individual
|
accepts_nested_attributes_for :individual
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue