Optimisations mineures

This commit is contained in:
Theal0 2021-05-10 17:27:18 +02:00
parent 4b0c3cf1b9
commit c6c2f25c80
16 changed files with 728 additions and 85 deletions

View File

@ -15,7 +15,7 @@ Version mobile de l'application web ScoDoc (v0)
Modifier le fichier index.js (ligne 8) afin de mettre l'endpoint de l'API ScoDoc
`npm run build` > Crée un dossier `build` avec le contenu du site en prod
`npm install` > Crée un dossier `build` avec le contenu du site en prod
### Dans le cadre d'un serveur web Apache

View File

@ -1,6 +1,7 @@
{
"name": "scodocmobile",
"version": "0.1.0",
"homepage": "./",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.11.10",

BIN
public/scologo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -35,7 +35,7 @@ class ChoixDept extends Component {
{this.state.depts.map((dept, index) => {
return (
<div id="wrapDept">
<Link to={`/${dept}/Scolarite`}>
<Link to={`/ScoDoc/static/mobile/${dept}/Scolarite`}>
Département {dept}
</Link>
</div>

View File

@ -1,8 +1,6 @@
import React, {Component} from "react";
import './Style.css'
import ScoNavBar from "./ScoNavBar";
import {Link} from "react-router-dom";
import {Button} from "react-bootstrap";
class Etudiant extends Component {
constructor(props) {
@ -16,8 +14,8 @@ class Etudiant extends Component {
}
componentWillMount() {
let dept = window.location.href.split('/')[3]
let etudid = window.location.href.split('/')[6]
let dept = window.location.href.split('/')[6]
let etudid = window.location.href.split('/')[9]
let BASE_URL = window.$api_url
fetch(BASE_URL + dept + '/Scolarite/Notes/etud_info?format=json&etudid=' + etudid, {
method: 'GET',
@ -31,11 +29,11 @@ class Etudiant extends Component {
})
).then(res => {
// Utilisation de '???' en cas de données vides pour le moment}
for (let propName in res.data) {
/*for (let propName in res.data) {
if (res.data[propName] === null || res.data[propName] === undefined || res.data[propName] === "") {
res.data[propName] = "???";
}
}
}*/
this.setState({ etud: res.data })
this.setState({ formation: res.data.insemestre })
@ -68,32 +66,52 @@ class Etudiant extends Component {
<h1>{this.state.etud.nomprenom}</h1>
<img
alt={`${this.state.etud.nomprenom}`}
src={`https://scodoc.dev.net/ScoDoc/RT/Scolarite/Notes/${this.state.etud.photo_url}`}
src={`/ScoDoc/${window.location.href.split('/')[6]}/Scolarite/Notes/${this.state.etud.photo_url}`}
width="102"
height="128"
className="d-inline-block align-top"
/>{' '}
<div id="wrapDept" className="col-sm">
<h3>Informations personnelles</h3>
{this.state.etud.telephone !== "" || this.state.etud.telephonemobile !== "" ||
this.state.etud.email !== "" || this.state.etud.emailperso !== "" ?
<div className="col-sm">
<h4>Contact</h4>
Téléphone: {this.state.etud.telephone}<br/>
Mobile: {this.state.etud.telephonemobile}<br/>
Mail étudiant: {this.state.etud.email}<br/>
Mail perso: {this.state.etud.emailperso}<br/>
{this.state.etud.telephone !== "" && "Téléphone: " + this.state.etud.telephone}<br/>
{this.state.etud.telephonemobile !== "" && "Mobile: " + this.state.etud.telephonemobile}<br/>
{this.state.etud.email !== "" && "Mail étudiant: " + this.state.etud.email}<br/>
{this.state.etud.emailperso !== "" && "Mail perso: " + this.state.etud.emailperso}<br/>
</div>
:
<div className="col-sm">Aucun contact disponible</div>
}
{this.state.etud.domicile !== "" || this.state.etud.codepostaldomicile !== "" ||
this.state.etud.villedomicile !== "" ?
<div className="col-sm">
<h4>Lieu de résidence</h4>
Domicile: {this.state.etud.domicile} -
{" " + this.state.etud.codepostaldomicile} {this.state.etud.villedomicile}<br/>
</div>
:
<div className="col-sm">Aucune information de résidence disponible</div>
}
</div>
<div id="wrapDept" className="col-sm">
{this.state.etud.bac !== "" || this.state.etud.specialite !== "" ?
<div className="col-sm">
<h4>Parcours</h4>
Bac {this.state.etud.bac} (Spécialité {this.state.etud.specialite}) -
Bac {this.state.etud.bac} {this.state.etud.specialite}
{this.state.etud.nomlycee !== "" || this.state.etud.codepostallycee !== "" ||
this.state.etud.villelycee !== "" ?
<div>
{" " + this.state.etud.nomlycee} ({this.state.etud.codepostallycee} {this.state.etud.villelycee})<br/>
</div>
: null}
</div>
: null}
{this.state.loaded === true &&
<div className="col-sm">
<h4>Formation actuelle</h4>
@ -119,13 +137,6 @@ class Etudiant extends Component {
*/}
</div>
</div>
<footer className="fixed-bottom">
<div style={{background: "#cccccc", padding: "5px"}}>
<Link to={`/${window.location.href.split('/')[3]}/Scolarite`}>
<Button type="button" className="btn waves-effect waves-light btn-primary">Retour au choix de semestre</Button>
</Link>
</div>
</footer>
</div>
)
}

View File

@ -1,10 +1,9 @@
import React, {Component} from "react";
import {Tabs, Tab, Button} from "react-bootstrap"
import Acceuil from "./GestionSemestre/Acceuil";
import {Tabs, Tab} from "react-bootstrap"
import Accueil from "./GestionSemestre/Accueil";
import Absences from "./GestionSemestre/Absences";
import Eleves from "./GestionSemestre/Eleves";
import ScoNavBar from "./ScoNavBar";
import {Link} from "react-router-dom";
import Bulletin from "./GestionSemestre/Bulletin";
class GestionSemestre extends Component {
@ -13,9 +12,9 @@ class GestionSemestre extends Component {
<div>
<ScoNavBar/>
<div>
<Tabs defaultActiveKey="Acceuil" id="controlled-tab-example">
<Tab eventKey="Acceuil" title="Acceuil">
<Acceuil />
<Tabs defaultActiveKey="Accueil" id="controlled-tab-example">
<Tab eventKey="Accueil" title="Acceuil">
<Accueil />
</Tab>
<Tab eventKey="Absences" title="Absences">
<Absences />
@ -28,13 +27,6 @@ class GestionSemestre extends Component {
</Tab>
</Tabs>
</div>
<footer>
<div style={{background: "#cccccc", padding: "5px"}}>
<Link to={`/${window.location.href.split('/')[3]}/Scolarite`}>
<Button type="button" className="btn waves-effect waves-light btn-primary">Retour au choix de semestre</Button>
</Link>
</div>
</footer>
</div>
)
}

View File

@ -14,8 +14,8 @@ class Absences extends Component {
}
componentWillMount() {
let dept = window.location.href.split('/')[3]
let sem = window.location.href.split('/')[5]
let dept = window.location.href.split('/')[6]
let sem = window.location.href.split('/')[8]
let BASE_URL = window.$api_url
fetch(BASE_URL + dept +
'/Scolarite/Notes/groups_view?with_codes=1&format=json&formsemestre_id=' + sem, {
@ -41,7 +41,7 @@ class Absences extends Component {
}
getData() {
let dept = window.location.href.split('/')[3]
let dept = window.location.href.split('/')[6]
let BASE_URL = window.$api_url
if (this.state.id !== "") {
fetch(BASE_URL + dept + "/Scolarite/Absences/ListeAbsEtud?format=json&etudid=" + this.state.id, {

View File

@ -1,7 +1,7 @@
import React, {Component} from "react";
import '../Style.css'
class Acceuil extends Component {
class Accueil extends Component {
constructor(props) {
super(props);
this.state = {
@ -11,8 +11,8 @@ class Acceuil extends Component {
}
componentWillMount() {
let dept = window.location.href.split('/')[3]
let sem = window.location.href.split('/')[5]
let dept = window.location.href.split('/')[6]
let sem = window.location.href.split('/')[8]
let BASE_URL = window.$api_url
fetch(BASE_URL + dept +
'/Scolarite/Notes/formsemestre_list?format=json&formsemestre_id=' + sem, {
@ -40,4 +40,4 @@ class Acceuil extends Component {
}
}
export default Acceuil
export default Accueil

View File

@ -19,8 +19,8 @@ class Bulletin extends Component {
}
componentWillMount() {
let dept = window.location.href.split('/')[3]
let sem = window.location.href.split('/')[5]
let dept = window.location.href.split('/')[6]
let sem = window.location.href.split('/')[8]
let BASE_URL = window.$api_url
fetch(BASE_URL + dept +
'/Scolarite/Notes/groups_view?with_codes=1&format=json&formsemestre_id=' + sem, {
@ -56,8 +56,8 @@ class Bulletin extends Component {
}
getData() {
let dept = window.location.href.split('/')[3]
let sem = window.location.href.split('/')[5]
let dept = window.location.href.split('/')[6]
let sem = window.location.href.split('/')[8]
let BASE_URL = window.$api_url
fetch(BASE_URL + dept + '/Scolarite/Notes/formsemestre_bulletinetud?formsemestre_id=' +
sem +'&etudid=' + this.state.id +'&format=json', {
@ -135,7 +135,7 @@ class Bulletin extends Component {
{ue.module.map((mod, index) => {
return (
<tr>
<td colSpan="3">{mod.titre}</td>
<td colSpan="3">{mod.titre.replace("&apos;", "'")}</td>
<td>{mod.rang.value}/{this.state.bltn.rang.ninscrits}</td>
<td>{mod.note.min}</td>
<td>{mod.note.max}</td>

View File

@ -12,8 +12,8 @@ class Eleves extends Component {
}
componentWillMount() {
let dept = window.location.href.split('/')[3]
let sem = window.location.href.split('/')[5]
let dept = window.location.href.split('/')[6]
let sem = window.location.href.split('/')[8]
let BASE_URL = window.$api_url
fetch(BASE_URL + dept +
'/Scolarite/Notes/groups_view?with_codes=1&format=json&formsemestre_id=' + sem, {
@ -39,7 +39,7 @@ class Eleves extends Component {
{this.state.students.map((student, index) => {
return (
<div className="col-sm" key={index} id="wrapDept">
<Link to={`/${window.location.href.split('/')[3]}/Scolarite/Etudiant/${student.etudid}`}>
<Link to={`/ScoDoc/static/mobile/${window.location.href.split('/')[6]}/Scolarite/Etudiant/${student.etudid}`}>
{student.nom_disp} {student.prenom}
</Link>
</div>

View File

@ -27,7 +27,7 @@ class ScoNavBar extends Component {
<Navbar.Brand>
<img
alt="ScodocLogo"
src="https://scodoc.dev.net/ScoDoc/static/icons/scologo_img.png"
src="/ScoDoc/static/icons/scologo_img.png"
width="20"
height="30"
className="d-inline-block align-top"
@ -37,7 +37,7 @@ class ScoNavBar extends Component {
<Navbar.Toggle aria-controls="basic-navbar-nav" />
<Navbar.Collapse id="basic-navbar-nav">
<Nav className="ml-auto">
<Link to="/">
<Link to="/ScoDoc/static/mobile/">
<Button variant="primary" onClick={() => {this.logout()}}>Déconnexion</Button>
</Link>
</Nav>

View File

@ -22,7 +22,7 @@ class Scolarite extends Component {
} */
componentWillMount() {
let dept = window.location.href.split('/')[3]
let dept = window.location.href.split('/')[6]
let BASE_URL = window.$api_url
fetch(BASE_URL + dept + '/Scolarite/Notes/formsemestre_list?format=json', {
method: 'GET',
@ -59,20 +59,19 @@ class Scolarite extends Component {
<Card>
<Card.Header>
<Accordion.Toggle as={Button} variant="link" eventKey="0">
Choix du semestre
Semestres en cours
</Accordion.Toggle>
</Card.Header>
<Accordion.Collapse eventKey="0">
<Card.Body>
{this.state.semestres.map((sem, index) => {
if(sem.etat === "1")
return (
<div className="col-12" key={index} id="wrapDept">
{sem.etat !== 0 ?
<Link to={`/${window.location.href.split('/')[3]}/Scolarite/${sem.formsemestre_id}/GestionSem`}>
<Link to={`/ScoDoc/static/mobile/${window.location.href.split('/')[6]}/Scolarite/${sem.formsemestre_id}/GestionSem`}>
<h3>{sem.titre} [{sem.modalite}]</h3>
<p>Semestre {sem.semestre_id} - Année {sem.anneescolaire} [{sem.date_debut} - {sem.date_fin}]</p>
</Link>
: null}
</div>
)
})}
@ -81,25 +80,39 @@ class Scolarite extends Component {
</Card>
<Card>
<Card.Header>
<Accordion.Toggle as={Button} variant="link" eventKey="1">
Recherche étudiant
<Accordion.Toggle as={Button} variant="link" eventKey="0">
Semestres passés
</Accordion.Toggle>
</Card.Header>
<Accordion.Collapse eventKey="1">
<Card.Body>
{this.state.semestres.map((sem, index) => {
if(sem.etat !== "1")
return (
<div className="col-12" key={index} id="wrapDept">
<Link to={`/ScoDoc/static/mobile/${window.location.href.split('/')[6]}/Scolarite/${sem.formsemestre_id}/GestionSem`}>
<h3>{sem.titre} [{sem.modalite}]</h3>
<p>Semestre {sem.semestre_id} - Année {sem.anneescolaire} [{sem.date_debut} - {sem.date_fin}]</p>
</Link>
</div>
)
})}
</Card.Body>
</Accordion.Collapse>
</Card>
<Card>
<Card.Header>
<Accordion.Toggle as={Button} variant="link" eventKey="2">
Recherche étudiant
</Accordion.Toggle>
</Card.Header>
<Accordion.Collapse eventKey="2">
<Card.Body>
<SearchStudent />
</Card.Body>
</Accordion.Collapse>
</Card>
</Accordion>
<footer className="fixed-bottom">
<div style={{background: "#cccccc", padding: "5px"}}>
<Link to="/">
<Button type="button" className="btn waves-effect waves-light btn-primary">Retour au choix de département</Button>
</Link>
</div>
</footer>
</div>
);
}

View File

@ -21,7 +21,7 @@ class SearchStudent extends Component {
}
searchStudent() {
let dept = window.location.href.split('/')[3]
let dept = window.location.href.split('/')[6]
let BASE_URL = window.$api_url
fetch(BASE_URL + dept +
'/Scolarite/Notes/search_etud_by_name?term=' + this.state.search +'&format=json', {
@ -59,7 +59,7 @@ class SearchStudent extends Component {
{this.state.students.map((student, index) => {
return (
<Row id="wrapDept">
<Link to={`/${window.location.href.split('/')[3]}/Scolarite/Etudiant/${student.value}`}>
<Link to={`/ScoDoc/static/mobile/${window.location.href.split('/')[6]}/Scolarite/Etudiant/${student.value}`}>
<span>{student.label}</span>
</Link>
</Row>

View File

@ -5,7 +5,7 @@ import reportWebVitals from './reportWebVitals';
import Main from "./main";
import 'bootstrap/dist/css/bootstrap.min.css'
window.$api_url = 'https://scodoc.dev.net/ScoDoc/' // Global variable
window.$api_url = '/ScoDoc/' // Global variable
ReactDOM.render(
<BrowserRouter>

626
src/json/bltn.json Normal file
View File

@ -0,0 +1,626 @@
{
"rang": {
"ninscrits": 52,
"value": "1"
},
"etape_apo2": "",
"etape_apo3": "",
"etape_apo4": "",
"etudiant": {
"nom": "BOLANO",
"prenom": "Roberto",
"sexe": "M.",
"code_ine": "",
"etudid": "EID9860",
"code_nip": "123456789",
"email": "roberto@santateresa.mx",
"photo_url": "\/ScoDoc\/static\/photos\/F68\/RT_EID29960.h90.jpg"
},
"bonus_sport_culture": {
"value": 0
},
"absences": {
"nbabsjust": 0,
"nbabs": 1
},
"decision": {
"etat": "I",
"code": "ADM",
"compense_formsemestre_id" : "SEM12345"
},
"note": {
"max": "15.51",
"moy": "10.80",
"value": "15.51",
"min": "07.29"
},
"etudid": "EID9860",
"decision_ue": [
{
"acronyme": "UE11",
"code": "ADM",
"ects": "16.0",
"titre": "D\u00e9couverte m\u00e9tiers",
"numero": "11",
"ue_id": "UE21456"
},
{
"acronyme": "UE12",
"code": "ADM",
"ects": "14.0",
"titre": "Mise \u00e0 niveau des comp\u00e9tences transversales et scientifiques",
"numero": "12",
"ue_id": "UE21478"
}
],
"ue_capitalisee": [
],
"publie": 1,
"autorisation_inscription": [
{
"semestre_id": 2
}
],
"appreciation": [
],
"note_max": {
"value": 20
},
"date": "2014-07-12T17:38:47.693262",
"rang_group": [
{
"ninscrits": 26,
"value": "1",
"group_type": "TD",
"group_name": "B"
},
{
"ninscrits": 13,
"value": "1",
"group_type": "TP",
"group_name": "B1"
},
{
"ninscrits": 4,
"value": "1",
"group_type": "G",
"group_name": "G4"
},
{
"ninscrits": "",
"value": "",
"group_type": "tutorat",
"group_name": ""
},
{
"ninscrits": "",
"value": "",
"group_type": "App",
"group_name": ""
},
{
"ninscrits": "",
"value": "",
"group_type": "sport",
"group_name": ""
}
],
"formsemestre_id": "SEM12345",
"etape_apo": "V1RT",
"ue": [
{
"acronyme": "UE11",
"rang": "1",
"code_apogee": "VRTU11",
"ects": "16",
"numero": "11",
"note": {
"max": "16.17",
"value": "16.17",
"min": "06.56"
},
"module": [
{
"coefficient": 3,
"rang": {
"value": "1"
},
"code": "M1101",
"code_apogee": "VRT1101",
"numero": 1101,
"note": {
"moy": "08.94",
"nb_notes": 51,
"nb_missing": 0,
"max": "19.18",
"min": "03.70",
"nb_valid_evals": 3,
"value": "19.18"
},
"abbrev": "R\u00e9seaux d&apos;entreprises",
"effectif": {
"value": 51
},
"titre": "Initiation aux r\u00e9seaux d&apos;entreprises",
"evaluation": [
],
"id": "MIP27427"
},
{
"coefficient": 2,
"rang": {
"value": "2"
},
"code": "M1102",
"code_apogee": "VRT1102",
"numero": 1102,
"note": {
"moy": "12.58",
"nb_notes": 50,
"nb_missing": 1,
"max": "16.79",
"min": "02.50",
"nb_valid_evals": 2,
"value": "16.50"
},
"abbrev": "Initiation \u00e0 la t\u00e9l\u00e9phonie",
"effectif": {
"value": 51
},
"titre": "Initiation \u00e0 la t\u00e9l\u00e9phonie d&apos;entreprise",
"evaluation": [
],
"id": "MIP27437"
},
{
"coefficient": 1.5,
"rang": {
"value": "1"
},
"code": "M1103",
"code_apogee": "VRT1103",
"numero": 1103,
"note": {
"moy": "08.26",
"nb_notes": 51,
"nb_missing": 0,
"max": "13.41",
"min": "00.94",
"nb_valid_evals": 2,
"value": "13.41"
},
"abbrev": "Architecture des \u00e9quipements informatiques",
"effectif": {
"value": 51
},
"titre": "Architecture des \u00e9quipements informatiques",
"evaluation": [
],
"id": "MIP27451"
},
{
"coefficient": 2,
"rang": {
"value": "1"
},
"code": "M1104",
"code_apogee": "VRT1104",
"numero": 1104,
"note": {
"moy": "10.77",
"nb_notes": 51,
"nb_missing": 0,
"max": "17.90",
"min": "04.63",
"nb_valid_evals": 3,
"value": "17.90"
},
"abbrev": "Principe et architecture des r\u00e9seaux",
"effectif": {
"value": 51
},
"titre": "Principe et architecture des r\u00e9seaux",
"evaluation": [
],
"id": "MIP27431"
},
{
"coefficient": 2,
"rang": {
"value": "1"
},
"code": "M1105",
"code_apogee": "VRT1105",
"numero": 1105,
"note": {
"moy": "11.00",
"nb_notes": 51,
"nb_missing": 0,
"max": "17.83",
"min": "04.98",
"nb_valid_evals": 2,
"value": "17.83"
},
"abbrev": "Bases des syst\u00e8mes d&apos;exploitation",
"effectif": {
"value": 51
},
"titre": "Bases des syst\u00e8mes d&apos;exploitation",
"evaluation": [
],
"id": "MIP27433"
},
{
"coefficient": 1.5,
"rang": {
"value": "6"
},
"code": "M1106",
"code_apogee": "VRT1106",
"numero": 1106,
"note": {
"moy": "13.05",
"nb_notes": 51,
"nb_missing": 0,
"max": "17.79",
"min": "07.08",
"nb_valid_evals": 1,
"value": "16.25"
},
"abbrev": "Initiation au d\u00e9veloppement Web",
"effectif": {
"value": 51
},
"titre": "Initiation au d\u00e9veloppement Web",
"evaluation": [
],
"id": "MIP27449"
},
{
"coefficient": 1.5,
"rang": {
"value": "9"
},
"code": "M1107",
"code_apogee": "VRT1107",
"numero": 1107,
"note": {
"moy": "09.36",
"nb_notes": 51,
"nb_missing": 0,
"max": "14.21",
"min": "04.17",
"nb_valid_evals": 3,
"value": "11.66"
},
"abbrev": "Initiation \u00e0 la mesure du signal",
"effectif": {
"value": 51
},
"titre": "Initiation \u00e0 la mesure du signal",
"evaluation": [
],
"id": "MIP27440"
},
{
"coefficient": 1.5,
"rang": {
"value": "7"
},
"code": "M1108",
"code_apogee": "VRT1108",
"numero": 1108,
"note": {
"moy": "10.49",
"nb_notes": 51,
"nb_missing": 0,
"max": "16.31",
"min": "05.39",
"nb_valid_evals": 4,
"value": "13.22"
},
"abbrev": "Acquisition et codage de l&apos;information",
"effectif": {
"value": 51
},
"titre": "Acquisition et codage de l&apos;information",
"evaluation": [
],
"id": "MIP27453"
},
{
"coefficient": 1,
"rang": {
"value": "4 ex"
},
"code": "M1109",
"code_apogee": "VRT1109",
"numero": 1109,
"note": {
"moy": "12.46",
"nb_notes": 51,
"nb_missing": 0,
"max": "16.00",
"min": "09.00",
"nb_valid_evals": 1,
"value": "15.00"
},
"abbrev": "PT : Recherche documentaire",
"effectif": {
"value": 51
},
"titre": "PT : Recherche documentaire",
"evaluation": [
],
"id": "MIP27444"
}
],
"effectif": "51",
"titre": "D\u00e9couverte m\u00e9tiers",
"id": "UE21456"
},
{
"acronyme": "UE12",
"rang": "5",
"code_apogee": "VRTU12",
"ects": "14",
"numero": "12",
"note": {
"max": "15.20",
"value": "14.63",
"min": "07.94"
},
"module": [
{
"coefficient": 2,
"rang": {
"value": "3 ex"
},
"code": "M1201",
"code_apogee": "VRT1201",
"numero": 10,
"note": {
"moy": "13.02",
"nb_notes": 51,
"nb_missing": 0,
"max": "16.00",
"min": "10.00",
"nb_valid_evals": 1,
"value": "14.00"
},
"abbrev": "Anglais",
"effectif": {
"value": 51
},
"titre": "Anglais g\u00e9n\u00e9ral de communication et initiation au vocabulaire technique",
"evaluation": [
],
"id": "MIP27430"
},
{
"coefficient": 2,
"rang": {
"value": "16 ex"
},
"code": "M1202",
"code_apogee": "VRT1202",
"numero": 20,
"note": {
"moy": "12.74",
"nb_notes": 51,
"nb_missing": 0,
"max": "17.75",
"min": "04.00",
"nb_valid_evals": 2,
"value": "14.00"
},
"abbrev": "Expression",
"effectif": {
"value": 51
},
"titre": "EC: \u00c9l\u00e9ments fondamentaux de la communication",
"evaluation": [
],
"id": "MIP27439"
},
{
"coefficient": 1,
"rang": {
"value": "1 ex"
},
"code": "M1203",
"code_apogee": "VRT1203",
"numero": 30,
"note": {
"moy": "NA",
"nb_notes": 0,
"nb_missing": 51,
"max": "-",
"min": "-",
"nb_valid_evals": 0,
"value": "-"
},
"abbrev": "PPP: Connaitre son champ d&apos;activit\u00e9",
"effectif": {
"value": 51
},
"titre": "PPP: Connaitre son champ d&apos;activit\u00e9",
"evaluation": [
],
"id": "MIP27436"
},
{
"coefficient": 2,
"rang": {
"value": "6"
},
"code": "M1204",
"code_apogee": "VRT1204",
"numero": 40,
"note": {
"moy": "10.66",
"nb_notes": 51,
"nb_missing": 0,
"max": "16.35",
"min": "05.73",
"nb_valid_evals": 8,
"value": "14.09"
},
"abbrev": "Mise \u00e0 niveau en num\u00e9ration et calculs",
"effectif": {
"value": 51
},
"titre": "Mise \u00e0 niveau en num\u00e9ration et calculs",
"evaluation": [
],
"id": "MIP27454"
},
{
"coefficient": 2,
"rang": {
"value": "23"
},
"code": "M1205",
"code_apogee": "VRT1205",
"numero": 50,
"note": {
"moy": "10.37",
"nb_notes": 51,
"nb_missing": 0,
"max": "18.69",
"min": "05.01",
"nb_valid_evals": 5,
"value": "10.58"
},
"abbrev": "Connaissances et Outils pour le signal",
"effectif": {
"value": 51
},
"titre": "Harmonisation des connaissances et des outils pour le signal",
"evaluation": [
],
"id": "MIP27432"
},
{
"coefficient": 2,
"rang": {
"value": "3 ex"
},
"code": "M1206",
"code_apogee": "VRT1206",
"numero": 60,
"note": {
"moy": "11.22",
"nb_notes": 51,
"nb_missing": 0,
"max": "16.76",
"min": "03.91",
"nb_valid_evals": 6,
"value": "15.12"
},
"abbrev": "Circuits \u00e9lectroniques : mise \u00e0 niveau",
"effectif": {
"value": 51
},
"titre": "Circuits \u00e9lectroniques : mise \u00e0 niveau",
"evaluation": [
],
"id": "MIP27435"
},
{
"coefficient": 2,
"rang": {
"value": "1 ex"
},
"code": "M1207",
"code_apogee": "VRT1207",
"numero": 70,
"note": {
"moy": "08.39",
"nb_notes": 51,
"nb_missing": 0,
"max": "20.00",
"min": "00.00",
"nb_valid_evals": 1,
"value": "20.00"
},
"abbrev": "Programmation 1",
"effectif": {
"value": 51
},
"titre": "Bases de la programmation",
"evaluation": [
],
"id": "MIP27445"
},
{
"coefficient": 1,
"rang": {
"value": "1 ex"
},
"code": "M1208",
"code_apogee": "VRT1208",
"numero": 80,
"note": {
"moy": "NA",
"nb_notes": 0,
"nb_missing": 51,
"max": "-",
"min": "-",
"nb_valid_evals": 0,
"value": "-"
},
"abbrev": "M\u00e9thodologie Universitaire 1",
"effectif": {
"value": 51
},
"titre": "Adaptation et m\u00e9thodologie pour la r\u00e9ussite Universitaire",
"evaluation": [
],
"id": "MIP27434"
}
],
"effectif": "51",
"titre": "Mise \u00e0 niveau des comp\u00e9tences transversales et scientifiques",
"id": "UE21478"
},
{
"acronyme": "UE 1S",
"rang": "1 ex",
"code_apogee": "",
"ects": "0",
"numero": "13",
"note": {
"max": "00.00",
"value": "00.00",
"min": "00.00"
},
"module": [
],
"effectif": "51",
"titre": "Sport &amp;amp; Culture",
"id": "UE23716"
}
],
"situation": "Inscrit le 02\/09\/2015. D\u00e9cision jury: Valid\u00e9. UE acquises: UE11, UE12. Autoris\u00e9 \u00e0 s&apos;inscrire en S2."
}

View File

@ -9,10 +9,10 @@ import Etudiant from "./ScoDoc/Etudiant";
const Main = () => {
return (
<Switch>
<Route exact path='/' component={Login}/>
<Route exact path='/:DEPT/Scolarite' component={Scolarite}/>
<Route exact path='/:DEPT/Scolarite/Etudiant/:EtudId' component={Etudiant}/>
<Route exact path='/:DEPT/Scolarite/:SEM/GestionSem' component={GestionSemestre}/>
<Route exact path='/ScoDoc/static/mobile' component={Login}/>
<Route exact path='/ScoDoc/static/mobile/:DEPT/Scolarite' component={Scolarite}/>
<Route exact path='/ScoDoc/static/mobile/:DEPT/Scolarite/Etudiant/:EtudId' component={Etudiant}/>
<Route exact path='/ScoDoc/static/mobile/:DEPT/Scolarite/:SEM/GestionSem' component={GestionSemestre}/>
</Switch>
);
}