{"version":3,"sources":["reportWebVitals.js","ScoDoc/ScoNavBar.js","ScoDoc/Request.js","ScoDoc/SearchStudent.js","ScoDoc/Scolarite.js","ScoDoc/ChoixDept.js","ScoDoc/Login.js","ScoDoc/GestionSemestre/Accueil.js","ScoDoc/GestionSemestre/Absences/SaisieAbs.js","ScoDoc/GestionSemestre/Absences/SupprAbs.js","ScoDoc/GestionSemestre/Absences/JustAbs.js","ScoDoc/GestionSemestre/Absences.js","ScoDoc/GestionSemestre/Etudiants.js","ScoDoc/GestionSemestre/Bulletin.js","ScoDoc/GestionSemestre.js","ScoDoc/Etudiant.js","main.js","index.js"],"names":["reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ScoNavBar","props","state","logout","BASE_URL","window","$api_url","fetch","res","setState","catch","console","log","Navbar","bg","expand","Container","Brand","href","alt","src","width","height","className","Toggle","aria-controls","Collapse","id","Nav","Link","Button","variant","onClick","this","push","to","Component","get","url","method","verify","credentials","getJson","response","json","data","post","headers","body","SearchStudent","students","search_status","handleChangeSearch","bind","searchStudent","e","search","target","value","dept","location","split","length","toast","searched","Col","map","student","Row","label","type","onChange","result","Scolarite","dismissToast","semestres","getData","Accordion","defaultActiveKey","Card","Header","as","eventKey","Body","sem","index","etat","formsemestre_id","titre","modalite","semestre_id","anneescolaire","date_debut","date_fin","ChoixDept","depts","Login","login","pass","status","handleChangeLogin","handleChangePass","checkCredentials","preventDefault","btoa","getLogin","isMobile","document","cookie","placeholder","Accueil","semestre","responsables","SaisieAbs","openModal","isOpen","closeModal","onFormSubmit","formData","FormData","formDataObj","Object","fromEntries","entries","reqstr","etudid","hasOwnProperty","dateDebut","dateFin","postData","error","form","prevProps","open","Modal","show","onHide","closeButton","Title","Form","onSubmit","Group","ControlId","Label","Control","name","Check","inline","rows","Footer","SupprAbs","date","demijournee","JustAbs","Date","toISOString","substr","defaultValue","readOnly","checked","Absences","isDelOpen","isJustOpen","abs","absjust","key","setTimeout","size","style","datedmy","matin","motif","exams","ampm","Etudiants","dat","x","i","slice","filter","etud","nom_disp","prenom","Bulletin","bltn","datue","loaded","ls","elm","decision_ue","acronyme","blob","file","URL","createObjectURL","assign","Table","responsive","colSpan","Dropdown","note","Menu","Item","min","max","rang","ninscrits","ue","module","mod","replace","code","coefficient","getPdf","GestionSemestre","selectOptions","joined","concat","options","handleSelectChange","Tabs","Tab","title","Etudiant","formation","insemestre","nomprenom","photo_url","telephone","telephonemobile","email","emailperso","domicile","codepostaldomicile","villedomicile","bac","specialite","nomlycee","codepostallycee","villelycee","titreannee","Main","exact","path","component","ReactDOM","render","getElementById"],"mappings":"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","file":"static/js/main.1a008285.chunk.js","sourcesContent":["const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React, {Component} from \"react\";\r\nimport {Nav, Navbar, Button, Container} from 'react-bootstrap'\r\nimport { Redirect } from 'react-router-dom';\r\nimport './Style.css'\r\n\r\n/** Barre de navigation */\r\nclass ScoNavBar extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n logout: false\r\n };\r\n }\r\n\r\n logout() {\r\n let BASE_URL = window.$api_url\r\n\r\n fetch(BASE_URL + \"acl_users/logout\")\r\n .then(res => {this.setState({logout: true})})\r\n .catch(console.log)\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n {' '}\r\n ScoDoc\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.logout === true &&\r\n \r\n }\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default ScoNavBar","/**\r\n * Lance une requête GET a l'URL donnée en paramètre et retourne une Promise.\r\n * @param url {String} - URL de la requête\r\n * @returns {Promise}\r\n */\r\nexport function get(url) {\r\n return (\r\n fetch(url, {\r\n method: 'GET',\r\n verify: false,\r\n credentials: 'include',\r\n })\r\n )\r\n}\r\n\r\n/**\r\n * Lance une requête GET a l'URL donnée en paramètre et retourne une Promise.\r\n * Dans ce cas particulier, on ajoute un header d'authentification.\r\n * @param url {String} - URL de la requête\r\n * @param login {String} - Identifiant\r\n * @param pass {String} - Mot de passe\r\n * @returns {Promise}\r\n */\r\nexport function getLogin(url, login, pass) {\r\n return (\r\n fetch(url, {\r\n method: 'GET',\r\n verify: false,\r\n credentials: 'include',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n 'Authorization': 'Basic ' + btoa(login + \":\" + pass)\r\n },\r\n })\r\n )\r\n}\r\n\r\n/**\r\n * Lance une requête GET a l'URL donnée en paramètre et retourne les données JSON d'une Promise.\r\n * @param url {String} - URL de la requête\r\n * @returns {Promise<{data: any}>}\r\n */\r\nexport function getJson(url) {\r\n return get(url)\r\n .then(response => response.json()\r\n .then(data => ({data: data}))\r\n .then(res => {return res})\r\n );\r\n}\r\n\r\n/**\r\n * Lance une requête POST a l'URL donnée en paramètre et retourne une Promise.\r\n * @param url {String} - URL de la requête\r\n * @param data {String} - Données de la requête au format \"param1=val1¶m2=val2...\"\r\n * @returns {Promise}\r\n */\r\nexport function post(url, data) {\r\n return (\r\n fetch(url, {\r\n method: 'POST',\r\n verify: false,\r\n credentials: 'include',\r\n headers: {'Content-Type': 'application/x-www-form-urlencoded'},\r\n body: data\r\n })\r\n )\r\n}","import React, {Component} from \"react\";\r\nimport {Link} from \"react-router-dom\";\r\nimport {Row, Col} from \"react-bootstrap\"\r\nimport {getJson} from \"./Request\";\r\n\r\n/** Module de recherche d'étudiant */\r\nclass SearchStudent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n students: [],\r\n // Status possibles:\r\n // 0: Vide - 1: Pas de resultat - 2: Un ou plusieurs resultats\r\n search_status: 0,\r\n };\r\n this.handleChangeSearch = this.handleChangeSearch.bind(this)\r\n this.searchStudent = this.searchStudent.bind(this);\r\n }\r\n\r\n\r\n handleChangeSearch(e) {\r\n this.setState({ search: e.target.value });\r\n }\r\n\r\n /**\r\n * Lance une recherche de l'étudiant depuis l'API\r\n * @param search {String} - Texte recherché\r\n */\r\n searchStudent(search) {\r\n let dept = window.location.href.split('/')[7]\r\n let BASE_URL = window.$api_url\r\n getJson(BASE_URL + dept + '/Scolarite/Notes/search_etud_by_name?term=' + search +'&format=json')\r\n .then(res => {\r\n this.setState({ students: res.data });\r\n if (this.state.students.length === 0) {\r\n this.setState({search_status: 1, toast: true});\r\n } else {\r\n this.setState({search_status: 2, toast: false});\r\n }\r\n })\r\n this.setState({searched: true})\r\n }\r\n\r\n /**\r\n * Presentation du résultat\r\n * @returns {JSX.Element} - Resultat au format JSX\r\n */\r\n result() {\r\n if (this.state.toast === true) {\r\n return (\r\n
\r\n Aucun étudiant trouvé\r\n
\r\n )\r\n } else if (this.state.search_status === 2) {\r\n return (\r\n \r\n {this.state.students.map((student) => {\r\n return (\r\n \r\n \r\n {student.label}\r\n \r\n \r\n )\r\n })}\r\n \r\n )\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n {this.result()}\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default SearchStudent","import React, {Component} from \"react\";\r\nimport {Link} from \"react-router-dom\";\r\nimport './Style.css'\r\nimport ScoNavBar from \"./ScoNavBar\";\r\nimport SearchStudent from './SearchStudent'\r\nimport {Accordion, Card, Button} from 'react-bootstrap'\r\nimport {getJson} from \"./Request\";\r\n\r\n/** Page de choix du semestre */\r\nclass Scolarite extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n semestres: [],\r\n students: [],\r\n toast: false\r\n };\r\n this.dismissToast = this.dismissToast.bind(this);\r\n }\r\n\r\n componentWillMount() {\r\n this.getData()\r\n }\r\n\r\n /**\r\n * Recupère la liste des semestres depuis l'API\r\n */\r\n getData () {\r\n let dept = window.location.href.split('/')[7]\r\n let BASE_URL = window.$api_url\r\n getJson(BASE_URL + dept + '/Scolarite/Notes/formsemestre_list?format=json')\r\n .then(res => {\r\n this.setState({ semestres: res.data });\r\n })\r\n }\r\n\r\n dismissToast = () => this.setState({toast: false})\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n

Scolarité

\r\n
\r\n\r\n \r\n \r\n \r\n \r\n Semestres en cours\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {this.state.semestres.map((sem, index) => {\r\n if (sem.etat === \"1\") {\r\n return (\r\n
\r\n \r\n

{sem.titre} [{sem.modalite}]

\r\n

Semestre {sem.semestre_id} - Année {sem.anneescolaire} [{sem.date_debut} - {sem.date_fin}]

\r\n \r\n
\r\n )\r\n }\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n Semestres passés\r\n \r\n \r\n \r\n \r\n {this.state.semestres.map((sem, index) => {\r\n if (sem.etat !== \"1\") {\r\n return (\r\n
\r\n \r\n

{sem.titre} [{sem.modalite}]

\r\n

Semestre {sem.semestre_id} - Année {sem.anneescolaire} [{sem.date_debut} - {sem.date_fin}]

\r\n \r\n
\r\n )\r\n }\r\n })}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n Recherche étudiant\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Scolarite;","import React, {Component} from \"react\";\r\nimport {Link} from \"react-router-dom\";\r\nimport './Style.css'\r\nimport {getJson} from './Request'\r\n\r\n/** Page de choix du département */\r\nclass ChoixDept extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n // Liste des départements disponibles pour l'utilisateur\r\n depts: [],\r\n };\r\n }\r\n\r\n componentWillMount() {\r\n this.getData()\r\n }\r\n\r\n /**\r\n * Recupère la liste des départements depuis l'API\r\n */\r\n getData() {\r\n let BASE_URL = window.$api_url\r\n getJson(BASE_URL + 'list_depts?format=json')\r\n .then(res => {\r\n this.setState({ depts: res.data })\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n

Choix du département

\r\n
\r\n
\r\n {this.state.depts.map((dept, index) => {\r\n return (\r\n
\r\n \r\n Département {dept}\r\n \r\n
\r\n )\r\n },)}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ChoixDept","import React, {Component} from \"react\";\r\nimport { isMobile } from 'react-device-detect';\r\nimport './Style.css'\r\nimport ChoixDept from \"./ChoixDept\";\r\nimport ScoNavBar from \"./ScoNavBar\";\r\nimport {getLogin} from \"./Request\";\r\n\r\n/** Page de Login */\r\nclass Login extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n login: \"\",\r\n pass: \"\",\r\n status: 0,\r\n };\r\n this.handleChangeLogin = this.handleChangeLogin.bind(this);\r\n this.handleChangePass = this.handleChangePass.bind(this);\r\n this.checkCredentials = this.checkCredentials.bind(this)\r\n }\r\n\r\n handleChangeLogin(e) {\r\n this.setState({ login: e.target.value });\r\n }\r\n\r\n handleChangePass(e) {\r\n this.setState({ pass: e.target.value });\r\n }\r\n\r\n /**\r\n * Verifie la validité des identifiants depuis l'API\r\n * @param e {event}\r\n */\r\n checkCredentials(e) {\r\n e.preventDefault();\r\n\r\n let login = this.state.login\r\n let pass = this.state.pass\r\n\r\n let BASE_URL = window.$api_url\r\n\r\n getLogin(BASE_URL, login, pass)\r\n .then(res => {\r\n this.setState({ status: res[\"status\"] });\r\n })\r\n .catch(console.log)\r\n }\r\n\r\n\r\n render() {\r\n return (\r\n
\r\n {!isMobile &&\r\n // TODO: Redirection mobile/desktop\r\n \r\n }\r\n {(this.state.status !== 0 && this.state.status !== 200) &&\r\n
\r\n
\r\n

{\"⚠️\"} Login ou mot de passe incorrect

\r\n
\r\n
\r\n }\r\n {document.cookie === \"\" &&\r\n
\r\n
\r\n

Connexion a ScoDoc

\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n {document.cookie !== \"\" &&\r\n \r\n }{document.cookie !== \"\" &&\r\n \r\n }\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Login","import React, {Component} from \"react\";\r\nimport '../Style.css'\r\nimport {getJson} from \"../Request\";\r\n\r\n/** Page d'accueil de la gestion du semestre */\r\nclass Accueil extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n semestre: {},\r\n };\r\n }\r\n\r\n componentWillMount() {\r\n this.getData()\r\n }\r\n\r\n /**\r\n * Recupère les données du semestre selectionné depuis l'API\r\n */\r\n getData() {\r\n let dept = window.location.href.split('/')[7]\r\n let sem = window.location.href.split('/')[9]\r\n let BASE_URL = window.$api_url\r\n getJson(BASE_URL + dept + '/Scolarite/Notes/formsemestre_list?format=json&formsemestre_id=' + sem)\r\n .then(res => {\r\n this.setState({ semestre: res.data[0]});\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n

{this.state.semestre.titre}
\r\n Semestre {this.state.semestre.semestre_id} en {this.state.semestre.modalite}
\r\n (Responsable: {this.state.semestre.responsables})

\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Accueil","import React, {Component} from \"react\";\r\nimport {Button, Col, Form, Modal} from \"react-bootstrap\";\r\nimport {post} from \"../../Request\";\r\n\r\n/** Module de saisie des absences */\r\nclass SaisieAbs extends Component {\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n isOpen: false,\r\n form: {},\r\n error: false,\r\n etudid: \"\"\r\n }\r\n }\r\n\r\n openModal = () => this.setState({ isOpen: true });\r\n closeModal = () => this.setState({ isOpen: false });\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.open !== this.props.open) {\r\n this.setState({etudid: this.props.etudid})\r\n if (this.props.open === true) {\r\n this.setState({isOpen: true})\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gestion des données du formulaire\r\n * @param e {Event}\r\n */\r\n onFormSubmit = e => {\r\n // Traitement du formulaire\r\n // Empeche le bouton de rediriger ou actualiser la page\r\n e.preventDefault()\r\n // Recuperation des valeurs\r\n const formData = new FormData(e.target), formDataObj = Object.fromEntries(formData.entries())\r\n\r\n let reqstr = \"etudid=\" + this.state.etudid + \"&datedebut=\"\r\n\r\n if (formDataObj.hasOwnProperty('dateDebut') && formDataObj['dateDebut'] !== \"\") {\r\n let dateDebut = formDataObj['dateDebut'].split(\"-\")\r\n dateDebut = dateDebut[2] + \"/\" + dateDebut[1] + \"/\" + dateDebut[0]\r\n reqstr += dateDebut\r\n if (formDataObj.hasOwnProperty('dateFin') && formDataObj['dateFin'] !== \"\") {\r\n let dateFin = formDataObj['dateFin'].split(\"-\")\r\n dateFin = dateFin[2] + \"/\" + dateFin[1] + \"/\" + dateFin[0]\r\n reqstr += \"&datefin=\" + dateFin\r\n } else {\r\n reqstr += \"&datefin=\" + dateDebut\r\n }\r\n if (formDataObj.hasOwnProperty('duree')) {\r\n reqstr += \"&demijournee=\" + formDataObj['duree']\r\n }\r\n if (formDataObj.hasOwnProperty('estjust') && formDataObj.hasOwnProperty('motif') && formDataObj['motif'] !== \"\") {\r\n reqstr += \"&estjust=True&description=\" + formDataObj['motif']\r\n }\r\n this.postData(reqstr)\r\n } else {\r\n this.setState({error: true})\r\n }\r\n }\r\n\r\n /**\r\n * Envoie une requête POST a l'API\r\n * @param data {String} - Données à envoyer sous la forme param1=val1¶m2=val2...\r\n */\r\n postData(data) {\r\n let dept = window.location.href.split('/')[7]\r\n let BASE_URL = window.$api_url\r\n post(BASE_URL + dept + \"/Scolarite/Absences/doSignaleAbsence\", data)\r\n .then(response => {\r\n if (response.status === 200) {\r\n // Fermeture du modal\r\n this.closeModal()\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n Saisie d'absence\r\n \r\n\r\n \r\n {this.state.error &&\r\n Erreur: La date de début ne doit pas être vide\r\n }\r\n
\r\n \r\n \r\n Date début\r\n \r\n \r\n \r\n Date fin (Optionnel)\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Motif\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default SaisieAbs","import React, {Component} from \"react\";\r\nimport {Button, Modal} from \"react-bootstrap\";\r\nimport {post} from \"../../Request\";\r\n\r\n/** Module de suppression des absences */\r\nclass SupprAbs extends Component {\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n isOpen: false,\r\n etudid: \"\",\r\n }\r\n }\r\n\r\n openModal = () => this.setState({ isOpen: true });\r\n closeModal = () => this.setState({ isOpen: false });\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.open !== this.props.open) {\r\n this.setState({etudid: this.props.etudid})\r\n if (this.props.open === true) {\r\n this.setState({isOpen: true})\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Envoie une requête POST a l'API\r\n * @param data {String} - Données à envoyer sous la forme param1=val1¶m2=val2...\r\n */\r\n postData() {\r\n let dept = window.location.href.split('/')[7]\r\n let BASE_URL = window.$api_url\r\n let data = \"datedebut=\" + this.props.data.date + \"&datefin=\" + this.props.data.date +\r\n \"&demijournee=\" + this.props.data.demijournee + \"&etudid=\" + this.state.etudid\r\n post(BASE_URL + dept + \"/Scolarite/Absences/doAnnuleAbsence\", data)\r\n // Fermeture du modal\r\n this.setState({isOpen: false})\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n Suppression d'absence\r\n \r\n \r\n

Etes-vous sûr.e de vouloir supprimer cette absence ?

\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default SupprAbs","import React, {Component} from \"react\";\r\nimport {Button, Col, Form, Modal} from \"react-bootstrap\";\r\nimport {post} from \"../../Request\";\r\n\r\n/** Module de justification des absences */\r\nclass JustAbs extends Component {\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n isOpen: false,\r\n etudid: \"\",\r\n date: \"\"\r\n }\r\n }\r\n\r\n openModal = () => this.setState({ isOpen: true });\r\n closeModal = () => this.setState({ isOpen: false });\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.open !== this.props.open) {\r\n this.setState({etudid: this.props.etudid})\r\n if (this.props.open === true) {\r\n this.setState({isOpen: true})\r\n }\r\n // Recuperation et conversion de la date par defaut de l'absence (Format ISO demandé par les form Bootstrap)\r\n let date = this.props.data.date.split(\"/\")\r\n date = new Date(date[2] + \"-\" + date[1] + \"-\" + date[0])\r\n date = date.toISOString().substr(0,10);\r\n this.setState({date: date})\r\n }\r\n }\r\n\r\n /**\r\n * Envoie une requête POST a l'API\r\n * @param data {String} - Données à envoyer sous la forme param1=val1¶m2=val2...\r\n */\r\n postData(data) {\r\n let dept = window.location.href.split('/')[7]\r\n let BASE_URL = window.$api_url\r\n post(BASE_URL + dept + \"/Scolarite/Absences/doJustifAbsence\", data)\r\n // Fermeture du modal\r\n this.setState({isOpen: false})\r\n }\r\n\r\n /**\r\n * Gestion des données du formulaire\r\n * @param e {Event}\r\n */\r\n onFormSubmit = e => {\r\n // Traitement du formulaire\r\n // Empeche le bouton de rediriger ou actualiser la page\r\n e.preventDefault()\r\n // Recuperation des valeurs\r\n const formData = new FormData(e.target), formDataObj = Object.fromEntries(formData.entries())\r\n\r\n let reqstr = \"etudid=\" + this.state.etudid + \"&datedebut=\" + this.props.data.date\r\n\r\n if (formDataObj.hasOwnProperty('dateFin') && formDataObj['dateFin'] !== \"\") {\r\n let dateFin = formDataObj['dateFin'].split(\"-\")\r\n dateFin = dateFin[2] + \"/\" + dateFin[1] + \"/\" + dateFin[0]\r\n reqstr += \"&datefin=\" + dateFin\r\n } else {\r\n reqstr += \"&datefin=\" + this.props.data.date\r\n } if (formDataObj.hasOwnProperty('duree')) {\r\n reqstr += \"&demijournee=\" + formDataObj['duree']\r\n } else {\r\n reqstr += \"&demijournee=\" + this.props.data.demijournee\r\n } if (formDataObj.hasOwnProperty('motif') && formDataObj['motif'] !== \"\") {\r\n reqstr += \"&description=\" + formDataObj['motif']\r\n }\r\n this.postData(reqstr)\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n Suppression d'absence\r\n \r\n \r\n
\r\n \r\n \r\n Date début\r\n \r\n \r\n \r\n Date fin (Optionnel)\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Motif\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default JustAbs","import React, {Component} from \"react\";\r\nimport {Button, Col} from 'react-bootstrap'\r\nimport '../Style.css'\r\nimport SaisieAbs from \"./Absences/SaisieAbs\";\r\nimport SupprAbs from \"./Absences/SupprAbs\";\r\nimport JustAbs from \"./Absences/JustAbs\";\r\nimport {getJson} from \"../Request\";\r\n\r\n/** Page de gestion des absences */\r\nclass Absences extends Component {\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n // Gestion des fenetres modales\r\n // Ajout d'absences\r\n isOpen: false,\r\n // Suppression\r\n isDelOpen: false,\r\n // Justification\r\n isJustOpen: false,\r\n // Données de la liste des absences\r\n abs: [],\r\n absjust: [],\r\n // Données d'une absence selectionnée\r\n data: {}\r\n }\r\n }\r\n\r\n // Recuperation des données en cas de changement de props (dans notre cas, changement d'étudiant.e)\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.id !== this.props.id) {\r\n this.getData();\r\n }\r\n }\r\n\r\n // Recuperation des données lors du chargement de la page si un étudiant est selectionné\r\n componentDidMount() {\r\n if (this.props.id !== \"\") {this.getData()}\r\n }\r\n\r\n /**\r\n * Gère l'ouverture des Modal\r\n * @param key {String} - Correspond au type de modal [isOpen, isDelOpen, isJustOpen]\r\n * @param data {Object} - Objet contenant les données à transmettre\r\n */\r\n openModal(key, data) {\r\n this.setState({[key]: true}, () => setTimeout(() => {\r\n this.setState({[key]: false})\r\n }, 500))\r\n if (data) {this.setState({data: data})}\r\n }\r\n\r\n /**\r\n * Recupère les données d'absences depuis l'API\r\n */\r\n getData() {\r\n let dept = window.location.href.split('/')[7]\r\n let BASE_URL = window.$api_url\r\n if (this.state.id !== \"\") {\r\n // Recuperation des absences non-justifiées\r\n getJson(BASE_URL + dept + \"/Scolarite/Absences/ListeAbsEtud?format=json&absjust_only=0&etudid=\" + this.props.id)\r\n .then(res => this.setState({abs: res.data}));\r\n // Recuperation des absences justifiées\r\n getJson(BASE_URL + dept + \"/Scolarite/Absences/ListeAbsEtud?format=json&absjust_only=1&etudid=\" + this.props.id)\r\n .then(res => this.setState({absjust: res.data}));\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n {this.props.id !== \"\" &&\r\n // Gestion du modal de saisie\r\n \r\n } {this.props.id !== \"\" &&\r\n // Gestion du modal de suppression\r\n \r\n } {this.props.id !== \"\" &&\r\n // Gestion du modal de justification\r\n \r\n }\r\n

Gestion des absences

\r\n {this.props.name !== \"\" &&\r\n
\r\n

Absences de {this.props.name + \" \"}\r\n \r\n \r\n

\r\n {(this.state.abs.length === 0 && this.state.absjust.length === 0 && this.props.name !== \"\") &&\r\n
Aucune absence de l'étudiant.e
\r\n }\r\n {this.state.abs.map((abs) => {\r\n return (\r\n
\r\n \r\n
{abs.datedmy} | {abs.matin}
\r\n {abs.motif !== \"\" &&\r\n Motif: {abs.motif}\r\n } {abs.exams !== \"\" &&\r\n Exam a rattraper: {abs.exams}\r\n }\r\n \r\n \r\n {abs.motif === \"\" &&\r\n \r\n }\r\n \r\n \r\n
\r\n )\r\n })}\r\n {this.state.absjust.map((abs) => {\r\n return (\r\n
\r\n \r\n
{abs.datedmy} | {abs.matin}
\r\n {abs.motif !== \"\" &&\r\n Motif: {abs.motif}\r\n } {abs.exams !== \"\" &&\r\n Exam a rattraper: {abs.exams}\r\n }\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n })}\r\n
\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Absences","import React, {Component} from \"react\";\r\nimport {LazyLoadImage} from 'react-lazy-load-image-component';\r\nimport '../Style.css'\r\nimport {Link} from \"react-router-dom\";\r\nimport {getJson} from \"../Request\";\r\n\r\n/** Page de présentation des étudiants inscrits au semestre */\r\nclass Etudiants extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n // Liste des étudiants inscrits au semestre\r\n students: [],\r\n };\r\n }\r\n\r\n componentWillMount() {\r\n this.getData()\r\n }\r\n\r\n /**\r\n * Recupère la liste des étudiants inscrits au semestre depuis l'API\r\n */\r\n getData() {\r\n let dept = window.location.href.split('/')[7]\r\n let sem = window.location.href.split('/')[9]\r\n let BASE_URL = window.$api_url\r\n getJson(BASE_URL + dept + '/Scolarite/Notes/groups_view?with_codes=1&format=json&formsemestre_id=' + sem)\r\n .then(res => {\r\n // Gestion des données sous forme de tableau a deux colonnes\r\n const dat = res.data.map((x,i) => {\r\n return i % 2 === 0 ? res.data.slice(i, i+2) : null;\r\n }).filter(x => x != null);\r\n this.setState({ students: dat});\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n

Liste des étudiants

\r\n
\r\n {this.state.students.map((students) => {\r\n // Creation du tableau de deux colonnes\r\n return (\r\n
\r\n {students.map((etud, index) => {\r\n return (\r\n
\r\n \r\n {/* Recuperation de la photo de l'etudiant */}\r\n {' '}
\r\n {etud.nom_disp} {etud.prenom}\r\n \r\n
\r\n )\r\n })}\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Etudiants","import React, {Component} from \"react\";\r\nimport {Table, Button, Dropdown} from \"react-bootstrap\"\r\nimport '../Style.css'\r\nimport {get, getJson} from \"../Request\";\r\n\r\n/** Page de présentation des bulletins étudiants */\r\nclass Bulletin extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n bltn: {},\r\n datue: {},\r\n loaded: false\r\n };\r\n this.getData = this.getData.bind(this);\r\n }\r\n\r\n /**\r\n * Recupère les données de bulletin depuis l'API\r\n */\r\n getData() {\r\n let dept = window.location.href.split('/')[7]\r\n let sem = window.location.href.split('/')[9]\r\n let BASE_URL = window.$api_url\r\n getJson(BASE_URL + dept + '/Scolarite/Notes/formsemestre_bulletinetud?formsemestre_id=' + sem +'&etudid=' +\r\n this.props.id +'&format=json')\r\n .then(res => {\r\n // Recuperation des données du bulletin\r\n this.setState({ bltn: res.data }, () => {\r\n // Recuperation d'un tableau CodeUE | NomUE\r\n let ls = {}\r\n for (let elm in this.state.bltn.decision_ue) {\r\n elm = this.state.bltn.decision_ue[elm]\r\n ls[elm.acronyme] = elm.titre\r\n }\r\n this.setState({datue: ls}, () => {\r\n // Marquage du bulletin comme \"chargé\"\r\n this.setState({loaded: true})\r\n })\r\n })\r\n })\r\n }\r\n\r\n /**\r\n * Recupère les données de bulletin en tant que \"blob\" pour un PDF depuis l'API\r\n */\r\n getPdf() {\r\n let BASE_URL = window.$api_url\r\n let dept = window.location.href.split('/')[6]\r\n let sem = window.location.href.split('/')[8]\r\n get(BASE_URL + dept + \"/Scolarite/Notes/formsemestre_bulletinetud?formsemestre_id=\" + sem +\r\n \"&etudid=\" + this.props.id + \"&format=pdf&version=selectedevals\")\r\n .then(res => res.blob())\r\n .then(blob => {\r\n let file = window.URL.createObjectURL(blob);\r\n window.location.assign(file);\r\n });\r\n }\r\n\r\n // Recuperation des données en cas de changement de props (dans notre cas, changement d'étudiant.e)\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.id !== this.props.id) {\r\n this.getData();\r\n }\r\n }\r\n\r\n // Recuperation des données lors du chargement de la page si un étudiant est selectionné\r\n componentDidMount() {\r\n if (this.props.id !== \"\") {this.getData()}\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n

Bulletins de notes

\r\n
\r\n {this.state.loaded === true &&\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.bltn.ue.map((ue) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {ue.module.map((mod) => {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n )\r\n })}\r\n
\r\n Note/20
Moyenne générale\r\n \r\n \r\n {this.state.bltn.note.value}\r\n \r\n\r\n \r\n Min: {this.state.bltn.note.min}\r\n Max: {this.state.bltn.note.max}\r\n Classement: {this.state.bltn.rang.value}/{this.state.bltn.rang.ninscrits}\r\n \r\n \r\n
{ue.acronyme} - {this.state.datue[ue.acronyme]}\r\n \r\n \r\n {ue.note.value}\r\n \r\n\r\n \r\n Min: {ue.note.min}\r\n Max: {ue.note.max}\r\n Classement: {ue.rang}/{this.state.bltn.rang.ninscrits}\r\n \r\n \r\n
{mod.titre.replace(\"'\", \"'\")}\r\n \r\n \r\n {mod.note.value}\r\n \r\n\r\n \r\n Min: {mod.note.min}\r\n Max: {mod.note.max}\r\n Classement: {mod.rang.value}/{this.state.bltn.rang.ninscrits}\r\n Coefficient: {mod.coefficient}\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Bulletin","import React, {Component} from \"react\";\r\nimport {Tabs, Tab} from \"react-bootstrap\"\r\nimport Accueil from \"./GestionSemestre/Accueil\";\r\nimport Absences from \"./GestionSemestre/Absences\";\r\nimport Etudiants from \"./GestionSemestre/Etudiants\";\r\nimport ScoNavBar from \"./ScoNavBar\";\r\nimport Bulletin from \"./GestionSemestre/Bulletin\";\r\nimport Select from \"react-select\";\r\nimport {getJson} from \"./Request\";\r\n\r\n/** Page de gestion du semestre */\r\nclass GestionSemestre extends Component {\r\n constructor(props){\r\n super(props)\r\n this.state = {\r\n selectOptions: [],\r\n id: \"\",\r\n name: '',\r\n }\r\n }\r\n\r\n componentWillMount() {\r\n this.getData()\r\n }\r\n\r\n /**\r\n * Recupère la liste des étudiants inscrits au semestre pour le Select depuis l'API\r\n */\r\n getData() {\r\n let dept = window.location.href.split('/')[7]\r\n let sem = window.location.href.split('/')[9]\r\n let BASE_URL = window.$api_url\r\n getJson(BASE_URL + dept + '/Scolarite/Notes/groups_view?with_codes=1&format=json&formsemestre_id=' + sem)\r\n .then(res => {\r\n // Création d'une liste pour le select\r\n res.data.map((student) => {\r\n let joined = this.state.selectOptions.concat({label: student.nom_disp + \" \" + student.prenom, value: student.etudid});\r\n this.setState({selectOptions: joined})\r\n })\r\n })\r\n }\r\n\r\n handleSelectChange(e){\r\n this.setState({id:e.value, name:e.label})\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n
\r\n {/* Selection de l'étudiant pour les sous-composants */}\r\n
\r\n Choix de l'étudiant\r\n