Début ajout fonctionnalités demandées :

- paramétrer le numéro de reçu
- imprimer à la demande l'adresse de courriel

FossilOrigin-Name: 10c1ca642474c2b00b7d0197afc736f2c2aca3b453808ac1fda19e14b0acc092
This commit is contained in:
engel 2023-01-19 16:54:00 +00:00
parent b077f70fb3
commit e219afb405
5 changed files with 127 additions and 32 deletions

View File

@ -26,5 +26,10 @@
"remarque" : "aide aux personnes en difficulté", "remarque" : "aide aux personnes en difficulté",
"valeur" : 0 "valeur" : 0
} }
] ],
"numerotation" : {
"prefixe" : "",
"separateur" : "-",
"defaut" : "%a-%m"
}
} }

View File

@ -15,7 +15,7 @@
<fieldset> <fieldset>
<dl class="config"> <dl class="config">
<dt><label>Objet (but) de l'association</label> <b title="Champ obligatoire">(obligatoire)</b></dt> <dt><label>Objet (but) de l'association</label> <b title="Champ obligatoire">(obligatoire)</b></dt>
{input type="textarea" name="objet_asso" source=$plugin.config label="" required="required" cols="50" rows="4" maxlength=300} {input type="textarea" name="objet_asso" source=$plugin.config label="" required="required" cols="100" rows="3" maxlength=300}
</dl> </dl>
<dl class="config"> <dl class="config">
@ -23,17 +23,19 @@
<b title="Champ obligatoire">(obligatoire ; sélectionnez tous les articles qui s'appliquent à <b title="Champ obligatoire">(obligatoire ; sélectionnez tous les articles qui s'appliquent à
l'association)</b> l'association)</b>
</dt> </dt>
{foreach from=$plugin_config->articlesCGI key="key" item="article"} <div id="articles_cgi">
{* {foreach from=$plugin_config->articlesCGI key="key" item="article"}
{*
À VÉRIFIER : {input : checked ne fonctionne pas si l'attribut name est un tableau... À VÉRIFIER : {input : checked ne fonctionne pas si l'attribut name est un tableau...
{input type="checkbox" name="articlesCGI[]" value=$key label=$article.titre} {input type="checkbox" name="articlesCGI[]" value=$key label=$article.titre}
*} *}
<div> <div class="article">
<input type="checkbox" name="articlesCGI[]" id="article_{$key}" value="{$key}" class="choix" <input type="checkbox" name="articlesCGI[]" id="article_{$key}" value="{$key}" class="choix"
{if $article.valeur == 1}checked{/if} /> {if $article.valeur == 1}checked{/if} />
<label for="article_{$key}">Article {$article.titre}</label> <label for="article_{$key}">Article {$article.titre}</label>
</div> </div>
{/foreach} {/foreach}
</div>
</dl> </dl>
<dl class="config"> <dl class="config">
@ -54,16 +56,37 @@
<fieldset> <fieldset>
<legend>Nom, fonction et signature du responsable</legend> <legend>Nom, fonction et signature du responsable</legend>
<dl class="config"> <div id="config_nom_fonction">
<dt><label>Nom</label></dt>
{input type="text" name="nom_responsable" source=$plugin.config label="" maxlength=50}
</dl>
<dl class="config"> {* Nom du responsable *}
<dt><label>Fonction</label></dt> <dl class="config">
{input type="text" name="fonction_responsable" source=$plugin.config label="" maxlength=50} {*
</dl> <dt><label>Nom</label></dt>
<p>du responsable</p>
*}
{input type="text" name="nom_responsable" source=$plugin.config label="Nom" help="du responsable" required=true maxlength=50}
</dl>
{* Fonction du responsable *}
<dl class="config">
{*
<dt><label>Fonction</label></dt>
<p>du responsable</p>
*}
{input type="text" name="fonction_responsable" source=$plugin.config label="Fonction" help="du responsable" maxlength=50}
</dl>
{* Ville avant signature *}
<dl class="config">
{*
<dt><label>Ville</label></dt>
<p>Précède la date sur le formulaire</p>
*}
{input type="text" name="ville_asso" source=$plugin.config label="Ville" help="précède la date sur le formulaire" maxlength=50}
</dl>
</div>
{* Signature *}
<dl class="config"> <dl class="config">
<dt><label>Signature</label></dt> <dt><label>Signature</label></dt>
<p>L'image de la signature doit être d'une taille « raisonnable » et avoir un fond transparent</p> <p>L'image de la signature doit être d'une taille « raisonnable » et avoir un fond transparent</p>
@ -78,11 +101,37 @@
<fieldset> <fieldset>
<legend>Autres informations</legend> <legend>Autres informations</legend>
<dl class="config">
<dt><label>Ville</label></dt> {* Numérotation des reçus *}
<p>Précède la date sur le formulaire</p> <div id="numerotation">
{input type="text" name="ville_asso" source=$plugin.config label="" maxlength=50} <dl class="config">
</dl> {*
<dt><label>Numérotation des reçus</label></dt>
<p>%a : année ; %m : numéro membre ; %n : numéro séquentiel ; Exemple : HA-%a-%n donne HA-2022-51</p>
*}
{input type="text" name="numerotation" default=$chaine_numerotation label="Numérotation des reçus" maxlength=50}
</dl>
<details>
<summary class="help block">
Saisir ici un texte qui décrit le format de la numérotation des reçus.
</summary>
<div class="help block">
Symboles spéciaux :
<ul>
<li>%a : année du reçu</li>
<li>%m : numéro de membre</li>
<li>%n : numéro d'ordre séquentiel (1, 2, ...)</li>
</ul>
Exemple : HAL-%a-%m donnera « Reçu numéro HAL-2022-51 » pour le membre de numéro 51
</div>
</details>
</div>
{* Adresse de courriel *}
<div id="courriel">
{input type="checkbox" name="afficher_courriel" value=$afficher_courriel label="Imprimer adresse courriel" help="Cocher pour imprimer l'adresse de courriel des membres"}
</div>
{* les champs de nom *} {* les champs de nom *}
<?php $nbChamps = count($champsNom); ?> <?php $nbChamps = count($champsNom); ?>
@ -95,8 +144,9 @@
<div class="champnom"> <div class="champnom">
<div class="actions"></div> <div class="actions"></div>
<div class="infos"> <div class="infos">
<input type="checkbox" name="champsNom[]" id="champ_{$nom}" value={$nom} class="choix" {if $nbChamps == 1 || $champ.position != 0}checked{/if} /> <input type="checkbox" name="champsNom[]" id="champ_{$nom}" value={$nom} class="choix"
<label for="champ_{$nom}">{$champ.titre}</label> {if $nbChamps == 1 || $champ.position != 0}checked{/if} />
<label for="champ_{$nom}">{$champ.titre}</label>
</div> </div>
</div> </div>
{/foreach} {/foreach}

View File

@ -18,7 +18,9 @@ if (f('save') && $form->check('recusfiscaux_config'))
{ {
try { try {
// objet de l'association // objet de l'association
$plugin->setConfig('objet_asso', trim(f('objet_asso'))); if ($plugin->getConfig('objet_asso') != trim(f('objet_asso'))) {
$plugin->setConfig('objet_asso', trim(f('objet_asso')));
}
// articles du CGI // articles du CGI
$confArticles = $plugin->getConfig('articlesCGI'); $confArticles = $plugin->getConfig('articlesCGI');
@ -45,8 +47,14 @@ if (f('save') && $form->check('recusfiscaux_config'))
$plugin->setConfig("reduction", $confTaux); $plugin->setConfig("reduction", $confTaux);
// nom, fonction et signature du responsable // nom, fonction et signature du responsable
$plugin->setConfig('nom_responsable', trim(f('nom_responsable'))); if ($plugin->getConfig('nom_responsable') != trim(f('nom_responsable'))) {
$plugin->setConfig('fonction_responsable', trim(f('fonction_responsable'))); $plugin->setConfig('nom_responsable', trim(f('nom_responsable')));
}
if ($plugin->getConfig('fonction_responsable') != trim(f('fonction_responsable'))) {
$plugin->setConfig('fonction_responsable', trim(f('fonction_responsable')));
}
// signature
if (isset($_SESSION['sig_file']) && count($_SESSION['sig_file']) > 0) if (isset($_SESSION['sig_file']) && count($_SESSION['sig_file']) > 0)
{ {
// supprimer la signature précédente, si besoin // supprimer la signature précédente, si besoin
@ -63,7 +71,9 @@ if (f('save') && $form->check('recusfiscaux_config'))
// autres informations // autres informations
// ville // ville
$plugin->setConfig('ville_asso', trim(f('ville_asso'))); if ($plugin->getConfig('ville_asso') != trim(f('ville_asso'))) {
$plugin->setConfig('ville_asso', trim(f('ville_asso')));
}
// champs pour le nom et prénom // champs pour le nom et prénom
foreach ($champsNom as $nom => $champ) foreach ($champsNom as $nom => $champ)
@ -85,6 +95,11 @@ if (f('save') && $form->check('recusfiscaux_config'))
} }
} }
$conf_numerotation = $plugin->getConfig('numerotation');
$chaine_numerotation = (isset($conf_numerotation->prefixe) && $conf_numerotation->prefixe != "") ? $conf_numerotation->prefixe : 'XXX';
$chaine_numerotation .= $conf_numerotation->separateur . $conf_numerotation->defaut;
$afficher_courriel = false;
// trier les champs de nom pour l'affichage // trier les champs de nom pour l'affichage
uasort($champsNom, function ($a, $b) uasort($champsNom, function ($a, $b)
{ {
@ -93,9 +108,11 @@ uasort($champsNom, function ($a, $b)
$tpl->assign('ok', qg('ok') !== null); $tpl->assign('ok', qg('ok') !== null);
$path = qg('path') ?: File::CONTEXT_CONFIG; $path = qg('path') ?: File::CONTEXT_CONFIG;
$tpl->assign('path', $path); //$tpl->assign('path', $path);
$tpl->assign('default_signature', \Garradin\WWW_URL . "plugin/recusfiscaux/default_signature.png"); $tpl->assign('default_signature', \Garradin\WWW_URL . "plugin/recusfiscaux/default_signature.png");
$tpl->assign('plugin_config', $plugin->getConfig()); $tpl->assign('plugin_config', $plugin->getConfig());
$tpl->assign('champsNom', $champsNom); //$tpl->assign('champsNom', $champsNom);
$tpl->assign('plugin_css', ['style.css']); $tpl->assign('plugin_css', ['style.css']);
//$tpl->assign('chaine_numerotation', $chaine_numerotation);
$tpl->assign(compact('path', 'champsNom', 'chaine_numerotation', 'afficher_courriel'));
$tpl->display(PLUGIN_ROOT . '/templates/config.tpl'); $tpl->display(PLUGIN_ROOT . '/templates/config.tpl');

View File

@ -10,6 +10,11 @@ if (! isset($_SESSION['annee_recu']) || $_SESSION['annee_recu'] == "")
$_SESSION['annee_recu'] = date("Y") - 1; $_SESSION['annee_recu'] = date("Y") - 1;
} }
// error_log("config=" . print_r($plugin->getConfig(), true));
// error_log("articlesCGI=" . print_r($plugin->getConfig('articlesCGI'), true));
// error_log("reduction=" . print_r($plugin->getConfig('reduction'), true));
// error_log("numerotation=" . print_r($plugin->getConfig('numerotation'), true));
// nombre de taux de réduction activés // nombre de taux de réduction activés
$nbTaux = 0; $nbTaux = 0;
foreach ($plugin->getConfig('reduction') as $taux) foreach ($plugin->getConfig('reduction') as $taux)

View File

@ -85,7 +85,25 @@ div.versements
/* config */ /* config */
dl.config dl.config
{ {
padding : 1ex 0; padding-bottom : 1ex;
padding-right : 1em;
}
div#articles_cgi
{
display: flex;
}
div.article
{
margin-right : 3em;
}
div#config_nom_fonction
{
display: flex;
}
div#numerotation
{
display:flex;
align-items: last baseline;
} }
div.champnom div.champnom
{ {