Overview
Comment:État de la cotisation obligatoire et historique des paiements
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 373496163c695ff6a6bb4bba2c5f5df98502ea68
User & Date: bohwaz on 2014-01-30 16:21:42
Other Links: manifest | tags
Context
2014-01-30
17:15
Création de paiement check-in: 131f09907f user: bohwaz tags: trunk
16:21
État de la cotisation obligatoire et historique des paiements check-in: 373496163c user: bohwaz tags: trunk
15:36
Affichage transactions sur fiche membre + sous-menu sur les pages liées à un membre check-in: 5f46283cb0 user: bohwaz tags: trunk
Changes

Modified src/include/class.membres_transactions.php from [7d3fe7555d] to [ca6122d253].

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
...
133
134
135
136
137
138
139



140
141


142
143
144
145
146
147
148

149
150

151
152
153
154



155
156
157
158

159
160
161
162
163
164


165
166
167
168
169
170
171
172
173
		if (!isset($data['libelle']) || trim($data['libelle']) == '')
		{
			throw new UserException('Le libellé ne peut rester vide.');
		}

		$data['libelle'] = trim($data['libelle']);

		if (empty($data['montant']) || !is_numeric($data['montant']))
		{
			throw new UserException('Le montant doit être un nombre valide.');
		}

		$data['montant'] = (float) $data['montant'];

		if (isset($data['id_transaction']))
		{
			if ($data['id_transaction'] != 0 && !$db->simpleQuerySingle('SELECT 1 FROM transactions WHERE id = ?;', false, (int) $data['id_transaction']))
................................................................................
			WHERE id_membre = ? ORDER BY date DESC;', \SQLITE3_ASSOC, (int)$id);
	}

	public function isMemberUpToDate($id, $transaction)
	{
		$db = DB::getInstance();




		if (!empty($transaction['duree']))
		{


			$where = 'AND date(\'now\') <= date(date, \'+' . (int)$transaction['duree'] . ' days\')';
		}
		elseif (!empty($transaction['debut']))
		{
			$where = 'AND date >= \'' . $transaction['debut'] . '\' AND date <= \'' . $transaction['fin'] . '\'';
		}


		$res = $db->simpleQuerySingle('SELECT SUM(montant) FROM membres_transactions
			WHERE id_transaction = ? AND id_membre = ? ' . $where . '

			ORDER BY date DESC LIMIT 1;',
			false, (int)$transaction['id'], (int)$id);

		if (empty($res))



		{
			return false;
		}


		if ($res < $transaction['montant'])
		{
			return -1;
		}

		return true;


	}

	public function countForMember($id)
	{
		$db = DB::getInstance();
		return $db->simpleQuerySingle('SELECT COUNT(*) FROM membres_transactions 
			WHERE id_membre = ?;', false, (int)$id);
	}
}







|

|







 







>
>
>


>
>
|



|


>
|
|
>

|

<
>
>
>




>
|




|
>
>









16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
...
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160

