Revert "Revert "Export de tous les dossier d'une démarche""
This reverts commit d9a588b52e
.
This commit is contained in:
parent
533fa903bc
commit
f40d96fbd2
32 changed files with 675 additions and 36 deletions
|
@ -1,10 +1,11 @@
|
|||
class PiecesJustificativesService
|
||||
def self.liste_pieces_justificatives(dossier)
|
||||
dossier_export = generate_dossier_export(dossier)
|
||||
pjs_champs = pjs_for_champs(dossier)
|
||||
pjs_commentaires = pjs_for_commentaires(dossier)
|
||||
pjs_dossier = pjs_for_dossier(dossier)
|
||||
|
||||
(pjs_champs + pjs_commentaires + pjs_dossier)
|
||||
([dossier_export] + pjs_champs + pjs_commentaires + pjs_dossier)
|
||||
.filter(&:attached?)
|
||||
end
|
||||
|
||||
|
@ -43,6 +44,17 @@ class PiecesJustificativesService
|
|||
|
||||
private
|
||||
|
||||
def self.generate_dossier_export(dossier)
|
||||
pdf = ApplicationController
|
||||
.render(template: 'dossiers/show', formats: [:pdf],
|
||||
assigns: {
|
||||
include_infos_administration: true,
|
||||
dossier: dossier
|
||||
})
|
||||
dossier.pdf_export_for_instructeur.attach(io: StringIO.open(pdf), filename: "export-#{dossier.id}.pdf", content_type: 'application/pdf')
|
||||
dossier.pdf_export_for_instructeur
|
||||
end
|
||||
|
||||
def self.pjs_for_champs(dossier)
|
||||
allowed_champs = dossier.champs + dossier.champs_private
|
||||
|
||||
|
|
72
app/services/procedure_archive_service.rb
Normal file
72
app/services/procedure_archive_service.rb
Normal file
|
@ -0,0 +1,72 @@
|
|||
require 'tempfile'
|
||||
|
||||
class ProcedureArchiveService
|
||||
def initialize(procedure)
|
||||
@procedure = procedure
|
||||
end
|
||||
|
||||
def create_pending_archive(instructeur, type, month = nil)
|
||||
groupe_instructeurs = instructeur
|
||||
.groupe_instructeurs
|
||||
.where(procedure: @procedure)
|
||||
|
||||
Archive.find_or_create_archive(type, month, groupe_instructeurs)
|
||||
end
|
||||
|
||||
def collect_files_archive(archive, instructeur)
|
||||
if archive.time_span_type == 'everything'
|
||||
dossiers = @procedure.dossiers.state_termine
|
||||
else
|
||||
dossiers = @procedure.dossiers.processed_in_month(archive.month)
|
||||
end
|
||||
|
||||
files = create_list_of_attachments(dossiers)
|
||||
|
||||
tmp_file = Tempfile.new(['tc', '.zip'])
|
||||
|
||||
Zip::OutputStream.open(tmp_file) do |zipfile|
|
||||
files.each do |attachment, pj_filename|
|
||||
zipfile.put_next_entry(pj_filename)
|
||||
zipfile.puts(attachment.download)
|
||||
end
|
||||
end
|
||||
|
||||
archive.file.attach(io: File.open(tmp_file), filename: archive.filename(@procedure))
|
||||
tmp_file.delete
|
||||
archive.make_available!
|
||||
InstructeurMailer.send_archive(instructeur, @procedure, archive).deliver_later
|
||||
end
|
||||
|
||||
def self.procedure_files_size(procedure)
|
||||
dossiers_files_size(procedure.dossiers)
|
||||
end
|
||||
|
||||
def self.dossiers_files_size(dossiers)
|
||||
dossiers.map do |dossier|
|
||||
liste_pieces_justificatives_for_archive(dossier).sum(&:byte_size)
|
||||
end.sum
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_list_of_attachments(dossiers)
|
||||
dossiers.flat_map do |dossier|
|
||||
ActiveStorage::DownloadableFile.create_list_from_dossier(dossier)
|
||||
end
|
||||
end
|
||||
|
||||
def self.attachments_from_champs_piece_justificative(champs)
|
||||
champs
|
||||
.filter { |c| c.type_champ == TypeDeChamp.type_champs.fetch(:piece_justificative) }
|
||||
.filter { |pj| pj.piece_justificative_file.attached? }
|
||||
.map(&:piece_justificative_file)
|
||||
end
|
||||
|
||||
def self.liste_pieces_justificatives_for_archive(dossier)
|
||||
champs_blocs_repetables = dossier.champs
|
||||
.filter { |c| c.type_champ == TypeDeChamp.type_champs.fetch(:repetition) }
|
||||
.flat_map(&:champs)
|
||||
|
||||
attachments_from_champs_piece_justificative(champs_blocs_repetables + dossier.champs)
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue