• Aucun résultat trouvé

Cahier des charges

N/A
N/A
Protected

Academic year: 2022

Partager "Cahier des charges"

Copied!
9
0
0

Texte intégral

(1)

1 Association et donateurs

Cahier des charges Première partie

Une association reçoit des dons de donateurs privés.

Pour chaque don, l’association enregistre la date du don, son montant ainsi que le nom et l’adresse du donateur, le téléphone et l’adresse mail si possible. Les dons ont un numéro identifiant qui les distingue les uns des autres.

L’association veut pouvoir afficher en permanence la liste des donateurs avec leur ancienneté (l’année de leur premier don), le total de dons effectués, la moyenne du nombre de dons effectué par an, la moyenne du total des montants donnés par an, le nombre de dons effectués pour l’année en cours et le montant total des dons effectués pour l’année en cours.

Deuxième partie

Vers le mois de février, l’association envoie des reçus fiscaux aux donateurs de l’année. On conserve la date d’envoi du reçu. Les reçus fiscaux concernent uniquement les dons de l’année précédente. Ils précisent le nom et l’adresse du donateur, l’année fiscale (qui correspond à l’année du don), le montant et la date du don. Si un même donateur fait plusieurs dons dans l’année, il reçoit un reçu par don. Si on doit renvoyer le reçu une deuxième fois (le donaiteur appelle pour dire qu’il ne l’a pas reçu), on ne change pas les données dans la BD et on renvoit un reçu identique.

Pour les reçus fiscaux, l’association veut pouvoir, avant d’envoyer les reçus pour l’année

précédente, lister les donateurs avec le nombre de dons de l’année précédente, le montant total des dons et la liste des dons avec le numéro, le montant et la date (pour cette liste, MySQL offre la fonction « group-concat » qui permet de lister dans un attribut la liste des tuples regroupés par un group by).

Troisième partie

L’association envoie des courriers aux donateurs pour les solliciter. Un courrier est caractérisé par un libellé (un titre), une date d’envoi et son texte. Plusieurs mailings différents peuvent être envoyés à la même date. Il arrive que plusieurs courriers aient le même titre sans avoir le même texte. Un don peut faire référence à un courrier ou pas. Pour chaque courrier, on connaît le montant total des dons qui s’y rapporte.

Quatrième partie (variante de la deuxième).

La gestion des reçus fiscale a changé : l’administration fiscale demande à avoir un reçu par an et par donateur avec la liste des dons (montant et date), le nombre total de dons et le total des dons. Elle demande aussi que chaque reçu ait un numéro identifiant.

L’association envoie ce reçu vers le mois de février et enregistre la date d’envoi. Si on doit renvoyer le reçu une deuxième fois (le donateur appelle pour dire qu’il ne l’a pas reçu), on ne change pas les données dans la BD et on renvoie un reçu identique.

Modifier le modèle issu de la deuxième partie pour arriver à une solution.

Travail à faire

MEA et/ou UML, MR, GT, MR valorisé, Données, SQL.

(2)

MCD-MEA

(3)

MCD-UML – v1

MCD-UML – v2

(4)

MR graphique

MR textuel

M M-E M-E M-E NO-M NO-M Donateurs(NP, nom, adresse, CP, ville, pays, mail , téléphone) NO NO

