From b403fda92978fa1be8294abc37e6a079ed6fd80b Mon Sep 17 00:00:00 2001 From: cherif Date: Sat, 3 Aug 2024 18:36:08 +0200 Subject: [PATCH] 03/08/2024 - 18h30 --- .../template_import_ue_planification.csv | 8 + .../DisplayPartnerUnite_Enseignement.js | 908 +++++++++++++++++- .../Module_Session_Planification.js | 3 - 3 files changed, 876 insertions(+), 43 deletions(-) create mode 100644 public/sample/template_import_ue_planification.csv diff --git a/public/sample/template_import_ue_planification.csv b/public/sample/template_import_ue_planification.csv new file mode 100644 index 0000000..5c76f4d --- /dev/null +++ b/public/sample/template_import_ue_planification.csv @@ -0,0 +1,8 @@ +code;titre;description;objectif;prerequis;volume_horaire;ue_code +code1_CODE_EU_01u;Titre1;desc1;obj1;prerequis1;5;CODE_EU_01u +code2_CODE_EU_01u;Titre2;desc2;obj2;prerequis2;6;CODE_EU_01u +code3_CODE_EU_01u;Titre3;desc3;obj3;prerequis3;7;CODE_EU_01u +code4_CODE_EU_01u;Titre4;desc4;obj4;prerequis4;8;CODE_EU_01u +code5_CODE_EU_01u;Titre5;desc5;obj5;prerequis5;9;CODE_EU_01u +code6_CODE_EU_01u;Titre6;desc6;obj6;prerequis6;10;CODE_EU_01u +code7_CODE_EU_01u;Titre7;desc7;obj7;prerequis7;11;CODE_EU_01u diff --git a/src/components/DisplayPartnerUnite_Enseignement.js b/src/components/DisplayPartnerUnite_Enseignement.js index ae5689f..c23d17d 100644 --- a/src/components/DisplayPartnerUnite_Enseignement.js +++ b/src/components/DisplayPartnerUnite_Enseignement.js @@ -47,10 +47,13 @@ import { PiDotsThree } from "react-icons/pi"; const DisplayPartnerUnite_Enseignement = (props) => { const history = useHistory(); - const [submenu, setsubmenu] = useState(""); + const [submenu, setsubmenu] = useState("detail_ue"); const [rowss, setRows] = useState([]); const [selectionModel, setSelectionModel] = React.useState([]); + const [selectionModel_planif, setSelectionModel_planif] = React.useState([]); + + var date_today_90j = new Date(); date_today_90j.setDate(date_today_90j.getDate() + 90); @@ -71,6 +74,51 @@ const DisplayPartnerUnite_Enseignement = (props) => { const [gridline_id, setgridline_id] = useState(""); + const [planif_gridline_id, setplanif_gridline_id] = useState(""); + + + function ExpandableCell_50({ value }) { + const [expanded, setExpanded] = React.useState(false); + + return ( + + ); + } + + + + function Display_Colunm_text({ value }) { + + return ( +
+ {value}  + +
+ ); + } + + const columns = [ { field: '_id', headerName: '_id', hide: true }, { field: 'id', headerName: 'id', hide: true }, @@ -79,12 +127,13 @@ const DisplayPartnerUnite_Enseignement = (props) => { { field: 'bloc', headerName: 'Bloc', flex: 1, hide: true, editable: false, renderCell: (params) => , }, - { field: 'domain_id', headerName: 'Domaine', flex: 1, hide: false, editable: false, renderCell: (cellValues) => { + { + field: 'domain_id', headerName: 'Domaine', flex: 1, hide: false, editable: false, renderCell: (cellValues) => { return (
{New_Get_List_Domaines_result && New_Get_List_Domaines_result.length > 0 && }
@@ -160,35 +209,111 @@ const DisplayPartnerUnite_Enseignement = (props) => { ] + const columns_planif_ue = [ + { field: 'id', headerName: 'id', hide: true }, + { field: '_id', headerName: '_id', hide: true }, + { field: 'ue_id', headerName: 'ue_id', hide: true }, + { field: 'comment', headerName: 'comment', hide: true }, - function ExpandableCell_50({ value }) { - const [expanded, setExpanded] = React.useState(false); + { field: 'code', headerName: 'Code', minWidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => , }, + { field: 'titre', headerName: 'Titre', minWidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => , }, + { field: 'description', headerName: 'Description', minWidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => , }, + { field: 'volume_horaire', headerName: 'Volume_horaire', minWidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => , }, + { field: 'prerequis', headerName: 'Prérequis', minWidth: 200, flex: 1, hide: true, editable: false, renderCell: (params) => , }, - return ( - - ); - } function handleClick_delete(event, cellValues) { @@ -219,7 +344,12 @@ const DisplayPartnerUnite_Enseignement = (props) => { setDelete_Given_UE_api("true"); setDelete_Given_UE_result(res.data.message); Getall_Parter_Unite_Enseignement(); - alert(" La mise à jour a été correctement faite.") + setdisplay_ue(""); + setadd_one_ue(""); + setsubmenu(""); + + + alert(res.data.message) } else { setDelete_Given_UE_api("false"); @@ -237,6 +367,54 @@ const DisplayPartnerUnite_Enseignement = (props) => { }) } + + function handleClick_ue_planif_line_delete(my_row_id) { + + Delete_Given_UE_Planif_Line(my_row_id); + } + + const [Delete_Given_UE_Planif_Line_api, setDelete_Given_UE_Planif_Line_api] = useState(); + const [Delete_Given_UE_Planif_Line_message, setDelete_Given_UE_Planif_Line_message] = useState(); + const [Delete_Given_UE_Planif_Line_result, setDelete_Given_UE_Planif_Line_result] = useState(); + function Delete_Given_UE_Planif_Line(local_ue_id) { + + + var form = new FormData(); + + const stored_cookie = getCookie('tokenmysypart'); + form.append("token", stored_cookie); + form.append("tab_eu_planif_id", local_ue_id); + + + var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_List_Unite_Enseignement_Planif/"; + + axios.post(myurl, form).then(res => { + //console.log(" In Delete_Given_UE_Planif_Line res.data.status = " + res.data.status); + //console.log(" In Delete_Given_UE_Planif_Line res.data.message r_class = " + res.data.message); + + if (String(res.data.status) === String("true")) { + setDelete_Given_UE_Planif_Line_api("true"); + setDelete_Given_UE_Planif_Line_result(res.data.message); + Getall_UE_Planif_data(selected_id); + alert(res.data.message); + } + else { + setDelete_Given_UE_Planif_Line_api("false"); + setDelete_Given_UE_Planif_Line_message(res.data.message); + + alert(res.data.message); + + } + + }).catch((error) => { + + console.warn('Delete_Given_UE_Planif_Line : Not good man :( mysearchtext = ' + error); + setDelete_Given_UE_Planif_Line_api("false"); + alert(" Impossible de supprimer la ligne de planification de l'UE "); + }) + } + + const myRef = useRef(null) @@ -901,6 +1079,7 @@ const DisplayPartnerUnite_Enseignement = (props) => { clean_fields(); setue_data_edit_mode(""); setdisplay_ue("1"); + setsubmenu('detail_ue'); var invoice_id = line._id; @@ -908,6 +1087,8 @@ const DisplayPartnerUnite_Enseignement = (props) => { Get_Given_Unite_Enseignement(line._id); + + if (document.getElementById('myRef')) { var divh = document.getElementById('myRef').offsetTop; window.scrollTo({ @@ -916,6 +1097,8 @@ const DisplayPartnerUnite_Enseignement = (props) => { }); } + Getall_UE_Planif_data(line._id); + } function Annule_add_new_UE() { @@ -1012,6 +1195,285 @@ const DisplayPartnerUnite_Enseignement = (props) => { }); } + async function submenu_detail() { + setsubmenu("detail_ue"); + submenu_color_management("detail_ue"); + } + + async function submenu_planif() { + setsubmenu("planification_ue"); + submenu_color_management("planification_ue"); + } + + function submenu_color_management(current_menu) { + const list_sous_menu = ["detail_ue", "planification_ue",] + + for (let i = 0; i < list_sous_menu.length; i++) { + + var sous_menu = list_sous_menu[i]; + if (String(sous_menu) !== current_menu) { + if (document.getElementById(sous_menu)) { + document.getElementById(sous_menu).style.backgroundColor = "#d8edfc"; + document.getElementById(sous_menu).style.color = "black"; + document.getElementById(sous_menu).style.fontWeight = "normal"; + } + } + + if (String(sous_menu) === "editique") { + if (document.getElementById(sous_menu)) { + document.getElementById(sous_menu).style.backgroundColor = "#6C3483"; + document.getElementById(sous_menu).style.color = "#FFFFFF"; + document.getElementById(sous_menu).style.fontWeight = "bold"; + } + } + + } + + if (document.getElementById(current_menu)) { + document.getElementById(current_menu).style.backgroundColor = "#104277"; + document.getElementById(current_menu).style.color = "white"; + document.getElementById(current_menu).style.fontWeight = "bold"; + } + + } + + const [nb_line_planif, setnb_line_planif] = useState("0"); + + + const [Getall_UE_Planif_data_api, setGetall_UE_Planif_data_api] = useState(); + const [Getall_UE_Planif_data_message, setGetall_UE_Planif_data_message] = useState(); + const [Getall_UE_Planif_data_result, setGetall_UE_Planif_data_result] = useState([]); + function Getall_UE_Planif_data(local_ue_id) { + + var form = new FormData(); + + + const stored_cookie = getCookie('tokenmysypart'); + form.append("token", stored_cookie); + form.append("ue_id", local_ue_id); + + var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_List_Unite_Enseignement_Planif_lines/"; + + setLoading(true); + + + axios.post(myurl, form).then(res => { + + setLoading(false); + if (String(res.data.status) === String("true")) { + //console.log(" In Getall_UE_Planif_data res.data.status = " + res.data.status); + //console.log(" In Getall_UE_Planif_data res.data.message r_class = " + res.data.message); + setGetall_UE_Planif_data_api("true"); + setGetall_UE_Planif_data_result(res.data.message); + + //console.log(" ##NB_Sequence = ", res.data.message.length); + setnb_line_planif(res.data.message.length); + + + } + else { + setGetall_UE_Planif_data_api("false"); + setGetall_UE_Planif_data_message(res.data.message); + alert(res.data.message) + } + + }).catch((error) => { + setLoading(false); + console.warn('Not good man :( Getall_UE_Planif_data = ', error); + setGetall_UE_Planif_data_api("false"); + alert("Impossible de récuperer la liste des séquences") + //setmyApimyApiMessage("") + }) + } + + + + const [p_detail_planif_line_code, setp_detail_planif_line_code] = useState(""); + const [p_detail_planif_line_titre, setp_detail_planif_line_titre] = useState(""); + const [p_detail_planif_line_description, setp_detail_planif_line_description] = useState(""); + const [p_detail_planif_line_prerequis, setp_detail_planif_line_prerequis] = useState(""); + const [p_detail_planif_line_volume_horaire, setp_detail_planif_line_volume_horaire] = useState(""); + const [p_detail_planif_line_comment, setp_detail_planif_line_comment] = useState(""); + + function claer_detail_planif_line_fields() { + setp_detail_planif_line_code(""); + setp_detail_planif_line_titre(""); + setp_detail_planif_line_description(""); + setp_detail_planif_line_prerequis(""); + setp_detail_planif_line_volume_horaire(""); + setp_detail_planif_line_comment(""); + setupdate_planif_line(""); + setselected_planif_line_id("") + + } + + + const [Dialog_PLANIF_LINE_message, setDialog_PLANIF_LINE_message] = React.useState(""); + + const [Dialog_PLANIF_LINE_open, setDialog_PLANIF_LINE_open] = React.useState(false); + + function Close_Dialog_PLANIF_LINE_buton() { + claer_detail_planif_line_fields(); + setDialog_PLANIF_LINE_open(false); + } + + const [update_planif_line, setupdate_planif_line] = useState(); + + const [selected_planif_line_id, setselected_planif_line_id] = useState(""); + + + const [Add_Update_Unite_Enseignement_Planif_api, setAdd_Update_Unite_Enseignement_Planif_api] = useState(); + const [Add_Update_Unite_Enseignement_Planif_message, setAdd_Update_Unite_Enseignement_Planif_message] = useState(); + const [Add_Update_Unite_Enseignement_Planif_result, setAdd_Update_Unite_Enseignement_Planif_result] = useState(); + const Add_Update_Unite_Enseignement_Planif = event => { + + + var form = new FormData(); + + const stored_cookie = getCookie('tokenmysypart'); + form.append("token", stored_cookie); + form.append("ue_id", selected_id); + form.append("code", p_detail_planif_line_code); + form.append("titre", p_detail_planif_line_titre); + form.append("description", p_detail_planif_line_description); + form.append("prerequis", p_detail_planif_line_prerequis); + form.append("volume_horaire", p_detail_planif_line_volume_horaire); + form.append("comment", p_detail_planif_line_comment); + if (selected_planif_line_id && String(selected_planif_line_id).length > 3) + form.append("unite_enseignement_planif_id", selected_planif_line_id); + + + + //console.log(" form == ", form); + + var myurl = process.env.REACT_APP_API_URL + "myclass/api/Add_Update_Unite_Enseignement_Planif/"; + + + setLoading(true); + axios.post(myurl, form).then(res => { + //console.log(" In Add_Update_Unite_Enseignement_Planif res.data.status = " + res.data.status); + //console.log(" In Add_Update_Unite_Enseignement_Planif res.data.message r_class = " + res.data.message); + + setLoading(false); + if (String(res.data.status) === String("true")) { + setAdd_Update_Unite_Enseignement_Planif_api("true"); + setAdd_Update_Unite_Enseignement_Planif_result(res.data.message); + + Getall_UE_Planif_data(selected_id); + + alert(res.data.message); + Close_Dialog_PLANIF_LINE_buton(); + } + else { + setAdd_Update_Unite_Enseignement_Planif_api("false"); + setAdd_Update_Unite_Enseignement_Planif_message(res.data.message); + alert(res.data.message); + } + + }).catch((error) => { + + + setLoading(false); + console.warn('UpdateStagiaireData : Not good man :( Add_Update_Unite_Enseignement_Planif = ' + error); + setAdd_Update_Unite_Enseignement_Planif_api("false"); + alert(" Impossible d'ajouter ou mettre à jour la ligne de planification"); + }) + } + + + /*** Gestion fichier csv à importer */ + + const [liste_sessions_file_change_api, setliste_sessions_file_change_api] = useState(); + const [liste_sessions_file_change_result, setliste_sessions_file_change_result] = useState(); + const [liste_sessions_file_change_message, setliste_sessions_file_change_message] = useState(); + const liste_sessions_file_change = event => { + + + const fileUploaded = event.target.files[0]; + let file_size = event.target.files[0].size; + let file_type = event.target.files[0].type; + + //console.log("file_size = ",file_size," file_type = ",file_type); + if (file_size > 1000000) { + alert("Le fichier ne doit pas dépasser un 1 Méga octets"); + return; + } + + setsession_file_name(event.target.files[0].name); + + const formData = new FormData(); + formData.append('File', fileUploaded); + //formData.append('token', 'K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA'); + const stored_cookie = getCookie('tokenmysypart'); + + formData.append("token", stored_cookie); + //console.log("token = " + stored_cookie); + setLoading(true); + fetch( + process.env.REACT_APP_API_URL + "myclass/api/Add_Update_Unite_Enseignement_Planif_mass/", + { + method: 'POST', + body: formData, + } + ) + .then((response) => response.json()) + .then((result) => { + + //console.log(" ## result['status'] = ", result['status']) + setLoading(false); + if (String(result['status']) === String("Err_Connexion")) { + alert('Erreur: ' + result['message']); + history.push("/Connexion"); + } + + else if (String(result['status']) === String("true")) { + //console.log('Success:', result['message']); + setliste_sessions_file_change_result(result['message']); + setliste_sessions_file_change_api("true"); + Getall_UE_Planif_data(selected_id); + + + window.scrollTo({ + top: 0, + behavior: "smooth", + }); + alert(result['message']); + + } + + else { + setliste_sessions_file_change_message(result['message']); + setliste_sessions_file_change_api("false"); + alert('Erreur: ' + result['message']); + + } + + + }) + .catch((error) => { + setLoading(false); + console.error('Error:', error); + setliste_sessions_file_change_api("false"); + alert(" Impossible d'importer le fichier"); + }); + + } + + + const [session_file_name, setsession_file_name] = useState(); + function submenu_import_session() { + setsession_file_name(); + setliste_sessions_file_change_api(); + hiddenFileInput_session.current.click(); + } + + + const hiddenFileInput_session = React.useRef(null); + + + + + /**** fin gestion fichier csv a importer */ return (
@@ -1039,6 +1501,193 @@ const DisplayPartnerUnite_Enseignement = (props) => { + {/*** Dialog ajout PLANIF_LINE ue */} + + null} + + > + + + + {String(update_planif_line) !== "1" && "Ajouter une ligne"} + {String(update_planif_line) === "1" && "Mettre à jour une ligne"} + + + + + + {Dialog_PLANIF_LINE_message} + + +
Code + { + setp_detail_planif_line_code(e.target.value); + } + } + + /> + +
+ +
Titre + { + setp_detail_planif_line_titre(e.target.value); + } + } + + /> + +
+ +
Volume Horaire + { + setp_detail_planif_line_volume_horaire(e.target.value); + } + } + + /> + +
+ + + +
Description + { + + setp_detail_planif_line_description(e.target.value); + } + } + multiline + minRows={2} + maxRows={2} + rows={2} + + /> + +
+ +
Prérequis + { + + setp_detail_planif_line_prerequis(e.target.value); + } + } + multiline + minRows={2} + maxRows={2} + rows={2} + + /> + +
+ +
Commentaire + { + + setp_detail_planif_line_comment(e.target.value); + } + } + multiline + minRows={2} + maxRows={2} + rows={2} + + /> + +
+ + +
+ + + + +
+
+ + {String(update_planif_line) !== "1" && } + {String(update_planif_line) === "1" && } +
+ + + + +
+ +
+
+ +
+ + +
+ {/*** Fin Dialog ajout PLANIF_LINE ue */} + +

Gestion des Unités d'enseignement

Utilisez les filtres !
@@ -1358,17 +2007,7 @@ const DisplayPartnerUnite_Enseignement = (props) => { checkboxSelection onSelectionModelChange={(newSelectionModel) => { setSelectionModel(newSelectionModel); - /* if (newSelectionModel.length === 1) - handleClick_edit_config_From_Line(newSelectionModel); - if (newSelectionModel.length !== 1) { - setp_detail_config_valeur(); - setp_detail_config_point(); - setConfig_data_changed(); - setconfig_data_edit_mode(); - setdisplay_detail_config(); - - - }*/ + }} selectionModel={selectionModel} disableSelectionOnClick @@ -1398,6 +2037,9 @@ const DisplayPartnerUnite_Enseignement = (props) => { setselected_id(newSelectionModel.row._id); handleClick_edit_ue_From_Line(newSelectionModel.row.id); + setsession_file_name(""); + setliste_sessions_file_change_api(""); + }} @@ -1470,8 +2112,14 @@ const DisplayPartnerUnite_Enseignement = (props) => {
 
+ {display_ue && String(display_ue) === "1" && String(add_one_ue) !== "1" &&
+ + + +
} + {/*** Affichage d'une UE */} - {display_ue && String(display_ue) === "1" && String(add_one_ue) !== "1" && + {display_ue && String(display_ue) === "1" && String(add_one_ue) !== "1" && String(submenu) === "detail_ue" &&
@@ -1983,6 +2631,186 @@ const DisplayPartnerUnite_Enseignement = (props) => {
} + {display_ue && String(display_ue) === "1" && String(add_one_ue) !== "1" && String(submenu) === "planification_ue" && +
+ +
+
+ +
+   + + { + setSelectionModel_planif(newSelectionModel); + + }} + selectionModel={selectionModel_planif} + disableSelectionOnClick + localeText={frFR.components.MuiDataGrid.defaultProps.localeText} + rows={Getall_UE_Planif_data_result.map((item, index) => ( + { + id: index, + _id: JSON.parse(item)._id, + code: JSON.parse(item).code, + titre: JSON.parse(item).titre, + description: JSON.parse(item).description, + volume_horaire: JSON.parse(item).volume_horaire, + ue_id: JSON.parse(item).ue_id, + + prerequis: JSON.parse(item).prerequis, + comment: JSON.parse(item).comment, + + + } + ))} + + columns={columns_planif_ue} + pageSize={10} + className="datagridclass" + + onRowDoubleClick={(newSelectionModel) => { + setupdate_planif_line("1"); + setselected_planif_line_id(newSelectionModel.row._id); + setp_detail_planif_line_code(newSelectionModel.row.code); + setp_detail_planif_line_titre(newSelectionModel.row.titre); + setp_detail_planif_line_description(newSelectionModel.row.description); + setp_detail_planif_line_prerequis(newSelectionModel.row.prerequis); + setp_detail_planif_line_volume_horaire(newSelectionModel.row.volume_horaire); + setp_detail_planif_line_comment(newSelectionModel.row.comment); + + setDialog_PLANIF_LINE_open(true); + }} + + rowsPerPageOptions={[10]} + //disableSelectionOnClick + components={{ + Toolbar: GridToolbar, + }} + //sx={datagridSx} + getCellClassName={(params) => { + + + //field === "order_header_status" + if (params.field === "order_header_status" && String(params.value) == "0") { + return 'cell--status--brouillon'; + } + + if (params.field === "order_header_status" && String(params.value) == "1") { + + return 'cell--status--encours'; + } + + if (params.field === "order_header_status" && String(params.value) == "2") { + return 'cell--status--traite'; + } + + if (params.field === "order_header_status" && String(params.value) == "3") { + return 'cell--status--facture'; + } + + }} + getRowClassName={(params) => { + + // Pour la gestion de la couleur de zone double cliquée + if (String(params.row.id) === String(planif_gridline_id)) { + + return 'line--statut--selected'; + } + else if (parseInt(String(params.row.id)) % 2 === 0) { + return 'line--statut--pair'; + } + else if (parseInt(String(params.row.id)) % 2 !== 0) { + return 'line--statut--impair'; + } + }} + + + /> + +
+ +
+ +
+ +
+ +
+ +
+ + + + + + + +
+ {session_file_name && } + {String(liste_sessions_file_change_api) === String("true") && } + {String(liste_sessions_file_change_api) === String("false") && } + + + + Télécharger un fichier modèle +
+
+
+ } + {/**** Ajout d'une UE */} diff --git a/src/components/Module_Session_Planification.js b/src/components/Module_Session_Planification.js index 277ac24..a6503c7 100644 --- a/src/components/Module_Session_Planification.js +++ b/src/components/Module_Session_Planification.js @@ -2215,9 +2215,6 @@ const Module_Session_Planification = (props) => { {String(update_sequence) === "1" && }
- - -