Overview
Comment:objets rappels
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 900b4185b0cd9b39eaa6a6091f741794dc74119f
User & Date: bohwaz on 2014-02-20 20:14:06
Other Links: manifest | tags
Context
2014-03-13
13:20
Ne pas accepter l'absence de l'entête check-in: f95890dd0f user: bohwaz tags: trunk
2014-02-20
20:14
objets rappels check-in: 900b4185b0 user: bohwaz tags: trunk
16:42
amélioration présentation des cotisations perso check-in: 9067ae1041 user: bohwaz tags: trunk
Changes

Modified src/include/class.cotisations_membres.php from [e3d1b4c321] to [9f020b3272].

    22     22   
    23     23   		if (empty($data['id_cotisation']) 
    24     24   			|| !$db->simpleQuerySingle('SELECT 1 FROM cotisations WHERE id = ?;', false, (int) $data['id_cotisation']))
    25     25   		{
    26     26   			throw new UserException('Cotisation inconnue.');
    27     27   		}
    28     28   
    29         -		$data['id_cotisation'] = $data['id_cotisation'] ? (int) $data['id_cotisation'] : null;
           29  +		$data['id_cotisation'] = (int) $data['id_cotisation'];
    30     30   
    31     31   		if (empty($data['id_membre']) 
    32     32   			|| !$db->simpleQuerySingle('SELECT 1 FROM membres WHERE id = ?;', false, (int) $data['id_membre']))
    33     33   		{
    34     34   			throw new UserException('Membre inconnu ou invalide.');
    35     35   		}
    36     36   
