ajout bouton générer
FossilOrigin-Name: c4ee1e2f9ebe9c1a99adb825034569a4274d92e953df1a30475210c08bc3aa28
This commit is contained in:
parent
78f6a982a4
commit
bbfba688c6
@ -8,28 +8,28 @@ namespace Garradin\Plugin\RecusFiscaux;
|
|||||||
class Personne
|
class Personne
|
||||||
{
|
{
|
||||||
public $id;
|
public $id;
|
||||||
|
public $rang; // par ordre alpha de nomPrenom ; sert aux tris
|
||||||
public $nomPrenom;
|
public $nomPrenom;
|
||||||
public $adresse;
|
public $adresse;
|
||||||
public $codePostal;
|
public $codePostal;
|
||||||
public $ville;
|
public $ville;
|
||||||
public $courriel;
|
|
||||||
public $versements; // versements par taux de réduction
|
public $versements; // versements par taux de réduction
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
$id,
|
$id,
|
||||||
|
$rang,
|
||||||
$nomPrenom,
|
$nomPrenom,
|
||||||
$adresse,
|
$adresse,
|
||||||
$codePostal,
|
$codePostal,
|
||||||
$ville,
|
$ville
|
||||||
$courriel = ""
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$this->id = $id;
|
$this->id = $id;
|
||||||
|
$this->rang = $rang;
|
||||||
$this->nomPrenom = $nomPrenom;
|
$this->nomPrenom = $nomPrenom;
|
||||||
$this->adresse = $adresse;
|
$this->adresse = $adresse;
|
||||||
$this->codePostal = $codePostal;
|
$this->codePostal = $codePostal;
|
||||||
$this->ville = $ville;
|
$this->ville = $ville;
|
||||||
$this->courriel = $courriel;
|
|
||||||
$this->versements = array(); // clé = tarif, valeur = montant
|
$this->versements = array(); // clé = tarif, valeur = montant
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,11 +40,11 @@ class Personne
|
|||||||
{
|
{
|
||||||
return new Personne(
|
return new Personne(
|
||||||
$this->id,
|
$this->id,
|
||||||
|
$this->rang,
|
||||||
$this->nomPrenom,
|
$this->nomPrenom,
|
||||||
$this->adresse,
|
$this->adresse,
|
||||||
$this->codePostal,
|
$this->codePostal,
|
||||||
$this->ville,
|
$this->ville);
|
||||||
$this->courriel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
150
lib/Utils.php
150
lib/Utils.php
@ -111,40 +111,135 @@ class Utils
|
|||||||
/**
|
/**
|
||||||
* @return versements correspondants à l'année et aux comptes donnés
|
* @return versements correspondants à l'année et aux comptes donnés
|
||||||
* @param $annee
|
* @param $annee
|
||||||
|
* @param $op : opérateur de combinaison des comptes
|
||||||
* @param array $comptes
|
* @param array $comptes
|
||||||
* @param array $champsNom : liste non vide des champs de nom/prénom
|
* @param array $champsNom : liste non vide des champs de nom/prénom
|
||||||
|
* exemples :
|
||||||
|
* op = 'in', comptes = ['706', '7780', '756']
|
||||||
|
* op = 'like', comptes = '7%'
|
||||||
*/
|
*/
|
||||||
public static function getVersementsComptes($annee, $comptes, $champsNom)
|
public static function getVersementsComptes($annee, $op, $comptes, $champsNom)
|
||||||
{
|
{
|
||||||
$db = DB::getInstance();
|
$db = DB::getInstance();
|
||||||
$tri = Utils::combinerTri($champsNom);
|
$tri = Utils::combinerTri($champsNom);
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
'SELECT
|
'SELECT
|
||||||
|
services_fees.id as idTarif,
|
||||||
acc_accounts.code as compte,
|
acc_accounts.code as compte,
|
||||||
membres.id as idUser,
|
membres.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 membres on acc_transactions_users.id_user = membres.id
|
INNER JOIN membres
|
||||||
INNER JOIN acc_transactions on acc_transactions_users.id_transaction = acc_transactions.id
|
ON acc_transactions_users.id_user = membres.id
|
||||||
INNER JOIN services_users on acc_transactions_users.id_service_user = services_users.id
|
INNER JOIN acc_transactions
|
||||||
INNER JOIN acc_transactions_lines on acc_transactions_lines.id_transaction = acc_transactions.id
|
ON acc_transactions_users.id_transaction = acc_transactions.id
|
||||||
|
INNER JOIN services_users
|
||||||
|
ON acc_transactions_users.id_service_user = services_users.id
|
||||||
|
INNER JOIN services_fees
|
||||||
|
ON services_users.id_fee = services_fees.id
|
||||||
|
INNER JOIN acc_transactions_lines
|
||||||
|
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
||||||
|
INNER JOIN acc_accounts
|
||||||
|
ON acc_transactions_lines.id_account = acc_accounts.id
|
||||||
WHERE
|
WHERE
|
||||||
(strftime(%s, acc_transactions.date) = "%d"
|
(strftime(%s, acc_transactions.date) = "%d"
|
||||||
AND
|
AND
|
||||||
acc_accounts.%s
|
acc_accounts.%s
|
||||||
AND
|
AND
|
||||||
acc_transactions_lines.credit > 0)
|
acc_transactions_lines.credit > 0)
|
||||||
ORDER by acc_accounts.code, %s, acc_transactions.date',
|
ORDER by %s, acc_transactions.date',
|
||||||
'"%Y"',
|
'"%Y"',
|
||||||
$annee,
|
$annee,
|
||||||
$db->where('code', $comptes),
|
$db->where('code', $op, $comptes),
|
||||||
$tri
|
$tri
|
||||||
);
|
);
|
||||||
return $db->get($sql);
|
return $db->get($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @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, $champsNom) : array
|
||||||
|
{
|
||||||
|
// concaténer les champs nom/prénoms pour la sélection
|
||||||
|
$nom = Utils::combinerChamps($champsNom);
|
||||||
|
// et pour le tri
|
||||||
|
$tri = Utils::combinerTri($champsNom);
|
||||||
|
$sql = sprintf(
|
||||||
|
'SELECT
|
||||||
|
membres.id as idUser,
|
||||||
|
row_number() over(order by %s) as rang,
|
||||||
|
%s as nom,
|
||||||
|
membres.adresse as adresse,
|
||||||
|
membres.code_postal as codePostal,
|
||||||
|
membres.ville as ville
|
||||||
|
FROM
|
||||||
|
acc_transactions_users,
|
||||||
|
membres,
|
||||||
|
acc_transactions
|
||||||
|
INNER JOIN acc_transactions_lines
|
||||||
|
ON acc_transactions_lines.id_transaction = acc_transactions.id
|
||||||
|
WHERE (
|
||||||
|
strftime(%s, acc_transactions.date) = "%d"
|
||||||
|
AND
|
||||||
|
acc_transactions_lines.credit > 0
|
||||||
|
AND
|
||||||
|
acc_transactions_users.id_transaction = acc_transactions.id
|
||||||
|
AND
|
||||||
|
acc_transactions_users.id_user = membres.id
|
||||||
|
)
|
||||||
|
GROUP by membres.id
|
||||||
|
ORDER by %1$s COLLATE U_NOCASE
|
||||||
|
',
|
||||||
|
$tri,
|
||||||
|
$nom,
|
||||||
|
'"%Y"',
|
||||||
|
$annee
|
||||||
|
);
|
||||||
|
// error_log("getDonateurs = " . print_r($sql, true));
|
||||||
|
$donateurs = array();
|
||||||
|
foreach (DB::getInstance()->iterate($sql) as $personne)
|
||||||
|
{
|
||||||
|
$donateurs[$personne->idUser] = new Personne($personne->idUser,
|
||||||
|
$personne->rang,
|
||||||
|
$personne->nom,
|
||||||
|
$personne->adresse,
|
||||||
|
$personne->codePostal,
|
||||||
|
$personne->ville);
|
||||||
|
}
|
||||||
|
return $donateurs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 'trim(' . $result . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function combinerTri($champs)
|
||||||
|
{
|
||||||
|
$tri = 'membres.' . $champs[0];
|
||||||
|
for ($i = 1; $i < count($champs); ++$i)
|
||||||
|
{
|
||||||
|
$tri .= ', membres.' . $champs[$i];
|
||||||
|
}
|
||||||
|
return $tri;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** OBSOLETE
|
||||||
* Versements totaux par personne pour une année donnée
|
* Versements totaux par personne pour une année donnée
|
||||||
* @param année
|
* @param année
|
||||||
* @param array $champsNom : liste non vide des champs de nom/prénom
|
* @param array $champsNom : liste non vide des champs de nom/prénom
|
||||||
@ -179,38 +274,7 @@ class Utils
|
|||||||
return DB::getInstance()->get($sql);
|
return DB::getInstance()->get($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public static function getDonateurs_old($annee, $champsNom) : array
|
||||||
* 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, $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 = 'trim(' . Utils::combinerChamps($champsNom) . ') as nom,';
|
$nom = 'trim(' . Utils::combinerChamps($champsNom) . ') as nom,';
|
||||||
@ -258,17 +322,11 @@ class Utils
|
|||||||
{
|
{
|
||||||
foreach ($lesTaux as $elem)
|
foreach ($lesTaux as $elem)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
$ligne = "taux " . $elem->taux . ", ligne " . $elem->ligne;
|
|
||||||
if ($elem->remarque != "") {
|
|
||||||
$ligne .= ", " . $elem->remarque;
|
|
||||||
}
|
|
||||||
$lignes[$elem->taux] = $ligne;
|
|
||||||
*/
|
|
||||||
$lignes[$elem->taux] = $elem->remarque;
|
$lignes[$elem->taux] = $elem->remarque;
|
||||||
}
|
}
|
||||||
return $lignes;
|
return $lignes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getLigneReduction($taux)
|
public static function getLigneReduction($taux)
|
||||||
{
|
{
|
||||||
return $_SESSION['ligneReduction'][$taux];
|
return $_SESSION['ligneReduction'][$taux];
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
<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" onclick="montrerMasquerDetails(this.id, 'details.activite', 'toutes les activités')">Replier toutes les activités</button>
|
<button type="button" data-icon="↑" class="icn-btn" id="close_details_activite" onclick="montrerMasquerDetails(this.id, 'details.activite', 'toutes les activités')">Replier toutes les activités</button>
|
||||||
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne" onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">Replier toutes les personnes</button>
|
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne" onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">Replier toutes les personnes</button>
|
||||||
|
<input type="submit" value="Générer les reçus" form="versements_activites" onclick="return verifierChoix(this.form)">
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<form method="post" id="versements_activites" action="generer_recus.php?type=activite">
|
<form method="post" id="versements_activites" action="generer_recus.php?type=activite">
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
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" onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">Replier toutes les personnes</button>
|
<button type="button" data-icon="↑" class="icn-btn" id="close_details_personne" onclick="montrerMasquerDetails(this.id, 'details.personne', 'toutes les personnes')">Replier toutes les personnes</button>
|
||||||
|
<input type="submit" value="Générer les reçus" form="versements_personnes" onclick="return verifierChoix(this.form)">
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<form method="post" id="versements_personnes" action="generer_recus.php?type=personne">
|
<form method="post" id="versements_personnes" action="generer_recus.php?type=personne">
|
||||||
|
@ -8,9 +8,75 @@ use Garradin\Plugin\RecusFiscaux\Utils;
|
|||||||
$_SESSION['taux_reduction'] = $_POST['taux_reduction'];
|
$_SESSION['taux_reduction'] = $_POST['taux_reduction'];
|
||||||
|
|
||||||
// versements par personne
|
// versements par personne
|
||||||
$_SESSION['lesVersements'] = Utils::getVersementsPersonnes($_SESSION['annee_recu'],
|
$_SESSION['lesVersements'] = Utils::getVersementsComptes($_SESSION['annee_recu'],
|
||||||
|
"like",
|
||||||
|
'7%',
|
||||||
$champsNom);
|
$champsNom);
|
||||||
|
|
||||||
|
// Utils::getVersementsPersonnes($_SESSION['annee_recu'],
|
||||||
|
// $champsNom);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// tests
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
/*
|
||||||
|
$versementsComptes = Utils::getVersementsComptes("2021",
|
||||||
|
// "in",
|
||||||
|
// ['706', '7780', '756'],
|
||||||
|
"like",
|
||||||
|
'7%',
|
||||||
|
$champsNom);
|
||||||
|
// table triée par nom, date
|
||||||
|
// error_log("versementsComptes triée par nom, date = " . print_r($versementsComptes, true));
|
||||||
|
|
||||||
|
// comparer 2 lignes selon le nom
|
||||||
|
function comparerNoms($ligne1, $ligne2)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
$_SESSION['membresDonateurs'][$ligne1->idUser]->rang
|
||||||
|
-
|
||||||
|
$_SESSION['membresDonateurs'][$ligne2->idUser]->rang;
|
||||||
|
}
|
||||||
|
|
||||||
|
// comparer 2 lignes selon la date
|
||||||
|
function comparerDate($ligne1, $ligne2)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
strtotime($ligne1->date) - strtotime($ligne2->date);
|
||||||
|
}
|
||||||
|
|
||||||
|
// comparer 2 lignes selon un champ
|
||||||
|
function comparerChamp($ligne1, $ligne2, $champ)
|
||||||
|
{
|
||||||
|
return $ligne1->$champ - $ligne2->$champ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// autres tris
|
||||||
|
// par tarif, nom, date
|
||||||
|
usort($versementsComptes, function($ligne1, $ligne2)
|
||||||
|
{
|
||||||
|
$result = comparerChamp($ligne1, $ligne2, 'idTarif'); //$ligne1->idTarif - $ligne2->idTarif;
|
||||||
|
if ($result == 0) { $result = comparerNoms($ligne1, $ligne2); }
|
||||||
|
if ($result == 0) { $result = comparerDate($ligne1, $ligne2); }
|
||||||
|
return $result;
|
||||||
|
});
|
||||||
|
// error_log("versementsComptes triée par tarif, nom, date = " . print_r($versementsComptes, true));
|
||||||
|
|
||||||
|
// par nom, compte, date...
|
||||||
|
usort($versementsComptes, function($ligne1, $ligne2)
|
||||||
|
{
|
||||||
|
$result = comparerNoms($ligne1, $ligne2);
|
||||||
|
if ($result == 0) { $result = comparerChamp($ligne1, $ligne2, 'compte'); }
|
||||||
|
if ($result == 0) { $result = comparerDate($ligne1, $ligne2); }
|
||||||
|
return $result;
|
||||||
|
});
|
||||||
|
|
||||||
|
// error_log("versementsComptes triée par nom, compte, date = " . print_r($versementsComptes, true));
|
||||||
|
*/
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// fin tests
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
// préparation de l'affichage
|
// préparation de l'affichage
|
||||||
$tpl->assign('lesVersements', $_SESSION['lesVersements']);
|
$tpl->assign('lesVersements', $_SESSION['lesVersements']);
|
||||||
$tpl->assign('plugin_css', ['style.css']);
|
$tpl->assign('plugin_css', ['style.css']);
|
||||||
|
Loading…
Reference in New Issue
Block a user