add pdf to pjs export
This commit is contained in:
parent
e90957dd32
commit
60cc4d3697
6 changed files with 32 additions and 10 deletions
|
@ -210,6 +210,7 @@ module Instructeurs
|
||||||
def telecharger_pjs
|
def telecharger_pjs
|
||||||
return head(:forbidden) if !dossier.attachments_downloadable?
|
return head(:forbidden) if !dossier.attachments_downloadable?
|
||||||
|
|
||||||
|
generate_pdf_for_instructeur_export
|
||||||
files = ActiveStorage::DownloadableFile.create_list_from_dossier(dossier)
|
files = ActiveStorage::DownloadableFile.create_list_from_dossier(dossier)
|
||||||
|
|
||||||
zipline(files, "dossier-#{dossier.id}.zip")
|
zipline(files, "dossier-#{dossier.id}.zip")
|
||||||
|
@ -232,6 +233,12 @@ module Instructeurs
|
||||||
@dossier ||= current_instructeur.dossiers.find(params[:dossier_id])
|
@dossier ||= current_instructeur.dossiers.find(params[:dossier_id])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def generate_pdf_for_instructeur_export
|
||||||
|
@include_infos_administration = true
|
||||||
|
pdf = render_to_string(file: 'dossiers/show', formats: [:pdf])
|
||||||
|
dossier.pdf_export_for_instructeur.attach(io: StringIO.open(pdf), filename: "export-#{dossier.id}.pdf", content_type: 'application/pdf')
|
||||||
|
end
|
||||||
|
|
||||||
def commentaire_params
|
def commentaire_params
|
||||||
params.require(:commentaire).permit(:body, :piece_jointe)
|
params.require(:commentaire).permit(:body, :piece_jointe)
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,12 +13,14 @@ class ActiveStorage::DownloadableFile
|
||||||
|
|
||||||
def self.create_list_from_dossier(dossier)
|
def self.create_list_from_dossier(dossier)
|
||||||
pjs = PiecesJustificativesService.liste_pieces_justificatives(dossier)
|
pjs = PiecesJustificativesService.liste_pieces_justificatives(dossier)
|
||||||
pjs.map do |piece_justificative|
|
files = pjs.map do |piece_justificative|
|
||||||
[
|
[
|
||||||
piece_justificative,
|
piece_justificative,
|
||||||
self.timestamped_filename(piece_justificative)
|
self.timestamped_filename(piece_justificative)
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
files << [dossier.pdf_export_for_instructeur, self.timestamped_filename(dossier.pdf_export_for_instructeur)]
|
||||||
|
files
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -63,6 +63,7 @@ class Dossier < ApplicationRecord
|
||||||
has_one :france_connect_information, through: :user
|
has_one :france_connect_information, through: :user
|
||||||
|
|
||||||
has_one_attached :justificatif_motivation
|
has_one_attached :justificatif_motivation
|
||||||
|
has_one_attached :pdf_export_for_instructeur
|
||||||
|
|
||||||
has_many :champs, -> { root.public_ordered }, inverse_of: :dossier, dependent: :destroy
|
has_many :champs, -> { root.public_ordered }, inverse_of: :dossier, dependent: :destroy
|
||||||
has_many :champs_private, -> { root.private_ordered }, class_name: 'Champ', inverse_of: :dossier, dependent: :destroy
|
has_many :champs_private, -> { root.private_ordered }, class_name: 'Champ', inverse_of: :dossier, dependent: :destroy
|
||||||
|
|
|
@ -201,6 +201,15 @@ FactoryBot.define do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
trait :with_pdf_export do
|
||||||
|
after(:create) do |dossier, _evaluator|
|
||||||
|
dossier.pdf_export_for_instructeur.attach(
|
||||||
|
io: StringIO.new('Hello World'),
|
||||||
|
filename: 'export.pdf'
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
trait :with_justificatif do
|
trait :with_justificatif do
|
||||||
after(:create) do |dossier, _evaluator|
|
after(:create) do |dossier, _evaluator|
|
||||||
dossier.justificatif_motivation.attach(
|
dossier.justificatif_motivation.attach(
|
||||||
|
|
|
@ -162,10 +162,11 @@ feature 'Instructing a dossier:' do
|
||||||
files = ZipTricks::FileReader.read_zip_structure(io: File.open(DownloadHelpers.download))
|
files = ZipTricks::FileReader.read_zip_structure(io: File.open(DownloadHelpers.download))
|
||||||
|
|
||||||
expect(DownloadHelpers.download).to include "dossier-#{dossier.id}.zip"
|
expect(DownloadHelpers.download).to include "dossier-#{dossier.id}.zip"
|
||||||
expect(files.size).to be 2
|
expect(files.size).to be 3
|
||||||
expect(files[0].filename.include?('piece_justificative_0')).to be_truthy
|
expect(files[0].filename.include?('piece_justificative_0')).to be_truthy
|
||||||
expect(files[0].uncompressed_size).to be File.size(path)
|
expect(files[0].uncompressed_size).to be File.size(path)
|
||||||
expect(files[1].filename.include?('horodatage/operation')).to be_truthy
|
expect(files[1].filename.include?('horodatage/operation')).to be_truthy
|
||||||
|
expect(files[2].filename.include?('dossier/export')).to be_truthy
|
||||||
end
|
end
|
||||||
|
|
||||||
scenario 'A instructeur can download an archive containing several identical attachments' do
|
scenario 'A instructeur can download an archive containing several identical attachments' do
|
||||||
|
@ -176,13 +177,14 @@ feature 'Instructing a dossier:' do
|
||||||
files = ZipTricks::FileReader.read_zip_structure(io: File.open(DownloadHelpers.download))
|
files = ZipTricks::FileReader.read_zip_structure(io: File.open(DownloadHelpers.download))
|
||||||
|
|
||||||
expect(DownloadHelpers.download).to include "dossier-#{dossier.id}.zip"
|
expect(DownloadHelpers.download).to include "dossier-#{dossier.id}.zip"
|
||||||
expect(files.size).to be 3
|
expect(files.size).to be 4
|
||||||
expect(files[0].filename.include?('piece_justificative_0')).to be_truthy
|
expect(files[0].filename.include?('piece_justificative_0')).to be_truthy
|
||||||
expect(files[1].filename.include?('piece_justificative_0')).to be_truthy
|
expect(files[1].filename.include?('piece_justificative_0')).to be_truthy
|
||||||
expect(files[0].filename).not_to eq files[1].filename
|
expect(files[0].filename).not_to eq files[1].filename
|
||||||
expect(files[0].uncompressed_size).to be File.size(path)
|
expect(files[0].uncompressed_size).to be File.size(path)
|
||||||
expect(files[1].uncompressed_size).to be File.size(path)
|
expect(files[1].uncompressed_size).to be File.size(path)
|
||||||
expect(files[2].filename.include?('horodatage/operation')).to be_truthy
|
expect(files[2].filename.include?('horodatage/operation')).to be_truthy
|
||||||
|
expect(files[3].filename.include?('dossier/export')).to be_truthy
|
||||||
end
|
end
|
||||||
|
|
||||||
before { DownloadHelpers.clear_downloads }
|
before { DownloadHelpers.clear_downloads }
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
describe ActiveStorage::DownloadableFile do
|
describe ActiveStorage::DownloadableFile do
|
||||||
let(:dossier) { create(:dossier, :en_construction) }
|
let(:dossier) { create(:dossier, :en_construction, :with_pdf_export) }
|
||||||
|
|
||||||
subject(:list) { ActiveStorage::DownloadableFile.create_list_from_dossier(dossier) }
|
subject(:list) { ActiveStorage::DownloadableFile.create_list_from_dossier(dossier) }
|
||||||
|
|
||||||
describe 'create_list_from_dossier' do
|
describe 'create_list_from_dossier' do
|
||||||
context 'when no piece_justificative is present' do
|
context 'when no piece_justificative is present' do
|
||||||
it { expect(list).to match([]) }
|
it { expect(list.length).to eq 1 }
|
||||||
|
it { expect(list.first[0].record_type).to eq "Dossier" }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there is a piece_justificative' do
|
context 'when there is a piece_justificative' do
|
||||||
|
@ -13,7 +14,7 @@ describe ActiveStorage::DownloadableFile do
|
||||||
dossier.champs << create(:champ_piece_justificative, :with_piece_justificative_file, dossier: dossier)
|
dossier.champs << create(:champ_piece_justificative, :with_piece_justificative_file, dossier: dossier)
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect(list.length).to eq 1 }
|
it { expect(list.length).to eq 2 }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there is a private piece_justificative' do
|
context 'when there is a private piece_justificative' do
|
||||||
|
@ -21,7 +22,7 @@ describe ActiveStorage::DownloadableFile do
|
||||||
dossier.champs_private << create(:champ_piece_justificative, :with_piece_justificative_file, private: true, dossier: dossier)
|
dossier.champs_private << create(:champ_piece_justificative, :with_piece_justificative_file, private: true, dossier: dossier)
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect(list.length).to eq 1 }
|
it { expect(list.length).to eq 2 }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there is a repetition bloc' do
|
context 'when there is a repetition bloc' do
|
||||||
|
@ -30,7 +31,7 @@ describe ActiveStorage::DownloadableFile do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should have 4 piece_justificatives' do
|
it 'should have 4 piece_justificatives' do
|
||||||
expect(list.size).to eq 4
|
expect(list.size).to eq 5
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -39,7 +40,7 @@ describe ActiveStorage::DownloadableFile do
|
||||||
dossier.commentaires << create(:commentaire, dossier: dossier)
|
dossier.commentaires << create(:commentaire, dossier: dossier)
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect(list.length).to eq 0 }
|
it { expect(list.length).to eq 1 }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there is a message with an attachment' do
|
context 'when there is a message with an attachment' do
|
||||||
|
@ -47,7 +48,7 @@ describe ActiveStorage::DownloadableFile do
|
||||||
dossier.commentaires << create(:commentaire, :with_file, dossier: dossier)
|
dossier.commentaires << create(:commentaire, :with_file, dossier: dossier)
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect(list.length).to eq 1 }
|
it { expect(list.length).to eq 2 }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue