diff --git a/app/controllers/administrateurs/procedures_controller.rb b/app/controllers/administrateurs/procedures_controller.rb index 5e06ab767..bec59589e 100644 --- a/app/controllers/administrateurs/procedures_controller.rb +++ b/app/controllers/administrateurs/procedures_controller.rb @@ -416,11 +416,17 @@ module Administrateurs private def filter_procedures(filter) + if filter.service_siret.present? + service = Service.find_by(siret: filter.service_siret) + return Procedure.none if service.nil? + end + procedures_result = Procedure.select(:id).left_joins(:procedures_zones).distinct.publiees_ou_closes procedures_result = procedures_result.where(procedures_zones: { zone_id: filter.zone_ids }) if filter.zone_ids.present? procedures_result = procedures_result.where(aasm_state: filter.statuses) if filter.statuses.present? procedures_result = procedures_result.where("tags @> ARRAY[?]::text[]", filter.tags) if filter.tags.present? procedures_result = procedures_result.where('published_at >= ?', filter.from_publication_date) if filter.from_publication_date.present? + procedures_result = procedures_result.where(service: service) if filter.service_siret.present? procedures_result = procedures_result.where('unaccent(libelle) ILIKE unaccent(?)', "%#{filter.libelle}%") if filter.libelle.present? procedures_sql = procedures_result.to_sql diff --git a/app/models/procedures_filter.rb b/app/models/procedures_filter.rb index 048d632d2..54e8e0bb1 100644 --- a/app/models/procedures_filter.rb +++ b/app/models/procedures_filter.rb @@ -5,7 +5,7 @@ class ProceduresFilter def initialize(admin, params) @admin = admin - @params = params.permit(:page, :libelle, :email, :from_publication_date, tags: [], zone_ids: [], statuses: []) + @params = params.permit(:page, :libelle, :email, :from_publication_date, :service_siret, tags: [], zone_ids: [], statuses: []) end def admin_zones @@ -32,6 +32,10 @@ class ProceduresFilter params[:tags].compact_blank.uniq if params[:tags].present? end + def service_siret + params[:service_siret].presence + end + def from_publication_date return if params[:from_publication_date].blank? diff --git a/spec/controllers/administrateurs/procedures_controller_spec.rb b/spec/controllers/administrateurs/procedures_controller_spec.rb index 524a8a183..b99f70c79 100644 --- a/spec/controllers/administrateurs/procedures_controller_spec.rb +++ b/spec/controllers/administrateurs/procedures_controller_spec.rb @@ -175,6 +175,31 @@ describe Administrateurs::ProceduresController, type: :controller do end end + context 'with specific service' do + let(:requested_siret) { '13001501900024' } + let(:another_siret) { '11000004900012' } + let(:requested_service) { create(:service, siret: requested_siret) } + let(:another_service) { create(:service, siret: another_siret) } + let!(:procedure1) { create(:procedure, :published, service: another_service) } + let!(:procedure2) { create(:procedure, :published, service: requested_service) } + it 'display only procedures with specific service (identified by siret)' do + get :all, params: { service_siret: requested_siret } + expect(assigns(:procedures).any? { |p| p.id == procedure1.id }).to be_falsey + expect(assigns(:procedures).any? { |p| p.id == procedure2.id }).to be_truthy + end + end + + context 'with a siret which does not identify a service' do + let(:requested_siret) { '13001501900024' } + let(:another_siret) { '11000004900012' } + let(:another_service) { create(:service, siret: another_siret) } + let!(:procedure1) { create(:procedure, :published, service: another_service) } + it 'displays none procedure' do + get :all, params: { service_siret: requested_siret } + expect(assigns(:procedures)).to be_empty + end + end + context 'with specific tag' do let!(:tags_procedure) { create(:procedure, :published, tags: ['environnement', 'diplomatie']) }