05/06/2025 - 20h

branche_01062025
Cherif 2025-06-05 19:52:09 +02:00
parent c2049afb63
commit eb6b78b7b2
24 changed files with 5333 additions and 1121 deletions

View File

@ -13,15 +13,15 @@ import Recherche_new_v4 from "./pages/recherche_new_v4";
import Mon_Catalogue_Public from "./pages/mon_catalogue_public";
import Mon_Intranet_Public from "./pages/mon_intranet_public";
import Mon_Ent_Student from "./pages/mon_ent_student";
import TestUrl from "./pages/testurl";
import Account from "./pages/account";
import DisplayDetailClass_new_v2 from "./pages/displaydetailclass_new_v2";
import DisplayDetailClass_new_v3 from "./pages/displaydetailclass_new_v3";
import Student_Account from "./pages/student_account";
import Display_Partner_Catalog_DetailClass_new_v2 from "./pages/display_partner_catalog_detailclass_new_v2"
import DisplayDetailArticle from "./pages/displaydetailarticle";
import AddArticleAvis from "./pages/addarticleavis";
import Acceuil from "./pages/acceuil";
import Partner from "./pages/partner";
@ -34,9 +34,6 @@ import RechecheArticles from "./pages/recherchearticles";
import AddArticle from "./pages/addarticle";
import ResetUserPwd from "./pages/resetuserpwd";
import DeleteUserAccount from "./pages/deleteuseraccount";
import ContactezNous from "./pages/contactez_nous";
import CoupDeCoeur from "./pages/coupdecoeur";
import AccountUserActivated from "./pages/accountuseractivated";
import ProduitsService from "./pages/produitservice";
@ -50,8 +47,6 @@ import SeDesabonner from './pages/sedesabonner';
import OrderConfirmation_3DS from "./pages/orderconfirmation_3DS";
import Training_Inactive_Or_Not_Found from "./pages/Traning_Inactif_Or_Not_Exist";
import TestUrl_New from "./pages/testurl_new";
import QuiSommesNous_v3 from "./pages/quisommesnous_v3";
import Fonctionnalites from "./pages/fonctionnalite";
import Test_Drag_Drop from "./pages/test_drag_drop";
import Test_Drag_Drop2 from "./pages/test_dnd";
import ESign from "./pages/eSigne";
@ -123,8 +118,7 @@ function App() {
var tab_action = ['/moncatalog', '/Display-Partner-Catalog-Detail-formation', 'Display-Partner-Catalog-Detail-formation', 'moncatalog'];
if (tab_myurl_pathname.length > 0 && !tab_action.includes(tab_myurl_pathname[1]) && !tab_reserved_subdomain.includes(subdomain)) {
var new_url = window.location.protocol + "//" + domain.split('.')[0] + "." + domain.split('.')[1] + "/moncatalog";
@ -156,12 +150,13 @@ function App() {
<Route path="/v3" exact component={Recherche_new_v3} />
<Route path="/v4" exact component={Recherche_new_v4} />
<Route path="/subdomain" exact component={Subdomain_Recherche_new_v2} />
<Route path="/moncatalog" exact component={Mon_Catalogue_Public} />
<Route path="/intranet" exact component={Mon_Intranet_Public} />
<Route path="/ent_student" exact component={Mon_Ent_Student} />
<Route path="/acceuil" exact component={Acceuil} />
@ -184,9 +179,6 @@ function App() {
<Route path="/Display-Partner-Catalog-Detail-formation/:classId/:action" exact component={Display_Partner_Catalog_DetailClass_new_v2} />
<Route path="/mysy-account-activated/" exact component={AccountUserActivated} />
{/* <Route path="/Produits-Services/" exact component={ProduitsService} />*/}
<Route path="/tarifs_produits_services/" exact component={ProduitsService} />
@ -284,7 +276,7 @@ function App() {
<Route path="/DeleteUserAccount/:token" exact component={DeleteUserAccount} />
<Route path="/mysy-student-account" exact component={Student_Account} />
{/* Fin Migration */}

View File

@ -398,7 +398,7 @@ function Account() {
{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>
@ -443,7 +443,7 @@ function Account() {
{/** Menu pour un utilisateur NON type 'user' exemple un apprenant */}
{connected_user_data && connected_user_data.type &&
String(connected_user_data.type) !== "user" &&
String(connected_user_data.type) !== "student" &&
<div>
<div className="sousmenu" onClick={displayPersoInfo}> INFORMATIONS PERSONNELLES</div>
<hr className="my_hr" />
@ -568,8 +568,6 @@ function Account() {
/>}
{String(menu) === String("mes_documents") && <Profil_Objectif />}

View File

@ -6801,7 +6801,8 @@ const AddClassManual = (props) => {
rows_champs_specifics.map((champ_spec) => (
<div className="training_caract">
{String(JSON.parse(champ_spec).field_type) === "float" && <TextField
{String(JSON.parse(champ_spec).field_type) === "float" &&
<TextField
name={JSON.parse(champ_spec).field_name}
id={JSON.parse(champ_spec).field_name}
label={JSON.parse(champ_spec).field_label}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -3887,10 +3887,7 @@ const DisplayPartnerSession = (props) => {
submenu_color_management("detail_session");
await sleep(2);
if (edit_session_form === false) {
desableSessionFields();
}
@ -4166,24 +4163,8 @@ const DisplayPartnerSession = (props) => {
setnb_stagiaire_Inscrit("0");
/* Activation des champs spécifiques */
// Pour les champs spécifiques
submenu_detail_session();
for (let i = 0; i < rows_champs_specifics.length; i++) {
var field_name = JSON.parse(rows_champs_specifics[i]).field_name;
var field_type = JSON.parse(rows_champs_specifics[i]).field_type;
var field_label = JSON.parse(rows_champs_specifics[i]).field_label;
var is_mandatory = JSON.parse(rows_champs_specifics[i]).is_mandatory;
if (document.getElementsByName(String(field_name))) {
document.getElementsByName(String(field_name)).disabled = false;
document.getElementsByName(String(field_name)).backgroundColor = "#FFFFFF";
}
}
setsubmenu("detail_session");
submenu_color_management("detail_session");
setgridline_id('');
setsequence_gridline_id("");
@ -4195,6 +4176,19 @@ const DisplayPartnerSession = (props) => {
behavior: "smooth",
});
for (let i = 0; i < rows_champs_specifics.length; i++) {
var field_name = JSON.parse(rows_champs_specifics[i]).field_name;
var field_type = JSON.parse(rows_champs_specifics[i]).field_type;
var field_label = JSON.parse(rows_champs_specifics[i]).field_label;
var is_mandatory = JSON.parse(rows_champs_specifics[i]).is_mandatory;
if (document.getElementsByName(String(field_name))) {
document.getElementsByName(String(field_name)).disabled = false;
document.getElementsByName(String(field_name)).backgroundColor = "#FFFFFF";
}
}
}
@ -5799,14 +5793,6 @@ const DisplayPartnerSession = (props) => {
const [one_editorRef_contenu_ftion_limite, setone_editorRef_description_limite] = useState(800);
const [field_contenu_ftion, setfield_contenu_ftion] = useState("");
function editor_contenu_ftion_keyup() {
setsessionChanged(true);
}
function one_editor_contenu_ftion_keyup() {
setsessionChanged(true);
}
function One_annuleSessionUpdate() {
@ -5817,8 +5803,16 @@ const DisplayPartnerSession = (props) => {
setCreateSessionFormation_message();
setone_CreateSessionFormation_api();
setone_CreateSessionFormation_message();
setone_CreateSessionFormation_result()
setaddOneSession();
setone_CreateSessionFormation_result([])
setaddOneSession("");
setsubmenu("");
setselected_code_session("");
window.scrollTo({
top: 0,
behavior: "smooth",
});
}
@ -5965,9 +5959,7 @@ const DisplayPartnerSession = (props) => {
// Pour les champs spécifiques
if (String(addOneSession) !== "1") {
if (String(addOneSession) !== "1") {
for (let i = 0; i < rows_champs_specifics.length; i++) {
var field_name = JSON.parse(rows_champs_specifics[i]).field_name;
@ -5986,6 +5978,7 @@ const DisplayPartnerSession = (props) => {
setfields1desabled(true);
}
let [edit_session_form, setedit_session_form] = useState(false);
@ -7112,7 +7105,7 @@ const DisplayPartnerSession = (props) => {
setnb_valide_inscription_individuelle("");
}
if (mylocaltraining.archive) {
if (mylocaltraining.archive) {
setp_detail_archive(mylocaltraining.archive);
} else {
setp_detail_archive("");
@ -7583,17 +7576,17 @@ const DisplayPartnerSession = (props) => {
return currentDate.getTime() < selectedDate.getTime();
};
function One_annuleSessionUpdate() {
One_clearSessionFields();
//GetCurrentSession(selected_code_session);
setsessionChanged(false);
setCreateSessionFormation_api();
setCreateSessionFormation_message();
setone_CreateSessionFormation_api();
setone_CreateSessionFormation_message();
setone_CreateSessionFormation_result()
setaddOneSession();
}
/* function One_annuleSessionUpdate() {
One_clearSessionFields();
//GetCurrentSession(selected_code_session);
setsessionChanged(false);
setCreateSessionFormation_api();
setCreateSessionFormation_message();
setone_CreateSessionFormation_api();
setone_CreateSessionFormation_message();
setone_CreateSessionFormation_result()
setaddOneSession();
}*/
const [SessionendDateInscription, setSessionendDateInscription] = useState();
const [New_GetCurrentPartnerClass_result, setNew_GetCurrentPartnerClass_result] = useState([]);
@ -18119,7 +18112,7 @@ const DisplayPartnerSession = (props) => {
setinfo_affiche_date_fin(JSON.parse(rowss[session_selected_row_id]).date_fin);
setinfo_affiche_etape(JSON.parse(rowss[session_selected_row_id]).session_etape);
var nb_place_dispo = String(parseInt(String(JSON.parse(rowss[session_selected_row_id]).nb_participant)) - parseInt(String(JSON.parse(rowss[session_selected_row_id]).nb_inscrit)))
var nb_place_dispo = String(parseInt(String(JSON.parse(rowss[session_selected_row_id]).nb_participant)) - parseInt(String(JSON.parse(rowss[session_selected_row_id]).nb_inscrit)))
//console.log(" ### nb_place_dispo = ", nb_place_dispo);
setinfo_affiche_place_disponible(nb_place_dispo);
@ -21148,7 +21141,11 @@ const DisplayPartnerSession = (props) => {
</Button>
<Button variant="outlined" onClick={submenu_add_one_session}
<Button variant="outlined" onClick={(e) => {
setaddOneSession("1");
submenu_add_one_session();
}}
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout 1 Promo &nbsp;
<IoAddCircleOutline style={{ "fontSize": "x-large", "color": "green" }} />
@ -21210,8 +21207,6 @@ const DisplayPartnerSession = (props) => {
{String(submenu) === String("detail_session") && <div style={{ "border": "None" }}>
{String(addOneSession) !== "1" && <div className="session_data" onChange={IssessionChanged}>
&nbsp;
{p_detail_archive && String(p_detail_archive) === "1" &&
@ -22010,106 +22005,6 @@ const DisplayPartnerSession = (props) => {
</div>}
{/* {edit_session_form && <div className="session_caract"> <b> Présentiel </b> <br />
<Autocomplete
disablePortal
name="presentiel"
id="presentiel"
className="disabled_style"
options={presentiel_tab}
value={p_session_presentiel_label}
onChange={(event, value) => {
if (value && value.value) {
setp_session_presentiel(value.value);
setp_session_presentiel_label(value.label);
IssessionChanged();
} else {
setp_session_presentiel("");
setp_session_presentiel_label("");
IssessionChanged();
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
</div>}
{!edit_session_form && <div className="session_caract"> <b>Présentiel </b> <br />
<TextField
name="presentiel"
id="presentiel"
text
InputLabelProps={{
shrink: true,
}}
inputProps={{ min: "0", max: "1", step: "1" }}
disabled={false}
className="disabled_style"
value={p_session_presentiel_label}
/>
</div>}
{edit_session_form && <div className="session_caract"><b>A distance </b><br />
<Autocomplete
disablePortal
name="distantiel"
id="distantiel"
className="disabled_style"
options={distaciel_tab}
value={p_session_distance_label}
onChange={(event, value) => {
if (value && value.value) {
setp_session_distance(value.value);
setp_session_distance_label(value.label);
IssessionChanged();
} else {
setp_session_distance("");
setp_session_distance_label("");
IssessionChanged();
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
</div>}
{!edit_session_form && <div className="session_caract"><b>A distance </b><br />
<TextField
name="distantiel"
id="distantiel"
text
InputLabelProps={{
shrink: true,
}}
inputProps={{ min: "0", max: "1", step: "1" }}
disabled={false}
className="disabled_style"
value={p_session_distance_label}
/>
</div>}
*/}
{!edit_session_form && <div className="session_caract"> Inclus au BPF<br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
@ -22182,36 +22077,7 @@ const DisplayPartnerSession = (props) => {
{/* <div className="div_row" style={{ "border": "None" }}>
<div className="session_caract"> Contenu de la formation (max 800 caractères)<br />
<i> (à afficher sur l'attestation) </i>
{!fields1desabled && <br />}
{!fields1desabled && <br />}
<Editor
onInit={(evt, editor) => editorRef_contenu_ftion.current = editor}
initialValue={field_contenu_ftion}
onKeyUp={editor_contenu_ftion_keyup}
disabled={fields1desabled}
init={{
resize: false,
height: 200,
menubar: false,
plugins: [
'advlist autolink lists link image charmap print preview anchor',
'searchreplace visualblocks code fullscreen',
'insertdatetime media table paste code help wordcount'
],
toolbar: false,
content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:12px; }'
}}
/>
</div>
</div>*/}
</div>
@ -22231,8 +22097,8 @@ const DisplayPartnerSession = (props) => {
{rows_champs_specifics &&
rows_champs_specifics.map((champ_spec) => (
<div className="session_caract"> {JSON.parse(champ_spec).field_label} <br />
<br />
<div className="session_caract"> {String(JSON.parse(champ_spec).is_mandatory) === "1" && <font> <b> {JSON.parse(champ_spec).field_label} </b> </font>}
{String(JSON.parse(champ_spec).is_mandatory) !== "1" && <font> {JSON.parse(champ_spec).field_label} </font>} <br />
{String(JSON.parse(champ_spec).field_type) === "float" &&
<TextField
@ -22867,55 +22733,7 @@ const DisplayPartnerSession = (props) => {
</div>
{/*<div className="session_caract"><b>Présentiel </b> <br />
<Autocomplete
disablePortal
name="one_presentiel"
id="one_presentiel"
className="disabled_style enable_style"
options={presentiel_tab}
value={p_one_session_presentiel_label}
onChange={(event, value) => {
if (value && value.value) {
setp_one_session_presentiel(value.value);
setp_one_session_presentiel_label(value.label);
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
</div>
<div className="session_caract"><b> A distance </b> <br />
<Autocomplete
disablePortal
name="one_distantiel"
id="one_distantiel"
className="disabled_style enable_style"
options={distaciel_tab}
value={p_one_session_distance_label}
onChange={(event, value) => {
if (value && value.value) {
setp_one_session_distance(value.value);
setp_one_session_distance_label(value.label);
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
</div>*/}
<div className="session_caract"> Inclus au BPF <br />
<Autocomplete
@ -22975,36 +22793,7 @@ const DisplayPartnerSession = (props) => {
</div>
{/*<div className="div_row" style={{ "border": "None" }}>
<div className="session_caract"> Contenu de la formation (max 800 caractères)<br />
<i> (à afficher sur l'attestation) </i>
{!fields1desabled && <br />}
{!fields1desabled && <br />}
<Editor
onInit={(evt, editor) => one_editorRef_contenu_ftion.current = editor}
initialValue={one_field_contenu_ftion}
onKeyUp={one_editor_contenu_ftion_keyup}
disabled={false}
init={{
resize: false,
height: 200,
menubar: false,
plugins: [
'advlist autolink lists link image charmap print preview anchor',
'searchreplace visualblocks code fullscreen',
'insertdatetime media table paste code help wordcount'
],
toolbar: false,
content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:12px; }'
}}
/>
</div>
</div>*/}
</div>
@ -23025,8 +22814,8 @@ const DisplayPartnerSession = (props) => {
{rows_champs_specifics &&
rows_champs_specifics.map((champ_spec) => (
<div className="session_caract"> {JSON.parse(champ_spec).field_label} <br />
<br />
<div className="session_caract"> {String(JSON.parse(champ_spec).is_mandatory) === "1" && <font> <b> {JSON.parse(champ_spec).field_label} </b> </font>}
{String(JSON.parse(champ_spec).is_mandatory) !== "1" && <font> {JSON.parse(champ_spec).field_label} </font>} <br />
{String(JSON.parse(champ_spec).field_type) === "float" &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}

View File

@ -2613,7 +2613,7 @@ const DisplayPartnerStagiaires = (props) => {
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("archive", "0");
form.append("archive", "0");
var myurl = process.env.REACT_APP_API_URL + "myclass/api/GetAllValideSessionPartner_List/";
setLoading(true);
@ -7167,7 +7167,7 @@ const DisplayPartnerStagiaires = (props) => {
>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}
@ -9549,7 +9549,8 @@ const DisplayPartnerStagiaires = (props) => {
{rows_champs_specifics &&
rows_champs_specifics.map((champ_spec) => (
<div className="session_caract"> {JSON.parse(champ_spec).field_label} <br />
<div className="session_caract"> {String(JSON.parse(champ_spec).is_mandatory) === "1" && <font> <b> {JSON.parse(champ_spec).field_label} </b> </font>}
{String(JSON.parse(champ_spec).is_mandatory) !== "1" && <font> {JSON.parse(champ_spec).field_label} </font>} <br />
{String(JSON.parse(champ_spec).field_type) === "float" && <TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
@ -10497,7 +10498,8 @@ const DisplayPartnerStagiaires = (props) => {
{rows_champs_specifics &&
rows_champs_specifics.map((champ_spec) => (
<div className="session_caract"> {JSON.parse(champ_spec).field_label} <br />
<div className="session_caract"> {String(JSON.parse(champ_spec).is_mandatory) === "1" && <font> <b> {JSON.parse(champ_spec).field_label} </b> </font>}
{String(JSON.parse(champ_spec).is_mandatory) !== "1" && <font> {JSON.parse(champ_spec).field_label} </font>} <br />
{String(JSON.parse(champ_spec).field_type) === "float" && <TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}

View File

@ -14,13 +14,13 @@ import { FcInfo } from "react-icons/fc";
import { LiaDharmachakraSolid } from "react-icons/lia";
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import add_plus from "../mysy_img/plus.png";
import excel_icone from "../mysy_img/excel_icone.png";
import participants from "../mysy_img/participants.png";
import fileDownload from 'js-file-download';
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint } from "react-icons/fc";
import { FcAcceptDatabase, FcPrint } from "react-icons/fc";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
@ -35,7 +35,7 @@ import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import EmailIcon from '@mui/icons-material/Email'
import Visibility from '@mui/icons-material/Visibility';
import VisibilityOff from '@mui/icons-material/VisibilityOff';
import { Fab } from "@material-ui/core";
@ -47,7 +47,7 @@ import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { gridClasses } from '@mui/x-data-grid';
import Link from '@mui/material/Link';
import { PiDotsThree } from "react-icons/pi";
import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
import { IoAddCircleOutline } from "react-icons/io5";
import Rating from '@mui/material/Rating';
import { BarChart } from '@mui/x-charts';
import { axisClasses } from '@mui/x-charts';
@ -1794,6 +1794,7 @@ const Employes = (props) => {
setliste_sessions_file_change_api("true");
clean_all_filters();
Getall_Training_Employee_No_Filter();
setdisplay_alert_mysy("1");
setalert_message(" Les employés ont été correctement importés");
setalert_type("success");
@ -9161,8 +9162,8 @@ const Employes = (props) => {
{rows_champs_specifics &&
rows_champs_specifics.map((champ_spec) => (
<div className="session_caract"> {JSON.parse(champ_spec).field_label} <br />
<br />
<div className="session_caract"> {String(JSON.parse(champ_spec).is_mandatory) === "1" && <font> <b> {JSON.parse(champ_spec).field_label} </b> </font>}
{String(JSON.parse(champ_spec).is_mandatory) !== "1" && <font> {JSON.parse(champ_spec).field_label} </font>} <br/>
{String(JSON.parse(champ_spec).field_type) === "float" && <TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -9615,7 +9616,7 @@ const Employes = (props) => {
<nav style={{
"border": "None", "fontSize": "18px", "fontWeight": "600", fontFamily: "DM Sans",
textAlign: "center", paddingTop: "10px"
}}> Ajouter un Employé </nav>
}}> Ajouter un Employé </nav>
&nbsp;
<div class="separator">
@ -10087,8 +10088,8 @@ const Employes = (props) => {
{rows_champs_specifics &&
rows_champs_specifics.map((champ_spec) => (
<div className="session_caract"> {JSON.parse(champ_spec).field_label} <br />
<br />
<div className="session_caract"> {String(JSON.parse(champ_spec).is_mandatory) === "1" && <font> <b> {JSON.parse(champ_spec).field_label} </b> </font>}
{String(JSON.parse(champ_spec).is_mandatory) !== "1" && <font> {JSON.parse(champ_spec).field_label} </font>} <br/>
{String(JSON.parse(champ_spec).field_type) === "float" && <TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required

File diff suppressed because it is too large Load Diff

View File

@ -6734,8 +6734,8 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
{rows_champs_specifics_session &&
rows_champs_specifics_session.map((champ_spec) => (
<div className="session_caract"> {JSON.parse(champ_spec).field_label} <br />
<br />
<div className="session_caract"> {String(JSON.parse(champ_spec).is_mandatory) === "1" && <font> <b> {JSON.parse(champ_spec).field_label} </b> </font>}
{String(JSON.parse(champ_spec).is_mandatory) !== "1" && <font> {JSON.parse(champ_spec).field_label} </font>} <br/>
{String(JSON.parse(champ_spec).field_type) === "float" && <TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required

View File

@ -1520,8 +1520,8 @@ function Inscription_Information(props) {
{rows_champs_specifics &&
rows_champs_specifics.map((champ_spec) => (
<div className="session_caract"> {JSON.parse(champ_spec).field_label} <br />
<br />
<div className="session_caract"> {String(JSON.parse(champ_spec).is_mandatory) === "1" && <font> <b> {JSON.parse(champ_spec).field_label} </b> </font>}
{String(JSON.parse(champ_spec).is_mandatory) !== "1" && <font> {JSON.parse(champ_spec).field_label} </font>} <br/>
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -1764,8 +1764,8 @@ function Inscription_Information(props) {
{rows_champs_specifics &&
rows_champs_specifics.map((champ_spec) => (
<div className="session_caract"> {JSON.parse(champ_spec).field_label} <br />
<br />
<div className="session_caract"> {String(JSON.parse(champ_spec).is_mandatory) === "1" && <font> <b> {JSON.parse(champ_spec).field_label} </b> </font>}
{String(JSON.parse(champ_spec).is_mandatory) !== "1" && <font> {JSON.parse(champ_spec).field_label} </font>} <br/>
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required

View File

@ -0,0 +1,534 @@
import React, { useState, useEffect } from "react";
import { useForm } from "react-hook-form";
import { useHistory } from "react-router-dom";
import { Button, FormGroup, Label, Input } from "reactstrap";
import { useCookies } from "react-cookie";
import { confirmAlert } from 'react-confirm-alert'; // Import
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import axios from "axios";
import { useParams } from 'react-router-dom'
import { useLocation } from "react-router-dom";
import Visibility from '@mui/icons-material/Visibility';
import VisibilityOff from '@mui/icons-material/VisibilityOff';
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
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_part, setCookie_part, removeCookie_part] = useCookies(['tokenmysypart'], { path: '/' });
const [retval, setretval] = useState("0");
const [myApimyApiMessage, setmyApimyApiMessage] = useState("");
const [initpasswd, setinitpasswd] = useState();
const [result, setResult] = useState("");
const [myApiResponse, setmyApiResponse] = useState("false");
const url_login = process.env.REACT_APP_API_URL + "myclass/api/login/";
const random1 = Math.floor(Math.random() * 10);
const random2 = Math.floor(Math.random() * 10);
const [closepopup, setclosepopup] = useState(0);
const { obj, objid } = useParams();
const [menucompte, setmenucompte] = useState("user");
const [currentpawdvisible, setcurrentpawdvisible] = useState(false);
const [typecompte, settypecompte] = useState("");
const {
register,
formState: { errors },
handleSubmit,
} = useForm();
const history = useHistory();
function logout_partner_confirmation() {
removeCookie_part('tokenmysypart', { path: '/' });
}
function retnull() {
setretval("-1");
}
function logout_user_confirmation() {
removeCookie_part('tokenmysych', { path: '/' });
}
function Logout_User() {
confirmAlert({
title: 'Deconnexion utilisateur ?',
message: 'Confirmez la deconnexion utilisateur',
buttons: [
{
label: 'Oui',
onClick: () => logout_user_confirmation()
},
/* {
label: 'Non',
onClick: () => retnull()
}*/
]
});
}
const onSubmit = async (data) => {
//console.log(" CONNEXION DE = ",menucompte);
var partner_connexion = "";
var url_login = "";
url_login = process.env.REACT_APP_API_URL + "myclass/api/login/";
setmenucompte("user");
partner_connexion = "user";
// console.log( " ### full url_login = ", url_login)
// Gestion des Cookies
const stored_partner = cookie_part.tokenmysypart;
const stored_user = cookie.tokenmysych;
const formData = new FormData();
var mymail = document.getElementsByName("email")[0].value;
var mypwd = document.getElementsByName("pwd")[0].value;
formData.append("email", mymail);
formData.append("pwd", mypwd);
var re = /\S+@\S+\.\S+/;
if (re.test(mymail) === false) {
alert("l'adresse email est incorrecte");
return;
}
if (mypwd.length <= 0) {
alert("Vous n'avez pas saisi de mot de passe");
return;
}
// si c'est une connexion user qui est active
if (typeof (stored_user) != "undefined" && String(stored_user) !== String('')) {
//alert(" c'est une connexion USERR qui est active");
Logout_User();
}
fetch(
url_login,
{
method: 'POST',
body: formData,
}
).then((response) => response.json())
.then((result) => {
//console.log('Success:', result['message'], "result['status'] = ", result['status']);
var val = result['status'];
if (String(val) === String("true")) {
setCookie("tokenmysych", result['message']);
// Verification vers quelle page les renvoyer
if (obj === "training" && String(objid).length > 0) {
// redirection vers l'affichage d'une formation
history.push("/Display-Detail-formation/" + objid);
}
else {
// Redirection par defaut vers la compte de l'apprenant - ENT
history.push({
pathname: "/mysy-student-account",
state: {
firstconnexion: String(result['firstconnexion'])
}
});
}
}
else {
setisconnected("false");
setmyApimyApiMessage(result['message']);
}
})
.catch((error) => {
console.error('Error:', error);
setisconnected("false");
setmyApimyApiMessage("Le service est momentanément indisponible, merci de ressayer plus tard. ");
});
}
const location = useLocation();
useEffect(() => {
setmenucompte("partner");
const listener = event => {
if (event.code === "Enter" || event.code === "NumpadEnter") {
event.preventDefault();
onSubmit();
}
};
document.addEventListener("keydown", listener);
if (String(menucompte) === String("user")) {
menu_user_account();
}
else {
menu_parter_account();
}
if (location && location.state && location.state.mysy_arg && String(location.state.mysy_arg) === "partner") {
menu_parter_account();
}
}, []);
function menu_parter_account() {
//alert(" menu_parter_account = "+String(menucompte));
setmenucompte("partner");
if (document.getElementsByName("partner_account") && document.getElementsByName("partner_account")[0])
document.getElementsByName("partner_account")[0].style.backgroundColor = "#81BC3A";
if (document.getElementsByName("user_account") && document.getElementsByName("user_account")[0])
document.getElementsByName("user_account")[0].style.backgroundColor = "#ffffff";
}
function menu_user_account() {
setmenucompte("user");
if (document.getElementsByName("user_account") && document.getElementsByName("user_account")[0])
document.getElementsByName("user_account")[0].style.backgroundColor = "#81BC3A";
}
function resetpasswd_ok(e) {
var total = " ?? ";
if (document.getElementsByName("sommerandom")[0].value) {
total = document.getElementsByName("sommerandom")[0].value;
}
var calcaul_total = parseInt(random1) + parseInt(random2);
if (parseInt(total) != parseInt(calcaul_total)) {
document.getElementsByName("pasrobot")[0].style.backgroundColor = "red";
alert(" Le total dans la zone 'je ne suis pas un robot' est incohérent. Recommencez svp :) !!!");
return;
}
// Controle du mail
var mymail = document.getElementsByName("resetemailvalue")[0].value;
//alert(" le mail de reset = "+mymail);
var re = /\S+@\S+\.\S+/;
if (re.test(mymail) === false) {
alert("l'adresse email est incorrecte");
return;
}
var form = new FormData();
form.append("email", mymail);
// Controle du type de compte
if (String(typecompte) !== "partner" && String(typecompte) !== "user") {
alert("Le type de compte est inconnu");
document.getElementsByName("is_user_or_pro")[0].style.backgroundColor = "orangered";
return;
}
form.append("account_type", typecompte);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/InitUserPasswd/";
//alert("myurl = "+myurl);
axios.post(myurl, form).then(res => {
setclosepopup(1);
setinitpasswd("true");
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);
}
else {
//console.log(" In test res.data.status = " + res.data.status);
//console.log(" In test res.data.message = " + res.data.message);
setmyApiResponse("false");
setResult(res.data.message);
}
}).catch((error) => {
console.warn('Not good man :( mysearchtext = ');
setmyApiResponse("false");
setinitpasswd("false");
//setmyApimyApiMessage("")
})
}
function resetpasswd(e) {
confirmAlert({
title: 'Reinitialisation Mot de Passe?',
message: 'Confirmez la reinitialisation',
buttons: [
{
label: 'Oui',
onClick: () => resetpasswd_ok()
},
{
label: 'Non',
onClick: () => { return }
},
],
closeOnEscape: false,
closeOnClickOutside: false,
keyCodeForClose: [8, 32],
willUnmount: () => { },
afterClose: () => { },
onClickOutside: () => { },
onKeypress: () => { },
onKeypressEscape: () => { },
});
}
function closepopupinitpwd() {
setclosepopup("1");
}
// Cette fonction permet de cacher le mot de passer et eviter les
// autocompletion
const [realpwdvalue, setrealpwdvalue] = useState("");
const [realpwdhidenvalue, setrealpwdhidenvalue] = useState("");
function realpwd(e) {
const val = e.target.value;
const last = val.charAt(val.length - 1);
var new_val = realpwdvalue;
var new_val_hiden = realpwdhidenvalue;
//alert(" new_val avant saisie= "+new_val);
new_val = new_val + last;
new_val_hiden = new_val_hiden + "*";
//alert(" - new_val apres sisie = "+new_val+" new_val_hiden = "+new_val_hiden);
setrealpwdhidenvalue(new_val_hiden);
setrealpwdvalue(new_val);
//setrealpwdvalue(val);
//document.getElementById("cle_secrete").value = new_val_hiden;
}
/* function displayvlaue(){
alert(" la valeur secrete = "+realpwdvalue);
}*/
const handleClickShowPassword = () => {
if (currentpawdvisible == false) {
document.getElementsByName("pwd")[0].type = "text";
setcurrentpawdvisible(true);
}
else if (currentpawdvisible == true) {
document.getElementsByName("pwd")[0].type = "password";
setcurrentpawdvisible(false);
}
};
return (
<div style={{ width: "100%", float: "left" }}>
<div className="module_connexion_intranet_client">
<div className="div_mobile">
<div className="block_centrer">
<div className="display_screen_600_901">
<div className="div_centre_master">
<div className="div_centre_002">
<Button variant="outlined" onClick={menu_user_account} className="signin_menu"
id="user_account" name="user_account"
style={{ "float": "left", "textAlign": "center", "height": "3rem" }}> Espace numérique de travail - ENT</Button>
</div>
<div className="div_centre">
<div className="div_row_bis" >
<FormGroup>
<Label style={{ fontSize: "14px" }}>Votre adresse email</Label>
<Input type="email" placeholder="Email" name="email" />
</FormGroup>
<div style={{ height: '10px' }}> &nbsp; </div>
<FormGroup>
<div className="label_pwd_div">
<div className="label_div" >
<Label style={{ fontSize: "14px" }}>Votre mot de passe </Label>
</div>
<div className="show_pwd_div" onClick={handleClickShowPassword}>
{currentpawdvisible ? <Visibility style={{ fontSize: '15px' }} /> : <VisibilityOff style={{ fontSize: '15px' }} />}
</div>
</div>
<Input type="password" placeholder="Password" name="pwd" />
</FormGroup>
{String(initpasswd) === String("true") && closepopup === 1 && <div className="okUpdateData">
La demande reinitialisation a bien ete prise en compte.
Verifiez votre boite email.
</div>}
<div className="forgot_pass" >
{String(initpasswd) !== String("true") && String(closepopup) !== String("1")
&& <Popup trigger={<button className="avisformation"> Mot de passe oublié</button>}
position="center" className="signin popup-reset-pwd">
<div className="signin-content popup-reset-pwd-content">
<div className="div_row" style={{
"textAlign": "center", "background": "orangered",
"height": "2rem", "paddingTop": "5px", "fontSize": "14px", "fontWeight": "bold"
}}
> Modifier le mot de passe</div>
<br />
<label for="exampleFormControlTextarea1">Saisir votre email</label>
<br />
<input type="text" id="resetemailvalue" name="resetemailvalue" rows="1" cols="20"
className="zone_mail" />
<br />
<div>
<br />
<Tooltip className="tooltip_css" id="is_user_or_pro-tooltip" />
<a data-tooltip-id="is_user_or_pro-tooltip" data-tooltip-html="Compte partenaire : création et gestion de formation <br/>
compte utilisateur : non autorisé à la création et gestion de formation">
<label for="is_user_or_pro">Compte partenaire ou utilisateur * ?</label>
<br />
<select id="is_user_or_pro" name="is_user_or_pro" style={{
"width": '100%', "height": "2.5rem",
'marginTop': '5px'
}}
onChange={(event) => settypecompte(event.target.value)}>
<option selected value="">Choisir </option>
<option value="partner">Partenaire </option>
<option value="user">Utilisateur </option>
</select>
</a>
<br />
</div>
<div className="text_pwd_crit" style={{ "textAlign": "center" }}>
Je ne suis pas un robot <br />
<div >
<div name="pasrobot" > {random1} + {random2} = <input
type='text'
name='sommerandom'
id='sommerandom'
{...register('sommerandom', {
required: { value: true, message: 'sommes de valeurs' },
maxLength: {
value: 30,
}
})}
className="pasrobot_css"
placeholder='Le total est ?'
/>
{errors.sommerandom && (
<span className='koUpdateData'>la sommes est incorrect</span>
)}
</div>
</div>
</div>
<button type="submit" class="btn btn-secondary btn-sm" onClick={resetpasswd_ok}>Envoyer</button> &nbsp; &nbsp; &nbsp;
<button type="submit" class="btn btn-secondary btn-sm" onClick={closepopupinitpwd}> Annuler</button>
</div>
</Popup>
}
</div>
</div>
<FormGroup>
&nbsp;
</FormGroup>
<div className="div_row22">
<Button variant="contained" color="success" className="div_row22 btn_login button" onClick={onSubmit}>Connectez-Vous</Button>
</div>
</div>
</div>
{isconnected === "false" && <div className="erreurconnexion">
<br />
{myApimyApiMessage}</div>
}
</div>
</div>
</div>
</div>
{/* <div style={{ height: "5rem", width: "100%" }}>
<Fotter_v3 />
</div>*/}
</div>
);
}
export default Module_Connexion_Ent_Student;

View File

@ -2,9 +2,6 @@ import React, { useState, useEffect } from "react";
import { useForm } from "react-hook-form";
import { useHistory } from "react-router-dom";
import { Button, FormGroup, Label, Input } from "reactstrap";
import { FacebookLoginButton, GoogleLoginButton } from "react-social-login-buttons";
//import { getCookie, setCookie, removeCookie } from 'react-use-cookie';
import { Helmet } from "react-helmet";
import { useCookies } from "react-cookie";
import { confirmAlert } from 'react-confirm-alert'; // Import
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
@ -12,14 +9,12 @@ import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import axios from "axios";
import { useParams } from 'react-router-dom'
import Header from "./Header";
import { useLocation } from "react-router-dom";
import Visibility from '@mui/icons-material/Visibility';
import VisibilityOff from '@mui/icons-material/VisibilityOff';
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import Fotter_v3 from "./Fotter_v3";
function Module_Connexion_Intranet_Client() {
const [isconnected, setisconnected] = useState("");
@ -385,7 +380,7 @@ function Module_Connexion_Intranet_Client() {
<div className="div_centre_002">
<Button variant="outlined" onClick={menu_user_account} className="signin_menu"
id="user_account" name="user_account"
style={{ "float": "left", "textAlign": "center", "height": "3rem" }}>Intranet Utilisateur</Button>
style={{ "float": "left", "textAlign": "center", "height": "3rem" }}>Intranet Client</Button>

View File

@ -1,65 +1,18 @@
import React, { useRef, useState, useMemo, useEffect } from "react";
import { useForm } from "react-hook-form";
import axios from "axios";
import Formation_Partner_Catalog from "./Formation_Partner_Catalog";
import { FaSearch, FaRegArrowAltCircleDown, FaRegArrowAltCircleUp } from 'react-icons/fa';
import { BsFillXCircleFill } from "react-icons/bs";
import { IoAppsSharp, IoListSharp } from "react-icons/io5";
import Formation_Grid_2Col from "./Formation_Grid_2Col";
import Pagination from "./TestPagination";
import data from "./data/mock-data.json";
import { useHistory } from "react-router-dom";
import { getCookie, removeCookie } from 'react-use-cookie';
import { Helmet } from "react-helmet";
import AideRecherche from "./AideRecherche"
import { useParams } from 'react-router-dom'
import Fotter_Catalog_Pub from "./Fotter_Catalog_Pub";
import Footer from "./Fotter";
import LogoutOutlinedIcon from '@mui/icons-material/LogoutOutlined';
import Button from '@mui/material/Button';
import MenuItem from "@material-ui/core/MenuItem";
import Menu from "@material-ui/core/Menu";
import Header from "./Header";
import connect_white from "../mysy_img/connect_white_v2.png";
import connect_green from "../mysy_img/connect_green.png";
import { getCookie, } from 'react-use-cookie';
import { useParams } from 'react-router-dom';
import { confirmAlert } from 'react-confirm-alert'; // Import
import { useCookies } from "react-cookie";
import InputRange from 'react-input-range';
import 'react-input-range/lib/css/index.css';
import tick_ko from "../mysy_img/tick_KO.png";
import { SelectChangeEvent } from '@mui/material/Select';
import Chip from '@mui/material/Chip';
import Select, { StylesConfig } from 'react-select';
import img_header from "../mysy_img2/img_header.png"
import mysy_logo2 from "../mysy_img2/Logo_MySy.png"
import { AiTwotoneFolder } from "react-icons/ai";
import serv_img_market_digi from "../mysy_img/market_digi.jpg";
import serv_img_gestion_admin from "../mysy_img/gestion_admin_2.jpg";
import serv_img_publication from "../mysy_img/publication.jpg";
import mysy_search from "../mysy_img2/mysy_search.jpg";
import mysy_lms from "../mysy_img2/mysy_e_learning.jpg";
import mysy_consulting from "../mysy_img2/mysy_consulting.jpg";
import mysy_datacenter from "../mysy_img2/mysy_datacenter.png";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import Module_Connexion_Intranet_Client from "./Module_Connexion_Intranet_Client";
import Fotter_Intranet_Client_Pub from "./Fotter_Intranet_Client_Pub"
import { CiCircleRemove, CiCircleMinus } from "react-icons/ci";
import Fotter_v3 from "./Fotter_v3";
let PageSize = 10;
const Mon_Intranet_Public = (props) => {
@ -119,8 +72,6 @@ const Mon_Intranet_Public = (props) => {
const inputEl = useRef(null);
const url = process.env.REACT_APP_API_URL + "myclass/api/add_user_account/";
const {
register,
@ -3060,7 +3011,7 @@ const Mon_Intranet_Public = (props) => {
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_2_txt &&
<div style={{
textAlign: "left",
textAlign: "left",
width: '100%',
fontSize: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_2_taille}` + "px",
color: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_2_color}`,

View File

@ -109,11 +109,11 @@ const New_C_Formation_2025 = (props) => {
setisclassimage(res.data.message.img);
var ch_img = "data:image/png;base64," + res.data.message.img;
setclass_img_stored_in_bdd(ch_img);
// console.log(" getClassImage_no_token: setclass_img_stored_in_bdd = ", setclass_img_stored_in_bdd);
// console.log(" getClassImage_no_token: setclass_img_stored_in_bdd = ", setclass_img_stored_in_bdd);
}
else {
// console.log(" In Erreur res.data.status = " + res.data.status);
// console.log(" In Erreur res.data.status = " + res.data.status);
//console.log(" In Erreur res.data.message = " + res.data.message);
setisclassimage("False");
setuserimgclassprofil();
@ -140,7 +140,7 @@ const New_C_Formation_2025 = (props) => {
useEffect(() => {
setmyfilter(props.myfil);
// console.log(" #### useEffect props.formation = ", props.formation);
// console.log(" #### useEffect props.formation = ", props.formation);
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
@ -354,7 +354,7 @@ const New_C_Formation_2025 = (props) => {
{class_img_stored_in_bdd && String(class_img_stored_in_bdd).length > 50 &&
<img src={class_img_stored_in_bdd} alt="Formation" style={styles.image} />
}
}
{(!class_img_stored_in_bdd || String(class_img_stored_in_bdd).length < 50) &&
(!props.formation.img_url || String(props.formation.img_url).length <= 10) &&
@ -415,7 +415,7 @@ const New_C_Formation_2025 = (props) => {
</div>}
{(!class_img_stored_in_bdd || String(class_img_stored_in_bdd).length < 50) && String(ismetiermanaged) === "1" &&
<div>
<div>
<img src={props.formation.img_url} alt="autre" style={styles.image} />
{/*props.formation.institut_formation && <div style={{ width: '100%', "textAlign": "center" }}> Dispensé par : <br />
{String(props.formation.institut_formation)} </div>*/}
@ -432,7 +432,19 @@ const New_C_Formation_2025 = (props) => {
</div>
<h3 className="formation_titre">{String(parse(String(props.formation.title).replace(/(<([^>]+)>)/ig, ''))).substring(0, 50)}</h3>
<p className="formation_prix">{props.formation.price} HT&nbsp;</p>
{props.formation.discounted_price && props.formation.business_prices && <p className="formation_prix">{props.formation.discounted_price} HT&nbsp; 111</p>}
{props.formation.business_prices.length <= 0
&& <p className="formation_prix">{props.formation.price} HT&nbsp;22 </p>}
{props.formation.business_prices && props.formation.business_prices.length > 0 &&
<p style={{ width: '100%', float: 'left' }}>
<p className="formation_prix" style={{ width: '100%', float: 'left' }}>{props.formation.business_prices[0].discounted_price} HT&nbsp;
<font className='training_price_barre' style={{ fontSize:'14px' }}> {props.formation.price} HT &nbsp;</font>
<font className='discount_block' style={{ fontSize:'14px' }}> ({props.formation.business_prices[0].discount} %) </font></p>
</p>}
<p className="formation_description"> {String(parse(String(props.formation.description).replace(/(<([^>]+)>)/ig, ''))).substring(0, 80)}...</p>
</div>
@ -619,7 +631,7 @@ const New_C_Formation_2025 = (props) => {
</nav>
</div>
}
</div>
<div className="div_row row_formation_desc">

View File

@ -1,38 +1,21 @@
import React, { useState, useEffect } from "react";
import { useForm } from "react-hook-form";
import { useHistory } from "react-router-dom";
import { Button, FormGroup, Label, Input } from "reactstrap";
import { FacebookLoginButton, GoogleLoginButton } from "react-social-login-buttons";
//import { getCookie, setCookie, removeCookie } from 'react-use-cookie';
import { Helmet } from "react-helmet";
import { useCookies } from "react-cookie";
import { confirmAlert } from 'react-confirm-alert'; // Import
import { Button, } from "reactstrap";
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import bannerimg2 from "../mysy_img/MYSY-LOGO-BLUE.png";
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import axios from "axios";
import { useParams } from 'react-router-dom'
import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png";
import Footer from "./Fotter";
import MenuItem from "@material-ui/core/MenuItem";
import Button2 from "@material-ui/core/Button";
import Menu from "@material-ui/core/Menu";
import Header from "./Header";
import { useLocation } from "react-router-dom";
import { AiOutlineEdit, AiOutlinePlusCircle, AiTwotoneDelete } from "react-icons/ai";
import { getCookie } from 'react-use-cookie';
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import Box from '@mui/material/Box';
import InputLabel from '@mui/material/InputLabel';
import InputAdornment from '@mui/material/InputAdornment';
import FormControl from '@mui/material/FormControl';
import TextField from '@mui/material/TextField';
import AccountCircle from '@mui/icons-material/AccountCircle';
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import moment from "moment";
import { set } from "date-fns";
function Pricing() {
@ -50,7 +33,7 @@ function Pricing() {
{ field: 'price_line_id', headerName: '_id', hide: true },
{ field: 'client', headerName: 'Client', width: 150, flex: 1 },
{ field: 'client_recid', headerName: 'Client Id', width: 150, hide: true },
{ field: 'discount', headerName: 'Réduction (%)', width: 100, flex: 1 },
{ field: 'discount', headerName: 'Réduction (%)', width: 100, flex: 1 },
{ field: 'date_debut', headerName: 'Date début', width: 150, flex: 1 },
{ field: 'date_fin', headerName: 'Date Fin', width: 150, flex: 1 },
@ -328,14 +311,14 @@ function Pricing() {
if (document.getElementsByName("new_sessiondatedebut") && document.getElementsByName("new_sessiondatedebut")[0]) {
document.getElementsByName("new_sessiondatedebut")[0].disabled = true;
document.getElementsByName("new_sessiondatedebut")[0].style.backgroundColor = "#ECEFF1";
document.getElementsByName("new_sessiondatedebut")[0].style.backgroundColor = "#ECEFF1";
}
if (document.getElementById("new_sessiondatefin")) {
document.getElementById("new_sessiondatefin").disabled = true;
document.getElementById("new_sessiondatefin").style.backgroundColor = "#ECEFF1";
}
}
@ -395,6 +378,11 @@ function Pricing() {
GetClientPrices();
GetClientlinked();
GetClientClass();
window.scrollTo({
top: 0,
behavior: "smooth",
});
}, []);
let [sessionStatus, setsessionStatus] = useState(false);
@ -828,8 +816,8 @@ function Pricing() {
{String(iseditclientprice) === "1" && <div>
Modification du prix
&nbsp;
<Box alignItems="left" sx={{ '& > :not(style)': { m: 1 }, width: '100%', }} onChange={DataUpdated_exist_price}>
&nbsp;
<Box alignItems="left" sx={{ '& > :not(style)': { m: 1 }, width: '100%', }} onChange={DataUpdated_exist_price}>
<TextField
required
@ -866,7 +854,7 @@ function Pricing() {
variant="standard"
/>
<div className="div_row">
<div className="div_row_gauche">
@ -951,8 +939,8 @@ function Pricing() {
{String(isaddprice) === "1" && <div>
Creation d'un nouveau prix client
&nbsp;
<Box alignItems="left" sx={{ '& > :not(style)': { m: 1 }, width: '100%', }} onChange={DataUpdated}>
&nbsp;
<Box alignItems="left" sx={{ '& > :not(style)': { m: 1 }, width: '100%', }} onChange={DataUpdated}>
<div className="div_row">
<div className="div_row_gauche">
@ -998,7 +986,7 @@ function Pricing() {
</div>
</div>
<div className="div_row">
<div className="div_row_gauche">

View File

@ -0,0 +1,552 @@
import React, { useState, useEffect } from "react";
import UpdateUserInfo from "../components/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 "../components/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";
function Student_Account() {
const [menu, setmenu] = useState("mes_stagiaires");
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("/Connexion");
}
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("/Connexion");
}
}
function logout() {
confirmAlert({
title: 'Deconnexion ?',
message: 'Confirmez la deconnexion',
buttons: [
{
label: 'Oui',
onClick: () => logout_confirmation()
},
{
label: 'Non',
onClick: () => { return }
}
]
});
}
const displayHistory = () => {
setmenu("recherche");
};
const displayProfil_Objectif = () => {
setmenu("profil_objectif");
};
const displayProfil_Facture = () => {
setmenu("mes_factures");
};
const displayProfil_Devis = () => {
setmenu("mes_devis");
};
const displayProfil_Convention = () => {
setmenu("mes_conventions");
};
const displayProfil_Convocation = () => {
setmenu("mes_convocations");
};
const displayProfil_Attestation = () => {
setmenu("mes_attestations");
};
const displayProfil_Stagiaires = () => {
setmenu("mes_stagiaires");
};
const displayProfil_Tout_Documents = () => {
setmenu("tout_documents");
};
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).migrated &&
String(JSON.parse(res.data.message).migrated) === String("1")) {
setmigratedaccount(String(JSON.parse(res.data.message).migrated));
}
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 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 > 100000) {
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");
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">
<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={displayProfil_Objectif}> MES FORMATIONS</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Objectif}> 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 && <h1 style={{ textAlign: 'center' }}> ESPACE ENT - {connected_user_data.type} </h1>}
{String(menu) === String("affichage") && <UpdateUserInfo />}
{String(menu) === String("recherche") && <UserHistoryRecherche />}
{String(menu) === String("upgradecompte") && <UpgradeToPro />}
{String(menu) === String("profil_objectif") && <Profil_Objectif />}
{String(menu) === String("mes_factures") && connected_user_data && connected_user_data.partner_owner_recid &&
connected_user_data.partner_client_id &&
<Intranet_Factures_Client partner_client_id={connected_user_data.partner_client_id}
partner_owner_recid={connected_user_data.partner_owner_recid}
my_title={"MES DEVIS"}
type_document={"devis"}
type_user_connected={"user_account"}
filter_all_document={"0"}
/>}
{String(menu) === String("modules_mes_documents") && connected_user_data && connected_user_data.partner_owner_recid &&
connected_user_data.partner_client_id &&
<Modules_Mes_Documents
partner_client_id={connected_user_data.partner_client_id}
partner_owner_recid={""}
my_title={"Gestion Documentaire"}
type_user_connected={"user_account"}
type_document={"all"}
/>}
{String(menu) === String("mes_devis") && connected_user_data && connected_user_data.partner_owner_recid &&
connected_user_data.partner_client_id &&
<Modules_Mes_Documents
partner_client_id={connected_user_data.partner_client_id}
partner_owner_recid={""}
my_title={"MES DEVIS"}
type_document={"devis"}
type_user_connected={"user_account"}
filter_all_document={"0"}
/>}
{String(menu) === String("mes_conventions") && connected_user_data && connected_user_data.partner_owner_recid &&
connected_user_data.partner_client_id &&
<Modules_Mes_Documents partner_client_id={connected_user_data.partner_client_id}
partner_owner_recid={""}
my_title={"MES CONVENTIONS"}
type_document={"convention"}
type_user_connected={"user_account"}
filter_all_document={"0"}
/>}
{String(menu) === String("mes_convocations") && connected_user_data && connected_user_data.partner_owner_recid &&
connected_user_data.partner_client_id &&
<Modules_Mes_Documents partner_client_id={connected_user_data.partner_client_id}
partner_owner_recid={""}
my_title={"MES CONVOCATIONS"}
type_document={"convocation"}
type_user_connected={"user_account"}
filter_all_document={"0"}
/>}
{String(menu) === String("mes_attestations") && connected_user_data && connected_user_data.partner_owner_recid &&
connected_user_data.partner_client_id &&
<Modules_Mes_Documents partner_client_id={connected_user_data.partner_client_id}
partner_owner_recid={""}
my_title={"MES ATTESTATIONS"}
type_document={"attestation"}
type_user_connected={"user_account"}
filter_all_document={"0"}
/>}
{String(menu) === String("mes_stagiaires") && connected_user_data && connected_user_data.partner_owner_recid &&
connected_user_data.partner_client_id &&
<Intranet_Mes_Stagiaires partner_client_id={connected_user_data.partner_client_id}
partner_owner_recid={connected_user_data.partner_owner_recid}
/>}
{String(menu) === String("mes_documents") && <Profil_Objectif />}
</div>
</div>
</div>
</div>
);
}
export default Student_Account;

View File

@ -1459,10 +1459,12 @@ const New_C_Detail_Formation_2025 = (props) => {
{String(DetailTraining["price"]) && String(DetailTraining["price"]) !== String("0") && DetailTraining.business_prices && Object.keys(DetailTraining.business_prices).length > 0
&& DetailTraining["price"] && <div className="mob_price_2025">
<nav className="discounted_price">{String(DetailTraining.business_prices[0].discounted_price)} HT</nav>
<nav className="discounted_price" style={{ textAlign: 'center' }}>{String(DetailTraining.business_prices[0].discounted_price)} HT </nav>
<nav className="training_price_barre"> {String(DetailTraining["price"])} HT </nav>
<nav className="discount_block"> (- {String(DetailTraining.business_prices[0].discount)} % ) </nav>
{DetailTraining.business_prices && DetailTraining.business_prices.length > 0 && <div style={{ width: '100%', float: 'left', marginLeft: '3rem' }}>
<nav className="training_price_barre" style={{ with: '50%', float: 'left', fontSize: '14px' }}> {String(DetailTraining["price"])} HT </nav>
<nav className="discount_block" style={{ with: '50%', float: 'left', fontSize: '14px' }}> (- {String(DetailTraining.business_prices[0].discount)} % ) </nav>
</div>}
</div>}
</div>
@ -1734,7 +1736,7 @@ const New_C_Detail_Formation_2025 = (props) => {
{(JSON.parse(formation).date_fin).substring(0, 10)} <b>A Distance </b> </nav>
}
{(JSON.parse(formation).mode_animation) === "1" &&
{(JSON.parse(formation).mode_animation) === "1" &&
(JSON.parse(formation).date_debut).substring(0, 10) === (JSON.parse(formation).date_fin).substring(0, 10) &&
<nav>
Le &nbsp;
@ -1742,7 +1744,7 @@ const New_C_Detail_Formation_2025 = (props) => {
}
{(JSON.parse(formation).mode_animation) === "0" &&
{(JSON.parse(formation).mode_animation) === "0" &&
(JSON.parse(formation).date_debut).substring(0, 10) !== (JSON.parse(formation).date_fin).substring(0, 10) &&
<nav>
{(JSON.parse(formation).date_debut).substring(0, 10)}&nbsp; au&nbsp;{(JSON.parse(formation).date_fin).substring(0, 10)} <b>En Présentiel </b> -
@ -2070,8 +2072,8 @@ const New_C_Detail_Formation_2025 = (props) => {
<div style={{ width: '100%', float: 'left', background: "#F4F4FB" }}>
<div style={{ width: '90%', maxWidth: '1400px', marginLeft: 'auto', marginRight: 'auto' }}>
<div style={{ width: '70%', float: 'left', "paddingLeft": "2rem", paddingRight: '2rem' }} ref={myRef_informe} id="myRef_informe">
<div className="block_central" >
<div className="block_central_gauche" ref={myRef_informe} id="myRef_informe">
{String(inscritpion) === "1" && <div className="description detail_element">
<Inscription internal_url={DetailTraining["internal_url"]} action="inscription"
@ -2150,7 +2152,7 @@ const New_C_Detail_Formation_2025 = (props) => {
{(JSON.parse(formation).mode_animation) === "2" &&
(JSON.parse(formation).date_debut).substring(0, 10) === (JSON.parse(formation).date_fin).substring(0, 10) &&
<nav>
Le &nbsp; {(JSON.parse(formation).date_debut).substring(0, 10)}&nbsp;
Le &nbsp; {(JSON.parse(formation).date_debut).substring(0, 10)}&nbsp;
<Tooltip className="tooltip_css" id="anim_hybride" style={{ "fontSize": "10px" }} />
<a data-tooltip-id="anim_hybride" data-tooltip-html="Une partie en présentiel et une partie à distance"> <b> Animation Hybride <FcInfo /> </b> </a>
- {(JSON.parse(formation).adresse)} &nbsp;{(JSON.parse(formation).code_postal)}
@ -2181,10 +2183,10 @@ const New_C_Detail_Formation_2025 = (props) => {
{(JSON.parse(formation).adresse)} &nbsp;{(JSON.parse(formation).code_postal)}
</nav>}
{(JSON.parse(formation).mode_animation) === "0" &&
{(JSON.parse(formation).mode_animation) === "0" &&
(JSON.parse(formation).date_debut).substring(0, 10) === (JSON.parse(formation).date_fin).substring(0, 10) &&
<nav>
Le &nbsp; {(JSON.parse(formation).date_debut).substring(0, 10)}&nbsp; <b>En Présentiel </b> -
Le &nbsp; {(JSON.parse(formation).date_debut).substring(0, 10)}&nbsp; <b>En Présentiel </b> -
{(JSON.parse(formation).adresse)} &nbsp;{(JSON.parse(formation).code_postal)}
</nav>}
@ -2405,13 +2407,16 @@ const New_C_Detail_Formation_2025 = (props) => {
&& DetailTraining["price"] &&
<div className="block_prix_2025">
<div className="block_sticky_info_price">
<nav className="discounted_price">{String(DetailTraining.business_prices[0].discounted_price)} HT</nav>
<nav className="training_price_barre"> {String(DetailTraining["price"])} HT </nav>
<nav className="discount_block"> (- {String(DetailTraining.business_prices[0].discount)} % ) </nav>
<nav className="discounted_price">{String(DetailTraining.business_prices[0].discounted_price)} HT </nav>
</div>
<div className="tag_eligle_cpf">Eligle CFP
</div>
{DetailTraining.business_prices && DetailTraining.business_prices.length > 0 && <div style={{ width: '100%', float: 'left' }}>
<nav className="training_price_barre" style={{ with: '50%', float: 'left', fontSize: '14px' }}> {String(DetailTraining["price"])} HT </nav>
<nav className="discount_block" style={{ with: '50%', float: 'left', fontSize: '14px' }}> (- {String(DetailTraining.business_prices[0].discount)} % ) </nav>
</div>}
</div>}
<div className="block_sticky_info_caracteristique">

View File

@ -1,5 +1,20 @@
.new_detail_formation_2025 {
.block_central {
width: 90%;
max-width: 1400px;
margin-left: auto;
margin-right: auto;
}
.block_central_gauche {
width: 70%;
float: left;
padding-left: 10px;
padding-right: 10px;
}
* h6 {
font-size: small;
}
@ -95,7 +110,7 @@
}
.mob_price_2025 {
width: 50%;
width: 100%;
float: left;
height: 24px;
@ -1579,7 +1594,7 @@
.discounted_price {
font-weight: 600;
font-size: 20px;
font-size: 18px;
color: #ff8c00;
}
@ -3711,7 +3726,7 @@
.discounted_price {
font-weight: 600;
font-size: 20px;
font-size: 18px;
color: #ff8c00;
}
@ -5896,7 +5911,7 @@
.discounted_price {
font-weight: 600;
font-size: 20px;
font-size: 18px;
color: #ff8c00;
}

View File

@ -0,0 +1,14 @@
import Ent_Intranet from "../components/Ent_Intranet"
const mon_ent_student = () => {
return (
<div>
<Ent_Intranet />
</div>
)
}
export default mon_ent_student;

View File

@ -1,19 +1,12 @@
import Mon_Intranet_Public from "../components/Mon_Intranet_Public"
import Navigation from "../components/Navigation";
import Footer from "./footer";
const mon_intranet_public = () => {
return (
<div>
<div>
<Mon_Intranet_Public />
</div>
<Mon_Intranet_Public />
</div>
)
}

View File

@ -0,0 +1,21 @@
import Navigation from "../components/Navigation";
import Ent_Intranet from "./../components/Ent_Intranet";
import New_C_Header_2025_V2 from "../components/header_automatic_files/Header";
import New_C_Footer_Without_Testimony_2025_V2 from "../components/footer_automatic_files/Layout_Without_Testimony";
import New_Navigation_2025 from "../components/New_Navigation_2025";
import Student_Account from "./../components/Student_Account";
const student_account = () => {
return (
<div>
<New_Navigation_2025 />
<New_C_Header_2025_V2 />
<Student_Account />
<New_C_Footer_Without_Testimony_2025_V2 />
</div>
)
}
export default student_account;

View File

@ -3,12 +3,12 @@
.tooltip_css {
background: #81BC3A;
z-index: 9999;
font-family: "DM Sans", "sans-serif";
font-size:"13px";
}
font-family: "DM Sans", "sans-serif";
font-size: "13px";
}
.Mui-disabled {
font-family:'DM Sans','Sans-serif';
font-family: 'DM Sans', 'Sans-serif';
font-size: small !important;
padding: 0px !important;
padding-left: 5px !important;
@ -152,7 +152,7 @@
}
.css-1t8l2tu-MuiInputBase-input-MuiOutlinedInput-input .Mui-disabled {
font-family:'DM Sans','Sans-serif';
font-family: 'DM Sans', 'Sans-serif';
font: inherit;
letter-spacing: inherit;
color: currentColor;
@ -198,7 +198,7 @@
}
.session_caract {
font-family: DM Sans;
font-family: DM Sans;
width: 100%;
padding: 5px;
float: left;
@ -277,7 +277,7 @@
}
.bton_enreg {
font-family: DM sans;
font-family: DM sans;
border-radius: 5rem;
font-size: small;
background: #81BC3A !important;
@ -495,7 +495,7 @@
}
.bton_enreg {
font-family: DM sans;
font-family: DM sans;
border-radius: 5rem;
font-size: small;
background: #81BC3A !important;
@ -555,7 +555,7 @@
}
.css-1t8l2tu-MuiInputBase-input-MuiOutlinedInput-input .Mui-disabled {
font-family:'DM Sans','Sans-serif';
font-family: 'DM Sans', 'Sans-serif';
font: inherit;
letter-spacing: inherit;
color: currentColor;
@ -718,7 +718,7 @@
}
.css-1t8l2tu-MuiInputBase-input-MuiOutlinedInput-input .Mui-disabled {
font-family:'DM Sans','Sans-serif';
font-family: 'DM Sans', 'Sans-serif';
font: inherit;
letter-spacing: inherit;
color: currentColor;
@ -764,7 +764,7 @@
}
.session_caract {
font-family: DM Sans;
font-family: DM Sans;
width: 50%;
padding: 5px;
float: left;
@ -850,7 +850,7 @@
}
.bton_enreg {
font-family: DM sans;
font-family: DM sans;
border-radius: 5rem;
font-size: small;
background: #81BC3A !important;
@ -1055,7 +1055,7 @@
border-radius: 1rem;
text-align: right;
}
.bton_suppr {
background: transparent;
@ -1071,7 +1071,7 @@
}
.bton_enreg {
font-family: DM sans;
font-family: DM sans;
border-radius: 5rem;
font-size: small;
background: #81BC3A !important;
@ -1124,7 +1124,7 @@
}
.css-1t8l2tu-MuiInputBase-input-MuiOutlinedInput-input .Mui-disabled {
font-family:'DM Sans','Sans-serif';
font-family: 'DM Sans', 'Sans-serif';
font: inherit;
letter-spacing: inherit;
color: currentColor;
@ -1332,7 +1332,7 @@
}
.css-1t8l2tu-MuiInputBase-input-MuiOutlinedInput-input .Mui-disabled {
font-family:'DM Sans','Sans-serif';
font-family: 'DM Sans', 'Sans-serif';
font: inherit;
letter-spacing: inherit;
color: currentColor;
@ -1378,7 +1378,7 @@
}
.session_caract {
font-family: DM Sans;
font-family: DM Sans;
width: 33%;
padding: 5px;
float: left;
@ -1463,7 +1463,7 @@
}
.bton_enreg {
font-family: DM sans;
font-family: DM sans;
border-radius: 5rem;
font-size: small;
background: #81BC3A !important;
@ -1632,7 +1632,7 @@
text-align: center;
margin-bottom: 0.8rem;
color: white;
cursor: pointer;
cursor: normal;
font-style: italic;
background-color: gray;
font-weight: normal;
@ -1814,7 +1814,7 @@
}
.css-1t8l2tu-MuiInputBase-input-MuiOutlinedInput-input .Mui-disabled {
font-family:'DM Sans','Sans-serif';
font-family: 'DM Sans', 'Sans-serif';
font: inherit;
letter-spacing: inherit;
color: currentColor;
@ -1860,7 +1860,7 @@
}
.session_caract {
font-family: DM Sans;
font-family: DM Sans;
width: 33%;
padding: 5px;
float: left;
@ -2030,7 +2030,7 @@
}
.bton_enreg {
font-family: DM sans;
font-family: DM sans;
border-radius: 5rem;
font-size: small;
background: #81BC3A !important;
@ -2200,7 +2200,7 @@
text-align: center;
margin-bottom: 0.8rem;
color: white;
cursor: pointer;
cursor: normal;
font-style: italic;
background-color: gray;
font-weight: normal;
@ -2213,7 +2213,7 @@
text-align: center;
}
.css-l4u8b9-MuiInputBase-root-MuiInput-root{
.css-l4u8b9-MuiInputBase-root-MuiInput-root {
text-align: left !important;
}
@ -2280,7 +2280,7 @@
}
.css-9ddj71-MuiInputBase-root-MuiOutlinedInput-root {
font-family: DM Sans !important;
font-family: DM Sans !important;
height: 3.5rem !important;
}

View File

@ -664,7 +664,7 @@
.discounted_price {
font-weight: 600;
font-size: 18px;
font-size: 16px;
color: #ff8c00;
}
@ -1089,7 +1089,7 @@
.discounted_price {
font-weight: 600;
font-size: 20px;
font-size: 18px;
color: #ff8c00;
}
@ -1223,7 +1223,7 @@
}
.formation_titre {
height: 29px;
height: 40px;
font-style: normal;
font-weight: 600;
font-size: 13px;
@ -2485,7 +2485,7 @@
}
.formation_titre {
height: 19px;
height: 29px;
font-style: normal;
font-weight: 600;
font-size: 13px;
@ -2500,7 +2500,7 @@
margin-bottom: 1px;
font-family: DM Sans;
}
}
.formation_prix {
/* 1680€ HT */