20/03/2026 - 20h

branche_01062025
Cherif 2026-03-20 19:56:00 +01:00
parent 3729213ea8
commit e76988e21f
2 changed files with 171 additions and 45 deletions

View File

@ -1644,6 +1644,7 @@ const DisplayPartnerPromotion = (props) => {
{ field: 'id', headerName: 'id', hide: true },
{ field: '_id', headerName: '_id', hide: true },
{ field: 'date', headerName: 'date', width: 100, hide: true, flex: 1 },
{ field: 'sequence_title', headerName: 'Titre', width: 150, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'sequence_start', headerName: 'Début', width: 150, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'sequence_end', headerName: 'Fin', width: 150, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'is_present', headerName: 'Présent', width: 90, hide: false, editable: true, type: 'boolean', },
@ -4309,12 +4310,34 @@ const DisplayPartnerPromotion = (props) => {
var local_event_type = JSON.parse(x).event_type;
var local_liste_groupe_code = JSON.parse(x).liste_groupe_code;
var local_obligatoire = ""
var local_obligatoire_label = ""
if (JSON.parse(x).obligatoire) {
local_obligatoire = JSON.parse(x).obligatoire;
if (local_obligatoire === "1")
local_obligatoire_label = "Oblig."
}
if (JSON.parse(x).mode_animation)
var local_mode_animation = JSON.parse(x).mode_animation;
else
var local_mode_animation = ""
var label = ""
if (local_liste_groupe_code) {
label = JSON.parse(x).sequence_start + "-" + JSON.parse(x).sequence_end + " // " + String(local_obligatoire_label) + " // " + String(local_liste_groupe_code)
} else {
label = JSON.parse(x).sequence_start + " - " + JSON.parse(x).sequence_end
}
//---
var node = {
"_id": localid,
@ -4327,7 +4350,7 @@ const DisplayPartnerPromotion = (props) => {
"local_comment": local_session_comment,
"local_event_type": local_event_type,
"local_mode_animation": local_mode_animation,
"label": JSON.parse(x).sequence_start + " - " + JSON.parse(x).sequence_end
"label": label
};
new_data2.push(node);
});
@ -11926,8 +11949,6 @@ const DisplayPartnerPromotion = (props) => {
var local_cible = JSON.parse(x).cible;
var local_joint_pdf = JSON.parse(x).joint_pdf;
//---
var node = {
"_id": local_id,
@ -12002,7 +12023,7 @@ const DisplayPartnerPromotion = (props) => {
//var myurl = process.env.REACT_APP_API_URL + "myclass/api/CreateTableauEmargement/";
// Update du 23/11/2023 : Les emargements sont basé sur les séquence déjà créées
var myurl = process.env.REACT_APP_API_URL + "myclass/api/CreateTableauEmargement_From_Sequence/";
var myurl = process.env.REACT_APP_API_URL + "myclass/api/CreateTableauEmargement_From_Sequence_FI/";
setLoading(true);
axios.post(myurl, form).then(res => {
@ -27854,7 +27875,7 @@ const DisplayPartnerPromotion = (props) => {
setDialog_Emargement_Selection_open(true);
}}>Initialiser émargement</Button>}
}}>Initialiser émargement </Button>}
<Button className="bton_emarge" onClick={(event) => {
@ -27930,6 +27951,7 @@ const DisplayPartnerPromotion = (props) => {
signature: JSON.parse(item).mysy_manual_signature_img,
comment: JSON.parse(item).comment,
sequence_title: JSON.parse(item).sequence_title,
}
))}

View File

