commit
a7c406c6f2
17 changed files with 115 additions and 80 deletions
|
@ -1,7 +1,7 @@
|
|||
module Administrateurs
|
||||
class ProceduresController < AdministrateurController
|
||||
before_action :retrieve_procedure, only: [:champs, :annotations, :edit, :monavis, :update_monavis, :jeton, :update_jeton, :publication, :publish, :transfert, :allow_expert_review, :experts_require_administrateur_invitation]
|
||||
before_action :procedure_revisable?, only: [:champs, :annotations]
|
||||
before_action :retrieve_procedure, only: [:champs, :annotations, :modifications, :edit, :monavis, :update_monavis, :jeton, :update_jeton, :publication, :publish, :transfert, :allow_expert_review, :experts_require_administrateur_invitation]
|
||||
before_action :procedure_revisable?, only: [:champs, :annotations, :modifications]
|
||||
|
||||
ITEMS_PER_PAGE = 25
|
||||
|
||||
|
@ -172,6 +172,9 @@ module Administrateurs
|
|||
def jeton
|
||||
end
|
||||
|
||||
def modifications
|
||||
end
|
||||
|
||||
def update_jeton
|
||||
token = params[:procedure][:api_entreprise_token]
|
||||
@procedure.api_entreprise_token = token
|
||||
|
|
|
@ -8,7 +8,8 @@ import React, {
|
|||
createContext,
|
||||
useCallback
|
||||
} from 'react';
|
||||
import maplibre, { Map, Style, NavigationControl } from 'maplibre-gl';
|
||||
import maplibre, { Map, NavigationControl } from 'maplibre-gl';
|
||||
import type { Style } from 'maplibre-gl';
|
||||
|
||||
import invariant from 'tiny-invariant';
|
||||
|
||||
|
|
|
@ -3,10 +3,12 @@ import invariant from 'tiny-invariant';
|
|||
|
||||
import cadastreLayers from './layers/cadastre';
|
||||
|
||||
const IGN_TOKEN = 'rc1egnbeoss72hxvd143tbyk'; // ggignore
|
||||
|
||||
function ignServiceURL(layer: string, format = 'image/png') {
|
||||
const url = `https://wxs.ign.fr/${IGN_TOKEN}/geoportail/wmts`;
|
||||
function ignServiceURL(
|
||||
layer: string,
|
||||
env = 'decouverte',
|
||||
format = 'image/png'
|
||||
) {
|
||||
const url = `https://wxs.ign.fr/${env}/geoportail/wmts`;
|
||||
const query =
|
||||
'service=WMTS&request=GetTile&version=1.0.0&tilematrixset=PM&tilematrix={z}&tilecol={x}&tilerow={y}&style=normal';
|
||||
|
||||
|
@ -125,7 +127,10 @@ function buildSources() {
|
|||
.flatMap(({ layers }) => layers.map(([, code]) => code))
|
||||
.map((code) => [
|
||||
getLayerCode(code),
|
||||
rasterSource([ignServiceURL(code)], 'IGN-F/Géoportail/MNHN')
|
||||
rasterSource(
|
||||
[ignServiceURL(code, 'environnement')],
|
||||
'IGN-F/Géoportail/MNHN'
|
||||
)
|
||||
])
|
||||
);
|
||||
}
|
||||
|
@ -210,7 +215,7 @@ export default {
|
|||
url: 'https://openmaptiles.geo.data.gouv.fr/data/france-vector.json'
|
||||
},
|
||||
'photographies-aeriennes': rasterSource(
|
||||
[ignServiceURL('ORTHOIMAGERY.ORTHOPHOTOS', 'image/jpeg')],
|
||||
[ignServiceURL('ORTHOIMAGERY.ORTHOPHOTOS', 'decouverte', 'image/jpeg')],
|
||||
'IGN-F/Géoportail'
|
||||
),
|
||||
cadastre: {
|
||||
|
@ -218,7 +223,7 @@ export default {
|
|||
url: 'https://openmaptiles.geo.data.gouv.fr/data/cadastre.json'
|
||||
},
|
||||
'plan-ign': rasterSource(
|
||||
[ignServiceURL('GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2')],
|
||||
[ignServiceURL('GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2', 'decouverte')],
|
||||
'IGN-F/Géoportail'
|
||||
),
|
||||
...buildSources()
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { AnyLayer } from 'maplibre-gl';
|
||||
import type { AnyLayer } from 'maplibre-gl';
|
||||
|
||||
const layers: AnyLayer[] = [
|
||||
{
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
import {
|
||||
LngLatBounds,
|
||||
LngLat,
|
||||
LngLatLike,
|
||||
LngLatBoundsLike
|
||||
} from 'maplibre-gl';
|
||||
import type { LngLat, LngLatLike, LngLatBoundsLike } from 'maplibre-gl';
|
||||
import type { Geometry, FeatureCollection, Feature } from 'geojson';
|
||||
import { LngLatBounds } from 'maplibre-gl';
|
||||
import invariant from 'tiny-invariant';
|
||||
|
||||
export function getBounds(geometry: Geometry): LngLatBoundsLike {
|
||||
|
|
|
@ -653,6 +653,10 @@ class Procedure < ApplicationRecord
|
|||
!AssignTo.exists?(groupe_instructeur: groupe_instructeurs)
|
||||
end
|
||||
|
||||
def revised?
|
||||
feature_enabled?(:procedure_revisions) && revisions.size > 2
|
||||
end
|
||||
|
||||
def routee?
|
||||
routing_enabled? || groupe_instructeurs.size > 1
|
||||
end
|
||||
|
|
|
@ -36,9 +36,9 @@
|
|||
= t("update_drop_down_options#{postfix}", scope: [:administrateurs, :revision_changes], label: change[:label])
|
||||
%ul
|
||||
- if added.present?
|
||||
%li= t(:add_option, scope: [:administrateurs, :revision_changes], items: added.map{ |term| "« #{term.strip} »" }.join(", "))
|
||||
%li= t(:add_option, scope: [:administrateurs, :revision_changes], items: added.map{ |term| "« #{term.strip} »" }.join(", "))
|
||||
- if removed.present?
|
||||
%li= t(:remove_option, scope: [:administrateurs, :revision_changes], items: removed.map{ |term| "« #{term.strip} »" }.join(", "))
|
||||
%li= t(:remove_option, scope: [:administrateurs, :revision_changes], items: removed.map{ |term| "« #{term.strip} »" }.join(", "))
|
||||
- when :drop_down_other
|
||||
- if change[:from] == false
|
||||
%li.mb-1= t("administrateurs.revision_changes.update_drop_down_other#{postfix}.enabled", label: change[:label])
|
||||
|
@ -51,6 +51,6 @@
|
|||
= t("update_carte_layers#{postfix}", scope: [:administrateurs, :revision_changes], label: change[:label])
|
||||
%ul
|
||||
- if added.present?
|
||||
%li= t(:add_option, scope: [:administrateurs, :revision_changes], items: added.map{ |term| "« #{t(term, scope: [:administrateurs, :carte_layers])} »" }.join(", "))
|
||||
%li= t(:add_option, scope: [:administrateurs, :revision_changes], items: added.map{ |term| "« #{t(term, scope: [:administrateurs, :carte_layers])} »" }.join(", "))
|
||||
- if removed.present?
|
||||
%li= t(:remove_option, scope: [:administrateurs, :revision_changes], items: removed.map{ |term| "« #{t(term, scope: [:administrateurs, :carte_layers])} »" }.join(", "))
|
||||
%li= t(:remove_option, scope: [:administrateurs, :revision_changes], items: removed.map{ |term| "« #{t(term, scope: [:administrateurs, :carte_layers])} »" }.join(", "))
|
||||
|
|
18
app/views/administrateurs/procedures/modifications.html.haml
Normal file
18
app/views/administrateurs/procedures/modifications.html.haml
Normal file
|
@ -0,0 +1,18 @@
|
|||
= render partial: 'administrateurs/breadcrumbs',
|
||||
locals: { steps: [link_to('Démarches', admin_procedures_path),
|
||||
link_to(@procedure.libelle, admin_procedure_path(@procedure)),
|
||||
'Modifications'] }
|
||||
.container
|
||||
%h1.page-title
|
||||
Historique des modifications du formulaire
|
||||
|
||||
.container
|
||||
- previous_revision = nil
|
||||
- @procedure.revisions.each do |revision|
|
||||
- if previous_revision.present? && !revision.draft?
|
||||
- changes = previous_revision.compare(revision)
|
||||
- if changes.present?
|
||||
.card.mb-4
|
||||
%h2.card-title= "Modifications publiées le #{l(revision.published_at, format: '%d %B %Y à %R')}"
|
||||
= render partial: 'revision_changes', locals: { changes: changes }
|
||||
- previous_revision = revision
|
|
@ -56,7 +56,7 @@
|
|||
- error_messages = @procedure.errors.messages_for(:draft_types_de_champ).to_sentence
|
||||
|
||||
= link_to champs_admin_procedure_path(@procedure), class: 'card-admin', title: error_messages do
|
||||
- if @procedure.draft_types_de_champ.count == 0
|
||||
- if @procedure.draft_types_de_champ.empty?
|
||||
%div
|
||||
%span.icon.clock
|
||||
%p.card-admin-status-todo À faire
|
||||
|
@ -70,7 +70,7 @@
|
|||
%p.card-admin-status-accept Validé
|
||||
%div
|
||||
%p.card-admin-title
|
||||
%span.badge.baseline= @procedure.draft_types_de_champ.count
|
||||
%span.badge.baseline= @procedure.draft_types_de_champ.size
|
||||
Champs du formulaire
|
||||
%p.card-admin-subtitle À remplir par les usagers
|
||||
%p.button Modifier
|
||||
|
@ -109,13 +109,13 @@
|
|||
%p.card-admin-status-accept Validé
|
||||
%div
|
||||
%p.card-admin-title
|
||||
%span.badge.baseline= @procedure.administrateurs.count
|
||||
#{"Administrateur".pluralize(@procedure.administrateurs.count)}
|
||||
%span.badge.baseline= @procedure.administrateurs.size
|
||||
#{"Administrateur".pluralize(@procedure.administrateurs.size)}
|
||||
%p.card-admin-subtitle Gestion de la démarche
|
||||
%p.button Modifier
|
||||
|
||||
= link_to admin_procedure_groupe_instructeurs_path(@procedure), id: 'groupe-instructeurs', class: 'card-admin' do
|
||||
- if @procedure.routee? || @procedure.instructeurs.count > 1
|
||||
- if @procedure.routee? || @procedure.instructeurs.size > 1
|
||||
%div
|
||||
%span.icon.accept
|
||||
%p.card-admin-status-accept Validé
|
||||
|
@ -126,14 +126,27 @@
|
|||
%div
|
||||
%p.card-admin-title
|
||||
- if @procedure.routee?
|
||||
%span.badge.baseline= @procedure.groupe_instructeurs.count
|
||||
%span.badge.baseline= @procedure.groupe_instructeurs.size
|
||||
- else
|
||||
%span.badge.baseline= @procedure.instructeurs.count
|
||||
%span.badge.baseline= @procedure.instructeurs.size
|
||||
|
||||
= @procedure.routee? ? "Groupe Instructeurs" : "#{"Instructeur".pluralize(@procedure.instructeurs.count)}"
|
||||
= @procedure.routee? ? "Groupe Instructeurs" : "#{"Instructeur".pluralize(@procedure.instructeurs.size)}"
|
||||
%p.card-admin-subtitle Suivi des dossiers
|
||||
%p.button Modifier
|
||||
|
||||
- if @procedure.revised?
|
||||
= link_to modifications_admin_procedure_path(@procedure), id: 'modifications', class: 'card-admin' do
|
||||
%div
|
||||
%span.icon.accept
|
||||
%p.card-admin-status-accept Activée
|
||||
%div
|
||||
%p.card-admin-title
|
||||
%span.badge.baseline= @procedure.revisions.size - 1
|
||||
Modifications
|
||||
|
||||
%p.card-admin-subtitle Historique des modifications du formulaire
|
||||
%p.button Voir
|
||||
|
||||
%h2.procedure-admin-explanation Pour aller plus loin
|
||||
.procedure-grid
|
||||
|
||||
|
|
|
@ -105,9 +105,5 @@ Rails.application.configure do
|
|||
# Uncomment if you wish to allow Action Cable access from any origin.
|
||||
# config.action_cable.disable_request_forgery_protection = true
|
||||
|
||||
if ENV['IGN_CARTE_REFERER']
|
||||
config.hosts << ENV['IGN_CARTE_REFERER']
|
||||
end
|
||||
|
||||
config.hosts << ENV.fetch("APP_HOST")
|
||||
end
|
||||
|
|
|
@ -56,7 +56,7 @@ en:
|
|||
mentions_legales:
|
||||
label: "Legal notices"
|
||||
title: "Legal notices"
|
||||
url: "https//doc.demarches-simplifiees.fr/mentions-legales"
|
||||
url: "https://doc.demarches-simplifiees.fr/mentions-legales"
|
||||
newsletter:
|
||||
label: "Newsletter"
|
||||
title: "Notre newsletter"
|
||||
|
|
|
@ -56,7 +56,7 @@ fr:
|
|||
mentions_legales:
|
||||
label: "Mentions légales"
|
||||
title: "Mentions légales"
|
||||
url: "https//doc.demarches-simplifiees.fr/mentions-legales"
|
||||
url: "https://doc.demarches-simplifiees.fr/mentions-legales"
|
||||
newsletter:
|
||||
label: "Newsletter"
|
||||
title: "Notre newsletter"
|
||||
|
|
|
@ -3,47 +3,47 @@ fr:
|
|||
revision_changes:
|
||||
attestation_template:
|
||||
add: Un model d’attestation à été ajouté
|
||||
update_title: Le titre de l’attestation à été modifié. Le nouveau titre est « %{to} »
|
||||
update_title: Le titre de l’attestation à été modifié. Le nouveau titre est « %{to} »
|
||||
update_body: Le corps du document de l’attestation à été modifié
|
||||
update_footer: Le pied de page de l’attestation à été modifié
|
||||
update_logo: Le logo de l’attestation à été modifié. Le nouveau logo est « %{to} »
|
||||
update_signature: La signature de l’attestation à été modifié. La nouvelle signature est « %{to} »
|
||||
update_logo: Le logo de l’attestation à été modifié. Le nouveau logo est « %{to} »
|
||||
update_signature: La signature de l’attestation à été modifié. La nouvelle signature est « %{to} »
|
||||
has_changes: Modifications en cours (appliqué à la prochaine publication)
|
||||
add: Le champ « %{label} » a été ajouté
|
||||
remove: Le champ « %{label} » a été supprimé
|
||||
add: Le champ « %{label} » a été ajouté
|
||||
remove: Le champ « %{label} » a été supprimé
|
||||
move:
|
||||
one: La position d’un champ a été modifiée
|
||||
other: Les positions de %{count} champs ont été modifiées
|
||||
update_libelle: Le libellé du champ « %{label} » a été modifié. Le nouveau libellé est « %{to} »
|
||||
update_description: La description du champ « %{label} » a été modifiée. La nouvelle description est « %{to} »
|
||||
update_drop_down_secondary_libelle: Le libellé secondaire du champ « %{label} » a été modifié. Le nouveau libellé est « %{to} »
|
||||
update_drop_down_secondary_description: La description secondaire du champ « %{label} » a été modifiée. La nouvelle description est « %{to} »
|
||||
update_type_champ: Le type du champ « %{label} » a été modifié. Il est maintenant de type « %{to} »
|
||||
update_libelle: Le libellé du champ « %{label} » a été modifié. Le nouveau libellé est « %{to} »
|
||||
update_description: La description du champ « %{label} » a été modifiée. La nouvelle description est « %{to} »
|
||||
update_drop_down_secondary_libelle: Le libellé secondaire du champ « %{label} » a été modifié. Le nouveau libellé est « %{to} »
|
||||
update_drop_down_secondary_description: La description secondaire du champ « %{label} » a été modifiée. La nouvelle description est « %{to} »
|
||||
update_type_champ: Le type du champ « %{label} » a été modifié. Il est maintenant de type « %{to} »
|
||||
update_mandatory:
|
||||
enabled: Le champ « %{label} » est maintenant obligatoire
|
||||
disabled: Le champ « %{label} » n’est plus obligatoire
|
||||
update_piece_justificative_template: Le modèle de pièce justificative du champ « %{label} » a été modifié
|
||||
update_drop_down_options: Les options de sélection du champ « %{label} » ont été modifiées
|
||||
enabled: Le champ « %{label} » est maintenant obligatoire
|
||||
disabled: Le champ « %{label} » n’est plus obligatoire
|
||||
update_piece_justificative_template: Le modèle de pièce justificative du champ « %{label} » a été modifié
|
||||
update_drop_down_options: Les options de sélection du champ « %{label} » ont été modifiées
|
||||
update_drop_down_other:
|
||||
enabled: Le champ « %{label} » comporte maintenant un choix « Autre »
|
||||
disabled: Le champ « %{label} » ne comporte plus de choix « Autre »
|
||||
update_carte_layers: Les référentiels cartographiques du champ « %{label} » ont été modifiés
|
||||
add_private: L’annotation privée « %{label} » a été ajoutée
|
||||
remove_private: L’annotation privée « %{label} » a été supprimée
|
||||
enabled: Le champ « %{label} » comporte maintenant un choix « Autre »
|
||||
disabled: Le champ « %{label} » ne comporte plus de choix « Autre »
|
||||
update_carte_layers: Les référentiels cartographiques du champ « %{label} » ont été modifiés
|
||||
add_private: L’annotation privée « %{label} » a été ajoutée
|
||||
remove_private: L’annotation privée « %{label} » a été supprimée
|
||||
move_private:
|
||||
one: La position d’une annotation privée a été modifiée
|
||||
other: Les positions de %{count} annotations privées ont été modifiées
|
||||
update_libelle_private: Le libellé de l’annotation privée « %{label} » a été modifié. Le nouveau libellé est « %{to} »
|
||||
update_description_private: La description de l’annotation privée « %{label} » a été modifiée. La nouvelle description est « %{to} »
|
||||
update_drop_down_secondary_libelle_private: Le libellé secondaire de l’annotation « %{label} » a été modifié. Le nouveau libellé est « %{to} »
|
||||
update_drop_down_secondary_description_private: La description secondaire de l’annotation « %{label} » a été modifiée. La nouvelle description est « %{to} »
|
||||
update_type_champ_private: Le type de l’annotation privée « %{label} » a été modifié. Elle est maintenant de type « %{to} »
|
||||
update_libelle_private: Le libellé de l’annotation privée « %{label} » a été modifié. Le nouveau libellé est « %{to} »
|
||||
update_description_private: La description de l’annotation privée « %{label} » a été modifiée. La nouvelle description est « %{to} »
|
||||
update_drop_down_secondary_libelle_private: Le libellé secondaire de l’annotation « %{label} » a été modifié. Le nouveau libellé est « %{to} »
|
||||
update_drop_down_secondary_description_private: La description secondaire de l’annotation « %{label} » a été modifiée. La nouvelle description est « %{to} »
|
||||
update_type_champ_private: Le type de l’annotation privée « %{label} » a été modifié. Elle est maintenant de type « %{to} »
|
||||
update_mandatory_private:
|
||||
enabled: L’annotation privée « %{label} » est maintenant obligatoire
|
||||
disabled: L’annotation privée « %{label} » n’est plus obligatoire
|
||||
update_piece_justificative_template_private: Le modèle de pièce justificative de l’annotation privée « %{label} » a été modifié
|
||||
update_drop_down_options_private: Les options de sélection de l’annotation privée « %{label} » ont été modifiées
|
||||
update_carte_layers_private: Les référentiels cartographiques de l’annotation privée « %{label} » ont été modifiés
|
||||
enabled: L’annotation privée « %{label} » est maintenant obligatoire
|
||||
disabled: L’annotation privée « %{label} » n’est plus obligatoire
|
||||
update_piece_justificative_template_private: Le modèle de pièce justificative de l’annotation privée « %{label} » a été modifié
|
||||
update_drop_down_options_private: Les options de sélection de l’annotation privée « %{label} » ont été modifiées
|
||||
update_carte_layers_private: Les référentiels cartographiques de l’annotation privée « %{label} » ont été modifiés
|
||||
add_option: "ajoutés : %{items}"
|
||||
remove_option: "supprimés : %{items}"
|
||||
carte_layers:
|
||||
|
|
|
@ -408,6 +408,7 @@ Rails.application.routes.draw do
|
|||
get 'apercu'
|
||||
get 'champs'
|
||||
get 'annotations'
|
||||
get 'modifications'
|
||||
get 'monavis'
|
||||
patch 'update_monavis'
|
||||
get 'jeton'
|
||||
|
|
|
@ -3,21 +3,19 @@ namespace :after_party do
|
|||
task process_expired_dossiers_en_construction: :environment do
|
||||
puts "Running deploy task 'process_expired_dossiers_en_construction'"
|
||||
|
||||
if ENV['APP_NAME'] == 'tps'
|
||||
dossiers_close_to_expiration = Dossier
|
||||
.en_construction_close_to_expiration
|
||||
.without_en_construction_expiration_notice_sent
|
||||
dossiers_close_to_expiration = Dossier
|
||||
.en_construction_close_to_expiration
|
||||
.without_en_construction_expiration_notice_sent
|
||||
|
||||
ExpiredDossiersDeletionService.send_expiration_notices(dossiers_close_to_expiration)
|
||||
ExpiredDossiersDeletionService.send_expiration_notices(dossiers_close_to_expiration, :en_construction_close_to_expiration_notice_sent_at)
|
||||
|
||||
BATCH_SIZE = 1000
|
||||
BATCH_SIZE = 1000
|
||||
|
||||
((dossiers_close_to_expiration.count / BATCH_SIZE).ceil + 1).times do |n|
|
||||
dossiers_close_to_expiration
|
||||
.offset(n * BATCH_SIZE)
|
||||
.limit(BATCH_SIZE)
|
||||
.update_all(en_construction_close_to_expiration_notice_sent_at: Time.zone.now + n.days)
|
||||
end
|
||||
((dossiers_close_to_expiration.count / BATCH_SIZE).ceil + 1).times do |n|
|
||||
dossiers_close_to_expiration
|
||||
.offset(n * BATCH_SIZE)
|
||||
.limit(BATCH_SIZE)
|
||||
.update_all(en_construction_close_to_expiration_notice_sent_at: Time.zone.now + n.days)
|
||||
end
|
||||
|
||||
# Update task as completed. If you remove the line below, the task will
|
||||
|
|
|
@ -6,7 +6,7 @@ namespace :after_party do
|
|||
dossiers_termines = Dossier.state_termine
|
||||
progress = ProgressReport.new(dossiers_termines.count)
|
||||
dossiers_termines.find_each do |dossier|
|
||||
dossier.traitements.create!(state: dossier.state, motivation: dossier.motivation, processed_at: dossier.processed_at)
|
||||
dossier.traitements.find_or_create_by!(state: dossier.state, motivation: dossier.motivation, processed_at: dossier.processed_at)
|
||||
progress.inc
|
||||
end
|
||||
progress.finish
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace :after_party do
|
|||
geometry_collections.find_each do |geometry_collection|
|
||||
geometry_collection.geometry['geometries'].each do |geometry|
|
||||
if valid_geometry?(geometry)
|
||||
geometry_collection.champ.geo_areas.create!(geometry: geometry, source: 'selection_utilisateur')
|
||||
geometry_collection.champ.geo_areas.find_or_create_by!(geometry: geometry, source: 'selection_utilisateur')
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -36,7 +36,7 @@ namespace :after_party do
|
|||
}
|
||||
|
||||
if valid_geometry?(geometry)
|
||||
multi_line_string.champ.geo_areas.create!(geometry: geometry, source: 'selection_utilisateur')
|
||||
multi_line_string.champ.geo_areas.find_or_create_by!(geometry: geometry, source: 'selection_utilisateur')
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -54,7 +54,7 @@ namespace :after_party do
|
|||
}
|
||||
|
||||
if valid_geometry?(geometry)
|
||||
multi_polygon.champ.geo_areas.create!(geometry: geometry, source: 'selection_utilisateur')
|
||||
multi_polygon.champ.geo_areas.find_or_create_by!(geometry: geometry, source: 'selection_utilisateur')
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue