29/10/2025 - 22h

branche_01062025
Cherif 2025-10-29 22:12:07 +01:00
parent 3007151444
commit 7288b00f5a
17 changed files with 1462 additions and 2040 deletions

View File

@ -95,9 +95,13 @@ function App() {
const New_Sign_Up_2025 = lazy(() => import("./pages/new_p_sign_up_2025"));
const New_Sign_In_2025 = lazy(() => import("./pages/new_p_sign_in_2025"));
const Student_Account = lazy(() => import("./pages/student_account"));
const Account = lazy(() => import("./pages/account"));
const Student_Planning = lazy(() => import("./pages/mon_ent_student_planning"));
const Account = lazy(() => import("./pages/account"));
const TestUrl = lazy(() => import("./pages/testurl"));
const Mon_Ent_Student = lazy(() => import("./pages/mon_ent_student"));
const Mon_Intranet_Public = lazy(() => import("./pages/mon_intranet_public"));
const Mon_Catalogue_Public = lazy(() => import("./pages/mon_catalogue_public"));
const Recherche_new_v4 = lazy(() => import("./pages/recherche_new_v4"));
@ -114,7 +118,7 @@ function App() {
const UpdateAttendeeList = lazy(() => import("./pages/updateattendeelist"));
const SurveyDocument = lazy(() => import("./pages/surveydocument"));
const SurveyDocument_Qr_Code = lazy(() => import("./pages/surveydocument_qr_code"));
const SurveyDocument_Qr_Code = lazy(() => import("./pages/surveydocument_qr_code"));
const ESignDiplayDignedDocument = lazy(() => import("./pages/edigndiplaydigneddocument"));
const ESign = lazy(() => import("./pages/eSigne"));
@ -280,13 +284,13 @@ function App() {
<Route path="/qr_emargement/:session_id/:partner_owner_recid/:my_safe_token" exact component={Emarge_QR_Code} />
<Route path="/qr_survey_eval/:session_id/:survey_type/:qr_code_safe_token" exact component={Survey_Eval_QR_Code} />
<Route path="/qr_survey_eval/:session_id/:survey_type/:qr_code_safe_token" exact component={Survey_Eval_QR_Code} />
<Route path="/E_Signature/:document_id" exact component={ESign} />
<Route path="/E_Document/:document_id/:partner_owner_recid/:secret_key_signature" exact component={ESignDiplayDignedDocument} />
<Route path="/Survey/:survey_id/" exact component={SurveyDocument} />
<Route path="/Survey/qrcode/:survey_id/" exact component={SurveyDocument_Qr_Code} />
<Route path="/Survey/qrcode/:survey_id/" exact component={SurveyDocument_Qr_Code} />
<Route path="/UpadateAttendeeList/:client_id/:session_id/:partner_owner_recid/" exact component={UpdateAttendeeList} />
<Route path="/automatic-quotation/:partner_owner_recid/:objid/" exact component={AutomaticQuotation} />
@ -362,6 +366,7 @@ function App() {
<Route path="/DeleteUserAccount/:token" exact component={DeleteUserAccount} />
<Route path="/mysy-student-account" exact component={Student_Account} />
<Route path="/mysy-student-planning" exact component={Student_Planning} />
{/* Fin Migration */}

View File

@ -2800,7 +2800,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
</div>}
{ue_data_edit_mode && String(ue_data_edit_mode) !== "1" && <div className="session_caract"><b> Bloc </b><br />
{ue_data_edit_mode && String(ue_data_edit_mode) !== "1" && <div className="session_caract"><b> Bloc Format.</b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -2816,7 +2816,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
/>
</div>}
{ue_data_edit_mode && String(ue_data_edit_mode) === "1" && <div className="session_caract"><b> Bloc </b><br />
{ue_data_edit_mode && String(ue_data_edit_mode) === "1" && <div className="session_caract"><b> Bloc Format.</b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -2861,7 +2861,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
}}
renderInput={(params) => <TextField {...params} label="" />
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
@ -2885,7 +2888,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
/>
</div>}
</div>}
{ue_data_edit_mode && String(ue_data_edit_mode) === "1" && <div>
<div className="session_caract"> Compétences<br />
@ -2939,13 +2942,13 @@ const DisplayPartnerUnite_Enseignement = (props) => {
{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 &nbsp;
<Tooltip className="tooltip_css" id="detail_regle_calcul2" />
<Tooltip className="tooltip_css" id="detail_regle_calcul2" />
<a data-tooltip-id="detail_regle_calcul2" data-tooltip-html={New_Get_List_Regle_Calcul_Note_UE_result.filter((data) => (data)._id === String(p_detail_note_ue_calculation_rule_id))[0].calcul_rule}>
<FcInfo />
</a>
<br />
<br />
<Autocomplete
disablePortal
name="detail_ue_note_ue_calculation_rule_id"
@ -2964,7 +2967,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
}}
renderInput={(params) => <TextField {...params} label="Choisir" />
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
</div>}
@ -3229,7 +3235,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
}}
renderInput={(params) => <TextField {...params} label="" />
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
</a>
@ -3455,7 +3464,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
<Button variant="contained" className="bton_enreg" onClick={Add_Update_UE_Data}>Enregistrer les modifications
<Button variant="contained" className="bton_enreg" onClick={Add_Update_UE_Data}>Enregistrer
</Button>
</div>
@ -3777,7 +3786,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
<Button variant="contained" className="bton_enreg" onClick={Add_Update_UE_Data}>Enregistrer les modifications
<Button variant="contained" className="bton_enreg" onClick={Add_Update_UE_Data}>Enregistrer
</Button>
</div>
@ -4031,7 +4040,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
/>
</div>
<div className="session_caract"> Bloc <br />
<div className="session_caract"> Bloc Format.<br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -4068,7 +4077,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
}}
renderInput={(params) => <TextField {...params} label="" />
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
@ -4119,7 +4131,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
}}
renderInput={(params) => <TextField {...params} label="Formule de calcul" />
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>}
@ -4238,7 +4253,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
}}
renderInput={(params) => <TextField {...params} label="" />
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
</a>

View File

@ -40,7 +40,7 @@ const useStyles = makeStyles((theme) => ({
// left: 10,
top: 400
},
paper: {
overflowY: 'unset',
},
@ -61,8 +61,13 @@ const ENT_Student_Header = () => {
const [partnerconnected, setpartnerconnected] = useState("0");
const stored_user = getCookie('tokenmysych');
const stored_part = getCookie('tokenmysypart');
const stored_apprenant_id = getCookie('tokenmysychapprenant');
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych'], { path: '/' });
const [partcookie, setpartCookie, removepartCookie] = useCookies(['tokenmysypart'], { path: '/' });
const [cookie_apprenant_id, setCookie_apprenant_id, removeCookie_apprenant_id] = useCookies(['tokenmysychapprenant'], { path: '/' });
const [PartnerMenu, setPartnerMenu] = React.useState(null);
const [AccountMenu, setAccountMenu] = React.useState(null);
const [ProduitMenu, setproduitMenu] = React.useState(null);
@ -71,6 +76,7 @@ const ENT_Student_Header = () => {
var local_user_connect = 0;
var local_part_connect = 0;
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
local_user_connect = 0;
@ -175,6 +181,10 @@ const ENT_Student_Header = () => {
removeCookie("tokenmysych", { path: '/' });
setCookie_apprenant_id("tokenmysychapprenant", "", { path: '/' });
removeCookie_apprenant_id("tokenmysychapprenant", { path: '/' });
}
history.push("/ent_student");
}
@ -211,7 +221,7 @@ const ENT_Student_Header = () => {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle style={{ cursor: 'move', fontFamily:"DM Sans"}} id="draggable-dialog-title" >MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title" >MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
Confirmez la deconnexion de l'ENT <br />
@ -266,38 +276,23 @@ const ENT_Student_Header = () => {
}} />
<nav className="menu-list">
<a href="/apropos" className="menu-link">À propos</a>
<a href="/fonctionnalites" className="menu-link">Fonctionnalités</a>
<a href="#" className="menu-link">
<nav onClick={(e) => {
history.push("/tarif/#debut");
// window.open("/tarif/#debut", "_self");
}}>Tarifs </nav>
</a>
<a href="/Recherche-Article-formation" className="menu-link">Blog</a>
<a href="/mysy-student-account" className="menu-link">Formations</a>
<a href="/mysy-student-planning" className="menu-link">Planning</a>
<a href="/Recherche-Article-formation" className="menu-link">Notes</a>
<div className="separator"></div>
<a href="/marketplace" className="menu-link">Marketplace</a>
<a href="/marketplace" className="menu-link">Documents</a>
<div className="separator"></div>
<a href="/marketplace" className="menu-link">Emails</a>
</nav>
</div>
<div className="cta-login">
<div className="cta-buttons">
<button className="btn btn-primary" onClick={(e) => {
e.preventDefault();
var date2 = new Date();
const format2 = "YYYY-MM";
var dateTime2 = moment(date2).format(format2);
window.open(
"https://calendly.com/mysytraining/demo-mysy-training-solution?month=" + String(dateTime2),
'_blank'
);
}}>Réserver une démo</button>
</div>
<div className="cta-buttons hide_on_mobile">
{String(someoneconnected) !== String("1") && <button className="btn btn-secondary" onClick={handleAccountCreation}>Créer un compte</button>}
{String(someoneconnected) === String("1") && <button className="btn btn-secondary" onClick={handleAccountConnexion_v2}>Mon compte</button>}
{String(someoneconnected) === String("1") && <button className="btn btn-primary" onClick={handleAccountConnexion_v2}>Mon compte</button>}
</div>
<div className="separator hide_on_mobile"></div>

View File

@ -20,10 +20,14 @@ function Module_Connexion_Ent_Student() {
const [isconnected, setisconnected] = useState("");
const [cookie_acces_right, setCookie_acces_right, removeCookie_acces_right] = useCookies(['mysy_user_access_right']);
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych'], { path: '/' });
const [cookie_apprenant_id, setCookie_apprenant_id, removeCooki_apprenant_ide] = useCookies(['tokenmysychapprenant'], { path: '/' });
const [cookie_part, setCookie_part, removeCookie_part] = useCookies(['tokenmysypart'], { path: '/' });
const [retval, setretval] = useState("0");
const [myApimyApiMessage, setmyApimyApiMessage] = useState("");
const [initpasswd, setinitpasswd] = useState();
const [selected_apprenant_id, setselected_apprenant_id] = useState("");
const [result, setResult] = useState("");
const [myApiResponse, setmyApiResponse] = useState("false");
const url_login = process.env.REACT_APP_API_URL + "myclass/api/Ent_Student_login/";
@ -131,12 +135,15 @@ function Module_Connexion_Ent_Student() {
}
).then((response) => response.json())
.then((result) => {
//console.log('Success:', result['message'], "result['status'] = ", result['status']);
// console.log('Success:', result['message'], "result['status'] = ", result['status'], "result['apprenant_id'] = ", result['apprenant_id']);
var val = result['status'];
if (String(val) === String("true")) {
setCookie("tokenmysych", result['message']);
setCookie("tokenmysychapprenant", result['apprenant_id']);
setselected_apprenant_id(result['apprenant_id'])
// Verification vers quelle page les renvoyer
if (obj === "training" && String(objid).length > 0) {
@ -148,7 +155,8 @@ function Module_Connexion_Ent_Student() {
history.push({
pathname: "/mysy-student-account",
state: {
firstconnexion: String(result['firstconnexion'])
firstconnexion: String(result['firstconnexion']),
apprenant_id: String(result['apprenant_id'])
}
});
}
@ -364,7 +372,7 @@ function Module_Connexion_Ent_Student() {
setcurrentpawdvisible(false);
}
};
return (
<div style={{ width: "100%", float: "left" }}>
@ -377,16 +385,16 @@ function Module_Connexion_Ent_Student() {
<div className="display_screen_600_901">
<div style={{ width: '100%', }}>
<h3 style={{ fontFamily: 'DM Sans' }}> Bienvenue sur Espace Numérique de Travail </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Bienvenue sur Espace Numérique de Travail </h3>
</div>
<div style={{ width: '100%', }}>
<div style={{ width: '100%', }}>
<div style={{ width: '50%', float: 'left' }}>
<img src={ent_studend_img} style={{width:'100%'}}/>
<div style={{ width: '50%', float: 'left' }}>
<img src={ent_studend_img} style={{ width: '100%' }} />
</div>
<div style={{ width: '50%', float: 'left', paddingTop:'2rem' }}>
<div style={{ width: '50%', float: 'left', paddingTop: '2rem' }}>
<div className="div_centre_master">
<div className="div_centre_002">
<Button variant="outlined" onClick={menu_user_account} className="signin_menu"

View File

@ -642,10 +642,6 @@ registerLocale('fr', fr);
setDialog_DIALOG_AGENDA_open(true);
}
const Dialog_DIALOG_AGENDA_handleClose = () => {
//alert(" Utiliser le bouton 'fermer' ");
//setOpen(false);
};
const Dialog_DIALOG_AGENDA_handleClose_buton = () => {
setDialog_DIALOG_AGENDA_open(false);
@ -1620,7 +1616,7 @@ registerLocale('fr', fr);
return (
<div className="module_ent_mes_formations" >
<div className="module_ent_mes_formations" >
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>

View File

@ -73,6 +73,14 @@ import Paper from '@material-ui/core/Paper';
import Draggable from 'react-draggable';
import { IconButton } from '@material-ui/core';
import FullCalendar from "@fullcalendar/react";
import daygridPlugin from "@fullcalendar/daygrid";
import interactionPlugin from "@fullcalendar/interaction";
import timeGridPlugin from "@fullcalendar/timegrid";
import allLocales from '@fullcalendar/core/locales-all';
function PaperComponent(props) {
return (
<Draggable
@ -105,12 +113,102 @@ const useStyles = makeStyles((theme) => ({
}));
const Module_Ent_Mon_Planning = (props) => {
registerLocale('fr', fr);
registerLocale('fr', fr);
const classes = useStyles();
const history = useHistory();
const [submenu, setsubmenu] = useState("");
const handleSelect = (info) => {
return;
};
const handleEventClick = (arg) => {
//console.log(" ## ARG = ", arg.event)
// console.log(" ## arg.event.id = ", arg.event.id)
setp_detail_sequence_title(arg.event.title)
setsequence_startDate(arg.event.start)
setsequence_endDate(arg.event.end)
setp_detail_event_id(arg.event.id);
if (arg.event.extendedProps.type) {
setp_detail_event_type(arg.event.extendedProps.type);
}
else
setp_detail_event_type("");
if (arg.event.extendedProps.local_comment) {
setp_detail_sequence_comment(arg.event.extendedProps.local_comment);
}
else
setp_detail_sequence_comment("");
if (arg.event.extendedProps.local_mode_animation) {
if (String(arg.event.extendedProps.local_mode_animation) === "1")
setp_detail_mode_animation_label("Distanciel");
else if (String(arg.event.extendedProps.local_mode_animation) === "2")
setp_detail_mode_animation_label("Hybride");
else if (String(arg.event.extendedProps.local_mode_animation) === "0")
setp_detail_mode_animation_label("Présentiel");
}
else
setp_detail_mode_animation_label("");
if (arg.event.extendedProps.local_objectif) {
setp_detail_sequence_objectif(arg.event.extendedProps.local_objectif);
}
else
setp_detail_sequence_objectif("");
if (arg.event.extendedProps._id) {
setp_detail_event_id(arg.event.extendedProps._id);
}
else
setp_detail_event_id("");
if (arg.event.extendedProps.local_agenda) {
setp_detail_sequence_agenda(arg.event.extendedProps.local_agenda);
}
else
setp_detail_sequence_agenda("");
setDialog_DIALOG_AGENDA_open(true);
}
const [p_detail_mode_animation_label, setp_detail_mode_animation_label] = useState("");
const [Partner_Debut_Journee, setPartner_Debut_Journee] = useState("7:00");
const [Partner_Fin_Journee, setPartner_Fin_Journee] = useState("20:00");
const [p_detail_justified, setp_detail_justified] = useState(false);
const [p_detail_event_type, setp_detail_event_type] = useState("");
const [p_detail_event_id, setp_detail_event_id] = useState();
const [p_detail_sequence_title, setp_detail_sequence_title] = useState();
const [p_detail_sequence_comment, setp_detail_sequence_comment] = useState();
const [p_detail_sequence_agenda, setp_detail_sequence_agenda] = useState();
const [p_detail_sequence_objectif, setp_detail_sequence_objectif] = useState();
const [sequence_startDate, setsequence_startDate] = useState(new Date());
const [sequence_endDate, setsequence_endDate] = useState(new Date());
const renderEventContent = (eventInfo) => {
//console.log(eventInfo);
return (
<>
<b>{eventInfo.timeText}</b><br />
<i>{eventInfo.event.title}</i><br />
{eventInfo.event.extendedProps.local_mode_animation && String(eventInfo.event.extendedProps.local_mode_animation) === "1" &&
<i><b>Distanciel</b></i>}
</>
)
};
const filters = [
@ -207,7 +305,7 @@ registerLocale('fr', fr);
<Button
onClick={(event) => {
onClick={(event) => {
//handleClick_edit_apprenant_From_Line(cellValues.row.id);
}}
>
@ -278,38 +376,321 @@ registerLocale('fr', fr);
},
]
const [isLoading, setLoading] = useState();
const [isLoading, setLoading] = useState();
const [p_filtre1, setp_filtre1] = useState("");
const [p_filtre1_value, setp_filtre1_value] = useState("");
const [p_filtre2, setp_filtre2] = useState("");
const [p_filtre2_value, setp_filtre2_value] = useState("");
const [p_filtre3, setp_filtre3] = useState("");
const [p_filtre3_value, setp_filtre3_value] = useState("");
const [p_filtre4, setp_filtre4] = useState("");
const [p_filtre4_value, setp_filtre4_value] = useState("");
const [p_filtre1, setp_filtre1] = useState("");
const [p_filtre1_value, setp_filtre1_value] = useState("");
const [display_alert_mysy, setdisplay_alert_mysy] = useState("");
const [alert_message, setalert_message] = useState("");
const [alert_type, setalert_type] = useState("");
function clear_alert_message() {
setalert_message("");
}
function clear_alert_type() {
setalert_type("");
}
function clear_display_alert_mysy() {
setdisplay_alert_mysy("");
const [p_filtre2, setp_filtre2] = useState("");
const [p_filtre2_value, setp_filtre2_value] = useState("");
const [p_filtre3, setp_filtre3] = useState("");
const [p_filtre3_value, setp_filtre3_value] = useState("");
const [p_filtre4, setp_filtre4] = useState("");
const [p_filtre4_value, setp_filtre4_value] = useState("");
const [display_alert_mysy, setdisplay_alert_mysy] = useState("");
const [alert_message, setalert_message] = useState("");
const [alert_type, setalert_type] = useState("");
function clear_alert_message() {
setalert_message("");
}
function clear_alert_type() {
setalert_type("");
}
function clear_display_alert_mysy() {
setdisplay_alert_mysy("");
}
const [Get_Given_Class_Data_api, setGet_Given_Class_Data_api] = useState();
const [Get_Given_Class_Data_message, setGet_Given_Class_Data_message] = useState();
const [Get_Given_Class_Data_result, setGet_Given_Class_Data_result] = useState();
function Get_Given_Class_Data(local_class_id) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysych');
form.append("class_id", local_class_id);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/get_Ent_Student_Given_Class_From_Class_Id/";
setLoading(true);
axios.post(myurl, form).then(res => {
// console.log(" In Get_Given_Class_Data res.data.status = " + res.data.status);
// console.log(" In Get_Given_Class_Data res.data.message r_class = " + res.data.message);
setLoading(false);
if (String(res.data.status) === String("true")) {
setGet_Given_Class_Data_api("true");
setGet_Given_Class_Data_result(res.data.message);
if (document.getElementById('myRef_detail')) {
var divh = document.getElementById('myRef_detail').offsetTop;
window.scrollTo({
top: divh,
behavior: "smooth",
});
}
}
else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message);
history.push("/ent_student");
}
else {
setGet_Given_Class_Data_api("false");
setGet_Given_Class_Data_message(res.data.message);
alert('Erreur: ' + res.data.message);
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Given_Class_Data = ', error);
setGet_Given_Class_Data_api("false");
alert('Erreur: Impossible les données de la formation');
})
}
const [selected_session_id, setselected_session_id] = useState("");
const [Getall_Sequence_Of_Session_result_planning_view, setGetall_Sequence_Of_Session_result_planning_view] = useState([]);
const [Getall_Sequence_Of_Session_api, setGetall_Sequence_Of_Session_api] = useState();
const [Getall_Sequence_Of_Session_message, setGetall_Sequence_Of_Session_message] = useState();
const [Getall_Sequence_Of_Session_result, setGetall_Sequence_Of_Session_result] = useState();
function Getall_Sequence_Of_Session(local_session_id) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysych');
const stored_apprenant_id = getCookie('tokenmysychapprenant');
form.append("token", stored_cookie);
form.append("apprenant_id", stored_apprenant_id);
if (String(local_session_id).length > 3) {
form.append("session_id", local_session_id);
}
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Ent_Student_Session_Sequence_List/";
setLoading(true);
axios.post(myurl, form).then(res => {
// 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);
setLoading(false);
if (String(res.data.status) === String("true")) {
// console.log(" In Getall_Sequence_Of_Session res.data.nb_sequence r_class = " + res.data.nb_sequence);
setGetall_Sequence_Of_Session_api("true");
setGetall_Sequence_Of_Session_result(res.data.message);
// console.log(" ##NB_Sequence iii = ", res.data.nb_sequence);
var new_data2 = [];
const new_data = res.data.message.map((x) => {
//---
var localid = JSON.parse(x)._id; // on donne volontairement a l'id la valeur de '_id'
var local_id = JSON.parse(x)._id;
var local_title = JSON.parse(x).sequence_title;
var local_start = new Date(moment(JSON.parse(x).sequence_start, "DD/MM/YYYY hh:mm"))
var local_end = new Date(moment(JSON.parse(x).sequence_end, "DD/MM/YYYY hh:mm"))
var local_agenda = JSON.parse(x).agenda;
var local_objectif = JSON.parse(x).objectif;
var local_session_id = JSON.parse(x).session_id;
var local_session_comment = JSON.parse(x).commentaire;
var local_mode_animation = JSON.parse(x).mode_animation;
var local_session_color = "#3788d8";
if (local_mode_animation === "1") {
// sequence en distantiel, on va mettre un code couleur
local_session_color = "#4ea860"
}
var local_type = JSON.parse(x).type;
//---
var node = {
"_id": localid,
"id": localid,
"title": local_title,
"start": local_start,
"end": local_end,
"local_mode_animation": local_mode_animation,
"local_agenda": local_agenda,
"local_objectif": local_objectif,
"local_comment": local_session_comment,
"color": local_session_color,
"type": local_type,
};
new_data2.push(node);
});
if (new_data2.length > 0) {
setGetall_Sequence_Of_Session_result_planning_view(new_data2);
//console.log(" ### new_data2 = ", new_data2);
}
}
else {
setGetall_Sequence_Of_Session_api("false");
setGetall_Sequence_Of_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 :( Getall_Sequence_Of_Session = ', error);
setGetall_Sequence_Of_Session_api("false");
alert("Impossible de récuperer la liste des séquences")
//setmyApimyApiMessage("")
})
}
const [New_Get_List_Ent_Session_Promotion_result, setNew_Get_List_Ent_Session_Promotion_result] = useState([]);
const [Get_List_Ent_Session_Promotion_api, setGet_List_Ent_Session_Promotion_api] = useState();
const [Get_List_Ent_Session_Promotion_message, setGet_List_Ent_Session_Promotion_message] = useState();
const [Get_List_Ent_Session_Promotion_result, setGet_List_Ent_Session_Promotion_result] = useState();
function Get_List_Ent_Session_Promotion(event) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysych');
const stored_apprenant_id = getCookie('tokenmysychapprenant');
form.append("token", stored_cookie);
form.append("apprenant_id", stored_apprenant_id);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Ent_Student_List_Session_Promotion/";
setLoading(true);
axios.post(myurl, form).then(res => {
//console.log(" In Get_List_Ent_Session_Promotion res.data.status = " + res.data.status);
// console.log(" In Get_List_Ent_Session_Promotion res.data.message r_class = " + res.data.message);
setLoading(false);
if (String(res.data.status) === String("true")) {
setGet_List_Ent_Session_Promotion_api("true");
setGet_List_Ent_Session_Promotion_result(res.data.message);
var new_data2 = [];
const new_data = res.data.message.map((x) => {
//---
var localid = JSON.parse(x).id;
var inscription_id = JSON.parse(x).inscription_id;
var session_id = JSON.parse(x).session_id;
var session_code_session = JSON.parse(x).session_code_session;
var session_titre = JSON.parse(x).session_titre;
var session_date_du = JSON.parse(x).session_date_du;
var session_date_au = JSON.parse(x).session_date_au;
var class_id = JSON.parse(x).class_id;
var class_title = JSON.parse(x).class_title;
//---
var node = {
"id": localid,
"label": session_code_session + " " + session_titre + " - " + session_date_du + " au " + session_date_au,
"inscription_id": inscription_id,
"session_id": session_id,
"session_code_session": session_code_session,
"session_titre": session_titre,
"session_date_du": session_date_du,
"session_date_au": session_date_au,
"class_id": class_id,
"class_title": class_title,
};
new_data2.push(node);
});
var node = {
"id": "",
"label": "",
"inscription_id": "",
"session_id": "",
"session_code_session": "",
"session_titre": "",
"session_date_du": "",
"session_date_au": "",
"class_id": "",
"class_title": "",
};
new_data2.push(node);
if (new_data2.length > 0)
setNew_Get_List_Ent_Session_Promotion_result(new_data2);
}
else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message);
history.push("/ent_student");
}
else {
setGet_List_Ent_Session_Promotion_api("false");
setGet_List_Ent_Session_Promotion_message(res.data.message);
alert('Erreur: ' + res.data.message);
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_List_Ent_Session_Promotion = ', error);
setGet_List_Ent_Session_Promotion_api("false");
alert('Erreur: Impossible de recuperer la liste des promotions et sessions');
})
}
useEffect(() => {
Getall_Sequence_Of_Session("");
Get_List_Ent_Session_Promotion();
window.scrollTo({
top: 0,
behavior: "smooth",
});
}, [props.apprenant_id])
const [Dialog_DIALOG_AGENDA_message, setDialog_DIALOG_AGENDA_message] = React.useState(false);
const [Dialog_DIALOG_AGENDA_open, setDialog_DIALOG_AGENDA_open] = React.useState(false);
function Dialog_DIALOG_AGENDA_handle_change_participant_session(message) {
setDialog_DIALOG_AGENDA_message(message);
setDialog_DIALOG_AGENDA_open(true);
}
const Dialog_DIALOG_AGENDA_handleClose_buton = () => {
setDialog_DIALOG_AGENDA_open(false);
};
return (
<div className="module_ent_mon_planning">
<div className="module_ent_mon_planning" style={{ width: '90%', maxWidth: '1500px', margin: 'auto' }}>
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
@ -327,8 +708,219 @@ registerLocale('fr', fr);
}
{/*** FIN Affichage des messages d'alerte*/}
{/**** Dialogue pour AGENDA */}
<h3 style={{ fontFamily: 'DM Sans' }}> Mes apprenants </h3>
<Dialog
open={Dialog_DIALOG_AGENDA_open}
// onClose={Dialog_DIALOG_AGENDA_handleClose}
className="module_agenda"
static
onClose={() => null}
PaperProps={{
className: classes.paper, // Apply the paper style
style: {
overflowY: 'unset',
position: 'absolute',
top: '7rem',
margin: "2px",
},
}}
hideBackdrop={true}
disableScrollLock
classes={{
paper: classes.dialog
}}
PaperComponent={PaperComponent}
aria-labelledby="draggable-dialog-title"
>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title" >MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_DIALOG_AGENDA_message}
</DialogContentText>
<div className="session_caract_Dialog" >
<nav style={{ "float": "left", "width": "30%", "paddingTop": "15px" }}> Type </nav>
<nav style={{ "float": "right", "width": "65%" }}>
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_event_type"
id="event_dialog_event_type"
fullWidth
value={p_detail_event_type}
disabled={true}
/>
</nav>
</div>
<div className="session_caract_Dialog" >
<nav style={{ "float": "left", "width": "30%", "paddingTop": "15px" }}> Animation </nav>
<nav style={{ "float": "right", "width": "65%" }}>
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_event_type"
id="event_dialog_event_type"
fullWidth
value={p_detail_mode_animation_label}
disabled={true}
/>
</nav>
</div>
<div className="session_caract_Dialog" > Titre
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_title"
id="event_dialog_title"
fullWidth
value={p_detail_sequence_title}
disabled={true}
/>
</div>
<div className="session_caract_Dialog" > Debut
<DatePicker
name="event_dialog_start"
id="event_dialog_start"
selected={sequence_startDate}
className="disabled_style session_caract_Dialog_DatePicker"
style={{ width: "99%" }}
locale={'fr'}
showTimeSelect
timeFormat="HH:mm"
timeIntervals={15}
dateFormat="dd/MM/yyyy HH:mm"
is24Hour
readOnly={true}
/>
</div>
<div className="session_caract_Dialog" > Fin
<DatePicker
name="event_dialog_end"
id="event_dialog_end"
selected={sequence_endDate}
className="disabled_style session_caract_Dialog_DatePicker"
style={{ width: "99%" }}
locale={'fr'}
showTimeSelect
timeFormat="HH:mm"
timeIntervals={15}
dateFormat="dd/MM/yyyy HH:mm"
is24Hour
readOnly={true}
/>
</div>
<div className="session_caract_Dialog_comment_2_lines" > Agenda
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_agenda"
id="event_dialog_agenda"
fullWidth
multiline
minRows={2}
maxRows={2}
rows={2}
disabled={true}
/>
</div>
<div className="session_caract_Dialog_comment_2_lines" > Objectif
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_objectif"
id="event_dialog_objectif"
fullWidth
value={p_detail_sequence_objectif}
multiline
minRows={2}
maxRows={2}
rows={2}
disabled={true}
/>
</div>
<div className="session_caract_Dialog_comment_2_lines" > Commentaire
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_comment"
id="event_dialog_comment"
fullWidth
value={p_detail_sequence_comment}
multiline
minRows={2}
maxRows={2}
rows={2}
disabled={true}
/>
</div>
</DialogContent>
<DialogActions>
<IconButton
autoFocus
onClick={Dialog_DIALOG_AGENDA_handleClose_buton}
color="primary"
className={classes.customizedButton}
>
<CancelPresentationIcon />
</IconButton>
<div className="div_row">
<div className="div_row_gauche">
&nbsp;
</div>
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Button onClick={Dialog_DIALOG_AGENDA_handleClose_buton} className="bton_annule_dialog" >Fermer</Button>
</div>
</div>
</DialogActions>
</Dialog>
{/*** fin dialogue pr agenda */}
<h3 style={{ fontFamily: 'DM Sans' }}> ENT Full Planning </h3>
<div>
<div className="titre1"> Utilisez les filtres !</div>
<div className="div_row" style={{ "marginBottom": "5px" }}>
@ -491,6 +1083,79 @@ registerLocale('fr', fr);
</div>
<br />
<div className="session_caract_Dialog"> <b> Session / Promo </b><br />
{New_Get_List_Ent_Session_Promotion_result && New_Get_List_Ent_Session_Promotion_result.length > 0 &&
<Autocomplete
disablePortal
name="finance_data_type_cout"
id="finance_data_type_cout"
fullWidth
options={New_Get_List_Ent_Session_Promotion_result}
onChange={(event, value) => {
if (value && value.session_id) {
setselected_session_id(value.session_id);
Getall_Sequence_Of_Session(value.session_id);
} else {
setselected_session_id("");
Getall_Sequence_Of_Session("");
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>}
</div>
{Getall_Sequence_Of_Session_result_planning_view && Getall_Sequence_Of_Session_result_planning_view.length > 0 && <div className="div_row">
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Planning </nav>
<div className="div_row" style={{ "border": "None" }}></div>
&nbsp;
<div style={{ "width": "98%", "marginLeft": "5px", }}>
<FullCalendar
height={550}
locales={allLocales}
locale={'fr'}
editable
selectable
//events={events}
events={Getall_Sequence_Of_Session_result_planning_view}
select={handleSelect}
headerToolbar={{
start: "today prev next",
center: "title",
end: "dayGridMonth,timeGridWeek,timeGridDay",
}}
//eventContent={(info) => <EventItem info={info} />}
//plugins={[timeGridPlugin]}
plugins={[timeGridPlugin, daygridPlugin, interactionPlugin]}
views={["dayGridMonth", "dayGridWeek", "dayGridDay"]}
slotMinTime={Partner_Debut_Journee}
slotMaxTime={Partner_Fin_Journee}
scrollTime='08:00'
displayEventEnd={true}
eventContent={renderEventContent}
eventClick={handleEventClick}
/>
</div>
</div>
}
</div >
);
}

View File

@ -98,7 +98,7 @@ const useStyles = makeStyles((theme) => ({
const Module_Session_Planification = (props) => {
registerLocale('fr', fr);
registerLocale('fr', fr);
const classes = useStyles();
const history = useHistory();
@ -626,6 +626,10 @@ registerLocale('fr', fr);
const [p_detail_sequence_groupe_apprenant_id, setp_detail_sequence_groupe_apprenant_id] = useState("");
const [p_detail_sequence_ue_id, setp_detail_sequence_ue_id] = useState("");
const [p_detail_sequence_ue_titre, setp_detail_sequence_ue_titre] = useState("");
const [p_detail_sequence_ue_code, setp_detail_sequence_ue_code] = useState("");
const [p_detail_sequence_ue_planif_line_id, setp_detail_sequence_ue_planif_line_id] = useState("");
@ -649,11 +653,20 @@ registerLocale('fr', fr);
// console.log(" TOTOTOTOTO ", eventInfo.event);
return (
<>
<b>{eventInfo.timeText}</b><br />
{eventInfo.event.extendedProps.local_mode_animation && String(eventInfo.event.extendedProps.local_mode_animation) === "1" &&
<i><b>{eventInfo.timeText} - Distanciel</b><br /></i>}
{eventInfo.event.extendedProps.local_mode_animation !== "1" &&
<i><b>{eventInfo.timeText}</b><br /></i>}
<i>{eventInfo.event.title}</i><br />
<i>{eventInfo.event.extendedProps.grp_code}</i>
{eventInfo.event.extendedProps.local_mode_animation && String(eventInfo.event.extendedProps.local_mode_animation) === "1" &&
<i><b>Distanciel</b></i>}
{eventInfo.event.extendedProps.local_ue_titre && eventInfo.event.extendedProps.local_ue_titre !== "" &&
<i style={{ fontFamily: 'DM Sans', fontSize: '13px' }}><br />{eventInfo.event.extendedProps.local_ue_titre}</i>}
</>
)
@ -1549,6 +1562,9 @@ registerLocale('fr', fr);
var local_session_type = JSON.parse(x).type;
var local_session_ue_id = JSON.parse(x).ue_id;
var local_session_ue_titre = JSON.parse(x).ue_titre;
var local_session_ue_code = JSON.parse(x).ue_code;
var local_session_grp_apprenant_id = JSON.parse(x).grp_apprenant_id;
var local_session_ue_planif_line_id = JSON.parse(x).unite_enseignement_planif_id;
@ -1581,6 +1597,9 @@ registerLocale('fr', fr);
"local_comment": local_session_comment,
"local_type": local_session_type,
"local_ue_id": local_session_ue_id,
"local_ue_titre": local_session_ue_titre,
"local_ue_code": local_session_ue_code,
"local_grp_apprenant_id": local_session_grp_apprenant_id,
"local_ue_planif_line_id": local_session_ue_planif_line_id,
@ -1759,12 +1778,23 @@ registerLocale('fr', fr);
var local_session_type = (x).type;
var local_session_ue_id = (x).ue_id;
var local_session_ue_titre = (x).ue_titre;
var local_session_ue_code = (x).ue_code;
var local_session_grp_apprenant_id = (x).grp_apprenant_id;
var local_session_ue_planif_line_id = (x).unite_enseignement_planif_id;
var local_session_color = (x).grp_apprenant_color;
var local_session_grp_code = (x).grp_apprenant_code;
var local_mode_animation = (x).mode_animation;
// 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_mode_animation === "1") {
// sequence en distantiel, on va mettre un code couleur
local_session_color = "#4ea860"
}
//---
var node = {
@ -1776,10 +1806,13 @@ registerLocale('fr', fr);
"grp_code": local_session_grp_code,
"color": local_session_color,
"local_agenda": local_agenda,
"local_mode_animation": local_mode_animation,
"local_objectif": local_objectif,
"local_comment": local_session_comment,
"local_type": local_session_type,
"local_ue_id": local_session_ue_id,
"local_ue_titre": local_session_ue_titre,
"local_ue_code": local_session_ue_code,
"local_grp_apprenant_id": local_session_grp_apprenant_id,
"local_ue_planif_line_id": local_session_ue_planif_line_id,
@ -1843,6 +1876,8 @@ registerLocale('fr', fr);
setp_detail_sequence_ue_planif_line_id("");
setp_detail_sequence_groupe_apprenant_id("");
setp_detail_sequence_ue_id("");
setp_detail_sequence_ue_titre("");
setp_detail_sequence_ue_code("");
seteu_planif_line_insdispo("");
setp_detail_sequence_ue_planif_line_id("");
setDialog_seq_1_open(false);
@ -1895,6 +1930,8 @@ registerLocale('fr', fr);
setp_detail_sequence_ue_planif_line_id("");
setp_detail_sequence_groupe_apprenant_id("");
setp_detail_sequence_ue_id("");
setp_detail_sequence_ue_titre("");
setp_detail_sequence_ue_code("");
seteu_planif_line_insdispo("");
setp_detail_sequence_ue_planif_line_id("");
@ -2416,9 +2453,24 @@ registerLocale('fr', fr);
if (arg.event.extendedProps.local_ue_id) {
setp_detail_sequence_ue_id(arg.event.extendedProps.local_ue_id);
Get_List_Given_UE_Planif_lines(arg.event.extendedProps.local_ue_id);
if (arg.event.extendedProps.local_ue_titre) {
setp_detail_sequence_ue_titre(arg.event.extendedProps.local_ue_titre);
}
if (arg.event.extendedProps.local_ue_code) {
setp_detail_sequence_ue_code(arg.event.extendedProps.local_ue_code);
}
}
else {
setp_detail_sequence_ue_id("");
setp_detail_sequence_ue_titre("");
setp_detail_sequence_ue_code("");
//---
var node = {
"_id": "",
@ -3427,6 +3479,8 @@ registerLocale('fr', fr);
function Close_Dialog_RECORD_MODEL_PLANNING() {
setDialog_RECORD_MODEL_PLANNING_open(false);
setp_model_planning_code("");
setp_model_planning_nom("");
}
@ -3549,6 +3603,15 @@ registerLocale('fr', fr);
var title = x.title;
var local_mode_animation = "";
if (x.local_mode_animation)
local_mode_animation = x.local_mode_animation
var local_volume_theorique = "";
if (x.local_volume_theorique)
local_volume_theorique = x.local_volume_theorique
var start = moment(x.start).format("DD/MM/YYYY HH:mm");
@ -3565,7 +3628,8 @@ registerLocale('fr', fr);
"grp_code": grp_code,
"id": id,
"local_agenda": local_agenda,
"local_volume_theorique": local_volume_theorique,
"local_mode_animation": local_mode_animation,
"local_agenda": local_agenda,
"local_comment": local_comment,
"local_grp_apprenant_id": local_grp_apprenant_id,
@ -3651,7 +3715,7 @@ registerLocale('fr', fr);
};
const myRef_choix_planning = useRef(null)
const [position_h_choix_planning, setposition_h_choix_planning] = useState('1000');
const [position_h_choix_planning, setposition_h_choix_planning] = useState('700');
return (
@ -6831,7 +6895,6 @@ registerLocale('fr', fr);
{display_view && String(display_view) === "planning" &&
<div style={{ "border": "None" }}>
<h3 style={{ fontFamily: 'DM Sans' }}> Affichage planning</h3>
&nbsp;
<div style={{ "width": "98%", "marginLeft": "5px", }} >
@ -7006,9 +7069,13 @@ registerLocale('fr', fr);
setplanning_model_new_application_date();
if (String(action_modele_planning) === "gestion") {
Getall_Partner_Modele_Planning();
setplanning_model_new_application_date(SessionstartDate);
setDialog_MODEL_PLANNING_open(true);
} else if (String(action_modele_planning) === "record") {
setp_model_planning_code("");
setp_model_planning_nom("");
setDialog_RECORD_MODEL_PLANNING_open(true);
}
}}>
<FcAcceptDatabase /> Traiter

View File

@ -635,33 +635,7 @@ const Partner_Securite_Data = (props) => {
</div>
}
&nbsp;
<Box alignItems="left" sx={{ '& > :not(style)': { m: 1 } }}>
{/*<FormControl sx={{ m: 1, width: '90%' }} size="small" className="texte_area_passwd">
<Label>Mot de passe actuel</Label>
<InputLabel htmlFor="outlined-adornment-password"></InputLabel>
<OutlinedInput
id="current_pwd"
name="current_pwd"
type={values.showPassword1 ? 'text' : 'password'}
value={values.password1}
onChange={handleChange1('password1')}
endAdornment={
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword_current_pwd}
edge="end"
>
{currentpawdvisible ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
}
/>
</FormControl>
*/}
<Box alignItems="left" sx={{ '& > :not(style)': { m: 1 } }}>
{<TextField
id="current_pwd"
name="current_pwd"
@ -686,58 +660,8 @@ const Partner_Securite_Data = (props) => {
/>
}
{/* <TextField
id="current_pwd_v2"
name="current_pwd_v2"
type={valuesPass1_v2.showPassword1_v2 ? 'text' : 'password'}
value={valuesPass1_v2.password1_v2}
label="New pwdddd"
onChange={handleChange2_v2('password1')}
sx={{ m: 1, width: '90%' }}
InputProps={{
startAdornment: (
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword_current_pwd_v2}
edge="end"
>
{currentpawdvisible ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
),
}}
/> */}
{/* <FormControl sx={{ m: 1, width: '90%' }} size="small" className="texte_area_passwd">
<Label>Nouveau mot de passe</Label>
<InputLabel htmlFor="outlined-adornment-password2"></InputLabel>
<OutlinedInput
id="new_pwd"
name="new_pwd"
type={values.showPassword ? 'text' : 'password'}
value={values.password2}
onChange={handleChange2('password2')}
endAdornment={
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword_new_pwd}
edge="end"
>
{newpawdvisible ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
}
/>
</FormControl> */}
{<TextField
label="Nouveau mot de passe"
id="new_pwd"
name="new_pwd"
@ -762,30 +686,7 @@ const Partner_Securite_Data = (props) => {
/>
}
{/*<FormControl sx={{ m: 1, width: '90%' }} size="small" className="texte_area_passwd">
<Label>Confirmation du nouveau mot de passe</Label>
<InputLabel htmlFor="outlined-adornment-password"></InputLabel>
<OutlinedInput
id="new_pwd_conf"
name="new_pwd_conf"
type={values.showPassword ? 'text' : 'password'}
value={values.password3}
onChange={handleChange3('password3')}
endAdornment={
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword_new_pwd_conf}
onMouseDown={handleMouseDownPassword}
edge="end"
>
{confpwdvisible ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
}
/>
</FormControl> */}
{<TextField

View File

@ -25,13 +25,15 @@ import Module_Ent_Mes_Documents from "./Module_Ent_Mes_Documents";
import Module_Ent_Mon_Planning from "./Module_Ent_Mon_Planning";
import Module_Ent_Mes_Formations from "./Module_Ent_Mes_Formations";
import Module_Ent_Mes_Notes from "./Module_Ent_Mes_Notes";
function Student_Account() {
const [menu, setmenu] = useState("mes_formations");
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych']);
const [cookie_apprenant_id, setCookie_apprenant_id, removeCookie_apprenant_id] = useCookies(['tokenmysychapprenant']);
const [result, setResult] = useState("");
const [myApiResponse, setmyApiResponse] = useState("");
const stored_user = getCookie('tokenmysych');
const stored_apprenant_id = getCookie('tokenmysychapprenant');
const history = useHistory();
const [country_code, setcountry_code] = useState("");
const [country_name, setcountry_name] = useState("");
@ -139,6 +141,7 @@ function Student_Account() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_user) != "undefined") {
removeCookie('tokenmysych', { path: '/' });
removeCookie_apprenant_id('tokenmysychapprenant', { path: '/' });
history.push("/ent_student");
}
}
@ -316,7 +319,7 @@ function Student_Account() {
formData.append('File', selectedFile);
formData.append("token", stored_user);
formData.append("type", "user");
// formData.append("apprenant_id", apprenant_id);
// formData.append("apprenant_id", apprenant_id);
fetch(
process.env.REACT_APP_API_URL + "myclass/api/recordImage/",
{
@ -342,7 +345,6 @@ function Student_Account() {
return (
<div className="account" style={{ background: '#f4f4fb' }}>
<Helmet>
<title>Création compte MySy Trainig Technology</title>
<meta name="description" content="Éditeur Français de logiciels pour organisme de formation. Avec solutions de E-Learning, gestion administrative et gestion relation client nous accompagnons les organismes de formation à réaliser laudit QUALIOPI en toute sérénité. Nous sommes les moins cher du marché. Nous vous accompagnons automatiser vos process : inscription, évaluation, émargement (qr-code), Check-list QUALIOPI, Personnalisation et édition documents, Gestion formateurs, Catalogue formations personnalisé" />
@ -361,54 +363,8 @@ function Student_Account() {
<h1 className="h1_transparent">Intranet Apprenant - Connexion MySy Training Technology </h1>
</div>
<div>
<div className="div_gauche">
<div>
<img class="img-responsive img_user" src={userimgprofil} align="center" alt="MySy Training profile image" />
{!isSelected && <div className="nonlable">
<input type="file" id="files" accept="image/*" onChange={changeHandler} style={{ opacity: "0", zIndex: "-1", maxWidth: "5px", maxHeight: "0px" }} />
<label for="files" className="label">Changer image</label>
</div>}
{isSelected && <div className="nonlable">
<Button variant="outlined" onClick={sendImage} >Enregistrer</Button>
</div>}
</div>
<div className="nom_prenom"> {username && <b> {username} </b>}
{!username && <b> xxxx </b>} </div>
<hr className="my_hr" />
{/** Menu pour un utilisateur de type 'user'. Exemple, l'intranet du client d'un client */}
{/** Menu pour un utilisateur NON type 'user' exemple un apprenant */}
{connected_user_data && connected_user_data.type &&
String(connected_user_data.type) === "student" &&
<div>
<div className="sousmenu" onClick={displayPersoInfo}> INFORMATIONS PERSONNELLES</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={funct_menu_mes_formations}> MES FORMATIONS</div>
<hr className="my_hr" />
{/* <div className="sousmenu" onClick={funct_menu_mon_planning}> MON PLANNING</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={"displayProfil_Objectif"}> MES NOTES</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={"displayProfil_Objectif"}> MES DOCUMENTS</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Modules_Mes_Documents}> MODULE TOUS DOCUMENTS</div>
<hr className="my_hr" />
*/}
{/* <div className="sousmenu" onClick={deletemyaccount}> SUPPRIMER MON COMPTE</div>
<hr className="my_hr" />*/}
</div>}
</div>
<div className="div_droite" style={{ border: 'none' }}>
<div className="div_row" style={{ border: 'none' }}>
{String(firstConnexion) === "1" &&
<div className="div_droite firstConnexion">
@ -431,11 +387,11 @@ function Student_Account() {
</div>}
{connected_user_data && connected_user_data.type &&
<h3 style={{ fontFamily: 'DM Sans', textAlign: 'center' }}> Espace numérique de travail </h3>}
{connected_user_data && connected_user_data.type &&
<h3 style={{ fontFamily: 'DM Sans', textAlign: 'center' }}> Espace numérique de travail 28/10/2025</h3>}
{String(menu) === String("affichage") && <UpdateUserInfo apprenant_id={apprenant_id}/>}
{String(menu) === String("affichage") && <UpdateUserInfo apprenant_id={apprenant_id} />}
{String(menu) === String("recherche") && <UserHistoryRecherche />}

View File

@ -0,0 +1,460 @@
import React, { useState, useEffect } from "react";
import UpdateUserInfo from "./UpdateUserInfo";
import bannerimg from "../mysy_img/MYSY_banner_compte.png";
import profileimg from "../mysy_img/MYSY-profil-2.png";
import Button from '@mui/material/Button';
import { useHistory } from "react-router-dom";
import UserHistoryRecherche from "./UserHistoryRecherche";
import { confirmAlert } from 'react-confirm-alert'; // Import
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import { Helmet } from "react-helmet";
import { useCookies } from "react-cookie";
import axios from "axios";
import { getCookie, } from 'react-use-cookie';
import UpgradeToPro from "./UpgradeToPro"
import Profil_Objectif from "./ProfilObjectif";
import { useLocation } from "react-router-dom";
import { FaHandPointRight } from "react-icons/fa";
import Intranet_Factures_Client from "./Intranet_Factures_Client";
import Intranet_Tous_Documents from "./Intranet_Tous_Documents";
import Modules_Mes_Documents from "./Modules_Mes_Documents";
import Intranet_Mes_Stagiaires from "./Intranet_Mes_Stagiaires";
import Module_Ent_Mes_Documents from "./Module_Ent_Mes_Documents";
import Module_Ent_Mon_Planning from "./Module_Ent_Mon_Planning";
import Module_Ent_Mes_Formations from "./Module_Ent_Mes_Formations";
import Module_Ent_Mes_Notes from "./Module_Ent_Mes_Notes";
function Student_Account_ORIG_28102025() {
const [menu, setmenu] = useState("mes_formations");
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych']);
const [result, setResult] = useState("");
const [myApiResponse, setmyApiResponse] = useState("");
const stored_user = getCookie('tokenmysych');
const history = useHistory();
const [country_code, setcountry_code] = useState("");
const [country_name, setcountry_name] = useState("");
const [city, setcity] = useState("");
const [postal, setpostal] = useState("");
const [latitude, setlatitude] = useState("");
const [longitude, setlongitude] = useState("");
const [IPv4, setIPv4] = useState("");
const [state, setstate] = useState("");
const [userimgprofil, setuserimgprofil] = useState();
const [userIp, setuserIp] = useState("");
const [username, setusername] = useState("");
const [migratedaccount, setmigratedaccount] = useState("0");
const apiUrl = process.env.REACT_APP_API_URL;
const formData = new FormData();
//alert("stored_user = "+stored_user);
const location = useLocation();
useEffect(() => {
var list_menu = ["affichage", "recherche", "upgradecompte", "profil_objectif", "mes_factures", "mes_documents"]
// getImage();
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
//alert(" début puch");
history.push("/ent_student");
}
async function fetchData() {
const result = await axios('https://geolocation-db.com/json/',);
//alert(result.data.IPv4);
setuserIp(result.data.IPv4);
setcountry_code(result.data.country_code);
setcountry_name(result.data.country_name);
setcity(result.data.city);
setpostal(result.data.postal);
setlatitude(result.data.latitude);
setlongitude(result.data.longitude);
setIPv4(result.data.IPv4);
setstate(result.data.state);
setuserIp(result.data.IPv4);
}
GetUserNameFromToken();
fetchData();
if (location && location.state && location.state.menu) {
// displayProfil_Objectif();
}
if (location && location.state && location.state.firstconnexion) {
setfirstConnexion(location.state.firstconnexion);
}
}, []);
const [myimage, setmyimage] = useState();
const [isimage, setisimage] = useState();
function getImage(e) {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/getRecodedImage/";
var form = new FormData();
form.append("token", stored_user);
form.append("type", "user");
axios.post(myurl, form).then(res => {
if (res.data.status != "False") {
//console.log(" getImage : In test res.data.status = " + res.data.status);
//console.log(" getImage: res.data.message.img = " + res.data.message);
if (res.data.message.img.length > 0) {
setisimage("True");
}
else {
setisimage("False");
}
setmyimage(res.data.message.img);
var ch_img = "data:image/png;base64," + res.data.message.img;
setuserimgprofil(ch_img);
}
else {
//console.log(" In Erreur res.data.status = " + res.data.status);
//console.log(" In Erreur res.data.message = " + res.data.message);
setisimage("False");
setuserimgprofil(profileimg);
}
}).catch((error) => {
console.warn('Not good man :( mysearchtext = ');
setisimage("False");
setuserimgprofil(profileimg);
})
}
const [firstConnexion, setfirstConnexion] = useState("");
function logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_user) != "undefined") {
removeCookie('tokenmysych', { path: '/' });
history.push("/ent_student");
}
}
function logout() {
confirmAlert({
title: 'Deconnexion ?',
message: 'Confirmez la deconnexion',
buttons: [
{
label: 'Oui',
onClick: () => logout_confirmation()
},
{
label: 'Non',
onClick: () => { return }
}
]
});
}
function funct_menu_mes_formations() {
setmenu("mes_formations");
}
function funct_menu_mon_planning() {
setmenu("planning");
}
const displayProfil_Modules_Mes_Documents = () => {
setmenu("modules_mes_documents");
};
const upgradetopro = () => {
setmenu("upgradecompte");
};
const displayPersoInfo = () => {
setmenu("affichage");
};
const [connected_user_data, setconnected_user_data] = useState();
function GetUserNameFromToken(event) {
var form = new FormData();
form.append("token", stored_user);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/get_user_account/";
axios.post(myurl, form).then(res => {
// console.log(" In GetUserNameFromToken res.data.status = " + res.data.status);
// console.log(" In GetUserNameFromToken res.data.message = " + res.data.message);
if (String(res.data.status) === String("true")) {
setusername(JSON.parse(res.data.message).email);
if (JSON.parse(res.data.message).type && String(JSON.parse(res.data.message).type) === "student") {
if (JSON.parse(res.data.message).apprenant_id) {
setapprenant_id(JSON.parse(res.data.message).apprenant_id);
}
}
setconnected_user_data(JSON.parse(res.data.message));
}
else {
//console.log(" In GetUserNameFromToken res.data.status = " + res.data.status);
//console.log(" In GetUserNameFromToken res.data.message = " + res.data.message);
//setmyApiResponse("false");
//setmyApimyApiMessage("")
}
}).catch((error) => {
console.warn('In GetUserNameFromToken Not good man :( mysearchtext = ', error);
//setmyApiResponse("false");
//setmyApimyApiMessage("")
})
}
function finaldeleteuseraccount(e) {
var form = new FormData();
form.append("token", stored_user);
// Ajout des info IP user
form.append("user_ip", IPv4);
form.append("user_country_code", country_code);
form.append("user_country_name", country_name);
form.append("user_city", city);
form.append("user_postal", postal);
form.append("user_latitude", latitude);
form.append("user_longitude", longitude);
form.append("user_state", state);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/send_mail_delete_user/";
axios.post(myurl, form).then(res => {
if (String(res.data.status) != String("false")) {
//console.log(" In test res.data.status = " + res.data.status);
//console.log(" In test res.data.message = " + res.data.message);
setmyApiResponse("true");
setResult(res.data.message)
alert(res.data.message);
}
else {
//console.log(" In test res.data.status = " + res.data.status);
//console.log(" In test res.data.message = " + res.data.message);
setmyApiResponse("false");
//setmyApimyApiMessage("")
}
}).catch((error) => {
console.warn('Not good man :( mysearchtext = ');
setmyApiResponse("false");
//setmyApimyApiMessage("")
})
}
function deletemyaccount(e) {
confirmAlert({
title: 'Suppremier votre compte',
message: 'Cette action va supprimer toutes vos données, Confirmez-vous la suppression du compte ?',
buttons: [
{
label: 'Oui',
onClick: () => finaldeleteuseraccount()
},
{
label: 'Non',
onClick: () => { return }
}
]
});
}
const [selectedFile, setSelectedFile] = useState();
const [isSelected, setIsSelected] = useState(false);
const [isnewimage, setisnewimage] = useState();
const [apprenant_id, setapprenant_id] = useState("");
const changeHandler = (event) => {
let file_size = event.target.files[0].size;
//or if you like to have name and type
let file_name = event.target.files[0].name;
let file_type = event.target.files[0].type;
//alert("file_size = "+file_size+" file_type = "+file_type+" a = "+a);
if (file_size > 10000000) {
alert("L'image doit faire moins de 100 Kilo Octets");
return;
}
setSelectedFile(event.target.files[0]);
setIsSelected(true);
setuserimgprofil(URL.createObjectURL(event.target.files[0]));
};
function sendImage(e) {
formData.append('File', selectedFile);
formData.append("token", stored_user);
formData.append("type", "user");
// formData.append("apprenant_id", apprenant_id);
fetch(
process.env.REACT_APP_API_URL + "myclass/api/recordImage/",
{
method: 'POST',
body: formData,
}
).then((response) => response.json())
.then((result) => {
//console.log('Success:', result['message']);
setIsSelected(false);
})
.catch((error) => {
console.error('Error:');
setIsSelected(true);
});
};
return (
<div className="account" style={{ background: '#f4f4fb' }}>
<Helmet>
<title>Création compte MySy Trainig Technology</title>
<meta name="description" content="Éditeur Français de logiciels pour organisme de formation. Avec solutions de E-Learning, gestion administrative et gestion relation client nous accompagnons les organismes de formation à réaliser laudit QUALIOPI en toute sérénité. Nous sommes les moins cher du marché. Nous vous accompagnons automatiser vos process : inscription, évaluation, émargement (qr-code), Check-list QUALIOPI, Personnalisation et édition documents, Gestion formateurs, Catalogue formations personnalisé" />
<meta name="robots" content="index,follow" />
<meta name="title" content="Création compte MySy Trainig Technology" />
<link rel="canonical" href={window.location.href} />
</Helmet>
<h1 style={{ fontSize: '0.1px', opacity: '0' }}>Éditeur Français de logiciels pour organisme de formation. Avec solutions de E-Learning, gestion administrative et gestion relation client nous accompagnons les organismes de formation à réaliser laudit QUALIOPI en toute sérénité. Nous sommes les moins cher du marché. Nous vous accompagnons automatiser vos process : inscription, évaluation, émargement (qr-code), Check-list QUALIOPI, Personnalisation et édition documents,
Gestion formateurs, Catalogue formations personnalisé </h1>
<div className="div_mobile">
<div>
<h1 className="h1_transparent">Intranet Apprenant - Connexion MySy Training Technology </h1>
</div>
<div>
<div className="div_gauche">
<div>
<img class="img-responsive img_user" src={userimgprofil} align="center" alt="MySy Training profile image" />
{!isSelected && <div className="nonlable">
<input type="file" id="files" accept="image/*" onChange={changeHandler} style={{ opacity: "0", zIndex: "-1", maxWidth: "5px", maxHeight: "0px" }} />
<label for="files" className="label">Changer image</label>
</div>}
{isSelected && <div className="nonlable">
<Button variant="outlined" onClick={sendImage} >Enregistrer</Button>
</div>}
</div>
<div className="nom_prenom"> {username && <b> {username} </b>}
{!username && <b> xxxx </b>} </div>
<hr className="my_hr" />
{/** Menu pour un utilisateur de type 'user'. Exemple, l'intranet du client d'un client */}
{/** Menu pour un utilisateur NON type 'user' exemple un apprenant */}
{connected_user_data && connected_user_data.type &&
String(connected_user_data.type) === "student" &&
<div>
<div className="sousmenu" onClick={displayPersoInfo}> INFORMATIONS PERSONNELLES</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={funct_menu_mes_formations}> MES FORMATIONS</div>
<hr className="my_hr" />
{/* <div className="sousmenu" onClick={funct_menu_mon_planning}> MON PLANNING</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={"displayProfil_Objectif"}> MES NOTES</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={"displayProfil_Objectif"}> MES DOCUMENTS</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Modules_Mes_Documents}> MODULE TOUS DOCUMENTS</div>
<hr className="my_hr" />
*/}
{/* <div className="sousmenu" onClick={deletemyaccount}> SUPPRIMER MON COMPTE</div>
<hr className="my_hr" />*/}
</div>}
</div>
<div className="div_droite" style={{ border: 'none' }}>
{String(firstConnexion) === "1" &&
<div className="div_droite firstConnexion">
<div className="firstConnexion_text">
<b>Cher Utilisateur, c'est votre première connexion, </b> <br /> &nbsp;<br />
Nous sommes ravis de vous accueillir. Nous vous invitons à modifier votre mot de passe à partir du menu <i>"MES INFORMATIONS"</i> ==&gt; Pavé <i>"SECURITE"</i> puis <i>"MODIFIER"</i> <br /><br />
<Button onClick={(e) => setfirstConnexion()} className="firstConnexion_bton"> &nbsp; &nbsp;<FaHandPointRight /> &nbsp; Fermer</Button><br />
&nbsp; <br /> Merci.
</div>
</div>}
{String(myApiResponse) === String("true") && <div className="okUpdateData">
{result}
</div>}
{String(myApiResponse) !== String("true") && <div className="koUpdateData">
{result}
</div>}
{connected_user_data && connected_user_data.type &&
<h3 style={{ fontFamily: 'DM Sans', textAlign: 'center' }}> Espace numérique de travail laaa</h3>}
{String(menu) === String("affichage") && <UpdateUserInfo apprenant_id={apprenant_id}/>}
{String(menu) === String("recherche") && <UserHistoryRecherche />}
{String(menu) === String("upgradecompte") && <UpgradeToPro />}
{String(menu) === String("profil_objectif") && <Profil_Objectif />}
{String(menu) === String("mes_formations") &&
<Module_Ent_Mes_Formations apprenant_id={apprenant_id}
/>}
</div>
</div>
</div>
</div>
);
}
export default Student_Account_ORIG_28102025;

View File

@ -171,17 +171,17 @@ function UpdateUserInfo(props) {
}
if (mylocaltraining.mob_phone) {
document.getElementsByName("mob_phone")[0].value = mylocaltraining.mob_phone;
document.getElementsByName("mob_phone")[0].disabled = true;
document.getElementsByName("mob_phone")[0].style.backgroundColor = "#ECEFF1";
} else {
document.getElementsByName("mob_phone")[0].value = "";
document.getElementsByName("mob_phone")[0].disabled = true;
document.getElementsByName("mob_phone")[0].style.backgroundColor = "#ECEFF1";
}
if (mylocaltraining.link_linkedin) {
document.getElementsByName("link_linkedin")[0].value = mylocaltraining.link_linkedin;
@ -232,7 +232,7 @@ function UpdateUserInfo(props) {
document.getElementsByName("last_name")[0].disabled = true;
document.getElementsByName("last_name")[0].style.backgroundColor = "#ECEFF1";
}
desablefield1();
@ -725,7 +725,7 @@ function UpdateUserInfo(props) {
/>
</div>
<div className="session_caract"> <b> LinkedIn </b> <br />
<TextField
@ -915,187 +915,15 @@ function UpdateUserInfo(props) {
</div>
<Box alignItems="left" sx={{ '& > :not(style)': { m: 1 }, width: '100%', }}>
{/* <TextField
required
label="Nom"
name="last_name"
className="texte_area"
sx={{ m: 1, width: '48%', fontFamily: 'DM Sans' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<AccountCircle />
</InputAdornment>
),
}}
variant="standard"
/>
<TextField
name="surname"
label="Prénom"
className="texte_area"
sx={{ m: 1, width: '48%', fontFamily: 'DM Sans' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<AccountCircle />
</InputAdornment>
),
}}
variant="standard"
/>
<br />
<TextField
name="mob_phone"
label="Téléphone"
className="texte_area"
sx={{ m: 1, width: '48%' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<PhoneIcon />
</InputAdornment>
),
}}
variant="standard"
/>
<TextField
name="mail"
className="texte_area"
label="Adresse mail"
sx={{ m: 1, width: '48%' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<EmailIcon />
</InputAdornment>
),
}}
variant="standard"
/>
<br />
<TextField
name="link_linkedin"
label="LinkedIn"
className="texte_area"
sx={{ m: 1, width: '48%' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<LinkedInIcon />
</InputAdornment>
),
}}
variant="standard"
/>
<TextField
name="link_facebook"
label="Facebook"
className="texte_area"
sx={{ m: 1, width: '48%' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<FacebookIcon />
</InputAdornment>
),
}}
variant="standard"
/>
<TextField
name="link_twitter"
label="Twitter"
className="texte_area"
sx={{ m: 1, width: '48%' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<TwitterIcon />
</InputAdornment>
),
}}
variant="standard"
/>
<br />
<TextField
name="adr_street"
label="Adresse"
className="texte_area_adress"
sx={{ m: 1, width: '90%' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<HomeIcon />
</InputAdornment>
),
}}
variant="standard"
/>
<br />
<TextField
className="texte_area"
name="adr_zip"
label="Code Postal"
sx={{ m: 1, width: '48%' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<HomeIcon />
</InputAdornment>
),
}}
variant="standard"
/>
<TextField
className="texte_area"
name="adr_city"
label="Ville"
sx={{ m: 1, width: '48%' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<HomeIcon />
</InputAdornment>
),
}}
variant="standard"
/>
<br />
<TextField
className="texte_area"
name="adr_country"
label="Pays"
sx={{ m: 1, width: '48%' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<HomeIcon />
</InputAdornment>
),
}}
variant="standard"
/>
<br />*/}
<div className="div_row22">
{fields1desabled == false && <div className="div_row">
<div className="div_row_gauche">
<Button variant="contained" color="success" className="div_row22 btn_enreg " onClick={RecordData}>Enregistrer</Button>
<div className="div_row_gauche" style={{ "textAlign": "left" }}>
<Button variant="contained" color="success" className="div_row22 btn_enreg" onClick={RecordData}>Enregistrer</Button>
</div>
<div className="div_row_droite">
<Button variant="contained" color="success" className="div_row22 btn_modif" onClick={desablefield1}>Annuler</Button>
<div className="div_row_droite" style={{ "textAlign": "right" }}>
<Button variant="contained" color="success" className="div_row22 btn_modif" onClick={desablefield1}>Annuler</Button>
</div>
</div>
}
@ -1113,86 +941,96 @@ function UpdateUserInfo(props) {
&nbsp;
<Box alignItems="left" sx={{ '& > :not(style)': { m: 1 } }}>
<FormControl sx={{ m: 1, width: '90%' }} variant="standard" size="small" className="texte_area_passwd">
<InputLabel htmlFor="outlined-adornment-password"></InputLabel>
<OutlinedInput
id="current_pwd"
name="current_pwd"
type={values.showPassword1 ? 'text' : 'password'}
value={values.password1}
onChange={handleChange1('password1')}
endAdornment={
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword_current_pwd}
edge="end"
>
{currentpawdvisible ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
}
label="Password 1"
/>
</FormControl>
<div style={{ width: "100%", float: 'left' }}>
<div> <b> Actuel Password </b> <br />
<FormControl sx={{ m: 1, width: '100%' }} variant="standard" size="small" className="texte_area_passwd">
<InputLabel htmlFor="outlined-adornment-password"></InputLabel>
<OutlinedInput
id="current_pwd"
name="current_pwd"
type={values.showPassword1 ? 'text' : 'password'}
value={values.password1}
onChange={handleChange1('password1')}
endAdornment={
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword_current_pwd}
edge="end"
>
{currentpawdvisible ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
}
label=""
/>
</FormControl>
</div>
</div>
<br />
<div style={{ width: "100%", float: 'left' }}>
<div> <b> Nouveau Password </b> <br />
<FormControl sx={{ m: 1, width: '100%' }} variant="standard" size="small" className="texte_area_passwd">
<InputLabel htmlFor="outlined-adornment-password2"></InputLabel>
<OutlinedInput
id="new_pwd"
name="new_pwd"
type={values.showPassword ? 'text' : 'password'}
value={values.password2}
onChange={handleChange2('password2')}
endAdornment={
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword_new_pwd}
edge="end"
>
{newpawdvisible ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
}
label=""
/>
</FormControl>
</div>
</div>
<br />
<FormControl sx={{ m: 1, width: '90%' }} variant="standard" size="small" className="texte_area_passwd">
<InputLabel htmlFor="outlined-adornment-password2"></InputLabel>
<OutlinedInput
id="new_pwd"
name="new_pwd"
type={values.showPassword ? 'text' : 'password'}
value={values.password2}
onChange={handleChange2('password2')}
endAdornment={
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword_new_pwd}
edge="end"
>
{newpawdvisible ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
}
label="Password 2"
/>
</FormControl>
<br />
<FormControl sx={{ m: 1, width: '90%' }} variant="standard" size="small" className="texte_area_passwd">
<InputLabel htmlFor="outlined-adornment-password"></InputLabel>
<OutlinedInput
id="new_pwd_conf"
name="new_pwd_conf"
type={values.showPassword ? 'text' : 'password'}
value={values.password3}
onChange={handleChange3('password3')}
endAdornment={
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword_new_pwd_conf}
onMouseDown={handleMouseDownPassword}
edge="end"
>
{confpwdvisible ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
}
label="Password"
/>
</FormControl>
<div style={{ width: "100%", float: 'left' }}>
<div> <b> Nouveau Password (2) </b> <br />
<FormControl sx={{ m: 1, width: '100%' }} variant="standard" size="small" className="texte_area_passwd">
<InputLabel htmlFor="outlined-adornment-password"></InputLabel>
<OutlinedInput
id="new_pwd_conf"
name="new_pwd_conf"
type={values.showPassword ? 'text' : 'password'}
value={values.password3}
onChange={handleChange3('password3')}
endAdornment={
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword_new_pwd_conf}
onMouseDown={handleMouseDownPassword}
edge="end"
>
{confpwdvisible ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
}
label=""
/>
</FormControl>
</div>
</div>
<div className="div_row22">
{pwdfieldsdesabled == false && <div className="div_row">
<div className="div_row_gauche">
<Button variant="contained" color="success" className="div_row22 btn_enreg " onClick={UpdateUserPwd}>Enregistrer</Button>
<div className="div_row_gauche" style={{ "textAlign": "left" }}>
<Button variant="contained" color="success" className="div_row22 btn_enreg" onClick={UpdateUserPwd}>Enregistrer</Button>
</div>
<div className="div_row_droite">
<Button variant="contained" color="success" className="div_row22 btn_modif " onClick={desablesecurtypwdfields}>Annuler</Button>
<div className="div_row_droite" style={{ "textAlign": "right" }} >
<Button variant="contained" color="success" className="div_row22 btn_modif"onClick={desablesecurtypwdfields}>Annuler</Button>
</div>
</div>
}

View File

@ -0,0 +1,22 @@
import Ent_Mon_Planning from "../components/Module_Ent_Mon_Planning"
import ENT_Student_New_C_Header_2025_V2 from "../components/ENT_Student_header_automatic_files/ENT_Student_Header";
import New_C_Footer_Without_Testimony_2025_V2 from "../components/footer_automatic_files/Layout_Without_Testimony";
import New_Navigation_ENT_Student_2025 from "../components/New_Navigation_ENT_Student_2025";
const mon_ent_student_planning = () => {
return (
<div>
<New_Navigation_ENT_Student_2025 />
<ENT_Student_New_C_Header_2025_V2 />
<Ent_Mon_Planning />
<New_C_Footer_Without_Testimony_2025_V2 />
</div>
)
}
export default mon_ent_student_planning;

View File

@ -1,5 +1,3 @@
import Navigation from "../components/Navigation";
import Ent_Intranet from "./../components/Ent_Intranet";
import ENT_Student_New_C_Header_2025_V2 from "../components/ENT_Student_header_automatic_files/ENT_Student_Header";
import New_C_Footer_Without_Testimony_2025_V2 from "../components/footer_automatic_files/Layout_Without_Testimony";
import New_Navigation_ENT_Student_2025 from "../components/New_Navigation_ENT_Student_2025";

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,7 @@
.module_ent_mes_formations {
width: 100%;
max-width: 1500px;
margin: auto;
.loader-container {
width: 100%;
@ -12,7 +15,7 @@
z-index: 1;
top: 0px;
opacity: 80%;
left: 0px;
left: 0px;
}
.tooltip_css {
@ -2406,8 +2409,9 @@
}
.block_central_gauche {
width: 94%;
float: left;
width: 100%;
margin: auto;
max-width: 1400px;
padding-left: 3%;
padding-right: 3%;
background: #f4f4fb;

View File

@ -122,7 +122,7 @@
text-align: center;
margin-bottom: 0.8rem;
color: white;
cursor: pointer;
cursor: default;
font-style: italic;
background-color: gray;
font-weight: normal;
@ -1840,7 +1840,7 @@
text-align: center;
margin-bottom: 0.8rem;
color: white;
cursor: pointer;
cursor: default;
font-style: italic;
background-color: gray;
font-weight: normal;
@ -2536,7 +2536,7 @@
text-align: center;
margin-bottom: 0.8rem;
color: white;
cursor: pointer;
cursor: default;
font-style: italic;
background-color: gray;
font-weight: normal;

View File

@ -75,6 +75,7 @@
font-size: small !important;
padding-top: 0.2rem;
padding-bottom: 0.2rem;
height: 3.5rem;
}
.titre1 {
@ -83,10 +84,12 @@
text-align: center;
margin-bottom: 0.8rem;
color: white;
cursor: pointer;
cursor: default;
font-style: italic;
background-color: gray;
font-weight: normal;
padding-bottom: 0.8rem;
font-size: 18px;
}
.big_hr {
@ -242,6 +245,7 @@
font-size: small !important;
padding-top: 0.2rem;
padding-bottom: 0.2rem;
height: 3.5rem;
}
@ -251,10 +255,12 @@
text-align: center;
margin-bottom: 0.8rem;
color: white;
cursor: pointer;
cursor: default;
font-style: italic;
background-color: gray;
font-weight: normal;
padding-bottom: 0.8rem;
font-size: 18px;
}
.big_hr {
@ -386,10 +392,12 @@
text-align: center;
margin-bottom: 0.8rem;
color: white;
cursor: pointer;
cursor: default;
font-style: italic;
background-color: gray;
font-weight: normal;
padding-bottom: 0.8rem;
font-size: 18px;
}
@ -420,6 +428,7 @@
font-size: small !important;
padding-top: 0.2rem;
padding-bottom: 0.2rem;
height: 3.5rem;
}
@ -522,10 +531,12 @@
text-align: center;
margin-bottom: 0.8rem;
color: white;
cursor: pointer;
cursor: default;
font-style: italic;
background-color: gray;
font-weight: normal;
padding-bottom: 0.8rem;
font-size: 18px;
}
@ -554,6 +565,7 @@
font-size: medium !important;
padding-top: 0.2rem;
padding-bottom: 0.2rem;
height: 3.5rem;
}