@ -179,6 +179,21 @@ const Module_Session_Planification = (props) => {
}
},
{
field: 'obligatoire', headerName: 'Obligatoire', minWidth: 150, flex: 1,
renderCell: (cellValues) => {
return (
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
{cellValues.row.obligatoire && String(cellValues.row.obligatoire) === "1" && "Oui"}
{cellValues.row.obligatoire && String(cellValues.row.obligatoire) !== "1" && "Non"}
</div>
);
}
},
{ field: 'agenda', headerName: 'Agenda', minWidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <Display_Colunm_text {...params} />, },
{ field: 'objectif', headerName: 'Objectif', width: 0, flex: 0, hide: true, editable: false, },
@ -953,6 +968,8 @@ const Module_Session_Planification = (props) => {
const [p_detail_sequence_session_id, setp_detail_sequence_session_id] = useState("");
const [p_detail_sequence_volume_theorique, setp_detail_sequence_volume_theorique] = useState("");
const [p_detail_sequence_obligatoire, setp_detail_sequence_obligatoire] = useState("");
const [p_detail_justified, setp_detail_justified] = useState(false);
const [p_detail_event_type, setp_detail_event_type] = useState("");
@ -1201,6 +1218,8 @@ const Module_Session_Planification = (props) => {
form.append("objectif", p_detail_sequence_objectif);
form.append("commentaire", p_detail_sequence_comment);
form.append("obligatoire", p_detail_sequence_obligatoire);
form.append("mode_animation", p_detail_mode_animation);
form.append("grp_apprenant_id", p_detail_sequence_groupe_apprenant_id);
@ -1542,7 +1561,7 @@ const Module_Session_Planification = (props) => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Getall_Sequence_Of_Session res.data.status = " + res.data.status);
// console.log(" In Getall_Sequence_Of_Session res.data.message r_class = " + res.data.message);
//console.log(" In Getall_Sequence_Of_Session res.data.message r_class = " + res.data.message);
setGetall_Sequence_Of_Session_api("true");
setGetall_Sequence_Of_Session_result(res.data.message);
@ -1591,6 +1610,10 @@ const Module_Session_Planification = (props) => {
var local_mode_animation = JSON.parse(x).mode_animation;
var local_obligatoire = JSON.parse(x).obligatoire;
// Si il n'y pas de relief avec le groupe d'apprenant, on va introduire un relief avec la notion de présentiel et distantiel
if (local_session_color === "" && local_mode_animation === "1") {
// sequence en distantiel, on va mettre un code couleur
@ -1610,6 +1633,7 @@ const Module_Session_Planification = (props) => {
"local_volume_theorique": local_volume_theorique,
"local_agenda": local_agenda,
"local_mode_animation": local_mode_animation,
"local_obligatoire": local_obligatoire,
"local_objectif": local_objectif,
"local_comment": local_session_comment,
@ -1680,7 +1704,7 @@ const Module_Session_Planification = (props) => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Getall_Sequence_Of_Session_With_Filter res.data.status = " + res.data.status);
// console.log(" In Getall_Sequence_Of_Session_With_Filter res.data.message r_class = " + res.data.message);
console.log(" In Getall_Sequence_Of_Session_With_Filter res.data.message r_class = " + res.data.message);
setGetall_Sequence_Of_Session_With_Filter_api("true");
setGetall_Sequence_Of_Session_With_Filter_result(res.data.message);
setGetall_Sequence_Of_Session_result(res.data.message);
@ -1944,6 +1968,8 @@ const Module_Session_Planification = (props) => {
var local_session_ue_titre = (x).ue_titre;
var local_session_ue_code = (x).ue_code;
var local_obligatoire = (x).obligatoire;
var local_session_grp_apprenant_id = (x).grp_apprenant_id;
var local_session_ue_planif_line_id = (x).unite_enseignement_planif_id;
@ -1972,6 +1998,7 @@ const Module_Session_Planification = (props) => {
"local_objectif": local_objectif,
"local_comment": local_session_comment,
"local_type": local_session_type,
"local_obligatoire": local_obligatoire,
"local_ue_id": local_session_ue_id,
"local_ue_titre": local_session_ue_titre,
"local_ue_code": local_session_ue_code,
@ -2110,6 +2137,13 @@ const Module_Session_Planification = (props) => {
]
const New_Option_Oui_Non = [
{ "id": "1", "label": "Oui", "value": "1" },
{ "id": "0", "label": "Non", "value": "0" },
{ "id": "", "label": "", "value": "" },
]
const [Dialog_seq_planif_periode_type, setDialog_seq_planif_periode_type] = React.useState("");
@ -2612,6 +2646,13 @@ const Module_Session_Planification = (props) => {
setp_detail_mode_animation("");
if (arg.event.extendedProps.local_obligatoire) {
setp_detail_sequence_obligatoire(arg.event.extendedProps.local_obligatoire);
}
else
setp_detail_sequence_obligatoire("0");
if (arg.event.extendedProps.local_type) {
setp_detail_event_type(arg.event.extendedProps.local_type);
}
@ -2865,6 +2906,8 @@ const Module_Session_Planification = (props) => {
form.append("grp_apprenant_id", p_detail_sequence_groupe_apprenant_id);
form.append("ue_id", p_detail_sequence_ue_id);
form.append("obligatoire", p_detail_sequence_obligatoire);
form.append("ue_planif_line_id", p_detail_sequence_ue_planif_line_id);
var tab_grp_apprenant_ids = []
@ -4097,7 +4140,7 @@ const Module_Session_Planification = (props) => {
'& .line--statut--selected': {
backgroundColor: '#FBF2EF',
color: "#0a2a4d",
color: "#0a2a4d",
}, [`& .${gridClasses.cell}`]: {
py: 1,
},
@ -4775,27 +4818,59 @@ const Module_Session_Planification = (props) => {
/>
</div>
<nav style={{ "float": "left", "width": "100%" }}>
<div className="session_caract_Dialog" > Volume Théorique
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
<div className="session_caract_Dialog" style={{ width: '50%' }}> Volume Théorique
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_heure_theorique"
id="event_dialog_heure_theorique"
name="event_dialog_heure_theorique"
id="event_dialog_heure_theorique"
fullWidth
type="number"
inputProps={{ min: "0", max: "999999", step: "0.5" }}
value={p_detail_sequence_volume_theorique}
onChange={(e) => {
setp_detail_sequence_volume_theorique(e.target.value);
}
}
fullWidth
type="number"
inputProps={{ min: "0", max: "999999", step: "0.5" }}
value={p_detail_sequence_volume_theorique}
onChange={(e) => {
setp_detail_sequence_volume_theorique(e.target.value);
}
}
/>
/>
</div>
</div>
<div className="session_caract_Dialog" style={{ width: '50%' }}> Obligatoire
{New_Option_Oui_Non && New_Option_Oui_Non.length > 0 && <Autocomplete
disablePortal
name="event_dialog_seq_obligatoire"
id="event_dialog_seq_obligatoire"
fullWidth
options={New_Option_Oui_Non}
value={New_Option_Oui_Non.filter((data) => (data).value === String(p_detail_sequence_obligatoire))[0].label}
onChange={(event, value) => {
if (value && value.value) {
setp_detail_sequence_obligatoire(value.value);
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>}
</div>
</nav>
<div className="session_caract_Dialog_comment_2_lines" > Agenda
<TextField
@ -6494,27 +6569,55 @@ const Module_Session_Planification = (props) => {
/>
</div>
<nav style={{ "float": "left", "width": "100%" }}>
<div className="session_caract_Dialog" style={{ width: '50%' }}> Volume Théorique
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
<div className="session_caract_Dialog" > Volume Théorique
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_heure_theorique"
id="event_dialog_heure_theorique"
name="event_dialog_heure_theorique"
id="event_dialog_heure_theorique"
fullWidth
type="number"
inputProps={{ min: "0", max: "999999", step: "0.5" }}
value={p_detail_sequence_volume_theorique}
onChange={(e) => {
setp_detail_sequence_volume_theorique(e.target.value);
}
}
fullWidth
type="number"
inputProps={{ min: "0", max: "999999", step: "0.5" }}
value={p_detail_sequence_volume_theorique}
onChange={(e) => {
setp_detail_sequence_volume_theorique(e.target.value);
}
}
/>
/>
</div>
</div>
<div className="session_caract_Dialog" style={{ width: '50%' }}> Obligatoire
{New_Option_Oui_Non && New_Option_Oui_Non.length > 0 && <Autocomplete
disablePortal
name="event_dialog_seq_obligatoire"
id="event_dialog_seq_obligatoire"
fullWidth
options={New_Option_Oui_Non}
value={New_Option_Oui_Non.filter((data) => (data).value === String(p_detail_sequence_obligatoire))[0].label}
onChange={(event, value) => {
if (value && value.value) {
setp_detail_sequence_obligatoire(value.value);
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>}
</div>
</nav>
<div className="session_caract_Dialog_comment_2_lines" > Agenda
<TextField
@ -6765,7 +6868,7 @@ const Module_Session_Planification = (props) => {
'& .line--statut--selected': {
backgroundColor: '#FBF2EF',
color: "#0a2a4d",
color: "#0a2a4d",
}, [`& .${gridClasses.cell}`]: {
py: 1,
},
@ -6802,6 +6905,7 @@ const Module_Session_Planification = (props) => {
type: JSON.parse(item).type,
grp_apprenant_code: JSON.parse(item).grp_apprenant_code,
liste_groupe_code: JSON.parse(item).liste_groupe_code,
obligatoire: JSON.parse(item).obligatoire,
}
))}
@ -6895,7 +6999,7 @@ const Module_Session_Planification = (props) => {
{selectionModel_sequence && selectionModel_sequence.length > 1 && ( String(props.origin) === "session" || String(props.origin) === "promotion" ) &&
{selectionModel_sequence && selectionModel_sequence.length > 1 && (String(props.origin) === "session" || String(props.origin) === "promotion") &&
String(props.check_user_acces_right("session", "write")) === "1" &&
<div className="block_en_mass">
@ -6998,7 +7102,7 @@ const Module_Session_Planification = (props) => {
{display_view && String(display_view) === "planning" && Getall_Sequence_Of_Session_result_planning_view &&
<div style={{ "border": "None" }} >
&nbsp;
<div style={{ "width": "98%", "marginLeft": "5px", padding: '10px', fontFamily: 'DM Sans', fontSize: '14px' }} >
@ -7055,7 +7159,7 @@ const Module_Session_Planification = (props) => {
'& .line--statut--selected': {
backgroundColor: '#FBF2EF',
color: "#0a2a4d",
color: "#0a2a4d",
}, [`& .${gridClasses.cell}`]: {
py: 1,
},
@ -7173,7 +7277,7 @@ const Module_Session_Planification = (props) => {
{display_view && String(display_view) === "planning" &&
<div style={{ "border": "None" }}>
&nbsp;
<div style={{ "width": "98%", "marginLeft": "5px", }} >
<FullCalendar
@ -7232,7 +7336,7 @@ const Module_Session_Planification = (props) => {
</div>}
{(!new_planification_lines || new_planification_lines.length <= 0) && ( String(props.origin) === "session" || String(props.origin) === "promotion" ) &&
{(!new_planification_lines || new_planification_lines.length <= 0) && (String(props.origin) === "session" || String(props.origin) === "promotion") &&
String(props.check_user_acces_right("session", "write")) === "1" &&
<div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>