Compare commits

...

2 Commits

Author SHA1 Message Date
cherif 58f2e023e6 wcwx 2025-05-06 17:57:47 +02:00
cherif ad041ae4dd 05/05/2025 - 20h 2025-05-05 19:07:10 +02:00
8 changed files with 7035 additions and 101 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

@ -1819,7 +1819,7 @@ const Equipe_Team = (props) => {
form.append("tab_ids", local_tab_ids);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_Groupe_Equipe_Team_Membre/";
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_Equipe_Team_Membre/";
setLoading(true);
axios.post(myurl, form).then(res => {

3392
src/components/Jurys.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -129,6 +129,24 @@ 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: 'class_id', headerName: 'class_id', hide: true },
{ field: 'nom', headerName: 'Nom', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'prenom', headerName: 'Prenom', minwidth: 200, 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: 'note_finale', headerName: 'Noete finale', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'credit_acquis', headerName: 'Credit acquis', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'rang_calculation_date', headerName: 'Date Calcul', 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 +185,39 @@ 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: 'credit', headerName: 'Credit.', 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 },
]
@ -304,12 +341,67 @@ const Module_Session_Notes_Classement = (props) => {
}
const [New_Getall_Session_Final_Note_Classement_result, setNew_Getall_Session_Final_Note_Classement_result] = useState([]);
const [Calcul_Note_Classement_Session_api, setCalcul_Note_Classement_Session_api] = useState();
const [Calcul_Note_Classement_Session_message, setCalcul_Note_Classement_Session_message] = useState();
const [Calcul_Note_Classement_Session_result, setCalcul_Note_Classement_Session_result] = useState([]);
function Calcul_Note_Classement_Session(event) {
const [Getall_Session_Final_Note_Classement_api, setGetall_Session_Final_Note_Classement_api] = useState();
const [Getall_Session_Final_Note_Classement_message, setGetall_Session_Final_Note_Classement_message] = useState();
const [Getall_Session_Final_Note_Classement_result, setGetall_Session_Final_Note_Classement_result] = useState([]);
function Getall_Session_Final_Note_Classement(event) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("session_id", props.related_collection_recid);
setLoading(false);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Calcul_Note_Classement_Session";
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
// console.log(" In Calcul_Note_Classement_Session res.data.status = " + res.data.status);
// console.log(" In Calcul_Note_Classement_Session res.data.message r_class = " + res.data.message);
setCalcul_Note_Classement_Session_api("true");
setCalcul_Note_Classement_Session_result(res.data.message);
Getall_Session_Detail_Final_Note_Classement();
Getall_Session_UE_Final_Note_Classement();
Getall_Session_Final_Note_Classement();
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("success");
}
else {
setCalcul_Note_Classement_Session_api("false");
setCalcul_Note_Classement_Session_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.warn('Not good man :( Calcul_Note_Classement_Session = ', error);
setCalcul_Note_Classement_Session_api("false");
// alert(" Impossible de recuperer la liste des évaluations");
setdisplay_alert_mysy("1");
setalert_message(" Impossible de recuperer la liste des évaluations");
setalert_type("error");
//setmyApimyApiMessage("")
})
}
const [New_Getall_Session_UE_Final_Note_Classement_result, setNew_Getall_Session_UE_Final_Note_Classement_result] = useState([]);
const [Getall_Session_UE_Final_Note_Classement_api, setGetall_Session_UE_Final_Note_Classement_api] = useState();
const [Getall_Session_UE_Final_Note_Classement_message, setGetall_Session_UE_Final_Note_Classement_message] = useState();
const [Getall_Session_UE_Final_Note_Classement_result, setGetall_Session_UE_Final_Note_Classement_result] = useState([]);
function Getall_Session_UE_Final_Note_Classement(event) {
var form = new FormData();
@ -319,15 +411,15 @@ const Module_Session_Notes_Classement = (props) => {
form.append("tab_session_id", props.related_collection_recid);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_List_Evaluation_Final_Note_Classement_With_Filter";
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_List_Evaluation_UE_Note_Classement_With_Filter";
axios.post(myurl, form).then(res => {
if (String(res.data.status) === String("true")) {
// console.log(" In Getall_Session_Final_Note_Classement res.data.status = " + res.data.status);
//console.log(" In Getall_Session_Final_Note_Classement res.data.message r_class = " + res.data.message);
setGetall_Session_Final_Note_Classement_api("true");
setGetall_Session_Final_Note_Classement_result(res.data.message);
// console.log(" In Getall_Session_UE_Final_Note_Classement res.data.status = " + res.data.status);
//console.log(" In Getall_Session_UE_Final_Note_Classement res.data.message r_class = " + res.data.message);
setGetall_Session_UE_Final_Note_Classement_api("true");
setGetall_Session_UE_Final_Note_Classement_result(res.data.message);
var new_data2 = [];
@ -347,6 +439,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 +469,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 +504,117 @@ 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);
if (new_data2.length > 0)
setNew_Getall_Session_UE_Final_Note_Classement_result(new_data2);
}
else {
setGetall_Session_UE_Final_Note_Classement_api("false");
setGetall_Session_UE_Final_Note_Classement_message(res.data.message);
// alert(res.data.message)
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("error");
}
}).catch((error) => {
console.warn('Not good man :( Getall_Session_UE_Final_Note_Classement = ', error);
setGetall_Session_UE_Final_Note_Classement_api("false");
// alert(" Impossible de recuperer la liste des évaluations");
setdisplay_alert_mysy("1");
setalert_message(" Impossible de recuperer la liste des évaluations");
setalert_type("error");
//setmyApimyApiMessage("")
})
}
const [New_Getall_Session_Final_Note_Classement_result, setNew_Getall_Session_Final_Note_Classement_result] = useState([]);
const [Getall_Session_Final_Note_Classement_api, setGetall_Session_Final_Note_Classement_api] = useState();
const [Getall_Session_Final_Note_Classement_message, setGetall_Session_Final_Note_Classement_message] = useState();
const [Getall_Session_Final_Note_Classement_result, setGetall_Session_Final_Note_Classement_result] = useState([]);
function Getall_Session_Final_Note_Classement(event) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("session_id", props.related_collection_recid);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_List_Evaluation_Inscriptio_Note_Classement_With_Filter";
axios.post(myurl, form).then(res => {
if (String(res.data.status) === String("true")) {
// console.log(" In Getall_Session_Final_Note_Classement res.data.status = " + res.data.status);
//console.log(" In Getall_Session_Final_Note_Classement res.data.message r_class = " + res.data.message);
setGetall_Session_Final_Note_Classement_api("true");
setGetall_Session_Final_Note_Classement_result(res.data.message);
var new_data2 = [];
const new_data = res.data.message.map((x) => {
//---
var localid = JSON.parse(x).id;
var local_id = JSON.parse(x)._id;
var inscription_id = JSON.parse(x).inscription_id;
var session_id = JSON.parse(x).session_id;
var class_id = JSON.parse(x).class_id;
var nom = JSON.parse(x).nom;
var prenom = JSON.parse(x).prenom;
var rang = JSON.parse(x).rang;
var note_finale = JSON.parse(x).note_finale;
var rang_calculation_date = JSON.parse(x).rang_calculation_date;
var credit_acquis = JSON.parse(x).credit_acquis;
//---
var node = {
"_id": local_id,
"id": localid,
"label": local_id,
"inscription_id": inscription_id,
"session_id": session_id,
"class_id": class_id,
"nom": nom,
"prenom": prenom,
"rang": rang,
"note_finale": note_finale,
"rang_calculation_date": rang_calculation_date,
"credit_acquis": credit_acquis,
};
new_data2.push(node);
});
//---
var node = {
"_id": "",
"id": "",
"label": "",
"inscription_id": "",
"session_id": "",
"class_id": "",
"nom": "",
"prenom": "",
"rang": "",
"note_finale": "",
"rang_calculation_date": "",
"credit_acquis": "",
};
new_data2.push(node);
@ -427,17 +642,23 @@ const Module_Session_Notes_Classement = (props) => {
//setmyApimyApiMessage("")
})
}
useEffect(() => {
Getall_Session_Detail_Final_Note_Classement();
Getall_Session_UE_Final_Note_Classement();
Getall_Session_Final_Note_Classement();
}, [])
const [gridline_session_inscrit_id, setgridline_session_inscrit_id] = useState("");
const [selectionModel_note_Session_classement, setselectionModel_note_Session_classement] = React.useState([]);
const [gridline_id, setgridline_id] = useState("");
const [selectionModel_note_finale_classement, setselectionModel_note_finale_classement] = React.useState([]);
const [selectionModel_note_UE_classement, setselectionModel_note_UE_classement] = React.useState([]);
const [gridline_detail_id, setgridline_detail_id] = useState("");
@ -475,6 +696,7 @@ const Module_Session_Notes_Classement = (props) => {
/>
}
{/*** FIN Affichage des messages d'alerte*/}
<div style={{ "border": "None" }}>
<div className="div_row" style={{ paddingRight: '10px' }}>
@ -485,7 +707,16 @@ const Module_Session_Notes_Classement = (props) => {
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
&nbsp;
<nav style={{ textAlign: 'center' }}> Matrice des notes & Rang</nav>
<div style={{ width: '100%', float: 'left' }}>
<nav style={{ textAlign: 'center', width: '70%', float: 'left' }}> Notes & Rang Final (session)</nav>
<nav style={{ textAlign: 'right', width: '30%', float: 'left' }}>
<Button variant="outlined" onClick={Calcul_Note_Classement_Session} className="detail_class_submenu" id='calcul_moyenne' name='calcul_moyenne'> Calcul Moyenne </Button>
</nav>
</div>
<Box
sx={{
height: 500,
@ -543,6 +774,12 @@ const Module_Session_Notes_Classement = (props) => {
backgroundColor: '#FFFFFF',
color: 'black',
},
'& .line--statut--isvalide': {
backgroundColor: '#ABEBC6',
color: 'black',
fontWeight: '600',
},
[`& .${gridClasses.cell}`]: {
py: 1,
},
@ -553,7 +790,7 @@ const Module_Session_Notes_Classement = (props) => {
<DataGrid
checkboxSelection
onSelectionModelChange={(newSelectionModel) => {
setselectionModel_note_finale_classement(newSelectionModel);
setselectionModel_note_Session_classement(newSelectionModel);
/*if (newSelectionModel.length === 1)
handleClick_edit_employee_From_Line(newSelectionModel);*/
if (newSelectionModel.length !== 1) {
@ -562,7 +799,7 @@ const Module_Session_Notes_Classement = (props) => {
setadd_One_Employee();*/
}
}}
selectionModel={selectionModel_note_finale_classement}
selectionModel={selectionModel_note_Session_classement}
localeText={frFR.components.MuiDataGrid.defaultProps.localeText}
rows={Getall_Session_Final_Note_Classement_result.map((item, index) => (
@ -571,34 +808,26 @@ const Module_Session_Notes_Classement = (props) => {
_id: JSON.parse(item)._id,
inscription_id: JSON.parse(item).inscription_id,
session_id: JSON.parse(item).session_id,
type_eval: JSON.parse(item).type_eval,
ue_id: JSON.parse(item).ue_id,
class_id: JSON.parse(item).class_id,
note_td: JSON.parse(item).note_td,
note_tp: JSON.parse(item).note_tp,
note_examen: JSON.parse(item).note_examen,
note_finale: JSON.parse(item).note_finale,
rang: JSON.parse(item).rang,
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,
inscription_id_nom: JSON.parse(item).inscription_id_nom,
inscription_id_prenom: JSON.parse(item).inscription_id_prenom,
class_id: JSON.parse(item).class_id,
nom: JSON.parse(item).nom,
prenom: JSON.parse(item).prenom,
rang: JSON.parse(item).rang,
note_finale: JSON.parse(item).note_finale,
rang_calculation_date: JSON.parse(item).rang_calculation_date.substring(0, 10),
credit_acquis: JSON.parse(item).credit_acquis,
}
))}
columns={columns_list_evaluation_note_classement_final}
columns={columns_list_session_note_classement_final}
pageSize={10}
className="datagridclass"
onRowDoubleClick={(newSelectionModel) => {
}}
rowsPerPageOptions={[10]}
@ -614,6 +843,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 +894,198 @@ 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' }}> Notes & Rang par UE</nav>
<Box
sx={{
height: 500,
width: '100%',
paddingRight: '1px',
// Gestion des cellule a distance ou presentiel
'& .cell--distantiel': {
backgroundColor: '#AFE1AF',
color: 'black',
},
'& .cell--presentiel': {
backgroundColor: '#AFE1AF',
color: 'black',
},
// gestion couleur des lignes avec le statut d'inscription
'& .line--statut--annule': {
backgroundColor: '#D8D8D8',
color: 'white',
},
'& .line--statut--inscrit': {
backgroundColor: '#CEF6D8',
color: 'black',
},
'& .line--statut--preinscrit': {
backgroundColor: '#F7F2E0',
color: 'black',
},
/*"& .MuiDataGrid-virtualScrollerRenderZone": {
"& .MuiDataGrid-row": {
"&:nth-child(2n)": { backgroundColor: "rgba(235, 235, 235, .7)" }
}
},*/
"& .MuiDataGrid-columnHeaders": {
backgroundColor: "#c8cfd5",
color: "black",
fontSize: 14
},
'& .line--statut--selected': {
backgroundColor: '#FBF2EF',
color: 'black',
},
'& .line--statut--pair': {
backgroundColor: 'rgba(235, 235, 235, .7)',
color: 'black',
},
'& .line--statut--impair': {
backgroundColor: '#FFFFFF',
color: 'black',
},
'& .line--statut--isvalide': {
backgroundColor: '#ABEBC6',
color: 'black',
fontWeight: '600',
},
[`& .${gridClasses.cell}`]: {
py: 1,
},
}}
>
<DataGrid
checkboxSelection
onSelectionModelChange={(newSelectionModel) => {
setselectionModel_note_UE_classement(newSelectionModel);
/*if (newSelectionModel.length === 1)
handleClick_edit_employee_From_Line(newSelectionModel);*/
if (newSelectionModel.length !== 1) {
/* setsubmenu();
setdisplay_detail_employe();
setadd_One_Employee();*/
}
}}
selectionModel={selectionModel_note_UE_classement}
localeText={frFR.components.MuiDataGrid.defaultProps.localeText}
rows={Getall_Session_UE_Final_Note_Classement_result.map((item, index) => (
{
id: index,
_id: JSON.parse(item)._id,
inscription_id: JSON.parse(item).inscription_id,
session_id: JSON.parse(item).session_id,
type_eval: JSON.parse(item).type_eval,
ue_id: JSON.parse(item).ue_id,
class_id: JSON.parse(item).class_id,
note_td: JSON.parse(item).note_td,
note_tp: JSON.parse(item).note_tp,
note_examen: JSON.parse(item).note_examen,
note_finale: JSON.parse(item).note_finale,
rang: JSON.parse(item).rang,
credit: JSON.parse(item).credit,
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,
inscription_id_nom: JSON.parse(item).inscription_id_nom,
inscription_id_prenom: JSON.parse(item).inscription_id_prenom,
}
))}
columns={columns_list_evaluation_note_classement_final}
pageSize={10}
className="datagridclass"
onRowDoubleClick={(newSelectionModel) => {
}}
rowsPerPageOptions={[10]}
disableSelectionOnClick
components={{
Toolbar: GridToolbar,
}}
//sx={datagridSx}
getCellClassName={(params) => {
}}
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';
}
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';
}
}}
getEstimatedRowHeight={() => 200}
getRowHeight={() => "auto"}
sx={{
"& .MuiDataGrid-cellContent": {
minHeight: 50,
}
}}
/>
</Box>
<br />
</div>
</div>
</div>
</div>
</div>
<div style={{ "border": "None" }}>
<div className="div_row" style={{ paddingRight: '10px' }}>
<div className="session_data">
<div style={{ "border": "None" }}>
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
&nbsp;
<nav style={{ textAlign: 'center' }}> Matrice détaillée des notes Toutes UE </nav>
<Box
sx={{
height: 500,

View File

@ -12,7 +12,7 @@ import { useHistory } from "react-router-dom";
import PartnerInfo from "./UpdatePartnerInfo";
import PartenairStat from "./PartenairStat";
import { Helmet } from "react-helmet";
import RocketIcon from '@mui/icons-material/Rocket';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { GiTeacher } from "react-icons/gi";
import Footer from "./Fotter";
@ -73,7 +73,7 @@ import CRM_Opportunite from "./Crm_Opportunite";
import Partner_Config_Formulaires from "./Partner_Config_Formulaires";
import { AiOutlineUserAdd } from "react-icons/ai";
import PartnerClientActivite from "./PartnerClient_Activite";
import Jury from "./Jurys";
@ -486,7 +486,8 @@ const Partner = (props) => {
"dashbord_session", "mon_tableau_de_bord", "prix_achat", "mes_apprenants", "dashbord_ressources_humaines",
"dashbord_inscriptions", "mes_salles", "mes_opportunites", "config_formulaires", "dashbord_factures", "mes_ue",
"domaine_categorie_metier", "config_formation_initiale", "note_evaluation", "groupe_apprenant",
"part_produit_service", "config_document_super_admin", "tous_mes_document", "equipe_team"]
"part_produit_service", "config_document_super_admin", "tous_mes_document", "equipe_team",
"jurys"]
if (action && list_menu.includes(action)) {
@ -969,6 +970,22 @@ const Partner = (props) => {
}
}
function Display_jurys_func(event) {
var security_retval = check_user_acces_right("jury", "read");
if (security_retval === 1) {
setmenu("jurys");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/jurys");
document.body.style.backgroundColor = "#ffffff";
inactive_active_menu_header("jurys");
} else {
Dialog_1_handle_acces_insuffisant("Vos droits ne sont pas suffisants pour accéder à la gestion des sessions");
}
}
function DiplayStagiaireList(event) {
var security_retval = check_user_acces_right("stagiaire", "read");
if (security_retval === 1) {
@ -1967,6 +1984,14 @@ const Partner = (props) => {
</Sidebar>
</div>}
{String(formation_initiale) === "1" &&
<div>
<Sidebar className="my_sidebar">
{String(menu) !== "jurys" && <Menu className="my_menu bck_menu_seul" id="jurys" name="jurys" onClick={Display_jurys_func} > &nbsp;<RocketIcon className="icone_menu" color={"secondary"} /> &nbsp;JURYS </Menu>}
{String(menu) === "jurys" && <Menu className="my_menu bck_menu_seul_selected" id="jurys" name="jurys" onClick={Display_jurys_func} > &nbsp;<RocketIcon className="icone_menu" color={"secondary"} /> &nbsp;JURYS </Menu>}
</Sidebar>
</div>}
<div>
<Sidebar className="my_sidebar">
@ -2050,7 +2075,7 @@ const Partner = (props) => {
</Sidebar>
</div>
<div>
<Sidebar className="my_sidebar">
{String(menu) !== "equipe_team" && <Menu className="my_menu bck_menu_seul" id="my_equipe_team" name="my_equipe_team" onClick={equipe_team_func} > <Diversity3Icon className="icone_menu" color={"tercier"} /> &nbsp; &nbsp;EQUIPE </Menu>}
@ -2085,7 +2110,7 @@ const Partner = (props) => {
</div>
<div class="separator"></div>
@ -2307,6 +2332,17 @@ const Partner = (props) => {
</div>
}
{String(menu) === "jurys" &&
<div className="div_droite">
<Jury ispending={partnerstatus} currentpack={partnerPackService} conntected_employee_id={conntected_employee_id}
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale}
check_user_acces_right={check_user_acces_right}
/>
</div>
}
{String(menu) === "groupe_apprenant" &&
<div className="div_droite">
@ -2835,6 +2871,21 @@ const Partner = (props) => {
</a>
<hr className="my_hr" />
<Tooltip className="tooltip_css" id="tooltip_id_906" />
{String(formation_initiale) === "1" && <a data-tooltip-id="tooltip_id_906" data-tooltip-html="JURYS">
{String(menu) !== "jurys" && <div className="sousmenu" onClick={Display_jurys_func} > <RocketIcon className="icone_menu" /> &nbsp; </div>}
{String(menu) === "jurys" && <div className="sousmenu_selected" onClick={Display_jurys_func} ><RocketIcon className="icone_menu" /> &nbsp;</div>}
</a>}
<hr className="my_hr" />
<Tooltip className="tooltip_css" id="tooltip_id_907" />
{String(formation_initiale) === "1" && <a data-tooltip-id="tooltip_id_907" data-tooltip-html="NOTES & EVALUATIONS">
{String(menu) !== "note_evaluation" && <div className="sousmenu" onClick={Display_note_evaluation_func} > <FcFlowChart className="icone_menu" /> &nbsp; </div>}
{String(menu) === "note_evaluation" && <div className="sousmenu_selected" onClick={Display_note_evaluation_func} ><FcFlowChart className="icone_menu" /> &nbsp;</div>}
</a>}
<hr className="my_hr" />
<Tooltip className="tooltip_css" id="tooltip_id_10" />
<a data-tooltip-id="tooltip_id_10" data-tooltip-html="STAGIAIRES">
{String(menu) !== "mes_stagiaires" && <div className="sousmenu" onClick={DiplayStagiaireList} > <FcReading className="icone_menu" />&nbsp; </div>}
@ -2904,10 +2955,10 @@ const Partner = (props) => {
<hr className="my_hr" />
<Tooltip className="tooltip_css" id="tooltip_id_16aa" />
<a data-tooltip-id="tooltip_id_16aa" data-tooltip-html="EQUIPEz">
{String(menu) !== "equipe_team" && <Menu className="sousmenu" onClick={equipe_team_func} > <Diversity3Icon className="icone_menu" style={{color:'#dbff75'}}/> &nbsp; </Menu>}
{String(menu) === "equipe_team" && <Menu className="sousmenu_selected" onClick={equipe_team_func} > <Diversity3Icon className="icone_menu" style={{color:'#dbff75'}}/>&nbsp; </Menu>}
{String(menu) !== "equipe_team" && <Menu className="sousmenu" onClick={equipe_team_func} > <Diversity3Icon className="icone_menu" style={{ color: '#dbff75' }} /> &nbsp; </Menu>}
{String(menu) === "equipe_team" && <Menu className="sousmenu_selected" onClick={equipe_team_func} > <Diversity3Icon className="icone_menu" style={{ color: '#dbff75' }} />&nbsp; </Menu>}
</a>
</div>
@ -2917,8 +2968,8 @@ const Partner = (props) => {
<hr className="my_hr" />
<Tooltip className="tooltip_css" id="tooltip_id_16a" />
<a data-tooltip-id="tooltip_id_16a" data-tooltip-html="OPPORTUNITES">
{String(menu) !== "mes_opportunites" && <div className="sousmenu" onClick={Display_mes_opportunites_func}><MdAddShoppingCart className="icone_menu" style={{color:'#dbff75'}} />&nbsp;</div>}
{String(menu) === "mes_opportunites" && <div className="sousmenu_selected" onClick={Display_mes_opportunites_func}> <MdAddShoppingCart className="icone_menu" style={{color:'#dbff75'}} />&nbsp;</div>}
{String(menu) !== "mes_opportunites" && <div className="sousmenu" onClick={Display_mes_opportunites_func}><MdAddShoppingCart className="icone_menu" style={{ color: '#dbff75' }} />&nbsp;</div>}
{String(menu) === "mes_opportunites" && <div className="sousmenu_selected" onClick={Display_mes_opportunites_func}> <MdAddShoppingCart className="icone_menu" style={{ color: '#dbff75' }} />&nbsp;</div>}
</a>
</div>
@ -2926,8 +2977,8 @@ const Partner = (props) => {
<hr className="my_hr" />
<Tooltip className="tooltip_css" id="tooltip_id_16" />
<a data-tooltip-id="tooltip_id_16" data-tooltip-html=" PRIX CLIENT">
{String(menu) !== "pricing" && <div className="sousmenu" onClick={pricing_func} ><FcCurrencyExchange className="icone_menu" style={{color:'#dbff75'}} />&nbsp;</div>}
{String(menu) === "pricing" && <div className="sousmenu_selected" onClick={pricing_func} > <FcCurrencyExchange className="icone_menu" style={{color:'#dbff75'}} />&nbsp;</div>}
{String(menu) !== "pricing" && <div className="sousmenu" onClick={pricing_func} ><FcCurrencyExchange className="icone_menu" style={{ color: '#dbff75' }} />&nbsp;</div>}
{String(menu) === "pricing" && <div className="sousmenu_selected" onClick={pricing_func} > <FcCurrencyExchange className="icone_menu" style={{ color: '#dbff75' }} />&nbsp;</div>}
</a>
</div>
@ -2935,8 +2986,8 @@ const Partner = (props) => {
<hr className="my_hr" />
<Tooltip className="tooltip_css" id="tooltip_id_17" />
<a data-tooltip-id="tooltip_id_17" data-tooltip-html="COMMANDES & DEVIS">
{String(menu) !== "mes_cmd" && <div className="sousmenu" onClick={mes_cmd_func}><FcCollect className="icone_menu" style={{color:'#dbff75'}}/>&nbsp;</div>}
{String(menu) === "mes_cmd" && <div className="sousmenu_selected" onClick={mes_cmd_func}> <FcCollect className="icone_menu" style={{color:'#dbff75'}}/>&nbsp;</div>}
{String(menu) !== "mes_cmd" && <div className="sousmenu" onClick={mes_cmd_func}><FcCollect className="icone_menu" style={{ color: '#dbff75' }} />&nbsp;</div>}
{String(menu) === "mes_cmd" && <div className="sousmenu_selected" onClick={mes_cmd_func}> <FcCollect className="icone_menu" style={{ color: '#dbff75' }} />&nbsp;</div>}
</a>
</div>
@ -2944,8 +2995,8 @@ const Partner = (props) => {
<hr className="my_hr" />
<Tooltip className="tooltip_css" id="tooltip_id_18" />
<a data-tooltip-id="tooltip_id_18" data-tooltip-html="FACTURES & AVOIRS">
{String(menu) !== "factures_client" && <div className="sousmenu" onClick={mes_factures_client_func}><FcKindle className="icone_menu" style={{color:'#dbff75'}}/>&nbsp;</div>}
{String(menu) === "factures_client" && <div className="sousmenu_selected" onClick={mes_factures_client_func}> <FcCollect FcKindle="icone_menu" style={{color:'#dbff75'}}/>&nbsp;</div>}
{String(menu) !== "factures_client" && <div className="sousmenu" onClick={mes_factures_client_func}><FcKindle className="icone_menu" style={{ color: '#dbff75' }} />&nbsp;</div>}
{String(menu) === "factures_client" && <div className="sousmenu_selected" onClick={mes_factures_client_func}> <FcCollect FcKindle="icone_menu" style={{ color: '#dbff75' }} />&nbsp;</div>}
</a>
</div>
@ -3075,6 +3126,15 @@ const Partner = (props) => {
</div>
}
{String(menu) === "jurys" &&
<div className="div_droite div_droite_ralonge">
<Jury ispending={partnerstatus} currentpack={partnerPackService} conntected_employee_id={conntected_employee_id}
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale}
check_user_acces_right={check_user_acces_right} />
</div>
}
{String(menu) === "groupe_apprenant" &&
<div className="div_droite div_droite_ralonge">
@ -3290,19 +3350,19 @@ const Partner = (props) => {
{String(menu) === "mes_opportunites" &&
<div className="div_droite div_droite_ralonge">
<CRM_Opportunite conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("materiel", "read")}
write_access={check_user_acces_right("materiel", "write")}
check_user_acces_right={check_user_acces_right}
/>
write_access={check_user_acces_right("materiel", "write")}
check_user_acces_right={check_user_acces_right}
/>
</div>
}
{String(menu) === "equipe_team" &&
<div className="div_droite div_droite_ralonge">
<Equipe_Team conntected_employee_id={conntected_employee_id}
read_access={check_user_acces_right("equipe", "read")}
write_access={check_user_acces_right("equipe", "write")}
<Equipe_Team conntected_employee_id={conntected_employee_id}
read_access={check_user_acces_right("equipe", "read")}
write_access={check_user_acces_right("equipe", "write")}
check_user_acces_right={check_user_acces_right}
/>
/>
</div>
}
@ -3311,8 +3371,8 @@ const Partner = (props) => {
<div className="div_droite div_droite_ralonge">
<Partner_Commande conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("commande", "read")}
write_access={check_user_acces_right("commande", "write")}
check_user_acces_right={check_user_acces_right}
/>
check_user_acces_right={check_user_acces_right}
/>
</div>
}

File diff suppressed because it is too large Load Diff

View File

@ -197,6 +197,7 @@
@import "./components/module_alert_confirmation";
@import "./components/equipe_team";
@import "./components/module_session_note_classement";
@import "./components/jurys";
// New Design 2025