a3aa6fa200
FossilOrigin-Name: 2895a7a5054d102c3262500e9e67557129592b607830a406d30fd3596cdfe6a9
283 lines
8.9 KiB
PHP
283 lines
8.9 KiB
PHP
<?php
|
|
|
|
namespace Garradin\Plugin\RecusFiscaux;
|
|
|
|
use Garradin\DB;
|
|
use KD2\ZipWriter;
|
|
|
|
class Utils
|
|
{
|
|
/**
|
|
* @return tarifs demandés
|
|
* @param array $tarifs
|
|
*/
|
|
public static function getTarifs($tarifs)
|
|
{
|
|
$db = DB::getInstance();
|
|
$sql = sprintf(
|
|
'SELECT id, id_service as idActivite, label, description, amount as montant
|
|
FROM services_fees
|
|
WHERE services_fees.%s',
|
|
$db->where('id', $tarifs));
|
|
return $db->get($sql);
|
|
}
|
|
|
|
/**
|
|
* @return activités correspondant aux tarifs demandés
|
|
* @param array $tarifs
|
|
*/
|
|
public static function getActivites($tarifs)
|
|
{
|
|
$db = DB::getInstance();
|
|
$sql = sprintf(
|
|
'SELECT services.id, services.label, services.description
|
|
FROM services
|
|
LEFT JOIN services_fees ON services_fees.id_service = services.id
|
|
WHERE services_fees.%s
|
|
GROUP BY services.id',
|
|
$db->where('id', $tarifs));
|
|
return $db->get($sql);
|
|
}
|
|
|
|
/**
|
|
* @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, $champsNom)
|
|
{
|
|
$db = DB::getInstance();
|
|
$tri = Utils::combinerTri($champsNom);
|
|
$sql = sprintf(
|
|
'SELECT
|
|
services_fees.id as idTarif,
|
|
membres.id as idUser,
|
|
acc_transactions_lines.credit as versement,
|
|
acc_transactions.date
|
|
FROM acc_transactions_users
|
|
INNER JOIN membres on acc_transactions_users.id_user = membres.id
|
|
INNER JOIN acc_transactions 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
|
|
WHERE
|
|
(strftime(%s, acc_transactions.date) = "%d"
|
|
AND
|
|
services_fees.%s
|
|
AND
|
|
acc_transactions_lines.credit > 0)
|
|
ORDER by services_fees.id, %s, acc_transactions.date',
|
|
'"%Y"',
|
|
$annee,
|
|
$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, $champsNom)
|
|
{
|
|
$tri = Utils::combinerTri($champsNom);
|
|
$sql = sprintf(
|
|
'SELECT
|
|
membres.id as idUser,
|
|
sum(acc_transactions_lines.credit) AS versement
|
|
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 acc_transactions_users.id_user
|
|
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, $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,
|
|
" .
|
|
$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('%Y', acc_transactions.date) = ?
|
|
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 " . $tri . " COLLATE U_NOCASE
|
|
";
|
|
return DB::getInstance()->get($sql, $annee);
|
|
}
|
|
|
|
public static function getLignesReduction($lesTaux)
|
|
{
|
|
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;
|
|
}
|
|
return $lignes;
|
|
}
|
|
public static function getLigneReduction($taux)
|
|
{
|
|
return $_SESSION['ligneReduction'][$taux];
|
|
}
|
|
|
|
/**
|
|
* @return liste de toutes les activités, tarifs et comptes associés
|
|
*/
|
|
public static function getActivitesTarifsEtComptes()
|
|
{
|
|
return DB::getInstance()->get(
|
|
"SELECT
|
|
services.id as idActivite,
|
|
services.label as titreActivite,
|
|
services.description as descActivite,
|
|
services_fees.id as idTarif,
|
|
services_fees.label as titreTarif,
|
|
services_fees.description as descTarif,
|
|
acc_accounts.code as numeroCpt,
|
|
acc_accounts.label as nomCpt
|
|
FROM services
|
|
LEFT JOIN services_fees ON services_fees.id_service = services.id
|
|
LEFT JOIN acc_accounts ON services_fees.id_account = acc_accounts.id
|
|
ORDER BY services.label"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @return nom de l'association
|
|
*/
|
|
public static function getNomAsso() {
|
|
return DB::getInstance()->first(
|
|
"SELECT value
|
|
FROM config
|
|
WHERE key = 'nom_asso'"
|
|
)->value;
|
|
}
|
|
|
|
/**
|
|
* @return adresse de l'association
|
|
*/
|
|
public static function getAdresseAsso() {
|
|
return DB::getInstance()->first(
|
|
"SELECT value
|
|
FROM config
|
|
WHERE key = 'adresse_asso'"
|
|
)->value;
|
|
}
|
|
|
|
/**
|
|
* @return liste des années fiscales
|
|
*/
|
|
public static function getAnneesFiscales() {
|
|
$rows = DB::getInstance()->get(
|
|
"SELECT strftime('%Y', start_date) as annee
|
|
FROM acc_years
|
|
ORDER by start_date DESC"
|
|
);
|
|
$anneesFiscales = array();
|
|
foreach ($rows as $row) {
|
|
$anneesFiscales[] = $row->annee;
|
|
}
|
|
return $anneesFiscales;
|
|
}
|
|
|
|
/**
|
|
* enregistrer les fichiers dans une archive zip
|
|
* @param $fileList : liste des fichiers à archiver
|
|
* @param $year : pour générer le nom de l'archive
|
|
* @param $archiveDir : ne sert plus
|
|
*/
|
|
static function makeArchive(
|
|
$fileList,
|
|
$year,
|
|
$archiveDir = null)
|
|
{
|
|
$zipFilename = "recus_dons" . $year . ".zip";
|
|
header('Content-type: application/zip');
|
|
header(sprintf('Content-Disposition: attachment; filename="%s"', $zipFilename));
|
|
$zip = new ZipWriter('php://output');
|
|
$zip->setCompression(0);
|
|
foreach ($fileList as $fileName)
|
|
{
|
|
$zip->add(basename($fileName), null, $fileName);
|
|
}
|
|
$zip->close();
|
|
} // makeArchive
|
|
}
|