100 |
Démarage du projet. Création d'un fichier " package.json " qui va définir le projet. Le projet aura pour nom : saf-scrum ; Il commencera en version 0.1.0 ; Ces dépendances seront : " express ","express-session"," ejs ", " body-parser ", "passport","passport-local","connect-ensure-login","morgan","mysql","moment"; son main se nommera " index.js ", il aura pour description : " projet saf-scrum " Définition de l'architecture : On choisira routes-Vue-Controller , donc création des dossiers routess, views et controller. Le fichier index.js sera placé dans la racine du projet. |
Pouvoir installer tous les modules avec la commande npm install |
US1 - US35 |
NOTHING |
0.5 |
DONE |
Simon |
101 |
Création de la base de données MySQL sur phpMyAdmin avec pour info : host: dbserver.emi.u-bordeaux.fr", user: "agourgue", password: cdp2019", database: "agourgue" |
Pouvoir se connecter à la base de données au cremi avec les identifiants "agourgue" et "cdp2019" |
US1 - US35 |
NOTHING |
0.5 |
DONE |
Simon |
102 |
Initialisation des tables dans la base de données (Users, Projects, Issues, Tests, Tasks, Documentation, Sprints, Releases, Tasks_Users, Projects_Users, Tasks_Tasks, Sprints_Issues, Releases_Issues et Sprints_Releases). users : username VARCHAR(30) NOT NULL, email TEXT, password TEXT, PRIMARY KEY (username) projects : _project_name VARCHAR(50) NOT NULL , _owner_name VARCHAR(30) NOT NULL, description TEXT, PRIMARY KEY (_project_name, _owner_name) projects_users : _user_name VARCHAR(50) NOT NULL, _project_name VARCHAR(50) NOT NULL, PRIMARY KEY (_user_name, _project_name) tasks_users : _task_id INT NOT NULL, _user_name VARCHAR(50) NOT NULL, PRIMARY KEY(_task_id, _user_name) tasks : _task_id INT NOT NULL, description TEXT NOT NULL, state TEXT NOT NULL, _issue_id INT, _project_name VARCHAR(50), PRIMARY KEY (_task_id, _project_name) tasks_tasks : _task_id INT NOT NULL, _dependency_task_id INT NOT NULL, PRIMARY KEY (_task_id, _dependency_task_id) tests : _id INT NOT NULL AUTO_INCREMENT, description TEXT NOT NULL, state TEXT NOT NULL, result_description TEXT, _issue_id INT NOT NULL, project_id INT NOT NULL, _project_name VARCHAR(50) NOT NULL, PRIMARY KEY (_id, _project_name) documentation : _id INT NOT NULL, filepath TEXT NOT NULL, _project_name VARCHAR(50) NOT NULL, PRIMARY KEY(_id) issues : _issue_id INT NOT NULL, description TEXT NOT NULL, difficulty INT NOT NULL, priority TEXT NOT NULL, us_num TEXT NOT NULL, test_state TEXT NOT NULL, _project_name VARCHAR(50) NOT NULL, PRIMARY KEY (_issue_id, _project_name) sprints_issues : _issue_id INT NOT NULL, _sprint_id INT NOT NULL, PRIMARY KEY (_issue_id, _sprint_id) sprints : _id INT NOT NULL AUTO_INCREMENT, _name VARCHAR(50) NOT NULL, starting_date DATE NOT NULL, ending_date DATE NOT NULL, description TEXT , _project_name VARCHAR(50) NOT NULL, PRIMARY KEY(_name, _project_name) sprints_releases : _sprint_id INT NOT NULL, _release_id INT NOT NULL, PRIMARY KEY (_sprint_id, _release_id) releases : _id INT NOT NULL AUTO_INCREMENT, filepath TEXT NOT NULL, creation_date DATETIME NOT NULL, version_num INT NOT NULL, description TEXT NOT NULL, _project_name VARCHAR(50) NOT NULL, PRIMARY KEY (_id, _project_name) realses_issues : _issue_id INT NOT NULL, _release_id INT NOT NULL, PRIMARY KEY (_issue_id, _release_id)" |
Pouvoir insérer un élément dans chaque table de la base de données |
US1 - US35 |
NOTHING |
0.5 |
DONE |
Simon |
103 |
Création des fichiers "database_header.js" qui fais la connexion avec la base de données, elle contiendra une fonction getDatabase() retournant la constante "database" contenant les infos de connection. Création des fichiers "database_select.js" pour les fonctions de récupérations des données, "database_insert.js" pour les fonctions d'insertions de données et "database_delete.js" pour les fonctions de supressions des données. Toutes ces fonctions devront être exportés afin de les utiliser dans d'autres fichiers. |
Pouvoir faire une requête à la base de données en utilisant le getDatabase() |
US1 - US35 |
102 |
0.5 |
DONE |
Simon |
104 |
Création de la fonction de récupération d'un utilisateur avec un "username" et un "password" dans le fichier "database_select.js". Création d'une fonction d'insertion d'un utilisateur avec un "username", un "email" et un "password" dans le fichier "database_insert.js". |
Pouvoir insérer un utilisateur dans la base de données et pouvoir le récupérer |
US4 |
103 |
1 |
DONE |
Simon |
105 |
Création de la page d'accueil avec un fichier "index.js" dans routes et "index.ejs" dans le dossier views. Dans un premier temps, le serveur devra être disponible en localhost sur le port 8080. |
Pouvoir accéder à l'index à l'adresse localhost:8080 en utilisant node index.js à la racine |
US1 - US35 |
NOTHING |
0.5 |
DONE |
Florian |
106 |
Création d'un formulaire avec les champs "username" et "password" et d'un bouton "log in" dans le ficher "index.ejs" qui permettront de se connecter une fois les champs remplis. Création d'un bouton "create account" placé un dessous du bouton "log in" qui nous redirigera vers une autre page contenant un formulaire permettant de nous créer un compte. Le second formulaire contient les champs "mail", "username" et "password". |
Pouvoir créer un utilisateur en utilisant le bouton le formulaire de "create_account". Pouvoir voir le formulaire de connexion |
US1 |
105 |
0.5 |
DONE |
Florian |
107 |
Création du fichier "authenticate.js" qui gerera l'authentification à l'aide du module "passport.js". Il sera placé dans le dossier routes. Il fera le lien avec le lien avec le fichier "index.js". Création des fonctions de connexion et de déconnexion d'un utlisateur à l'aide du module "passeport", dans le fichier "authenticate.js". Un appel à ses fonctions doit être fait dans "index.js" |
Pouvoir se connecter à une session en utilisant le formulaire du login en utilisant les identifiants d'un utilisateur créé auparavant |
US1 - US2 - US4 |
104 |
3 |
DONE |
Antoine |
108 |
Création des fichier "project.js" dans routes et "project.ejs" dans views. Création des boutons Issues, Tasks, Tests, Releases, Documentation, Sprints, Summary et Project Management dans "header.ejs"permettant de changer d'onglet. Création du bouton "logout" en haut à droite de la page projet. |
Pouvoir, en se connectant, voir tous les onglets en rejoignant un projet, et ensuite se déconnecter en cliquant sur le logout |
US2 - US11 |
NOTHING |
0.5 |
DONE |
Simon |
109 |
Création d'une fonction d'insertion d'un projet avec un "project_name", UN "owner_name" et une "description" (qui devra être optionelle) dans le fichier "database_insert.js". Création d'une fonction (dans database_delete.js) de suppression d'un projet ayant en paramètre le nom de projet et son propriétaire. |
Pouvoir créer ou supprimer un projet dans la table projects en appelant ces fonctions |
US2 |
103 |
0.5 |
DONE |
Simon |
110 |
Création du fichier "issues.js" dans routes et "issues.ejs" dans views. Dans la vue, créer un bouton "add issue". |
Pouvoir voir le bouton add issue dans l'onglet issue |
US12 |
110 |
0.5 |
DONE |
Florian |
203 |
Création du fichier "register.js" dans routes et "register.ejs" dans views. |
Pouvoir atterrir sur le formulaire de création de compte en cliquant sur "create account" |
US1 |
103 |
0.5 |
DONE |
Antoine |
204 |
Ajout dans le ficher "register.ejs" des inputs "email"(type=text), "username"(type=text) et password(type=password) tous required. Ajout du bouton "sign in" qui redirigera vers "index" dans le fichier "register.js" et qui fera un insert dans la base de données du user avec la fonction "insertUser(name, email, password)" du fichier "db_controller/user_db.js". |
Pouvoir créer un compte en remplissant le formulaire avec un email, un username et un password et en cliquant sur sign in |
US1 |
203 |
1 |
DONE |
Antoine |
205 |
Création du bouton "add project" dans la page "project.ejs" permettant de créer un projet. Création du bouton "delete project" dans le fichier "projectManagement.ejs" pour plus tard, supprimer un projet. Afficher la liste des projets de l'utilisateur dans le fichier "project.ejs". |
Pouvoir voir les boutons add project dans la page /projects et delete project dans l'onglet "Project Management" |
US2 |
108 |
0.5 |
DONE |
Antoine |
206 |
Implémentation du bouton "add project" avec un formulaire de création de projets. Ses inputs sont un "name" (type = text) en required et la description (type = text). Le "_owner_name" sera donné automatiquement avec le nom de l'utilisateur qui crée le projet. |
Pouvoir créer un projet en cliquant sur le bouton add project et en remplissant le formulaire de création en cliquant sur le bouton Validate |
US2 |
205 |
1 |
DONE |
Antoine |
207 |
Ajout du bouton "Enter project" dans la liste des projet qui redirige vers le summary du projet cliqué dans le fichier "projects.ejs" dans views . La redirection est à gérer dans les fichiers "projects.js" et "index.js". Il stockera l'id du project dans toutes les vues. |
Pouvoir sléctionner un projet en cliquant sur son bouton "Enter Project", et voir son nom dans le header |
US2 |
206 |
1 |
DONE |
Antoine |
208 |
Implementation du bouton "delete project" dans le fichier "projectManagement.js" en utilisant la fonction deleteProject(project_name, owner_name) du fichier "db_controller/project_db.js". |
Pouvoir supprimer un projet en cliquant sur le bouton "delete project" dans l'onglet "Project Management" |
US2 |
207 |
0.5 |
DONE |
Antoine |
209 |
Ajout des redirections des boutons du header dans les fichier 'documentation.js', issues.js', 'projectManagement.js', 'releases.js', 'sprints.js', 'summary.js', 'tasks.js' et 'tests.js' dans le dossier routes, ainsi que les imports de ses fichiers dans "index.js". Ajout du bouton logout dans le 'header.js' ainsi que la redirection vers le logout dans le fichier 'login.js' dans routes. |
Pouvoir cliquer sur tous les onglets en étant redirigé vers les bonnes pages. Pouvoir se déconnecter via le logout du header. |
US11 |
108 |
1.5 |
DONE |
Antoine |
210 |
Ajout du nom du projet en haut à gauche du header dans le fichier "header.js". Ajout d'un bouton "Project List" au milieu du header qui redirige vers la liste des projets de l'utilisateur. ('/projects'). |
Pouvoir voir le nom du projet selectionné dans le header. Pouvoir retourner vers la liste des projets en cliquant sur le bouton "Project List" dans le header |
US11 |
209 |
1 |
DONE |
Antoine |
211 |
Création du fichier "issue.js" dans routes et "issue.ejs" dans views. |
Pouvoir atterrir sur l'onglet "issues" en cliquant dans le header |
US12 |
105 |
0.5 |
DONE |
Florian |
212 |
Création de l'affichage de la liste des issues, chaque issues sera affichées avec son numéro, sa description, sa difficultée, sa prioritée et son état. |
Pouvoir voir la liste des issues d'un projet depuis l'onglet "issues" |
US12 |
211 |
1 |
DONE |
Florian |
213 |
Création d'un bouton "addIssue" et d'un formulaire de création d'une issue. Les inputs devront être "User Story number" (type = text), "Descrition" (type=text), "Difficulty" (type=number), une sélection à choix unique pour "Priority" (type=text) (low, medium, high) et une séléction à choix unique pour le "State"(type=test) (TODO, DONE). Tous les input seront "required". Création des boutons "validate" et "cancel" dans le formulaire qui permettent respectivement de valider les informations rempli par l'utilsateur ou à l'inverse d'annuler la reqiuête d'insertion. Le formulaire devra renvoyer à la méthode "POST" de insertIssue dans le fichier "issue.js" qui utilsera les fonctions de "db_controller/issue_db.js". |
Pouvoir voir le formulaire de création d'issue en cliquant sur le bouton "add issue" |
US12 |
212 |
1 |
DONE |
Florian |
214 |
Création des fonctions d'insertions des issues dans la base de données dans le fichier "db_controller/issue_db.js" : insertIssue(description, difficulty, priority, usNum, sate, projectId) insertIssueInRelease(issueId, releaseId) insertIssueInSprint(issueId, sprintId) Les champs difficulty et les Id sont des number. Les autres champs sont des String. |
Pouvoir créer une issue en cliquant sur le bouton "add issue" en remplissant le formulaire et pouvoir le voir dans la liste des issues |
US12 |
103 |
1 |
DONE |
Florian |
215 |
Création de la fonction d'update des issues dans la base de données dans le fichier "db_controller/issue_db.js" : updateIssue(projectId, issueId, description, difficulty, priority, usNum, testSate) Les champs difficulty, priority et usNum sont des number. Les autres champs sont des String. |
Pouvoir modifier une issue en appelant la fonction. |
US14 |
103 |
0.5 |
DONE |
Florian |
216 |
Création de la fonction de suppression des issues dans la base de données dans le fichier "db_controller/issue_db.js" : deleteIssue(projectId, issueId) Les champs sont des number. |
Pouvoir supprimer une issue en appelant la fonction |
US13 |
103 |
0.5 |
DONE |
Florian |
217 |
Création du bouton pour modifier les issues. Création du formulaire de modification d'une issue. Les inputs devront être "User Story number" (type = text), "Descrition" (type=text), "Difficulty" (type=number), une sélection à choix unique pour "Priority" (type=text) (low, medium, high) et une séléction à choix unique pour le "State"(type=test) (TODO, DONE). Tous les input seront "required". Création des boutons "validate" et "cancel" dans le formulaire qui permettent respectivement de valider les informations rempli par l'utilsateur ou à l'inverse d'annuler la requête d'insertion. Le formulaire devra renvoyer à la méthode "POST" de updateIssue dans le fichier "issue.js" qui utilsera les fonctions de "db_controller/issue_db.js". |
Pouvoir modifier une issue en cliquant sur le bouton "modify" de l'issue en remplissant le formulaire et pouvoir voir la modification dans la liste des issues |
US14 |
213 |
1 |
DONE |
Florian |
218 |
Création du bouton "Delete" pour les issues dans "issues.ejs". Le bouton devra utiliser la method "POST" de /deleteIssue dans le fichier "issue.js" et utilsera les fonctions de "db_controller/issue_db.js". |
Pouvoir supprimer une issue en cliquant sur delete et pouvoir voir sa suppression dans la liste des issues |
US13 |
217 |
0.5 |
DONE |
Florian |
219 |
Création du formulaire de confirmation ("Yes" et "No") pour la suppression d'une issue. |
Pouvoir avoir un formulaire de confirmation lors de la suppression d'une issue qui la supprime en cliquant sur "yes" et qui annule la suppression en cliquant sur "no" |
US13 |
218 |
0.5 |
TODO |
Florian |
220 |
Création du fichier "tasks.js" dans routes et "tasks.ejs" dans views. |
Pouvoir atterrir sur l'onglet "tasks" en cliquant dans le header |
US16 |
105 |
0.5 |
DONE |
Antoine |
221 |
Création de fonctions d'écriture de tasks, dans la base de données dans le fichier "db_controller/task_db.js" : insertTask(taskId, description, state, projectId, issueId) -> issueId doit être optionnel pour l'utilisateur insertTaskTask(taskId, dependencyTaskId) insertTaskUser(taskId, userName) updateTask(projectId, taskId, description, state, issueId) -> issueId doit être optionnel pour l'utilisateur. Les id sont toujours des number, tous les autres sont des String. |
Pouvoir créer une task et ses dépendances en appelant les fonctions. |
US16 |
103 |
1 |
DONE |
Antoine |
222 |
"Création de fonctions de lecture de tasks, dans la base de données dans le fichier "db_controller/task_db.js" : findTaskByProjectId(projectId) findUserOfTask(projectId, taskId). Les id sont toujours des number, tous les autres sont des String. |
Pouvoir sélectionner des tasks ou le user de la task en appelant les fonctions. |
US16 |
103 |
1 |
DONE |
Simon |
223 |
Création de la fonction de suppression d'une task dans "db_controller/task_db.js" : deleteTask(projectId, taskId), les deux champs sont des number. |
Pouvoir supprimer une task en appelant la fonction |
US16 |
103 |
0.5 |
DONE |
Antoine |
224 |
Création de l'affichage de la liste des tasks, chaque tasks sera affiché avec son ID, sa description, son état ainsi que l'utilisateur à qui est liée cette tâche |
Pouvoir voir la liste des tasks d'un projet depuis l'onglet "tasks" |
US16 |
220 |
1 |
DONE |
Simon |
225 |
Création d'un bouton "add task", pour créer une task, dans le fichier "tasks.ejs". Création du formulaire de modification d'une tâche, les inputs devront être "task id" (type = number, l'input est obligatoire), "descrition" (text, obligatoire), une selection unique pour le "State" (obligatoire) avec comme choix "TODO", "DOING" et "DONE", une séléction à choix multiple pour les "issues id" contenant la liste des issues du projet, une selection à choix multiple pour les "depency tasks" contenant la liste des tâches du projet (exepté la tâche atuellement modifiée) ainsi qu'une selection unique pour le "associated member" contenant la liste des membres du projet. Création des boutons "validate" et "cancel" dans le formulaire qui permettent respectivement de valider les informations rempli par l'utilsateur ou à l'inverse d'annuler la reqiuête d'insertion. Le formulaire devra renvoyer à la method "POST" de /insertTask dans le fichier "tasks.js" qui utilsera les fonctions de "db_controller./task_db.js" |
Pouvoir créer une task en cliquant sur le bouton "add task" en remplissant le formulaire et pouvoir le voir dans la liste des tasks |
US16 |
221 |
1 |
DONE |
Simon |
226 |
Création d'un bouton "modify" pour la modification de la tasks dans le fichier "tasks.ejs". Création du formulaire de modification d'une tâche, les inputs devront être "task id" (type = number, l'input est obligatoire), "descrition" (text, obligatoire), une selection unique pour le "State" (obligatoire) avec comme choix "TODO", "DOING" et "DONE", une séléction à choix multiple pour les "issues id" contenant la liste des issues du projet, une selection à choix multiple pour les "depency tasks" contenant la liste des tâches du projet (exepté la tâche atuellement modifiée) ainsi qu'une selection unique pour le "associated member" contenant la liste des membres du projet. Création des boutons "validate" et "cancel" dans le formulaire qui permettent respectivement de valider les informations rempli par l'utilsateur ou à l'inverse d'annuler la reqiuête d'insertion. Le formulaire devra renvoyer à la method "POST" de /updateTask dans le fichier "tasks.js" qui utilsera les fonctions de "db_controller./task_db.js" |
Pouvoir modifier une task en cliquant sur le bouton "modify" de la task en remplissant le formulaire et pouvoir voir la modification dans la liste des tasks |
US16 |
225 |
1 |
DONE |
Simon |
227 |
Création du bouton "Delete" pour les tasks dans "tasks.ejs". Le bouton devra utiliser la method "POST" de /deleteTask dans le fichier "tasks.js" qui utilsera les fonctions de "db_controller./task_db.js". |
Pouvoir supprimer une task en cliquant sur delete et pouvoir voir sa suppression dans la liste des tasks |
US15 |
226 |
0.5 |
DONE |
Simon |
228 |
Création du formulaire de confirmation ("Yes" et "No") pour la suppression d'une task. |
Pouvoir avoir un formulaire de confirmation lors de la suppression d'une task qui la supprime en cliquant sur "yes" et qui annule la suppression en cliquant sur "no" |
US15 |
122 |
0.5 |
TODO |
Simon |
229 |
Création du fichier "tests.js" dans routes et "tests.ejs" dans views. |
Pouvoir atterrir sur l'onglet "tests" en cliquant dans le header |
US23 |
109 |
0.5 |
DONE |
Simon |
231 |
Création de fonctions d'écriture des tests, dans la base de données dans le fichier "db_controller./test_db.js" : insertTest(projectId, description, issueId, state, resultDescription) -> resultDescription doit être optionnel pour l'utilisateur. Les ID sont toujours des "number", les autres sont des "String" |
Pouvoir créer un test en appelant la fonction. |
US23 |
103 |
1 |
TODO |
Simon |
232 |
Création des fonctions de lecture des tests, dans la base de données dans le fichier "db_controller./test_db.js" : findTestOfIssue(projectId, issueId) findTestOfProject(projectId). Tous les champs sont des number. |
Pouvoir sélectionner des tests avec un id de projet ou d'issue en appelant les fonctions. |
US23 |
103 |
1 |
TODO |
Simon |
233 |
Création de la fonction de suppression d'un test dans "db_controller./test_db.js" : deleteTest(projectId, testId), les deux champs sont des number. |
Pouvoir supprimer un test en appelant la fonction |
US23 |
103 |
0.5 |
TODO |
Simon |
234 |
Création de l'affichage de la liste des tests, dans le fichier 'test.ejs'. Chaque tests sera affiché avec sa description, l'issue qui est testée, et son état. |
Pouvoir voir la liste des test s d'un projet depuis l'onglet "tests" |
US23 |
105 |
0.5 |
TODO |
Simon |
235 |
Création d'un bouton "add test" pour la création d'un test dans le fichier "test.ejs". Création du formulaire de modification d'un test les inputs devront être "descrition" (text, ce champ est obligatoire), une selection unique pour le "State" (obligatoire) avec comme choix "SUCCEED" ou "FAILED" (pré-rempli en "failed"), une séléction à choix unique pour la "tested issue" contenant la liste des issues du projet. Création des boutons "validate" et "cancel" dans le formulaire qui permettent respectivement de valider les informations rempli par l'utilsateur ou à l'inverse d'annuler la reqiuête d'insertion. Le formulaire devra renvoyer à la method "POST" de /updateTest dans le fichier "test.js" qui utilsera les fonctions de "db_controller/test_db.js" |
Pouvoir créer un test en cliquant sur le bouton "add test" en remplissant le formulaire et pouvoir le voir dans la liste des tests |
US23 |
234 |
1 |
TODO |
Antoine |
236 |
Création d'un bouton "modify" pour la modification d'un test dans le fichier "test.ejs". Création du formulaire de modification d'un test les inputs devront être "descrition" (text, ce champ est obligatoire), une selection unique pour le "State" (obligatoire) avec comme choix "SUCCEED" ou "FAILED" (pré-rempli en "failed"), une séléction à choix unique pour la "tested issue" contenant la liste des issues du projet. Création des boutons "validate" et "cancel" dans le formulaire qui permettent respectivement de valider les informations rempli par l'utilsateur ou à l'inverse d'annuler la reqiuête d'insertion. Le formulaire devra renvoyer à la method "POST" de /updateTest dans le fichier "test.js" qui utilsera les fonctions de "db_controller/test_db.js" |
Pouvoir modifier un test en cliquant sur le bouton "modify" du test en remplissant le formulaire et pouvoir voir la modification dans la liste des tests |
US25 |
235 |
0.5 |
TODO |
Simon |
237 |
Création du bouton "Delete" pour les tests dans "tests.ejs". Le bouton devra utiliser la method "POST" de /deleteTest dans le fichier "test.js" qui utilsera les fonctions de "db_controller/test_db.js". |
Pouvoir supprimer un test en cliquant sur delete et pouvoir voir sa suppression dans la liste des tests |
US24 |
236 |
0.5 |
TODO |
Simon |
238 |
Création du formulaire de confirmation ("Yes" et "No") pour la suppression d'un test. |
Pouvoir avoir un formulaire de confirmation lors de la suppression d'un test qui le supprime en cliquant sur "yes" et qui annule la suppression en cliquant sur "no" |
US24 |
237 |
0.5 |
TODO |
Simon |
239 |
Création du bouton "give admin rights" qui permet d'afficher la liste des participants au projet et de leur donner un projet dans le fichier "project.ejs". Création de la fonction permettant d'échanger les rôles de deux utilisateurs pour le don de droits dans "db_controller/user_db.js". |
Pouvoir donner un projet à un autre utilisateur en cliquant sur le bouton "give admin rights" et voir que le projet passe de la liste des "projects own" à la liste des "suscribed projects" |
US10 |
207 |
1 |
TODO |
Antoine |
240 |
Création du formulaire de confirmation ("Yes" et "No") pour le don de droits administrateur. |
Pouvoir avoir un formulaire de confirmation lors du don de droit administrateur d'un projet qui donne les droits en cliquant sur "yes" et qui annule le don en cliquant sur "no" |
US10 |
239 |
0.5 |
TODO |
Antoine |