prise en compte de différents champs nom et prénom

FossilOrigin-Name: 2895a7a5054d102c3262500e9e67557129592b607830a406d30fd3596cdfe6a9
This commit is contained in:
engel 2022-03-18 19:39:02 +00:00
parent 5995f33efd
commit a3aa6fa200
8 changed files with 271 additions and 108 deletions

View file

@ -43,10 +43,12 @@ class Utils
* @return versements correspondants à l'année et aux tarifs donnés
* @param $annee
* @param array $tarifs
* @param array $champsNom : liste non vide des champs de nom/prénom
*/
public static function getVersementsTarifs($annee, $tarifs)
public static function getVersementsTarifs($annee, $tarifs, $champsNom)
{
$db = DB::getInstance();
$tri = Utils::combinerTri($champsNom);
$sql = sprintf(
'SELECT
services_fees.id as idTarif,
@ -65,21 +67,25 @@ class Utils
services_fees.%s
AND
acc_transactions_lines.credit > 0)
ORDER by services_fees.id, membres.nom, acc_transactions.date',
ORDER by services_fees.id, %s, acc_transactions.date',
'"%Y"',
$annee,
$db->where('id', $tarifs));
$db->where('id', $tarifs),
$tri
);
return $db->get($sql);
}
/**
* Versements totaux par personne pour une année donnée
* @param année
* @param array $champsNom : liste non vide des champs de nom/prénom
*/
public static function getVersementsTotaux($annee)
public static function getVersementsTotaux($annee, $champsNom)
{
$sql =
"SELECT
$tri = Utils::combinerTri($champsNom);
$sql = sprintf(
'SELECT
membres.id as idUser,
sum(acc_transactions_lines.credit) AS versement
FROM
@ -89,7 +95,7 @@ class Utils
INNER JOIN acc_transactions_lines
ON acc_transactions_lines.id_transaction = acc_transactions.id
WHERE (
strftime('%Y', acc_transactions.date) = ?
strftime(%s, acc_transactions.date) = "%d"
AND
acc_transactions_lines.credit > 0
AND
@ -98,21 +104,55 @@ class Utils
acc_transactions_users.id_user = membres.id
)
GROUP by acc_transactions_users.id_user
ORDER by membres.nom COLLATE U_NOCASE;
";
return DB::getInstance()->get($sql, $annee);
ORDER by %s COLLATE U_NOCASE',
'"%Y"',
$annee,
$tri);
return DB::getInstance()->get($sql);
}
/**
* combiner les champs avec un opérateur
* @param array $champs : liste (non vide) de champs
* @return chaîne combinée
*/
private static function combinerChamps($champs)
{
$op = ' || " " || ';
$result = 'ifnull(membres.' . $champs[0] . ', "")';
for ($i = 1; $i < count($champs); ++$i)
{
$result .= $op . 'ifnull(membres.' . $champs[$i] . ', "")';
}
return $result;
}
private static function combinerTri($champs)
{
$tri = 'membres.' . $champs[0];
for ($i = 1; $i < count($champs); ++$i)
{
$tri .= ', membres.' . $champs[$i];
}
return $tri;
}
/**
* @return personnes ayant versé des dons pour une année donnée
* @param $annee
* @param array $champsNom : champs qui définissent le nom et le prénom d'une personne
*/
public static function getDonateurs($annee)
public static function getDonateurs($annee, $champsNom)
{
// concaténer les champs nom/prénoms pour la sélection
$nom = Utils::combinerChamps($champsNom) . ' as nom,';
// et pour le tri
$tri = Utils::combinerTri($champsNom);
$sql =
"SELECT
membres.id as idUser,
membres.nom as nom,
" .
$nom . "
membres.adresse as adresse,
membres.code_postal as codePostal,
membres.ville as ville
@ -132,7 +172,7 @@ class Utils
acc_transactions_users.id_user = membres.id
)
GROUP by membres.id
ORDER by membres.nom COLLATE U_NOCASE;
ORDER by " . $tri . " COLLATE U_NOCASE
";
return DB::getInstance()->get($sql, $annee);
}