demarches-normaliennes/app/controllers/users/carte_controller.rb
2018-09-07 10:19:10 +02:00

80 lines
2.1 KiB
Ruby

class Users::CarteController < UsersController
before_action only: [:show] do
authorized_routes? self.class
end
def show
@dossier = current_user_dossier
rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found')
redirect_to url_for(root_path)
end
def save
safe_json_latlngs = clean_json_latlngs(params[:json_latlngs])
dossier = current_user_dossier
dossier.quartier_prioritaires.each(&:destroy)
dossier.cadastres.each(&:destroy)
if safe_json_latlngs.present?
ModuleApiCartoService.save_qp! dossier, safe_json_latlngs
ModuleApiCartoService.save_cadastre! dossier, safe_json_latlngs
end
dossier.update(json_latlngs: safe_json_latlngs)
redirect_to brouillon_dossier_path(dossier)
end
def get_position
begin
etablissement = current_user_dossier.etablissement
rescue ActiveRecord::RecordNotFound
etablissement = nil
end
point = Carto::Geocodeur.convert_adresse_to_point(etablissement.geo_adresse) if etablissement.present?
lon = '2.428462'
lat = '46.538192'
zoom = '13'
if point.present?
lon = point.x.to_s
lat = point.y.to_s
end
render json: { lon: lon, lat: lat, zoom: zoom, dossier_id: params[:dossier_id] }
end
def get_qp
render json: { quartier_prioritaires: ModuleApiCartoService.generate_qp(JSON.parse(params[:coordinates])) }
end
def get_cadastre
render json: { cadastres: ModuleApiCartoService.generate_cadastre(JSON.parse(params[:coordinates])) }
end
def self.route_authorization
{
states: [Dossier.states.fetch(:brouillon), Dossier.states.fetch(:en_construction)],
api_carto: true
}
end
private
def clean_json_latlngs(json_latlngs)
# a polygon must contain at least 4 points
# https://tools.ietf.org/html/rfc7946#section-3.1.6
if json_latlngs.present?
multipolygone = JSON.parse(json_latlngs)
multipolygone.reject! { |polygone| polygone.count < 4 }
if multipolygone.present?
multipolygone.to_json
end
end
end
end