diff --git a/app/controllers/instructeurs/procedures_controller.rb b/app/controllers/instructeurs/procedures_controller.rb index 414a571df..139d311ed 100644 --- a/app/controllers/instructeurs/procedures_controller.rb +++ b/app/controllers/instructeurs/procedures_controller.rb @@ -187,17 +187,19 @@ module Instructeurs def download_dossiers options = params.permit(:version, :limit, :since, tables: []) + dossiers = current_instructeur.dossiers.for_procedure(procedure) + respond_to do |format| format.csv do - send_data(procedure.to_csv(options), + send_data(procedure.to_csv(dossiers, options), filename: procedure.export_filename(:csv)) end format.xlsx do - send_data(procedure.to_xlsx(options), + send_data(procedure.to_xlsx(dossiers, options), filename: procedure.export_filename(:xlsx)) end format.ods do - send_data(procedure.to_ods(options), + send_data(procedure.to_ods(dossiers, options), filename: procedure.export_filename(:ods)) end end diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 4688cc070..24806f6ba 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -334,26 +334,26 @@ class Procedure < ApplicationRecord "dossiers_#{procedure_identifier}_#{Time.zone.now.strftime('%Y-%m-%d_%H-%M')}.#{format}" end - def export(options = {}) + def export(dossiers, options = {}) version = options.delete(:version) if version == 'v2' options.delete(:tables) - ProcedureExportV2Service.new(self, **options.to_h.symbolize_keys) + ProcedureExportV2Service.new(self, dossiers, **options.to_h.symbolize_keys) else - ProcedureExportService.new(self, **options.to_h.symbolize_keys) + ProcedureExportService.new(self, dossiers, **options.to_h.symbolize_keys) end end - def to_csv(options = {}) - export(options).to_csv + def to_csv(dossiers, options = {}) + export(dossiers, options).to_csv end - def to_xlsx(options = {}) - export(options).to_xlsx + def to_xlsx(dossiers, options = {}) + export(dossiers, options).to_xlsx end - def to_ods(options = {}) - export(options).to_ods + def to_ods(dossiers, options = {}) + export(dossiers, options).to_ods end def procedure_overview(start_date) diff --git a/app/services/procedure_export_service.rb b/app/services/procedure_export_service.rb index e4bf53727..1708e4d4b 100644 --- a/app/services/procedure_export_service.rb +++ b/app/services/procedure_export_service.rb @@ -49,9 +49,9 @@ class ProcedureExportService :prenom ] - def initialize(procedure, tables: [], ids: nil, since: nil, limit: nil) + def initialize(procedure, dossiers, tables: [], ids: nil, since: nil, limit: nil) @procedure = procedure - @dossiers = procedure.dossiers.downloadable_sorted + @dossiers = dossiers.downloadable_sorted if ids @dossiers = @dossiers.where(id: ids) end diff --git a/app/services/procedure_export_v2_service.rb b/app/services/procedure_export_v2_service.rb index 0d7d3b74c..67409b723 100644 --- a/app/services/procedure_export_v2_service.rb +++ b/app/services/procedure_export_v2_service.rb @@ -1,9 +1,9 @@ class ProcedureExportV2Service attr_reader :dossiers - def initialize(procedure, ids: nil, since: nil, limit: nil) + def initialize(procedure, dossiers, ids: nil, since: nil, limit: nil) @procedure = procedure - @dossiers = procedure.dossiers.downloadable_sorted + @dossiers = dossiers.downloadable_sorted if ids @dossiers = @dossiers.where(id: ids) end diff --git a/spec/controllers/instructeurs/procedures_controller_spec.rb b/spec/controllers/instructeurs/procedures_controller_spec.rb index ed52b8781..c95044d79 100644 --- a/spec/controllers/instructeurs/procedures_controller_spec.rb +++ b/spec/controllers/instructeurs/procedures_controller_spec.rb @@ -414,6 +414,9 @@ describe Instructeurs::ProceduresController, type: :controller do describe "#download_dossiers" do let(:instructeur) { create(:instructeur) } let!(:procedure) { create(:procedure, instructeurs: [instructeur]) } + let!(:gi_2) { procedure.groupe_instructeurs.create(label: '2') } + let!(:dossier_1) { create(:dossier, procedure: procedure) } + let!(:dossier_2) { create(:dossier, groupe_instructeur: gi_2) } context "when logged in" do before do @@ -421,7 +424,12 @@ describe Instructeurs::ProceduresController, type: :controller do end context "csv" do - before { get :download_dossiers, params: { procedure_id: procedure.id }, format: 'csv' } + before do + expect_any_instance_of(Procedure).to receive(:to_csv) + .with(instructeur.dossiers.for_procedure(procedure), {}) + + get :download_dossiers, params: { procedure_id: procedure.id }, format: 'csv' + end it { expect(response).to have_http_status(:ok) } end diff --git a/spec/services/procedure_export_service_spec.rb b/spec/services/procedure_export_service_spec.rb index ecdf1e332..c8b1425d9 100644 --- a/spec/services/procedure_export_service_spec.rb +++ b/spec/services/procedure_export_service_spec.rb @@ -4,7 +4,7 @@ describe ProcedureExportService do describe 'to_data' do let(:procedure) { create(:procedure, :published, :with_all_champs) } let(:table) { :dossiers } - subject { ProcedureExportService.new(procedure).to_data(table) } + subject { ProcedureExportService.new(procedure, procedure.dossiers).to_data(table) } let(:headers) { subject[:headers] } let(:data) { subject[:data] } diff --git a/spec/services/procedure_export_v2_service_spec.rb b/spec/services/procedure_export_v2_service_spec.rb index 43483f931..74d7d8e5b 100644 --- a/spec/services/procedure_export_v2_service_spec.rb +++ b/spec/services/procedure_export_v2_service_spec.rb @@ -5,7 +5,7 @@ describe ProcedureExportV2Service do let(:procedure) { create(:procedure, :published, :with_all_champs) } subject do Tempfile.create do |f| - f << ProcedureExportV2Service.new(procedure).to_xlsx + f << ProcedureExportV2Service.new(procedure, procedure.dossiers).to_xlsx f.rewind SimpleXlsxReader.open(f.path) end