diff --git a/back/index.js b/back/index.js index d1e88979aa577c5f1365b0f62c67ce4ba04606ef..9377cb83b35be3c3f7fc09181e564b8c405e2125 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 46c6fc6aea108d1fc7a3856539b9732badaa9f11..9bf3e7454e7b32b8e1f2937a5b4a16b5f006e51d 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 0000000000000000000000000000000000000000..b9a6affb5398569147868188b27234e9a2ef5720 --- /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 0000000000000000000000000000000000000000..42be3ed522099d16d8572f70d13fe7479010ecf7 --- /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 0000000000000000000000000000000000000000..eeae6eece4f05ba7337fa78e31a28e32284e1b7f --- /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 0000000000000000000000000000000000000000..96faa9758ba203f996a67b6aa7ac481da59cbe3e --- /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 14f7898e4e21e987653e11f532ed5438baa3edd8..65b08e12c2c3b13cda88dd00eab01080b8df3d59 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 779364edea04a90ba507376df6f8a2ba80115d31..3caef29e2bc89f7269cf87026b86b320a8f7cdc2 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 d7e3bbfd76d2efc26e80a1df9a7ff42f4bff5811..2fcb78899779cc3cf2464879984cdc1676f2f75a 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')