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 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 ### Dans le cadre d'un serveur web Apache

View File

@ -1,6 +1,7 @@
{ {
"name": "scodocmobile", "name": "scodocmobile",
"version": "0.1.0", "version": "0.1.0",
"homepage": "./",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@testing-library/jest-dom": "^5.11.10", "@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) => { {this.state.depts.map((dept, index) => {
return ( return (
<div id="wrapDept"> <div id="wrapDept">
<Link to={`/${dept}/Scolarite`}> <Link to={`/ScoDoc/static/mobile/${dept}/Scolarite`}>
Département {dept} Département {dept}
</Link> </Link>
</div> </div>

View File

@ -1,8 +1,6 @@
import React, {Component} from "react"; import React, {Component} from "react";
import './Style.css' import './Style.css'
import ScoNavBar from "./ScoNavBar"; import ScoNavBar from "./ScoNavBar";
import {Link} from "react-router-dom";
import {Button} from "react-bootstrap";
class Etudiant extends Component { class Etudiant extends Component {
constructor(props) { constructor(props) {
@ -16,8 +14,8 @@ class Etudiant extends Component {
} }
componentWillMount() { componentWillMount() {
let dept = window.location.href.split('/')[3] let dept = window.location.href.split('/')[6]
let etudid = window.location.href.split('/')[6] let etudid = window.location.href.split('/')[9]
let BASE_URL = window.$api_url let BASE_URL = window.$api_url
fetch(BASE_URL + dept + '/Scolarite/Notes/etud_info?format=json&etudid=' + etudid, { fetch(BASE_URL + dept + '/Scolarite/Notes/etud_info?format=json&etudid=' + etudid, {
method: 'GET', method: 'GET',
@ -31,11 +29,11 @@ class Etudiant extends Component {
}) })
).then(res => { ).then(res => {
// Utilisation de '???' en cas de données vides pour le moment} // 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] === "") { if (res.data[propName] === null || res.data[propName] === undefined || res.data[propName] === "") {
res.data[propName] = "???"; res.data[propName] = "???";
} }
} }*/
this.setState({ etud: res.data }) this.setState({ etud: res.data })
this.setState({ formation: res.data.insemestre }) this.setState({ formation: res.data.insemestre })
@ -68,32 +66,52 @@ class Etudiant extends Component {
<h1>{this.state.etud.nomprenom}</h1> <h1>{this.state.etud.nomprenom}</h1>
<img <img
alt={`${this.state.etud.nomprenom}`} 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" width="102"
height="128" height="128"
className="d-inline-block align-top" className="d-inline-block align-top"
/>{' '} />{' '}
<div id="wrapDept" className="col-sm"> <div id="wrapDept" className="col-sm">
<h3>Informations personnelles</h3> <h3>Informations personnelles</h3>
{this.state.etud.telephone !== "" || this.state.etud.telephonemobile !== "" ||
this.state.etud.email !== "" || this.state.etud.emailperso !== "" ?
<div className="col-sm"> <div className="col-sm">
<h4>Contact</h4> <h4>Contact</h4>
Téléphone: {this.state.etud.telephone}<br/> {this.state.etud.telephone !== "" && "Téléphone: " + this.state.etud.telephone}<br/>
Mobile: {this.state.etud.telephonemobile}<br/> {this.state.etud.telephonemobile !== "" && "Mobile: " + this.state.etud.telephonemobile}<br/>
Mail étudiant: {this.state.etud.email}<br/> {this.state.etud.email !== "" && "Mail étudiant: " + this.state.etud.email}<br/>
Mail perso: {this.state.etud.emailperso}<br/> {this.state.etud.emailperso !== "" && "Mail perso: " + this.state.etud.emailperso}<br/>
</div> </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"> <div className="col-sm">
<h4>Lieu de résidence</h4> <h4>Lieu de résidence</h4>
Domicile: {this.state.etud.domicile} - Domicile: {this.state.etud.domicile} -
{" " + this.state.etud.codepostaldomicile} {this.state.etud.villedomicile}<br/> {" " + this.state.etud.codepostaldomicile} {this.state.etud.villedomicile}<br/>
</div> </div>
:
<div className="col-sm">Aucune information de résidence disponible</div>
}
</div> </div>
<div id="wrapDept" className="col-sm"> <div id="wrapDept" className="col-sm">
{this.state.etud.bac !== "" || this.state.etud.specialite !== "" ?
<div className="col-sm"> <div className="col-sm">
<h4>Parcours</h4> <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/> {" " + this.state.etud.nomlycee} ({this.state.etud.codepostallycee} {this.state.etud.villelycee})<br/>
</div> </div>
: null}
</div>
: null}
{this.state.loaded === true && {this.state.loaded === true &&
<div className="col-sm"> <div className="col-sm">
<h4>Formation actuelle</h4> <h4>Formation actuelle</h4>
@ -119,13 +137,6 @@ class Etudiant extends Component {
*/} */}
</div> </div>
</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> </div>
) )
} }

View File

@ -1,10 +1,9 @@
import React, {Component} from "react"; import React, {Component} from "react";
import {Tabs, Tab, Button} from "react-bootstrap" import {Tabs, Tab} from "react-bootstrap"
import Acceuil from "./GestionSemestre/Acceuil"; import Accueil from "./GestionSemestre/Accueil";
import Absences from "./GestionSemestre/Absences"; import Absences from "./GestionSemestre/Absences";
import Eleves from "./GestionSemestre/Eleves"; import Eleves from "./GestionSemestre/Eleves";
import ScoNavBar from "./ScoNavBar"; import ScoNavBar from "./ScoNavBar";
import {Link} from "react-router-dom";
import Bulletin from "./GestionSemestre/Bulletin"; import Bulletin from "./GestionSemestre/Bulletin";
class GestionSemestre extends Component { class GestionSemestre extends Component {
@ -13,9 +12,9 @@ class GestionSemestre extends Component {
<div> <div>
<ScoNavBar/> <ScoNavBar/>
<div> <div>
<Tabs defaultActiveKey="Acceuil" id="controlled-tab-example"> <Tabs defaultActiveKey="Accueil" id="controlled-tab-example">
<Tab eventKey="Acceuil" title="Acceuil"> <Tab eventKey="Accueil" title="Acceuil">
<Acceuil /> <Accueil />
</Tab> </Tab>
<Tab eventKey="Absences" title="Absences"> <Tab eventKey="Absences" title="Absences">
<Absences /> <Absences />
@ -28,13 +27,6 @@ class GestionSemestre extends Component {
</Tab> </Tab>
</Tabs> </Tabs>
</div> </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> </div>
) )
} }

View File

@ -14,8 +14,8 @@ class Absences extends Component {
} }
componentWillMount() { componentWillMount() {
let dept = window.location.href.split('/')[3] let dept = window.location.href.split('/')[6]
let sem = window.location.href.split('/')[5] let sem = window.location.href.split('/')[8]
let BASE_URL = window.$api_url let BASE_URL = window.$api_url
fetch(BASE_URL + dept + fetch(BASE_URL + dept +
'/Scolarite/Notes/groups_view?with_codes=1&format=json&formsemestre_id=' + sem, { '/Scolarite/Notes/groups_view?with_codes=1&format=json&formsemestre_id=' + sem, {
@ -41,7 +41,7 @@ class Absences extends Component {
} }
getData() { getData() {
let dept = window.location.href.split('/')[3] let dept = window.location.href.split('/')[6]
let BASE_URL = window.$api_url let BASE_URL = window.$api_url
if (this.state.id !== "") { if (this.state.id !== "") {
fetch(BASE_URL + dept + "/Scolarite/Absences/ListeAbsEtud?format=json&etudid=" + 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 React, {Component} from "react";
import '../Style.css' import '../Style.css'
class Acceuil extends Component { class Accueil extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
@ -11,8 +11,8 @@ class Acceuil extends Component {
} }
componentWillMount() { componentWillMount() {
let dept = window.location.href.split('/')[3] let dept = window.location.href.split('/')[6]
let sem = window.location.href.split('/')[5] let sem = window.location.href.split('/')[8]
let BASE_URL = window.$api_url let BASE_URL = window.$api_url
fetch(BASE_URL + dept + fetch(BASE_URL + dept +
'/Scolarite/Notes/formsemestre_list?format=json&formsemestre_id=' + sem, { '/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() { componentWillMount() {
let dept = window.location.href.split('/')[3] let dept = window.location.href.split('/')[6]
let sem = window.location.href.split('/')[5] let sem = window.location.href.split('/')[8]
let BASE_URL = window.$api_url let BASE_URL = window.$api_url
fetch(BASE_URL + dept + fetch(BASE_URL + dept +
'/Scolarite/Notes/groups_view?with_codes=1&format=json&formsemestre_id=' + sem, { '/Scolarite/Notes/groups_view?with_codes=1&format=json&formsemestre_id=' + sem, {
@ -56,8 +56,8 @@ class Bulletin extends Component {
} }
getData() { getData() {
let dept = window.location.href.split('/')[3] let dept = window.location.href.split('/')[6]
let sem = window.location.href.split('/')[5] let sem = window.location.href.split('/')[8]
let BASE_URL = window.$api_url let BASE_URL = window.$api_url
fetch(BASE_URL + dept + '/Scolarite/Notes/formsemestre_bulletinetud?formsemestre_id=' + fetch(BASE_URL + dept + '/Scolarite/Notes/formsemestre_bulletinetud?formsemestre_id=' +
sem +'&etudid=' + this.state.id +'&format=json', { sem +'&etudid=' + this.state.id +'&format=json', {
@ -135,7 +135,7 @@ class Bulletin extends Component {
{ue.module.map((mod, index) => { {ue.module.map((mod, index) => {
return ( return (
<tr> <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.rang.value}/{this.state.bltn.rang.ninscrits}</td>
<td>{mod.note.min}</td> <td>{mod.note.min}</td>
<td>{mod.note.max}</td> <td>{mod.note.max}</td>

View File

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

View File

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

View File

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

View File

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

View File

@ -5,7 +5,7 @@ import reportWebVitals from './reportWebVitals';
import Main from "./main"; import Main from "./main";
import 'bootstrap/dist/css/bootstrap.min.css' 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( ReactDOM.render(
<BrowserRouter> <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 = () => { const Main = () => {
return ( return (
<Switch> <Switch>
<Route exact path='/' component={Login}/> <Route exact path='/ScoDoc/static/mobile' component={Login}/>
<Route exact path='/:DEPT/Scolarite' component={Scolarite}/> <Route exact path='/ScoDoc/static/mobile/:DEPT/Scolarite' component={Scolarite}/>
<Route exact path='/:DEPT/Scolarite/Etudiant/:EtudId' component={Etudiant}/> <Route exact path='/ScoDoc/static/mobile/:DEPT/Scolarite/Etudiant/:EtudId' component={Etudiant}/>
<Route exact path='/:DEPT/Scolarite/:SEM/GestionSem' component={GestionSemestre}/> <Route exact path='/ScoDoc/static/mobile/:DEPT/Scolarite/:SEM/GestionSem' component={GestionSemestre}/>
</Switch> </Switch>
); );
} }