{"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","resp","loading","resp_l","responsables","joined","concat","nomplogin","error","Spinner","animation","SaisieAbs","openModal","isOpen","closeModal","onFormSubmit","formData","FormData","formDataObj","Object","fromEntries","entries","reqstr","etudid","hasOwnProperty","dateDebut","dateFin","postData","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","groupStyles","display","alignItems","justifyContent","groupBadgeStyles","backgroundColor","borderRadius","color","fontSize","fontWeight","lineHeight","minWidth","padding","textAlign","formatGroupLabel","options","Etudiants","selectOptions","dat","x","i","slice","filter","part","new_part","partition_name","group","group_name","group_id","getStudents","handleSelectChange","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","defaulttab","defaultsel","tab","find","option","Tabs","Tab","title","Etudiant","formation","insemestre","nomprenom","photo_url","telephone","telephonemobile","email","emailperso","domicile","codepostaldomicile","villedomicile","bac","specialite","nomlycee","codepostallycee","villelycee","titreannee","groupes","pathname","Main","exact","path","component","ReactDOM","render","getElementById"],"mappings":"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","file":"static/js/main.16dd1ee7.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\nimport {Spinner} from \"react-bootstrap\";\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 resp: [],\r\n loading: true\r\n };\r\n }\r\n\r\n componentWillMount() {\r\n this.setState({loading: true})\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 // Recuperation des infos de semestre\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], resp_l: res.data[0].responsables});\r\n // Recuperation des noms complets des responsables\r\n res.data[0].responsables.map((resp) =>\r\n getJson(BASE_URL + dept + '/Scolarite/Users/user_info?format=json&user_name=' + resp)\r\n .then(res => {\r\n let joined = this.state.resp.concat(res.data.nomplogin)\r\n this.setState({resp: joined, loading: false})\r\n })\r\n .catch(error => {\r\n this.setState({resp: this.state.resp_l, loading: false})\r\n })\r\n )\r\n })\r\n\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n {this.state.loading === false ?\r\n

{this.state.semestre.titre}
\r\n Semestre {this.state.semestre.semestre_id} en {this.state.semestre.modalite}
\r\n {this.state.resp.length === 1 ? \"Responsable: (\" : \"Responsables (\"}\r\n {this.state.resp.map((resp, index) => {\r\n if (index !== this.state.resp.length-1) {return (resp + \", \")}\r\n else {return (resp + \")\")}\r\n })}\r\n

\r\n :\r\n // En cas de chargement\r\n \r\n }\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, Spinner, 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 // En cours de recuperation de données\r\n loading: false\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.setState({loading: true})\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, loading: false}));\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.loading === true &&\r\n \r\n }\r\n {(this.state.abs.length + this.state.absjust.length === 0 && this.props.name !== \"\" && this.state.loading === false) &&\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\nimport {Spinner} from \"react-bootstrap\";\r\nimport Select from \"react-select\";\r\n\r\n// CONSTANTES DE STYLE SELECT GROUP\r\nconst groupStyles = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n};\r\nconst groupBadgeStyles = {\r\n backgroundColor: '#EBECF0',\r\n borderRadius: '2em',\r\n color: '#172B4D',\r\n display: 'inline-block',\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n lineHeight: '1',\r\n minWidth: 1,\r\n padding: '0.16666666666667em 0.5em',\r\n textAlign: 'center',\r\n};\r\n\r\nconst formatGroupLabel = data => (\r\n
\r\n {data.label}\r\n {data.options.length}\r\n
\r\n);\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 // Gestion du select\r\n selectOptions: [{label: \"Filtre: Aucun\", value: \"Default\"}],\r\n id: \"\",\r\n name: '',\r\n };\r\n }\r\n\r\n\r\n componentWillMount() {\r\n this.getData()\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps !== this.props) {\r\n if (this.props.students.length && this.state.students.length === 0) {\r\n const dat = this.props.students.map((x,i) => {\r\n return i % 2 === 0 ? this.props.students.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\r\n /**\r\n * Recupère la liste des groupes du 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/formsemestre_partition_list?format=json&formsemestre_id=' + sem)\r\n .then(res => {\r\n // eslint-disable-next-line array-callback-return\r\n res.data.map((part) => {\r\n // Ajout de la catégorie\r\n let new_part = {label: part.partition_name, options: []}\r\n // Ajout des groupes\r\n // eslint-disable-next-line array-callback-return\r\n part.group.map((group) => {\r\n new_part.options.push({label: group.group_name, value: group.group_id})\r\n })\r\n // Ajout au state\r\n let joined = this.state.selectOptions.concat(new_part);\r\n this.setState({ selectOptions: joined})\r\n })\r\n })\r\n }\r\n\r\n /**\r\n * Recupère la liste des étudiants dans un groupe depuis l'API\r\n */\r\n getStudents() {\r\n let dept = window.location.href.split('/')[7]\r\n let group = this.state.id\r\n let BASE_URL = window.$api_url\r\n getJson(BASE_URL + dept + '/Scolarite/groups_view?with_codes=1&format=json&group_ids=' + group)\r\n .then(res => {\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 /**\r\n * Gestion des données du Select\r\n */\r\n handleSelectChange(e){\r\n this.setState({id:e.value, name:e.label}, () => {\r\n if (this.state.id !== \"Default\") {this.getStudents()}\r\n else {\r\n if (this.props.students.length) {\r\n const dat = this.props.students.map((x,i) => {\r\n return i % 2 === 0 ? this.props.students.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 }\r\n\r\n render() {\r\n return (\r\n
\r\n

Liste des étudiants

\r\n
\r\n \r\n {this.state.students.length !== 0 ?\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\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Etudiants","import React, {Component} from \"react\";\r\nimport {Table, Button, Dropdown, Spinner} 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 loading: 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, loading: false})\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('/')[7]\r\n let sem = window.location.href.split('/')[9]\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.setState({loading: true})\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.loading === true && this.state.loaded === false &&\r\n \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 {this.state.bltn.hasOwnProperty('rang') &&\r\n Classement: {this.state.bltn.rang.value}/{this.state.bltn.rang.ninscrits}\r\n }\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 {ue.hasOwnProperty('rang') &&\r\n Classement: {ue.rang}/{this.state.bltn.rang.ninscrits}\r\n }\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 {mod.hasOwnProperty('rang') &&\r\n Classement: {mod.rang.value}/{this.state.bltn.rang.ninscrits}\r\n }\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 defaulttab: \"Accueil\",\r\n defaultsel: \"\"\r\n }\r\n }\r\n\r\n componentWillMount() {\r\n this.getData()\r\n\r\n if (this.props.location.tab) {\r\n this.setState({defaulttab: this.props.location.tab, defaultsel: this.props.location.etudid,\r\n id: this.props.location.etudid, name: this.state.selectOptions.find(option => option.value === this.state.id)\r\n })\r\n }\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 this.setState({students: res.data})\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