Merge pull request #2842 from tchak/carto-champ-models
Add carte champ model
This commit is contained in:
commit
3786a718ff
9 changed files with 94 additions and 3 deletions
|
@ -2,7 +2,8 @@ module TypeDeChampHelper
|
|||
TOGGLES = {
|
||||
TypeDeChamp.type_champs.fetch(:piece_justificative) => :champ_pj?,
|
||||
TypeDeChamp.type_champs.fetch(:siret) => :champ_siret?,
|
||||
TypeDeChamp.type_champs.fetch(:linked_drop_down_list) => :champ_linked_dropdown?
|
||||
TypeDeChamp.type_champs.fetch(:linked_drop_down_list) => :champ_linked_dropdown?,
|
||||
TypeDeChamp.type_champs.fetch(:carte) => :champ_carte?
|
||||
}
|
||||
|
||||
def tdc_options
|
||||
|
|
29
app/models/champs/carte_champ.rb
Normal file
29
app/models/champs/carte_champ.rb
Normal file
|
@ -0,0 +1,29 @@
|
|||
class Champs::CarteChamp < Champ
|
||||
has_many :geo_areas, dependent: :destroy
|
||||
|
||||
# We are not using scopes here as we want to access
|
||||
# the following collections on unsaved records.
|
||||
def cadastres
|
||||
geo_areas.select do |area|
|
||||
area.source == GeoArea.sources.fetch(:cadastre)
|
||||
end
|
||||
end
|
||||
|
||||
def quartiers_prioritaires
|
||||
geo_areas.select do |area|
|
||||
area.source == GeoArea.sources.fetch(:quartier_prioritaire)
|
||||
end
|
||||
end
|
||||
|
||||
def position
|
||||
if dossier.present?
|
||||
dossier.geo_position
|
||||
else
|
||||
lon = "2.428462"
|
||||
lat = "46.538192"
|
||||
zoom = "13"
|
||||
|
||||
{ lon: lon, lat: lat, zoom: zoom }
|
||||
end
|
||||
end
|
||||
end
|
26
app/models/geo_area.rb
Normal file
26
app/models/geo_area.rb
Normal file
|
@ -0,0 +1,26 @@
|
|||
class GeoArea < ApplicationRecord
|
||||
belongs_to :champ
|
||||
|
||||
store :properties, accessors: [
|
||||
:surface_intersection,
|
||||
:surface_parcelle,
|
||||
:numero,
|
||||
:feuille,
|
||||
:section,
|
||||
:code_dep,
|
||||
:nom_com,
|
||||
:code_com,
|
||||
:code_arr,
|
||||
:code,
|
||||
:nom,
|
||||
:commune
|
||||
]
|
||||
|
||||
enum source: {
|
||||
quartier_prioritaire: 'quartier_prioritaire',
|
||||
cadastre: 'cadastre'
|
||||
}
|
||||
|
||||
scope :quartiers_prioritaires, -> { where(source: sources.fetch(:quartier_prioritaire)) }
|
||||
scope :cadastres, -> { where(source: sources.fetch(:cadastre)) }
|
||||
end
|
|
@ -25,11 +25,14 @@ class TypeDeChamp < ApplicationRecord
|
|||
explication: 'explication',
|
||||
dossier_link: 'dossier_link',
|
||||
piece_justificative: 'piece_justificative',
|
||||
siret: 'siret'
|
||||
siret: 'siret',
|
||||
carte: 'carte'
|
||||
}
|
||||
|
||||
belongs_to :procedure
|
||||
|
||||
store :options, accessors: [:cadastres, :quartiers_prioritaires]
|
||||
|
||||
after_initialize :set_dynamic_type
|
||||
|
||||
attr_reader :dynamic_type
|
||||
|
|
2
app/models/types_de_champ/carte_type_de_champ.rb
Normal file
2
app/models/types_de_champ/carte_type_de_champ.rb
Normal file
|
@ -0,0 +1,2 @@
|
|||
class TypesDeChamp::CarteTypeDeChamp < TypesDeChamp::TypeDeChampBase
|
||||
end
|
|
@ -13,6 +13,8 @@ Flipflop.configure do
|
|||
title: "Champ SIRET"
|
||||
feature :champ_linked_dropdown,
|
||||
title: "Champ double menu déroulant"
|
||||
feature :champ_carte,
|
||||
title: "Champ Carte"
|
||||
end
|
||||
|
||||
feature :web_hook
|
||||
|
|
14
db/migrate/20181010183331_create_geo_areas.rb
Normal file
14
db/migrate/20181010183331_create_geo_areas.rb
Normal file
|
@ -0,0 +1,14 @@
|
|||
class CreateGeoAreas < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :geo_areas do |t|
|
||||
t.string :source, index: true
|
||||
|
||||
t.jsonb :geometry
|
||||
t.jsonb :properties
|
||||
|
||||
t.references :champ, foreign_key: true, index: true
|
||||
end
|
||||
|
||||
add_column :types_de_champ, :options, :jsonb
|
||||
end
|
||||
end
|
13
db/schema.rb
13
db/schema.rb
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2018_10_10_070424) do
|
||||
ActiveRecord::Schema.define(version: 2018_10_10_183331) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -342,6 +342,15 @@ ActiveRecord::Schema.define(version: 2018_10_10_070424) do
|
|||
t.index ["user_id"], name: "index_france_connect_informations_on_user_id"
|
||||
end
|
||||
|
||||
create_table "geo_areas", force: :cascade do |t|
|
||||
t.string "source"
|
||||
t.jsonb "geometry"
|
||||
t.jsonb "properties"
|
||||
t.bigint "champ_id"
|
||||
t.index ["champ_id"], name: "index_geo_areas_on_champ_id"
|
||||
t.index ["source"], name: "index_geo_areas_on_source"
|
||||
end
|
||||
|
||||
create_table "gestionnaires", id: :serial, force: :cascade do |t|
|
||||
t.string "email", default: "", null: false
|
||||
t.string "encrypted_password", default: "", null: false
|
||||
|
@ -544,6 +553,7 @@ ActiveRecord::Schema.define(version: 2018_10_10_070424) do
|
|||
t.boolean "private", default: false, null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.jsonb "options"
|
||||
t.index ["private"], name: "index_types_de_champ_on_private"
|
||||
end
|
||||
|
||||
|
@ -608,6 +618,7 @@ ActiveRecord::Schema.define(version: 2018_10_10_070424) do
|
|||
add_foreign_key "commentaires", "dossiers"
|
||||
add_foreign_key "dossiers", "users"
|
||||
add_foreign_key "feedbacks", "users"
|
||||
add_foreign_key "geo_areas", "champs"
|
||||
add_foreign_key "initiated_mails", "procedures"
|
||||
add_foreign_key "procedure_paths", "administrateurs"
|
||||
add_foreign_key "procedure_paths", "procedures"
|
||||
|
|
|
@ -84,6 +84,9 @@ FactoryBot.define do
|
|||
factory :type_de_champ_siret do
|
||||
type_champ { TypeDeChamp.type_champs.fetch(:siret) }
|
||||
end
|
||||
factory :type_de_champ_carte do
|
||||
type_champ { TypeDeChamp.type_champs.fetch(:carte) }
|
||||
end
|
||||
|
||||
trait :private do
|
||||
private { true }
|
||||
|
|
Loading…
Reference in a new issue