[#1203] Define tags in constants rather than methods

This commit is contained in:
Frederic Merizen 2018-01-18 11:52:48 +01:00
parent db5bf39e32
commit a21dee680d
2 changed files with 130 additions and 135 deletions

View file

@ -19,6 +19,6 @@ module MailTemplateConcern
end end
def dossier_tags def dossier_tags
super + dossier_tags_for_mail TagsSubstitutionConcern::DOSSIER_TAGS + TagsSubstitutionConcern::DOSSIER_TAGS_FOR_MAIL
end end
end end

View file

@ -4,11 +4,116 @@ module TagsSubstitutionConcern
include Rails.application.routes.url_helpers include Rails.application.routes.url_helpers
include ActionView::Helpers::UrlHelper include ActionView::Helpers::UrlHelper
DOSSIER_TAGS = [
{
libelle: 'motivation',
description: 'Motivation facultative associée à la décision finale dacceptation, refus ou classement sans suite',
target: :motivation,
available_for_states: Dossier::TERMINE
},
{
libelle: 'date de dépôt',
description: 'Date du passage en construction du dossier par lusager',
lambda: -> (d) { format_date(d.en_construction_at) },
available_for_states: Dossier::SOUMIS
},
{
libelle: 'date de passage en instruction',
description: '',
lambda: -> (d) { format_date(d.en_instruction_at) },
available_for_states: Dossier::INSTRUCTION_COMMENCEE
},
{
libelle: 'date de décision',
description: 'Date de la décision dacceptation, refus, ou classement sans suite',
lambda: -> (d) { format_date(d.processed_at) },
available_for_states: Dossier::TERMINE
},
{
libelle: 'libellé procédure',
description: '',
lambda: -> (d) { d.procedure.libelle },
available_for_states: Dossier::SOUMIS
},
{
libelle: 'numéro du dossier',
description: '',
target: :id,
available_for_states: Dossier::SOUMIS
}
]
DOSSIER_TAGS_FOR_MAIL = [
{
libelle: 'lien dossier',
description: '',
lambda: -> (d) { users_dossier_recapitulatif_link(d) },
available_for_states: Dossier::SOUMIS
}
]
INDIVIDUAL_TAGS = [
{
libelle: 'civilité',
description: 'M., Mme',
target: :gender,
available_for_states: Dossier::SOUMIS
},
{
libelle: 'nom',
description: "nom de l'usager",
target: :nom,
available_for_states: Dossier::SOUMIS
},
{
libelle: 'prénom',
description: "prénom de l'usager",
target: :prenom,
available_for_states: Dossier::SOUMIS
}
]
ENTREPRISE_TAGS = [
{
libelle: 'SIREN',
description: '',
target: :siren,
available_for_states: Dossier::SOUMIS
},
{
libelle: 'numéro de TVA intracommunautaire',
description: '',
target: :numero_tva_intracommunautaire,
available_for_states: Dossier::SOUMIS
},
{
libelle: 'SIRET du siège social',
description: '',
target: :siret_siege_social,
available_for_states: Dossier::SOUMIS
},
{
libelle: 'raison sociale',
description: '',
target: :raison_sociale,
available_for_states: Dossier::SOUMIS
}
]
ETABLISSEMENT_TAGS = [
{
libelle: 'adresse',
description: '',
target: :inline_adresse,
available_for_states: Dossier::SOUMIS
}
]
def tags def tags
if procedure.for_individual? if procedure.for_individual?
identity_tags = individual_tags identity_tags = INDIVIDUAL_TAGS
else else
identity_tags = entreprise_tags + etablissement_tags identity_tags = ENTREPRISE_TAGS + ETABLISSEMENT_TAGS
end end
filter_tags(identity_tags + dossier_tags) + procedure_type_de_champ_public_private_tags filter_tags(identity_tags + dossier_tags) + procedure_type_de_champ_public_private_tags
@ -16,6 +121,24 @@ module TagsSubstitutionConcern
private private
def format_date(date)
if date.present?
date.localtime.strftime('%d/%m/%Y')
else
''
end
end
def users_dossier_recapitulatif_link(dossier)
url = users_dossier_recapitulatif_url(dossier)
link_to(url, url, target: '_blank')
end
def dossier_tags
# Overridden by MailTemplateConcern
DOSSIER_TAGS
end
def filter_tags(tags) def filter_tags(tags)
# Implementation note: emails and attestation generations are generally # Implementation note: emails and attestation generations are generally
# triggerred by changes to the dossiers state. The email or attestation # triggerred by changes to the dossiers state. The email or attestation
@ -38,134 +161,6 @@ module TagsSubstitutionConcern
.map { |tdc| { libelle: tdc.libelle, description: tdc.description } } .map { |tdc| { libelle: tdc.libelle, description: tdc.description } }
end end
def dossier_tags
[
{
libelle: 'motivation',
description: 'Motivation facultative associée à la décision finale dacceptation, refus ou classement sans suite',
target: :motivation,
available_for_states: Dossier::TERMINE
},
{
libelle: 'date de dépôt',
description: 'Date du passage en construction du dossier par lusager',
lambda: -> (d) { format_date(d.en_construction_at) },
available_for_states: Dossier::SOUMIS
},
{
libelle: 'date de passage en instruction',
description: '',
lambda: -> (d) { format_date(d.en_instruction_at) },
available_for_states: Dossier::INSTRUCTION_COMMENCEE
},
{
libelle: 'date de décision',
description: 'Date de la décision dacceptation, refus, ou classement sans suite',
lambda: -> (d) { format_date(d.processed_at) },
available_for_states: Dossier::TERMINE
},
{
libelle: 'libellé procédure',
description: '',
lambda: -> (d) { d.procedure.libelle },
available_for_states: Dossier::SOUMIS
},
{
libelle: 'numéro du dossier',
description: '',
target: :id,
available_for_states: Dossier::SOUMIS
}
]
end
def format_date(date)
if date.present?
date.localtime.strftime('%d/%m/%Y')
else
''
end
end
def dossier_tags_for_mail
[
{
libelle: 'lien dossier',
description: '',
lambda: -> (d) { users_dossier_recapitulatif_link(d) },
available_for_states: Dossier::SOUMIS
}
]
end
def users_dossier_recapitulatif_link(dossier)
url = users_dossier_recapitulatif_url(dossier)
link_to(url, url, target: '_blank')
end
def individual_tags
[
{
libelle: 'civilité',
description: 'M., Mme',
target: :gender,
available_for_states: Dossier::SOUMIS
},
{
libelle: 'nom',
description: "nom de l'usager",
target: :nom,
available_for_states: Dossier::SOUMIS
},
{
libelle: 'prénom',
description: "prénom de l'usager",
target: :prenom,
available_for_states: Dossier::SOUMIS
}
]
end
def entreprise_tags
[
{
libelle: 'SIREN',
description: '',
target: :siren,
available_for_states: Dossier::SOUMIS
},
{
libelle: 'numéro de TVA intracommunautaire',
description: '',
target: :numero_tva_intracommunautaire,
available_for_states: Dossier::SOUMIS
},
{
libelle: 'SIRET du siège social',
description: '',
target: :siret_siege_social,
available_for_states: Dossier::SOUMIS
},
{
libelle: 'raison sociale',
description: '',
target: :raison_sociale,
available_for_states: Dossier::SOUMIS
}
]
end
def etablissement_tags
[
{
libelle: 'adresse',
description: '',
target: :inline_adresse,
available_for_states: Dossier::SOUMIS
}
]
end
def replace_tags(text, dossier) def replace_tags(text, dossier)
if text.nil? if text.nil?
return '' return ''
@ -176,9 +171,9 @@ module TagsSubstitutionConcern
tags_and_datas = [ tags_and_datas = [
[dossier_tags, dossier], [dossier_tags, dossier],
[individual_tags, dossier.individual], [INDIVIDUAL_TAGS, dossier.individual],
[entreprise_tags, dossier.entreprise], [ENTREPRISE_TAGS, dossier.entreprise],
[etablissement_tags, dossier.entreprise&.etablissement] [ETABLISSEMENT_TAGS, dossier.entreprise&.etablissement]
] ]
tags_and_datas tags_and_datas
@ -202,7 +197,7 @@ module TagsSubstitutionConcern
if tag.key?(:target) if tag.key?(:target)
value = data.send(tag[:target]) value = data.send(tag[:target])
else else
value = tag[:lambda].(data) value = instance_exec(data, &tag[:lambda])
end end
replace_tag(acc, tag, value) replace_tag(acc, tag, value)
end end