161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
		if (!isset($data['libelle']) || trim($data['libelle']) == '')
		{
			throw new UserException('Le libellé ne peut rester vide.');
		}

		$data['libelle'] = trim($data['libelle']);

		if (!isset($data['montant']) || !is_numeric($data['montant']) || (float)$data['montant'] < 0)
		{
			throw new UserException('Le montant doit être un nombre positif et valide.');
		}

		$data['montant'] = (float) $data['montant'];

		if (isset($data['id_transaction']))
		{
			if ($data['id_transaction'] != 0 && !$db->simpleQuerySingle('SELECT 1 FROM transactions WHERE id = ?;', false, (int) $data['id_transaction']))
................................................................................
			WHERE id_membre = ? ORDER BY date DESC;', \SQLITE3_ASSOC, (int)$id);
	}

	public function isMemberUpToDate($id, $transaction)
	{
		$db = DB::getInstance();

		$where = '';
		$expires = 'NULL';

		if (!empty($transaction['duree']))
		{
			// On récupère les paiement dans les X jours précédant aujourd'hui
			$where = 'AND date >= date(\'now\', \'-' . (int)$transaction['duree'] . ' days\')';
			$expires = 'date(date, \'+' . (int)$transaction['duree'] . ' days\')';
		}
		elseif (!empty($transaction['debut']))
		{
			$expires = '\'' . $transaction['fin'] . '\'';
		}

		$res = $db->simpleQuerySingle('SELECT ' . $expires . ' AS expiration, SUM(montant) AS total
			FROM membres_transactions
			WHERE id_transaction = ? AND id_membre = ? ' . $where . ' 
			GROUP BY id_transaction
			ORDER BY date DESC LIMIT 1;',
			true, (int)$transaction['id'], (int)$id);


		// Pas de paiement trouvé : cotisation renouvelable expirée, ou pas de paiement fait
		// donc cotisation pas à jour
		if ($res === false)
		{
			return false;
		}

		// Pas assez payé !
		if ($res['total'] < $transaction['montant'])
		{
			return -1;
		}

		// Paiement suffisant, on renvoie la date d'expiration
		// enfin sauf si cotisation ponctuelle, auquel cas on renvoie juste true
		return $res['expiration'] ?: true;
	}

	public function countForMember($id)
	{
		$db = DB::getInstance();
		return $db->simpleQuerySingle('SELECT COUNT(*) FROM membres_transactions 
			WHERE id_membre = ?;', false, (int)$id);
	}
}

Modified src/templates/admin/membres/fiche.tpl from [8e21378dab] to [6003d7eb06].

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
..
21
22
23
24
25
26
27
28
29
30
31
32
33

34
35
36
37
38
39
40
41
42
43
44
45
46

47
48
49
50
51
52
53
54

<ul class="actions">
    <li class="current"><a href="{$admin_url}membres/fiche.php?id={$membre.id|escape}">Membre n°{$membre.id|escape}</a></li>
    <li><a href="{$admin_url}membres/modifier.php?id={$membre.id|escape}">Modifier</a></li>
    {if $user.droits.membres >= Garradin\Membres::DROIT_ADMIN}
        <li><a href="{$admin_url}membres/supprimer.php?id={$membre.id|escape}">Supprimer</a></li>
    {/if}
    <li><a href="{$admin_url}membres/transactions/membre.php?id={$membre.id|escape}">Suivi des paiements</a></li>
    <li><a href="{$admin_url}membres/transactions/ajout.php?id={$membre.id|escape}">Enregistrer un paiement</a></li>
</ul>

<dl class="cotisation">
{if $cotisation}
    <dt>Cotisation obligatoire</dt>
    <dd>{$cotisation.intitule|escape} — 
................................................................................
        {else}
            ponctuelle
        {/if}
        — {$cotisation.montant|escape_money} {$config.monnaie|escape}
    </dd>
    <dt>À jour de cotisation ?</dt>
    <dd>
        {if !$statut_cotisation}
            <span class="error"><b>Non</b>, cotisation non payée ou expirée</span>
        {elseif $statut_cotisation == -1}
            <span class="alert"><b>Non</b>, cotisation payée partiellement</span>
        {else}
            <span class="confirm"><b>Oui</b>, cotisation à jour</span>

        {/if}
    </dd>
{/if}
    <dt>Paiements</dt>
    <dd>
        {if $nb_paiements == 1}
            {$nb_paiements|escape} paiement enregistré
        {elseif $nb_paiements}
            {$nb_paiements|escape} paiements enregistrés
        {else}
            Aucun paiement enregistré
        {/if} 
        — <a href="{$admin_url}transactions/membre.php?id={$membre.id|escape}">Voir l'historique</a></dd>

    <dd><form method="get" action="{$admin_url}transactions/ajout.php"><input type="submit" value="Enregistrer un paiement &rarr;" /></form></dd>
