From bbf3eb840193ee31dec1ef4c6adec3ab85282336 Mon Sep 17 00:00:00 2001
From: Fabien Zucchet <fabien.zucchet@student-cs.fr>
Date: Sun, 22 Mar 2020 01:38:04 +0100
Subject: [PATCH] feat: add objectives and rankings on home page

---
 back/index.js                                 | 13 +++++++
 front/src/app/accueil/Accueil.js              | 11 +++---
 front/src/app/accueil/Classements.js          | 19 +++++++++++
 front/src/app/accueil/objectifs/Objectifs.js  | 18 ++++++++++
 .../app/accueil/objectifs/TableauObjectifs.js | 34 +++++++++++++++++++
 .../app/administration/GestionObjectifs.js    |  6 ++++
 .../TableauClassementIndividuel.js            |  6 ++--
 front/src/app/navbar/Navbar.js                |  1 +
 front/src/index.js                            |  2 ++
 9 files changed, 101 insertions(+), 9 deletions(-)
 create mode 100644 front/src/app/accueil/Classements.js
 create mode 100644 front/src/app/accueil/objectifs/Objectifs.js
 create mode 100644 front/src/app/accueil/objectifs/TableauObjectifs.js
 create mode 100644 front/src/app/administration/GestionObjectifs.js

diff --git a/back/index.js b/back/index.js
index d1e88979..9377cb83 100644
--- a/back/index.js
+++ b/back/index.js
@@ -19,6 +19,7 @@ app.listen(process.env.REACT_APP_SERVER_PORT, () => {
   console.log(`App server now listening on port ${process.env.REACT_APP_SERVER_PORT}`);
 });
 