................................................................................
    44     44   	 */
    45     45   	public function add($data)
    46     46   	{
    47     47   		$db = DB::getInstance();
    48     48   
    49     49   		$this->_checkFields($data);
    50     50   
    51         -		if (empty($data['id_membre']))
    52         -		{
    53         -			throw new UserException('Membre inconnu ou invalide.');
    54         -		}
    55         -
    56     51   		$db->exec('BEGIN;');
    57     52   
    58     53   		$db->simpleInsert('cotisations_membres', [
    59     54   			'date'				=>	$data['date'],
    60     55   			'id_cotisation'		=>	$data['id_cotisation'],
    61     56   			'id_membre'			=>	$data['id_membre'],
    62     57   			]);
................................................................................
    98     93   	 * Supprimer un événement de cotisation
    99     94   	 * @param  integer $id ID de l'événement à supprimer
   100     95   	 * @return integer true en cas de succès
   101     96   	 */
   102     97   	public function delete($id)
   103     98   	{
   104     99   		$db = DB::getInstance();
   105         -
   106    100   		return $db->simpleExec('DELETE FROM cotisations_membres WHERE id = ?;', (int) $id);
   107    101   	}
   108    102   
   109    103   	public function get($id)
   110    104   	{
   111    105   		$db = DB::getInstance();
   112    106   		return $db->simpleQuerySingle('SELECT * FROM cotisations_membres WHERE id = ?;', true, (int)$id);

Added src/include/class.rappels.php version [7ec6d812eb].

            1  +<?php
            2  +
            3  +namespace Garradin;
            4  +
            5  +class Rappels
            6  +{
            7  +	/**
            8  +	 * Vérification des champs fournis pour la modification de donnée
            9  +	 * @param  array $data Tableau contenant les champs à ajouter/modifier
           10  +	 * @return void
           11  +	 */
           12  +	protected function _checkFields(&$data)
           13  +	{
           14  +		$db = DB::getInstance();
           15  +
           16  +        if (empty($data['id_cotisation'])
           17  +        	|| !$db->simpleQuerySingle('SELECT 1 FROM cotisations WHERE id = ?;', false, (int) $data['id_cotisation']))
           18  +        {
           19  +            throw new UserException('Cotisation inconnue.');
           20  +        }
           21  +
           22  +		$data['id_cotisation'] = (int) $data['id_cotisation'];
           23  +
           24  +		if (empty($data['delai']) || !is_numeric($data['delai']) || (int)$data['delai'] < 0)
           25  +		{
           26  +			throw new UserException('Délai avant rappel invalide : doit être indiqué en nombre de jours.');
           27  +		}
           28  +
           29  +		$data['delai'] = (int) $data['delai'];
           30  +
           31  +		if (!isset($data['sujet']) || trim($data['sujet']) === '')
           32  +		{
           33  +			throw new UserException('Le sujet du rappel ne peut être vide.');
           34  +		}
           35  +
           36  +		$data['sujet'] = trim($data['sujet']);
           37  +
           38  +		if (!isset($data['texte']) || trim($data['texte']) === '')
           39  +		{
           40  +			throw new UserException('Le contenu du rappel ne peut être vide.');
           41  +		}
           42  +
           43  +		$data['texte'] = trim($data['texte']);
           44  +	}
           45  +
           46  +	/**
           47  +	 * Ajouter un rappel
           48  +	 * @param array $data Données du rappel
           49  +	 * @return integer Numéro ID du rappel créé
           50  +	 */
           51  +	public function add($data)
           52  +	{
           53  +		$db = DB::getInstance();
           54  +
           55  +		$this->_checkFields($data);
           56  +
           57  +		$db->simpleInsert('rappels', $data);
           58  +
           59  +		return $db->lastInsertRowId();
           60  +	}
           61  +
           62  +	/**
           63  +	 * Modifier un rappel automatique
           64  +	 * @param  integer 	$id   Numéro du rappel
           65  +	 * @param  array 	$data Données du rappel
           66  +	 * @return boolean        TRUE si tout s'est bien passé
           67  +	 * @throws UserException  En cas d'erreur dans une donnée à modifier
           68  +	 */
           69  +	public function edit($id, $data)
           70  +	{
           71  +		$db = DB::getInstance();
           72  +
           73  +		$this->_checkFields($data);
           74  +
           75  +		return $db->simpleUpdate('rappels', $data, 'id = ' . (int)$id);
           76  +	}
           77  +
           78  +	/**
           79  +	 * Supprimer un rappel automatique
           80  +	 * @param  integer $id Numéro du rappel
           81  +	 * @return boolean     TRUE en cas de succès
           82  +	 */
           83  +	public function delete($id)
           84  +	{
           85  +		$db = DB::getInstance();
           86  +
           87  +		$db->exec('BEGIN;');
           88  +		$db->simpleExec('DELETE FROM rappels WHERE id = ?;', (int) $id);
           89  +		$db->simpleExec('DELETE FROM rappels_envoyes WHERE id_rappel = ?;', (int) $id);
           90  +		$db->exec('END;');
           91  +
           92  +		return true;
           93  +	}
           94  +
           95  +	/**
           96  +	 * Renvoie les données sur un rappel
           97  +	 * @param  integer $id Numéro du rappel
           98  +	 * @return array     Données du rappel
           99  +	 */
          100  +	public function get($id)
          101  +	{
          102  +		return DB::getInstance()->simpleQuerySingle('SELECT * FROM rappels WHERE id = ?;', true, (int)$id);
          103  +	}
          104  +
          105  +	/**
          106  +	 * Liste des rappels triés par cotisation
          107  +	 * @return array Liste des rappels
          108  +	 */
          109  +	public function listByCotisation()
          110  +	{
          111  +		return DB::getInstance()->simpleStatementFetch('SELECT r.*, c.intitule FROM rappels AS r
          112  +			INNER JOIN cotisations ON c.id = r.id_cotisation ORDER BY r.id_cotisation, r.delai, r.sujet;');
          113  +	}
          114  +
          115  +	/**
          116  +	 * Liste des rappels pour une cotisation donnée
          117  +	 * @param  integer $id Numéro du rappel
          118  +	 * @return array     Liste des rappels
          119  +	 */
          120  +	public function listForCotisation($id)
          121  +	{
          122  +		return DB::getInstance()->simpleStatementFetch('SELECT * FROM rappels 
          123  +			WHERE id_cotisation = ? ORDER BY delai, sujet;', \SQLITE3_ASSOC, (int)$id);
          124  +	}
          125  +}

Added src/include/class.rappels_envoyes.php version [30a92f9841].

            1  +<?php
            2  +
            3  +namespace Garradin;
            4  +
            5  +class Rappels_Envoyes
            6  +{
            7  +	const MEDIA_EMAIL = 1;
            8  +	const MEDIA_COURRIER = 2;
            9  +	const MEDIA_TELEPHONE = 3;
           10  +	const MEDIA_AUTRE = 4;
           11  +
           12  +	/**
           13  +	 * Vérification des champs fournis pour la modification de donnée
           14  +	 * @param  array $data Tableau contenant les champs à ajouter/modifier
           15  +	 * @return void
           16  +	 */
           17  +	protected function _checkFields(&$data)
           18  +	{
           19  +		$db = DB::getInstance();
           20  +
           21  +        if (isset($data['id_cotisation']))
           22  +        {
           23  +        	if (!$db->simpleQuerySingle('SELECT 1 FROM cotisations WHERE id = ?;', false, (int) $data['id_cotisation']))
           24  +	        {
           25  +	            throw new UserException('Cotisation inconnue.');
           26  +	        }
           27  +
           28  +	        $data['id_cotisation'] = (int) $data['id_cotisation'];
           29  +	    }
           30  +
           31  +        if (empty($data['id_membre'])
           32  +        	|| !$db->simpleQuerySingle('SELECT 1 FROM membres WHERE id = ?;', false, (int) $data['id_membre']))
           33  +        {
           34  +            throw new UserException('Membre inconnu.');
           35  +        }
           36  +
           37  +		$data['id_membre'] = (int) $data['id_membre'];
           38  +
           39  +		if (empty($data['media']) || !is_numeric($data['delai']) 
           40  +			|| !in_array((int)$data['media'], [self::MEDIA_EMAIL, self::MEDIA_COURRIER, self::MEDIA_TELEPHONE, self::MEDIA_AUTRE]))
           41  +		{
           42  +			throw new UserException('Média invalide.');
           43  +		}
           44  +
           45  +		$data['media'] = (int) $data['media'];
           46  +
           47  +		if (empty($data['date']) || !utils::checkDate($data['date']))
           48  +		{
           49  +			throw new UserException('La date indiquée n\'est pas valide.');
           50  +		}
           51  +	}
           52  +
           53  +	/**
           54  +	 * Enregistrer un rappel
           55  +	 * @param array $data Données du rappel
           56  +	 * @return integer Numéro ID du rappel créé
           57  +	 */
           58  +	public function add($data)
           59  +	{
           60  +		$db = DB::getInstance();
           61  +
           62  +		$this->_checkFields($data);
           63  +
           64  +		$db->simpleInsert('rappels_envoyes', $data);
           65  +
           66  +		return $db->lastInsertRowId();
           67  +	}
           68  +
           69  +	/**
           70  +	 * Supprimer un rappel enregistré
           71  +	 * @param  integer $id Numéro du rappel
           72  +	 * @return boolean     TRUE en cas de succès
           73  +	 */
           74  +	public function delete($id)
           75  +	{
           76  +		$db = DB::getInstance();
           77  +		$db->simpleExec('DELETE FROM rappels_envoyes WHERE id = ?;', (int) $id);
           78  +		return true;
           79  +	}
           80  +
           81  +	/**
           82  +	 * Renvoie les données sur un rappel
           83  +	 * @param  integer $id Numéro du rappel
           84  +	 * @return array     Données du rappel
           85  +	 */
           86  +	public function get($id)
           87  +	{
           88  +		return DB::getInstance()->simpleQuerySingle('SELECT * FROM rappels_envoyes WHERE id = ?;', true, (int)$id);
           89  +	}
           90  +
           91  +	/**
           92  +	 * Liste des rappels envoyés à un membre
           93  +	 * @param integer $id Numéro du membre
           94  +	 * @return array Liste des rappels
           95  +	 */
           96  +	public function listForMember($id)
           97  +	{
           98  +		return DB::getInstance()->simpleStatementFetch('SELECT re.*, r.id_cotisation, r.delai, c.intitule
           99  +			FROM rappels_envoyes AS re INNER JOIN rappels AS r ON r.id = re.id_rappel
          100  +			INNER JOIN cotisations ON c.id = r.id_cotisation 
          101  +			WHERE re.id_membre = ?
          102  +			ORDER BY re.date DESC;', \SQLITE3_ASSOC, (int)$id);
          103  +	}
          104  +
          105  +	/**
          106  +	 * Liste des rappels pour une cotisation donnée
          107  +	 * @param  integer $id Numéro du rappel
          108  +	 * @return array     Liste des rappels
          109  +	 */
          110  +	public function listForCotisation($id)
          111  +	{
          112  +		return DB::getInstance()->simpleStatementFetch('SELECT * FROM rappels_envoyes
          113  +			WHERE id_rappel = ? ORDER BY date DESC;', \SQLITE3_ASSOC, (int)$id);
          114  +	}
          115  +}

Modified src/include/data/0.6.0.sql from [eec09ed1bd] to [911a09f791].

    46     46       sujet TEXT NOT NULL,
    47     47       texte TEXT NOT NULL
    48     48   );
    49     49   
    50     50   CREATE TABLE rappels_envoyes
    51     51   -- Enregistrement des rappels envoyés à qui et quand
    52     52   (
           53  +    id INTEGER NOT NULL PRIMARY KEY,
           54  +
    53     55       id_membre INTEGER NOT NULL REFERENCES membres (id),
    54         -    id_rappel INTEGER NOT NULL REFERENCES rappels (id),
           56  +    id_rappel INTEGER NULL REFERENCES rappels (id),
    55     57       date TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
    56         -    media INTEGER NOT NULL, -- Média utilisé pour le rappel : 1 = email, 2 = courrier, 3 = autre
    57         -    
    58         -    PRIMARY KEY(id_membre, id_rappel, date)
           58  +    media INTEGER NOT NULL -- Média utilisé pour le rappel : 1 = email, 2 = courrier, 3 = autre
    59     59   );
    60     60   
    61     61   -- Mise à jour des catégories
    62     62   
    63     63   CREATE TABLE membres_categories_tmp
    64     64   -- Catégories de membres
    65     65   (

Modified src/templates/admin/membres/cotisations/index.tpl from [daf245b8b2] to [c3da931d0f].

     1      1   {include file="admin/_head.tpl" title="Cotisations" current="membres/cotisations" js=1}
     2      2   
     3      3   <ul class="actions">
     4      4       <li class="current"><a href="{$admin_url}membres/cotisations/">Cotisations</a></li>
     5      5       <li><a href="{$admin_url}membres/cotisations/ajout.php">Saisie d'une cotisation</a></li>
     6      6       <li><a href="{$admin_url}membres/cotisations/rappels.php">État des rappels</a></li>
     7         -    <li><a href="{$admin_url}membres/cotisations/gestion/rappels.php">Gestion des rappels</a></li>
            7  +    {if $user.droits.membres >= Garradin\Membres::DROIT_ADMIN}
            8  +        <li><a href="{$admin_url}membres/cotisations/gestion/rappels.php">Gestion des rappels automatiques</a></li>
            9  +    {/if}
     8     10   </ul>
     9     11   
    10     12   <table class="list">
    11     13       <thead>
    12     14           <th>Cotisation</th>
    13     15           <td>Période</td>
    14     16           <td>Montant</td>