</dl>

<dl class="describe">
    <dt>Numéro d'adhérent</dt>
    <dd>{$membre.id|escape}</dd>
    {foreach from=$champs key="c" item="config"}
    <dt>{$config.title|escape}</dt>







|







 







|

|



>












|
>
|







2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
..
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

<ul class="actions">
    <li class="current"><a href="{$admin_url}membres/fiche.php?id={$membre.id|escape}">Membre n°{$membre.id|escape}</a></li>
    <li><a href="{$admin_url}membres/modifier.php?id={$membre.id|escape}">Modifier</a></li>
    {if $user.droits.membres >= Garradin\Membres::DROIT_ADMIN}
        <li><a href="{$admin_url}membres/supprimer.php?id={$membre.id|escape}">Supprimer</a></li>
    {/if}
    <li><a href="{$admin_url}membres/transactions.php?id={$membre.id|escape}">Suivi des paiements</a></li>
    <li><a href="{$admin_url}membres/transactions/ajout.php?id={$membre.id|escape}">Enregistrer un paiement</a></li>
</ul>

<dl class="cotisation">
{if $cotisation}
    <dt>Cotisation obligatoire</dt>
    <dd>{$cotisation.intitule|escape} — 
................................................................................
        {else}
            ponctuelle
        {/if}
        — {$cotisation.montant|escape_money} {$config.monnaie|escape}
    </dd>
    <dt>À jour de cotisation ?</dt>
    <dd>
        {if $statut_cotisation === false}
            <span class="error"><b>Non</b>, cotisation non payée ou expirée</span>
        {elseif $statut_cotisation === -1}
            <span class="alert"><b>Non</b>, cotisation payée partiellement</span>
        {else}
            <span class="confirm"><b>Oui</b>, cotisation à jour</span>
            {if $statut_cotisation !== true}(expire le {$statut_cotisation|format_sqlite_date_to_french}){/if}
        {/if}
    </dd>
{/if}
    <dt>Paiements</dt>
    <dd>
        {if $nb_paiements == 1}
            {$nb_paiements|escape} paiement enregistré
        {elseif $nb_paiements}
            {$nb_paiements|escape} paiements enregistrés
        {else}
            Aucun paiement enregistré
        {/if} 
        — <a href="{$admin_url}membres/transactions.php?id={$membre.id|escape}">Voir l'historique</a>
    </dd>
    <dd><form method="get" action="{$admin_url}membres/transactions/ajout.php"><input type="submit" value="Enregistrer un paiement &rarr;" /><input type="hidden" name="id" value="{$membre.id|escape}" /></form></dd>
</dl>

<dl class="describe">
    <dt>Numéro d'adhérent</dt>
    <dd>{$membre.id|escape}</dd>
    {foreach from=$champs key="c" item="config"}
    <dt>{$config.title|escape}</dt>

Modified src/templates/admin/membres/modifier.tpl from [218becfe54] to [ef4c16dc15].

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<ul class="actions">
    <li><a href="{$admin_url}membres/fiche.php?id={$membre.id|escape}">Membre n°{$membre.id|escape}</a></li>
    <li class="current"><a href="{$admin_url}membres/modifier.php?id={$membre.id|escape}">Modifier</a></li>
    {if $user.droits.membres >= Garradin\Membres::DROIT_ADMIN}
        <li><a href="{$admin_url}membres/supprimer.php?id={$membre.id|escape}">Supprimer</a></li>
    {/if}
    <li><a href="{$admin_url}membres/transactions/membre.php?id={$membre.id|escape}">Suivi des paiements</a></li>
    <li><a href="{$admin_url}membres/transactions/ajout.php?id={$membre.id|escape}">Enregistrer un paiement</a></li>
</ul>

{if $error}
    <p class="error">
        {$error|escape}
    </p>







|







