diff --git a/garradin_plugin.ini b/garradin_plugin.ini index 8e00b99..41e3323 100644 --- a/garradin_plugin.ini +++ b/garradin_plugin.ini @@ -2,7 +2,7 @@ nom="Reçus fiscaux" description="Génération de reçus fiscaux pour les dons des membres" auteur="jce" url="https://git.roflcopter.fr/lesanges/recus-fiscaux-garradin" -version="0.6.2" +version="0.6.4" menu=1 config=1 min_version="1.1" diff --git a/lib/Personne.php b/lib/Personne.php index 118aca1..9a10979 100644 --- a/lib/Personne.php +++ b/lib/Personne.php @@ -13,7 +13,7 @@ class Personne public $codePostal; public $ville; public $courriel; - public $versements; // tableau des versements totaux par activité/tarif + public $versements; // versements par taux de réduction public function __construct( $id, @@ -30,7 +30,7 @@ class Personne $this->codePostal = $codePostal; $this->ville = $ville; $this->courriel = $courriel; - $this->versements = array(); + $this->versements = array(); // clé = tarif, valeur = montant } /** @@ -49,24 +49,21 @@ class Personne /** * ajouter un versement - * @param $idActivite - * @param $idTarif - * @param $montant * @param $tauxReduction + * @param $montant */ public function ajouterVersement( - $idActivite, - $idTarif, - $montant, - $tauxReduction + $tauxReduction, + $montant ) { - $this->versements[] = - new Versement( - $idActivite, - $idTarif, - $montant, - $tauxReduction - ); + if (array_key_exists($tauxReduction, $this->versements)) + { + $this->versements[$tauxReduction] += $montant; + } + else + { + $this->versements[$tauxReduction] = $montant; + } } } diff --git a/lib/RecusHTML.php b/lib/RecusHTML.php deleted file mode 100644 index eb5eaf2..0000000 --- a/lib/RecusHTML.php +++ /dev/null @@ -1,257 +0,0 @@ -nomAsso = $nomAsso; - $this->adresseAsso = $adresseAsso; - $this->logoAsso = $logoAsso; - $this->objetAsso = $objetAsso; - $this->nomResponsable = $nomResponsable; - $this->fonctionResponsable = $fonctionResponsable; - $this->villeAsso = $villeAsso; - $this->signature = $signature; - $this->articlesCGI = $articlesCGI; - $this->html = $this->entete(); - } - - function get() - { - return $this->html; - } - - // imprimer le reçu - function imprimer_recu($annee_recu, - $numero, - $nom, - $lesMontants, - $adresse, - $code_postal, - $ville) - { - ob_start(); -echo << -

Reçu numéro {$annee_recu}/{$numero}

- - - -
-

Bénéficiaire des versements

-

Association « {$this->nomAsso} »
- {$this->adresseAsso}
- Objet : {$this->objetAsso}

-
- -
-

Donateur

-

{$nom}
- {$adresse}
- {$code_postal} {$ville}

-
- -
-

Le bénéficiaire reconnaît avoir reçu au titre des dons et versements ouvrant droit à réduction d'impôt :

- \n"; - $this->imprimer_description("Date des versements :", - "année {$annee_recu}"); - $this->imprimer_description("Nature du don : ", - "Numéraire"); - $this->imprimer_description("Mode de versement : ", - "chèque et/ou virement"); - - // articles du CGI - $nbArticles = count($this->articlesCGI); - if ($nbArticles == 1) - { - echo "

Le bénéficiaire certifie sur l’honneur que les dons et versements qu’il reçoit ouvrent droit à la réduction d'impôt prévue à l’article "; - printf("%s du code général des impôts

\n", $this->articlesCGI[0]); - } - else if ($nbArticles > 1) - { - echo "

Le bénéficiaire certifie sur l’honneur que les dons et versements qu’il reçoit ouvrent droit à la réduction d'impôt prévue aux articles "; - for ($i = 0; $i < $nbArticles; ++$i) { - printf("%s", $this->articlesCGI[$i]); - if ($i < $nbArticles - 2) { - echo ", "; - } - else if ($i == $nbArticles - 2) { - echo " et "; - } - } - echo " du code général des impôts

\n"; - } - echo "
\n"; - - // cartouche final - $date = date("j/m/Y"); -echo << -

{$this->villeAsso} le {$date}
- -

