14/05/2025 - 20h

recette2
cherif 2025-05-14 21:40:55 +02:00
parent ac182ce675
commit c5908167f2
1 changed files with 347 additions and 143 deletions

View File

@ -1485,6 +1485,68 @@ const Jury = (props) => {
}
const [Add_Update_Jury_Soutenance_Data_api, setAdd_Update_Jury_Soutenance_Data_api] = useState();
const [Add_Update_Jury_Soutenance_Data_message, setAdd_Update_Jury_Soutenance_Data_message] = useState();
const [Add_Update_Jury_Soutenance_Data_result, setAdd_Update_Jury_Soutenance_Data_result] = useState([]);
function Add_Update_Jury_Soutenance_Data() {
var form = new FormData();
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("jury_id", selected_id);
form.append("agenda_id", selected_agenda_id);
form.append("sujet", p_detail_soutenance_sujet);
form.append("note", p_detail_soutenance_note);
form.append("observation", p_detail_soutenance_observation);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Add_Update_Jury_Soutenance/";
setLoading(true);
axios.post(myurl, form).then(res => {
//console.log(" In Add_Update_Jury_Soutenance_Data res.data.status = " + res.data.status);
//console.log(" In Add_Update_Jury_Soutenance_Data res.data.message r_class = " + res.data.message);
setLoading(false);
if (String(res.data.status) === String("true")) {
setAdd_Update_Jury_Soutenance_Data_api("true");
setAdd_Update_Jury_Soutenance_Data_result(res.data.message);
Disable_Jury_Soutenance_DetailFields();
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("success");
}
else {
setAdd_Update_Jury_Soutenance_Data_api("false");
setAdd_Update_Jury_Soutenance_Data_message(res.data.message);
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("error");
}
}).catch((error) => {
setLoading(false);
console.log('UpdateStagiaireData : Not good man :( Add_Update_Jury_Soutenance_Data = ' + error);
setAdd_Update_Jury_Soutenance_Data_api("false");
alert(" Impossible d'ajouter ou mettre à jour les données de la soutenance du jury ");
})
}
const [Add_Member_To_Jury_api, setAdd_Member_To_Jury_api] = useState();
const [Add_Member_To_Jury_message, setAdd_Member_To_Jury_message] = useState();
const [Add_Member_To_Jury_result, setAdd_Member_To_Jury_result] = useState([]);
@ -1938,7 +2000,7 @@ const Jury = (props) => {
function Enable_Jury_Soutenance_DetailFields() {
setequipe_data_edit_mode("1");
setsoutenance_data_edit_mode("1");
var liste_champs = ['detail_soutenance_sujet', 'detail_soutenance_observation', 'detail_soutenance_note']
@ -1951,11 +2013,32 @@ const Jury = (props) => {
}
}
async function Disable_Jury_Soutenance_DetailFields() {
setsoutenance_data_edit_mode("0");
await sleep(5);
var liste_champs = ['detail_soutenance_sujet', 'detail_soutenance_observation', 'detail_soutenance_note']
for (let i = 0; i < liste_champs.length; i++) {
if (document.getElementsByName(String(liste_champs[i])) && document.getElementsByName(String(liste_champs[i]))[0]) {
document.getElementsByName(String(liste_champs[i]))[0].disabled = true;
document.getElementsByName(String(liste_champs[i]))[0].style.backgroundColor = "#ECEFF1";
}
}
}
function Annule_Jury_Soutenance_DetailFields() {
// Get_Given_Jury_Data(selected_id);
setsoutenance_data_edit_mode("");
Get_Jury_List_Apprenant_Soutenance(selected_agenda_id);
setsoutenance_data_edit_mode("0");
setsoutenance_data_changed("");
Disable_Jury_Soutenance_DetailFields();
}
@ -1976,10 +2059,15 @@ const Jury = (props) => {
setselected_session_id("");
setp_detail_email_jury("");
setp_detail_chef_jury_id("");
}
function clear_Soutenance_DetailFieds() {
setp_detail_soutenance_sujet("");
setp_detail_soutenance_observation("");
setp_detail_soutenance_note("");
}
const [p_detail_member_role, setp_detail_member_role] = React.useState("");
const [gridline_jury_member_id, setgridline_jury_member_id] = useState("");
@ -2108,9 +2196,9 @@ const Jury = (props) => {
const [p_detail_soutenance_observation, setp_detail_soutenance_observation] = React.useState("");
const [p_detail_soutenance_note, setp_detail_soutenance_note] = React.useState("");
const [soutenance_data_edit_mode, setsoutenance_data_edit_mode] = React.useState("");
const [soutenance_data_edit_mode, setsoutenance_data_edit_mode] = React.useState("0");
const [soutenance_display, setsoutenance_display] = React.useState("");
const [soutenance_data_changed, setsoutenance_data_changed] = React.useState("");
const [soutenance_data_changed, setsoutenance_data_changed] = React.useState("");
// -- Gestion pièces jointes
@ -3220,6 +3308,84 @@ const Jury = (props) => {
const [Get_Jury_List_Apprenant_Soutenance_insc_api, setGet_Jury_List_Apprenant_Soutenance_insc_api] = useState();
const [Get_Jury_List_Apprenant_Soutenance_insc_meassage, setGet_Jury_List_Apprenant_Soutenance_insc_meassage] = useState();
const [Get_Jury_List_Apprenant_Soutenance_insc_result, setGet_Jury_List_Apprenant_Soutenance_insc_result] = useState([])
function Get_Jury_List_Apprenant_Soutenance(local_agenda_id) {
var form = new FormData();
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("jury_id", selected_id);
form.append("agenda_id", local_agenda_id);
// console.log(" #### OKKKK ")
setLoading(true);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Given_Jury_Soutenenace/";
fetch(myurl,
{
method: 'POST',
body: form,
})
.then((data) => data.json())
.then((data) => {
setLoading(false);
// console.log(' Get_Jury_List_Apprenant_Soutenance : Success:', data['message'], "data['status'] = ", data['status']);
if (String(data['status']) === String("true")) {
setGet_Jury_List_Apprenant_Soutenance_insc_result(data['message']);
setGet_Jury_List_Apprenant_Soutenance_insc_api("true");
if (data['message'].length > 0 && JSON.parse(data['message'])) {
var soutenance_JSON = JSON.parse(data['message']);
if (soutenance_JSON.sujet) {
setp_detail_soutenance_sujet(soutenance_JSON.sujet);
} else {
setp_detail_soutenance_sujet("");
}
if (soutenance_JSON.observation) {
setp_detail_soutenance_observation(soutenance_JSON.observation);
} else {
setp_detail_soutenance_observation("");
}
if (soutenance_JSON.note) {
setp_detail_soutenance_note(soutenance_JSON.note);
} else {
setp_detail_soutenance_note("");
}
} else {
setp_detail_soutenance_sujet("");
setp_detail_soutenance_observation("");
setp_detail_soutenance_note("");
}
setsoutenance_data_edit_mode("0");
Disable_Jury_Soutenance_DetailFields();
} else if (String(data['status']) === String("Err_Connexion")) {
alert('Erreur: ' + data['message']);
history.push("/Connexion");
}
else {
setGet_Jury_List_Apprenant_Soutenance_insc_api("false");
}
}).catch((error) => {
setLoading(false);
console.error('Error:', error);
setGet_Jury_List_Apprenant_Soutenance_insc_api("false");
});
}
const [jury_seance_ue_id, setjury_seance_ue_id] = useState("");
return (
@ -4354,29 +4520,27 @@ const Jury = (props) => {
className="datagridclass"
onRowDoubleClick={(newSelectionModel) => {
setsoutenance_data_edit_mode("");
setsoutenance_display("");
setsoutenance_data_changed("");
setsubmenu_detail_seance("");
setselected_jury_cible("")
settab_selected_apprenant([]);
setselectionModel_columns_jury_membre([]);
setactionmass_jury_membre_val("");
Get_List_UE_From_Session_Id(newSelectionModel.row.session_id);
setselected_id(newSelectionModel.row._id);
setgridline_id(newSelectionModel.row.id);
setselected_session_id(newSelectionModel.row.session_id);
setselected_ue_id(newSelectionModel.row.ue_id);
setselected_ue_code(newSelectionModel.row.ue_code)
setselected_jury_cible(newSelectionModel.row.cible);
setselectionModel_columns_jury_membre([]);
setactionmass_jury_membre_val("");
handleClick_edit_jury_From_Line(newSelectionModel.row.id);
settab_selected_apprenant([]);
}}
rowsPerPageOptions={[10]}
@ -5744,6 +5908,10 @@ const Jury = (props) => {
setsubmenu_detail_seance("display_jury_seance");
GetCurrentSession(newSelectionModel.row.event_linked_collection_recid);
if (String(selected_jury_cible) === "soutenance") {
Get_Jury_List_Apprenant_Soutenance(newSelectionModel.row._id);
}
if (document.getElementById('myRef_note_classemment')) {
var divh = document.getElementById('myRef_note_classemment').offsetTop;
@ -5831,7 +5999,7 @@ const Jury = (props) => {
</Button>
</div>
</div>
<div className="div_row" ref={myRef} id="myRef"> &nbsp;</div>
</div>
@ -5870,153 +6038,189 @@ const Jury = (props) => {
{String(submenu_detail_seance) === String("display_jury_seance") && String(selected_jury_cible) === "soutenance"
&& GetCurrentSession_result.length > 0 &&
<div style={{ "border": "None" }}>
il s'agit d'un jury avec sujet, note et appreciation <br />
<div style={{ "border": "None", width: '100%' }}>
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Délibération du Jury</nav>
{String(soutenance_data_edit_mode) !== "1" && <div>
<div style={{ display: 'flex', flexDirection: 'row', justifyContent: 'flex-start', alignItems: 'center', flexWrap: 'wrap' }}>
<div className="session_caract"> <b> Sujet </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="detail_soutenance_sujet"
id="detail_soutenance_sujet"
<div style={{ width: "100%" }}>
<b> Sujet </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, width: "100%", height:'5rem', }}
required
name="detail_soutenance_sujet"
id="detail_soutenance_sujet"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_detail_soutenance_sujet}
InputLabelProps={{
shrink: true,
}}
disabled={false}
//fullWidth
// sx={{ width: "80%" }}
//className="disabled_style"
value={p_detail_soutenance_sujet}
/>
</div>
<div className="session_caract"> <b> Observation </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="detail_soutenance_observation"
id="detail_soutenance_observation"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_detail_soutenance_observation}
/>
</div>
<div className="session_caract"> <b> Note </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="detail_soutenance_note"
id="detail_soutenance_note"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_detail_soutenance_note}
/>
</div>
InputProps={{ style: { border: "1px solid gainsboro", width: '90%', padding:'2px', height:'5rem', margin:'auto' } }}
multiline
minRows={2}
maxRows={2}
rows={2}
/>
</div>
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
</div>
<div style={{ width: "100%" }}>
<b> Observation </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, width: "100%" }}
required
name="detail_soutenance_observation"
id="detail_soutenance_observation"
InputLabelProps={{
shrink: true,
}}
disabled={false}
//fullWidth
// sx={{ width: "80%" }}
//className="disabled_style"
value={p_detail_soutenance_observation}
InputProps={{ style: { border: "1px solid gainsboro", width: '90%', padding:'2px', height:'5rem', margin:'auto' } }}
multiline
minRows={2}
maxRows={2}
rows={2}
/>
</div>
<div style={{ width: "100%" }}>
<b> Note </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, width: "100%" }}
required
name="detail_soutenance_note"
id="detail_soutenance_note"
InputLabelProps={{
shrink: true,
}}
disabled={false}
//fullWidth
// sx={{ width: "80%" }}
//className="disabled_style"
value={p_detail_soutenance_note}
InputProps={{ style: { border: "1px solid gainsboro", width: '90%', padding:'2px', margin:'auto' } }}
/>
</div>
</div>}
{String(soutenance_data_edit_mode) === "1" && <div>
<div style={{ display: 'flex', flexDirection: 'row', justifyContent: 'flex-start', alignItems: 'center', flexWrap: 'wrap' }}>
<div className="session_caract"> <b> Sujet </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="detail_soutenance_sujet"
id="detail_soutenance_sujet"
<div style={{ width: "100%" }}>
<b> Sujet </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, width: "100%", }}
required
name="detail_soutenance_sujet"
id="detail_soutenance_sujet"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_detail_soutenance_sujet}
onChange={(e) => {
setp_detail_soutenance_sujet(e.target.value);
InputLabelProps={{
shrink: true,
}}
disabled={false}
//fullWidth
// sx={{ width: "80%" }}
//className="disabled_style"
value={p_detail_soutenance_sujet}
onChange={(e) => {
setp_detail_soutenance_sujet(e.target.value);
}}
}}
/>
</div>
<div className="session_caract"> <b> Observation </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="detail_soutenance_observation"
id="detail_soutenance_observation"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_detail_soutenance_observation}
onChange={(e) => {
setp_detail_soutenance_observation(e.target.value);
}}
/>
</div>
<div className="session_caract"> <b> Note </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="detail_soutenance_note"
id="detail_soutenance_note"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_detail_soutenance_note}
onChange={(e) => {
setp_detail_soutenance_note(e.target.value);
}}
/>
</div>
InputProps={{ style: { border: "1px solid gainsboro", width: '90%', padding:'2px', height:'5rem', margin:'auto' } }}
multiline
minRows={2}
maxRows={2}
rows={2}
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
</div>
/>
</div>
<div style={{ width: "100%" }}>
<b> Observation </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, width: "100%" }}
required
name="detail_soutenance_observation"
id="detail_soutenance_observation"
InputLabelProps={{
shrink: true,
}}
disabled={false}
//fullWidth
// sx={{ width: "80%" }}
//className="disabled_style"
value={p_detail_soutenance_observation}
onChange={(e) => {
setp_detail_soutenance_observation(e.target.value);
}}
InputProps={{ style: { border: "1px solid gainsboro", width: '90%', padding:'2px', height:'5rem', margin:'auto' } }}
multiline
minRows={2}
maxRows={2}
rows={2}
/>
</div>
<div style={{ width: "100%" }}>
<b> Note </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, width: "80%" }}
required
name="detail_soutenance_note"
id="detail_soutenance_note"
InputLabelProps={{
shrink: true,
}}
disabled={false}
//fullWidth
// sx={{ width: "80%" }}
//className="disabled_style"
value={p_detail_soutenance_note}
onChange={(e) => {
setp_detail_soutenance_note(e.target.value);
}}
InputProps={{ style: { border: "1px solid gainsboro", width: '90%', padding:'2px', margin:'auto' } }}
/>
</div>
</div>}
@ -6029,13 +6233,13 @@ const Jury = (props) => {
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
<Button variant="contained" className="bton_enreg" onClick={"Add_Update_Jury_Data"}>Enregistrer
<Button variant="contained" className="bton_enreg" onClick={Add_Update_Jury_Soutenance_Data}>Enregistrer
</Button>
</div>
<div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }} >
<Button variant="contained" className="bton_annule" onClick={"Annule_Add_One_Jury_DetailFields"} >Annuler
<Button variant="contained" className="bton_annule" onClick={Annule_Jury_Soutenance_DetailFields} >Annuler
</Button>
</div>
</div>