Merge pull request #7864 from betagouv/feat/7733-2

ETQ Administrateur je peux associer des tags à une démarche
This commit is contained in:
Kara Diaby 2022-10-21 19:21:10 +02:00 committed by GitHub
commit a771617b62
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 38 additions and 2 deletions

View file

@ -63,6 +63,7 @@ module Administrateurs
def new
@procedure ||= Procedure.new(for_individual: true)
@existing_tags = get_existing_tags
end
SIGNIFICANT_DOSSIERS_THRESHOLD = 30
@ -361,7 +362,8 @@ module Administrateurs
{ zone_ids: [] },
:lien_dpo,
:opendata,
:procedure_expires_when_termine_enabled
:procedure_expires_when_termine_enabled,
:tags
]
permited_params = if @procedure&.locked?
params.require(:procedure).permit(*editable_params)
@ -371,6 +373,9 @@ module Administrateurs
if permited_params[:auto_archive_on].present?
permited_params[:auto_archive_on] = Date.parse(permited_params[:auto_archive_on]) + 1.day
end
if permited_params[:tags].present?
permited_params[:tags] = JSON.parse(permited_params[:tags])
end
permited_params
end
@ -385,5 +390,11 @@ module Administrateurs
def cloned_from_library?
params[:from_new_from_existing].present?
end
def get_existing_tags
unnest = Arel::Nodes::NamedFunction.new('UNNEST', [Procedure.arel_table[:tags]])
query = Procedure.select(unnest.as('tags')).distinct.order('tags')
Procedure.connection.query(query.to_sql).flatten
end
end
end

View file

@ -41,6 +41,7 @@
# published_at :datetime
# routing_criteria_name :text default("Votre ville")
# routing_enabled :boolean
# tags :text default([]), is an Array
# test_started_at :datetime
# unpublished_at :datetime
# web_hook_url :string

View file

@ -100,6 +100,18 @@
%p.explication
Si votre démarche sadresse indifféremment à une personne morale ou un particulier, choisissez l'option « Particuliers ». Vous pourrez ajouter un champ SIRET directement dans le formulaire.
%h3.header-subsection Ajouter des tags
%p.explication Les tags sont des mots ou des expressions que vous attribuez aux démarches pour décrire leur contenu et pour les retrouver. Les tags sont partagés avec la communauté, ce qui vous permet de voir les tags attribués aux démarches créées par les autres administrateurs.
= hidden_field_tag 'procedure[tags]', nil
= react_component("ComboMultiple",
options: @existing_tags,
selected: [], disabled: [],
label: 'Tags',
group: '.procedure-form__column--form',
name: 'tags',
describedby: 'procedure-tags',
acceptNewValues: true)
%details.procedure-form__options-details
%summary.procedure-form__options-summary
%h3.header-subsection Options avancées

View file

@ -0,0 +1,7 @@
class AddTagsToProcedures < ActiveRecord::Migration[6.1]
disable_ddl_transaction!
def change
add_column :procedures, :tags, :text, array: true, default: []
add_index :procedures, :tags, using: 'gin', algorithm: :concurrently
end
end

View file

@ -667,6 +667,7 @@ ActiveRecord::Schema.define(version: 2022_10_20_094031) do
t.text "routing_criteria_name", default: "Votre ville"
t.boolean "routing_enabled"
t.bigint "service_id"
t.text "tags", default: [], array: true
t.datetime "test_started_at"
t.datetime "unpublished_at"
t.datetime "updated_at", null: false
@ -683,6 +684,7 @@ ActiveRecord::Schema.define(version: 2022_10_20_094031) do
t.index ["procedure_expires_when_termine_enabled"], name: "index_procedures_on_procedure_expires_when_termine_enabled"
t.index ["published_revision_id"], name: "index_procedures_on_published_revision_id"
t.index ["service_id"], name: "index_procedures_on_service_id"
t.index ["tags"], name: "index_procedures_on_tags", using: :gin
t.index ["zone_id"], name: "index_procedures_on_zone_id"
end

View file

@ -13,6 +13,7 @@ describe Administrateurs::ProceduresController, type: :controller do
let(:lien_site_web) { 'http://mon-site.gouv.fr' }
let(:zone) { create(:zone) }
let(:zone_ids) { [zone.id] }
let(:tags) { "[\"planete\",\"environnement\"]" }
describe '#apercu' do
render_views
@ -56,7 +57,8 @@ describe Administrateurs::ProceduresController, type: :controller do
duree_conservation_dossiers_dans_ds: duree_conservation_dossiers_dans_ds,
monavis_embed: monavis_embed,
zone_ids: zone_ids,
lien_site_web: lien_site_web
lien_site_web: lien_site_web,
tags: tags
}
}
@ -206,6 +208,7 @@ describe Administrateurs::ProceduresController, type: :controller do
it { expect(subject.organisation).to eq(organisation) }
it { expect(subject.administrateurs).to eq([admin]) }
it { expect(subject.duree_conservation_dossiers_dans_ds).to eq(duree_conservation_dossiers_dans_ds) }
it { expect(subject.tags).to eq(["planete", "environnement"]) }
end
it { is_expected.to redirect_to(champs_admin_procedure_path(Procedure.last)) }