Download dossiers button exports all dossiers except draft

This commit is contained in:
Mathieu Magnin 2017-03-29 14:09:50 +02:00 committed by gregoirenovel
parent c17ebba916
commit b18c09e9fd
5 changed files with 58 additions and 34 deletions

View file

@ -39,16 +39,13 @@ class Backoffice::DossiersController < Backoffice::DossiersListController
end
def download_dossiers_tps
if procedure = Procedure.find_by(id: params[:procedure_id])
dossiers = dossiers_list_facade(param_liste).dossiers_to_display
respond_with Dossier.export_full_generation(dossiers, request.format) unless dossiers.empty?
else
dossiers = dossiers_list_facade(param_liste).dossiers_to_display
respond_to do |format|
format.xlsx { render xlsx: dossiers }
format.ods { render ods: dossiers }
format.csv { render csv: dossiers }
end
procedure = Procedure.find_by(id: params[:procedure_id])
export = Dossier.export_full_generation(procedure.dossiers.downloadable)
respond_to do |format|
format.csv { send_data(SpreadsheetArchitect.to_csv(data: export[:data], headers: export[:headers]), filename: 'dossiers.csv') }
format.xlsx { send_data(SpreadsheetArchitect.to_xlsx(data: export[:data], headers: export[:headers]), filename: 'dossiers.xlsx') }
format.ods { send_data(SpreadsheetArchitect.to_ods(data: export[:data], headers: export[:headers]), filename: 'dossiers.ods') }
end
end

View file

@ -201,6 +201,8 @@ class Dossier < ActiveRecord::Base
scope :archived, -> { where(archived: true) }
scope :downloadable, -> { all_state }
def cerfa_available?
procedure.cerfa_flag? && cerfa.size != 0
end
@ -261,21 +263,21 @@ class Dossier < ActiveRecord::Base
return headers
end
def self.export_full_generation(dossiers, format)
if dossiers && !dossiers.empty?
data = []
def self.export_full_generation(dossiers)
data = []
headers = []
if dossiers && dossiers.any?
headers = dossiers.first.export_headers
dossiers.each do |dossier|
data << dossier.convert_specific_array_values_to_string(dossier.data_with_champs)
end
if ["csv"].include?(format)
return SpreadsheetArchitect.to_csv(data: data, headers: headers)
elsif ["xlsx"].include?(format)
return SpreadsheetArchitect.to_xlsx(data: data, headers: headers)
elsif ["ods"].include?(format)
return SpreadsheetArchitect.to_ods(data: data, headers: headers)
end
end
return {
data: data,
headers: headers
}
end
def followers_gestionnaires_emails

View file

@ -1,13 +1,8 @@
%div.dropdown.pull-right#download-menu
- if @facade_data_view.dossiers_to_display.count > 400
%button.btn.btn-error.dropdown-toggle#dropdownDownloadMenu{ type: :button, 'data-toggle' => 'dropdown', 'aria-haspopup' => true, 'aria-expanded' => false, class: 'disabled'}
%span{'data-toggle' => :tooltip, "data-placement" => :left, title: 'Pour réduire le nombre de dossiers et ne pas dépasser la limite autorisée de 400, merci de bien vouloir appliquer des filtres.'}
= t('dynamics.backoffice.limit_excess_download_all_dossiers')
- else
%a.dropdown-toggle#dropdownDownloadMenu.button_navbar{ type: :button, 'data-toggle' => 'dropdown', 'aria-haspopup' => true, 'aria-expanded' => false }
%i.fa.fa-download
= t('dynamics.backoffice.download_all_dossiers')
%span.caret
.dropdown.pull-right#download-menu
%a.dropdown-toggle.button_navbar{ type: :button, 'data-toggle' => 'dropdown', 'aria-haspopup' => true, 'aria-expanded' => false }
%i.fa.fa-download
Télécharger tous les dossiers
%span.caret
%ul.dropdown-menu.dropdown-menu-right
%li
= link_to backoffice_download_dossiers_tps_path(format: :csv, procedure_id: params[:id]), { class: 'btn btn-sm export-link' } do

View file

@ -12,8 +12,6 @@ fr:
pref_list:
title: 'Gestion de colonnes affichées'
description: 'Ce menu vous permet de choisir les différentes colonnes que vous souhaitez voir apparaître dans votre interface de suivi des dossiers.'
download_all_dossiers: 'Télécharger mes dossiers'
limit_excess_download_all_dossiers: 'Limite de dossiers fixée à 400 pour le téléchargement'
format_csv: 'Au format CSV'
format_xlsx: 'Au format XLSX'
format_ods: 'Au format ODS'

View file

@ -611,7 +611,6 @@ describe Dossier do
end
describe '#data_with_champs' do
subject { dossier.data_with_champs }
it { expect(subject[0]).to be_a_kind_of(Integer) }
@ -626,6 +625,27 @@ describe Dossier do
it { expect(subject[9]).to eq(dossier.followers_gestionnaires_emails) }
it { expect(subject.count).to eq(DossierProcedureSerializer.new(dossier).attributes.count + dossier.procedure.types_de_champ.count + dossier.export_entreprise_data.count) }
end
describe '.export_full_generation' do
context 'when there are no dossiers' do
subject { Dossier.export_full_generation(Dossier.none) }
it { expect(subject[:data]).to eq([]) }
it { expect(subject[:headers]).to eq([]) }
end
context 'when there are some dossiers' do
let!(:dossier){ create(:dossier) }
let!(:dossier2){ create(:dossier) }
subject { Dossier.export_full_generation(Dossier.all) }
it { expect(subject[:data].size).to eq(2) }
it { expect(subject[:headers]).to eq(dossier.export_headers) }
end
end
end
describe '#Dossier.to_csv' do
@ -670,7 +690,6 @@ describe Dossier do
it { expect(subject[:entreprise_prenom]).to be_nil }
end
describe '#Dossier.to_xlsx' do
let!(:procedure) { create(:procedure) }
let!(:dossier) { create(:dossier, :with_entreprise, user: user, procedure: procedure) }
@ -966,4 +985,17 @@ describe Dossier do
end
end
describe '.downloadable' do
let(:procedure) { create(:procedure) }
let!(:dossier) { create(:dossier, :with_entreprise, procedure: procedure, state: :draft) }
let!(:dossier2) { create(:dossier, :with_entreprise, procedure: procedure, state: :initiated) }
let!(:dossier3) { create(:dossier, :with_entreprise, procedure: procedure, state: :received) }
subject { procedure.dossiers.downloadable }
it { is_expected.not_to include(dossier)}
it { is_expected.to include(dossier2)}
it { is_expected.to include(dossier3)}
end
end