-
Absences de {this.props.name}
- {(this.state.abs.length === 0 && this.props.name !== "") &&
-
Aucune absence de l'élève
+
Absences de {this.props.name + " "}
+
+
+
+ {(this.state.abs.length === 0 && this.state.absjust.length === 0 && this.props.name !== "") &&
+
Aucune absence de l'élève
}
{this.state.abs.map((abs, index) => {
return (
-
{abs.datedmy} | {abs.matin}
- {abs.motif !== "" &&
- Motif: {abs.motif}
- } {abs.exams !== "" &&
- Exam a rattraper: {abs.exams}
- }
+
+ {abs.datedmy} | {abs.matin}
+ {abs.motif !== "" &&
+ Motif: {abs.motif}
+ } {abs.exams !== "" &&
+ Exam a rattraper: {abs.exams}
+ }
+
+
+ {abs.motif === "" &&
+
+ }
+
+
+
+ )
+ })}
+ {this.state.absjust.map((abs, index) => {
+ return (
+
+
+ {abs.datedmy} | {abs.matin}
+ {abs.motif !== "" &&
+ Motif: {abs.motif}
+ } {abs.exams !== "" &&
+ Exam a rattraper: {abs.exams}
+ }
+
+
+
+
)
})}
diff --git a/src/ScoDoc/GestionSemestre/Absences/JustAbs.js b/src/ScoDoc/GestionSemestre/Absences/JustAbs.js
new file mode 100644
index 0000000..c88662a
--- /dev/null
+++ b/src/ScoDoc/GestionSemestre/Absences/JustAbs.js
@@ -0,0 +1,115 @@
+import React, {Component} from "react";
+import {Button, Col, Form, Modal} from "react-bootstrap";
+
+class JustAbs extends Component {
+ constructor(props){
+ super(props)
+ this.state = {
+ isOpen: false,
+ etudid: "",
+ date: ""
+ }
+ }
+
+ openModal = () => this.setState({ isOpen: true });
+ closeModal = () => this.setState({ isOpen: false });
+
+ componentDidUpdate(prevProps) {
+ if (prevProps.open !== this.props.open) {
+ this.setState({etudid: this.props.etudid})
+ if (this.props.open === true) {
+ this.setState({isOpen: true})
+ }
+ // Recuperation et conversion de la date par defaut de l'absence (Format ISO demandé par les form Bootstrap)
+ let date = this.props.data.date.split("/")
+ date = new Date(date[2] + "-" + date[1] + "-" + date[0])
+ date = date.toISOString().substr(0,10);
+ this.setState({date: date})
+ }
+ }
+
+ postData(data) {
+ let dept = window.location.href.split('/')[6]
+ let BASE_URL = window.$api_url
+ fetch(BASE_URL + dept + "/Scolarite/Absences/doJustifAbsence", {
+ method: 'POST',
+ verify: false,
+ credentials: 'include',
+ headers: {'Content-Type': 'application/x-www-form-urlencoded'},
+ body: data
+ })
+ // Fermeture du modal
+ this.setState({isOpen: false})
+ }
+
+ onFormSubmit = e => {
+ // Traitement du formulaire
+ // Empeche le bouton de rediriger ou actualiser la page
+ e.preventDefault()
+ // Recuperation des valeurs
+ const formData = new FormData(e.target), formDataObj = Object.fromEntries(formData.entries())
+
+ let reqstr = "etudid=" + this.state.etudid + "&datedebut=" + this.props.data.date
+
+ if (formDataObj.hasOwnProperty('dateFin') && formDataObj['dateFin'] !== "") {
+ let dateFin = formDataObj['dateFin'].split("-")
+ dateFin = dateFin[2] + "/" + dateFin[1] + "/" + dateFin[0]
+ reqstr += "&datefin=" + dateFin
+ } else {
+ reqstr += "&datefin=" + this.props.data.date
+ } if (formDataObj.hasOwnProperty('duree')) {
+ reqstr += "&demijournee=" + formDataObj['duree']
+ } else {
+ reqstr += "&demijournee=" + this.props.data.demijournee
+ } if (formDataObj.hasOwnProperty('motif') && formDataObj['motif'] !== "") {
+ reqstr += "&description=" + formDataObj['motif']
+ }
+ this.postData(reqstr)
+ }
+
+ render() {
+ return (
+ <>
+
+
+ Suppression d'absence
+
+
+
+
+ Date début
+
+
+
+ Date fin (Optionnel)
+
+
+
+
+
+
+
+
+
+
+
+ Motif
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ )
+ }
+}
+
+export default JustAbs
\ No newline at end of file
diff --git a/src/ScoDoc/GestionSemestre/Absences/saisieAbs.js b/src/ScoDoc/GestionSemestre/Absences/saisieAbs.js
new file mode 100644
index 0000000..d7944b2
--- /dev/null
+++ b/src/ScoDoc/GestionSemestre/Absences/saisieAbs.js
@@ -0,0 +1,134 @@
+import React, {Component} from "react";
+import {Button, Col, Form, Modal} from "react-bootstrap";
+import Absences from '../Absences'
+
+class SaisieAbs extends Component {
+ constructor(props){
+ super(props)
+ this.state = {
+ isOpen: false,
+ form: {},
+ error: false,
+ etudid: ""
+ }
+ }
+
+ openModal = () => this.setState({ isOpen: true });
+ closeModal = () => this.setState({ isOpen: false });
+
+ componentDidUpdate(prevProps) {
+ if (prevProps.open !== this.props.open) {
+ this.setState({etudid: this.props.etudid})
+ if (this.props.open === true) {
+ this.setState({isOpen: true})
+ }
+ }
+ }
+
+ onFormSubmit = e => {
+ // Traitement du formulaire
+ // Empeche le bouton de rediriger ou actualiser la page
+ e.preventDefault()
+ // Recuperation des valeurs
+ const formData = new FormData(e.target), formDataObj = Object.fromEntries(formData.entries())
+
+ let reqstr = "etudid=" + this.state.etudid + "&datedebut="
+
+ if (formDataObj.hasOwnProperty('dateDebut') && formDataObj['dateDebut'] !== "") {
+ let dateDebut = formDataObj['dateDebut'].split("-")
+ dateDebut = dateDebut[2] + "/" + dateDebut[1] + "/" + dateDebut[0]
+ reqstr += dateDebut
+ if (formDataObj.hasOwnProperty('dateFin') && formDataObj['dateFin'] !== "") {
+ let dateFin = formDataObj['dateFin'].split("-")
+ dateFin = dateFin[2] + "/" + dateFin[1] + "/" + dateFin[0]
+ reqstr += "&datefin=" + dateFin
+ } else {
+ reqstr += "&datefin=" + dateDebut
+ }
+ if (formDataObj.hasOwnProperty('duree')) {
+ reqstr += "&demijournee=" + formDataObj['duree']
+ }
+ if (formDataObj.hasOwnProperty('estjust') && formDataObj.hasOwnProperty('motif') && formDataObj['motif'] !== "") {
+ reqstr += "&estjust=True&description=" + formDataObj['motif']
+ }
+ this.postData(reqstr)
+ } else {
+ this.setState({error: true})
+ }
+ }
+
+ postData(data) {
+ let dept = window.location.href.split('/')[6]
+ let BASE_URL = window.$api_url
+ fetch(BASE_URL + dept + "/Scolarite/Absences/doSignaleAbsence", {
+ method: 'POST',
+ verify: false,
+ credentials: 'include',
+ headers: {'Content-Type': 'application/x-www-form-urlencoded'},
+ body: data
+ })
+ .then(response => {
+ if (response.status === 200) {
+ // Fermeture du modal
+ this.closeModal()
+ }
+ });
+ }
+
+ render() {
+ return (
+ <>
+
+
+ Saisie d'absence
+
+
+
+ {this.state.error &&
+ Erreur: La date de début ne doit pas être vide
+ }
+
+
+ Date début
+
+
+
+ Date fin (Optionnel)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Motif
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ )
+ }
+}
+
+export default SaisieAbs
\ No newline at end of file
diff --git a/src/ScoDoc/GestionSemestre/Absences/supprAbs.js b/src/ScoDoc/GestionSemestre/Absences/supprAbs.js
new file mode 100644
index 0000000..dfc0918
--- /dev/null
+++ b/src/ScoDoc/GestionSemestre/Absences/supprAbs.js
@@ -0,0 +1,61 @@
+import React, {Component} from "react";
+import {Button, Modal} from "react-bootstrap";
+
+class SupprAbs extends Component {
+ constructor(props){
+ super(props)
+ this.state = {
+ isOpen: false,
+ etudid: "",
+ }
+ }
+
+ openModal = () => this.setState({ isOpen: true });
+ closeModal = () => this.setState({ isOpen: false });
+
+ componentDidUpdate(prevProps) {
+ if (prevProps.open !== this.props.open) {
+ this.setState({etudid: this.props.etudid})
+ if (this.props.open === true) {
+ this.setState({isOpen: true})
+ }
+ }
+ }
+
+ postData() {
+ let dept = window.location.href.split('/')[6]
+ let BASE_URL = window.$api_url
+ let data = "datedebut=" + this.props.data.date + "&datefin=" + this.props.data.date +
+ "&demijournee=" + this.props.data.demijournee + "&etudid=" + this.state.etudid
+ fetch(BASE_URL + dept + "/Scolarite/Absences/doAnnuleAbsence", {
+ method: 'POST',
+ verify: false,
+ credentials: 'include',
+ headers: {'Content-Type': 'application/x-www-form-urlencoded'},
+ body: data
+ })
+ // Fermeture du modal
+ this.setState({isOpen: false})
+ }
+
+ render() {
+ return (
+ <>
+
+
+ Suppression d'absence
+
+
+ Etes-vous sûr.e de vouloir supprimer cette absence ?
+
+
+
+
+
+
+ >
+ )
+ }
+}
+
+export default SupprAbs
\ No newline at end of file
diff --git a/src/ScoDoc/GestionSemestre/Accueil.js b/src/ScoDoc/GestionSemestre/Accueil.js
index 8c1019b..122337d 100644
--- a/src/ScoDoc/GestionSemestre/Accueil.js
+++ b/src/ScoDoc/GestionSemestre/Accueil.js
@@ -6,7 +6,6 @@ class Accueil extends Component {
super(props);
this.state = {
semestre: {},
- students: [],
};
}
diff --git a/src/ScoDoc/GestionSemestre/Bulletin.js b/src/ScoDoc/GestionSemestre/Bulletin.js
index a5622be..5cab824 100644
--- a/src/ScoDoc/GestionSemestre/Bulletin.js
+++ b/src/ScoDoc/GestionSemestre/Bulletin.js
@@ -1,5 +1,4 @@
import React, {Component} from "react";
-import Select from "react-select";
import {Table, Button, Dropdown} from "react-bootstrap"
import '../Style.css'
@@ -12,21 +11,6 @@ class Bulletin extends Component {
loaded: false
};
this.getData = this.getData.bind(this);
- this.getJsonData = this.getJsonData.bind(this);
- }
-
- getJsonData () {
- this.setState({bltn: require('..\\..\\json\\bltn.json')}, () => {
- let ls = {}
- for (let elm in this.state.bltn.decision_ue) {
- elm = this.state.bltn.decision_ue[elm]
- ls[elm.acronyme] = elm.titre
- }
- this.setState({datue: ls}, () => {
- this.setState({loaded: true})
- })
- })
-
}
getData() {
@@ -45,13 +29,16 @@ class Bulletin extends Component {
status: response.status
})
).then(res => {
+ // Recuperation des données du bulletin
this.setState({ bltn: res.data }, () => {
+ // Recuperation d'un tableau CodeUE | NomUE
let ls = {}
for (let elm in this.state.bltn.decision_ue) {
elm = this.state.bltn.decision_ue[elm]
ls[elm.acronyme] = elm.titre
}
this.setState({datue: ls}, () => {
+ // Marquage du bulletin comme "chargé"
this.setState({loaded: true})
})
})
@@ -59,6 +46,7 @@ class Bulletin extends Component {
);
}
+ // Recuperation du bulletin au format PDF
getPdf() {
let BASE_URL = window.$api_url
let dept = window.location.href.split('/')[6]
@@ -76,12 +64,14 @@ class Bulletin extends Component {
});
}
+ // Recuperation des données en cas de changement de props (dans notre cas, changement d'élève)
componentDidUpdate(prevProps) {
if (prevProps.id !== this.props.id) {
this.getData();
}
}
+ // Recuperation des données lors du chargement de la page si un étudiant est selectionné
componentDidMount() {
if (this.props.id !== "") {this.getData()}
}
diff --git a/src/ScoDoc/GestionSemestre/Eleves.js b/src/ScoDoc/GestionSemestre/Eleves.js
index 8085f83..50ac529 100644
--- a/src/ScoDoc/GestionSemestre/Eleves.js
+++ b/src/ScoDoc/GestionSemestre/Eleves.js
@@ -1,5 +1,4 @@
import React, {Component} from "react";
-import {Row, Col} from "react-bootstrap"
import '../Style.css'
import {Link} from "react-router-dom";
@@ -7,6 +6,7 @@ class Eleves extends Component {
constructor(props) {
super(props);
this.state = {
+ // Liste des élèves inscrits au semestre
students: [],
};
}
@@ -22,11 +22,16 @@ class Eleves extends Component {
credentials: 'include',
})
.then(response =>
+ // Traitement des données JSON
response.json().then(data => ({
data: data,
})
).then(res => {
- this.setState({ students: res.data});
+ // Gestion des données sous forme de tableau a deux colonnes
+ const dat = res.data.map((x,i) => {
+ return i % 2 === 0 ? res.data.slice(i, i+2) : null;
+ }).filter(x => x != null);
+ this.setState({ students: dat});
}));
}
@@ -35,17 +40,30 @@ class Eleves extends Component {
Liste des élèves
-
- {this.state.students.map((student, index) => {
- return (
-
-
- {student.nom_disp} {student.prenom}
-
-
- )
- },)}
-
+ {this.state.students.map((students, index) => {
+ // Creation du tableau de deux colonnes
+ return (
+
+ {students.map((etud, index) => {
+ return (
+
+
+ {/* Recuperation de la photo de l'etudiant */}
+
{' '}
+ {etud.nom_disp} {etud.prenom}
+
+
+ )
+ })}
+
+ )
+ })}
)
diff --git a/src/ScoDoc/Login.js b/src/ScoDoc/Login.js
index 9dee240..384b870 100644
--- a/src/ScoDoc/Login.js
+++ b/src/ScoDoc/Login.js
@@ -1,6 +1,5 @@
-import React, {Component, useState} from "react";
+import React, {Component} from "react";
import { isMobile } from 'react-device-detect';
-import {Modal, Button} from 'react-bootstrap'
import './Style.css'
import ChoixDept from "./ChoixDept";
import ScoNavBar from "./ScoNavBar";
diff --git a/src/ScoDoc/ScoNavBar.js b/src/ScoDoc/ScoNavBar.js
index 548ab40..369594a 100644
--- a/src/ScoDoc/ScoNavBar.js
+++ b/src/ScoDoc/ScoNavBar.js
@@ -7,8 +7,6 @@ class ScoNavBar extends Component {
constructor(props) {
super(props);
this.state = {
- login: {},
- semestre: {},
logout: false
};
}
diff --git a/src/ScoDoc/Scolarite.js b/src/ScoDoc/Scolarite.js
index cc53394..ac82027 100644
--- a/src/ScoDoc/Scolarite.js
+++ b/src/ScoDoc/Scolarite.js
@@ -17,10 +17,6 @@ class Scolarite extends Component {
this.getData = this.getData.bind(this);
}
- /* getJsonData () {
- return require('..\\json\\sems.json');
- } */
-
componentWillMount() {
let dept = window.location.href.split('/')[6]
let BASE_URL = window.$api_url
@@ -64,17 +60,21 @@ class Scolarite extends Component {
- {this.state.semestres.map((sem, index) => {
- if(sem.etat === "1")
- return (
-
-
-
{sem.titre} [{sem.modalite}]
-
Semestre {sem.semestre_id} - Année {sem.anneescolaire} [{sem.date_debut} - {sem.date_fin}]
-
-
- )
- })}
+
+
+ {this.state.semestres.map((sem, index) => {
+ if(sem.etat === "1")
+ return (
+
+
+
{sem.titre} [{sem.modalite}]
+
Semestre {sem.semestre_id} - Année {sem.anneescolaire} [{sem.date_debut} - {sem.date_fin}]
+
+
+ )
+ })}
+
+
diff --git a/src/ScoDoc/SearchStudent.js b/src/ScoDoc/SearchStudent.js
index 0aa07f9..86416d9 100644
--- a/src/ScoDoc/SearchStudent.js
+++ b/src/ScoDoc/SearchStudent.js
@@ -1,5 +1,5 @@
import React, {Component} from "react";
-import {Link, Redirect} from "react-router-dom";
+import {Link} from "react-router-dom";
import {Row, Col} from "react-bootstrap"
class SearchStudent extends Component {
@@ -8,7 +8,7 @@ class SearchStudent extends Component {
this.state = {
students: [],
// Status possibles:
- // 0: Vide - 1: Pas de resultat - 2: Plusieurs resultats
+ // 0: Vide - 1: Pas de resultat - 2: Un ou plusieurs resultats
search_status: 0,
};
this.handleChangeSearch = this.handleChangeSearch.bind(this)
@@ -29,20 +29,16 @@ class SearchStudent extends Component {
credentials: "include",
})
.then(response =>
- response.json().then(data => ({data: data,})
- ).then(res => {
- this.setState({ students: res.data });
- console.log(this.state.students)
- }))
- .then(res => {
- if (this.state.students.length === 0) {
- this.setState({search_status: 1, toast: true});
- } else if (this.state.students.length === 1) {
- return
- } else {
- this.setState({search_status: 2, toast: false});
- }
- })
+ response.json().then(data => ({data: data}))
+ .then(res => {
+ this.setState({ students: res.data });
+
+ if (this.state.students.length === 0) {
+ this.setState({search_status: 1, toast: true});
+ } else {
+ this.setState({search_status: 2, toast: false});
+ }
+ }))
this.setState({searched: true})
}
diff --git a/src/ScoDoc/Style.css b/src/ScoDoc/Style.css
index 404e023..247e1a6 100644
--- a/src/ScoDoc/Style.css
+++ b/src/ScoDoc/Style.css
@@ -1,5 +1,3 @@
-/* BASIC */
-
body {
font-family: "Poppins", sans-serif;
height: 100vh;
diff --git a/src/json/bltn.json b/src/json/bltn.json
deleted file mode 100644
index 273bd03..0000000
--- a/src/json/bltn.json
+++ /dev/null
@@ -1,626 +0,0 @@
-{
- "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'entreprises",
- "effectif": {
- "value": 51
- },
- "titre": "Initiation aux r\u00e9seaux d'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'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'exploitation",
- "effectif": {
- "value": 51
- },
- "titre": "Bases des syst\u00e8mes d'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'information",
- "effectif": {
- "value": 51
- },
- "titre": "Acquisition et codage de l'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'activit\u00e9",
- "effectif": {
- "value": 51
- },
- "titre": "PPP: Connaitre son champ d'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 & Culture",
- "id": "UE23716"
- }
- ],
- "situation": "Inscrit le 02\/09\/2015. D\u00e9cision jury: Valid\u00e9. UE acquises: UE11, UE12. Autoris\u00e9 \u00e0 s'inscrire en S2."
-}
\ No newline at end of file