vérification sélections cases et radios

FossilOrigin-Name: ba0d1089be4acbc5c7cfba5ab180a19e6a66bb1b466e8ed238337c239d326a49
This commit is contained in:
engel 2022-02-18 09:37:39 +00:00
parent a3e855870c
commit 38a3556dbd
3 changed files with 75 additions and 28 deletions

View File

@ -32,6 +32,10 @@ class Personne
$this->versements = array(); $this->versements = array();
} }
/**
* return copie d'une personne
* @param $p
*/
public static function copier($p) public static function copier($p)
{ {
return new Personne( return new Personne(
@ -44,8 +48,12 @@ class Personne
} }
/* /**
* ajouter un versement pour une activité et un tarif donnés * ajouter un versement
* @param $idActivite
* @param $idTarif
* @param $montant
* @param $tauxReduction
*/ */
public function ajouterVersement( public function ajouterVersement(
$idActivite, $idActivite,

View File

@ -2,7 +2,7 @@
{include file="%s/templates/_nav.tpl"|args:$plugin_root current_nav="index"} {include file="%s/templates/_nav.tpl"|args:$plugin_root current_nav="index"}
<h2>Choisir l'année fiscale</h2> <h2>Choisir l'année fiscale</h2>
<form id="formulaire_saisie" method="post" action=""> <form id="formulaire_saisie" method="post" action="action.php">
<fieldset> <fieldset>
{* <legend>Choisir l'année fiscale</legend> *} {* <legend>Choisir l'année fiscale</legend> *}
<select id="annee_recu" name="annee_recu"> <select id="annee_recu" name="annee_recu">
@ -48,7 +48,7 @@
</fieldset> </fieldset>
</div> </div>
<div id="taux_reduc" class="tous hidden"> <div id="div_taux_reduc" class="tous hidden">
<h2>Choisir le taux de réduction</h2> <h2>Choisir le taux de réduction</h2>
<fieldset> <fieldset>
{foreach from=$plugin_config->reduction item="reduc"} {foreach from=$plugin_config->reduction item="reduc"}
@ -64,7 +64,7 @@
<div id="generer_tous" class="tous hidden"> <div id="generer_tous" class="tous hidden">
<p class=" submit"> <p class=" submit">
{csrf_field key="generer_tous_recus"} {csrf_field key="generer_tous_recus"}
{button type="submit" name="generer_tous" label="Poursuivre" shape="right" class="main" onclick="aiguiller(this.form, 'versements_personnes');" } {button type="submit" name="generer_tous" label="Poursuivre" shape="right" class="main" onclick="return verifierRadio('div_taux_reduc');" }
</p> </p>
</div> </div>
@ -105,14 +105,14 @@
{/foreach} {/foreach}
</tbody> </tbody>
</table> </table>
<p class="help">Si vous ne savez pas quel taux de réduction utiliser, n'en choisissez aucun</p> {*<p class="help">Si vous ne savez pas quel taux de réduction utiliser, n'en choisissez aucun</p>*}
</fieldset> </fieldset>
</div> </div>
<div id="generer_activites" class="activites hidden"> <div id="generer_activites" class="activites hidden">
<p class=" submit"> <p class=" submit">
{csrf_field key="generer_recus_activites"} {csrf_field key="generer_recus_activites"}
{button type="submit" name="generer_activites" label="Poursuivre" shape="right" class="main" onclick="aiguiller(this.form, 'versements_activites');" } {button type="submit" name="generer_activites" label="Poursuivre" shape="right" class="main" onclick="return verifierCases('liste_activites_tarifs');" }
</p> </p>
</div> </div>
</form> </form>
@ -120,7 +120,7 @@
<script type="text/javascript" src="script.js" defer="defer"></script> <script type="text/javascript" src="script.js" defer="defer"></script>
{literal} {literal}
<script type="text/javascript"> <script type="text/javascript">
// activer/désactiver les radios // activer/désactiver les radios des activités/tarifs
for (var laCase of document.querySelectorAll("input[type=checkbox]")) { for (var laCase of document.querySelectorAll("input[type=checkbox]")) {
laCase.addEventListener('change', (evt) => { laCase.addEventListener('change', (evt) => {
var idCase = evt.target; var idCase = evt.target;

View File

@ -3,7 +3,8 @@
* ()sélectionner toutes les cases à cocher de toutes les activités * ()sélectionner toutes les cases à cocher de toutes les activités
* @param id de la case globale * @param id de la case globale
*/ */
function cocherDecocherTout(idCaseGlobale) { function cocherDecocherTout(idCaseGlobale)
{
// chercher le formulaire englobant // chercher le formulaire englobant
var formulaire = idCaseGlobale.closest("form"); var formulaire = idCaseGlobale.closest("form");
// itérer sur la liste des éléments détails : 1 par couple <activité, tarif> // itérer sur la liste des éléments détails : 1 par couple <activité, tarif>
@ -39,7 +40,8 @@ function cocherDecocherTout(idCaseGlobale) {
* @param id de la case qui a été cochée * @param id de la case qui a été cochée
* @param id de l'élément afficher le total * @param id de l'élément afficher le total
*/ */
function cocherDecocherPersonne(idCase, idTotal) { function cocherDecocherPersonne(idCase, idTotal)
{
// chercher le fieldset englobant // chercher le fieldset englobant
var fieldset = idCase.closest("fieldset"); var fieldset = idCase.closest("fieldset");
var listeCases = fieldset.querySelectorAll("input[type=checkbox]"); var listeCases = fieldset.querySelectorAll("input[type=checkbox]");
@ -67,7 +69,8 @@ function cocherDecocherPersonne(idCase, idTotal) {
* @param id de la case qui a été cochée * @param id de la case qui a été cochée
* @param id de l'élément afficher le total * @param id de l'élément afficher le total
*/ */
function cocherDecocherVersement(idCase, idTotal) { function cocherDecocherVersement(idCase, idTotal)
{
var fieldset = idCase.closest("fieldset"); var fieldset = idCase.closest("fieldset");
var listeCases = fieldset.querySelectorAll("input[type=checkbox]"); var listeCases = fieldset.querySelectorAll("input[type=checkbox]");
var listeMontants = fieldset.querySelectorAll("span.montant"); var listeMontants = fieldset.querySelectorAll("span.montant");
@ -80,7 +83,8 @@ function cocherDecocherVersement(idCase, idTotal) {
* @param listes des montants associés * @param listes des montants associés
* @param id de l'élément afficher le total * @param id de l'élément afficher le total
*/ */
function calculerTotal(listeCases, listeMontants, idTotal) { function calculerTotal(listeCases, listeMontants, idTotal)
{
var total = 0; var total = 0;
for (var i = 1; i < listeCases.length; ++i) for (var i = 1; i < listeCases.length; ++i)
{ {
@ -118,7 +122,11 @@ function verifierChoix(formulaire)
return ok; return ok;
} }
function afficherMasquer(formulaire, nomClasse1, nomClasse2) { /**
* fonction appelée pour afficher et masquer des portions de formulaire
*/
function afficherMasquer(formulaire, nomClasse1, nomClasse2)
{
for (var elem of formulaire.querySelectorAll(nomClasse1)) { for (var elem of formulaire.querySelectorAll(nomClasse1)) {
elem.classList.remove('hidden'); elem.classList.remove('hidden');
} }
@ -127,13 +135,53 @@ function afficherMasquer(formulaire, nomClasse1, nomClasse2) {
} }
} }
// aiguiller la suite vers la page passée en paramètre // vérifier
function aiguiller(formulaire, pageSuivante) { // - qu'au moins une activité/tarif est sélectionnée
formulaire.action = pageSuivante + ".php"; // - qu'un radio de chaque activité/tarif sélectionné a été sélectionné :)
function verifierCases(idElem)
{
var div = document.getElementById(idElem);
var nbChoix = 0;
// parcourir les cases à cocher
for (var idCase of div.querySelectorAll("input[type=checkbox]"))
{
if (idCase.checked) {
++nbChoix;
// vérifier qu'un radio de la même ligne est sélectionné
var ligneCorrecte = false;
// trouver la ligne englobante
var ligne = idCase.closest("tr");
for (var idRadio of ligne.querySelectorAll('input[type=radio]'))
{
if (idRadio.checked) { ligneCorrecte = true; break; }
}
if (! ligneCorrecte) {
alert("Erreur : il faut sélectionner un taux de réduction dans chaque ligne cochée");
return false;
}
}
}
if (nbChoix == 0) {
alert("Erreur : il faut sélectionner au moins une activité/tarif");
}
return nbChoix != 0;
}
// vérifier qu'un radio a été sélectionné dans la div paramètre
function verifierRadio(idElem)
{
var div = document.getElementById(idElem);
for (var idRadio of div.querySelectorAll('input[type=radio]'))
{
if (idRadio.checked) { return true; }
}
alert("Erreur : il faut sélectionner un taux de réduction");
return false;
} }
// inutilisé // inutilisé
function activerDesactiverRadio(evt) { function activerDesactiverRadio(evt)
{
var idCase = evt.target; var idCase = evt.target;
// checher la ligne englobante ( <tr>) // checher la ligne englobante ( <tr>)
var ligne = idCase.closest("tr"); var ligne = idCase.closest("tr");
@ -148,21 +196,12 @@ function activerDesactiverRadio(evt) {
} }
} }
/**
* indiquer le nom du script php à activer
* @param formulaire
* @param script php
*/
function activer(formulaire, script) {
formulaire.action = script;
}
/** /**
* Associer un écouteur à la première case à cocher de chaque table * Associer un écouteur à la première case à cocher de chaque table
* @remarks : n'est plus utile * @remarks : n'est plus utile
*/ */
function activerListener() { function activerListener()
{
// parcourir les tables // parcourir les tables
const lesTables = document.querySelectorAll("table.list"); const lesTables = document.querySelectorAll("table.list");
for (let i = 0; i < lesTables.length; ++i) { for (let i = 0; i < lesTables.length; ++i) {