import React, {Component} from "react"; import {Table, Button, Dropdown, Spinner} from "react-bootstrap" import '../Style.css' import {get, getJson} from "../Request"; /** Page de présentation des bulletins étudiants */ class Bulletin extends Component { constructor(props) { super(props); this.state = { bltn: {}, datue: {}, loaded: false, loading: false }; this.getData = this.getData.bind(this); } /** * Recupère les données de bulletin depuis l'API */ getData() { let dept = window.location.href.split('/')[7] let sem = window.location.href.split('/')[9] let BASE_URL = window.$api_url getJson(BASE_URL + dept + '/Scolarite/Notes/formsemestre_bulletinetud?formsemestre_id=' + sem +'&etudid=' + this.props.id +'&format=json') .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, loading: false}) }) }) }) } /** * Recupère les données de bulletin en tant que "blob" pour un PDF depuis l'API */ getPdf() { let BASE_URL = window.$api_url let dept = window.location.href.split('/')[7] let sem = window.location.href.split('/')[9] get(BASE_URL + dept + "/Scolarite/Notes/formsemestre_bulletinetud?formsemestre_id=" + sem + "&etudid=" + this.props.id + "&format=pdf&version=selectedevals") .then(res => res.blob()) .then(blob => { let file = window.URL.createObjectURL(blob); window.location.assign(file); }); } // Recuperation des données en cas de changement de props (dans notre cas, changement d'étudiant.e) componentDidUpdate(prevProps) { if (prevProps.id !== this.props.id) { this.setState({loading: true}) this.getData(); } } // Recuperation des données lors du chargement de la page si un étudiant est selectionné componentDidMount() { if (this.props.id !== "") {this.getData()} } render() { return (

Bulletins de notes

{this.state.loading === true && this.state.loaded === false && } {this.state.loaded === true &&
{this.state.bltn.ue.map((ue) => { return ( {ue.module.map((mod) => { return ( ) })} ) })}
Note/20
Moyenne générale {this.state.bltn.note.value} Min: {this.state.bltn.note.min} Max: {this.state.bltn.note.max} Classement: {this.state.bltn.rang.value}/{this.state.bltn.rang.ninscrits}
{ue.acronyme} - {this.state.datue[ue.acronyme]} {ue.note.value} Min: {ue.note.min} Max: {ue.note.max} Classement: {ue.rang}/{this.state.bltn.rang.ninscrits}
{mod.titre.replace("'", "'")} {mod.note.value} Min: {mod.note.min} Max: {mod.note.max} Classement: {mod.rang.value}/{this.state.bltn.rang.ninscrits} Coefficient: {mod.coefficient}
}
) } } export default Bulletin