05/05/2025 - 20h

recette2
cherif 2025-05-05 19:07:10 +02:00
parent 1d00664b59
commit ad041ae4dd
3 changed files with 624 additions and 44 deletions

View File

@ -187,6 +187,7 @@ const AddClassManual = (props) => {
{ field: 'code', headerName: 'Code', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'titre', headerName: 'Titre', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'credit', headerName: 'Credit', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'coefficient', headerName: 'Coef.', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{
field: 'pres_dist_hyp', headerName: 'Animation', minWidth: 150, flex: 1,
renderCell: (cellValues) => {
@ -201,7 +202,7 @@ const AddClassManual = (props) => {
}
},
{
field: 'is_noted', headerName: 'Evalué', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />,
field: 'is_noted', headerName: 'Evalué', minWidth: 100, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />,
renderCell: (cellValues) => {
return (
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
@ -213,7 +214,10 @@ const AddClassManual = (props) => {
);
}
},
{ field: 'duration_concat', headerName: 'Durée', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'seuil_validation', headerName: 'Seuil val.', minWidth: 100, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'duration_concat', headerName: 'Durée', minWidth: 100, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'duration', headerName: 'Durée', minWidth: 150, hide: true, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'duration_unite', headerName: 'Unit.', minWidth: 150, hide: true, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
@ -558,6 +562,8 @@ const AddClassManual = (props) => {
var local_credit = JSON.parse(x).credit;
var local_pres_dist_hyp = JSON.parse(x).pres_dist_hyp;
var local_is_noted = JSON.parse(x).is_noted;
var local_coefficient = JSON.parse(x).coefficient;
var local_seuil_validation = JSON.parse(x).seuil_validation;
@ -571,6 +577,8 @@ const AddClassManual = (props) => {
"credit": local_credit,
"pres_dist_hyp": local_pres_dist_hyp,
"is_noted": local_is_noted,
"coefficient": local_coefficient,
"seuil_validation": local_seuil_validation,
};
new_data2.push(node);
@ -586,6 +594,8 @@ const AddClassManual = (props) => {
"credit": "",
"pres_dist_hyp": "",
"is_noted": "",
"coefficient": "",
"seuil_validation": "",
};
new_data2.push(node);
@ -636,7 +646,7 @@ const AddClassManual = (props) => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Getall_Partner_List_UE res.data.status = " + res.data.status);
//console.log(" In Getall_Partner_List_UE res.data.message r_class = " + res.data.message);
// console.log(" In Getall_Partner_List_UE res.data.message r_class = " + res.data.message);
setGetall_Partner_List_UE_api("true");
setGetall_Partner_List_UE_result(res.data.message);
@ -649,6 +659,9 @@ const AddClassManual = (props) => {
var local_code = JSON.parse(x).code;
var local_titre = JSON.parse(x).titre;
var local_ects = JSON.parse(x).ects;
var local_seuil_validation = JSON.parse(x).seuil_validation;
var local_credit = JSON.parse(x).credit;
var local_pres_dist_hyp = JSON.parse(x).pres_dist_hyp;
@ -667,6 +680,9 @@ const AddClassManual = (props) => {
"pres_dist_hyp": local_pres_dist_hyp,
"is_noted": local_is_noted,
"ects": local_ects,
"seuil_validation": local_seuil_validation,
};
new_data2.push(node);
});
@ -1289,9 +1305,6 @@ const AddClassManual = (props) => {
if (mylocaltraining) {
setdisplayedinternalurl(mylocaltraining.internal_url);
if (mylocaltraining._id) {
setselected_class_id(mylocaltraining._id);
Get_List_Of_All_PJ(mylocaltraining._id);
@ -1341,6 +1354,14 @@ const AddClassManual = (props) => {
}
if (mylocaltraining.note_finale_calculation_rule_id) {
setselected_class_note_calculation_id(mylocaltraining.note_finale_calculation_rule_id);
} else {
setselected_class_note_calculation_id("");
}
if (mylocaltraining.prerequis) {
//document.getElementsByName("prerequis")[0].value = mylocaltraining.prerequis;
@ -2007,6 +2028,9 @@ const AddClassManual = (props) => {
formData.append('img_banner_detail_class', banniereImg);
formData.append('img_url', banniereImg);
formData.append('note_finale_calculation_rule_id', selected_class_note_calculation_id);
formData.append('contenu_attestation', contenu_attestation);
@ -2121,6 +2145,73 @@ const AddClassManual = (props) => {
});
};
function Record_Training_Calcul_Note(event) {
const formData = new FormData();
const stored_cookie = getCookie('tokenmysypart');
formData.append("token", stored_cookie);
formData.append('note_finale_calculation_rule_id', selected_class_note_calculation_id);
formData.append('internal_url', props.mytrainingclass['ref']);
if (props.mytrainingclass['class_id'])
formData.append("class_id", props.mytrainingclass['class_id']);
else
formData.append("class_id", selected_class_id);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/update_class/";
// console.log(" formData = ", formData);
setLoading(true);
fetch(
myurl,
{
method: 'POST',
body: formData,
}
)
.then((response) => response.json())
.then((result) => {
//console.log('Success:', result['message'], "result['status'] = ", result['status'], "result['class_id'] = ", result['class_id']);
setLoading(false);
setdatamodification("0");
if (String(result['status']) === "true") {
var myclass_id = String(result['class_id']);
if (String(userimgclassprofilchanged) === "1")
sendClassImage(myclass_id);
}
//alert(result['status'] + " -- " + myApiResponse + ' mess = ' + result['message']);
if (String(result['status']) === "true") {
var txt = "La formation a été correctement ajoutée / mise à jour.";
setdisplay_alert_mysy("1");
setalert_message(txt);
setalert_type("success");
}
else {
setdisplay_alert_mysy("1");
setalert_message(result['message']);
setalert_type("error");
}
})
.catch((error) => {
setLoading(false);
console.error('Error:', error);
setmyApiResponse("false");
});
};
function DataUpdated() {
setdatamodification("1");
setimportmessage();
@ -2403,6 +2494,93 @@ const AddClassManual = (props) => {
});
}
const [New_Get_List_Regle_Calcul_Note_Formation_result, setNew_Get_List_Regle_Calcul_Note_Formation_result] = useState([]);
const [Get_List_Regle_Calcul_Note_Formation_api, setGet_List_Regle_Calcul_Note_Formation_api] = useState();
const [Get_List_Regle_Calcul_Note_Formation_message, setGet_List_Regle_Calcul_Note_Formation_message] = useState();
const [Get_List_Regle_Calcul_Note_Formation_result, setGet_List_Regle_Calcul_Note_Formation_result] = useState();
function Get_List_Regle_Calcul_Note_Formation() {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("tab_related_collection", "myclass");
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_List_base_calcul_note_class_and_ue_With_Filter";
fetch(myurl,
{
method: 'POST',
body: form,
})
.then((data) => data.json())
.then((data) => {
// console.log(' IN Get_List_Regle_Calcul_Note_Formation Success:', data['message'], "data['status'] = ", data['status']);
if (String(data['status']) === String("true")) {
setGet_List_Regle_Calcul_Note_Formation_api("true");
setGet_List_Regle_Calcul_Note_Formation_result(data['message']);
var new_data2 = [];
const new_data = data['message'].map((x) => {
//---
var localid = JSON.parse(x).id;
var local_id = JSON.parse(x)._id;
var local_related_collection = JSON.parse(x).related_collection;
var local_calcul_rule = JSON.parse(x).calcul_rule;
var local_nom = JSON.parse(x).nom;
var local_fonction_name = JSON.parse(x).fonction_name;
//---
var node = {
"id": localid,
"_id": local_id,
"related_collection": local_related_collection,
"calcul_rule": local_calcul_rule,
"label": local_nom,
"nom": local_nom,
"fonction_name": local_fonction_name,
};
new_data2.push(node);
});
var node = {
"id": "",
"_id": "",
"related_collection": "",
"calcul_rule": "",
"label": "",
"nom": "",
"fonction_name": "",
};
new_data2.push(node);
if (new_data2.length > 0) {
setNew_Get_List_Regle_Calcul_Note_Formation_result(new_data2);
// console.log(" ## new_data2 = ", new_data2);
// console.log(" ## New_Get_List_Regle_Calcul_Note_Formation_result = ", New_Get_List_Regle_Calcul_Note_Formation_result);
} else {
setNew_Get_List_Regle_Calcul_Note_Formation_result([])
}
}
else {
setGet_List_Regle_Calcul_Note_Formation_api("false");
setGet_List_Regle_Calcul_Note_Formation_message(data['message']);
}
}).catch((error) => {
console.error('Error Get_List_Regle_Calcul_Note_Formation :', error);
setGet_List_Regle_Calcul_Note_Formation_api("false");
});
}
const handleChangeDomaineTraining = (event) => {
const name = event.target.name;
const value = event.target.value;
@ -3424,6 +3602,8 @@ const AddClassManual = (props) => {
setsubmenu("note_evaluation");
submenu_color_management("note_evaluation");
Getall_Class_List_Evalution();
Get_List_Regle_Calcul_Note_Formation();
}
@ -3471,9 +3651,17 @@ const AddClassManual = (props) => {
const [p_detail_price, setp_detail_price] = useState("");
const [selected_ue_id, setselected_ue_id] = useState("");
const [selected_ue_credit, setselected_ue_credit] = useState("");
const [selected_ue_credit_ects, setselected_ue_credit_ects] = useState("");
const [selected_ue_is_noted, setselected_ue_is_noted] = useState("");
const [selected_ue_pres_dist_hyp, setselected_ue_pres_dist_hyp] = useState("");
const [selected_ue_coefficient, setselected_ue_coefficient] = useState("");
const [selected_ue_seuil_validation, setselected_ue_seuil_validation] = useState("");
const [selected_class_note_calculation_id, setselected_class_note_calculation_id] = useState("");
const New_Option_Is_Noted = [
{ "id": "1", "label": "Oui", "value": "1" },
@ -3493,30 +3681,36 @@ const AddClassManual = (props) => {
const Dialog_Unite_Enseignement_handleClose = () => {
setDialog_Unite_Enseignement_open(false);
setselected_ue_id("");
setselected_ue_credit("");
setselected_ue_credit_ects("");
setselected_ue_is_noted("");
setselected_ue_pres_dist_hyp("");
setadd_one_eu_to_class("");
setselected_ue_coefficient("");
setselected_ue_seuil_validation("");
};
function clean_ue_data() {
setselected_ue_id("");
setselected_ue_credit("");
setselected_ue_credit_ects("");
setselected_ue_seuil_validation("");
setselected_ue_is_noted("");
setselected_ue_pres_dist_hyp("");
setadd_one_eu_to_class("");
setselected_ue_coefficient("");
}
const Dialog_Unite_Enseignement_handleClose_buton = () => {
setDialog_Unite_Enseignement_open(false);
setselected_ue_id("");
setselected_ue_credit("");
setselected_ue_credit_ects("");
setselected_ue_seuil_validation("");
setselected_ue_is_noted("");
setselected_ue_pres_dist_hyp("");
setadd_one_eu_to_class("");
setselected_ue_coefficient("");
};
const [Dialog_1_message, setDialog_1_message] = React.useState(false);
@ -3539,9 +3733,11 @@ const AddClassManual = (props) => {
form.append("class_id", selected_class_id);
form.append("ue_id", selected_ue_id);
form.append("credit", selected_ue_credit);
form.append("credit", selected_ue_credit_ects);
form.append("coefficient", selected_ue_coefficient);
form.append("pres_dist_hyp", selected_ue_pres_dist_hyp);
form.append("is_noted", selected_ue_is_noted);
form.append("seuil_validation", selected_ue_seuil_validation);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Add_Update_UE_To_Class/";
@ -4189,7 +4385,8 @@ const AddClassManual = (props) => {
if (value && value._id) {
setselected_ue_id(value._id);
setselected_ue_credit_ects(value.ects);
setselected_ue_seuil_validation(value.seuil_validation);
} else {
setselected_ue_id("");
}
@ -4230,10 +4427,49 @@ const AddClassManual = (props) => {
name="event_dialog_credit"
id="event_dialog_credit"
type="number"
InputProps={{ inputProps: { min: 1, max: 999 } }}
fullWidth
value={selected_ue_credit}
value={selected_ue_credit_ects}
onChange={(e) => {
setselected_ue_credit(e.target.value);
setselected_ue_credit_ects(e.target.value);
}
}
/>
</div>
<div className="session_caract_Dialog" > <b> Coefficient </b>
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_coef"
id="event_dialog_coef"
type="number"
InputProps={{ inputProps: { min: 1, max: 999 } }}
fullWidth
value={selected_ue_coefficient}
onChange={(e) => {
setselected_ue_coefficient(e.target.value);
}
}
/>
</div>
<div className="session_caract_Dialog" > <b> Seuil validation </b>
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_seuil_validation"
id="event_dialog_seuil_validation"
type="number"
InputProps={{ inputProps: { min: 1, max: 9999 } }}
fullWidth
value={selected_ue_seuil_validation}
onChange={(e) => {
setselected_ue_seuil_validation(e.target.value);
}
}
@ -4269,6 +4505,8 @@ const AddClassManual = (props) => {
</div>
<div className="session_caract_Dialog"> <b> Mode d'animation </b><br />
<Autocomplete
disablePortal
@ -4643,6 +4881,9 @@ const AddClassManual = (props) => {
credit: JSON.parse(item).credit,
pres_dist_hyp: JSON.parse(item).pres_dist_hyp,
is_noted: JSON.parse(item).is_noted,
coefficient: JSON.parse(item).coefficient,
seuil_validation: JSON.parse(item).seuil_validation,
duration: JSON.parse(item).duration,
duration_unite: JSON.parse(item).duration_unite,
@ -4662,9 +4903,12 @@ const AddClassManual = (props) => {
var current_class_ue_data = New_Getall_Class_List_UE_result.filter((ue_data) => ue_data._id === String((newSelectionModel.row._id)))
setselected_ue_credit(current_class_ue_data[0]['credit']);
// console.log(" ### current_class_ue_data[0] = ", current_class_ue_data[0]);
setselected_ue_credit_ects(current_class_ue_data[0]['credit']);
setselected_ue_is_noted(current_class_ue_data[0]['is_noted']);
setselected_ue_pres_dist_hyp(current_class_ue_data[0]['pres_dist_hyp']);
setselected_ue_coefficient(current_class_ue_data[0]['coefficient']);
setselected_ue_seuil_validation(current_class_ue_data[0]['seuil_validation']);
setadd_one_eu_to_class("0");
setDialog_Unite_Enseignement_open(true);
@ -4828,9 +5072,6 @@ const AddClassManual = (props) => {
setDialog_Evaluation_Unite_Enseignement_open(true);
}}
@ -4894,9 +5135,110 @@ const AddClassManual = (props) => {
<br />
<div className="div_row" style={{ "border": "None" }}>
<h3> Regle de calcul note finale </h3>
<nav>
Règle de calcul : &nbsp;
{New_Get_List_Regle_Calcul_Note_Formation_result && New_Get_List_Regle_Calcul_Note_Formation_result.length > 0 && <Autocomplete
disablePortal
name="regle_calcul_note_formation"
id="regle_calcul_note_formation"
className="disabled_style"
options={New_Get_List_Regle_Calcul_Note_Formation_result}
value={New_Get_List_Regle_Calcul_Note_Formation_result.filter((data) => (data)._id === String(selected_class_note_calculation_id))[0].label}
onChange={(event, value) => {
if (value && value._id) {
setselected_class_note_calculation_id(value._id);
DataUpdated();
} else {
setselected_class_note_calculation_id("");
DataUpdated();
}
}}
renderInput={(params) => <TextField {...params} label="Formateur" />
}
/>}
<br />
Exemple de calcul : Moyenne finale = [ UE * Coef (UE) ] / nb_coef
</nav>
</div>
</div>
{String(props.ispending) === String("0") && <div className="parter_div_filtrer_row">
{(String(datamodification) === String("1") || String(editor_tochange) === String("1")) && <div className="parter_div_filtrer_row_gauche" >
<Button variant="contained" onClick={Record_Training_Calcul_Note} startIcon={<AiTwotoneSave />} className="bton_enreg2">ENREGISTRER LA REGLE </Button>
</div>
}
{String(datamodification) !== String("1") && String(editor_tochange) !== String("1") && String(props.mytrainingclass.ref) !== "" &&
<div className="parter_div_filtrer_row_droite" >
<Popup
trigger={
<Button variant="contained" startIcon={<DeleteIcon />} className="bton_suppr2"> SUPPRIMER LA FORMATION </Button>
}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, la formation sera <i><font color="red"> définitivement supprimée</font></i>. <br />
Avant, assurez-vous de n'avoir aucune session rattachée à la formation.
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
DeleteClass(event);
//console.log('modal closed ');
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</div>
}
{(String(datamodification) === String("1") || String(editor_tochange) === String("1")) && String(props.mytrainingclass.ref) !== "" && <div className="parter_div_filtrer_row_droite" >
<Button variant="contained" onClick={UndoModif} startIcon={<IoArrowUndoCircle />} className="bton_suppr2"> ANNULER LES MODIFICATIONS </Button>
</div>}
</div>}
</div>}
{submenu && String(submenu) === "piece_jointe" && <div>
@ -5883,7 +6225,6 @@ const AddClassManual = (props) => {
</div>}
</div>
@ -5904,13 +6245,6 @@ const AddClassManual = (props) => {
</div>
}
{/*String(datamodification) === String("0") && <div className="parter_div_filtrer_row_gauche" >
<Button variant="contained" onClick={"ModifTraining"} startIcon={<AiTwotoneEdit />}>MODIFIER </Button>
</div>
*/ }
{String(datamodification) !== String("1") && String(editor_tochange) !== String("1") && String(props.mytrainingclass.ref) !== "" &&
<div className="parter_div_filtrer_row_droite" >

View File

@ -789,6 +789,13 @@ const DisplayPartnerUnite_Enseignement = (props) => {
setVal([]);
}
if (local_ue.note_ue_calculation_rule_id) {
setp_detail_note_ue_calculation_rule_id(local_ue.note_ue_calculation_rule_id);
} else {
setp_detail_note_ue_calculation_rule_id("");
}
if (local_ue.ects) {
setp_detail_ects(local_ue.ects);
@ -866,7 +873,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
setue_data_edit_mode("0");
const list_menu_header_names = ['detail_ue_code', 'detail_ue_titre', 'detail_ue_bloc', 'detail_ue_domaine', 'detail_ue_competence',
'detail_ue_semestre', 'detail_ue_ects', 'detail_ue_seuil_validation', 'detail_ue_duree', 'detail_ue_unit_duree', 'detail_ue_cm_heure',
'detail_ue_td_heure', 'detail_ue_tp_heure', 'detail_ue_tpg_heure', 'detail_ue_cm_heure']
'detail_ue_td_heure', 'detail_ue_tp_heure', 'detail_ue_tpg_heure', 'detail_ue_cm_heure', 'detail_ue_note_ue_calculation_rule_id']
for (let i = 0; i < list_menu_header_names.length; i++) {
@ -883,7 +890,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
setue_data_edit_mode("1");
const list_menu_header_names = ['detail_ue_code', 'detail_ue_titre', 'detail_ue_bloc', 'detail_ue_domaine', 'detail_ue_competence',
'detail_ue_semestre', 'detail_ue_ects', 'detail_ue_seuil_validation', 'detail_ue_duree', 'detail_ue_unit_duree', 'detail_ue_cm_heure',
'detail_ue_td_heure', 'detail_ue_tp_heure', 'detail_ue_tpg_heure', 'detail_ue_cm_heure']
'detail_ue_td_heure', 'detail_ue_tp_heure', 'detail_ue_tpg_heure', 'detail_ue_cm_heure', 'detail_ue_note_ue_calculation_rule_id']
for (let i = 0; i < list_menu_header_names.length; i++) {
@ -974,6 +981,8 @@ const DisplayPartnerUnite_Enseignement = (props) => {
form.append("semestre", p_detail_semestre);
form.append("note_ue_calculation_rule_id", p_detail_note_ue_calculation_rule_id);
form.append("niveau_competence", val);
@ -1153,6 +1162,8 @@ const DisplayPartnerUnite_Enseignement = (props) => {
const [p_detail_seuil_validation, setp_detail_seuil_validation] = useState("");
const [p_detail_tab_competence, setp_detail_tab_competence] = useState([]);
const [p_detail_note_ue_calculation_rule_id, setp_detail_note_ue_calculation_rule_id] = useState([]);
const editorRef_description = useRef(null);
const [editorRef_description_limite, seteditorRef_description_limite] = useState(5000);
@ -1207,6 +1218,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
async function handleClick_edit_ue_From_Line(selected_row_id) {
Get_List_Regle_Calcul_Note_UE();
submenu_detail();
var line = JSON.parse(Getall_Parter_Unite_Enseignement_result[selected_row_id]);
@ -1333,6 +1345,94 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
const [New_Get_List_Regle_Calcul_Note_UE_result, setNew_Get_List_Regle_Calcul_Note_UE_result] = useState([]);
const [Get_List_Regle_Calcul_Note_UE_api, setGet_List_Regle_Calcul_Note_UE_api] = useState();
const [Get_List_Regle_Calcul_Note_UE_message, setGet_List_Regle_Calcul_Note_UE_message] = useState();
const [Get_List_Regle_Calcul_Note_UE_result, setGet_List_Regle_Calcul_Note_UE_result] = useState();
function Get_List_Regle_Calcul_Note_UE() {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("tab_related_collection", "unite_enseignement");
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_List_base_calcul_note_class_and_ue_With_Filter";
fetch(myurl,
{
method: 'POST',
body: form,
})
.then((data) => data.json())
.then((data) => {
// console.log(' IN Get_List_Regle_Calcul_Note_UE Success:', data['message'], "data['status'] = ", data['status']);
if (String(data['status']) === String("true")) {
setGet_List_Regle_Calcul_Note_UE_api("true");
setGet_List_Regle_Calcul_Note_UE_result(data['message']);
var new_data2 = [];
const new_data = data['message'].map((x) => {
//---
var localid = JSON.parse(x).id;
var local_id = JSON.parse(x)._id;
var local_related_collection = JSON.parse(x).related_collection;
var local_calcul_rule = JSON.parse(x).calcul_rule;
var local_nom = JSON.parse(x).nom;
var local_fonction_name = JSON.parse(x).fonction_name;
//---
var node = {
"id": localid,
"_id": local_id,
"related_collection": local_related_collection,
"calcul_rule": local_calcul_rule,
"label": local_nom,
"nom": local_nom,
"fonction_name": local_fonction_name,
};
new_data2.push(node);
});
var node = {
"id": "",
"_id": "",
"related_collection": "",
"calcul_rule": "",
"label": "",
"nom": "",
"fonction_name": "",
};
new_data2.push(node);
if (new_data2.length > 0) {
setNew_Get_List_Regle_Calcul_Note_UE_result(new_data2);
// console.log(" ## new_data2 = ", new_data2);
// console.log(" ## New_Get_List_Regle_Calcul_Note_UE_result = ", New_Get_List_Regle_Calcul_Note_UE_result);
} else {
setNew_Get_List_Regle_Calcul_Note_UE_result([])
}
}
else {
setGet_List_Regle_Calcul_Note_UE_api("false");
setGet_List_Regle_Calcul_Note_UE_message(data['message']);
}
}).catch((error) => {
console.error('Error Get_List_Regle_Calcul_Note_UE :', error);
setGet_List_Regle_Calcul_Note_UE_api("false");
});
}
const [New_Get_List_Type_Cours_result, setNew_Get_List_Type_Cours_result] = useState([]);
const [Get_List_Type_Cours_api, setGet_List_Type_Cours_api] = useState();
@ -1965,7 +2065,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
{/*** Fin Dialog ajout PLANIF_LINE ue */}
<h3 style={{ fontFamily:'DM Sans' }}> Gestion des Unités d'enseignement </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Gestion des Unités d'enseignement </h3>
<div className="div_row">
<div className="titre1"> Utilisez les filtres !</div>
<div className="div_row" style={{ "marginBottom": "5px" }}>
@ -2531,7 +2631,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
{ue_data_edit_mode && String(ue_data_edit_mode) === "1" &&
New_Get_List_Domaines_result && New_Get_List_Domaines_result.length > 0 && <div className="training_caract">Domaine <br />
New_Get_List_Domaines_result && New_Get_List_Domaines_result.length > 0 && <div className="session_caract">Domaine <br />
<Autocomplete
disablePortal
@ -2558,7 +2658,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
</div>}
{ue_data_edit_mode && String(ue_data_edit_mode) !== "1" &&
New_Get_List_Domaines_result && New_Get_List_Domaines_result.length > 0 && <div className="training_caract">Domaine <br />
New_Get_List_Domaines_result && New_Get_List_Domaines_result.length > 0 && <div className="session_caract">Domaine <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -2627,6 +2727,56 @@ const DisplayPartnerUnite_Enseignement = (props) => {
</div>}
{ue_data_edit_mode && String(ue_data_edit_mode) === "1" && New_Get_List_Regle_Calcul_Note_UE_result && New_Get_List_Regle_Calcul_Note_UE_result.length > 0 &&
<div className="session_caract"> Règle de calcul note <br />
<Autocomplete
disablePortal
name="detail_ue_note_ue_calculation_rule_id"
id="detail_ue_note_ue_calculation_rule_id"
className="disabled_style"
options={New_Get_List_Regle_Calcul_Note_UE_result}
New_Get_List_Regle_Calcul_Note_UE_result
value={New_Get_List_Regle_Calcul_Note_UE_result.filter((data) => (data)._id === String(p_detail_note_ue_calculation_rule_id))[0].label}
onChange={(event, value) => {
seteu_changed("1");
if (value && value._id) {
setp_detail_note_ue_calculation_rule_id(value._id);
} else {
setp_detail_note_ue_calculation_rule_id("");
}
}}
renderInput={(params) => <TextField {...params} label="Choisir" />
}
/>
</div>}
{ue_data_edit_mode && String(ue_data_edit_mode) !== "1" && New_Get_List_Regle_Calcul_Note_UE_result && New_Get_List_Regle_Calcul_Note_UE_result.length > 0 &&
<div className="session_caract"> Règle de calcul note <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="detail_ue_note_ue_calculation_rule_id"
id="detail_ue_note_ue_calculation_rule_id"
className="disabled_style"
InputLabelProps={{
shrink: true,
}}
//disabled={true}
value={New_Get_List_Regle_Calcul_Note_UE_result.filter((data) => (data)._id === String(p_detail_note_ue_calculation_rule_id))[0].label}
/>
</div>}
</div>
<div className="block_ue_div_50_percent_droite">
@ -3674,7 +3824,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
/>
</div>
{New_Get_List_Domaines_result && New_Get_List_Domaines_result.length > 0 && <div className="training_caract"> Domaine <br />
{New_Get_List_Domaines_result && New_Get_List_Domaines_result.length > 0 && <div className="session_caract"> Domaine <br />
<Autocomplete
disablePortal
@ -3726,6 +3876,30 @@ const DisplayPartnerUnite_Enseignement = (props) => {
</div>
{New_Get_List_Regle_Calcul_Note_UE_result && New_Get_List_Regle_Calcul_Note_UE_result.length > 0 && <Autocomplete
disablePortal
name="detail_ue_note_ue_calculation_rule_id"
id="detail_ue_note_ue_calculation_rule_id"
className="disabled_style"
options={New_Get_List_Regle_Calcul_Note_UE_result}
New_Get_List_Regle_Calcul_Note_UE_result
value={New_Get_List_Regle_Calcul_Note_UE_result.filter((data) => (data)._id === String(p_detail_note_ue_calculation_rule_id))[0].label}
onChange={(event, value) => {
if (value && value._id) {
setp_detail_note_ue_calculation_rule_id(value._id);
} else {
setp_detail_note_ue_calculation_rule_id("");
}
}}
renderInput={(params) => <TextField {...params} label="Formateur" />
}
/>}
</div>
<div className="block_ue_div_50_percent_droite">

View File

@ -129,6 +129,31 @@ const Module_Session_Notes_Classement = (props) => {
);
}
const columns_list_session_note_classement_final = [
{ field: 'id', headerName: 'id', hide: true },
{ field: '_id', headerName: '_id', hide: true },
{ field: 'inscription_id', headerName: 'inscription_id', hide: true },
{ field: 'session_id', headerName: 'session_id', hide: true },
{ field: 'ue_id', headerName: 'ue_id', hide: true },
{ field: 'class_id', headerName: 'class_id', hide: true },
{ field: 'class_id_external_code', headerName: 'Code Formation', hide: true },
{ field: 'ue_id_code', headerName: 'UE Code', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'inscription_id_nom', headerName: 'Nom', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'inscription_id_prenom', headerName: 'Prenom', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'type_eval', headerName: 'Type eval', minwidth: 100, flex: 1, hide: false, editable: true, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'moyenne', headerName: 'moyenne', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'somme', headerName: 'somme', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'nb_evaluation', headerName: 'nb_evaluation', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'inscription_id_mail', headerName: 'Email', minwidth: 300, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'detail', headerName: 'Detail Note', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
]
const columns_list_evaluation_detail_note_classement_final = [
{ field: 'id', headerName: 'id', hide: true },
{ field: '_id', headerName: '_id', hide: true },
@ -167,20 +192,35 @@ const Module_Session_Notes_Classement = (props) => {
{ field: 'inscription_id_nom', headerName: 'Nom', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'inscription_id_prenom', headerName: 'Prenom', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'type_eval', headerName: 'Type eval', minwidth: 100, flex: 1, hide: false, editable: true, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'note_td', headerName: 'note_td', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'note_tp', headerName: 'note_tp', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'note_examen', headerName: 'note_examen', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'note_finale', headerName: 'note_finale', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'note_finale', headerName: 'Note finale', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'rang', headerName: 'rang', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'inscription_id_mail', headerName: 'Email', minwidth: 300, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'seuil_validation', headerName: 'Seuil val.', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'ue_coefficient', headerName: 'Coeff.', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'ue_validation', headerName: 'Validé', minwidth: 100, flex: 1, hide: false, editable: false,
renderCell: (cellValues) => {
return (
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
{cellValues.row.ue_validation && String(cellValues.row.ue_validation) === "1" && "Oui"}
{cellValues.row.ue_validation && String(cellValues.row.ue_validation) === "0" && "Non"}
</div>
);
}
},
{ field: 'note_td', headerName: 'note_td', hide: true },
{ field: 'note_tp', headerName: 'note_tp', hide: true },
{ field: 'note_examen', headerName: 'note_examen', hide: true },
{ field: 'detail', headerName: 'Detail Note', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'type_eval', headerName: 'Type eval', hide: true },
{ field: 'regle_calcul', headerName: 'regle_calcul', hide: true },
]
@ -347,6 +387,12 @@ const Module_Session_Notes_Classement = (props) => {
var regle_calcul = JSON.parse(x).regle_calcul;
var note_finale = JSON.parse(x).note_finale;
var regle_calcul = JSON.parse(x).regle_calcul;
var seuil_validation = JSON.parse(x).seuil_validation;
var ue_coefficient = JSON.parse(x).ue_coefficient;
var ue_validation = JSON.parse(x).ue_validation;
var ue_id_code = JSON.parse(x).ue_id_code;
var class_id_external_code = JSON.parse(x).class_id_external_code;
var inscription_id_mail = JSON.parse(x).inscription_id_mail;
@ -371,6 +417,12 @@ const Module_Session_Notes_Classement = (props) => {
"regle_calcul": regle_calcul,
"note_finale": note_finale,
"regle_calcul": regle_calcul,
"seuil_validation": seuil_validation,
"ue_coefficient": ue_coefficient,
"ue_validation": ue_validation,
"ue_id_code": ue_id_code,
"class_id_external_code": class_id_external_code,
"inscription_id_mail": inscription_id_mail,
@ -400,6 +452,10 @@ const Module_Session_Notes_Classement = (props) => {
"inscription_id_mail": "",
"inscription_id_nom": "",
"inscription_id_prenom": "",
"regle_calcul": "",
"seuil_validation": "",
"ue_coefficient": "",
"ue_validation": "",
};
new_data2.push(node);
@ -485,7 +541,7 @@ const Module_Session_Notes_Classement = (props) => {
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
&nbsp;
<nav style={{ textAlign: 'center' }}> Matrice des notes & Rang</nav>
<nav style={{ textAlign: 'center' }}> Notes & Rang par UE</nav>
<Box
sx={{
height: 500,
@ -543,6 +599,12 @@ const Module_Session_Notes_Classement = (props) => {
backgroundColor: '#FFFFFF',
color: 'black',
},
'& .line--statut--isvalide': {
backgroundColor: '#ABEBC6',
color: 'black',
fontWeight: '600',
},
[`& .${gridClasses.cell}`]: {
py: 1,
},
@ -580,6 +642,12 @@ const Module_Session_Notes_Classement = (props) => {
note_finale: JSON.parse(item).note_finale,
rang: JSON.parse(item).rang,
regle_calcul: JSON.parse(item).regle_calcul,
seuil_validation: JSON.parse(item).seuil_validation,
ue_coefficient: JSON.parse(item).ue_coefficient,
ue_validation: JSON.parse(item).ue_validation,
ue_id_code: JSON.parse(item).ue_id_code,
class_id_external_code: JSON.parse(item).class_id_external_code,
inscription_id_mail: JSON.parse(item).inscription_id_mail,
@ -614,6 +682,10 @@ const Module_Session_Notes_Classement = (props) => {
}}
getRowClassName={(params) => {
// Pour la gestion de la couleur de zone double cliquée
if (String(params.row.ue_validation) === "1") {
return 'line--statut--isvalide';
}
if (String(params.row.id) === String(gridline_id)) {
return 'line--statut--selected';
}
@ -661,7 +733,7 @@ const Module_Session_Notes_Classement = (props) => {
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
&nbsp;
<nav style={{ textAlign: 'center' }}> Matrice détaillée des notes </nav>
<nav style={{ textAlign: 'center' }}> Matrice détaillée des notes Toutes UE </nav>
<Box
sx={{
height: 500,