-
- $this->nomResponsable
- $this->fonctionResponsable -
- - - -FDD; - $this->html .= ob_get_clean(); - } - - // imprimer un libellé précédé de son titre en gras - function imprimer_description($titre, $libelle) - { - echo <<{$titre} {$libelle}

- -FDD; - } - - // imprimer le montant du versement et un libellé - function imprimer_montant($montant, $libelle = "") - { - $valeur = number_format($montant, 2, ',', ''); - echo "
  • la somme de ***{$valeur}*** euros"; - if ($libelle != "") { - echo " ({$libelle})"; - } - echo "
  • \n"; - } - - protected function entete() - { - ob_start(); -echo << - - - - - - -
    - -

    Reçu au titre des dons à certains organismes d'intérêt général

    -

    Articles 200, 238 bis et 978 du code général des impôts

    - -FDD; - return ob_get_clean(); - } -} diff --git a/lib/Utils.php b/lib/Utils.php index 22e74d0..d2c3400 100644 --- a/lib/Utils.php +++ b/lib/Utils.php @@ -39,8 +39,40 @@ class Utils return $db->get($sql); } + /** + * @return versements correspondants à l'année donnée + * @param $annee + * @param array $champsNom : liste non vide des champs de nom/prénom + */ + public static function getVersementsPersonnes($annee, $champsNom) + { + $db = DB::getInstance(); + $tri = Utils::combinerTri($champsNom); + $sql = sprintf( + 'SELECT + 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 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) + ORDER by %s, acc_transactions.date', + '"%Y"', + $annee, + $tri + ); + return $db->get($sql); + } + /** * @return versements correspondants à l'année et aux tarifs donnés + * triés par tarif, nom, date * @param $annee * @param array $tarifs * @param array $champsNom : liste non vide des champs de nom/prénom @@ -76,6 +108,42 @@ class Utils return $db->get($sql); } + /** + * @return versements correspondants à l'année et aux comptes donnés + * @param $annee + * @param array $comptes + * @param array $champsNom : liste non vide des champs de nom/prénom + */ + public static function getVersementsComptes($annee, $comptes, $champsNom) + { + $db = DB::getInstance(); + $tri = Utils::combinerTri($champsNom); + $sql = sprintf( + 'SELECT + acc_accounts.code as compte, + 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 acc_transactions_lines on acc_transactions_lines.id_transaction = acc_transactions.id + WHERE + (strftime(%s, acc_transactions.date) = "%d" + AND + acc_accounts.%s + AND + acc_transactions_lines.credit > 0) + ORDER by acc_accounts.code, %s, acc_transactions.date', + '"%Y"', + $annee, + $db->where('code', $comptes), + $tri + ); + return $db->get($sql); + } + /** * Versements totaux par personne pour une année donnée * @param année @@ -142,7 +210,7 @@ class Utils * @param $annee * @param array $champsNom : champs qui définissent le nom et le prénom d'une personne */ - public static function getDonateurs($annee, $champsNom) + public static function getDonateurs($annee, $champsNom) : array { // concaténer les champs nom/prénoms pour la sélection $nom = 'trim(' . Utils::combinerChamps($champsNom) . ') as nom,'; @@ -174,7 +242,16 @@ class Utils GROUP by membres.id ORDER by " . $tri . " COLLATE U_NOCASE "; - return DB::getInstance()->get($sql, $annee); + $donateurs = array(); + foreach (DB::getInstance()->iterate($sql, $annee) as $personne) + { + $donateurs[$personne->idUser] = new Personne($personne->idUser, + $personne->nom, + $personne->adresse, + $personne->codePostal, + $personne->ville); + } + return $donateurs; } public static function getLignesReduction($lesTaux) @@ -219,32 +296,11 @@ class Utils ); } - /** - * @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() { + public static function getAnneesFiscales() : array + { $rows = DB::getInstance()->get( "SELECT strftime('%Y', start_date) as annee FROM acc_years @@ -277,7 +333,7 @@ class Utils { if (stristr($title, 'nom')) { - // retenir les champs dont le titre contient le term 'nom' + // retenir les champs dont le titre contient le terme 'nom' // est-il présent dans la config du plugin ? if (! array_key_exists($name, $champsNom)) { diff --git a/templates/_nav.tpl b/templates/_nav.tpl index 6ab82c4..f909c92 100644 --- a/templates/_nav.tpl +++ b/templates/_nav.tpl @@ -5,8 +5,8 @@