Correction pour exercice sur 2 années civiles
FossilOrigin-Name: 24d7a87d9007dfb118ffb7a612b9eae155b1f45cb7f05577dc389240b848014d
This commit is contained in:
parent
457ee5f958
commit
86bc9c8ae1
923
lib/Utils.php
923
lib/Utils.php
@ -8,481 +8,484 @@ use KD2\ZipWriter;
|
|||||||
|
|
||||||
class Utils
|
class Utils
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @return informations sur les tarifs
|
* @return informations sur les tarifs
|
||||||
*/
|
*/
|
||||||
public static function getTarifs()
|
public static function getTarifs()
|
||||||
{
|
{
|
||||||
$db = DB::getInstance();
|
$db = DB::getInstance();
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
'SELECT
|
'SELECT
|
||||||
id,
|
id,
|
||||||
id_service as idActivite,
|
id_service as idActivite,
|
||||||
label,
|
label,
|
||||||
description,
|
description,
|
||||||
amount as montant
|
amount as montant
|
||||||
FROM services_fees');
|
FROM services_fees');
|
||||||
return Utils::toAssoc($db->get($sql), 'id');
|
return Utils::toAssoc($db->get($sql), 'id');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return informations sur les activités
|
* @return informations sur les activités
|
||||||
*/
|
*/
|
||||||
public static function getActivites()
|
public static function getActivites()
|
||||||
{
|
{
|
||||||
$db = DB::getInstance();
|
$db = DB::getInstance();
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
'SELECT
|
'SELECT
|
||||||
services.id,
|
services.id,
|
||||||
services.label,
|
services.label,
|
||||||
services.description
|
services.description
|
||||||
FROM services');
|
FROM services');
|
||||||
return Utils::toAssoc($db->get($sql), 'id');
|
return Utils::toAssoc($db->get($sql), 'id');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return comptes sur lesquels des versements de membres ont été faits
|
* @return comptes sur lesquels des versements de membres ont été faits
|
||||||
* @param string $annee
|
* @param string $annee
|
||||||
* @param $op : opérateur de combinaison des comptes
|
* @param $op : opérateur de combinaison des comptes
|
||||||
* @param array $comptes
|
* @param array $comptes
|
||||||
*/
|
*/
|
||||||
public static function getComptes($annee, $op, $comptes)
|
public static function getComptes($annee, $op, $comptes)
|
||||||
{
|
{
|
||||||
$db = DB::getInstance();
|
$db = DB::getInstance();
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
'SELECT
|
'SELECT
|
||||||
acc_accounts.id,
|
acc_accounts.id,
|
||||||
acc_accounts.code as codeCompte,
|
acc_years.label,
|
||||||
acc_accounts.label as nomCompte
|
acc_accounts.code as codeCompte,
|
||||||
FROM acc_transactions_users
|
acc_accounts.label as nomCompte
|
||||||
INNER JOIN users
|
FROM acc_transactions_users
|
||||||
ON acc_transactions_users.id_user = users.id
|
INNER JOIN users
|
||||||
INNER JOIN acc_transactions
|
ON acc_transactions_users.id_user = users.id
|
||||||
ON acc_transactions_users.id_transaction = acc_transactions.id
|
INNER JOIN acc_transactions
|
||||||
INNER JOIN acc_transactions_lines
|
ON acc_transactions_users.id_transaction = acc_transactions.id
|
||||||
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
INNER JOIN acc_transactions_lines
|
||||||
INNER JOIN acc_accounts
|
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
||||||
ON acc_transactions_lines.id_account = acc_accounts.id
|
INNER JOIN acc_accounts
|
||||||
WHERE
|
ON acc_transactions_lines.id_account = acc_accounts.id
|
||||||
(strftime("%%Y", acc_transactions.date) = "%d"
|
INNER JOIN acc_years
|
||||||
AND
|
ON acc_transactions.id_year = acc_years.id
|
||||||
acc_accounts.%s
|
WHERE
|
||||||
)
|
(strftime("%%Y", acc_transactions.date) = "%d"
|
||||||
GROUP by acc_accounts.code
|
AND
|
||||||
ORDER by acc_accounts.code',
|
acc_accounts.%s
|
||||||
$annee,
|
)
|
||||||
$db->where('code', $op, $comptes)
|
GROUP by acc_accounts.id
|
||||||
);
|
ORDER by acc_accounts.code',
|
||||||
return Utils::toAssoc($db->get($sql), 'id');
|
$annee,
|
||||||
}
|
$db->where('code', $op, $comptes)
|
||||||
|
);
|
||||||
|
return Utils::toAssoc($db->get($sql), 'id');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return tarifs des activités et comptes ayant des versements de
|
* @return tarifs des activités et comptes ayant des versements de
|
||||||
* membres dans l'année
|
* membres dans l'année
|
||||||
* @param string $annee
|
* @param string $annee
|
||||||
* @param $op : opérateur de combinaison des comptes
|
* @param $op : opérateur de combinaison des comptes
|
||||||
* @param array $comptes
|
* @param array $comptes
|
||||||
*/
|
*/
|
||||||
public static function getTarifsComptes($annee, $op, $comptes)
|
public static function getTarifsComptes($annee, $op, $comptes)
|
||||||
{
|
{
|
||||||
$db = DB::getInstance();
|
$db = DB::getInstance();
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
'
|
'
|
||||||
SELECT
|
SELECT
|
||||||
services_users.id_fee as idTarif,
|
services_users.id_fee as idTarif,
|
||||||
acc_accounts.id as idCompte,
|
acc_accounts.id as idCompte,
|
||||||
acc_accounts.code as codeCompte
|
acc_accounts.code as codeCompte
|
||||||
FROM acc_transactions_users
|
FROM acc_transactions_users
|
||||||
INNER JOIN acc_transactions
|
INNER JOIN acc_transactions
|
||||||
ON acc_transactions_users.id_transaction = acc_transactions.id
|
ON acc_transactions_users.id_transaction = acc_transactions.id
|
||||||
INNER JOIN services_users
|
INNER JOIN services_users
|
||||||
ON acc_transactions_users.id_service_user = services_users.id
|
ON acc_transactions_users.id_service_user = services_users.id
|
||||||
INNER JOIN services_fees
|
INNER JOIN services_fees
|
||||||
ON services_users.id_fee = services_fees.id
|
ON services_users.id_fee = services_fees.id
|
||||||
INNER JOIN acc_transactions_lines
|
INNER JOIN acc_transactions_lines
|
||||||
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
||||||
INNER JOIN acc_accounts
|
INNER JOIN acc_accounts
|
||||||
ON acc_transactions_lines.id_account = acc_accounts.id
|
ON acc_transactions_lines.id_account = acc_accounts.id
|
||||||
WHERE
|
WHERE
|
||||||
(strftime("%%Y", acc_transactions.date) = "%d"
|
(strftime("%%Y", acc_transactions.date) = "%d"
|
||||||
AND
|
AND
|
||||||
acc_accounts.%s
|
acc_accounts.%s
|
||||||
)
|
)
|
||||||
GROUP BY services_fees.id, acc_accounts.code
|
GROUP BY services_fees.id, acc_accounts.code
|
||||||
ORDER BY acc_accounts.code
|
ORDER BY acc_accounts.code
|
||||||
',
|
',
|
||||||
$annee,
|
$annee,
|
||||||
$db->where('code', $op, $comptes)
|
$db->where('code', $op, $comptes)
|
||||||
);
|
);
|
||||||
return $db->get($sql);
|
return $db->get($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* faire un tableau associatif avec le résultat d'une requête
|
* faire un tableau associatif avec le résultat d'une requête
|
||||||
*/
|
*/
|
||||||
static function toAssoc($array, $nomCle)
|
static function toAssoc($array, $nomCle)
|
||||||
{
|
{
|
||||||
$assoc = array();
|
$assoc = array();
|
||||||
foreach ($array as $elem)
|
foreach ($array as $elem)
|
||||||
{
|
{
|
||||||
$ro = new \ReflectionObject($elem);
|
$ro = new \ReflectionObject($elem);
|
||||||
$proprietes = $ro->getProperties();
|
$proprietes = $ro->getProperties();
|
||||||
$obj = new \stdClass();
|
$obj = new \stdClass();
|
||||||
foreach ($proprietes as $p)
|
foreach ($proprietes as $p)
|
||||||
{
|
{
|
||||||
$pname = $p->getName();
|
$pname = $p->getName();
|
||||||
if ($pname == $nomCle) {
|
if ($pname == $nomCle) {
|
||||||
$key = $p->getValue($elem);
|
$key = $p->getValue($elem);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$obj->$pname = $p->getValue($elem);
|
$obj->$pname = $p->getValue($elem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$assoc[$key] = $obj;
|
$assoc[$key] = $obj;
|
||||||
}
|
}
|
||||||
return $assoc;
|
return $assoc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return versements correspondants à l'année donnée
|
* @return versements correspondants à l'année donnée
|
||||||
* @param $annee
|
* @param $annee
|
||||||
* @param array $champsNom : liste non vide des champs de nom/prénom
|
* @param array $champsNom : liste non vide des champs de nom/prénom
|
||||||
*/
|
*/
|
||||||
public static function getVersementsPersonnes($annee, $op, $comptes, $champsNom)
|
public static function getVersementsPersonnes($annee, $op, $comptes, $champsNom)
|
||||||
{
|
{
|
||||||
$db = DB::getInstance();
|
$db = DB::getInstance();
|
||||||
$tri = Utils::combinerTri($champsNom);
|
$tri = Utils::combinerTri($champsNom);
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
'SELECT
|
'SELECT
|
||||||
users.id as idUser,
|
users.id as idUser,
|
||||||
acc_accounts.id as idCompte,
|
acc_accounts.id as idCompte,
|
||||||
acc_accounts.code as codeCompte,
|
acc_accounts.code as codeCompte,
|
||||||
acc_transactions_lines.credit as versement,
|
acc_transactions_lines.credit as versement,
|
||||||
acc_transactions.date
|
acc_transactions.date
|
||||||
FROM acc_transactions_users
|
FROM acc_transactions_users
|
||||||
INNER JOIN users
|
INNER JOIN users
|
||||||
ON acc_transactions_users.id_user = users.id
|
ON acc_transactions_users.id_user = users.id
|
||||||
INNER JOIN acc_transactions
|
INNER JOIN acc_transactions
|
||||||
ON acc_transactions_users.id_transaction = acc_transactions.id
|
ON acc_transactions_users.id_transaction = acc_transactions.id
|
||||||
INNER JOIN acc_transactions_lines
|
INNER JOIN acc_transactions_lines
|
||||||
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
||||||
INNER JOIN acc_accounts
|
INNER JOIN acc_accounts
|
||||||
ON acc_transactions_lines.id_account = acc_accounts.id
|
ON acc_transactions_lines.id_account = acc_accounts.id
|
||||||
WHERE
|
WHERE
|
||||||
(strftime("%%Y", acc_transactions.date) = "%d"
|
(strftime("%%Y", acc_transactions.date) = "%d"
|
||||||
AND
|
AND
|
||||||
acc_accounts.%s
|
acc_accounts.%s
|
||||||
)
|
)
|
||||||
GROUP BY acc_transactions.id, acc_accounts.id
|
GROUP BY acc_transactions.id, acc_accounts.id
|
||||||
ORDER by %s, acc_accounts.code, acc_transactions.date',
|
ORDER by %s, acc_accounts.code, acc_transactions.date',
|
||||||
$annee,
|
$annee,
|
||||||
$db->where('code', $op, $comptes),
|
$db->where('code', $op, $comptes),
|
||||||
$tri
|
$tri
|
||||||
);
|
);
|
||||||
return $db->get($sql);
|
return $db->get($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return versements correspondants à :
|
* @return versements correspondants à :
|
||||||
* @param $annee : année fiscale
|
* @param $annee : année fiscale
|
||||||
* @param array $tarifs : tarifs sélectionnés
|
* @param array $tarifs : tarifs sélectionnés
|
||||||
* @param array $comptes : comptes associés aux tarifs
|
* @param array $comptes : comptes associés aux tarifs
|
||||||
* @param array $champsNom : liste non vide des champs de nom/prénom
|
* @param array $champsNom : liste non vide des champs de nom/prénom
|
||||||
* @remarks tri par tarif, nom, compte, date
|
* @remarks tri par tarif, nom, compte, date
|
||||||
*/
|
*/
|
||||||
public static function getVersementsTarifsComptes($annee,
|
public static function getVersementsTarifsComptes($annee,
|
||||||
$tarifs,
|
$tarifs,
|
||||||
$comptes,
|
$comptes,
|
||||||
$champsNom)
|
$champsNom)
|
||||||
{
|
{
|
||||||
$db = DB::getInstance();
|
$db = DB::getInstance();
|
||||||
$tri = Utils::combinerTri($champsNom);
|
$tri = Utils::combinerTri($champsNom);
|
||||||
$condition = Utils::combinerTarifsComptes($tarifs, $comptes);
|
$condition = Utils::combinerTarifsComptes($tarifs, $comptes);
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
'SELECT
|
'SELECT
|
||||||
services_fees.id as idTarif,
|
services_fees.id as idTarif,
|
||||||
acc_accounts.id as idCompte,
|
acc_accounts.id as idCompte,
|
||||||
acc_accounts.code as codeCompte,
|
acc_accounts.code as codeCompte,
|
||||||
users.id as idUser,
|
users.id as idUser,
|
||||||
acc_transactions_lines.credit as versement,
|
acc_transactions_lines.credit as versement,
|
||||||
acc_transactions.date
|
acc_transactions.date
|
||||||
FROM acc_transactions_users
|
FROM acc_transactions_users
|
||||||
INNER JOIN users
|
INNER JOIN users
|
||||||
ON acc_transactions_users.id_user = users.id
|
ON acc_transactions_users.id_user = users.id
|
||||||
INNER JOIN acc_transactions
|
INNER JOIN acc_transactions
|
||||||
ON acc_transactions_users.id_transaction = acc_transactions.id
|
ON acc_transactions_users.id_transaction = acc_transactions.id
|
||||||
INNER JOIN services_users
|
INNER JOIN services_users
|
||||||
ON acc_transactions_users.id_service_user = services_users.id
|
ON acc_transactions_users.id_service_user = services_users.id
|
||||||
INNER JOIN services_fees
|
INNER JOIN services_fees
|
||||||
ON services_users.id_fee = services_fees.id
|
ON services_users.id_fee = services_fees.id
|
||||||
INNER JOIN acc_transactions_lines
|
INNER JOIN acc_transactions_lines
|
||||||
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
||||||
INNER JOIN acc_accounts
|
INNER JOIN acc_accounts
|
||||||
ON acc_transactions_lines.id_account = acc_accounts.id
|
ON acc_transactions_lines.id_account = acc_accounts.id
|
||||||
WHERE
|
WHERE
|
||||||
(strftime("%%Y", acc_transactions.date) = "%d"
|
(strftime("%%Y", acc_transactions.date) = "%d"
|
||||||
AND
|
AND
|
||||||
%s
|
%s
|
||||||
)
|
)
|
||||||
GROUP BY acc_transactions.id, acc_accounts.id
|
GROUP BY acc_transactions.id, acc_accounts.id
|
||||||
ORDER by %s, acc_accounts.code, acc_transactions.date',
|
ORDER by %s, acc_accounts.code, acc_transactions.date',
|
||||||
$annee,
|
$annee,
|
||||||
$condition,
|
$condition,
|
||||||
$tri
|
$tri
|
||||||
);
|
);
|
||||||
// error_log("\ngetVersementsTarifsComptes : sql=" . $sql);
|
// error_log("\ngetVersementsTarifsComptes : sql=" . $sql);
|
||||||
return $db->get($sql);
|
return $db->get($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return versements correspondants à :
|
* @return versements correspondants à :
|
||||||
* @param $annee année fiscale
|
* @param $annee année fiscale
|
||||||
* @param $comptesIsoles comptes NON associés à un tarif
|
* @param $comptesIsoles comptes NON associés à un tarif
|
||||||
* @param array $champsNom : liste non vide des champs de nom/prénom
|
* @param array $champsNom : liste non vide des champs de nom/prénom
|
||||||
* @remarks tri par nom, compte, date
|
* @remarks tri par nom, compte, date
|
||||||
*/
|
*/
|
||||||
public static function getVersementsComptes($annee,
|
public static function getVersementsComptes($annee,
|
||||||
$comptesIsoles,
|
$comptesIsoles,
|
||||||
$champsNom)
|
$champsNom)
|
||||||
{
|
{
|
||||||
$db = DB::getInstance();
|
$db = DB::getInstance();
|
||||||
$tri = Utils::combinerTri($champsNom);
|
$tri = Utils::combinerTri($champsNom);
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
'
|
'
|
||||||
SELECT
|
SELECT
|
||||||
0 as idTarif,
|
0 as idTarif,
|
||||||
acc_accounts.id as idCompte,
|
acc_accounts.id as idCompte,
|
||||||
acc_accounts.code as codeCompte,
|
acc_accounts.code as codeCompte,
|
||||||
users.id as idUser,
|
users.id as idUser,
|
||||||
acc_transactions_lines.credit as versement,
|
acc_transactions_lines.credit as versement,
|
||||||
acc_transactions.date
|
acc_transactions.date
|
||||||
FROM acc_transactions_users
|
FROM acc_transactions_users
|
||||||
INNER JOIN users
|
INNER JOIN users
|
||||||
ON acc_transactions_users.id_user = users.id
|
ON acc_transactions_users.id_user = users.id
|
||||||
INNER JOIN acc_transactions
|
INNER JOIN acc_transactions
|
||||||
ON acc_transactions_users.id_transaction = acc_transactions.id
|
ON acc_transactions_users.id_transaction = acc_transactions.id
|
||||||
INNER JOIN acc_transactions_lines
|
INNER JOIN acc_transactions_lines
|
||||||
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
||||||
INNER JOIN acc_accounts
|
INNER JOIN acc_accounts
|
||||||
ON acc_transactions_lines.id_account = acc_accounts.id
|
ON acc_transactions_lines.id_account = acc_accounts.id
|
||||||
WHERE
|
WHERE
|
||||||
(strftime("%%Y", acc_transactions.date) = "%d"
|
(strftime("%%Y", acc_transactions.date) = "%d"
|
||||||
AND
|
AND
|
||||||
acc_accounts.%s
|
acc_accounts.%s
|
||||||
)
|
)
|
||||||
GROUP BY acc_transactions.id, acc_accounts.id
|
GROUP BY acc_transactions.id, acc_accounts.id
|
||||||
ORDER by %s, acc_accounts.code, acc_transactions.date
|
ORDER by %s, acc_accounts.code, acc_transactions.date
|
||||||
',
|
',
|
||||||
$annee,
|
$annee,
|
||||||
$db->where('id', 'in', $comptesIsoles),
|
$db->where('id', 'in', $comptesIsoles),
|
||||||
$tri
|
$tri
|
||||||
);
|
);
|
||||||
return $db->get($sql);
|
return $db->get($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return personnes ayant versé des dons pour une année donnée
|
* @return personnes ayant versé des dons pour une année donnée
|
||||||
* @param $annee
|
* @param $annee
|
||||||
* @param array $champsNom : champs qui définissent le nom et le prénom d'une personne
|
* @param array $champsNom : champs qui définissent le nom et le prénom d'une personne
|
||||||
*/
|
*/
|
||||||
public static function getDonateurs($annee, $champsNom) : array
|
public static function getDonateurs($annee, $champsNom) : array
|
||||||
{
|
{
|
||||||
// concaténer les champs nom/prénoms pour la sélection
|
// concaténer les champs nom/prénoms pour la sélection
|
||||||
$nom = Utils::combinerChamps($champsNom);
|
$nom = Utils::combinerChamps($champsNom);
|
||||||
// et pour le tri
|
// et pour le tri
|
||||||
$tri = Utils::combinerTri($champsNom);
|
$tri = Utils::combinerTri($champsNom);
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
'SELECT
|
'SELECT
|
||||||
users.id as idUser,
|
users.id as idUser,
|
||||||
users.numero,
|
users.numero,
|
||||||
users.email,
|
users.email,
|
||||||
row_number() over(order by %s) as rang,
|
row_number() over(order by %s) as rang,
|
||||||
%s as nom,
|
%s as nom,
|
||||||
users.adresse as adresse,
|
users.adresse as adresse,
|
||||||
users.code_postal as codePostal,
|
users.code_postal as codePostal,
|
||||||
users.ville as ville
|
users.ville as ville
|
||||||
FROM
|
FROM
|
||||||
acc_transactions_users,
|
acc_transactions_users,
|
||||||
users,
|
users,
|
||||||
acc_transactions
|
acc_transactions
|
||||||
INNER JOIN acc_transactions_lines
|
INNER JOIN acc_transactions_lines
|
||||||
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
||||||
WHERE (
|
WHERE (
|
||||||
strftime("%%Y", acc_transactions.date) = "%d"
|
strftime("%%Y", acc_transactions.date) = "%d"
|
||||||
AND
|
AND
|
||||||
acc_transactions_users.id_transaction = acc_transactions.id
|
acc_transactions_users.id_transaction = acc_transactions.id
|
||||||
AND
|
AND
|
||||||
acc_transactions_users.id_user = users.id
|
acc_transactions_users.id_user = users.id
|
||||||
)
|
)
|
||||||
GROUP by users.id
|
GROUP by users.id
|
||||||
ORDER by %1$s COLLATE U_NOCASE
|
ORDER by %1$s COLLATE U_NOCASE
|
||||||
',
|
',
|
||||||
$tri,
|
$tri,
|
||||||
$nom,
|
$nom,
|
||||||
$annee
|
$annee
|
||||||
);
|
);
|
||||||
$donateurs = array();
|
$donateurs = array();
|
||||||
foreach (DB::getInstance()->iterate($sql) as $personne)
|
foreach (DB::getInstance()->iterate($sql) as $personne)
|
||||||
{
|
{
|
||||||
$donateurs[$personne->idUser] = new Personne($personne->idUser,
|
$donateurs[$personne->idUser] = new Personne($personne->idUser,
|
||||||
$personne->numero,
|
$personne->numero,
|
||||||
$personne->email,
|
$personne->email,
|
||||||
$personne->rang,
|
$personne->rang,
|
||||||
$personne->nom,
|
$personne->nom,
|
||||||
$personne->adresse,
|
$personne->adresse,
|
||||||
$personne->codePostal,
|
$personne->codePostal,
|
||||||
$personne->ville);
|
$personne->ville);
|
||||||
}
|
}
|
||||||
return $donateurs;
|
return $donateurs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* combiner les champs avec un opérateur
|
* combiner les champs avec un opérateur
|
||||||
* @param array $champs : liste (non vide) de champs
|
* @param array $champs : liste (non vide) de champs
|
||||||
* @return chaîne combinée
|
* @return chaîne combinée
|
||||||
*/
|
*/
|
||||||
private static function combinerChamps($champs)
|
private static function combinerChamps($champs)
|
||||||
{
|
{
|
||||||
$op = ' || " " || ';
|
$op = ' || " " || ';
|
||||||
$result = 'ifnull(users.' . $champs[0] . ', "")';
|
$result = 'ifnull(users.' . $champs[0] . ', "")';
|
||||||
for ($i = 1; $i < count($champs); ++$i)
|
for ($i = 1; $i < count($champs); ++$i)
|
||||||
{
|
{
|
||||||
$result .= $op . 'ifnull(users.' . $champs[$i] . ', "")';
|
$result .= $op . 'ifnull(users.' . $champs[$i] . ', "")';
|
||||||
}
|
}
|
||||||
return 'trim(' . $result . ')';
|
return 'trim(' . $result . ')';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* combiner les clés de tri
|
* combiner les clés de tri
|
||||||
* @param clés de tri
|
* @param clés de tri
|
||||||
* @return chaîne combinée
|
* @return chaîne combinée
|
||||||
*/
|
*/
|
||||||
private static function combinerTri(array $champs) : string
|
private static function combinerTri(array $champs) : string
|
||||||
{
|
{
|
||||||
$tri = 'users.' . $champs[0];
|
$tri = 'users.' . $champs[0];
|
||||||
for ($i = 1; $i < count($champs); ++$i)
|
for ($i = 1; $i < count($champs); ++$i)
|
||||||
{
|
{
|
||||||
$tri .= ', users.' . $champs[$i];
|
$tri .= ', users.' . $champs[$i];
|
||||||
}
|
}
|
||||||
return $tri;
|
return $tri;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* combiner chaque tarif avec le numéro de compte associé
|
* combiner chaque tarif avec le numéro de compte associé
|
||||||
*/
|
*/
|
||||||
private static function combinerTarifsComptes($tarifs, $comptes)
|
private static function combinerTarifsComptes($tarifs, $comptes)
|
||||||
{
|
{
|
||||||
$condition = '(';
|
$condition = '(';
|
||||||
$lesCond = array_map(fn($e1, $e2) : string =>
|
$lesCond = array_map(fn($e1, $e2) : string =>
|
||||||
"(services_fees.id = '$e1' AND acc_accounts.id = '$e2')",
|
"(services_fees.id = '$e1' AND acc_accounts.id = '$e2')",
|
||||||
$tarifs, $comptes);
|
$tarifs, $comptes);
|
||||||
$nb = 0;
|
$nb = 0;
|
||||||
foreach ($lesCond as $cond)
|
foreach ($lesCond as $cond)
|
||||||
{
|
{
|
||||||
if ($nb > 0) { $condition .= ' OR '; }
|
if ($nb > 0) { $condition .= ' OR '; }
|
||||||
$condition .= $cond;
|
$condition .= $cond;
|
||||||
++$nb;
|
++$nb;
|
||||||
}
|
}
|
||||||
$condition .= ')';
|
$condition .= ')';
|
||||||
return $condition;
|
return $condition;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return liste des années fiscales
|
* @return liste des années fiscales
|
||||||
*/
|
*/
|
||||||
public static function getAnneesFiscales() : array
|
public static function getAnneesFiscales() : array
|
||||||
{
|
{
|
||||||
$rows = DB::getInstance()->get(
|
$rows = DB::getInstance()->get(
|
||||||
"SELECT strftime('%Y', start_date) as annee
|
"SELECT strftime('%Y', start_date) as annee
|
||||||
FROM acc_years
|
FROM acc_years
|
||||||
UNION
|
UNION
|
||||||
SELECT strftime('%Y', end_date) as annee
|
SELECT strftime('%Y', end_date) as annee
|
||||||
FROM acc_years
|
FROM acc_years
|
||||||
ORDER by annee DESC"
|
ORDER by annee DESC"
|
||||||
);
|
);
|
||||||
$anneesFiscales = array();
|
$anneesFiscales = array();
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
$anneesFiscales[] = $row->annee;
|
$anneesFiscales[] = $row->annee;
|
||||||
}
|
}
|
||||||
return $anneesFiscales;
|
return $anneesFiscales;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getLignesReduction($lesTaux)
|
public static function getLignesReduction($lesTaux)
|
||||||
{
|
{
|
||||||
foreach ($lesTaux as $elem)
|
foreach ($lesTaux as $elem)
|
||||||
{
|
{
|
||||||
$lignes[$elem->taux] = $elem->remarque;
|
$lignes[$elem->taux] = $elem->remarque;
|
||||||
}
|
}
|
||||||
return $lignes;
|
return $lignes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* récupérer dans la config du plugin les champs des membres
|
* récupérer dans la config du plugin les champs des membres
|
||||||
* utilisés pour le nom et le prénom ; ajouter/supprimer les
|
* utilisés pour le nom et le prénom ; ajouter/supprimer les
|
||||||
* modifications par rapport à la config paheko
|
* modifications par rapport à la config paheko
|
||||||
* @return array tableau des champs : clé = nom, valeur = { titre, position }
|
* @return array tableau des champs : clé = nom, valeur = { titre, position }
|
||||||
*/
|
*/
|
||||||
public static function getChampsNom($config, $plugin) : array
|
public static function getChampsNom($config, $plugin) : array
|
||||||
{
|
{
|
||||||
// récupérer dans la config du plugin les champs mémorisés
|
// récupérer dans la config du plugin les champs mémorisés
|
||||||
// pour le nom et le prénom (le tableau est vide si pas mémorisé)
|
// pour le nom et le prénom (le tableau est vide si pas mémorisé)
|
||||||
$champsNom = (array) $plugin->getConfig('champsNom');
|
$champsNom = (array) $plugin->getConfig('champsNom');
|
||||||
|
|
||||||
// récupérer dans la config Paheko les champs des membres
|
// récupérer dans la config Paheko les champs des membres
|
||||||
// utilisés pour le nom et le prénom
|
// utilisés pour le nom et le prénom
|
||||||
$champsPaheko = DynamicFields::getInstance()->listAssocNames();
|
$champsPaheko = DynamicFields::getInstance()->listAssocNames();
|
||||||
|
|
||||||
foreach ($champsPaheko as $name => $title)
|
foreach ($champsPaheko as $name => $title)
|
||||||
{
|
{
|
||||||
if (stristr($title, 'nom'))
|
if (stristr($title, 'nom'))
|
||||||
{
|
{
|
||||||
// retenir les champs dont le titre contient le terme 'nom'
|
// retenir les champs dont le titre contient le terme 'nom'
|
||||||
// est-il présent dans la config du plugin ?
|
// est-il présent dans la config du plugin ?
|
||||||
if (! array_key_exists($name, $champsNom))
|
if (! array_key_exists($name, $champsNom))
|
||||||
{
|
{
|
||||||
// absent => l'ajouter
|
// absent => l'ajouter
|
||||||
$champ = new \stdClass();
|
$champ = new \stdClass();
|
||||||
$champ->titre = $title;
|
$champ->titre = $title;
|
||||||
$champ->position = 0;
|
$champ->position = 0;
|
||||||
$champsNom[$name] = $champ;
|
$champsNom[$name] = $champ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// opération symétrique : un champ mémorisé dans la config du
|
// opération symétrique : un champ mémorisé dans la config du
|
||||||
// plugin a-t-il disparu de la config paheko ?
|
// plugin a-t-il disparu de la config paheko ?
|
||||||
foreach ($champsNom as $nom => $champ)
|
foreach ($champsNom as $nom => $champ)
|
||||||
{
|
{
|
||||||
if (! array_key_exists($nom, $champsPaheko))
|
if (! array_key_exists($nom, $champsPaheko))
|
||||||
{
|
{
|
||||||
// absent => le supprimer
|
// absent => le supprimer
|
||||||
unset($champsNom[$nom]);
|
unset($champsNom[$nom]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// mettre à jour la config du plugin
|
// mettre à jour la config du plugin
|
||||||
$plugin->setConfigProperty('champsNom', $champsNom);
|
$plugin->setConfigProperty('champsNom', $champsNom);
|
||||||
return $champsNom;
|
return $champsNom;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enregistrer les fichiers dans une archive zip
|
* enregistrer les fichiers dans une archive zip
|
||||||
* @param $fileList : liste des fichiers à archiver
|
* @param $fileList : liste des fichiers à archiver
|
||||||
* @param $year : pour générer le nom de l'archive
|
* @param $year : pour générer le nom de l'archive
|
||||||
* @param $archiveDir : ne sert plus
|
* @param $archiveDir : ne sert plus
|
||||||
*/
|
*/
|
||||||
static function makeArchive(
|
static function makeArchive(
|
||||||
$fileList,
|
$fileList,
|
||||||
$year,
|
$year,
|
||||||
$archiveDir = null)
|
$archiveDir = null)
|
||||||
{
|
{
|
||||||
$zipFilename = "recus_dons" . $year . ".zip";
|
$zipFilename = "recus_dons" . $year . ".zip";
|
||||||
header('Content-type: application/zip');
|
header('Content-type: application/zip');
|
||||||
header(sprintf('Content-Disposition: attachment; filename="%s"', $zipFilename));
|
header(sprintf('Content-Disposition: attachment; filename="%s"', $zipFilename));
|
||||||
$zip = new ZipWriter('php://output');
|
$zip = new ZipWriter('php://output');
|
||||||
$zip->setCompression(0);
|
$zip->setCompression(0);
|
||||||
foreach ($fileList as $fileName)
|
foreach ($fileList as $fileName)
|
||||||
{
|
{
|
||||||
$zip->add(basename($fileName), null, $fileName);
|
$zip->add(basename($fileName), null, $fileName);
|
||||||
}
|
}
|
||||||
$zip->close();
|
$zip->close();
|
||||||
} // makeArchive
|
} // makeArchive
|
||||||
}
|
}
|
||||||
|
@ -4,82 +4,86 @@
|
|||||||
<h2>Année {$annee_recu} : versements par activité et tarif</h2>
|
<h2>Année {$annee_recu} : versements par activité et tarif</h2>
|
||||||
|
|
||||||
<fieldset class="noprint">
|
<fieldset class="noprint">
|
||||||
<input type="checkbox" class="check_global" id="check_global" onclick="cocherDecocherTout(check_global)" />
|
<input type="checkbox" class="check_global" id="check_global" onclick="cocherDecocherTout(check_global)" />
|
||||||
<label for="check_global">Cliquer pour cocher toutes les lignes</label>
|
<label for="check_global">Cliquer pour cocher toutes les lignes</label>
|
||||||
<button type="button" data-icon="↑" class="icn-btn" id="close_details_activite"
|
<button type="button" data-icon="↑" class="icn-btn" id="close_details_activite"
|
||||||
onclick="montrerMasquerDetails(this.id, 'details.activite', 'toutes les activités')">
|
onclick="montrerMasquerDetails(this.id, 'details.activite', 'toutes les activités')">
|
||||||
Replier toutes les activités</button>
|
Replier toutes les activités</button>
|
||||||
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne"
|
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne"
|
||||||
onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">
|
onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">
|
||||||
Replier toutes les personnes</button>
|
Replier toutes les personnes</button>
|
||||||
<br />
|
<br />
|
||||||
{button type="submit" label="Télécharger les reçus au format PDF" shape="download"
|
{button type="submit" label="Télécharger les reçus au format PDF" shape="download"
|
||||||
form="versements_activites"
|
form="versements_activites"
|
||||||
formaction="generer_recus.php?type=activite&format=pdf"
|
formaction="generer_recus.php?type=activite&format=pdf"
|
||||||
onclick="return verifierChoix(this.form)"}
|
onclick="return verifierChoix(this.form)"}
|
||||||
{button type="submit" target="_dialog" label="Imprimer les reçus" shape="print"
|
{button type="submit" target="_dialog" label="Imprimer les reçus" shape="print"
|
||||||
form="versements_activites"
|
form="versements_activites"
|
||||||
formaction="generer_recus.php?type=activite&format=print"
|
formaction="generer_recus.php?type=activite&format=print"
|
||||||
onclick="return verifierChoix(this.form)"}
|
onclick="return verifierChoix(this.form)"}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<form method="post" target="_blank" id="versements_activites">
|
<form method="post" target="_blank" id="versements_activites">
|
||||||
|
|
||||||
{* Itération sur les versements *}
|
{* Itération sur les versements *}
|
||||||
{foreach from=$lesVersements key="rang" item="versement"}
|
{foreach from=$lesVersements key="rang" item="versement"}
|
||||||
{if $rang == 0}
|
{if $rang == 0}
|
||||||
{* premier versement *}
|
{* premier versement *}
|
||||||
<?php
|
<?php
|
||||||
$pair = true;
|
$pair = true;
|
||||||
$tarifCourant = $versement->idTarif;
|
$tarifCourant = $versement->idTarif;
|
||||||
$personneCourante = $versement->idUser;
|
$personneCourante = $versement->idUser;
|
||||||
$compteCourant = $versement->idCompte;
|
$compteCourant = $versement->idCompte;
|
||||||
?>
|
$codeCompte = $versement->codeCompte;
|
||||||
{afficher_debut_tarif versement=$versement}
|
?>
|
||||||
{afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante}
|
{afficher_debut_tarif versement=$versement}
|
||||||
{afficher_debut_compte idCompte=$compteCourant}
|
{afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante}
|
||||||
{elseif $versement.idTarif != $tarifCourant}
|
{afficher_debut_compte idCompte=$compteCourant}
|
||||||
{* changement de tarif *}
|
{elseif $versement.idTarif != $tarifCourant}
|
||||||
{fin_compte}
|
{* changement de tarif *}
|
||||||
{fin_personne}
|
{fin_compte}
|
||||||
{fin_tarif}
|
{fin_personne}
|
||||||
<?php
|
{fin_tarif}
|
||||||
$pair = true;
|
<?php
|
||||||
$tarifCourant = $versement->idTarif;
|
$pair = true;
|
||||||
$personneCourante = $versement->idUser;
|
$tarifCourant = $versement->idTarif;
|
||||||
$compteCourant = $versement->idCompte;
|
$personneCourante = $versement->idUser;
|
||||||
?>
|
$compteCourant = $versement->idCompte;
|
||||||
{afficher_debut_tarif versement=$versement}
|
$codeCompte = $versement->codeCompte;
|
||||||
{afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante}
|
?>
|
||||||
{afficher_debut_compte idCompte=$compteCourant}
|
{afficher_debut_tarif versement=$versement}
|
||||||
{elseif $versement.idUser != $personneCourante}
|
{afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante}
|
||||||
{* changement de personne *}
|
{afficher_debut_compte idCompte=$compteCourant}
|
||||||
{fin_compte}
|
{elseif $versement.idUser != $personneCourante}
|
||||||
{fin_personne}
|
{* changement de personne *}
|
||||||
<?php
|
{fin_compte}
|
||||||
$pair = true;
|
{fin_personne}
|
||||||
$personneCourante = $versement->idUser;
|
<?php
|
||||||
$compteCourant = $versement->idCompte;
|
$pair = true;
|
||||||
?>
|
$personneCourante = $versement->idUser;
|
||||||
{afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante}
|
$compteCourant = $versement->idCompte;
|
||||||
{afficher_debut_compte idCompte=$compteCourant}
|
$codeCompte = $versement->codeCompte;
|
||||||
{elseif $versement.idCompte != $compteCourant}
|
?>
|
||||||
{fin_compte}
|
{afficher_debut_personne user=$personneCourante idVersement="%s_%s"|args:$tarifCourant,$personneCourante}
|
||||||
{* changement de compte *}
|
{afficher_debut_compte idCompte=$compteCourant}
|
||||||
<?php
|
{elseif $versement.codeCompte != $codeCompte}
|
||||||
$pair = true;
|
{fin_compte}
|
||||||
$compteCourant = $versement->idCompte;
|
{* changement de compte *}
|
||||||
?>
|
<?php
|
||||||
{afficher_debut_compte idCompte=$compteCourant}
|
$pair = true;
|
||||||
{else}
|
$compteCourant = $versement->idCompte;
|
||||||
{* même personne, même compte *}
|
$codeCompte = $versement->codeCompte;
|
||||||
{/if}
|
?>
|
||||||
{afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang pair=$pair}
|
{afficher_debut_compte idCompte=$compteCourant}
|
||||||
<?php $pair = ! $pair; ?>
|
{else}
|
||||||
{/foreach} {* Itération sur les versements *}
|
{* même personne, même compte *}
|
||||||
{fin_compte}
|
{/if}
|
||||||
{fin_personne}
|
{afficher_versement versement=$versement idVersement="%s_%s"|args:$tarifCourant,$personneCourante rang=$rang pair=$pair}
|
||||||
{fin_tarif}
|
<?php $pair = ! $pair; ?>
|
||||||
|
{/foreach} {* Itération sur les versements *}
|
||||||
|
{fin_compte}
|
||||||
|
{fin_personne}
|
||||||
|
{fin_tarif}
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
{* scripts divers *}
|
{* scripts divers *}
|
||||||
|
@ -4,63 +4,67 @@
|
|||||||
<h2>Année {$annee_recu} : versements par personne</h2>
|
<h2>Année {$annee_recu} : versements par personne</h2>
|
||||||
|
|
||||||
<fieldset class="noprint">
|
<fieldset class="noprint">
|
||||||
<input type="checkbox" class="check_global" id="check_global"
|
<input type="checkbox" class="check_global" id="check_global"
|
||||||
onclick="cocherDecocherToutesLesPersonnes(check_global)" />
|
onclick="cocherDecocherToutesLesPersonnes(check_global)" />
|
||||||
<label for="check_global">Cliquer pour cocher toutes les lignes</label>
|
<label for="check_global">Cliquer pour cocher toutes les lignes</label>
|
||||||
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne"
|
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne"
|
||||||
onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">
|
onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">
|
||||||
Replier toutes les personnes</button>
|
Replier toutes les personnes</button>
|
||||||
<br />
|
<br />
|
||||||
{button type="submit" label="Télécharger les reçus au format PDF" shape="download"
|
{button type="submit" label="Télécharger les reçus au format PDF" shape="download"
|
||||||
form="versements_personnes"
|
form="versements_personnes"
|
||||||
formaction="generer_recus.php?type=personne&format=pdf"
|
formaction="generer_recus.php?type=personne&format=pdf"
|
||||||
onclick="return verifierChoix(this.form)"}
|
onclick="return verifierChoix(this.form)"}
|
||||||
{button type="submit" target="_dialog" label="Imprimer les reçus" shape="print"
|
{button type="submit" label="Imprimer les reçus" shape="print"
|
||||||
form="versements_personnes"
|
form="versements_personnes"
|
||||||
formaction="generer_recus.php?type=personne&format=print"
|
formaction="generer_recus.php?type=personne&format=print"
|
||||||
onclick="return verifierChoix(this.form)"}
|
onclick="return verifierChoix(this.form)"}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<form method="post" target="_dialog" id="versements_personnes">
|
<form method="post" target="_dialog" id="versements_personnes">
|
||||||
|
|
||||||
{* Itération sur les personnes *}
|
{* Itération sur les personnes *}
|
||||||
{foreach from=$lesVersements key="rang" item="versement"}
|
{foreach from=$lesVersements key="rang" item="versement"}
|
||||||
{if $rang == 0}
|
|
||||||
{* 1ère personne *}
|
{if $rang == 0}
|
||||||
<?php
|
{* 1ère personne *}
|
||||||
$pair = true;
|
<?php
|
||||||
$personneCourante = $versement->idUser;
|
$pair = true;
|
||||||
$compteCourant = $versement->idCompte;
|
$personneCourante = $versement->idUser;
|
||||||
?>
|
$compteCourant = $versement->idCompte;
|
||||||
{afficher_debut_personne user=$personneCourante idVersement=$personneCourante}
|
$codeCompte = $versement->codeCompte;
|
||||||
{afficher_debut_compte idCompte=$compteCourant}
|
?>
|
||||||
{elseif $versement.idUser != $personneCourante}
|
{afficher_debut_personne user=$personneCourante idVersement=$personneCourante}
|
||||||
{* changement de personne *}
|
{afficher_debut_compte idCompte=$compteCourant}
|
||||||
{fin_compte}
|
{elseif $versement.idUser != $personneCourante}
|
||||||
{fin_personne}
|
{* changement de personne *}
|
||||||
<?php
|
{fin_compte}
|
||||||
$pair = true;
|
{fin_personne}
|
||||||
$personneCourante = $versement->idUser;
|
<?php
|
||||||
$compteCourant = $versement->idCompte;
|
$pair = true;
|
||||||
?>
|
$personneCourante = $versement->idUser;
|
||||||
{afficher_debut_personne user=$personneCourante idVersement=$personneCourante}
|
$compteCourant = $versement->idCompte;
|
||||||
{afficher_debut_compte idCompte=$compteCourant}
|
$codeCompte = $versement->codeCompte;
|
||||||
{elseif $versement.idCompte != $compteCourant}
|
?>
|
||||||
{fin_compte}
|
{afficher_debut_personne user=$personneCourante idVersement=$personneCourante}
|
||||||
{* changement de compte *}
|
{afficher_debut_compte idCompte=$compteCourant}
|
||||||
<?php
|
{elseif $versement.codeCompte != $codeCompte}
|
||||||
$pair = true;
|
{fin_compte}
|
||||||
$compteCourant = $versement->idCompte;
|
{* changement de compte *}
|
||||||
?>
|
<?php
|
||||||
{afficher_debut_compte idCompte=$compteCourant}
|
$pair = true;
|
||||||
{else}
|
$compteCourant = $versement->idCompte;
|
||||||
{* même personne, même compte *}
|
$codeCompte = $versement->codeCompte;
|
||||||
{/if}
|
?>
|
||||||
{afficher_versement versement=$versement idVersement=$personneCourante rang=$rang pair=$pair}
|
{afficher_debut_compte idCompte=$compteCourant}
|
||||||
<?php $pair = ! $pair; ?>
|
{else}
|
||||||
{/foreach} {* Itération sur les personnes *}
|
{* même personne, même compte *}
|
||||||
{fin_compte}
|
{/if}
|
||||||
{fin_personne}
|
{afficher_versement versement=$versement idVersement=$personneCourante rang=$rang pair=$pair}
|
||||||
|
<?php $pair = ! $pair; ?>
|
||||||
|
{/foreach} {* Itération sur les personnes *}
|
||||||
|
{fin_compte}
|
||||||
|
{fin_personne}
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
{* scripts divers *}
|
{* scripts divers *}
|
||||||
|
Loading…
Reference in New Issue
Block a user