Add attestation, justificatifs, operation_logs and bill_signatures to dossier export
This commit is contained in:
parent
1fe1fa7a98
commit
a2e87cbb56
4 changed files with 42 additions and 10 deletions
|
@ -23,15 +23,29 @@ class ActiveStorage::DownloadableFile
|
|||
|
||||
private
|
||||
|
||||
def self.timestamped_filename(piece_justificative)
|
||||
def self.timestamped_filename(attachment)
|
||||
# we pad the original file name with a timestamp
|
||||
# and a short id in order to help identify multiple versions and avoid name collisions
|
||||
extension = File.extname(piece_justificative.filename.to_s)
|
||||
basename = File.basename(piece_justificative.filename.to_s, extension)
|
||||
timestamp = piece_justificative.created_at.strftime("%d-%m-%Y-%H-%M")
|
||||
id = piece_justificative.id % 10000
|
||||
folder = self.folder(attachment)
|
||||
extension = File.extname(attachment.filename.to_s)
|
||||
basename = File.basename(attachment.filename.to_s, extension)
|
||||
timestamp = attachment.created_at.strftime("%d-%m-%Y-%H-%M")
|
||||
id = attachment.id % 10000
|
||||
|
||||
"#{basename}-#{timestamp}-#{id}#{extension}"
|
||||
"#{folder}/#{basename}-#{timestamp}-#{id}#{extension}"
|
||||
end
|
||||
|
||||
def self.folder(attachment)
|
||||
case attachment.record_type
|
||||
when 'Dossier'
|
||||
'dossier'
|
||||
when 'DossierOperationLog', 'BillSignature'
|
||||
'horodatage'
|
||||
when 'Commentaire'
|
||||
'messagerie'
|
||||
else
|
||||
'pieces_justificatives'
|
||||
end
|
||||
end
|
||||
|
||||
def using_local_backend?
|
||||
|
|
|
@ -2,8 +2,9 @@ class PiecesJustificativesService
|
|||
def self.liste_pieces_justificatives(dossier)
|
||||
pjs_champs = pjs_for_champs(dossier)
|
||||
pjs_commentaires = pjs_for_commentaires(dossier)
|
||||
pjs_dossier = pjs_for_dossier(dossier)
|
||||
|
||||
(pjs_champs + pjs_commentaires)
|
||||
(pjs_champs + pjs_commentaires + pjs_dossier)
|
||||
.filter(&:attached?)
|
||||
end
|
||||
|
||||
|
@ -59,4 +60,18 @@ class PiecesJustificativesService
|
|||
.commentaires
|
||||
.map(&:piece_jointe)
|
||||
end
|
||||
|
||||
def self.pjs_for_dossier(dossier)
|
||||
bill_signatures = dossier.dossier_operation_logs.map(&:bill_signature).compact.uniq
|
||||
|
||||
[
|
||||
dossier.justificatif_motivation,
|
||||
dossier.attestation&.pdf,
|
||||
dossier.etablissement&.entreprise_attestation_sociale,
|
||||
dossier.etablissement&.entreprise_attestation_fiscale,
|
||||
dossier.dossier_operation_logs.map(&:serialized),
|
||||
bill_signatures.map(&:serialized),
|
||||
bill_signatures.map(&:signature)
|
||||
].flatten.compact
|
||||
end
|
||||
end
|
||||
|
|
|
@ -306,7 +306,7 @@ describe Instructeurs::DossiersController, type: :controller do
|
|||
context 'when the dossier has an attestation' do
|
||||
before do
|
||||
attestation = Attestation.new
|
||||
allow(attestation).to receive(:pdf).and_return(double(read: 'pdf', size: 2.megabytes))
|
||||
allow(attestation).to receive(:pdf).and_return(double(read: 'pdf', size: 2.megabytes, attached?: false))
|
||||
allow(attestation).to receive(:pdf_url).and_return('http://some_document_url')
|
||||
|
||||
allow_any_instance_of(Dossier).to receive(:build_attestation).and_return(attestation)
|
||||
|
|
|
@ -146,6 +146,7 @@ feature 'Instructing a dossier:' do
|
|||
let(:commentaire) { create(:commentaire, instructeur: instructeur, dossier: dossier) }
|
||||
|
||||
before do
|
||||
dossier.passer_en_instruction!(instructeur)
|
||||
champ.piece_justificative_file.attach(io: File.open(path), filename: "piece_justificative_0.pdf", content_type: "application/pdf")
|
||||
|
||||
log_in(instructeur.email, password)
|
||||
|
@ -163,9 +164,10 @@ feature 'Instructing a dossier:' do
|
|||
files = ZipTricks::FileReader.read_zip_structure(io: File.open(DownloadHelpers.download))
|
||||
|
||||
expect(DownloadHelpers.download).to include "dossier-#{dossier.id}.zip"
|
||||
expect(files.size).to be 1
|
||||
expect(files.size).to be 2
|
||||
expect(files[0].filename.include?('piece_justificative_0')).to be_truthy
|
||||
expect(files[0].uncompressed_size).to be File.size(path)
|
||||
expect(files[1].filename.include?('horodatage/operation')).to be_truthy
|
||||
end
|
||||
|
||||
scenario 'A instructeur can download an archive containing several identical attachments' do
|
||||
|
@ -176,12 +178,13 @@ feature 'Instructing a dossier:' do
|
|||
files = ZipTricks::FileReader.read_zip_structure(io: File.open(DownloadHelpers.download))
|
||||
|
||||
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[1].filename.include?('piece_justificative_0')).to be_truthy
|
||||
expect(files[0].filename).not_to eq files[1].filename
|
||||
expect(files[0].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
|
||||
end
|
||||
|
||||
after { DownloadHelpers.clear_downloads }
|
||||
|
|
Loading…
Reference in a new issue