a29fb5cc5b
Identity fields are displayed on two columns, but until now Dossier fields were displayed on two lines. This was because of a bug in format_in_2_columns, where the multiple- lines fields were not handled properly. This has been fixed a while back by @maatinito, so we can now enable two-columns formatting even for Dossier fields.
218 lines
8.1 KiB
Ruby
218 lines
8.1 KiB
Ruby
require 'prawn/measurement_extensions'
|
||
|
||
def format_in_2_lines(pdf, label, text)
|
||
pdf.font 'marianne', style: :bold, size: 10 do
|
||
pdf.text label
|
||
end
|
||
pdf.text text, size: 9
|
||
pdf.text "\n", size: 9
|
||
end
|
||
|
||
def render_box(pdf, text, x, width)
|
||
box = ::Prawn::Text::Box.new(text.to_s, { document: pdf, width: width, overflow: :expand, at: [x, pdf.cursor] })
|
||
box.render
|
||
box.height
|
||
end
|
||
|
||
def format_in_2_columns(pdf, label, text)
|
||
h1 = render_box(pdf, label, 0, 100)
|
||
h2 = render_box(pdf, ':', 100, 10)
|
||
h3 = render_box(pdf, text, 110, pdf.bounds.width - 110)
|
||
pdf.move_down 5 + [h1,h2,h3].max
|
||
end
|
||
|
||
def add_title(pdf, title)
|
||
title_style = {style: :bold, size: 20}
|
||
pdf.font 'marianne', title_style do
|
||
pdf.text title
|
||
end
|
||
pdf.text "\n"
|
||
end
|
||
|
||
def format_date(date)
|
||
I18n.l(date, format: :message_date_with_year)
|
||
end
|
||
|
||
def add_identite_individual(pdf, dossier)
|
||
format_in_2_columns(pdf, "Civilité", dossier.individual.gender)
|
||
format_in_2_columns(pdf, "Nom", dossier.individual.nom)
|
||
format_in_2_columns(pdf, "Prénom", dossier.individual.prenom)
|
||
|
||
if dossier.individual.birthdate.present?
|
||
format_in_2_columns(pdf, "Date de naissance", try_format_date(dossier.individual.birthdate))
|
||
end
|
||
end
|
||
|
||
def render_siret_info(pdf, etablissement)
|
||
pdf.text " - Dénomination : #{raison_sociale_or_name(etablissement)}"
|
||
pdf.text " - Forme juridique : #{etablissement.entreprise_forme_juridique}"
|
||
if etablissement.entreprise_capital_social.present?
|
||
pdf.text " - Capital social : #{pretty_currency(etablissement.entreprise_capital_social)}"
|
||
end
|
||
pdf.text "\n"
|
||
end
|
||
|
||
def render_identite_etablissement(pdf, etablissement)
|
||
format_in_2_columns(pdf, "SIRET", etablissement.siret)
|
||
format_in_2_columns(pdf, "SIRET du siège social", etablissement.entreprise.siret_siege_social) if etablissement.entreprise.siret_siege_social.present?
|
||
format_in_2_columns(pdf, "Dénomination", raison_sociale_or_name(etablissement))
|
||
format_in_2_columns(pdf, "Forme juridique ", etablissement.entreprise_forme_juridique)
|
||
if etablissement.entreprise_capital_social.present?
|
||
format_in_2_columns(pdf, "Capital social ", pretty_currency(etablissement.entreprise_capital_social))
|
||
end
|
||
format_in_2_columns(pdf, "Libellé NAF ", etablissement.libelle_naf)
|
||
format_in_2_columns(pdf, "Code NAF ", etablissement.naf)
|
||
format_in_2_columns(pdf, "Date de création ", try_format_date(etablissement.entreprise.date_creation))
|
||
if @include_infos_administration
|
||
format_in_2_columns(pdf, "Effectif mensuel #{try_format_mois_effectif(etablissement)} (URSSAF) ", etablissement.entreprise_effectif_mensuel)
|
||
format_in_2_columns(pdf, "Effectif moyen annuel #{etablissement.entreprise_effectif_annuel_annee} (URSSAF) ", etablissement.entreprise_effectif_annuel)
|
||
end
|
||
format_in_2_columns(pdf, "Effectif (ISPF) ", effectif(etablissement))
|
||
format_in_2_columns(pdf, "Code effectif ", etablissement.entreprise.code_effectif_entreprise)
|
||
format_in_2_columns(pdf, "Numéro de TVA intracommunautaire ", etablissement.entreprise.numero_tva_intracommunautaire) if etablissement.entreprise.numero_tva_intracommunautaire.present?
|
||
format_in_2_columns(pdf, "Adresse ", etablissement.adresse)
|
||
if etablissement.association?
|
||
format_in_2_columns(pdf, "Numéro RNA ", etablissement.association_rna)
|
||
format_in_2_columns(pdf, "Titre ", etablissement.association_titre)
|
||
format_in_2_columns(pdf, "Objet ", etablissement.association_objet)
|
||
format_in_2_columns(pdf, "Date de création ", try_format_date(etablissement.association_date_creation))
|
||
format_in_2_columns(pdf, "Date de publication ", try_format_date(etablissement.association_date_publication))
|
||
format_in_2_columns(pdf, "Date de déclaration ", try_format_date(etablissement.association_date_declaration))
|
||
end
|
||
end
|
||
|
||
def render_single_champ(pdf, champ)
|
||
case champ.type
|
||
when 'Champs::RepetitionChamp'
|
||
raise 'There should not be a RepetitionChamp here !'
|
||
when 'Champs::PieceJustificativeChamp'
|
||
return
|
||
when 'Champs::HeaderSectionChamp'
|
||
pdf.font 'marianne', style: :bold, size: 14 do
|
||
pdf.text champ.libelle
|
||
end
|
||
pdf.text "\n"
|
||
when 'Champs::ExplicationChamp'
|
||
format_in_2_columns(pdf, champ.libelle, champ.description)
|
||
when 'Champs::CarteChamp'
|
||
format_in_2_columns(pdf, champ.libelle, champ.to_feature_collection.to_json)
|
||
when 'Champs::SiretChamp'
|
||
pdf.font 'marianne', style: :bold, size: 9 do
|
||
pdf.text champ.libelle
|
||
end
|
||
pdf.text " - SIRET: #{champ.to_s}"
|
||
render_identite_etablissement(pdf, champ.etablissement) if champ.etablissement.present?
|
||
pdf.text "\n"
|
||
when 'Champs::NumberChamp'
|
||
value = number_with_delimiter(champ.to_s)
|
||
format_in_2_columns(pdf, champ.libelle, value)
|
||
else
|
||
value = champ.to_s.empty? ? 'Non communiqué' : champ.to_s
|
||
format_in_2_columns(pdf, champ.libelle, value)
|
||
end
|
||
end
|
||
|
||
def add_champs(pdf, champs)
|
||
champs.each do |champ|
|
||
if champ.type == 'Champs::RepetitionChamp'
|
||
champ.rows.each do |row|
|
||
row.each do |inner_champ|
|
||
render_single_champ(pdf, inner_champ)
|
||
end
|
||
end
|
||
else
|
||
render_single_champ(pdf, champ)
|
||
end
|
||
end
|
||
end
|
||
|
||
def add_message(pdf, message)
|
||
sender = message.redacted_email
|
||
if message.sent_by_system?
|
||
sender = 'Email automatique'
|
||
elsif message.sent_by?(@dossier.user)
|
||
sender = @dossier.user.email
|
||
end
|
||
|
||
pdf.text "#{sender}, #{format_date(message.created_at)}", style: :bold
|
||
pdf.text ActionView::Base.full_sanitizer.sanitize(message.body), size: 9
|
||
pdf.text "\n", size: 9
|
||
end
|
||
|
||
def add_avis(pdf, avis)
|
||
pdf.text "Avis de #{avis.email_to_display}", style: :bold
|
||
if avis.confidentiel?
|
||
pdf.text "(confidentiel)", style: :bold
|
||
end
|
||
text = avis.answer || 'En attente de réponse'
|
||
pdf.text text
|
||
pdf.text "\n"
|
||
end
|
||
|
||
def add_etats_dossier(pdf, dossier)
|
||
if dossier.en_construction_at.present?
|
||
format_in_2_columns(pdf, "Déposé le", try_format_date(dossier.en_construction_at))
|
||
end
|
||
if dossier.en_instruction_at.present?
|
||
format_in_2_columns(pdf, "En instruction le", try_format_date(dossier.en_instruction_at))
|
||
end
|
||
if dossier.processed_at.present?
|
||
format_in_2_columns(pdf, "Décision le", try_format_date(dossier.processed_at))
|
||
end
|
||
|
||
pdf.text "\n"
|
||
end
|
||
|
||
prawn_document(page_size: "A4") do |pdf|
|
||
pdf.font_families.update( 'marianne' => {
|
||
normal: Rails.root.join('lib/prawn/fonts/marianne/marianne-regular.ttf' ),
|
||
bold: Rails.root.join('lib/prawn/fonts/marianne/marianne-bold.ttf' ),
|
||
})
|
||
pdf.font 'marianne'
|
||
|
||
pdf.svg IO.read(DOSSIER_PDF_EXPORT_LOGO_SRC), width: 300, position: :center
|
||
pdf.move_down(40)
|
||
|
||
format_in_2_columns(pdf, 'Dossier Nº', @dossier.id.to_s)
|
||
format_in_2_columns(pdf, 'Démarche', @dossier.procedure.libelle)
|
||
format_in_2_columns(pdf, 'Organisme', @dossier.procedure.organisation_name)
|
||
pdf.text "\n"
|
||
|
||
pdf.text "Ce dossier est <b>#{dossier_display_state(@dossier, lower: true)}</b>.", inline_format: true
|
||
pdf.text "\n"
|
||
if @dossier.motivation.present?
|
||
format_in_2_columns(pdf, "Motif de la décision", @dossier.motivation)
|
||
end
|
||
add_title(pdf, 'Historique')
|
||
add_etats_dossier(pdf, @dossier)
|
||
|
||
add_title(pdf, "Identité du demandeur")
|
||
|
||
if @dossier.france_connect_information.present?
|
||
format_in_2_columns(pdf, 'Informations France Connect', "Le dossier a été déposé par le compte de #{@dossier.france_connect_information.given_name} #{@dossier.france_connect_information.family_name}, authentifié par France Connect le #{@dossier.france_connect_information.updated_at.strftime('%d/%m/%Y')}")
|
||
end
|
||
format_in_2_columns(pdf, "Email", @dossier.user.email)
|
||
add_identite_individual(pdf, @dossier) if @dossier.individual.present?
|
||
render_identite_etablissement(pdf, @dossier.etablissement) if @dossier.etablissement.present?
|
||
pdf.text "\n"
|
||
|
||
add_title(pdf, 'Formulaire')
|
||
add_champs(pdf, @dossier.champs)
|
||
|
||
if @include_infos_administration && @dossier.champs_private&.size > 0
|
||
add_title(pdf, "Annotations privées")
|
||
add_champs(pdf, @dossier.champs_private)
|
||
end
|
||
|
||
if @include_infos_administration && @dossier.avis.present?
|
||
add_title(pdf, "Avis")
|
||
@dossier.avis.each do |avis|
|
||
add_avis(pdf, avis)
|
||
end
|
||
end
|
||
|
||
add_title(pdf, 'Messagerie')
|
||
@dossier.commentaires.each do |commentaire|
|
||
add_message(pdf, commentaire)
|
||
end
|
||
end
|