2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<ul class="actions">
    <li><a href="{$admin_url}membres/fiche.php?id={$membre.id|escape}">Membre n°{$membre.id|escape}</a></li>
    <li class="current"><a href="{$admin_url}membres/modifier.php?id={$membre.id|escape}">Modifier</a></li>
    {if $user.droits.membres >= Garradin\Membres::DROIT_ADMIN}
        <li><a href="{$admin_url}membres/supprimer.php?id={$membre.id|escape}">Supprimer</a></li>
    {/if}
    <li><a href="{$admin_url}membres/transactions.php?id={$membre.id|escape}">Suivi des paiements</a></li>
    <li><a href="{$admin_url}membres/transactions/ajout.php?id={$membre.id|escape}">Enregistrer un paiement</a></li>
</ul>

{if $error}
    <p class="error">
        {$error|escape}
    </p>

Modified src/templates/admin/membres/supprimer.tpl from [f104bccba0] to [d5624b1e42].

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<ul class="actions">
    <li><a href="{$admin_url}membres/fiche.php?id={$membre.id|escape}">Membre n°{$membre.id|escape}</a></li>
    <li><a href="{$admin_url}membres/modifier.php?id={$membre.id|escape}">Modifier</a></li>
    {if $user.droits.membres >= Garradin\Membres::DROIT_ADMIN}
        <li class="current"><a href="{$admin_url}membres/supprimer.php?id={$membre.id|escape}">Supprimer</a></li>
    {/if}
    <li><a href="{$admin_url}membres/transactions/membre.php?id={$membre.id|escape}">Suivi des paiements</a></li>
    <li><a href="{$admin_url}membres/transactions/ajout.php?id={$membre.id|escape}">Enregistrer un paiement</a></li>
</ul>

{if $error}
    <p class="error">
        {$error|escape}
    </p>







|







2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<ul class="actions">
    <li><a href="{$admin_url}membres/fiche.php?id={$membre.id|escape}">Membre n°{$membre.id|escape}</a></li>
    <li><a href="{$admin_url}membres/modifier.php?id={$membre.id|escape}">Modifier</a></li>
    {if $user.droits.membres >= Garradin\Membres::DROIT_ADMIN}
        <li class="current"><a href="{$admin_url}membres/supprimer.php?id={$membre.id|escape}">Supprimer</a></li>
    {/if}
    <li><a href="{$admin_url}membres/transactions.php?id={$membre.id|escape}">Suivi des paiements</a></li>
    <li><a href="{$admin_url}membres/transactions/ajout.php?id={$membre.id|escape}">Enregistrer un paiement</a></li>
</ul>

{if $error}
    <p class="error">
        {$error|escape}
    </p>

Added src/templates/admin/membres/transactions.tpl version [b622edff24].



































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
{include file="admin/_head.tpl" title="Suivi des paiements membre n°`$membre.id`" current="membres/transactions"}

<ul class="actions">
    <li><a href="{$admin_url}membres/fiche.php?id={$membre.id|escape}">Membre n°{$membre.id|escape}</a></li>
    <li><a href="{$admin_url}membres/modifier.php?id={$membre.id|escape}">Modifier</a></li>
    {if $user.droits.membres >= Garradin\Membres::DROIT_ADMIN}
        <li><a href="{$admin_url}membres/supprimer.php?id={$membre.id|escape}">Supprimer</a></li>
    {/if}
    <li class="current"><a href="{$admin_url}membres/transactions.php?id={$membre.id|escape}">Suivi des paiements</a></li>
    <li><a href="{$admin_url}membres/transactions/ajout.php?id={$membre.id|escape}">Enregistrer un paiement</a></li>
</ul>

