- Refactor code carte
- Delete auto-comments when edit carte and description
This commit is contained in:
parent
c461d58297
commit
5513504555
9 changed files with 74 additions and 119 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -29,4 +29,4 @@ doc/*.svg
|
||||||
rubocop.html
|
rubocop.html
|
||||||
config/france_connect.yml
|
config/france_connect.yml
|
||||||
uploads/*
|
uploads/*
|
||||||
|
coverage/**/*
|
||||||
|
|
|
@ -6,7 +6,7 @@ function initCarto() {
|
||||||
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
|
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
|
||||||
});
|
});
|
||||||
|
|
||||||
position = get_position() || default_position();
|
position = get_position() || default_gestionnaire_position();
|
||||||
|
|
||||||
map = L.map("map", {
|
map = L.map("map", {
|
||||||
center: new L.LatLng(position.lat, position.lon),
|
center: new L.LatLng(position.lat, position.lon),
|
||||||
|
@ -36,13 +36,13 @@ function initCarto() {
|
||||||
map.fitBounds(freeDraw.polygons[0].getBounds());
|
map.fitBounds(freeDraw.polygons[0].getBounds());
|
||||||
}
|
}
|
||||||
else if (position.lat == LAT && position.lon == LON)
|
else if (position.lat == LAT && position.lon == LON)
|
||||||
map.setView(new L.LatLng(position.lat, position.lon), 5);
|
map.setView(new L.LatLng(position.lat, position.lon), position.zoom);
|
||||||
|
|
||||||
add_event_freeDraw();
|
add_event_freeDraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
function default_position() {
|
function default_gestionnaire_position() {
|
||||||
return {lon: LON, lat: LAT, zoom: 13}
|
return {lon: LON, lat: LAT, zoom: 5}
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_external_data(latLngs) {
|
function get_external_data(latLngs) {
|
||||||
|
@ -50,17 +50,15 @@ function get_external_data(latLngs) {
|
||||||
display_qp(get_qp(latLngs));
|
display_qp(get_qp(latLngs));
|
||||||
|
|
||||||
if (cadastre_active()) {
|
if (cadastre_active()) {
|
||||||
cadastre_list = [];
|
|
||||||
|
|
||||||
polygons = {"type": "FeatureCollection", "features": []};
|
polygons = {"type": "FeatureCollection", "features": []};
|
||||||
|
|
||||||
for (i = 0; i < latLngs.length; i++)
|
for (i = 0; i < latLngs.length; i++)
|
||||||
polygons.features.push(feature_polygon_latLngs(latLngs[i]))
|
polygons.features.push(feature_polygon_latLngs(latLngs[i]))
|
||||||
|
|
||||||
|
cadastre_list = [{zoom_error: true}];
|
||||||
|
|
||||||
if (turf.area(polygons) < 300000)
|
if (turf.area(polygons) < 300000)
|
||||||
cadastre_list = get_cadastre(latLngs);
|
cadastre_list = get_cadastre(latLngs);
|
||||||
else
|
|
||||||
cadastre_list = [{zoom_error: true}];
|
|
||||||
|
|
||||||
display_cadastre(cadastre_list);
|
display_cadastre(cadastre_list);
|
||||||
}
|
}
|
||||||
|
@ -108,7 +106,6 @@ function get_position() {
|
||||||
async: false
|
async: false
|
||||||
}).done(function (data) {
|
}).done(function (data) {
|
||||||
position = data
|
position = data
|
||||||
position.zoom = default_position().zoom
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return position;
|
return position;
|
||||||
|
|
|
@ -19,62 +19,39 @@ class Users::CarteController < UsersController
|
||||||
dossier.cadastres.map(&:destroy)
|
dossier.cadastres.map(&:destroy)
|
||||||
|
|
||||||
unless params[:json_latlngs].blank?
|
unless params[:json_latlngs].blank?
|
||||||
if dossier.procedure.module_api_carto.quartiers_prioritaires?
|
ModuleApiCartoService.save_qp! dossier, params[:json_latlngs]
|
||||||
qp_list = generate_qp JSON.parse(params[:json_latlngs])
|
ModuleApiCartoService.save_cadastre! dossier, params[:json_latlngs]
|
||||||
|
|
||||||
qp_list.each do |key, qp|
|
|
||||||
qp.merge!({dossier_id: dossier.id})
|
|
||||||
qp[:geometry] = qp[:geometry].to_json
|
|
||||||
QuartierPrioritaire.create(qp)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if dossier.procedure.module_api_carto.cadastre?
|
|
||||||
cadastre_list = generate_cadastre JSON.parse(params[:json_latlngs])
|
|
||||||
|
|
||||||
cadastre_list.each do |cadastre|
|
|
||||||
cadastre.merge!({dossier_id: dossier.id})
|
|
||||||
cadastre[:geometry] = cadastre[:geometry].to_json
|
|
||||||
Cadastre.create(cadastre)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
dossier.update_attributes(json_latlngs: params[:json_latlngs])
|
dossier.update_attributes(json_latlngs: params[:json_latlngs])
|
||||||
|
|
||||||
if dossier.draft?
|
controller = :recapitulatif
|
||||||
redirect_to url_for(controller: :description, action: :show, dossier_id: params[:dossier_id])
|
controller = :description if dossier.draft?
|
||||||
else
|
|
||||||
commentaire_params = {
|
redirect_to url_for(controller: controller, action: :show, dossier_id: params[:dossier_id])
|
||||||
email: 'Modification localisation',
|
|
||||||
body: 'La localisation de la demande a été modifiée. Merci de le prendre en compte.',
|
|
||||||
dossier_id: dossier.id
|
|
||||||
}
|
|
||||||
Commentaire.create commentaire_params
|
|
||||||
redirect_to url_for(controller: :recapitulatif, action: :show, dossier_id: params[:dossier_id])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_position
|
def get_position
|
||||||
tmp_position = Carto::Geocodeur.convert_adresse_to_point(current_user_dossier.etablissement.geo_adresse)
|
point = Carto::Geocodeur.convert_adresse_to_point(current_user_dossier.etablissement.geo_adresse)
|
||||||
|
|
||||||
if !tmp_position.point.nil?
|
lon = '2.428462'
|
||||||
render json: {lon: tmp_position.point.x.to_s, lat: tmp_position.point.y.to_s, dossier_id: params[:dossier_id]}
|
lat = '46.538192'
|
||||||
else
|
zoom = '13'
|
||||||
render json: {lon: '0', lat: '0', dossier_id: params[:dossier_id]}
|
|
||||||
|
unless point.nil?
|
||||||
|
lon = point.x.to_s
|
||||||
|
lat = point.y.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
|
render json: {lon: lon, lat: lat, zoom: zoom, dossier_id: params[:dossier_id]}
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_qp
|
def get_qp
|
||||||
qp = generate_qp JSON.parse(params[:coordinates])
|
render json: {quartier_prioritaires: ModuleApiCartoService.generate_qp(JSON.parse(params[:coordinates]))}
|
||||||
|
|
||||||
render json: {quartier_prioritaires: qp}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_cadastre
|
def get_cadastre
|
||||||
cadastres = generate_cadastre JSON.parse(params[:coordinates])
|
render json: {cadastres: ModuleApiCartoService.generate_cadastre(JSON.parse(params[:coordinates]))}
|
||||||
|
|
||||||
render json: {cadastres: cadastres}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.route_authorization
|
def self.route_authorization
|
||||||
|
@ -83,28 +60,4 @@ class Users::CarteController < UsersController
|
||||||
api_carto: true
|
api_carto: true
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def generate_qp coordinates
|
|
||||||
qp = {}
|
|
||||||
|
|
||||||
coordinates.each_with_index do |coordinate, index|
|
|
||||||
coordinate = coordinates[index].map { |latlng| [latlng['lng'], latlng['lat']] }
|
|
||||||
qp = qp.merge CARTO::SGMAP::QuartiersPrioritaires::Adapter.new(coordinate).to_params
|
|
||||||
end
|
|
||||||
|
|
||||||
qp
|
|
||||||
end
|
|
||||||
|
|
||||||
def generate_cadastre coordinates
|
|
||||||
cadastre = []
|
|
||||||
|
|
||||||
coordinates.each_with_index do |coordinate, index|
|
|
||||||
coordinate = coordinates[index].map { |latlng| [latlng['lng'], latlng['lat']] }
|
|
||||||
cadastre << CARTO::SGMAP::Cadastre::Adapter.new(coordinate).to_params
|
|
||||||
end
|
|
||||||
|
|
||||||
cadastre.flatten
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -50,13 +50,7 @@ class Users::DescriptionController < UsersController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if !@dossier.draft?
|
if @dossier.draft?
|
||||||
commentaire = Commentaire.create
|
|
||||||
commentaire.email = 'Modification détails'
|
|
||||||
commentaire.body = 'Les informations détaillées de la demande ont été modifiées. Merci de le prendre en compte.'
|
|
||||||
commentaire.dossier = @dossier
|
|
||||||
commentaire.save
|
|
||||||
else
|
|
||||||
@dossier.initiated!
|
@dossier.initiated!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
37
app/services/module_api_carto_service.rb
Normal file
37
app/services/module_api_carto_service.rb
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
class ModuleApiCartoService
|
||||||
|
def self.save_qp! dossier, json_latlngs
|
||||||
|
if dossier.procedure.module_api_carto.quartiers_prioritaires?
|
||||||
|
qp_list = generate_qp JSON.parse(json_latlngs)
|
||||||
|
|
||||||
|
qp_list.each_value do |qp|
|
||||||
|
qp.merge!({dossier_id: dossier.id})
|
||||||
|
qp[:geometry] = qp[:geometry].to_json
|
||||||
|
QuartierPrioritaire.create(qp)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.save_cadastre! dossier, json_latlngs
|
||||||
|
if dossier.procedure.module_api_carto.cadastre?
|
||||||
|
cadastre_list = generate_cadastre JSON.parse(json_latlngs)
|
||||||
|
|
||||||
|
cadastre_list.each do |cadastre|
|
||||||
|
cadastre.merge!({dossier_id: dossier.id})
|
||||||
|
cadastre[:geometry] = cadastre[:geometry].to_json
|
||||||
|
Cadastre.create(cadastre)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.generate_qp coordinates
|
||||||
|
coordinates.inject({}) { |acc, coordinate|
|
||||||
|
acc.merge CARTO::SGMAP::QuartiersPrioritaires::Adapter.new(
|
||||||
|
coordinate.map { |element| [element['lng'], element['lat']] }).to_params }
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.generate_cadastre coordinates
|
||||||
|
(coordinates.inject([]) { |acc, coordinate|
|
||||||
|
acc << CARTO::SGMAP::Cadastre::Adapter.new(
|
||||||
|
coordinate.map { |element| [element['lng'], element['lat']] }).to_params }).flatten
|
||||||
|
end
|
||||||
|
end
|
|
@ -2,7 +2,7 @@ module Carto
|
||||||
# this class take a string in input and return a point
|
# this class take a string in input and return a point
|
||||||
class Geocodeur
|
class Geocodeur
|
||||||
def self.convert_adresse_to_point(address)
|
def self.convert_adresse_to_point(address)
|
||||||
Carto::Bano::PointRetriever.new(address)
|
Carto::Bano::PointRetriever.new(address).point
|
||||||
rescue RestClient::Exception, JSON::ParserError => e
|
rescue RestClient::Exception, JSON::ParserError => e
|
||||||
Rails.logger.error e.message
|
Rails.logger.error e.message
|
||||||
nil
|
nil
|
||||||
|
|
|
@ -91,22 +91,6 @@ RSpec.describe Users::CarteController, type: :controller do
|
||||||
post :save, dossier_id: dossier.id, json_latlngs: ''
|
post :save, dossier_id: dossier.id, json_latlngs: ''
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Enregistrement d\'un commentaire informant la modification' do
|
|
||||||
subject { dossier.commentaires.last }
|
|
||||||
|
|
||||||
it 'champs email' do
|
|
||||||
expect(subject.email).to eq('Modification localisation')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'champs body' do
|
|
||||||
expect(subject.body).to eq('La localisation de la demande a été modifiée. Merci de le prendre en compte.')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'champs dossier' do
|
|
||||||
expect(subject.dossier.id).to eq(dossier.id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'Redirection vers la page récapitulatif' do
|
it 'Redirection vers la page récapitulatif' do
|
||||||
expect(response).to redirect_to("/users/dossiers/#{dossier.id}/recapitulatif")
|
expect(response).to redirect_to("/users/dossiers/#{dossier.id}/recapitulatif")
|
||||||
end
|
end
|
||||||
|
@ -214,9 +198,10 @@ RSpec.describe Users::CarteController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#get_position' do
|
describe '#get_position' do
|
||||||
context 'Geocodeur renvoie des positions nil' do
|
context 'Geocodeur renvoie les positions par defaut' do
|
||||||
let(:etablissement) { create(:etablissement, adresse: bad_adresse, numero_voie: 'dzj', type_voie: 'fzjfk', nom_voie: 'hdidjkz', complement_adresse: 'fjef', code_postal: 'fjeiefk', localite: 'zjfkfz') }
|
let(:etablissement) { create(:etablissement, adresse: bad_adresse, numero_voie: 'dzj', type_voie: 'fzjfk', nom_voie: 'hdidjkz', complement_adresse: 'fjef', code_postal: 'fjeiefk', localite: 'zjfkfz') }
|
||||||
let(:dossier) { create(:dossier, :with_procedure, etablissement: etablissement) }
|
let(:dossier) { create(:dossier, :with_procedure, etablissement: etablissement) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
stub_request(:get, /http:\/\/api-adresse[.]data[.]gouv[.]fr\/search[?]limit=1&q=/)
|
stub_request(:get, /http:\/\/api-adresse[.]data[.]gouv[.]fr\/search[?]limit=1&q=/)
|
||||||
.to_return(status: 200, body: '{"query": "babouba", "version": "draft", "licence": "ODbL 1.0", "features": [], "type": "FeatureCollection", "attribution": "BAN"}', headers: {})
|
.to_return(status: 200, body: '{"query": "babouba", "version": "draft", "licence": "ODbL 1.0", "features": [], "type": "FeatureCollection", "attribution": "BAN"}', headers: {})
|
||||||
|
@ -225,9 +210,9 @@ RSpec.describe Users::CarteController, type: :controller do
|
||||||
|
|
||||||
subject { JSON.parse(response.body) }
|
subject { JSON.parse(response.body) }
|
||||||
|
|
||||||
it 'on enregistre des coordonnées lat et lon à 0' do
|
it 'on enregistre des coordonnées lat et lon avec les valeurs par defaut' do
|
||||||
expect(subject['lat']).to eq('0')
|
expect(subject['lat']).to eq('46.538192')
|
||||||
expect(subject['lon']).to eq('0')
|
expect(subject['lon']).to eq('2.428462')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -87,22 +87,6 @@ describe Users::DescriptionController, type: :controller do
|
||||||
dossier.reload
|
dossier.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'Enregistrement d\'un commentaire informant la modification' do
|
|
||||||
subject { Commentaire.last }
|
|
||||||
|
|
||||||
it 'champs email' do
|
|
||||||
expect(subject.email).to eq('Modification détails')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'champs body' do
|
|
||||||
expect(subject.body).to eq('Les informations détaillées de la demande ont été modifiées. Merci de le prendre en compte.')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'champs dossier' do
|
|
||||||
expect(subject.dossier.id).to eq(dossier_id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'Redirection vers la page récapitulatif' do
|
it 'Redirection vers la page récapitulatif' do
|
||||||
expect(response).to redirect_to("/users/dossiers/#{dossier_id}/recapitulatif")
|
expect(response).to redirect_to("/users/dossiers/#{dossier_id}/recapitulatif")
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,6 +19,10 @@
|
||||||
|
|
||||||
ENV['RAILS_ENV'] ||= 'test'
|
ENV['RAILS_ENV'] ||= 'test'
|
||||||
|
|
||||||
|
require 'simplecov'
|
||||||
|
SimpleCov.start 'rails'
|
||||||
|
puts "required simplecov"
|
||||||
|
|
||||||
require File.expand_path('../../config/environment', __FILE__)
|
require File.expand_path('../../config/environment', __FILE__)
|
||||||
require 'rspec/rails'
|
require 'rspec/rails'
|
||||||
require 'capybara/rspec'
|
require 'capybara/rspec'
|
||||||
|
@ -34,6 +38,7 @@ Capybara.register_driver :poltergeist do |app|
|
||||||
Capybara::Poltergeist::Driver.new(app, js_errors: true, port: 44_678 + ENV['TEST_ENV_NUMBER'].to_i, phantomjs_options: ['--proxy-type=none'], timeout: 180)
|
Capybara::Poltergeist::Driver.new(app, js_errors: true, port: 44_678 + ENV['TEST_ENV_NUMBER'].to_i, phantomjs_options: ['--proxy-type=none'], timeout: 180)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
Capybara.default_wait_time = 1
|
Capybara.default_wait_time = 1
|
||||||
|
|
||||||
# Requires supporting ruby files with custom matchers and macros, etc,
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
||||||
|
|
Loading…
Reference in a new issue