demarches-normaliennes/app/controllers/users/carte_controller.rb

75 lines
2 KiB
Ruby
Raw Normal View History

class Users::CarteController < UsersController
2016-01-26 15:52:05 +01:00
before_action only: [:show] do
authorized_routes? self.class
end
2015-08-10 11:05:06 +02:00
def show
@dossier = current_user_dossier
2015-08-18 10:43:22 +02:00
rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found')
2015-10-26 18:08:41 +01:00
redirect_to url_for(root_path)
2015-08-10 11:05:06 +02:00
end
def save
2018-10-10 20:02:37 +02:00
geo_json = clean_json_latlngs(params[:selection])
dossier = current_user_dossier
dossier.quartier_prioritaires.each(&:destroy)
dossier.cadastres.each(&:destroy)
2018-10-10 20:02:37 +02:00
if geo_json.present?
2018-10-15 15:48:01 +02:00
ModuleApiCartoService.save_qp!(dossier, geo_json)
ModuleApiCartoService.save_cadastre!(dossier, geo_json)
end
2018-10-10 20:02:37 +02:00
dossier.update!(json_latlngs: geo_json)
redirect_to brouillon_dossier_path(dossier)
2015-08-10 11:05:06 +02:00
end
def zones
@dossier = current_user_dossier
@data = {}
geo_json = JSON.parse(params.required(:selection))
if geo_json.first == ["error", "TooManyPolygons"]
@error = true
else
if @dossier.procedure.module_api_carto.quartiers_prioritaires?
quartiers_prioritaires = ModuleApiCartoService.generate_qp(geo_json).values
@dossier.quartier_prioritaires.build(quartiers_prioritaires)
@data[:quartiersPrioritaires] = quartiers_prioritaires
end
if @dossier.procedure.module_api_carto.cadastre?
cadastres = ModuleApiCartoService.generate_cadastre(geo_json)
@dossier.cadastres.build(cadastres)
@data[:cadastres] = cadastres
end
end
end
2016-01-26 15:52:05 +01:00
def self.route_authorization
{
2018-08-28 14:12:48 +02:00
states: [Dossier.states.fetch(:brouillon), Dossier.states.fetch(:en_construction)],
2018-01-15 19:02:12 +01:00
api_carto: true
2016-01-26 15:52:05 +01:00
}
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
2015-08-20 16:34:14 +02:00
end