Dons(ND, montant, dateDon, dateReçu, #NP, #NC) Courriers(NC, libellé, texte, dateEnvoi)

Recevoir(#NC, #NP) Valorisation

On précise pour chaque attribut : s’il n’est pas obligatoire : NO s’il est unique : U

s’il est modifiable : Modifiable normalement – MA : modifiable en mode administrateur si c’est un énuméré : E

Graphe des tables

(5)

Alternative à la deuxième partie

On sort l’attribut dateEnvoiRecu de la table des dons et on crée une table des ReçusParDon Dons (ND, montant, date, #NP, #NC)

ReçusParDon(NR, dateEnvoiRecu, #ND) ou mieux : ReçusParDon (#ND, dateEnvoiRecu) Le NR n’est pas utile : la clé de ReçusParDon peut être #ND

Cette alternative n’est pas très intéressante : mieux vaut la première solution : l’attribut dateEnvoiRecu dans la table des dons.

Alternative correspondant la quatrième partie

On considère qu’un reçu est un reçu global pour tous les dons de l’année d’un donateur.

On a donc une table des reçus globaux.

L’attribut dateEnvoiRecu sort de la table des dons et se retrouve dans la table des reçus globaux.

Dons (ND, montant, date, #NP, #NC)

ReçusGlobaux(NR, anneeFiscale, dateEnvoiRecu, #NP)

Le reçus global fait référence à la personne : ainsi on accède à la liste des dons pour l’année fiscale concernée.

(6)

SQL

/*==============================================================*/

/* DBMS name: MySQL 5.0 */

/* Created on: 08/02/2019 14:21:18 */

/*==============================================================*/

drop table if exists COURRIERS;

drop table if exists DONS;

drop table if exists PERSONNES;

drop table if exists RECEVOIR;

/*==============================================================*/

/* Table: COURRIERS */

/*==============================================================*/

create table COURRIERS

( NC int not null,

LIBELLE varchar(20) not null, TEXTE text not null,

DATEENVOI date not null, primary key (NC)

);

/*==============================================================*/

/* Table: DONS */

/*==============================================================*/

create table DONS

( ND int not null, NC int,

NUM_DONAT int not null,

MONTANT decimal(7,2) not null, DATEDON date not null,

DATERECU date, primary key (ND)

);

/*==============================================================*/

/* Table: PERSONNES */

/*==============================================================*/

create table PERSONNES

( NUM_DONAT int not null, NOM char(20) not null, ADESSE char(20) not null, CP char(20) not null, VILLE char(20) not null, PAYS char(20) not null, MAIL char(20),

TELEPHONE int, primary key (NUM_DONAT) );

/*==============================================================*/

/* Table: RECEVOIR */

/*==============================================================*/

(7)

NC int not null, primary key (NUM_DONAT, NC)

);

alter table DONS add constraint FK_DONNE foreign key (NUM_DONAT) references PERSONNES (NUM_DONAT)

on delete restrict on update restrict;

alter table DONS add constraint FK_FAIT_REFERENCE_A foreign key (NC) references COURRIERS (NC)

on delete restrict on update restrict;

alter table RECEVOIR add constraint FK_RECEVOIR foreign key (NUM_DONAT) references PERSONNES (NUM_DONAT)

on delete restrict on update restrict;

alter table RECEVOIR add constraint FK_RECEVOIR2 foreign key (NC) references COURRIERS (NC)

on delete restrict on update restrict;

REMARQUES

Alter pour les clés étrangères

A noter que les clés étrangères sont toutes ajoutées après la création des tables avec un ALTER.

On delete restrict et on update restrict pour l’intégrité référentielle A noter les « on delete restrict on update restrict ».

C’est une façon de gérer l’intégrité référentielle si on est en MyISAM. Le delete ou l’update de la CP d’un tuple utilisé ailleurs sera impossible.

Avec un moteur InnoDB, cela ne sert à rien.

(8)

Requêtes SQL

L’association veut pouvoir afficher en permanence la liste des donateurs avec leur ancienneté (l’année de leur premier don), le total de dons effectués, la moyenne du nombre de dons effectué par an, la moyenne du total des montants donnés par an, le nombre de dons effectués pour l’année en cours et le montant total des dons effectués pour l’année en cours.

Select p.np, p.nom,

min(year(d.dateDon)) ancienneté, sum(d.montant) total_dons,

bAnnuel.moyNbDonsParAn bAnnuel.moySommeDonsParAn bEncours.nbDonsAnneeEnCours bEncours.sommeDonsAnneeEnCours From donateurs p

Join dons d on p.np=d.np

Join bilanAnnuelParDonateur bAnnuel on p.np= bAnnuel.np

Join bilanAnneeEnCoursParDonateur bEncours on p.np= bEncours.np Group by p.np, p.nom ;

Create view bilanAnnuelParDonateur as Select tab.np, tab.nom,

avg(nbDonsParAn) moyNbDonsParAn, avg(sommeDonsParAn) moySommeDonsParAn From (

Select p.np, p.nom, year(d.dateDon),

count(*) nbDonsParAn, sum(d.montant) sommeDonsParAn From donateurs p

Join dons d on p.np=d.np

Group by p.np, p.nom, year(d.dateDon) ) as tab

Create view bilanAnneeEnCoursParDonateur as Select p.np, p.nom,

count(*) nbDonsAnneeEnCours,

sum(d.montant) sommeDonsAnneeEnCours From donateurs p

Join dons d on p.np=d.np

Where year(d.dateDon)=year(current_date()) Group by p.np, p.nom ;

Pour les reçus fiscaux, l’association veut pouvoir, avant d’envoyer les reçus pour l’année

précédente, lister les donateurs avec le nombre de dons de l’année précédente, le montant total des dons et la liste des dons avec le numéro, le montant et la date (pour cette liste, MySQL offre la fonction « group-concat » qui permet de lister dans un attribut la liste des tuples regroupés par un group by).

Select p.np, p.nom, count(*)nb_dons,

sum(d.montant) total_dons,

group_concat(d.nd, d.montant, d.dateDon order by d.dateDon) From donateurs p

Join dons d on p.np=d.np

Where year(d.dateDon)=year(current_date())-1 Group by p.np, p.nom

(9)

Jeu de données : à finir !!!

Pour le jeu de données, on travaille sur 2 années : l’année en cours (année n) pour laquelle il n’y a pas eu de reçu fiscaux et l’année précédente pour laquelle il y a eu des reçus fiscaux. On se dote d’au moins 4 donateurs : 3 sur l’année n dont 2 déjà présent à l’année n-1 et 3 sur l’année n-1 (dont 2 retrouvés sur l’année n). 1 donateur de l’année n-1 à fait plus de 1 don.

Donateurs( NP, nom, adresse, CP, ville, pays, mail , téléphone)

1 n1 ad1

2 n2 ad2

3 n3 ad1

4 n1 ad3

Dons( ND, montant, dateDon, dateReçu, #NP, #NC)

1 50 1/3/2018 1/2/2019 1 null

2 1/2/2019 2

3 1/2/2019 1

4 1/2/2019 3

5 null 2

6 null 3

7 null 4

8 null 3

Courriers(NC, libellé, texte, dateEnvoi)

Recevoir(#NC, #NP)

Références

Documents relatifs

Si elles veulent exister dans le futur, elles ont deux impératifs : tout d'abord, continuer à investir le web « classique », engranger des sympathisants et développer

Dans cette perspective, la Cour canadienne de l’impôt (la « CCI ») a refusé le crédit d’impôt pour don de 17,7 millions de dollars demandé par la succession du contribuable

Depuis plus de 150 ans, le Club Alpin Suisse CAS s‘engage en faveur de sports de montagne responsables, d‘une infrastructure sûre et d‘un environnement intact dans l‘arc alpin..

Depuis plus de 150 ans, le Club Alpin Suisse CAS s‘engage en faveur de sports de montagne responsables, d‘une infrastructure sûre et d‘un environnement intact dans l‘arc alpin..

A l’heure où les œuvres cinématographiques et littéraires, mais aussi les écrits scientifiques, mettent le projecteur sur la question de la souffrance au travail, n’est-il

Plutôt que d’acheter, pour vos travaux, empruntez à vos voisins une perceuse ou un marteau. Ici, déposez

 Fondation du patrimoine ou fondation ou association qui affecte irrévocablement les dons à la Fondation du patrimoine, en vue de subventionner les travaux prévus par les

Dans le cas ou vos documents ne seraient pas sélectionnés, vous pouvez vous orienter vers d'autres solutions (boites à livres, don à des bibliothèques associatives ou à