<dl class="cotisation">
{if $cotisation}
    <dt>Cotisation obligatoire</dt>
    <dd>{$cotisation.intitule|escape} — 
        {if $cotisation.duree}
            {$cotisation.duree|escape} jours
        {elseif $cotisation.debut}
            du {$cotisation.debut|format_sqlite_date_to_french} au {$cotisation.fin|format_sqlite_date_to_french}
        {else}
            ponctuelle
        {/if}
        — {$cotisation.montant|escape_money} {$config.monnaie|escape}
    </dd>
    <dt>À jour de cotisation ?</dt>
    <dd>
        {if $statut_cotisation === false}
            <span class="error"><b>Non</b>, cotisation non payée ou expirée</span>
        {elseif $statut_cotisation === -1}
            <span class="alert"><b>Non</b>, cotisation payée partiellement</span>
        {else}
            <span class="confirm"><b>Oui</b>, cotisation à jour</span>
            {if $statut_cotisation !== true}(expire le {$statut_cotisation|format_sqlite_date_to_french}){/if}
        {/if}
    </dd>
{/if}
    <dt>Paiements</dt>
    <dd>
        {if $nb_paiements == 1}
            {$nb_paiements|escape} paiement enregistré
        {elseif $nb_paiements}
            {$nb_paiements|escape} paiements enregistrés
        {else}
            Aucun paiement enregistré
        {/if} 
    </dd>
    <dd><form method="get" action="{$admin_url}membres/transactions/ajout.php"><input type="submit" value="Enregistrer un paiement &rarr;" /><input type="hidden" name="id" value="{$membre.id|escape}" /></form></dd>
</dl>

<table class="list">
    <thead>
        <th>Date</th>
        <td width="30%">Intitulé</td>
        <td>Montant</td>
        <td>Activité ou cotisation liée</td>
        <td class="actions"></td>
    </thead>
    <tbody>
        {foreach from=$paiements item="p"}
            <tr>
                <td>{$p.date|format_sqlite_date_to_french}</td>
                <td>{$p.libelle|escape}</td>
                <td class="num">{$p.montant|html_money} {$config.monnaie|escape}</td>
                <td>
                    {if $p.id_transaction}
                        FiXME
                    {else}
                        <em>Aucune</em>
                    {/if}
                </td>
                <td class="actions">
                    <a href="{$admin_url}membres/transactions/modifier.php?id={$p.id|escape}">Modifier</a>
                    | <a href="{$admin_url}membres/transactions/supprimer.php?id={$p.id|escape}">Supprimer</a>
                </td>
            </tr>
        {/foreach}
    </tbody>
</table>

{include file="admin/_foot.tpl"}

Added src/www/admin/membres/transactions.php version [aeb7c1fd11].









































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
namespace Garradin;

require_once __DIR__ . '/../_inc.php';

if ($user['droits']['membres'] < Membres::DROIT_ECRITURE)
{
    throw new UserException("Vous n'avez pas le droit d'accéder à cette page.");
}

if (empty($_GET['id']) || !is_numeric($_GET['id']))
{
    throw new UserException("Argument du numéro de membre manquant.");
}

$id = (int) $_GET['id'];

$membre = $membres->get($id);

if (!$membre)
{
    throw new UserException("Ce membre n'existe pas.");
}

$cats = new Membres_Categories;

$categorie = $cats->get($membre['id_categorie']);
$tpl->assign('categorie', $categorie);

$m_transactions = new Membres_Transactions;

if (!empty($categorie['id_transaction_obligatoire']))
{
	$transactions = new Transactions;
	$tr = $transactions->get($categorie['id_transaction_obligatoire']);

	$tpl->assign('cotisation', $tr);
	$tpl->assign('statut_cotisation', $m_transactions->isMemberUpToDate($membre['id'], $tr));
}
else
{
	$tpl->assign('cotisation', false);
}

$tpl->assign('nb_paiements', $m_transactions->countForMember($membre['id']));
$tpl->assign('paiements', $m_transactions->listForMember($membre['id']));

$tpl->assign('membre', $membre);

$tpl->display('admin/membres/transactions.tpl');

?>