+//Get data for team ranking
 app.get('/classement_par_equipes', (req, res) => {
   pool.query(`SELECT Equipe.name,SUM(score) AS score,COUNT(participantId) AS nbParticipant,COUNT(score) AS nbScores FROM Score JOIN Equipe ON Equipe.id=Score.equipeId GROUP BY equipeId ORDER BY score DESC;`, (err, results) => {
     if (err) {
@@ -29,6 +30,7 @@ app.get('/classement_par_equipes', (req, res) => {
   });
 });
 
+//Get data for individual ranking
 app.get('/classement_individuel', (req, res) => {
   pool.query(`SELECT Participant.name,SUM(score) AS score,COUNT(equipeId) AS nbEquipes,COUNT(score) AS nbScores FROM Score JOIN Participant ON Participant.id=Score.participantId GROUP BY participantId ORDER BY score DESC;`, (err, results) => {
     if (err) {
@@ -38,3 +40,14 @@ app.get('/classement_individuel', (req, res) => {
     }
   });
 });
+
+//Get data about goals
+app.get('/objectifs', (req, res) => {
+  pool.query(`SELECT name,description,value,coef,realise FROM Objectif CROSS JOIN (SELECT SUM(score) as realise FROM Score) AS Realise ORDER BY value DESC;`, (err, results) => {
+    if (err) {
+      return res.send(err);
+    } else {
+      return res.send(results);
+    }
+  });
+});
diff --git a/front/src/app/accueil/Accueil.js b/front/src/app/accueil/Accueil.js
index 46c6fc6a..9bf3e745 100644
--- a/front/src/app/accueil/Accueil.js
+++ b/front/src/app/accueil/Accueil.js
@@ -1,13 +1,12 @@
 import React from 'react';
 //import { Link } from 'react-router-dom';
-import { TableauClassementEquipe } from '../classementEquipe/TableauClassementEquipe';
-import { TableauClassementIndividuel } from '../classementIndividuel/TableauClassementIndividuel';
+import Objectifs from './objectifs/Objectifs';
+import Classements from './Classements';
+
 
 export default () => (
   <div>
-  <h1>Classement par équipe</h1>
-  <TableauClassementEquipe/>
-  <h1>Classement individuel</h1>
-  <TableauClassementIndividuel/>
+  <Objectifs />
+  <Classements />
   </div>
 );
diff --git a/front/src/app/accueil/Classements.js b/front/src/app/accueil/Classements.js
new file mode 100644
index 00000000..b9a6affb
--- /dev/null
+++ b/front/src/app/accueil/Classements.js
@@ -0,0 +1,19 @@
+import React from 'react';
+//import { Link } from 'react-router-dom';
+import { TableauClassementEquipe } from '../classementEquipe/TableauClassementEquipe';
+import { TableauClassementIndividuel } from '../classementIndividuel/TableauClassementIndividuel';
+
+export default () => (
+  <div class="container">
+    <div class="row">
+      <div class="col">
+        <h1>Classement par équipe</h1>
+        <TableauClassementEquipe/>
+      </div>
+      <div class="col">
+        <h1>Classement individuel</h1>
+        <TableauClassementIndividuel/>
+      </div>
+    </div>
+</div>
+);
diff --git a/front/src/app/accueil/objectifs/Objectifs.js b/front/src/app/accueil/objectifs/Objectifs.js
new file mode 100644
index 00000000..42be3ed5
--- /dev/null
+++ b/front/src/app/accueil/objectifs/Objectifs.js
@@ -0,0 +1,18 @@
+import React from 'react';
+import { TableauObjectifs } from './TableauObjectifs';
+
+export default () => (
+  <div class="jumbotron jumbotron-fluid">
+    <div class="container">
+    <div class="row">
+      <div class="col">
+        <h1 class="display-4">Objectifs</h1>
+        <p class="lead">Avancement des différents objectifs :</p>
+      </div>
+      <div class="col">
+        <TableauObjectifs/>
+      </div>
+    </div>
+    </div>
+  </div>
+);
diff --git a/front/src/app/accueil/objectifs/TableauObjectifs.js b/front/src/app/accueil/objectifs/TableauObjectifs.js
new file mode 100644
index 00000000..eeae6eec
--- /dev/null
+++ b/front/src/app/accueil/objectifs/TableauObjectifs.js
@@ -0,0 +1,34 @@
+import React, { useState } from 'react';
+import axios from 'axios';
+
+
+export function TableauObjectifs(){
+  var [objectifs,setObjectifs] = useState([]);
+  axios.get('http://localhost:8000/objectifs').then((response) => setObjectifs(response.data))
+  return(
+    <table class="table">
+      <thead class="thead-light">
+        <tr>
+          <th scope="col">Nom</th>
+          <th scope="col">Description</th>
+          <th scope="col">Objectif</th>
+          <th scope="col">Somme visée</th>
+          <th scope="col">Réalisé</th>
+          <th scope="col">Somme récoltée</th>
+        </tr>
+      </thead>
+      <tbody>
+        {objectifs.map((item) =>
+          <tr>
+            <th scope="row">{item.name}</th>
+            <td>{item.description}</td>
+            <td>{item.value}</td>
+            <td>{item.value*item.coef} €</td>
+            <td>{item.realise}</td>
+            <td>{item.realise*item.coef} €</td>
+          </tr>
+        )}
+      </tbody>
+    </table>
+  )
+};
diff --git a/front/src/app/administration/GestionObjectifs.js b/front/src/app/administration/GestionObjectifs.js
new file mode 100644
index 00000000..96faa975
--- /dev/null
+++ b/front/src/app/administration/GestionObjectifs.js
@@ -0,0 +1,6 @@
+import React from 'react';
+//import { Link } from 'react-router-dom';
+
+export default () => (
+  <div>Gestion des objectifs</div>
+);
diff --git a/front/src/app/classementIndividuel/TableauClassementIndividuel.js b/front/src/app/classementIndividuel/TableauClassementIndividuel.js
index 14f7898e..65b08e12 100644
--- a/front/src/app/classementIndividuel/TableauClassementIndividuel.js
+++ b/front/src/app/classementIndividuel/TableauClassementIndividuel.js
@@ -3,8 +3,8 @@ import axios from 'axios';
 
 
 export function TableauClassementIndividuel(){
-  var [equipes,setEquipes] = useState([]);
-  axios.get('http://localhost:8000/classement_individuel').then((response) => setEquipes(response.data))
+  var [participants,setParticipants] = useState([]);
+  axios.get('http://localhost:8000/classement_individuel').then((response) => setParticipants(response.data))
   return(
     <table class="table">
       <thead class="thead-light">
@@ -16,7 +16,7 @@ export function TableauClassementIndividuel(){
         </tr>
       </thead>
       <tbody>
-        {equipes.map((item) =>
+        {participants.map((item) =>
           <tr>
             <th scope="row">{item.name}</th>
             <td>{item.score}</td>
diff --git a/front/src/app/navbar/Navbar.js b/front/src/app/navbar/Navbar.js
index 779364ed..3caef29e 100644
--- a/front/src/app/navbar/Navbar.js
+++ b/front/src/app/navbar/Navbar.js
@@ -18,6 +18,7 @@ export default () => (
         <NavDropdown.Item href="/admin/equipes">Gestion des équipes</NavDropdown.Item>
         <NavDropdown.Item href="/admin/participants">Gestion des participants</NavDropdown.Item>
         <NavDropdown.Item href="/admin/admins">Gestion des administrateurs</NavDropdown.Item>
+        <NavDropdown.Item href="/admin/objectifs">Gestion des objectifs</NavDropdown.Item>
       </NavDropdown>
     </Nav>
   </Navbar.Collapse>
diff --git a/front/src/index.js b/front/src/index.js
index d7e3bbfd..2fcb7889 100644
--- a/front/src/index.js
+++ b/front/src/index.js
@@ -10,6 +10,7 @@ import SaisieScore from './app/administration/SaisieScore';
 import GestionEquipes from './app/administration/GestionEquipes';
 import GestionParticipants from './app/administration/GestionParticipants';
 import GestionAdministrateurs from './app/administration/GestionAdministrateurs';
+import GestionObjectifs from './app/administration/GestionObjectifs';
 
 import './index.css';
 import 'bootstrap/dist/css/bootstrap.min.css';
@@ -26,6 +27,7 @@ ReactDOM.render(
         <Route path="/admin/equipes" component={GestionEquipes} />
         <Route path="/admin/participants" component={GestionParticipants} />
         <Route path="/admin/admins" component={GestionAdministrateurs} />
+        <Route path="/admin/objectifs" component={GestionObjectifs} />
       </div>
   </Router>,
   document.getElementById('root')
-- 
GitLab