- Refactor code carte

- Delete auto-comments when edit carte and description
This commit is contained in:
Xavier J 2016-01-27 15:48:27 +01:00
parent c461d58297
commit 5513504555
9 changed files with 74 additions and 119 deletions

2
.gitignore vendored
View file

@ -29,4 +29,4 @@ doc/*.svg
rubocop.html rubocop.html
config/france_connect.yml config/france_connect.yml
uploads/* uploads/*
coverage/**/*

View file

@ -6,7 +6,7 @@ function initCarto() {
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>' attribution: '&copy; <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;

View file

@ -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

View file

@ -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

View 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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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,