Compare commits

...

No commits in common. "main" and "branche_01062025" have entirely different histories.

226 changed files with 34193 additions and 6005 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";
@ -151,17 +145,16 @@ function App() {
<scrollToTop />
<Switch>
<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 +177,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 +274,7 @@ function App() {
<Route path="/DeleteUserAccount/:token" exact component={DeleteUserAccount} />
<Route path="/mysy-student-account" exact component={Student_Account} />
{/* Fin Migration */}

View File

@ -934,8 +934,8 @@ function Abonnement(props) {
setnew_nb_formations(event.target.value);
// document.getElementById('div_nb_formation').style.color = "#104277";
//document.getElementById('div_ttc').style.color = "#104277";
// document.getElementById('div_nb_formation').style.color = "#107758";
//document.getElementById('div_ttc').style.color = "#107758";
}

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 />}

File diff suppressed because it is too large Load Diff

View File

@ -228,7 +228,7 @@ const AddParnerClient = (props) => {
}
if (document.getElementsByName(String(current_menu_header)) && document.getElementsByName(String(current_menu_header))[0]) {
document.getElementsByName(String(current_menu_header))[0].style.background = "#104277";
document.getElementsByName(String(current_menu_header))[0].style.background = "#107758";
document.getElementsByName(String(current_menu_header))[0].style.color = "white";
}
@ -409,16 +409,16 @@ const AddParnerClient = (props) => {
if (String(submenu) === "submenu_donnee_client") {
document.getElementById("submenu_donnee_client").style.background = "#104277";
document.getElementById("submenu_donnee_client").style.background = "#107758";
document.getElementById("submenu_donnee_client").style.color = "white";
}
else if (String(submenu) === "submenu_donnees_facturation") {
document.getElementById("submenu_donnee_facturation").style.background = "#104277";
document.getElementById("submenu_donnee_facturation").style.background = "#107758";
document.getElementById("submenu_donnee_facturation").style.color = "white";
}
else if (String(submenu) === "submenu_piece_jointe") {
document.getElementById("submenu_piece_jointe").style.background = "#104277";
document.getElementById("submenu_piece_jointe").style.background = "#107758";
document.getElementById("submenu_piece_jointe").style.color = "white";
}

File diff suppressed because it is too large Load Diff

View File

@ -63,7 +63,7 @@ const Article = (props) => {
<Button variant="contained" color="success"
style={{
'borderRadius': "10rem", "width": "100%",
"width": "60% !important", background: "#104277"
"width": "60% !important", background: "#107758"
}}
onClick={(e) => {
e.preventDefault();

View File

@ -485,7 +485,7 @@ const ButtonHilight = () => {
className="displaypartnersession"
>
<DialogTitle>Contactez Nous</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Contactez Nous</DialogTitle>
<DialogContent className="DialogContent_width">
@ -625,7 +625,7 @@ const ButtonHilight = () => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
Confirmez la deconnexion

View File

@ -1166,8 +1166,8 @@ function CheckOut(props) {
setnb_formations(event.target.value);
}
document.getElementById('div_nb_formation').style.color = "#104277";
document.getElementById('div_ttc').style.color = "#104277";
document.getElementById('div_nb_formation').style.color = "#107758";
document.getElementById('div_ttc').style.color = "#107758";
}

File diff suppressed because it is too large Load Diff

View File

@ -2256,7 +2256,7 @@ const Config_Documents = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}

View File

@ -2158,7 +2158,7 @@ const Config_Documents_Super_Admin = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}
@ -2178,7 +2178,7 @@ const Config_Documents_Super_Admin = (props) => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<div className="session_caract_Dialog" > Type Document

View File

@ -1665,7 +1665,7 @@ const CRM_Opportunite = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}

View File

@ -1227,7 +1227,7 @@ const DisplayDetailClass_new_v3 = (props) => {
className="displaypartnersession"
>
<DialogTitle>Contactez Nous</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Contactez Nous</DialogTitle>
<DialogContent className="DialogContent_width">

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,12 @@
import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
@ -14,23 +14,20 @@ import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
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 Popup from 'reactjs-popup';
import { FcInfo } from "react-icons/fc";
import Autocomplete from '@mui/material/Autocomplete';
import 'reactjs-popup/dist/index.css';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint } from "react-icons/fc";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box';
import { Typography, LinearProgress, sliderClasses } from '@mui/material';
import styled from 'styled-components';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
import Dialog from '@mui/material/Dialog';
@ -789,6 +786,24 @@ const DisplayPartnerUnite_Enseignement = (props) => {
setVal([]);
}
if (local_ue.list_competence_code) {
setp_detail_list_competence_code(local_ue.list_competence_code);
} else {
setp_detail_list_competence_code("");
}
if (local_ue.tab_competence_JSON) {
setVal(local_ue.tab_competence_JSON);
} else {
setp_detail_tab_competence([]);
setVal([]);
}
if (local_ue.note_ue_calculation_rule_id) {
setp_detail_note_ue_calculation_rule_id(local_ue.note_ue_calculation_rule_id);
} else {
@ -918,6 +933,8 @@ const DisplayPartnerUnite_Enseignement = (props) => {
Getall_Parter_Unite_Enseignement();
Getall_Partner_Competence_List();
if (document.getElementById('myRef_head')) {
var divh = document.getElementById('myRef_head').offsetTop;
window.scrollTo({
@ -984,7 +1001,15 @@ const DisplayPartnerUnite_Enseignement = (props) => {
form.append("note_ue_calculation_rule_id", p_detail_note_ue_calculation_rule_id);
form.append("niveau_competence", val);
var tab_competence_id = []
for (var i = 0; i < val.length; i++) {
tab_competence_id.push(val[i]._id)
}
form.append("niveau_competence", tab_competence_id);
console.log(" ### val = ", val);
console.log(" ### tab_competence_id = ", tab_competence_id);
var description = "";
@ -992,7 +1017,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
description = editorRef_description.current.getContent();
if (parse(description.replace(/(<([^>]+)>)/ig, '')).length > editorRef_description_limite) {
alert(" Champ 'Description', limite depassée !")
setdisplay_alert_mysy("1");
setalert_message(" Champ 'Description', limite depassée !");
setalert_type("error");
return;
}
}
@ -1004,7 +1032,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
objectif = editorRef_objectif.current.getContent();
if (parse(objectif.replace(/(<([^>]+)>)/ig, '')).length > editorRef_objectif_limite) {
alert(" Champ 'Objectif', limite depassée !")
setdisplay_alert_mysy("1");
setalert_message(" Champ 'Objectif', limite depassée !");
setalert_type("error");
return;
}
}
@ -1016,7 +1047,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
prerequis = editorRef_prerequis.current.getContent();
if (parse(prerequis.replace(/(<([^>]+)>)/ig, '')).length > editorRef_prerequis_limite) {
alert(" Champ 'Pré-requis', limite depassée !")
setdisplay_alert_mysy("1");
setalert_message(" Champ 'Pré-requis', limite depassée !");
setalert_type("error");
return;
}
}
@ -1028,7 +1062,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
programme = editorRef_programme.current.getContent();
if (parse(programme.replace(/(<([^>]+)>)/ig, '')).length > editorRef_prerequis_limite) {
alert(" Champ 'Programme', limite depassée !")
setdisplay_alert_mysy("1");
setalert_message(" Champ 'Programme', limite depassée !");
setalert_type("error");
return;
}
}
@ -1041,7 +1078,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
methode_eval = editorRef_methode_eval.current.getContent();
if (parse(methode_eval.replace(/(<([^>]+)>)/ig, '')).length > editorRef_methode_eval_limite) {
alert(" Champ 'Suivi & Evaluation', limite depassée !")
setdisplay_alert_mysy("1");
setalert_message(" Champ 'Suivi & Evaluation', limite depassée !");
setalert_type("error");
return;
}
}
@ -1054,7 +1094,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
methode_pedago = editorRef_methode_pedago.current.getContent();
if (parse(methode_pedago.replace(/(<([^>]+)>)/ig, '')).length > editorRef_methode_eval_limite) {
alert(" Champ 'Méhode Pédagogique', limite depassée !")
setdisplay_alert_mysy("1");
setalert_message("Champ 'Méhode Pédagogique', limite depassée !");
setalert_type("error");
return;
}
}
@ -1153,6 +1196,8 @@ const DisplayPartnerUnite_Enseignement = (props) => {
const [p_detail_domaine, setp_detail_domaine] = useState("");
const [p_detail_list_competence_code, setp_detail_list_competence_code] = useState("");
const [p_detail_support, setp_detail_support] = useState("");
const [p_detail_duration, setp_detail_duration] = useState("");
@ -1345,6 +1390,88 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
const [New_Get_List_Competence_result, setNew_Get_List_Competence_result] = useState([]);
const [Get_List_Competence_api, setGet_List_Competence_api] = useState();
const [Get_List_Competence_message, setGet_List_Competence_message] = useState();
const [Get_List_Competence_result, setGet_List_Competence_result] = useState();
function Get_List_Competence() {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Competence_no_filter/";
fetch(myurl,
{
method: 'POST',
body: form,
})
.then((data) => data.json())
.then((data) => {
//console.log(' IN Get_List_Competence Success:', data['message'], "data['status'] = ", data['status']);
if (String(data['status']) === String("true")) {
setGet_List_Competence_api("true");
setGet_List_Competence_result(data['message']);
var new_data2 = [];
const new_data = data['message'].map((x) => {
//---
var localid = JSON.parse(x).id;
var local_id = JSON.parse(x)._id;
var local_code = JSON.parse(x).code;
var local_nom = JSON.parse(x).nom;
//---
var node = {
"id": localid,
"_id": local_id,
"nom": local_nom,
"code": local_code,
"label": local_nom,
};
new_data2.push(node);
});
var node = {
"id": "",
"_id": "",
"nom": "",
"code": "",
"label": "",
};
new_data2.push(node);
if (new_data2.length > 0) {
setNew_Get_List_Competence_result(new_data2);
// console.log(" ## new_data2 = ", new_data2);
// console.log(" ## New_Get_List_Competence_result = ", New_Get_List_Competence_result);
} else {
setNew_Get_List_Competence_result([])
}
}
else {
setGet_List_Competence_api("false");
setGet_List_Competence_message(data['message']);
}
}).catch((error) => {
console.error('Error Get_List_Competence :', error);
setGet_List_Competence_api("false");
});
}
const [New_Get_List_Regle_Calcul_Note_UE_result, setNew_Get_List_Regle_Calcul_Note_UE_result] = useState([]);
const [Get_List_Regle_Calcul_Note_UE_api, setGet_List_Regle_Calcul_Note_UE_api] = useState();
@ -1552,7 +1679,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}
@ -1806,6 +1933,87 @@ const DisplayPartnerUnite_Enseignement = (props) => {
/**** fin gestion fichier csv a importer */
const [New_Getall_Partner_Competence_List_result, setNew_Getall_Partner_Competence_List_result] = useState([]);
const [Getall_Partner_Competence_List_api, setGetall_Partner_Competence_List_api] = useState();
const [Getall_Partner_Competence_List_message, setGetall_Partner_Competence_List_message] = useState();
const [Getall_Partner_Competence_List_result, setGetall_Partner_Competence_List_result] = useState([]);
function Getall_Partner_Competence_List(event) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Competence_no_filter/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Getall_Partner_Competence_List res.data.status = " + res.data.status);
// console.log(" In Getall_Partner_Competence_List res.data.message r_class = " + res.data.message);
setGetall_Partner_Competence_List_api("true");
setGetall_Partner_Competence_List_result(res.data.message);
var new_data2 = [];
const new_data = res.data.message.map((x) => {
//---
var localid = JSON.parse(x).id;
var local_id = JSON.parse(x)._id;
var local_description = JSON.parse(x).description;
var local_code = JSON.parse(x).code;
//---
var node = {
"_id": local_id,
"id": localid,
"label": local_code,
"code": local_code,
"description": local_description,
};
new_data2.push(node);
});
//---
var node = {
"_id": "",
"id": "",
"label": "",
"code": "",
"description": "",
};
new_data2.push(node);
if (new_data2.length > 0)
setNew_Getall_Partner_Competence_List_result(new_data2);
}
else {
setGetall_Partner_Competence_List_api("false");
setGetall_Partner_Competence_List_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_Partner_Competence_List = ', error);
setGetall_Partner_Competence_List_api("false");
alert(" Impossible de recuperer la liste des compétences ");
//setmyApimyApiMessage("")
})
}
const nivau_competence = [
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
@ -1862,7 +2070,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}
@ -1888,7 +2096,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
>
<DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title">
{String(update_planif_line) !== "1" && "Ajouter une ligne"}
{String(update_planif_line) === "1" && "Mettre à jour une ligne"}
@ -2678,7 +2886,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
</div>}
{ue_data_edit_mode && String(ue_data_edit_mode) === "1" && <div>
<div className="session_caract"> Compétences <br />
<div className="session_caract"> Compétences<br />
<Autocomplete
multiple
onChange={(event, newValue) => {
@ -2686,10 +2894,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
...fixedVal,
...newValue.filter((i) => fixedVal.indexOf(i) === -1),
]);
}}
value={val}
options={nivau_competence}
options={New_Getall_Partner_Competence_List_result}
className="disabled_style"
renderInput={(params) => (
<TextField
@ -2699,7 +2907,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
/>
)}
renderTags={CustomChip}
/>
</div>
@ -2719,7 +2927,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}}
//disabled={true}
className="disabled_style"
value={p_detail_tab_competence}
value={p_detail_list_competence_code}
/>
@ -3861,7 +4069,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}}
value={val}
options={nivau_competence}
options={New_Getall_Partner_Competence_List_result}
className="disabled_style"
renderInput={(params) => (
<TextField

View File

@ -0,0 +1,428 @@
.ent_student_header_automatic_files {
@media only screen and (max-width: 600px) {
position: fixed;
/* margin-top: 22px;*/
width: 100%;
opacity: 1;
background: #FFF;
.header_new_2025 {
border-bottom: 1px solid #dcdcdc;
width: 100%;
padding-left: 50px;
padding-top: 15px;
padding-bottom: 10px;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
margin: 0 auto;
}
.logo-menu {
display: flex;
align-items: center;
gap: 40px;
margin-left: 2rem;
}
.logo {
width: 96px;
height: 32px;
}
.menu-list {
display: none;
}
.menu-link {
display: none;
}
.cta-login {
display: flex;
align-items: center;
gap: 12px;
}
.cta-buttons {
display: flex;
gap: 12px;
}
.hide_on_mobile {
display: none;
}
.btn {
padding: 10px 15px;
border-radius: 200px;
font-family: 'DM Sans', sans-serif;
font-size: 12px;
font-weight: 600;
line-height: 126%;
cursor: pointer;
}
.btn-primary {
background-color: #3e6ee3;
color: #ffffff;
border: none;
}
.btn-secondary {
background-color: transparent;
color: #4b5162;
border: 1px solid #c7c9ce;
}
.separator {
width: 1px;
height: 12px;
background-color: rgba(23, 23, 23, 0.1);
border-radius: 30px;
}
.login-link {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
}
.user-icon {
width: 18px;
height: 18px;
}
.login-link span {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #171717;
line-height: 122%;
}
}
@media only screen and (min-width: 601px) and (max-width: 991px) {
.header_new_2025 {
border-bottom: 1px solid #dcdcdc;
padding: 14px 48px;
width: 100%;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
margin: 0 auto;
}
.logo-menu {
display: flex;
align-items: center;
gap: 10px;
max-width: 60%;
flex-direction: row;
}
.logo {
width: 96px;
height: 32px;
}
.menu-list {
display: flex;
align-items: center;
gap: 14px;
flex-direction: row;
flex-wrap: wrap;
}
.menu-link {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #4b5162;
text-decoration: none;
line-height: 122%;
}
.cta-login {
display: flex;
align-items: center;
gap: 3px;
}
.cta-buttons {
display: flex;
gap: 1px;
}
.btn {
padding: 5px 8px;
border-radius: 200px;
font-family: 'DM Sans', sans-serif;
font-size: 12px;
font-weight: 700;
line-height: 126%;
cursor: pointer;
}
.btn-primary {
background-color: #3e6ee3;
color: #ffffff;
border: none;
}
.btn-secondary {
background-color: transparent;
color: #4b5162;
border: 1px solid #c7c9ce;
}
.separator {
width: 1px;
height: 12px;
background-color: rgba(23, 23, 23, 0.1);
border-radius: 30px;
}
.login-link {
display: flex;
align-items: center;
gap: 2px;
cursor: pointer;
}
.user-icon {
width: 18px;
height: 18px;
}
.login-link span {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #171717;
line-height: 122%;
}
}
@media only screen and (min-width: 992px) and (max-width: 1199px) {
.header_new_2025 {
border-bottom: 1px solid #dcdcdc;
padding: 14px 48px;
width: 100%;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
margin: 0 auto;
}
.logo-menu {
display: flex;
align-items: center;
gap: 10px;
width: 70%;
flex-direction: row;
}
.logo {
width: 96px;
height: 32px;
}
.menu-list {
display: flex;
align-items: center;
gap: 14px;
flex-direction: row;
flex-wrap: wrap;
}
.menu-link {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #4b5162;
text-decoration: none;
line-height: 122%;
}
.cta-login {
display: flex;
align-items: center;
gap: 5px;
}
.cta-buttons {
display: flex;
gap: 5px;
}
.btn {
padding: 3px 10px;
border-radius: 200px;
font-family: 'DM Sans', sans-serif;
font-size: 14px;
font-weight: 700;
line-height: 126%;
cursor: pointer;
}
.btn-primary {
background-color: #3e6ee3;
color: #ffffff;
border: none;
}
.btn-secondary {
background-color: transparent;
color: #4b5162;
border: 1px solid #c7c9ce;
}
.separator {
width: 1px;
height: 5px;
background-color: rgba(23, 23, 23, 0.1);
border-radius: 30px;
}
.login-link {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
}
.user-icon {
width: 18px;
height: 18px;
}
.login-link span {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #171717;
line-height: 122%;
}
}
@media only screen and (min-width: 1200px) {
.header_new_2025 {
border-bottom: 1px solid #dcdcdc;
padding: 14px 48px;
width: 100%;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
margin: 0 auto;
}
.logo-menu {
display: flex;
align-items: center;
gap: 40px;
}
.logo {
width: 96px;
height: 32px;
}
.menu-list {
display: flex;
align-items: center;
gap: 24px;
}
.menu-link {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #4b5162;
text-decoration: none;
line-height: 122%;
}
.cta-login {
display: flex;
align-items: center;
gap: 12px;
}
.cta-buttons {
display: flex;
gap: 12px;
}
.btn {
padding: 12px 24px;
border-radius: 200px;
font-family: 'DM Sans', sans-serif;
font-size: 14px;
font-weight: 700;
line-height: 126%;
cursor: pointer;
}
.btn-primary {
background-color: #3e6ee3;
color: #ffffff;
border: none;
}
.btn-secondary {
background-color: transparent;
color: #4b5162;
border: 1px solid #c7c9ce;
}
.separator {
width: 1px;
height: 12px;
background-color: rgba(23, 23, 23, 0.1);
border-radius: 30px;
}
.login-link {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
}
.user-icon {
width: 18px;
height: 18px;
}
.login-link span {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #171717;
line-height: 122%;
}
}
}

View File

@ -0,0 +1,322 @@
import React, { useState, useEffect } from 'react';
import './ENT_Student_Header.css';
import moment from "moment";
import { getCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import Header_MySy_Logo from '../../img_new_design_2025/header_mysy_logo.png';
import Header_User from '../../img_new_design_2025/header_user.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 Button from '@mui/material/Button';
import { useCookies } from "react-cookie";
import CancelPresentationIcon from '@mui/icons-material/CancelPresentation';
import { makeStyles } from "@material-ui/core/styles";
import Paper from '@material-ui/core/Paper';
import Draggable from 'react-draggable';
import { IconButton } from '@material-ui/core';
function PaperComponent(props) {
return (
<Draggable
handle="#draggable-dialog-title"
cancel={'[class*="MuiDialogContent-root"]'}
>
<Paper {...props} />
</Draggable>
);
}
const useStyles = makeStyles((theme) => ({
dialog: {
position: 'absolute',
// left: 10,
top: 400
},
paper: {
overflowY: 'unset',
},
customizedButton: {
position: 'absolute',
left: '98%',
top: '-3%',
backgroundColor: 'lightgray',
color: 'gray',
},
}));
const ENT_Student_Header = () => {
const history = useHistory();
const classes = useStyles();
const [userconnected, setuserconnected] = useState("0");
const [someoneconnected, setsomeoneconnected] = useState("0");
const [partnerconnected, setpartnerconnected] = useState("0");
const stored_user = getCookie('tokenmysych');
const stored_part = getCookie('tokenmysypart');
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych'], { path: '/' });
const [partcookie, setpartCookie, removepartCookie] = useCookies(['tokenmysypart'], { path: '/' });
const [PartnerMenu, setPartnerMenu] = React.useState(null);
const [AccountMenu, setAccountMenu] = React.useState(null);
const [ProduitMenu, setproduitMenu] = React.useState(null);
useEffect(() => {
var local_user_connect = 0;
var local_part_connect = 0;
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
local_user_connect = 0;
} else {
setuserconnected("1");
setsomeoneconnected("1");
local_user_connect = 1;
//alert(" user connected OK");
}
if (typeof (stored_part) === "undefined" || String(stored_part) === '') {
setpartnerconnected("0");
local_part_connect = 0;
} else {
setpartnerconnected("1");
setsomeoneconnected("1");
local_part_connect = 1;
//alert(" partner connected OK");
}
}, []);
const handleAccountCreation = () => {
setAccountMenu(null);
history.push("/signup/")
};
const handleMyAccount = () => {
setAccountMenu(null);
history.push("/mysy-user-account")
};
const handleAccountConnexion = () => {
setAccountMenu(null);
history.push("/signin/")
};
const handleMyPartnerAccount = () => {
setAccountMenu(null);
history.push("/Partner")
};
function handleAccountConnexion_v2() {
if (String(userconnected) === String("1")) {
handleMyAccount();
}
else if (String(partnerconnected) === String("1")) {
handleMyPartnerAccount();
}
}
const [Dialog_1_open, setDialog_1_open] = React.useState(false);
const Dialog_1_handleClose = () => {
};
const Dialog_1_handleClose_buton = () => {
setDialog_1_open(false);
};
function part_logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_part) != "undefined") {
const stored_cookie = getCookie('tokenmysypart');
var acces_right_token_name = stored_cookie + "_uar";
setpartCookie("tokenmysypart", "", { path: '/' });
setpartCookie(acces_right_token_name, "", { path: '/' });
removeCookie(acces_right_token_name, { path: '/' });
setpartCookie("mysy_session_display_view", "", { path: '/' });
setpartCookie("mysy_menu_gauche_reduit", "", { path: '/' });
setpartCookie("mysy_catalog_data_row_grouped_by", "", { path: '/' });
removeCookie("tokenmysypart", { path: '/' });
removeCookie("mysy_session_display_view", { path: '/' });
removeCookie("mysy_menu_gauche_reduit", { path: '/' });
removeCookie("mysy_catalog_data_row_grouped_by", { path: '/' });
}
setsomeoneconnected("0");
setDialog_1_open(false);
history.push("/recherche-formation");
}
function user_logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_user) != "undefined") {
const stored_cookie = getCookie('tokenmysych');
var acces_right_token_name = stored_cookie + "_uar";
setpartCookie("tokenmysych", "", { path: '/' });
setpartCookie(acces_right_token_name, "", { path: '/' });
removeCookie(acces_right_token_name, { path: '/' });
removeCookie("tokenmysych", { path: '/' });
}
history.push("/ent_student");
}
return (
<div className='ent_student_header_automatic_files'>
{/*** GESTION Deconnexion */}
<Dialog
open={Dialog_1_open}
// onClose={Dialog_1_handleClose}
className="displaypartnersession"
static
onClose={() => null}
PaperProps={{
className: classes.paper, // Apply the paper style
style: {
overflowY: 'unset',
position: 'absolute',
top: '20rem',
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>
Confirmez la deconnexion de l'ENT <br />
</DialogContentText>
</DialogContent>
<DialogActions>
<IconButton
//autoFocus
onClick={Dialog_1_handleClose_buton}
color="primary"
className={classes.customizedButton}
>
<CancelPresentationIcon />
</IconButton>
<div className="div_row">
<div className="div_row_gauche">
<Button
onClick={(e) => {
if (partnerconnected && String(partnerconnected) === '1')
part_logout_confirmation();
if (userconnected && String(userconnected) === '1')
user_logout_confirmation();
}}
className="bton_enreg_dialog">Deconnexion</Button>
</div>
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Button onClick={Dialog_1_handleClose_buton} className="bton_annule_dialog" >Annuler</Button>
</div>
</div>
</DialogActions>
</Dialog>
{/*** Fin GESTION Deconnexion */}
<header className="header_new_2025">
<div className="header-content">
<div className="logo-menu">
<img src={Header_MySy_Logo} alt="Logo MySy" className="logo" style={{ cursor: 'pointer' }} onClick={(e) => {
// e.preventDefault();
history.push("/");
}} />
<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>
<div className="separator"></div>
<a href="/marketplace" className="menu-link">Marketplace</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>}
</div>
<div className="separator hide_on_mobile"></div>
{String(someoneconnected) !== String("1") && <div className="login-link hide_on_mobile" onClick={handleAccountConnexion}>
<img src={Header_User} alt="User icon" className="user-icon hide_on_mobile" />
<span className='hide_on_mobile'>Connexion</span>
</div>}
{String(someoneconnected) === String("1") && <div className="login-link hide_on_mobile" onClick={(e) => setDialog_1_open(true)}>
<img src={Header_User} alt="User icon" className="user-icon hide_on_mobile" />
<span className='hide_on_mobile'>Deconnexion</span>
</div>}
</div>
</div >
</header >
</div >
);
};
export default ENT_Student_Header;

View File

@ -402,7 +402,7 @@ function ESign() {
className="esign"
>
<DialogTitle>Signature Manuscrite </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Signature Manuscrite </DialogTitle>
<DialogContent className="DialogContent_width">
<div style={{ width: "100%" }}>
@ -477,8 +477,8 @@ function ESign() {
>
{!erreur_recup_e_doc && <DialogTitle>Signature </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle>Signature - <font color="red"> Identifiants invalides </font></DialogTitle>}
{!erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Signature </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Signature - <font color="red"> Identifiants invalides </font></DialogTitle>}
<DialogContent className="DialogContent_width">
@ -583,8 +583,8 @@ function ESign() {
aria-labelledby="draggable-dialog-title"
>
{!erreur_recup_e_doc && <DialogTitle>Authentification </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle>Authentification - <font color="red"> Identifiants invalides </font></DialogTitle>}
{!erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Authentification </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Authentification - <font color="red"> Identifiants invalides </font></DialogTitle>}
<DialogContent className="DialogContent_width">
@ -663,7 +663,7 @@ function ESign() {
>
<DialogTitle>Information </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Information </DialogTitle>
<DialogContent className="DialogContent_width">

View File

@ -604,8 +604,8 @@ function Emarge_QR_Code() {
>
{!erreur_recup_e_doc && <DialogTitle>Signature </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle>Signature - <font color="red"> Identifiants invalides </font></DialogTitle>}
{!erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Signature </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Signature - <font color="red"> Identifiants invalides </font></DialogTitle>}
<DialogContent className="DialogContent_width">
@ -678,8 +678,8 @@ function Emarge_QR_Code() {
>
{!erreur_recup_e_doc && <DialogTitle>Authentification </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle>Authentification - <font color="red"> Identifiants invalides </font></DialogTitle>}
{!erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Authentification </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Authentification - <font color="red"> Identifiants invalides </font></DialogTitle>}
<DialogContent className="DialogContent_width">
@ -749,7 +749,7 @@ function Emarge_QR_Code() {
>
<DialogTitle>Information </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Information </DialogTitle>
<DialogContent className="DialogContent_width">

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';
@ -173,8 +173,8 @@ const Employes = (props) => {
const columns = [
{ field: '_id', headerName: '_id', hide: true, Width: 0 },
{ field: 'id', headerName: 'id', hide: true, Width: 0 },
{ field: '_id', headerName: '_id', hide: true, Width: 0, disableExport: true, },
{ field: 'id', headerName: 'id', hide: true, Width: 0, disableExport: true, },
{ field: 'date_naissance', headerName: 'date_naissance', hide: true, Width: 0 },
{
field: 'civilite', headerName: 'Civilité', minWidth: 100, flex: 1, maxWidth: 100, hide: false,
@ -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");
@ -3475,7 +3476,7 @@ const Employes = (props) => {
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}
@ -3663,7 +3664,6 @@ const Employes = (props) => {
value: '0',
label: 'Non',
},
];
@ -9162,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
@ -9616,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">
@ -10088,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

@ -0,0 +1,471 @@
import React, { useState, useEffect } from "react";
import { useHistory } from "react-router-dom";
import { useCookies } from "react-cookie";
import { confirmAlert } from 'react-confirm-alert';
import img_met_program from "../mysy_img/met_programmation.jpg";
import img_met_graphisme from "../mysy_img/metier_graphisme.jpg";
import img_met_autre from "../mysy_img/met_autre.jpg";
import img_met_digital from "../mysy_img/met_digital.jpg";
import img_met_management from "../mysy_img/met_management.jpg";
import img_met_dev_perso from "../mysy_img/metier_dev_perso.jpg";
import img_met_rh from "../mysy_img/met_rh.jpg";
import img_met_bureautic from "../mysy_img/met_burautic.jpg";
import img_met_vente from "../mysy_img/met_vente.jpg";
import axios from "axios";
//import { Rating } from 'react-simple-star-rating'
import Rating from '@mui/material/Rating';
import parse from 'html-react-parser'
const Ent_Student_Affichage_Ftion_Grid = (props) => {
const [userconnected, setuserconnected] = useState("0");
const [partnerconnected, setpartnerconnected] = useState("0");
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych']);
const [cookie_part, setCookie_part, removeCookie_part] = useCookies(['tokenmysypart']);
const history = useHistory();
const [myfilter, setmyfilter] = useState(props.formation.price);
const [profileimg, setprofileimg] = useState(props.formation.price);
// Gestion des Cookies
const stored_partner = cookie_part.tokenmysypart;
const stored_user = cookie.tokenmysych;
function test(val) {
if (userconnected === "0" && partnerconnected === "0") {
confirmAlert({
title: 'Activer votre session ?',
message: 'Merci de vous connecter pour acceder au detail de cette formation',
buttons: [
{
label: 'Oui',
onClick: () => { history.push("/mysy-training-login/training/" + props.formation.internal_url) }
},
{
label: 'Non',
onClick: () => { return }
}
],
closeOnEscape: false,
closeOnClickOutside: false,
keyCodeForClose: [8, 32],
willUnmount: () => { },
afterClose: () => { },
onClickOutside: () => { },
onKeypress: () => { },
onKeypressEscape: () => { },
});
} else {
window.open(
"/Display-Detail-formation/" + props.formation.internal_url,
'_blank'
);
}
}
const [myclassimage, setmyclassimage] = useState();
const [isclassimage, setisclassimage] = useState("False");
const [userimgclassprofil, setuserimgclassprofil] = useState("");
const [class_img_stored_in_bdd, setclass_img_stored_in_bdd] = useState("");
function getClassImage_no_token() {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/getRecodedClassImage_no_token/";
var form = new FormData();
form.append("type", "partner");
form.append("related_collection", "myclass");
form.append("related_collection_recid", props.formation._id);
form.append("class_external_code", props.formation.external_code);
axios.post(myurl, form).then(res => {
// console.log(" getClassImage_no_token : In test res.data.status = ", res.data.status);
if (String(res.data.status) === "true") {
//console.log(" getClassImage_no_token: res.data.message.img = ", res.data.message);
if (res.data.message.img.length > 0) {
setisclassimage("True");
}
else {
setisclassimage("False");
}
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);
}
else {
// console.log(" In Erreur res.data.status = " + res.data.status);
//console.log(" In Erreur res.data.message = " + res.data.message);
setisclassimage("False");
setuserimgclassprofil();
setclass_img_stored_in_bdd();
}
}).catch((error) => {
console.warn('getClassImage ee: Not good man :( getClassImage = ');
setisclassimage("False");
setuserimgclassprofil("");
setclass_img_stored_in_bdd("");
})
}
/* Cette variable accompagne la gestion des images par defaut.
idée : si la valeur de "DetailTraining.metier" != "management, digital, office, rh, vente, dev_perso"
alors l'utilisateur à créer une formation avec un metier qui n'est pas geré, donc on met une image par defaut
*/
const [ismetiermanaged, setismetiermanaged] = useState();
const liste_metier = ["management", "digital", "office", "rh", "vente", "dev_perso"];
useEffect(() => {
setmyfilter(props.myfil);
// console.log(" #### useEffect props.formation = ", props.formation);
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
} else {
setuserconnected("1");
}
if (typeof (stored_partner) === "undefined" || String(stored_partner) === '') {
setpartnerconnected("0");
} else {
setpartnerconnected("1");
}
getClassImage_no_token();
GetCurrentClass_trainingsession();
GetCurrentClass_trainingsession_cities();
// Verifier si le metier est geré
if (props.formation.metier) {
if (!liste_metier.includes(props.formation.metier)) {
setismetiermanaged("0"); // j'ai une valeur dans metier, mais qui n'est pas geré
}
}
else {
setismetiermanaged("0");
}
if (props.formation.img_url && String(props.formation.img_url).length > 0) {
setismetiermanaged("1");
}
}, []);
const [GetCurrentClass_api, setGetCurrentClass_api] = useState();
const [GetCurrentClass_message, setGetCurrentClass_message] = useState();
const [GetCurrentClass_result, setGetCurrentClass_result] = useState();
function GetCurrentClass_trainingsession(event) {
var form = new FormData();
form.append("class_internal_url", props.formation.internal_url);
form.append("token", stored_partner);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/GetActiveSessionFormation_List/";
axios.post(myurl, form).then(res => {
if (res.data.status != "false") {
//console.log(" In GetCurrentClass_trainingsession res.data.status = " + res.data.status);
//console.log(" In GetCurrentClass_trainingsession res.data.message r_class = " + res.data.message);
setGetCurrentClass_api("true");
setGetCurrentClass_result(res.data.message);
}
else {
setGetCurrentClass_api("false");
setGetCurrentClass_message(res.data.message);
}
}).catch((error) => {
console.warn('Not good man :( GetCurrentClass_trainingsession = ', error);
setGetCurrentClass_api("false");
//setmyApimyApiMessage("")
})
}
const [GetCurrentClass_trainingsession_cities_api, setGetCurrentClass_trainingsession_cities_api] = useState();
const [GetCurrentClass_trainingsession_cities_message, setGetCurrentClass_trainingsession_cities_message] = useState();
const [GetCurrentClass_trainingsession_cities_result, setGetCurrentClass_trainingsession_cities_result] = useState([]);
function GetCurrentClass_trainingsession_cities(event) {
var form = new FormData();
form.append("class_internal_url", props.formation.internal_url);
form.append("token", stored_partner);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/GetActiveSession_Cities_And_Distance_Formation_List/";
axios.post(myurl, form).then(res => {
if (res.data.status != "false") {
//console.log(" In GetCurrentClass_trainingsession_cities res.data.status = " + res.data.status);
//console.log(" In GetCurrentClass_trainingsession_cities res.data.message r_class = " + res.data.message);
setGetCurrentClass_trainingsession_cities_api("true");
setGetCurrentClass_trainingsession_cities_result(res.data.message);
}
else {
setGetCurrentClass_trainingsession_cities_api("false");
setGetCurrentClass_trainingsession_cities_message(res.data.message);
}
}).catch((error) => {
console.warn('Not good man :( GetCurrentClass_trainingsession_cities = ', error);
setGetCurrentClass_trainingsession_cities_api("false");
//setmyApimyApiMessage("")
})
}
const styles = {
list: {
display: 'flex',
flexDirection: 'column',
gap: '32px',
width: '100%',
},
row: {
display: 'flex',
flexDirection: 'row',
gap: '24px',
width: '100%',
},
card: {
flexGrow: 1,
backgroundColor: '#fff',
borderRadius: '8px',
overflow: 'hidden',
display: 'flex',
flexDirection: 'column',
},
image: {
maxWidth: '100%',
height: '200px',
overflow: 'hidden',
marginTop: '-2rem'
},
content: {
padding: '16px',
},
header: {
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
},
eligibility: {
backgroundColor: '#e2e9fb',
padding: '4px 8px',
borderRadius: '4px',
fontSize: '12px',
fontWeight: 'bold',
},
title: {
fontSize: '14px',
fontWeight: 'bold',
margin: '8px 0',
},
price: {
fontSize: '14px',
fontWeight: 'bold',
color: '#000',
},
description: {
fontSize: '12px',
color: '#666',
margin: '8px 0',
height: "40px",
overflow: "hidden",
},
details: {
display: 'flex',
justifyContent: 'space-between',
marginTop: '16px',
},
button: {
backgroundColor: '#007bff',
color: '#fff',
padding: '8px 16px',
border: 'none',
borderRadius: '4px',
cursor: 'pointer',
},
buttonOutline: {
backgroundColor: '#fff',
color: '#007bff',
padding: '8px 16px',
border: '1px solid #007bff',
borderRadius: '4px',
cursor: 'pointer',
},
};
return (
<div className="new_formation_2025">
<div style={styles.card}>
<div style={{ width: '100%', textAlign: 'right', zIndex: '9999' }}>
<div style={{ width: '50%', float: 'left' }}> &nbsp; </div>
{props.formation.cpf && String(props.formation.cpf) === String("1") && <div className="case_cpf" >
<span className="tag_cpf_txt_ok_cpf" >{"OUI CPF"}</span>
</div>
}
{props.formation.cpf && String(props.formation.cpf) !== String("1") && <div className="case_cpf">
<span className="tag_cpf_txt_no_ok_cpf">{"NON CPF"}</span>
</div>
}
{!props.formation.cpf && String(props.formation.cpf) !== String("1") && <div className="case_cpf">
<span className="tag_cpf_txt_no_ok_cpf">{"NON CPF"}</span>
</div>}
</div>
{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) &&
String(ismetiermanaged) !== "0" && String(ismetiermanaged) !== "1" &&
<div >
{(!props.formation.img_url || String(props.formation.img_url).length <= 0) &&
props.formation.metier && String(props.formation.metier).toLocaleLowerCase() === String("it") &&
String(isclassimage) === "False" && <img src={img_met_program} alt="informatique" style={styles.image} />}
{(!props.formation.img_url || String(props.formation.img_url).length <= 0) &&
props.formation.metier && String(props.formation.metier).toLocaleLowerCase() === String("graphisme") &&
String(isclassimage) === "False" && <img src={img_met_graphisme} alt="graphisme" style={styles.image} />}
{(!props.formation.img_url || String(props.formation.img_url).length <= 0) &&
props.formation.metier && String(props.formation.metier).toLocaleLowerCase() === String("management") &&
String(isclassimage) === "False" && <img src={img_met_management} alt="management" style={styles.image} />}
{(!props.formation.img_url || String(props.formation.img_url).length <= 0) &&
props.formation.metier && String(props.formation.metier).toLocaleLowerCase() === String("digital") &&
String(isclassimage) === "False" && <img src={img_met_digital} alt="digital" style={styles.image} />}
{(!props.formation.img_url || String(props.formation.img_url).length <= 0) &&
props.formation.metier && String(props.formation.metier).toLocaleLowerCase() === String("office") &&
String(isclassimage) === "False" && <img src={img_met_bureautic} alt="office" style={styles.image} />}
{!props.formation.img_url || String(props.formation.img_url).length <= 0 &&
props.formation.metier && String(props.formation.metier).toLocaleLowerCase() === String("rh") &&
String(isclassimage) === "False" && <img src={img_met_rh} alt="ressources humaines" style={styles.image} />}
{!props.formation.img_url || String(props.formation.img_url).length <= 0 &&
props.formation.metier && String(props.formation.metier).toLocaleLowerCase() === String("vente") &&
String(isclassimage) === "False" && <img src={img_met_vente} alt="vente" style={styles.image} />}
{!props.formation.img_url || String(props.formation.img_url).length <= 0 &&
props.formation.metier && String(props.formation.metier).toLocaleLowerCase() === String("dev_perso") &&
String(isclassimage) === "False" && <img src={img_met_dev_perso} alt="developpement personnel" style={styles.image} />}
{String(isclassimage) === "True" && <img src={userimgclassprofil} alt="developpement personnel" style={styles.image} />}
</div>
}
{(!class_img_stored_in_bdd || String(class_img_stored_in_bdd).length < 50) && String(ismetiermanaged) === "0" && String(userimgclassprofil).length > 100 &&
<div>
<img src={userimgclassprofil} alt="autre" style={styles.image} />
{/*props.formation.institut_formation && <div style={{ width: '100%', "textAlign": "center" }}> Dispensé par :<br />
{String(props.formation.institut_formation)} </div>*/}
</div>}
{(!class_img_stored_in_bdd || String(class_img_stored_in_bdd).length < 50) && String(ismetiermanaged) === "0" && String(userimgclassprofil).length <= 100 &&
<div>
<img src={img_met_autre} alt="autre" style={styles.image} />
{/*props.formation.institut_formation && <div style={{ width: '100%', "textAlign": "center" }}> Dispensé par :<br />
{String(props.formation.institut_formation)} </div>*/}
</div>}
{(!class_img_stored_in_bdd || String(class_img_stored_in_bdd).length < 50) && String(ismetiermanaged) === "1" &&
<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>*/}
</div>}
<div className="block_main_contente">
<div className="block_top_content">
<div className="div_row_gauche" >
{props.formation.note && String(props.formation.note).length === 1 &&
parseInt(String(props.formation.note)) <= 5 &&
<Rating name="half-rating-read" defaultValue={props.formation.note} precision={0.5} readOnly style={{ fontSize: '15px' }} />
}
</div>
<h3 className="formation_titre">{String(parse(String(props.formation.title).replace(/(<([^>]+)>)/ig, ''))).substring(0, 50)}</h3>
{props.formation.discounted_price && props.formation.business_prices && <p className="formation_prix">{props.formation.discounted_price} HT&nbsp; </p>}
{props.formation.business_prices && props.formation.business_prices.length <= 0
&& <p className="formation_prix">{props.formation.price} HT&nbsp; </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>
</div>
<div className="block_cats">
<button className="block_cats_bton_detail">
<nav className="block_cats_bton_detail_text"
onClick={(e) => {
e.preventDefault();
props.display_detail_from_grid(props.formationid, props.formation_id, props.session_id,
props.inscription_id, props.class_id)
}}> Voir les détails </nav></button>
</div>
</div>
</div>
)
}
export default Ent_Student_Affichage_Ftion_Grid;

View File

@ -6,33 +6,18 @@ import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import { DataGrid, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import { FcPodiumWithAudience } from "react-icons/fc";
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, FcCheckmark } from "react-icons/fc";
import DatePicker from "react-datepicker";
import { FcAcceptDatabase} from "react-icons/fc";
import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box';
import { Typography, LinearProgress } from '@mui/material';
import styled from 'styled-components';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
import Dialog from '@mui/material/Dialog';
@ -40,29 +25,18 @@ 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 ColorPicker from 'react-pick-color';
import Visibility from '@mui/icons-material/Visibility';
import VisibilityOff from '@mui/icons-material/VisibilityOff';
import { Fab } from "@material-ui/core";
import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io";
import { AiTwotoneEdit, AiTwotoneSave } from "react-icons/ai";
import { AiTwotoneSave } from "react-icons/ai";
import Autocomplete from '@mui/material/Autocomplete';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import Chip from "@mui/material/Chip";
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 Rating from '@mui/material/Rating';
import Module_Selection_Evaluation_Apprenants from "./Module_Selection_Evaluation_Apprenants";
import AttachFileIcon from '@mui/icons-material/AttachFile';
import Module_Selection_Apprenants from "./Module_Selection_Apprenants";
import { FcAlarmClock, FcMultipleSmartphones, FcWorkflow } from "react-icons/fc";
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import Module_Historique_Action from "./Module_Historique_Action";
import { makeStyles } from "@material-ui/core/styles";
import CancelPresentationIcon from '@mui/icons-material/CancelPresentation';
import { IconButton } from '@material-ui/core';
@ -73,13 +47,11 @@ import {
GridToolbarFilterButton, GridToolbarDensitySelector, GridToolbarExportContainer, useGridApiContext,
gridFilteredSortedRowIdsSelector,
gridVisibleColumnFieldsSelector,
GridValueGetterParams,
GridPreferencePanelsValue,
} from '@mui/x-data-grid';
import * as XLSX from 'xlsx';
import { ReactReduxContext } from "react-redux";
import { RestaurantMenu } from "@mui/icons-material";
function PaperComponent(props) {
return (
@ -1148,7 +1120,7 @@ const Equipe_Team = (props) => {
if (document.getElementsByName(String(current_menu_header)) && document.getElementsByName(String(current_menu_header))[0]) {
document.getElementsByName(String(current_menu_header))[0].style.fontWeight = "700";
document.getElementsByName(String(current_menu_header))[0].style.backgroundColor = "#104277";
document.getElementsByName(String(current_menu_header))[0].style.backgroundColor = "#107758";
document.getElementsByName(String(current_menu_header))[0].style.color = "white";
}
}
@ -2927,8 +2899,6 @@ const Equipe_Team = (props) => {
</div>
<div className="div_row" style={{ "border": "None" }}>
<div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>

View File

@ -851,7 +851,7 @@ function GestionAdministrative(props) {
setCreateSessionFormation_api();
setdisplay_detail_insc();
document.getElementById('menu_preinscrit').style.background = "#104277";
document.getElementById('menu_preinscrit').style.background = "#107758";
document.getElementById('menu_preinscrit').style.color = "#ffffff";
document.getElementById('menu_inscrit').style.background = "#d8edfc";
@ -877,7 +877,7 @@ function GestionAdministrative(props) {
setCreateSessionFormation_api();
document.getElementById('menu_inscrit').style.background = "#104277";
document.getElementById('menu_inscrit').style.background = "#107758";
document.getElementById('menu_inscrit').style.color = "#ffffff";
document.getElementById('menu_preinscrit').style.background = "#d8edfc";
@ -910,7 +910,7 @@ function GestionAdministrative(props) {
setCreateSessionFormation_api();
setdisplay_detail_insc();
document.getElementById('menu_emarge').style.background = "#104277";
document.getElementById('menu_emarge').style.background = "#107758";
document.getElementById('menu_emarge').style.color = "#ffffff";
document.getElementById('menu_preinscrit').style.background = "#d8edfc";
@ -932,7 +932,7 @@ function GestionAdministrative(props) {
setCreateSessionFormation_api();
setdisplay_detail_insc();
document.getElementById('menu_eval').style.background = "#104277";
document.getElementById('menu_eval').style.background = "#107758";
document.getElementById('menu_eval').style.color = "#ffffff";
document.getElementById('menu_preinscrit').style.background = "#d8edfc";
@ -6217,7 +6217,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}
@ -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

@ -914,7 +914,7 @@ const Groupe_Apprenant = (props) => {
if (document.getElementsByName(String(current_menu_header)) && document.getElementsByName(String(current_menu_header))[0]) {
document.getElementsByName(String(current_menu_header))[0].style.fontWeight = "700";
document.getElementsByName(String(current_menu_header))[0].style.backgroundColor = "#104277";
document.getElementsByName(String(current_menu_header))[0].style.backgroundColor = "#107758";
document.getElementsByName(String(current_menu_header))[0].style.color = "white";
}
}

View File

@ -426,7 +426,7 @@ const Header = () => {
className="displaypartnersession"
>
<DialogTitle>Contactez Nous</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Contactez Nous</DialogTitle>
<DialogContent className="DialogContent_width">
@ -566,7 +566,7 @@ const Header = () => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
Confirmez la deconnexion <br />

View File

@ -25,7 +25,7 @@ import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
import Rating from '@mui/material/Rating';
import parse from 'html-react-parser'
import Autocomplete from '@mui/material/Autocomplete';
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
function Inscription_Information(props) {
@ -110,7 +110,10 @@ function Inscription_Information(props) {
var nom = document.getElementsByName("nom")[0].value;
if (String(nom).trim().length <= 0) {
document.getElementsByName("nom")[0].style.borderColor = "red";
alert(" Le nom d'utilisateur est obligatoire 3");
setdisplay_alert_mysy("1");
setalert_message("Le nom est obligatoire");
setalert_type("error")
return;
}
@ -123,8 +126,11 @@ function Inscription_Information(props) {
var prenom = document.getElementsByName("prenom")[0].value;
if (String(prenom).trim().length <= 0) {
document.getElementsByName("telephone")[0].style.borderColor = "red";
alert(" Le prenom d'utilisateur est obligatoire ");
document.getElementsByName("prenom")[0].style.borderColor = "red";
setdisplay_alert_mysy("1");
setalert_message("Le prenom est obligatoire");
setalert_type("error")
return;
}
@ -132,15 +138,19 @@ function Inscription_Information(props) {
var telephone = document.getElementsByName("telephone")[0].value;
if (String(telephone).trim().length < 10) {
document.getElementsByName("telephone")[0].style.borderColor = "red";
alert(" Le numero de telephone doit comporter 10 chiffres ");
setdisplay_alert_mysy("1");
setalert_message("Le numero de telephone doit comporter 10 chiffres");
setalert_type("error")
return;
}
var email = document.getElementsByName("email")[0].value;
var re2 = /\S+@\S+\.\S+/;
if (re2.test(email) === false) {
alert("L'email est incorrect ");
document.getElementsByName("email")[0].style.borderColor = "red";
setdisplay_alert_mysy("1");
setalert_message("L'adresse email est incorrect");
setalert_type("error")
return;
}
@ -148,7 +158,9 @@ function Inscription_Information(props) {
var modefinancement = document.getElementById('modefinancement').value;
if (String(modefinancement).trim().length <= 0) {
alert("Vous devez choisir une mode de financement ");
setdisplay_alert_mysy("1");
setalert_message("Vous devez choisir une mode de financemen");
setalert_type("error")
return;
}
@ -156,14 +168,19 @@ function Inscription_Information(props) {
if (document.getElementById('opco') && document.getElementById('opco').value) {
opco = document.getElementById('opco').value;
if (String(opco).trim().length <= 0) {
alert("Vous devez choisir un centre Opco ");
setdisplay_alert_mysy("1");
setalert_message("Vous devez choisir un centre Opco");
setalert_type("error")
return;
}
}
var session = mysession;
if (String(nom).trim().length <= 0) {
alert(" Le nom d'utilisateur est obligatoire 2 ");
setdisplay_alert_mysy("1");
setalert_message("Le nom est obligatoire");
setalert_type("error")
return;
}
@ -217,9 +234,20 @@ function Inscription_Information(props) {
setRecordData_api(result['status']);
setRecordData_status(result['status']);
setRecordData_message(result['message']);
window.scrollTo({
top: 0,
behavior: "smooth",
});
if (String(result['status']) === "true") {
alert("Votre demande d'inscription a bien été prise en compte. Vous allez recevoir une email de confirmation dans votre boite email. Merci.");
setdisplay_alert_mysy("1");
setalert_message("Votre demande d'inscription a bien été prise en compte. Vous allez recevoir une email de confirmation dans votre boite email. Merci.");
setalert_type("success");
} else {
setdisplay_alert_mysy("1");
setalert_message(result['message']);
setalert_type("error")
}
})
@ -322,7 +350,7 @@ function Inscription_Information(props) {
CheckEvaluationToken();
// setclass_sales_price(props.trainig_price);
// setclass_sales_price(props.trainig_price);
}
@ -466,10 +494,10 @@ function Inscription_Information(props) {
function SendInformationRequest() {
const formData = new FormData();
const url = process.env.REACT_APP_API_URL + "myclass/api/RenseignementClass/";
const url = process.env.REACT_APP_API_URL + "myclass/api/RenseignementClass/";
if (is_company === "0") {
var nom = valnom_info;
//console.log(" nom = ", nom, );
if (String(nom).trim().length <= 0) {
@ -508,7 +536,7 @@ function Inscription_Information(props) {
}
}
var message = "";
if (editorRef_description.current) {
message = editorRef_description.current.getContent();
@ -532,7 +560,7 @@ function Inscription_Information(props) {
formData.append('class_sales_price', class_sales_price);
formData.append('is_company', is_company);
@ -884,9 +912,36 @@ function Inscription_Information(props) {
const [civilite_stagiaire, setcivilite_stagiaire] = 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("");
}
return (
<div className='inscription'>
{/*** Affichage des messages d'alerte*/}
{display_alert_mysy && String(display_alert_mysy) === "1" &&
<Module_Alert_Confirmation alert_message={alert_message}
alert_type={alert_type}
clear_alert_message={clear_alert_message}
clear_alert_type={clear_alert_type}
clear_display_alert_mysy={clear_display_alert_mysy}
/>
}
{/*** FIN Affichage des messages d'alerte*/}
{String(RecordData_status) === "true" &&
String(action).toLocaleLowerCase() === "inscription" &&
<div className="okUpdateData">
@ -905,7 +960,6 @@ function Inscription_Information(props) {
</div>}
{(String(RecordData_status) === "false" ||
String(RecordData_status).length === 0) &&
String(action).toLocaleLowerCase() === "inscription" &&
@ -1244,7 +1298,7 @@ function Inscription_Information(props) {
</div>}
<h3 style={{ fontFamily:'DM Sans' }}> Demande d'evaluation </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Demande d'evaluation </h3>
<div className="div_row22 survey_block">
<fieldset>
<nav className="survey_title"> 1. Une <b>note </b> pour l'appréciation générale </nav>
@ -1466,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
@ -1710,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

@ -1520,7 +1520,7 @@ const options_menu_vertical = [
submenu_color_management("main");
/* if (document.getElementById("order_header_main")) {
document.getElementById("order_header_main").style.backgroundColor = "#104277";
document.getElementById("order_header_main").style.backgroundColor = "#107758";
document.getElementById("order_header_main").style.color = "white";
}
@ -1547,7 +1547,7 @@ const options_menu_vertical = [
submenu_color_management("detail");
/* if (document.getElementById("order_header_detail")) {
document.getElementById("order_header_detail").style.backgroundColor = "#104277";
document.getElementById("order_header_detail").style.backgroundColor = "#107758";
document.getElementById("order_header_detail").style.color = "white";
}
@ -1573,7 +1573,7 @@ const options_menu_vertical = [
submenu_color_management("facturation");
/* if (document.getElementById("order_header_facturation")) {
document.getElementById("order_header_facturation").style.backgroundColor = "#104277";
document.getElementById("order_header_facturation").style.backgroundColor = "#107758";
document.getElementById("order_header_facturation").style.color = "white";
}
@ -1604,7 +1604,7 @@ const options_menu_vertical = [
submenu_color_management("paiement");
/* if (document.getElementById("order_header_facturation")) {
document.getElementById("order_header_facturation").style.backgroundColor = "#104277";
document.getElementById("order_header_facturation").style.backgroundColor = "#107758";
document.getElementById("order_header_facturation").style.color = "white";
}
@ -1640,7 +1640,7 @@ const options_menu_vertical = [
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}
@ -2810,7 +2810,7 @@ const options_menu_vertical = [
className="partner_commande"
>
<DialogTitle> Détail ligne Facture <font style={{ fontWeight: "700" }}> {String(invoice_internal_ref)} </font> </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Détail ligne Facture <font style={{ fontWeight: "700" }}> {String(invoice_internal_ref)} </font> </DialogTitle>
<DialogContent>
@ -3024,7 +3024,7 @@ const options_menu_vertical = [
static
onClose={() => null} >
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "20rem" }}>
<div>
@ -3073,7 +3073,7 @@ const options_menu_vertical = [
static
onClose={() => null} >
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "20rem" }}>
<DialogContentText>
Envoi Facture par email
@ -3186,7 +3186,7 @@ const options_menu_vertical = [
>
<DialogTitle> Paiement </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Paiement </DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_Paiement_1_message}
@ -3324,7 +3324,7 @@ const options_menu_vertical = [
>
<DialogTitle> Annotation </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Annotation </DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "15rem" }}>
<DialogContentText>
{Dialog_annotation_1_message}

View File

@ -150,10 +150,10 @@ const Intranet_Mes_Stagiaires = (props) => {
const columns = [
{ field: '_id', headerName: '_id', hide: true, editable: false, Width: 0, disableExport: true, },
{ field: 'session_id', headerName: 'session_id', hide: true, editable: false, Width: 0 , disableExport: true,},
{ field: 'id', headerName: 'id', hide: true, Width: 0 , disableExport: true,},
{ field: 'class_id', headerName: 'class_id', hide: true, Width: 0 , disableExport: true,},
{ field: 'class_internal_url', headerName: 'class_internal_url', hide: true, editable: false, Width: 0 , disableExport: true,},
{ field: 'session_id', headerName: 'session_id', hide: true, editable: false, Width: 0, disableExport: true, },
{ field: 'id', headerName: 'id', hide: true, Width: 0, disableExport: true, },
{ field: 'class_id', headerName: 'class_id', hide: true, Width: 0, disableExport: true, },
{ field: 'class_internal_url', headerName: 'class_internal_url', hide: true, editable: false, Width: 0, disableExport: true, },
{ field: 'telephone', headerName: 'Téléphone', hide: true, editable: false, Width: 0 },
{ field: 'date_naissance', headerName: 'date_naissance', hide: true, editable: false, Width: 0 },
@ -788,18 +788,18 @@ const Intranet_Mes_Stagiaires = (props) => {
}
const stored_cookie = getCookie('tokenmysych');
const stored_cookie = getCookie('tokenmysych');
form.append("token", stored_cookie);
/*** Si le formulaire est appelé avec un type de document;
* on va forcer dans les argument un champ avec partner_client_id = client_rattachement_id
*/
if (props.partner_client_id ) {
if (props.partner_client_id) {
form.delete("client_rattachement_id");
form.append("client_rattachement_id", props.partner_client_id);
}
// console.log(" ### Getall_TrainingParticipant form = ", form)
// console.log(" ### Getall_TrainingParticipant form = ", form)
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Statgaire_List_Partner_with_filter/";
@ -1082,7 +1082,7 @@ const Intranet_Mes_Stagiaires = (props) => {
setsubmenu("inscrit");
if (document.getElementById("inscrit")) {
document.getElementById("inscrit").style.backgroundColor = "#104277";
document.getElementById("inscrit").style.backgroundColor = "#107758";
document.getElementById("inscrit").style.color = "white";
}
@ -1813,7 +1813,7 @@ const Intranet_Mes_Stagiaires = (props) => {
const list_menu_header_names = ['detail_session_class', 'detail_client_rattachement', 'detail_facture_client_rattachement', 'detail_financeur_rattachement', 'detail_nom', 'detail_status_inscript',
'detail_opco', 'detail_prenom', 'detail_mode_financement', 'detail_mail', 'detail_naissance', 'detail_tel', 'detail_adresse', 'detail_code_postal',
'detail_ville', 'detail_pays', 'certif_date', 'detail_cout', 'detail_mode_fin', 'detail_employeur', 'date_evaluation', 'certif_date',
'note_eval', 'detail_type_apprenant', 'date_evaluation', 'detail_incr_date']
'note_eval', 'detail_type_apprenant', 'date_evaluation', 'detail_incr_date']
@ -1902,27 +1902,11 @@ const Intranet_Mes_Stagiaires = (props) => {
const [attendee_lms_login, setattendee_lms_login] = useState();
function submenu_sessions() {
setsubmenu("sessions");
setdisplay_detail_stagiaire();
setdisplay_detail_absence();
setdisplay_notes("");
setdisplay_detail_ue();
setdisplay_detail_historique();
desableSessionFields();
}
function submenu_absence() {
setsubmenu("absence");
setdisplay_detail_stagiaire();
setdisplay_detail_historique();
setdisplay_detail_ue();
setdisplay_notes("");
setdisplay_detail_absence("1");
desableSessionFields();
}
function submenu_historique() {
submenu_color_management("historique");
setsubmenu("historique");
setdisplay_detail_stagiaire();
setdisplay_detail_absence();
@ -1930,10 +1914,13 @@ const Intranet_Mes_Stagiaires = (props) => {
setdisplay_notes("");
setdisplay_detail_historique("1");
desableSessionFields();
}
function submenu_unite_enseignement() {
submenu_color_management("ue");
setsubmenu("ue");
if (selected_id) {
@ -1947,10 +1934,11 @@ const Intranet_Mes_Stagiaires = (props) => {
setdisplay_notes("");
setdisplay_detail_ue("1");
desableSessionFields();
}
function submenu_notes() {
submenu_color_management("notes");
setsubmenu("notes");
if (selected_id) {
@ -1964,6 +1952,8 @@ const Intranet_Mes_Stagiaires = (props) => {
setdisplay_detail_ue("");
setdisplay_notes("1");
desableSessionFields();
}
@ -2230,62 +2220,43 @@ const Intranet_Mes_Stagiaires = (props) => {
}
async function submenu_detail_stagaire() {
function submenu_detail_stagaire() {
submenu_color_management("detail_session");
setsubmenu("detail_session");
await sleep(5);
setdisplay_detail_stagiaire("1");
setaddOneParticipant();
}
if (document.getElementById("detail_session")) {
document.getElementById("detail_session").style.backgroundColor = "#104277";
document.getElementById("detail_session").style.color = "white";
}
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#d8edfc";
document.getElementById("piece_jointe").style.color = "black";
}
/* if (document.getElementById("preinscrit")) {
document.getElementById("preinscrit").style.backgroundColor = "#d8edfc";
document.getElementById("preinscrit").style.color = "black";
}
*/
function submenu_piece_jointe() {
submenu_color_management("piece_jointe");
setsubmenu("piece_jointe");
setdisplay_detail_stagiaire("");
setaddOneParticipant();
}
async function submenu_piece_jointe() {
setsubmenu("piece_jointe");
function submenu_color_management(current_menu) {
const list_sous_menu = ['detail_session', 'piece_jointe', 'ue', 'notes', 'historique']
await sleep(5);
for (let i = 0; i < list_sous_menu.length; i++) {
setdisplay_detail_stagiaire("");
setaddOneParticipant();
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#104277";
document.getElementById("piece_jointe").style.color = "white";
var sous_menu = list_sous_menu[i];
if (String(sous_menu) !== current_menu) {
if (document.getElementById(sous_menu)) {
document.getElementById(sous_menu).style.backgroundColor = "#d8edfc";
document.getElementById(sous_menu).style.color = "black";
document.getElementById(sous_menu).style.fontWeight = "normal";
}
}
}
if (document.getElementById("detail_session")) {
document.getElementById("detail_session").style.backgroundColor = "#d8edfc";
document.getElementById("detail_session").style.color = "black";
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}
/* if (document.getElementById("preinscrit")) {
document.getElementById("preinscrit").style.backgroundColor = "#d8edfc";
document.getElementById("preinscrit").style.color = "black";
}
*/
}
@ -2299,7 +2270,7 @@ const Intranet_Mes_Stagiaires = (props) => {
const stored_cookie = getCookie('tokenmysych');
form.append("token", stored_cookie);
form.append("archive", "0");
var myurl = process.env.REACT_APP_API_URL + "myclass/api/GetAllValideSessionPartner_List/";
setLoading(true);
@ -2514,11 +2485,11 @@ const Intranet_Mes_Stagiaires = (props) => {
var local_class_id = JSON.parse(x).class_id;
var local_class_eu_id = JSON.parse(x).class_eu_id;
var local_class_eu_code = JSON.parse(x).class_eu_code;
var local_type_eval__id = JSON.parse(x).type_eval__id;
var local_type_eval_id = JSON.parse(x).type_eval_id;
var local_type_eval_code = JSON.parse(x).type_eval_code;
var local_type_eval_nom = JSON.parse(x).type_eval_nom;
tab_tmp.push(local_type_eval__id);
tab_tmp.push(local_type_eval_id);
@ -2530,7 +2501,7 @@ const Intranet_Mes_Stagiaires = (props) => {
"class_id": local_class_id,
"class_eu_id": local_class_eu_id,
"class_eu_code": local_class_eu_code,
"type_eval__id": local_type_eval__id,
"type_eval_id": local_type_eval_id,
"type_eval_code": local_type_eval_code,
"type_eval_nom": local_type_eval_nom,
};
@ -2547,7 +2518,7 @@ const Intranet_Mes_Stagiaires = (props) => {
"class_id": "",
"class_eu_id": "",
"class_eu_code": "",
"type_eval__id": "",
"type_eval_id": "",
"type_eval_code": "",
"type_eval_nom": "",
};
@ -4195,6 +4166,7 @@ const Intranet_Mes_Stagiaires = (props) => {
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
const stored_cookie = getCookie('tokenmysych');
form.append("token", stored_cookie);
form.append("archive", "0");
var myurl = process.env.REACT_APP_API_URL + "myclass/api/get_partner_class/";
setLoading(true);
@ -6345,115 +6317,115 @@ const Intranet_Mes_Stagiaires = (props) => {
setdisplay_stagiaire_with_alert(event.target.checked);
};
// DEBUT EXPORT EXCEL DATAGRID
// DEBUT EXPORT EXCEL DATAGRID
function CustomToolbar(props) {
function CustomToolbar(props) {
return (
<GridToolbarContainer {...props}>
return (
<GridToolbarContainer {...props}>
<GridToolbarColumnsButton />
<GridToolbarFilterButton />
<GridToolbarDensitySelector
slotProps={{ tooltip: { title: 'Change density' } }}
/>
<Box sx={{ flexGrow: 1 }} />
<ExportButton data_colums={props.data_colums} />
<GridToolbarColumnsButton />
<GridToolbarFilterButton />
<GridToolbarDensitySelector
slotProps={{ tooltip: { title: 'Change density' } }}
/>
<Box sx={{ flexGrow: 1 }} />
<ExportButton data_colums={props.data_colums} />
</GridToolbarContainer>
);
}
</GridToolbarContainer>
);
}
function getExcelData(apiRef) {
// Select rows and columns
const filteredSortedRowIds = gridFilteredSortedRowIdsSelector(apiRef);
const visibleColumnsField = gridVisibleColumnFieldsSelector(apiRef);
function getExcelData(apiRef) {
// Select rows and columns
const filteredSortedRowIds = gridFilteredSortedRowIdsSelector(apiRef);
const visibleColumnsField = gridVisibleColumnFieldsSelector(apiRef);
// Format the data. Here we only keep the value
const data = filteredSortedRowIds.map((id) => {
const row = {};
visibleColumnsField.forEach((field) => {
row[field] = apiRef.current.getCellParams(id, field).value;
// Format the data. Here we only keep the value
const data = filteredSortedRowIds.map((id) => {
const row = {};
visibleColumnsField.forEach((field) => {
row[field] = apiRef.current.getCellParams(id, field).value;
});
return row;
});
return row;
});
return data;
}
return data;
}
function ExportButton(props) {
return (
<GridToolbarExportContainer {...props}>
<ExportMenuItem data_colums={props.data_colums} />
</GridToolbarExportContainer>
);
}
function ExportButton(props) {
return (
<GridToolbarExportContainer {...props}>
<ExportMenuItem data_colums={props.data_colums} />
</GridToolbarExportContainer>
);
}
function handleExport(apiRef, data_colums) {
const data = getExcelData(apiRef);
const visibleColumnsField = gridVisibleColumnFieldsSelector(apiRef);
function handleExport(apiRef, data_colums) {
const data = getExcelData(apiRef);
const visibleColumnsField = gridVisibleColumnFieldsSelector(apiRef);
const local_config = {
keys: visibleColumnsField,
columnNames: data_colums.filter((mydata) => (mydata).disableExport !== true).map(function (mydata) {
if (mydata.headerName && visibleColumnsField.includes(mydata.field)) {
if (mydata.headerName) {
return mydata.headerName;
const local_config = {
keys: visibleColumnsField,
columnNames: data_colums.filter((mydata) => (mydata).disableExport !== true).map(function (mydata) {
if (mydata.headerName && visibleColumnsField.includes(mydata.field)) {
if (mydata.headerName) {
return mydata.headerName;
}
}
}),
fileName: 'data_' + String(new Date().toJSON().slice(0, 10)).replaceAll("-", "_") + '.xlsx',
sheetName: 'Export_' + String(new Date().toJSON().slice(0, 10)).replaceAll("-", "_"),
};
local_config.columnNames = local_config.columnNames.filter(function (element) {
return element !== undefined;
});
const rows = data.map((row) => {
const mRow = {};
for (const key of local_config.keys) {
mRow[key] = row[key];
}
return mRow;
});
}),
const worksheet = XLSX.utils.json_to_sheet(rows);
XLSX.utils.sheet_add_aoa(worksheet, [[...local_config.columnNames]], {
origin: 'A1',
});
fileName: 'data_' + String(new Date().toJSON().slice(0, 10)).replaceAll("-", "_") + '.xlsx',
sheetName: 'Export_' + String(new Date().toJSON().slice(0, 10)).replaceAll("-", "_"),
};
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, local_config.sheetName);
XLSX.writeFile(workbook, local_config.fileName, { compression: true });
}
local_config.columnNames = local_config.columnNames.filter(function( element ) {
return element !== undefined;
});
function ExportMenuItem(props) {
const apiRef = useGridApiContext();
const { hideMenu } = props;
return (
<MenuItem
onClick={() => {
handleExport(apiRef, props.data_colums);
// Hide the export menu after the export
hideMenu?.();
}}
>
Export Excel
</MenuItem>
);
}
const rows = data.map((row) => {
const mRow = {};
for (const key of local_config.keys) {
mRow[key] = row[key];
}
return mRow;
});
const worksheet = XLSX.utils.json_to_sheet(rows);
XLSX.utils.sheet_add_aoa(worksheet, [[...local_config.columnNames]], {
origin: 'A1',
});
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, local_config.sheetName);
XLSX.writeFile(workbook, local_config.fileName, { compression: true });
}
function ExportMenuItem(props) {
const apiRef = useGridApiContext();
const { hideMenu } = props;
return (
<MenuItem
onClick={() => {
handleExport(apiRef, props.data_colums);
// Hide the export menu after the export
hideMenu?.();
}}
>
Export Excel
</MenuItem>
);
}
// FIN EXPORT EXCEL DATAGRID
// FIN EXPORT EXCEL DATAGRID
return (
<div className="intranet_mes_stagiaires">
@ -6462,14 +6434,14 @@ function ExportMenuItem(props) {
</div>}
{ /**** Dialog info stagiaire */}
<Dialog
open={Dialog_stagiaire_open}
//onClose={Dialog_stagiaire_handleClose}
className="displaypartnersession"
static
onClose={() => null}
@ -6494,7 +6466,7 @@ function ExportMenuItem(props) {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle style={{ cursor: 'move', fontFamily:"DM Sans"}} id="draggable-dialog-title">Info Stagiaire</DialogTitle>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title">Info Stagiaire</DialogTitle>
<DialogContent className="DialogContent_width">
<div className="div_row_dialog">
@ -6640,7 +6612,7 @@ function ExportMenuItem(props) {
<DialogActions>
<IconButton
<IconButton
autoFocus
onClick={Dialog_stagiaire_handleClose_buton}
color="primary"
@ -6671,7 +6643,7 @@ function ExportMenuItem(props) {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}
@ -6715,7 +6687,7 @@ function ExportMenuItem(props) {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle style={{ cursor: 'move', fontFamily:"DM Sans"}} id="draggable-dialog-title">Tuteur {quel_tuteur}</DialogTitle>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title">Tuteur {quel_tuteur}</DialogTitle>
{String(quel_tuteur) === "1" && <DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_tuteur_1_message}
@ -7097,7 +7069,7 @@ function ExportMenuItem(props) {
<DialogActions>
<IconButton
<IconButton
autoFocus
onClick={Dialog_tuteur_1_handleClose_buton}
color="primary"
@ -7133,7 +7105,7 @@ function ExportMenuItem(props) {
static
onClose={() => null}>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "30rem" }}>
@ -7445,7 +7417,7 @@ function ExportMenuItem(props) {
</Dialog>
{ /**** FIN Dialog Convention */}
<h3 style={{ fontFamily:'DM Sans' }}> Mes stagiaires </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Mes stagiaires </h3>
<div className="div_row">
<div className="titre1"> Utilisez les filtres !</div>
@ -7950,7 +7922,7 @@ function ExportMenuItem(props) {
}}
>
<DataGrid
// checkboxSelection
// checkboxSelection
components={{
Toolbar: CustomToolbar
}}
@ -8057,9 +8029,9 @@ function ExportMenuItem(props) {
rowsPerPageOptions={[10]}
disableSelectionOnClick
/* components={{
Toolbar: GridToolbar,
}}*/
/* components={{
Toolbar: GridToolbar,
}}*/
//sx={datagridSx}
getCellClassName={(params) => {
//field === 'distantiel'
@ -8343,7 +8315,7 @@ function ExportMenuItem(props) {
</div>}
</div>
@ -8352,7 +8324,7 @@ function ExportMenuItem(props) {
<div className="div_row" style={{ "border": "None" }}>
{/*} <div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
{/*} <div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined" onClick={submenu_import_stagiaire} className="detail_class_submenu bton_import_excel"
id='menu_import_participant' name='menu_import_participant'>Importer des participants excel &nbsp;
@ -8385,20 +8357,15 @@ function ExportMenuItem(props) {
</div>
<div className="div_row" ref={myRef_details} id="myRef_details"> &nbsp;</div>
{((selected_id && String(selected_id).length > 2) || (String(addOneParticipant) === "1")) && <div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_stagaire} className="detail_class_submenu" id='detail_session' name='detail_session'>Détail Participant</Button>
<Button variant="outlined" onClick={submenu_piece_jointe} className="detail_class_submenu" id='piece_jointe' name='piece_jointe'>Pièces Jointes </Button>
{/* <Button variant="outlined" onClick={submenu_sessions} className="detail_class_submenu" id='preinscrit' name='preinscrit'>Détail Session </Button>
<Button variant="outlined" onClick={submenu_absence} className="detail_class_submenu" id='absence' name='absence'>Absence </Button> */}
{String(props.formation_initiale) === "1" && String(addOneParticipant) !== "1" && <Button variant="outlined" onClick={submenu_unite_enseignement} className="detail_class_submenu" id='ue' name='ue'>Unit. Enseignement </Button>}
{String(props.formation_initiale) === "1" && String(addOneParticipant) !== "1" && <Button variant="outlined" onClick={submenu_notes} className="detail_class_submenu" id='notes' name='ue'>Notes </Button>}
{String(addOneParticipant) !== "1" && String(history_securite_read) === "1" && <Button variant="outlined" onClick={submenu_historique} className="detail_class_submenu" id='historique' name='historique'>Historique </Button>}
</div>}
@ -10313,7 +10280,7 @@ function ExportMenuItem(props) {
<hr className="hr_break" />
</div>
<div className="div_row" style={{ "border": "None", "fontSize": "22px", "fontWeight": "600", "padding": "5px" }}>
Acces Plateforme E-Learning (LMS)
Acces Plateforme E-Learning (LMS)
</div>
<div className="div_row" style={{ "border": "None" }}>
@ -10726,7 +10693,7 @@ function ExportMenuItem(props) {
{String(props.formation_initiale) === "1" && String(submenu) === "ue" && String(addOneParticipant) !== "1" && <div className="div_row" style={{ "border": "None", "background": '#F8F9F9', "padding": '5px' }}>
<h3 style={{ fontFamily:'DM Sans' }}> Gestion des UE d'un inscrit </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Gestion des UE d'un inscrit </h3>
<div className="div_row">
<div className="session_caract"> <b>Unite D'enseignement </b> <br />
@ -10799,7 +10766,7 @@ function ExportMenuItem(props) {
//console.log(" lecture de New_Get_Inscrit_List_Evaluation_Par_UE_result[i] = ", New_Get_Inscrit_List_Evaluation_Par_UE_result[i])
if (data.class_ue_id && String(data.class_ue_id) !== "" && data.class_ue_id === New_Get_Inscrit_List_Evaluation_Par_UE_result[i].class_eu_id &&
data.type_evaluation_id === New_Get_Inscrit_List_Evaluation_Par_UE_result[i].type_eval__id
data.type_evaluation_id === New_Get_Inscrit_List_Evaluation_Par_UE_result[i].type_eval_id
) {
//console.log(" GAGNEEEE ");
return data;
@ -10872,7 +10839,7 @@ function ExportMenuItem(props) {
{String(props.formation_initiale) === "1" && String(submenu) === "notes" && String(display_notes) === "1" && String(addOneParticipant) !== "1" && <div className="div_row" style={{ "border": "None", "background": '#F8F9F9', "padding": '5px' }}>
<h3 style={{ fontFamily:'DM Sans' }}> Les notes de l'inscrit </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Les notes de l'inscrit </h3>
<div className="div_row" style={{ "textAlign": "right", "marginTop": "0.5rem" }}>
<Button className="bton_emarge" onClick={(event) => {
Export_Inscrit_Notes();

View File

@ -374,7 +374,7 @@ const Intranet_Tous_Documents = (props) => {
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}

View File

@ -44,7 +44,7 @@ import Link from '@mui/material/Link';
import { PiDotsThree } from "react-icons/pi";
import { IoAddCircleOutline } from "react-icons/io5";
import AttachFileIcon from '@mui/icons-material/AttachFile';
import { FcAcceptDatabase, FcPlanner } from "react-icons/fc";
import { FcAcceptDatabase, FcPlanner } from "react-icons/fc";
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import Module_Historique_Action from "./Module_Historique_Action";
@ -2161,7 +2161,7 @@ const Jury = (props) => {
if (document.getElementsByName(String(current_menu_header)) && document.getElementsByName(String(current_menu_header))[0]) {
document.getElementsByName(String(current_menu_header))[0].style.fontWeight = "700";
document.getElementsByName(String(current_menu_header))[0].style.backgroundColor = "#104277";
document.getElementsByName(String(current_menu_header))[0].style.backgroundColor = "#107758";
document.getElementsByName(String(current_menu_header))[0].style.color = "white";
}
}
@ -3426,7 +3426,7 @@ const Jury = (props) => {
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("archive", "0");
var myurl = process.env.REACT_APP_API_URL + "myclass/api/GetAllValideSessionPartner_List/";
@ -4459,7 +4459,7 @@ const Jury = (props) => {
>
<DialogTitle> Délibération du Jury</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Délibération du Jury</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "30rem" }}>
<DialogContentText>
{Dialog_1_message}
@ -4602,7 +4602,7 @@ const Jury = (props) => {
>
<DialogTitle>Gestion membres jury</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Gestion membres jury</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "30rem" }}>
<DialogContentText>
{Dialog_1_message}
@ -4920,7 +4920,7 @@ const Jury = (props) => {
>
<DialogTitle>Gestion soutenance</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Gestion soutenance</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "30rem" }}>
<DialogContentText>
{Dialog_1_message}
@ -5787,7 +5787,7 @@ const Jury = (props) => {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_1_message}
@ -6349,7 +6349,7 @@ const Jury = (props) => {
},
"& .MuiDataGrid-columnHeaders": {
backgroundColor: "#c8cfd5",

View File

@ -3080,7 +3080,7 @@ const Materiel_Salle = (props) => {
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}
@ -3136,7 +3136,7 @@ const Materiel_Salle = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}
@ -3180,7 +3180,7 @@ const Materiel_Salle = (props) => {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_1_message}
@ -3388,7 +3388,7 @@ const Materiel_Salle = (props) => {
</Dialog>
{/*** FIn Dialog detail eventement */}
<h3 style={{ fontFamily: 'DM Sans' }}> Mes Salles </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Les Salles </h3>
<div className="div_row">
<div className="titre1"> Utilisez les filtres !</div>
<div className="div_row" style={{ "marginBottom": "5px" }}>

View File

@ -2843,7 +2843,7 @@ const Materiels = (props) => {
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}
@ -2897,7 +2897,7 @@ const Materiels = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}
@ -2941,7 +2941,7 @@ const Materiels = (props) => {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_1_message}

View File

@ -904,7 +904,7 @@ const Module_Absence = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_1_message}

View File

@ -1194,7 +1194,7 @@ const Module_Agenda = (props) => {
const New_Option_Type_Ressource = [
{ "id": "0", "label": "Employe", "value": "ressource_humaine" },
{ "id": "1", "label": "Materiel", "value": "ressource_materielle" },
{ "id": "1", "label": "Materiel & Salle", "value": "ressource_materielle" },
]
@ -1315,7 +1315,7 @@ const Module_Agenda = (props) => {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_1_message}
@ -1661,7 +1661,7 @@ const Module_Agenda = (props) => {
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
</div>
{tab_selected_users.length <= 1 && <div className="div_row" style={{ "border": "None" }}>
{agenda_owner_name && String(agenda_owner_name) === "Mon Planning" && <h5> <i> {agenda_owner_name} </i> </h5>}
{agenda_owner_name && String(agenda_owner_name) !== "Mon Planning" && tab_selected_users.length === 1 && <h5> Vous êtes sur le planning de <i> {agenda_owner_name} - ({agenda_owner_type}) </i> </h5>}

View File

@ -602,7 +602,7 @@ const Module_Attestation_Formation = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_1_message}
@ -656,7 +656,7 @@ const Module_Attestation_Formation = (props) => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "30rem" }}>
<DialogContentText>
{Dialog_1_message}

View File

@ -0,0 +1,549 @@
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'
import ent_studend_img from "../mysy_img/ent_studend_img.jpg";
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/Ent_Student_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/Ent_Student_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);
formData.append("type", "student");
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 style={{ width: '100%', }}>
<h3 style={{ fontFamily: 'DM Sans' }}> Bienvenue sur Espace Numérique de Travail </h3>
</div>
<div 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 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>
</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";
import client_intranet from "../mysy_img/client_intranet.jpg";
function Module_Connexion_Intranet_Client() {
const [isconnected, setisconnected] = useState("");
@ -107,6 +102,7 @@ function Module_Connexion_Intranet_Client() {
formData.append("email", mymail);
formData.append("pwd", mypwd);
formData.append("type", "user");
var re = /\S+@\S+\.\S+/;
if (re.test(mymail) === false) {
@ -214,8 +210,6 @@ function Module_Connexion_Intranet_Client() {
if (document.getElementsByName("user_account") && document.getElementsByName("user_account")[0])
document.getElementsByName("user_account")[0].style.backgroundColor = "#ffffff";
}
function menu_user_account() {
@ -381,138 +375,154 @@ function Module_Connexion_Intranet_Client() {
<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" }}>Intranet Utilisateur</Button>
<div style={{ width: '100%', }}>
<h3 style={{ fontFamily: 'DM Sans' }}> Bienvenue sur l'Intranet </h3>
</div>
<div style={{ width: '100%', }}>
<div style={{ width: '50%', float: 'left' }}>
<img src={client_intranet} style={{ height: '100%', marginTop:'5rem' }} />
</div>
<div className="div_centre">
<div style={{ width: '50%', float: 'left', paddingTop: '2rem' }}>
<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>
<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" }}>Intranet Client</Button>
<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>
</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>
{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 />
<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>
<label for="exampleFormControlTextarea1">Saisir votre email</label>
<br />
<input type="text" id="resetemailvalue" name="resetemailvalue" rows="1" cols="20"
className="zone_mail" />
<br />
</div>
<Input type="password" placeholder="Password" name="pwd" />
</FormGroup>
<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>
{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 />
<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>
<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>
<div className="text_pwd_crit" style={{ "textAlign": "center" }}>
Je ne suis pas un robot <br />
<div >
<option value="partner">Partenaire </option>
<option value="user">Utilisateur </option>
</select>
</a>
<br />
<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 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>
</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>
</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 />

View File

@ -1528,7 +1528,7 @@ const Module_Editique = (props) => {
>
<DialogTitle>MySy Warning</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Warning</DialogTitle>
<DialogContent>
<DialogContentText>
<ImWarning /> {Dialog_Access_Right_message}
@ -1553,7 +1553,7 @@ const Module_Editique = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_1_message}
@ -2238,7 +2238,7 @@ const Module_Editique = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "30rem" }}>
<DialogContentText>
{Dialog_1_message}
@ -2875,7 +2875,7 @@ const Module_Editique = (props) => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "10rem" }}>
<DialogContentText>
<div style={{ "textAlign": "left" }}>
@ -2916,7 +2916,7 @@ const Module_Editique = (props) => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "10rem" }}>
<DialogContentText>
<div style={{ "textAlign": "left" }}>

View File

@ -1,83 +1,32 @@
import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
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 DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box';
import { Typography, LinearProgress, sliderClasses } from '@mui/material';
import styled from 'styled-components';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
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 { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
//import FullCalendar from "@fullcalendar/react";
import daygridPlugin from "@fullcalendar/daygrid";
//import interactionPlugin from "@fullcalendar/interaction";
//import timeGridPlugin from "@fullcalendar/timegrid";
import Checkbox from '@mui/material/Checkbox';
import allLocales from '@fullcalendar/core/locales-all'
import { RepeatOnRounded, ResetTvRounded, RestaurantMenu } from "@mui/icons-material";
import { alignPropType } from "react-bootstrap/esm/types";
import AttachFileIcon from '@mui/icons-material/AttachFile';
import ToggleSwitch from "./ToggleSwitch";
import ToggleSwitch_v2_mysy from "./ToggleSwitch_v2_mysy";
import ToggleSwitch_v3_mysy from "./ToggleSwitch_v3_mysy";
import Autocomplete from '@mui/material/Autocomplete';
import FullCalendar, { formatDate } from "@fullcalendar/react";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import interactionPlugin from "@fullcalendar/interaction";
import { FcSearch } from "react-icons/fc";
import { Fab } from "@material-ui/core";
import {
ListItem,
ListItemText,
useTheme,
} from "@mui/material";
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import ChevronRightIcon from '@mui/icons-material/ChevronRight';
import { TreeView } from '@mui/x-tree-view/TreeView';
import { TreeItem } from '@mui/x-tree-view/TreeItem';
import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io";
import { FcViewDetails, FcDisapprove, FcInfo } from "react-icons/fc";
import { convertNwSeToNeSw } from "google-map-react";
import { IoMdAddCircle } from "react-icons/io";
import FormGroup from '@mui/material/FormGroup';
import FormControlLabel from '@mui/material/FormControlLabel';
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
const Module_Email_Management = (props) => {
const myconntected_employee_id = props.conntected_employee_id;
@ -248,7 +197,10 @@ const Module_Email_Management = (props) => {
else {
setGet_Partner_List_SendEmail_Document_api("false");
setGet_Partner_List_SendEmail_Document_message(res.data.message);
alert(res.data.message);
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("error");
}
}).catch((error) => {
@ -384,7 +336,11 @@ const Module_Email_Management = (props) => {
else {
setGet_Given_Partner_Document_Data_By_id_api("false");
setGet_Given_Partner_Document_Data_By_id_message(res.data.message);
alert(res.data.message);
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("error");
}
}).catch((error) => {
@ -401,40 +357,53 @@ const Module_Email_Management = (props) => {
const [Send_Front_Email_message, setSend_Front_Email_message] = useState();
const [Send_Front_Email_result, setSend_Front_Email_result] = useState();
function Send_Front_Email() {
/*
/!\ : Pour eviter les spams, ce module ne doit pas envoyer plus de 20 email à la fois
*/
const tab_destinataire = email_destinataire.split(',');
if (tab_destinataire.length > 30) {
alert(" Vous ne pouvez pas envoyer plus de 20 emails (destinataires) à la fois.");
if (tab_destinataire.length > 50) {
// alert(" Vous ne pouvez pas envoyer plus de 50 emails (destinataires) à la fois.");
setdisplay_alert_mysy("1");
setalert_message(" Vous ne pouvez pas envoyer plus de 50 emails (destinataires) à la fois.");
setalert_type("error");
return;
}
const tab_email_cc = email_cc.split(',');
if (tab_email_cc.length > 10) {
alert(" Vous ne pouvez mettre plus de 10 adresses en copie.");
// alert(" Vous ne pouvez mettre plus de 10 adresses en copie.");
setdisplay_alert_mysy("1");
setalert_message(" Vous ne pouvez mettre plus de 10 adresses en copie.");
setalert_type("error");
return;
}
const tab_email_bcc = email_bcc.split(',');
if (tab_email_bcc.length > 10) {
alert(" Vous ne pouvez mettre plus de 10 adresses en copie-cachée.");
// alert(" Vous ne pouvez mettre plus de 10 adresses en copie-cachée.");
setdisplay_alert_mysy("1");
setalert_message(" Vous ne pouvez mettre plus de 10 adresses en copie-cachée.");
setalert_type("error");
return;
}
if (tab_email_pieces_jointes_result.length > 10) {
alert("Vous ne pouvez pas envoyer plus de 5 pièces jointes à la fois.");
if (tab_email_pieces_jointes_result.length > 5) {
// alert("Vous ne pouvez pas envoyer plus de 5 pièces jointes à la fois.");
setdisplay_alert_mysy("1");
setalert_message("Vous ne pouvez pas envoyer plus de 5 pièces jointes à la fois.");
setalert_type("error");
return;
}
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
@ -445,7 +414,7 @@ const Module_Email_Management = (props) => {
form.append("email_corps", field_programme);
form.append("related_collection", props.related_collection);
form.append("email_sujet", email_sujet);
// pièce jointe
@ -454,7 +423,7 @@ const Module_Email_Management = (props) => {
}
var myurl = "";
var myurl = "";
if (props.related_collection === "nointernalcontact") {
myurl = process.env.REACT_APP_API_URL + "myclass/api/Prepare_and_Send_Email_From_Front_For_Unknown_Contact/";
@ -475,8 +444,19 @@ const Module_Email_Management = (props) => {
} else {
form.append("include_tuteur", "0");
}
if (store_file_in_ent === true) {
form.append("store_file_in_ent", "1");
} else {
form.append("store_file_in_ent", "0");
}
}
console.log(" ### form = ",form)
// return;
setLoading(true);
@ -497,13 +477,20 @@ const Module_Email_Management = (props) => {
if (props.Clean_Selected_Rows_For_Email)
props.Clean_Selected_Rows_For_Email();
alert(res.data.message);
//alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("success");
}
else {
setSend_Front_Email_api("false");
setSend_Front_Email_message(res.data.message);
alert(res.data.message);
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("error");
}
}).catch((error) => {
@ -558,15 +545,23 @@ const Module_Email_Management = (props) => {
if (file_type !== "application/pdf") {
alert("Le fichier n'est pas de type PDF");
// alert("Le fichier n'est pas de type PDF");
setdisplay_alert_mysy("1");
setalert_message("Le fichier n'est pas de type PDF");
setalert_type("error");
return;
}
if (file_size > 10000000) {
alert("Le fichier ne doit pas depasser un 1 Méga octets");
console.log("Le fichier ne doit pas depasser un 1 Méga octets");
// alert("Le fichier ne doit pas depasser un 1 Méga octets");
// console.log("Le fichier ne doit pas depasser un 1 Méga octets");
setdisplay_alert_mysy("1");
setalert_message("Le fichier ne doit pas depasser un 1 Méga octets");
setalert_type("error");
return;
}
@ -618,6 +613,19 @@ const Module_Email_Management = (props) => {
const [include_client, setinclude_client] = useState(false);
const [include_tuteur, setinclude_tuteur] = useState(false);
const [store_file_in_ent, setstore_file_in_ent] = useState(false);
const handleChange_file_to_ent = (event) => {
if (event.currentTarget.checked) {
setstore_file_in_ent(true);
}
else {
setstore_file_in_ent(false);
}
}
const handleChange_include_tuteur = (event) => {
if (event.currentTarget.checked) {
setinclude_tuteur(true);
@ -639,6 +647,22 @@ const Module_Email_Management = (props) => {
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("");
}
return (
<div className="module_email_management">
@ -646,6 +670,16 @@ const Module_Email_Management = (props) => {
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
{/*** Affichage des messages d'alerte*/}
{display_alert_mysy && String(display_alert_mysy) === "1" &&
<Module_Alert_Confirmation alert_message={alert_message}
alert_type={alert_type}
clear_alert_message={clear_alert_message}
clear_alert_type={clear_alert_type}
clear_display_alert_mysy={clear_display_alert_mysy}
/>
}
{/*** FIN Affichage des messages d'alerte*/}
<Dialog
@ -660,7 +694,7 @@ const Module_Email_Management = (props) => {
open={Dialog_1_open}
>
<DialogTitle></DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> </DialogTitle>
<DialogContent style={{ "width": "400px" }}>
<DialogContentText>
{Dialog_1_message}
@ -891,8 +925,6 @@ const Module_Email_Management = (props) => {
</div>
<div>
<div className="div_row" style={{ "padding": "5px" }}>
<div style={{ "fontSize": "12px" }}>
@ -995,6 +1027,25 @@ const Module_Email_Management = (props) => {
</div>
</div>
</div>}
{tab_email_pieces_jointes_result && tab_email_pieces_jointes_result.length > 0 &&
<div style={{ position: 'flex', flexDirection: 'row', justifyContent: 'right', alignItems: 'right' }}>
<FormControlLabel
control={
<Checkbox
size="small"
checked={store_file_in_ent}
onChange={handleChange_file_to_ent}
name="send_file_to_ent"
/>
}
label="Partage ENT"
/>
</div>}
</div>
</div>}
@ -1006,8 +1057,6 @@ const Module_Email_Management = (props) => {
<Popup
trigger={
<Button onClick={(e) => {
}} className="bton_enreg_dialog">Envoyer</Button>

View File

@ -0,0 +1,496 @@
import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import Checkbox from '@mui/material/Checkbox';
import excel_icone from "../mysy_img/excel_icone.png";
import fileDownload from 'js-file-download'
import { FcInfo } from "react-icons/fc";
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import { FcAcceptDatabase, } from "react-icons/fc";
import { format } from 'date-fns'
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle, AiOutlineConsoleSql } from "react-icons/ai";
import Box from '@mui/material/Box';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
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 img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { Fab } from "@material-ui/core";
import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io";
import { AiTwotoneSave } from "react-icons/ai";
import { FcEditImage } from "react-icons/fc";
import ToggleSwitch from "./ToggleSwitch";
import { FcSpeaker } from "react-icons/fc";
import Autocomplete from '@mui/material/Autocomplete';
import { FcOpenedFolder } from "react-icons/fc";
import Module_Absence from "./Module_Absence";
import { RiMoreFill } from "react-icons/ri";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import moment from "moment";
import 'moment/locale/fr';
import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
import { gridClasses } from '@mui/x-data-grid';
import Link from '@mui/material/Link';
import { PiDotsThree } from "react-icons/pi";
import {
GridToolbarContainer, GridToolbarExport, GridToolbarColumnsButton,
GridToolbarFilterButton, GridToolbarDensitySelector, GridToolbarExportContainer, useGridApiContext,
gridFilteredSortedRowIdsSelector,
gridVisibleColumnFieldsSelector,
GridValueGetterParams,
GridPreferencePanelsValue,
} from '@mui/x-data-grid';
import * as XLSX from 'xlsx';
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import CancelPresentationIcon from '@mui/icons-material/CancelPresentation';
import { makeStyles } from "@material-ui/core/styles";
import Paper from '@material-ui/core/Paper';
import Draggable from 'react-draggable';
import { IconButton } from '@material-ui/core';
function PaperComponent(props) {
return (
<Draggable
handle="#draggable-dialog-title"
cancel={'[class*="MuiDialogContent-root"]'}
>
<Paper {...props} />
</Draggable>
);
}
const useStyles = makeStyles((theme) => ({
dialog: {
position: 'absolute',
// left: 10,
top: 400
},
paper: {
overflowY: 'unset',
},
customizedButton: {
position: 'absolute',
left: '98%',
top: '-3%',
backgroundColor: 'lightgray',
color: 'gray',
},
}));
const Module_Ent_Mes_Documents = (props) => {
const classes = useStyles();
const history = useHistory();
const [submenu, setsubmenu] = useState("");
const filters = [
{ value: 'email', label: 'Email' },
{ value: 'nom', label: 'Nom' },
{ value: 'prenom', label: 'Prénom' }
]
const [selectedfilt1, setselectedfilt1] = useState("");
const [selectedfilt2, setselectedfilt2] = useState("");
const [selectedfilt3, setselectedfilt3] = useState("");
function ExpandableCell_50({ value }) {
const [expanded, setExpanded] = React.useState(false);
return (
<nav>
{value && <div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
{expanded ? value : value.slice(0, 50)}&nbsp;
{value.length > 50 && (
// eslint-disable-next-line jsx-a11y/anchor-is-valid
<Link
type="button"
component="button"
sx={{ fontSize: 'inherit' }}
onClick={() => setExpanded(!expanded)}
>
{expanded ? <nav> <PiDotsThree />Réduire</nav> : <nav> <PiDotsThree />Voir</nav>}
</Link>
)}
</div>}
{value && <div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
&nbsp;
</div>
}
</nav>
);
}
function Display_Colunm_text({ value }) {
return (
<div style={{ paddingLeft: "5px", paddingRight: "10px", "display": "block", wordBreak: "break-all" }}>
{value}&nbsp;
</div>
);
}
const columns_apprenant_inscriptions = [
{ field: 'id', headerName: 'id', hide: true },
{ field: '_id', headerName: '_id', hide: true },
{ field: 'session_id', headerName: 'session_id', hide: true, Width: 1 },
{ field: 'session_code', headerName: 'Code Session', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'class_title', headerName: 'Titre Formation', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'class_internal_url', headerName: 'class_internal_url', hide: true, Width: 1 },
{
field: 'status', headerName: 'Statut', hide: false, flex: 1, minWidth: 50, maxWidth: 70,
valueFormatter: (params) => {
if (String(params.value) === "0")
return "Pré.";
else if (String(params.value) === "1")
return "Ins";
else if (String(params.value) === "-1")
return "Ann";
else if (String(params.value) === "2")
return "Enc";
else
return "???";
}
},
{ field: 'client_rattachement_id', headerName: 'client__id', hide: true, Width: 1 },
{ field: 'client_rattachement_nom', headerName: 'Client', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'date_debut', headerName: 'Début', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'date_fin', headerName: 'Fin', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'presentiel', headerName: 'Présentiel', hide: false, flex: 1, minWidth: 50, maxWidth: 70 },
{ field: 'distanciel', headerName: 'Distantiel', hide: false, flex: 1, minWidth: 50, maxWidth: 70 },
{ field: 'class_recyclage_delai', headerName: 'Recycl. Delai', hide: false, flex: 1, minWidth: 100, },
{ field: 'class_recyclage_periodicite', headerName: 'Recycl. Perio', hide: false, flex: 1, minWidth: 100, },
{ field: 'nb_jour_avant_recyclage', headerName: 'Jrs avant Recycl.', hide: false, flex: 1, minWidth: 100, },
{
field: "Detail", headerName: 'Voir détail',
renderCell: (cellValues) => {
return (
<Button
onClick={(event) => {
//handleClick_edit_apprenant_From_Line(cellValues.row.id);
}}
>
<FcViewDetails />
</Button>
);
}
},
{
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<Popup
trigger={<Button
>
<CiTrash />
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, l'inscription sera <i><font color="red"> définitivement supprimée</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
//handleClick_delete_Apprenant(event, cellValues);
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
);
}
},
]
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 [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("");
}
return (
<div className="module_ent_mes_documents">
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
{/*** Affichage des messages d'alerte*/}
{display_alert_mysy && String(display_alert_mysy) === "1" &&
<Module_Alert_Confirmation alert_message={alert_message}
alert_type={alert_type}
clear_alert_message={clear_alert_message}
clear_alert_type={clear_alert_type}
clear_display_alert_mysy={clear_display_alert_mysy}
/>
}
{/*** FIN Affichage des messages d'alerte*/}
<h3 style={{ fontFamily: 'DM Sans' }}> Mes Documents </h3>
<div>
<div className="titre1"> Utilisez les filtres !</div>
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter" >
<TextField
name="filtre1"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
value={p_filtre1}
onChange={(e) => {
setp_filtre1(e.target.value)
}}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Email &nbsp;&nbsp;</MenuItem>
<MenuItem value="nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Nom &nbsp;</MenuItem>
<MenuItem value="prenom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Prénom &nbsp;</MenuItem>
</TextField>
</div>
<div className="div_row_droite texte_area_filter_value" >
{p_filtre1 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre1_value"
id="filtre1_value"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_filtre1_value}
onChange={(e) => { setp_filtre1_value(e.target.value); }}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<AiFillCloseCircle
style={{ 'cursor': "pointer", "color": "orangered" }}
onClick={(e) => {
setp_filtre1_value("");
}} />
</InputAdornment>
),
}}
/>
}
</div>
{p_filtre1 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip01" data-tooltip-html="Ajouter une nouvelle ligne de filtre">
&nbsp; <MdAddCircleOutline onClick={(e) => {
setp_filtre2("1");
}} />
</a>
</div>}
{p_filtre1 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip02" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip02" data-tooltip-html="Supprimer cette ligne de filtre">
&nbsp; <MdRemoveCircleOutline onClick={(e) => {
setp_filtre1();
setp_filtre1_value();
}}
/>
</a>
</div>}
</div>
{p_filtre2 &&
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter">
<TextField
name="filtre2"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
options={filters}
value={p_filtre2}
onChange={(e) => {
setp_filtre2(e.target.value)
}}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Email &nbsp;&nbsp;</MenuItem>
<MenuItem value="nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Nom &nbsp;</MenuItem>
<MenuItem value="prenom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Prénom &nbsp;</MenuItem>
</TextField>
</div>
<div className="div_row_droite texte_area_filter" >
{String(p_filtre2).length > 3 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre2_value"
id="filtre2_value"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_filtre2_value}
onChange={(e) => setp_filtre2_value(e.target.value)}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<AiFillCloseCircle
style={{ 'cursor': "pointer", "color": "orangered" }}
onClick={(e) => {
setp_filtre2_value("");
}} />
</InputAdornment>
),
}}
/>}
</div>
{String(p_filtre2).length > 3 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip04" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip04" data-tooltip-html="Supprimer cette ligne de filtre">
&nbsp; <MdRemoveCircleOutline
onClick={(e) => {
setp_filtre2();
setp_filtre2_value();
}}
/>
</a>
</div>}
</div>
}
{<div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
<Button variant="contained" className="bton_enreg" onClick={"Get_All_Apprenant"}>Rechercher
</Button>
</div>
<div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_annule" onClick={"clean_all_filters"}>Annuler
</Button>
</div>
</div>}
</div>
<br />
</div >
);
}
export default Module_Ent_Mes_Documents;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,499 @@
import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import Checkbox from '@mui/material/Checkbox';
import excel_icone from "../mysy_img/excel_icone.png";
import fileDownload from 'js-file-download'
import { FcInfo } from "react-icons/fc";
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import { FcAcceptDatabase, } from "react-icons/fc";
import { format } from 'date-fns'
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle, AiOutlineConsoleSql } from "react-icons/ai";
import Box from '@mui/material/Box';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
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 img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { Fab } from "@material-ui/core";
import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io";
import { AiTwotoneSave } from "react-icons/ai";
import { FcEditImage } from "react-icons/fc";
import ToggleSwitch from "./ToggleSwitch";
import { FcSpeaker } from "react-icons/fc";
import Autocomplete from '@mui/material/Autocomplete';
import { FcOpenedFolder } from "react-icons/fc";
import Module_Absence from "./Module_Absence";
import { RiMoreFill } from "react-icons/ri";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import moment from "moment";
import 'moment/locale/fr';
import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
import { gridClasses } from '@mui/x-data-grid';
import Link from '@mui/material/Link';
import { PiDotsThree } from "react-icons/pi";
import {
GridToolbarContainer, GridToolbarExport, GridToolbarColumnsButton,
GridToolbarFilterButton, GridToolbarDensitySelector, GridToolbarExportContainer, useGridApiContext,
gridFilteredSortedRowIdsSelector,
gridVisibleColumnFieldsSelector,
GridValueGetterParams,
GridPreferencePanelsValue,
} from '@mui/x-data-grid';
import * as XLSX from 'xlsx';
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import CancelPresentationIcon from '@mui/icons-material/CancelPresentation';
import { makeStyles } from "@material-ui/core/styles";
import Paper from '@material-ui/core/Paper';
import Draggable from 'react-draggable';
import { IconButton } from '@material-ui/core';
function PaperComponent(props) {
return (
<Draggable
handle="#draggable-dialog-title"
cancel={'[class*="MuiDialogContent-root"]'}
>
<Paper {...props} />
</Draggable>
);
}
const useStyles = makeStyles((theme) => ({
dialog: {
position: 'absolute',
// left: 10,
top: 400
},
paper: {
overflowY: 'unset',
},
customizedButton: {
position: 'absolute',
left: '98%',
top: '-3%',
backgroundColor: 'lightgray',
color: 'gray',
},
}));
const Module_Ent_Mes_Notes = (props) => {
const classes = useStyles();
const history = useHistory();
const [submenu, setsubmenu] = useState("");
const filters = [
{ value: 'email', label: 'Email' },
{ value: 'nom', label: 'Nom' },
{ value: 'prenom', label: 'Prénom' }
]
const [selectedfilt1, setselectedfilt1] = useState("");
const [selectedfilt2, setselectedfilt2] = useState("");
const [selectedfilt3, setselectedfilt3] = useState("");
function ExpandableCell_50({ value }) {
const [expanded, setExpanded] = React.useState(false);
return (
<nav>
{value && <div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
{expanded ? value : value.slice(0, 50)}&nbsp;
{value.length > 50 && (
// eslint-disable-next-line jsx-a11y/anchor-is-valid
<Link
type="button"
component="button"
sx={{ fontSize: 'inherit' }}
onClick={() => setExpanded(!expanded)}
>
{expanded ? <nav> <PiDotsThree />Réduire</nav> : <nav> <PiDotsThree />Voir</nav>}
</Link>
)}
</div>}
{value && <div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
&nbsp;
</div>
}
</nav>
);
}
function Display_Colunm_text({ value }) {
return (
<div style={{ paddingLeft: "5px", paddingRight: "10px", "display": "block", wordBreak: "break-all" }}>
{value}&nbsp;
</div>
);
}
const columns_apprenant_inscriptions = [
{ field: 'id', headerName: 'id', hide: true },
{ field: '_id', headerName: '_id', hide: true },
{ field: 'session_id', headerName: 'session_id', hide: true, Width: 1 },
{ field: 'session_code', headerName: 'Code Session', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'class_title', headerName: 'Titre Formation', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'class_internal_url', headerName: 'class_internal_url', hide: true, Width: 1 },
{
field: 'status', headerName: 'Statut', hide: false, flex: 1, minWidth: 50, maxWidth: 70,
valueFormatter: (params) => {
if (String(params.value) === "0")
return "Pré.";
else if (String(params.value) === "1")
return "Ins";
else if (String(params.value) === "-1")
return "Ann";
else if (String(params.value) === "2")
return "Enc";
else
return "???";
}
},
{ field: 'client_rattachement_id', headerName: 'client__id', hide: true, Width: 1 },
{ field: 'client_rattachement_nom', headerName: 'Client', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'date_debut', headerName: 'Début', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'date_fin', headerName: 'Fin', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'presentiel', headerName: 'Présentiel', hide: false, flex: 1, minWidth: 50, maxWidth: 70 },
{ field: 'distanciel', headerName: 'Distantiel', hide: false, flex: 1, minWidth: 50, maxWidth: 70 },
{ field: 'class_recyclage_delai', headerName: 'Recycl. Delai', hide: false, flex: 1, minWidth: 100, },
{ field: 'class_recyclage_periodicite', headerName: 'Recycl. Perio', hide: false, flex: 1, minWidth: 100, },
{ field: 'nb_jour_avant_recyclage', headerName: 'Jrs avant Recycl.', hide: false, flex: 1, minWidth: 100, },
{
field: "Detail", headerName: 'Voir détail',
renderCell: (cellValues) => {
return (
<Button
onClick={(event) => {
//handleClick_edit_apprenant_From_Line(cellValues.row.id);
}}
>
<FcViewDetails />
</Button>
);
}
},
{
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<Popup
trigger={<Button
>
<CiTrash />
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, l'inscription sera <i><font color="red"> définitivement supprimée</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
//handleClick_delete_Apprenant(event, cellValues);
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
);
}
},
]
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 [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("");
}
return (
<div className="module_ent_mes_notes">
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
{/*** Affichage des messages d'alerte*/}
{display_alert_mysy && String(display_alert_mysy) === "1" &&
<Module_Alert_Confirmation alert_message={alert_message}
alert_type={alert_type}
clear_alert_message={clear_alert_message}
clear_alert_type={clear_alert_type}
clear_display_alert_mysy={clear_display_alert_mysy}
/>
}
{/*** FIN Affichage des messages d'alerte*/}
<h3 style={{ fontFamily: 'DM Sans' }}> Mes Notes </h3>
<div>
<div className="titre1"> Utilisez les filtres !</div>
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter" >
<TextField
name="filtre1"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
value={p_filtre1}
onChange={(e) => {
setp_filtre1(e.target.value)
}}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Email &nbsp;&nbsp;</MenuItem>
<MenuItem value="nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Nom &nbsp;</MenuItem>
<MenuItem value="prenom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Prénom &nbsp;</MenuItem>
</TextField>
</div>
<div className="div_row_droite texte_area_filter_value" >
{p_filtre1 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre1_value"
id="filtre1_value"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_filtre1_value}
onChange={(e) => { setp_filtre1_value(e.target.value); }}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<AiFillCloseCircle
style={{ 'cursor': "pointer", "color": "orangered" }}
onClick={(e) => {
setp_filtre1_value("");
}} />
</InputAdornment>
),
}}
/>
}
</div>
{p_filtre1 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip01" data-tooltip-html="Ajouter une nouvelle ligne de filtre">
&nbsp; <MdAddCircleOutline onClick={(e) => {
setp_filtre2("1");
}} />
</a>
</div>}
{p_filtre1 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip02" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip02" data-tooltip-html="Supprimer cette ligne de filtre">
&nbsp; <MdRemoveCircleOutline onClick={(e) => {
setp_filtre1();
setp_filtre1_value();
}}
/>
</a>
</div>}
</div>
{p_filtre2 &&
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter">
<TextField
name="filtre2"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
options={filters}
value={p_filtre2}
onChange={(e) => {
setp_filtre2(e.target.value)
}}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Email &nbsp;&nbsp;</MenuItem>
<MenuItem value="nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Nom &nbsp;</MenuItem>
<MenuItem value="prenom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Prénom &nbsp;</MenuItem>
</TextField>
</div>
<div className="div_row_droite texte_area_filter" >
{String(p_filtre2).length > 3 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre2_value"
id="filtre2_value"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_filtre2_value}
onChange={(e) => setp_filtre2_value(e.target.value)}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<AiFillCloseCircle
style={{ 'cursor': "pointer", "color": "orangered" }}
onClick={(e) => {
setp_filtre2_value("");
}} />
</InputAdornment>
),
}}
/>}
</div>
{String(p_filtre2).length > 3 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip04" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip04" data-tooltip-html="Supprimer cette ligne de filtre">
&nbsp; <MdRemoveCircleOutline
onClick={(e) => {
setp_filtre2();
setp_filtre2_value();
}}
/>
</a>
</div>}
</div>
}
{<div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
<Button variant="contained" className="bton_enreg" onClick={"Get_All_Apprenant"}>Rechercher
</Button>
</div>
<div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_annule" onClick={"clean_all_filters"}>Annuler
</Button>
</div>
</div>}
</div>
<br />
</div >
);
}
export default Module_Ent_Mes_Notes;

View File

@ -0,0 +1,496 @@
import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import Checkbox from '@mui/material/Checkbox';
import excel_icone from "../mysy_img/excel_icone.png";
import fileDownload from 'js-file-download'
import { FcInfo } from "react-icons/fc";
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import { FcAcceptDatabase, } from "react-icons/fc";
import { format } from 'date-fns'
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle, AiOutlineConsoleSql } from "react-icons/ai";
import Box from '@mui/material/Box';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
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 img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { Fab } from "@material-ui/core";
import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io";
import { AiTwotoneSave } from "react-icons/ai";
import { FcEditImage } from "react-icons/fc";
import ToggleSwitch from "./ToggleSwitch";
import { FcSpeaker } from "react-icons/fc";
import Autocomplete from '@mui/material/Autocomplete';
import { FcOpenedFolder } from "react-icons/fc";
import Module_Absence from "./Module_Absence";
import { RiMoreFill } from "react-icons/ri";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import moment from "moment";
import 'moment/locale/fr';
import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
import { gridClasses } from '@mui/x-data-grid';
import Link from '@mui/material/Link';
import { PiDotsThree } from "react-icons/pi";
import {
GridToolbarContainer, GridToolbarExport, GridToolbarColumnsButton,
GridToolbarFilterButton, GridToolbarDensitySelector, GridToolbarExportContainer, useGridApiContext,
gridFilteredSortedRowIdsSelector,
gridVisibleColumnFieldsSelector,
GridValueGetterParams,
GridPreferencePanelsValue,
} from '@mui/x-data-grid';
import * as XLSX from 'xlsx';
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import CancelPresentationIcon from '@mui/icons-material/CancelPresentation';
import { makeStyles } from "@material-ui/core/styles";
import Paper from '@material-ui/core/Paper';
import Draggable from 'react-draggable';
import { IconButton } from '@material-ui/core';
function PaperComponent(props) {
return (
<Draggable
handle="#draggable-dialog-title"
cancel={'[class*="MuiDialogContent-root"]'}
>
<Paper {...props} />
</Draggable>
);
}
const useStyles = makeStyles((theme) => ({
dialog: {
position: 'absolute',
// left: 10,
top: 400
},
paper: {
overflowY: 'unset',
},
customizedButton: {
position: 'absolute',
left: '98%',
top: '-3%',
backgroundColor: 'lightgray',
color: 'gray',
},
}));
const Module_Ent_Mon_Planning = (props) => {
const classes = useStyles();
const history = useHistory();
const [submenu, setsubmenu] = useState("");
const filters = [
{ value: 'email', label: 'Email' },
{ value: 'nom', label: 'Nom' },
{ value: 'prenom', label: 'Prénom' }
]
const [selectedfilt1, setselectedfilt1] = useState("");
const [selectedfilt2, setselectedfilt2] = useState("");
const [selectedfilt3, setselectedfilt3] = useState("");
function ExpandableCell_50({ value }) {
const [expanded, setExpanded] = React.useState(false);
return (
<nav>
{value && <div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
{expanded ? value : value.slice(0, 50)}&nbsp;
{value.length > 50 && (
// eslint-disable-next-line jsx-a11y/anchor-is-valid
<Link
type="button"
component="button"
sx={{ fontSize: 'inherit' }}
onClick={() => setExpanded(!expanded)}
>
{expanded ? <nav> <PiDotsThree />Réduire</nav> : <nav> <PiDotsThree />Voir</nav>}
</Link>
)}
</div>}
{value && <div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
&nbsp;
</div>
}
</nav>
);
}
function Display_Colunm_text({ value }) {
return (
<div style={{ paddingLeft: "5px", paddingRight: "10px", "display": "block", wordBreak: "break-all" }}>
{value}&nbsp;
</div>
);
}
const columns_apprenant_inscriptions = [
{ field: 'id', headerName: 'id', hide: true },
{ field: '_id', headerName: '_id', hide: true },
{ field: 'session_id', headerName: 'session_id', hide: true, Width: 1 },
{ field: 'session_code', headerName: 'Code Session', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'class_title', headerName: 'Titre Formation', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'class_internal_url', headerName: 'class_internal_url', hide: true, Width: 1 },
{
field: 'status', headerName: 'Statut', hide: false, flex: 1, minWidth: 50, maxWidth: 70,
valueFormatter: (params) => {
if (String(params.value) === "0")
return "Pré.";
else if (String(params.value) === "1")
return "Ins";
else if (String(params.value) === "-1")
return "Ann";
else if (String(params.value) === "2")
return "Enc";
else
return "???";
}
},
{ field: 'client_rattachement_id', headerName: 'client__id', hide: true, Width: 1 },
{ field: 'client_rattachement_nom', headerName: 'Client', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'date_debut', headerName: 'Début', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'date_fin', headerName: 'Fin', hide: false, minWidth: 200, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'presentiel', headerName: 'Présentiel', hide: false, flex: 1, minWidth: 50, maxWidth: 70 },
{ field: 'distanciel', headerName: 'Distantiel', hide: false, flex: 1, minWidth: 50, maxWidth: 70 },
{ field: 'class_recyclage_delai', headerName: 'Recycl. Delai', hide: false, flex: 1, minWidth: 100, },
{ field: 'class_recyclage_periodicite', headerName: 'Recycl. Perio', hide: false, flex: 1, minWidth: 100, },
{ field: 'nb_jour_avant_recyclage', headerName: 'Jrs avant Recycl.', hide: false, flex: 1, minWidth: 100, },
{
field: "Detail", headerName: 'Voir détail',
renderCell: (cellValues) => {
return (
<Button
onClick={(event) => {
//handleClick_edit_apprenant_From_Line(cellValues.row.id);
}}
>
<FcViewDetails />
</Button>
);
}
},
{
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<Popup
trigger={<Button
>
<CiTrash />
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, l'inscription sera <i><font color="red"> définitivement supprimée</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
//handleClick_delete_Apprenant(event, cellValues);
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
);
}
},
]
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 [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("");
}
return (
<div className="module_ent_mon_planning">
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
{/*** Affichage des messages d'alerte*/}
{display_alert_mysy && String(display_alert_mysy) === "1" &&
<Module_Alert_Confirmation alert_message={alert_message}
alert_type={alert_type}
clear_alert_message={clear_alert_message}
clear_alert_type={clear_alert_type}
clear_display_alert_mysy={clear_display_alert_mysy}
/>
}
{/*** FIN Affichage des messages d'alerte*/}
<h3 style={{ fontFamily: 'DM Sans' }}> Mes apprenants </h3>
<div>
<div className="titre1"> Utilisez les filtres !</div>
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter" >
<TextField
name="filtre1"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
value={p_filtre1}
onChange={(e) => {
setp_filtre1(e.target.value)
}}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Email &nbsp;&nbsp;</MenuItem>
<MenuItem value="nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Nom &nbsp;</MenuItem>
<MenuItem value="prenom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Prénom &nbsp;</MenuItem>
</TextField>
</div>
<div className="div_row_droite texte_area_filter_value" >
{p_filtre1 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre1_value"
id="filtre1_value"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_filtre1_value}
onChange={(e) => { setp_filtre1_value(e.target.value); }}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<AiFillCloseCircle
style={{ 'cursor': "pointer", "color": "orangered" }}
onClick={(e) => {
setp_filtre1_value("");
}} />
</InputAdornment>
),
}}
/>
}
</div>
{p_filtre1 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip01" data-tooltip-html="Ajouter une nouvelle ligne de filtre">
&nbsp; <MdAddCircleOutline onClick={(e) => {
setp_filtre2("1");
}} />
</a>
</div>}
{p_filtre1 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip02" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip02" data-tooltip-html="Supprimer cette ligne de filtre">
&nbsp; <MdRemoveCircleOutline onClick={(e) => {
setp_filtre1();
setp_filtre1_value();
}}
/>
</a>
</div>}
</div>
{p_filtre2 &&
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter">
<TextField
name="filtre2"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
options={filters}
value={p_filtre2}
onChange={(e) => {
setp_filtre2(e.target.value)
}}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Email &nbsp;&nbsp;</MenuItem>
<MenuItem value="nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Nom &nbsp;</MenuItem>
<MenuItem value="prenom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Prénom &nbsp;</MenuItem>
</TextField>
</div>
<div className="div_row_droite texte_area_filter" >
{String(p_filtre2).length > 3 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre2_value"
id="filtre2_value"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_filtre2_value}
onChange={(e) => setp_filtre2_value(e.target.value)}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<AiFillCloseCircle
style={{ 'cursor': "pointer", "color": "orangered" }}
onClick={(e) => {
setp_filtre2_value("");
}} />
</InputAdornment>
),
}}
/>}
</div>
{String(p_filtre2).length > 3 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip04" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip04" data-tooltip-html="Supprimer cette ligne de filtre">
&nbsp; <MdRemoveCircleOutline
onClick={(e) => {
setp_filtre2();
setp_filtre2_value();
}}
/>
</a>
</div>}
</div>
}
{<div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
<Button variant="contained" className="bton_enreg" onClick={"Get_All_Apprenant"}>Rechercher
</Button>
</div>
<div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_annule" onClick={"clean_all_filters"}>Annuler
</Button>
</div>
</div>}
</div>
<br />
</div >
);
}
export default Module_Ent_Mon_Planning;

View File

@ -1,21 +1,21 @@
import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import 'react-tooltip/dist/react-tooltip.css'
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 DatePicker from "react-datepicker";
import { FcAcceptDatabase, FcPrint } from "react-icons/fc";
import "react-datepicker/dist/react-datepicker.css";
import Box from '@mui/material/Box';
import Dialog from '@mui/material/Dialog';
@ -23,7 +23,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 { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import Autocomplete from '@mui/material/Autocomplete';
import { gridClasses } from '@mui/x-data-grid';
@ -113,8 +113,8 @@ const Module_Evaluation_Positionnement = (props) => {
{ field: 'id', headerName: 'id', hide: true },
{ field: '_id', headerName: '_id', hide: true },
{ field: 'form_code', headerName: 'Form. Code', hide: true, minwidth: 200, flex: 1, hideable: true, resizable: true, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'email', headerName: 'email', minwidth: 300, flex: 1, hideable: true, resizable: true, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'nom', headerName: 'nom', minwidth: 300, flex: 1, hide: false, editable: true, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'email', headerName: 'email', minwidth: 300, flex: 1, hideable: false, resizable: true,editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'nom', headerName: 'nom', minwidth: 300, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'prenom', headerName: 'prenom', minwidth: 300, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{
field: 'status', headerName: 'Statut', width: 100, editable: false, flex: true,

View File

@ -145,7 +145,7 @@ const Module_Historique_Action = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}

View File

@ -1479,7 +1479,7 @@ const Module_Session_Evaluation = (props) => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "20rem" }}>
<DialogContentText>
{Dialog_1_message}
@ -1559,7 +1559,7 @@ const Module_Session_Evaluation = (props) => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "20rem" }}>
<DialogContentText>
{Dialog_1_message}
@ -1660,7 +1660,7 @@ const Module_Session_Evaluation = (props) => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "20rem" }}>
<DialogContentText>
{Dialog_1_message}

View File

@ -1076,7 +1076,7 @@ const Module_Session_Notes_Classement = (props) => {
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("archive", "0");
var myurl = process.env.REACT_APP_API_URL + "myclass/api/GetAllValideSessionPartner_List/";
@ -2509,7 +2509,7 @@ const Module_Session_Notes_Classement = (props) => {
>
<DialogTitle> Délibération du Jury</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Délibération du Jury</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "30rem" }}>
<DialogContentText>
{Dialog_1_message}

File diff suppressed because it is too large Load Diff

View File

@ -7,28 +7,19 @@ import axios from "axios";
import { useParams } from 'react-router-dom';
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import {
DataGrid, frFR, GridToolbar,
} from '@mui/x-data-grid';
import * as XLSX from 'xlsx';
import { Fab } from "@material-ui/core";
import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io";
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove, FcInfo } from "react-icons/fc";
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 DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
@ -36,18 +27,10 @@ import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box';
import { Typography, LinearProgress, sliderClasses } from '@mui/material';
import styled from 'styled-components';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
import Autocomplete from '@mui/material/Autocomplete';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
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 Link from '@mui/material/Link';
import { PiDotsThree } from "react-icons/pi";
import { gridClasses } from '@mui/x-data-grid';
@ -149,12 +132,12 @@ const Modules_Mes_Documents = (props) => {
{ field: 'file_extention', hide: true, editable: false },
{ field: 'file_name', headerName: 'tech_file_name', hide: true, disableExport: true },
{
field: 'created_date', headerName: 'Date Création', Width: 100, flex: 1, hide: false, editable: false,
field: 'creation_date', headerName: 'Date Création', Width: 100, flex: 1, hide: false, editable: false,
renderCell: (cellValues) => {
return (
<nav style={{ width: '100%', 'textAlign': 'left' }}>
{String(cellValues.row.created_date).substring(0, 10)}
{String(cellValues.row.creation_date).substring(0, 10)}
</nav>)
},
@ -353,7 +336,7 @@ const Modules_Mes_Documents = (props) => {
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}
@ -1382,7 +1365,7 @@ const Modules_Mes_Documents = (props) => {
file_extention: JSON.parse(item).file_extention,
client_raison_sociale: JSON.parse(item).client_raison_sociale,
client_nom: JSON.parse(item).client_nom,
created_date: JSON.parse(item).created_date,
creation_date: JSON.parse(item).creation_date,
}
))}

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

@ -291,7 +291,7 @@ const Mon_Tableau_De_Bord = (props) => {
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}

View File

@ -233,7 +233,7 @@ const New_ButtonHilight_2025 = () => {
}
history.push("/intranet");
}
function user_logout() {
confirmAlert({

View File

@ -0,0 +1,493 @@
import React, { useState, useEffect } from 'react';
//import { slide as Menu } from "react-burger-menu";
import { NavLink } from "react-router-dom";
import { getCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import LogoutOutlinedIcon from '@mui/icons-material/LogoutOutlined';
import Button from '@mui/material/Button';
import { confirmAlert } from 'react-confirm-alert'; // Import
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import { useCookies } from "react-cookie";
import { Helmet } from "react-helmet";
import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png";
import connect_white from "../mysy_img/connect_white_v2.png";
import MenuItem from "@material-ui/core/MenuItem";
import Menu from "@material-ui/core/Menu";
import connect_green from "../mysy_img/connect_green.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 { format } from 'date-fns'
import moment from "moment";
import SendIcon from '@mui/icons-material/Send';
import axios from "axios";
import mysy_logo2 from "../mysy_img2/Logo_MySy.png"
import New_C_Header_ENT_Student_2025_V2 from "./header_automatic_files/Header_ENT_Student";
const New_ButtonHilight_ENT_Student_2025 = () => {
const history = useHistory();
const [show, setShow] = useState(true);
const [lastScrollY, setLastScrollY] = useState(0);
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych']);
const [partcookie, setpartCookie, removepartCookie] = useCookies(['tokenmysypart']);
const [country_code, setcountry_code] = useState("FR");
const [country_name, setcountry_name] = useState("France");
const [city, setcity] = useState("Paris");
const [postal, setpostal] = useState("75001");
const [latitude, setlatitude] = useState("48.861000061035156");
const [longitude, setlongitude] = useState("2.3380000591278076");
const [IPv4, setIPv4] = useState("172.71.122.128");
const [state, setstate] = useState("France");
const [userIp, setuserIp] = useState("172.71.122.128");
const controlNavbar = () => {
if (typeof window !== 'undefined') {
if (window.scrollY > lastScrollY && window.scrollY > 100) {
setShow(false);
} else if (window.scrollY < lastScrollY && window.scrollY < 100) { // if scroll up show the navbar
setShow(true);
}
// remember current page location to use in the next move
setLastScrollY(window.scrollY);
}
};
const [userconnected, setuserconnected] = useState("0");
const [someoneconnected, setsomeoneconnected] = useState("0");
const [partnerconnected, setpartnerconnected] = useState("0");
var stored_user = getCookie('tokenmysych');
var stored_part = getCookie('tokenmysypart');
function whosisconnected() {
stored_user = getCookie('tokenmysych');
stored_part = getCookie('tokenmysypart');
var local_user_connect = 0;
var local_part_connect = 0;
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
local_user_connect = 0;
} else {
setuserconnected("1");
setsomeoneconnected("1");
local_user_connect = 1;
//alert(" user connected OK");
}
if (typeof (stored_part) === "undefined" || String(stored_part) === '') {
setpartnerconnected("0");
setsomeoneconnected("0");
local_part_connect = 0;
} else {
setpartnerconnected("1");
setsomeoneconnected("1");
local_part_connect = 1;
// alert(" partner connected OK");
}
}
useEffect(() => {
var local_user_connect = 0;
var local_part_connect = 0;
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
local_user_connect = 0;
} else {
setuserconnected("1");
setsomeoneconnected("1");
local_user_connect = 1;
//alert(" user connected OK");
}
if (typeof (stored_part) === "undefined" || String(stored_part) === '') {
setpartnerconnected("0");
local_part_connect = 0;
} else {
setpartnerconnected("1");
setsomeoneconnected("1");
local_part_connect = 1;
//alert(" partner connected OK");
}
if (typeof window !== 'undefined') {
window.addEventListener('scroll', controlNavbar);
// cleanup function
return () => {
window.removeEventListener('scroll', controlNavbar);
};
}
}, [lastScrollY]);
const [PartnerMenu, setPartnerMenu] = React.useState(null);
const [AccountMenu, setAccountMenu] = React.useState(null);
const [ProduitMenu, setproduitMenu] = React.useState(null);
const [AvisMenu, setavisMenu] = React.useState(null);
const PartnerMenu_Close = () => {
setPartnerMenu(null);
};
const AccountMenu_Close = () => {
setAccountMenu(null);
};
const ProduitMenu_Close = () => {
setproduitMenu(null);
};
const handlePartnerMenu = (event) => {
setPartnerMenu(event.currentTarget);
};
const handleAccountMenu = (event) => {
setAccountMenu(event.currentTarget);
};
const handleProduitMenu = (event) => {
setproduitMenu(event.currentTarget);
};
const handleQuisommesNousMenu = (event) => {
history.push("/qui-sommes-nous")
};
const handleClose_Account = () => {
alert(" my account");
setAccountMenu(null);
};
const handleAccountConnexion = () => {
setAccountMenu(null);
history.push("/Connexion")
};
const handleMyAccount = () => {
setAccountMenu(null);
history.push("/mysy-user-account")
};
const handleAccountCreation = () => {
setAccountMenu(null);
history.push("/create_account")
};
const handlePartnerConnexion = () => {
setAccountMenu(null);
history.push("/PartnerLogin")
};
const handleProduitService = () => {
setproduitMenu(null);
history.push("/tarifs_produits_services/")
};
const handleAvis = () => {
setavisMenu(null);
history.push("/Recherche-Article-formation")
};
function user_logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_user) != "undefined") {
const stored_cookie = getCookie('tokenmysych');
var acces_right_token_name = stored_cookie + "_uar";
setpartCookie("tokenmysych", "", { path: '/' });
setpartCookie(acces_right_token_name, "", { path: '/' });
removeCookie(acces_right_token_name, { path: '/' });
removeCookie("tokenmysych", { path: '/' });
}
history.push("/ent_student");
}
function user_logout() {
confirmAlert({
title: '',
message: 'Confirmez la deconnexion (user)',
buttons: [
{
label: 'Oui',
onClick: () => user_logout_confirmation()
},
{
label: 'Non',
onClick: () => { return }
}
]
});
}
function part_logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_part) != "undefined") {
const stored_cookie = getCookie('tokenmysypart');
var acces_right_token_name = stored_cookie + "_uar";
setpartCookie("tokenmysypart", "", { path: '/' });
setpartCookie(acces_right_token_name, "", { path: '/' });
removeCookie(acces_right_token_name, { path: '/' });
setpartCookie("mysy_session_display_view", "", { path: '/' });
setpartCookie("mysy_menu_gauche_reduit", "", { path: '/' });
setpartCookie("mysy_catalog_data_row_grouped_by", "", { path: '/' });
removeCookie("tokenmysypart", { path: '/' });
removeCookie("mysy_session_display_view", { path: '/' });
removeCookie("mysy_menu_gauche_reduit", { path: '/' });
removeCookie("mysy_catalog_data_row_grouped_by", { path: '/' });
}
setsomeoneconnected("0");
setDialog_1_open(false);
history.push("/recherche-formation");
}
function part_logout() {
confirmAlert({
title: '',
message: 'Confirmez la deconnexion (pro)',
buttons: [
{
label: 'Oui',
onClick: () => part_logout_confirmation()
},
{
label: 'Non',
onClick: () => { return }
}
]
});
}
function handleAccountLogout() {
if (String(userconnected) === String("1")) {
user_logout();
}
else if (String(partnerconnected) === String("1")) {
part_logout();
}
}
const [CategorieMenu, setCategorieMenu] = React.useState(null);
const CategorieMenu_Close = () => {
setCategorieMenu(null);
};
const handleCategorieMenu = (event) => {
setCategorieMenu(event.currentTarget);
};
const handleMarketplace = (event) => {
history.push("/recherche-formation")
};
const handleClassCategorie = (e) => {
setCategorieMenu(null);
const pieces = window.location.href.split("/")
const last = pieces[pieces.length - 1]
var mymetier = "";
mymetier = e.target.id
if (last === mymetier) {
//console.log(" ## RELAOD");
window.location.reload(true);
} else {
history.push("/Recherche_new_v2/0/" + mymetier);
}
};
function publiecatalogue() {
history.push("/Partner", { mysy_arg: 'partner' });
}
function resserver_demo() {
history.push("/Partner", { mysy_arg: 'partner' });
}
const handleBlogMenu = (event) => {
history.push("/Recherche-Article-formation")
};
const [Dialog_1_message, setDialog_1_message] = React.useState(false);
const [Dialog_1_open, setDialog_1_open] = React.useState(false);
function Dialog_1_handle_change_participant_session(message) {
setDialog_1_message(message);
setDialog_1_open(true);
}
const Dialog_1_handleClose = () => {
//alert(" Utiliser le bouton 'fermer' ");
//setOpen(false);
};
const Dialog_1_handleClose_buton = () => {
setDialog_1_open(false);
};
const [Dialog_contact_message, setDialog_contact_message] = React.useState(false);
const [Dialog_contact_open, setDialog_contact_open] = React.useState(false);
function Dialog_contact_handle_change_participant_session(message) {
setDialog_contact_message(message);
setDialog_contact_open(true);
}
const Dialog_contact_handleClose = () => {
};
const Dialog_contact_handleClose_buton = () => {
setDialog_contact_open(false);
clear_contact_message_fields();
};
function clear_contact_message_fields() {
setcontact_message_nom_prenom("");
setcontact_message_email("");
setcontact_message_phone("");
setcontact_message_sujet("");
setcontact_message_sujet("");
setcontact_message_message("");
}
const [contact_message_nom_prenom, setcontact_message_nom_prenom] = React.useState("");
const [contact_message_email, setcontact_message_email] = React.useState("");
const [contact_message_phone, setcontact_message_phone] = React.useState("");
const [contact_message_sujet, setcontact_message_sujet] = React.useState("");
const [contact_message_message, setcontact_message_message] = React.useState("");
function Send_Contact_Message(e) {
var sender_mail = "";
var sender_tel = "";
var token = "";
////console.log("contacter " + sender_mail + " - " + sender_tel + " - ")
var mysubject = contact_message_sujet;
var mymessage = contact_message_message;
var mysender_name = contact_message_nom_prenom;
var mysender_email = contact_message_email;
//alert("contacter "+mysender_email+" - "+mymessage+" - url = "
//+process.env.REACT_APP_API_URL+" - user_ip ="+IPv4+" - "+latitude);
var re = /\S+@\S+\.\S+/;
if (re.test(mysender_email) == false) {
alert("l'email est incorrecte");
return;
}
var myurl = process.env.REACT_APP_API_URL + "myclass/api/add_user_message/";
var form = new FormData();
form.append("type", "email");
form.append("recever_mail", "contact@mysy-training.com");
form.append("recever_tel", "+33769203945");
form.append("sender_mail", mysender_email);
form.append("sender_tel", sender_tel);
form.append("object", mysubject);
form.append("message", mymessage);
form.append("sender_name", mysender_name);
form.append("token", "");
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);
// console.log("## form = ", form);
axios.post(myurl, form).then(res => {
if (String(res.data.status) === String("false")) {
alert(res.data.message);
}
else if (String(res.data.status) === String("true")) {
Dialog_contact_handleClose_buton();
alert(res.data.message);
}
else {
}
}).catch((error) => {
console.warn('contact-nous Not good man :( mysearchtext = ');
})
}
return (
<div className='new_buttonhilight_2025'>
<div className={`mini_entete ${show && 'hidden'}`} >
<New_C_Header_ENT_Student_2025_V2 />
</div>
</div>
);
}
export default New_ButtonHilight_ENT_Student_2025;

View File

@ -726,7 +726,7 @@ const New_Article_2025 = (props) => {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle>Votre article </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Votre article </DialogTitle>
<DialogContent className="DialogContent_width DialogContent_width_session_800px" >

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; </p>}
{props.formation.business_prices && props.formation.business_prices.length <= 0
&& <p className="formation_prix">{props.formation.price} HT&nbsp; </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

@ -0,0 +1,33 @@
import React from 'react';
import { getCookie, } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import New_Sidebar_ENT_Student_2025 from "./New_Sidebar_ENT_Student_2025";
import { useCookies } from "react-cookie";
import New_ButtonHilight_ENT_Student_2025 from "./New_ButtonHilight_ENT_Student_2025";
const New_Navigation_ENT_Student_2025 = () => {
const history = useHistory();
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych']);
const [cookie_part, setCookie_part, removeCookie_part] = useCookies(['tokenmysypart']);
return (
<div className={"navigation"}>
<div className="test_page">
<div className="bm-burger-button_label">
</div>
<New_Sidebar_ENT_Student_2025 />
<New_ButtonHilight_ENT_Student_2025 />
</div>
</div>
)
}
export default New_Navigation_ENT_Student_2025;

View File

@ -10,7 +10,7 @@ import { confirmAlert } from 'react-confirm-alert'; // Import
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import { useCookies } from "react-cookie";
const New_SideBar_2025 = () => {
const stored_cookie = getCookie('tokenmysych');

View File

@ -0,0 +1,336 @@
import React, { useState, useEffect } from 'react';
import { slide as Menu } from "react-burger-menu";
import { NavLink } from "react-router-dom";
import { getCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import LogoutOutlinedIcon from '@mui/icons-material/LogoutOutlined';
import Button from '@mui/material/Button';
import { confirmAlert } from 'react-confirm-alert'; // Import
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import { useCookies } from "react-cookie";
const New_Sidebar_Client_Intranet_2025 = () => {
const stored_cookie = getCookie('tokenmysych');
const history = useHistory();
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych']);
const [cookie_part, setCookie_part, removeCookie_part] = useCookies(['tokenmysypart']);
// Gestion des Cookies
const stored_partner = cookie_part.tokenmysypart;
const stored_user = cookie.tokenmysych;
const environnment = process.env.REACT_APP_ENV
function logout_confirmation() {
// si c'est une connexion partner qui est active
if (typeof (stored_partner) !== "undefined") {
//alert(" c'est une connexion PARTTT qui est active");
removeCookie_part('tokenmysypart', { path: '/' });
history.push("/Connexion");
}
// si c'est une connexion user qui est active
if (typeof (stored_user) !== "undefined") {
//alert(" c'est une connexion USERR qui est active");
removeCookie_part('tokenmysych', { path: '/' });
history.push("/intranet");
}
}
function logout() {
confirmAlert({
title: 'Deconnexion ?',
message: 'Confirmez la deconnexion',
buttons: [
{
label: 'Oui',
onClick: () => logout_confirmation()
},
{
label: 'Non',
}
],
closeOnEscape: false,
closeOnClickOutside: false,
keyCodeForClose: [8, 32],
willUnmount: () => { },
afterClose: () => { },
onClickOutside: () => { },
onKeypress: () => { },
onKeypressEscape: () => { },
overlayClassName: "overlay-custom-class-name"
});
}
const [someoneconnected, setsomeoneconnected] = useState("0");
const [partnerconnected, setpartnerconnected] = useState("0");
const [userconnected, setuserconnected] = useState("0");
const stored_part = getCookie('tokenmysypart');
function whosisconnected() {
var local_user_connect = 0;
var local_part_connect = 0;
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
local_user_connect = 0;
} else {
setuserconnected("1");
setsomeoneconnected("1");
local_user_connect = 1;
//alert(" user connected OK");
}
if (typeof (stored_part) === "undefined" || String(stored_part) === '') {
setpartnerconnected("0");
local_part_connect = 0;
} else {
setpartnerconnected("1");
setsomeoneconnected("1");
local_part_connect = 1;
//alert(" partner connected OK");
}
}
useEffect(() => {
var local_user_connect = 0;
var local_part_connect = 0;
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
local_user_connect = 0;
} else {
setuserconnected("1");
setsomeoneconnected("1");
local_user_connect = 1;
//alert(" user connected OK");
}
if (typeof (stored_part) === "undefined" || String(stored_part) === '') {
setpartnerconnected("0");
local_part_connect = 0;
} else {
setpartnerconnected("1");
setsomeoneconnected("1");
local_part_connect = 1;
//alert(" partner connected OK");
}
}, []);
return (
// Pass on our props
<div>
{String(environnment) === "PROD" &&
<Menu className="ch_burger_menu">
<NavLink exact to={"/"} activeClassName={"nav-active"}>
A propos
</NavLink>
<NavLink exact to={"/fonctionnalites"} activeClassName={"nav-active"}>
Fonctionnalites
</NavLink>
<NavLink exact to={"/tarif"} activeClassName={"nav-active"}>
Tarifs
</NavLink>
<NavLink exact to={"/contact"} activeClassName={"nav-active"}>
Contact
</NavLink>
<NavLink exact to={"/Recherche-Article-formation"} activeClassName={"nav-active"}>
Blog
</NavLink>
<NavLink exact to={"/recherche-formation"} activeClassName={"nav-active"}>
Marketplace
</NavLink>
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signin"} activeClassName={"nav-active"}>
Connexion
</NavLink>}
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signup"} activeClassName={"nav-active"}>
Inscription
</NavLink>}
{String(someoneconnected) === String("1") && <NavLink exact to={"/mysy-user-account"} activeClassName={"nav-active"}>
Mon compte
</NavLink>}
{typeof (stored_partner) !== "undefined" &&
/* Connexion partner active */
<Button className='bton_annule' onClick={logout} style={{
color: "red", opacity: '100%', borderRadius: '5rem', fontSize: "12px", width: "100%", background: "black",
padding: "5px"
}}>
<i> Deconnexion </i>
</Button>
}
{typeof (stored_user) != "undefined" &&
/* Connexion utilisateur active */
<Button className='bton_annule' onClick={logout} startIcon={<LogoutOutlinedIcon />} sx={{ color: "white", background: "green", fontSize: 10 }} >
Deconnexion
</Button>
}
</Menu>}
{(String(environnment) === "REC" || String(environnment) === "DEM") &&
<Menu className="ch_burger_menu">
<NavLink exact to={"/"} activeClassName={"nav-active"}>
A propos
</NavLink>
<NavLink exact to={"/fonctionnalites"} activeClassName={"nav-active"}>
Fonctionnalites
</NavLink>
<NavLink exact to={"/tarif"} activeClassName={"nav-active"}>
Tarifs
</NavLink>
<NavLink exact to={"/contact"} activeClassName={"nav-active"}>
Contact
</NavLink>
<NavLink exact to={"/Recherche-Article-formation"} activeClassName={"nav-active"}>
Blog
</NavLink>
<NavLink exact to={"/recherche-formation"} activeClassName={"nav-active"}>
Marketplace
</NavLink>
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signin"} activeClassName={"nav-active"}>
Connexion
</NavLink>}
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signup"} activeClassName={"nav-active"}>
Inscription
</NavLink>}
{String(someoneconnected) === String("1") && <NavLink exact to={"/mysy-user-account"} activeClassName={"nav-active"}>
Mon compte
</NavLink>}
{typeof (stored_partner) !== "undefined" &&
/* Connexion partner active */
<Button className='bton_annule' onClick={logout} style={{
color: "red", opacity: '100%', borderRadius: '5rem', fontSize: "12px", width: "100%", background: "black",
padding: "5px"
}}>
<i> Deconnexion </i>
</Button>
}
{typeof (stored_user) != "undefined" &&
/* Connexion utilisateur active */
<Button className='bton_annule' onClick={logout} startIcon={<LogoutOutlinedIcon />} sx={{ color: "white", background: "green", fontSize: 10 }} >
Deconnexion
</Button>
}
</Menu>}
{String(environnment) === "DEV" &&
<Menu className="ch_burger_menu">
<NavLink exact to={"/"} activeClassName={"nav-active"}>
A propos
</NavLink>
<NavLink exact to={"/fonctionnalites"} activeClassName={"nav-active"}>
Fonctionnalites
</NavLink>
<NavLink exact to={"/tarif"} activeClassName={"nav-active"}>
Tarifs
</NavLink>
<NavLink exact to={"/contact"} activeClassName={"nav-active"}>
Contact
</NavLink>
<NavLink exact to={"/Recherche-Article-formation"} activeClassName={"nav-active"}>
Blog
</NavLink>
<NavLink exact to={"/recherche-formation"} activeClassName={"nav-active"}>
Marketplace
</NavLink>
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signin"} activeClassName={"nav-active"}>
Connexion
</NavLink>}
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signup"} activeClassName={"nav-active"}>
Inscription
</NavLink>}
{String(someoneconnected) === String("1") && <NavLink exact to={"/mysy-user-account"} activeClassName={"nav-active"}>
Mon compte
</NavLink>}
{typeof (stored_partner) !== "undefined" &&
/* Connexion partner active */
<Button className='bton_annule' onClick={logout} style={{
color: "red", opacity: '100%', borderRadius: '5rem', fontSize: "12px", width: "100%", background: "black",
padding: "5px"
}}>
<i> Deconnexion </i>
</Button>
}
{typeof (stored_user) != "undefined" &&
/* Connexion utilisateur active */
<Button className='bton_annule' onClick={logout} startIcon={<LogoutOutlinedIcon />} sx={{ color: "white", background: "green", fontSize: 10 }} >
Deconnexion
</Button>
}
</Menu>}
</div>
);
};
export default New_Sidebar_Client_Intranet_2025;

View File

@ -0,0 +1,336 @@
import React, { useState, useEffect } from 'react';
import { slide as Menu } from "react-burger-menu";
import { NavLink } from "react-router-dom";
import { getCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import LogoutOutlinedIcon from '@mui/icons-material/LogoutOutlined';
import Button from '@mui/material/Button';
import { confirmAlert } from 'react-confirm-alert'; // Import
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import { useCookies } from "react-cookie";
const New_Sidebar_ENT_Student_2025 = () => {
const stored_cookie = getCookie('tokenmysych');
const history = useHistory();
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych']);
const [cookie_part, setCookie_part, removeCookie_part] = useCookies(['tokenmysypart']);
// Gestion des Cookies
const stored_partner = cookie_part.tokenmysypart;
const stored_user = cookie.tokenmysych;
const environnment = process.env.REACT_APP_ENV
function logout_confirmation() {
// si c'est une connexion partner qui est active
if (typeof (stored_partner) !== "undefined") {
//alert(" c'est une connexion PARTTT qui est active");
removeCookie_part('tokenmysypart', { path: '/' });
history.push("/Connexion");
}
// si c'est une connexion user qui est active
if (typeof (stored_user) !== "undefined") {
//alert(" c'est une connexion USERR qui est active");
removeCookie_part('tokenmysych', { path: '/' });
history.push("/ent_student");
}
}
function logout() {
confirmAlert({
title: 'Deconnexion ?',
message: 'Confirmez la deconnexion',
buttons: [
{
label: 'Oui',
onClick: () => logout_confirmation()
},
{
label: 'Non',
}
],
closeOnEscape: false,
closeOnClickOutside: false,
keyCodeForClose: [8, 32],
willUnmount: () => { },
afterClose: () => { },
onClickOutside: () => { },
onKeypress: () => { },
onKeypressEscape: () => { },
overlayClassName: "overlay-custom-class-name"
});
}
const [someoneconnected, setsomeoneconnected] = useState("0");
const [partnerconnected, setpartnerconnected] = useState("0");
const [userconnected, setuserconnected] = useState("0");
const stored_part = getCookie('tokenmysypart');
function whosisconnected() {
var local_user_connect = 0;
var local_part_connect = 0;
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
local_user_connect = 0;
} else {
setuserconnected("1");
setsomeoneconnected("1");
local_user_connect = 1;
//alert(" user connected OK");
}
if (typeof (stored_part) === "undefined" || String(stored_part) === '') {
setpartnerconnected("0");
local_part_connect = 0;
} else {
setpartnerconnected("1");
setsomeoneconnected("1");
local_part_connect = 1;
//alert(" partner connected OK");
}
}
useEffect(() => {
var local_user_connect = 0;
var local_part_connect = 0;
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
local_user_connect = 0;
} else {
setuserconnected("1");
setsomeoneconnected("1");
local_user_connect = 1;
//alert(" user connected OK");
}
if (typeof (stored_part) === "undefined" || String(stored_part) === '') {
setpartnerconnected("0");
local_part_connect = 0;
} else {
setpartnerconnected("1");
setsomeoneconnected("1");
local_part_connect = 1;
//alert(" partner connected OK");
}
}, []);
return (
// Pass on our props
<div>
{String(environnment) === "PROD" &&
<Menu className="ch_burger_menu">
<NavLink exact to={"/"} activeClassName={"nav-active"}>
A propos
</NavLink>
<NavLink exact to={"/fonctionnalites"} activeClassName={"nav-active"}>
Fonctionnalites
</NavLink>
<NavLink exact to={"/tarif"} activeClassName={"nav-active"}>
Tarifs
</NavLink>
<NavLink exact to={"/contact"} activeClassName={"nav-active"}>
Contact
</NavLink>
<NavLink exact to={"/Recherche-Article-formation"} activeClassName={"nav-active"}>
Blog
</NavLink>
<NavLink exact to={"/recherche-formation"} activeClassName={"nav-active"}>
Marketplace
</NavLink>
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signin"} activeClassName={"nav-active"}>
Connexion
</NavLink>}
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signup"} activeClassName={"nav-active"}>
Inscription
</NavLink>}
{String(someoneconnected) === String("1") && <NavLink exact to={"/mysy-user-account"} activeClassName={"nav-active"}>
Mon compte
</NavLink>}
{typeof (stored_partner) !== "undefined" &&
/* Connexion partner active */
<Button className='bton_annule' onClick={logout} style={{
color: "red", opacity: '100%', borderRadius: '5rem', fontSize: "12px", width: "100%", background: "black",
padding: "5px"
}}>
<i> Deconnexion </i>
</Button>
}
{typeof (stored_user) != "undefined" &&
/* Connexion utilisateur active */
<Button className='bton_annule' onClick={logout} startIcon={<LogoutOutlinedIcon />} sx={{ color: "white", background: "green", fontSize: 10 }} >
Deconnexion
</Button>
}
</Menu>}
{(String(environnment) === "REC" || String(environnment) === "DEM") &&
<Menu className="ch_burger_menu">
<NavLink exact to={"/"} activeClassName={"nav-active"}>
A propos
</NavLink>
<NavLink exact to={"/fonctionnalites"} activeClassName={"nav-active"}>
Fonctionnalites
</NavLink>
<NavLink exact to={"/tarif"} activeClassName={"nav-active"}>
Tarifs
</NavLink>
<NavLink exact to={"/contact"} activeClassName={"nav-active"}>
Contact
</NavLink>
<NavLink exact to={"/Recherche-Article-formation"} activeClassName={"nav-active"}>
Blog
</NavLink>
<NavLink exact to={"/recherche-formation"} activeClassName={"nav-active"}>
Marketplace
</NavLink>
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signin"} activeClassName={"nav-active"}>
Connexion
</NavLink>}
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signup"} activeClassName={"nav-active"}>
Inscription
</NavLink>}
{String(someoneconnected) === String("1") && <NavLink exact to={"/mysy-user-account"} activeClassName={"nav-active"}>
Mon compte
</NavLink>}
{typeof (stored_partner) !== "undefined" &&
/* Connexion partner active */
<Button className='bton_annule' onClick={logout} style={{
color: "red", opacity: '100%', borderRadius: '5rem', fontSize: "12px", width: "100%", background: "black",
padding: "5px"
}}>
<i> Deconnexion </i>
</Button>
}
{typeof (stored_user) != "undefined" &&
/* Connexion utilisateur active */
<Button className='bton_annule' onClick={logout} startIcon={<LogoutOutlinedIcon />} sx={{ color: "white", background: "green", fontSize: 10 }} >
Deconnexion
</Button>
}
</Menu>}
{String(environnment) === "DEV" &&
<Menu className="ch_burger_menu">
<NavLink exact to={"/"} activeClassName={"nav-active"}>
A propos
</NavLink>
<NavLink exact to={"/fonctionnalites"} activeClassName={"nav-active"}>
Fonctionnalites
</NavLink>
<NavLink exact to={"/tarif"} activeClassName={"nav-active"}>
Tarifs
</NavLink>
<NavLink exact to={"/contact"} activeClassName={"nav-active"}>
Contact
</NavLink>
<NavLink exact to={"/Recherche-Article-formation"} activeClassName={"nav-active"}>
Blog
</NavLink>
<NavLink exact to={"/recherche-formation"} activeClassName={"nav-active"}>
Marketplace
</NavLink>
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signin"} activeClassName={"nav-active"}>
Connexion
</NavLink>}
{String(someoneconnected) !== String("1") && <NavLink exact to={"/signup"} activeClassName={"nav-active"}>
Inscription
</NavLink>}
{String(someoneconnected) === String("1") && <NavLink exact to={"/mysy-user-account"} activeClassName={"nav-active"}>
Mon compte
</NavLink>}
{typeof (stored_partner) !== "undefined" &&
/* Connexion partner active */
<Button className='bton_annule' onClick={logout} style={{
color: "red", opacity: '100%', borderRadius: '5rem', fontSize: "12px", width: "100%", background: "black",
padding: "5px"
}}>
<i> Deconnexion </i>
</Button>
}
{typeof (stored_user) != "undefined" &&
/* Connexion utilisateur active */
<Button className='bton_annule' onClick={logout} startIcon={<LogoutOutlinedIcon />} sx={{ color: "white", background: "green", fontSize: 10 }} >
Deconnexion
</Button>
}
</Menu>}
</div>
);
};
export default New_Sidebar_ENT_Student_2025;

View File

@ -9,8 +9,7 @@ import { useHistory } from "react-router-dom";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import { FcInfo } from "react-icons/fc";
@ -167,7 +166,7 @@ const Notes_Evaluation = (props) => {
{ field: 'session_id', headerName: 'session_id', hide: true, Width: 0 },
{
field: 'session_code', headerName: 'Classe', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />,
field: 'session_code', headerName: 'Promo', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />,
renderCell: (cellValues) => {
return (
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
@ -858,7 +857,7 @@ const Notes_Evaluation = (props) => {
const New_Option_Filter = [
{ "id": "class_external_code", "label": "Lié a la Formation (code externe) ", "value": "class_external_code" },
{ "id": "code_session", "label": "Lié a la Classe (code Classe) ", "value": "code_session" },
{ "id": "code_session", "label": "Lié a la Promotion(code Classe) ", "value": "code_session" },
{ "id": "code_ue", "label": "Lié a l'UE (code UE) ", "value": "code_ue" },
{ "id": "", "label": "", "value": "" },
{ "id": "1", "label": "", "value": "1" }, // Cette ligne pour couvrir l'ajout d'une ligne de filter. C'est fait expres.
@ -2964,7 +2963,7 @@ const Notes_Evaluation = (props) => {
const New_Option_Type_Ressource = [
{ "id": "0", "label": "Employe", "value": "ressource_humaine" },
{ "id": "1", "label": "Materiel", "value": "ressource_materielle" },
{ "id": "1", "label": "Materiel & Salle", "value": "ressource_materielle" },
]
@ -3601,7 +3600,7 @@ const Notes_Evaluation = (props) => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "15rem" }}>
{setConvocation_Eval_Type_doc && setConvocation_Eval_Type_doc.length > 0 &&
@ -3772,7 +3771,7 @@ const Notes_Evaluation = (props) => {
>
<DialogTitle>Ajout ressource </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Ajout ressource </DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_seq_ressource_1_message}
@ -3788,6 +3787,7 @@ const Notes_Evaluation = (props) => {
options={New_Option_Type_Ressource}
onChange={(event, value) => {
setDialog_seq_ressource_1_selected_ressource_id("");
setGet_Ressource_Avabilities_avability_check("");
if (value && value.value) {
@ -4499,7 +4499,7 @@ const Notes_Evaluation = (props) => {
</div>
<div className="session_caract"> <b> Classe </b> <br />
<div className="session_caract"> <b> Promotion</b> <br />
{New_Getall_Partner_Session_Reduice_Fields_result && New_Getall_Partner_Session_Reduice_Fields_result.length > 0 && <TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -4806,7 +4806,7 @@ const Notes_Evaluation = (props) => {
</div>
<div className="session_caract"> <b>Classe </b> <br />
<div className="session_caract"> <b>Promotion </b> <br />
{New_Getall_Partner_Session_Reduice_Fields_result && New_Getall_Partner_Session_Reduice_Fields_result.length > 0 &&
<Autocomplete
@ -5256,7 +5256,7 @@ const Notes_Evaluation = (props) => {
</div>
<div className="session_caract"> <b> Classe </b> <br />
<div className="session_caract"> <b> Promotion </b> <br />
{New_Getall_Partner_Session_Reduice_Fields_result && New_Getall_Partner_Session_Reduice_Fields_result.length > 0 &&
<Autocomplete

View File

@ -1756,7 +1756,7 @@ const Partner = (props) => {
>
<DialogTitle>MySy Warning</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Warning</DialogTitle>
<DialogContent>
<DialogContentText>
<ImWarning /> {Dialog_1_message}
@ -1971,8 +1971,8 @@ const Partner = (props) => {
<div>
<Sidebar className="my_sidebar">
{String(menu) !== "mes_sessions" && <Menu className="my_menu bck_menu_seul" id="my_session" name="my_session" onClick={DiplaySessionList} >&nbsp;<CoPresentIcon className="icone_menu" color={"secondary"} /> &nbsp;SESSIONS </Menu>}
{String(menu) === "mes_sessions" && <Menu className="my_menu bck_menu_seul_selected" id="my_session" name="my_session" onClick={DiplaySessionList} >&nbsp;<CoPresentIcon className="icone_menu" color={"secondary"} /> &nbsp;SESSIONS </Menu>}
{String(menu) !== "mes_sessions" && <Menu className="my_menu bck_menu_seul" id="my_session" name="my_session" onClick={DiplaySessionList} >&nbsp;<CoPresentIcon className="icone_menu" color={"secondary"} /> &nbsp;PROMOTIONS </Menu>}
{String(menu) === "mes_sessions" && <Menu className="my_menu bck_menu_seul_selected" id="my_session" name="my_session" onClick={DiplaySessionList} >&nbsp;<CoPresentIcon className="icone_menu" color={"secondary"} /> &nbsp;PROMOTIONS </Menu>}
</Sidebar>
</div>
@ -2148,8 +2148,8 @@ const Partner = (props) => {
{String(menu) !== "dashbord_formation" && <MenuItem onClick={config_dashbord_formation_func} className="sousmenu" icon={<FcFinePrint className="icone_menu" />}> FORMATION </MenuItem>}
{String(menu) === "dashbord_formation" && <MenuItem onClick={config_dashbord_formation_func} className="sousmenu_selected" icon={<FcFinePrint className="icone_menu" />}> FORMATION </MenuItem>}
{String(menu) !== "dashbord_session" && <MenuItem onClick={config_dashbord_session_func} className="sousmenu" icon={<FcFinePrint className="icone_menu" />}>SESSION </MenuItem>}
{String(menu) === "dashbord_session" && <MenuItem onClick={config_dashbord_session_func} className="sousmenu_selected" icon={<FcFinePrint className="icone_menu" />}> SESSION </MenuItem>}
{String(menu) !== "dashbord_session" && <MenuItem onClick={config_dashbord_session_func} className="sousmenu" icon={<FcFinePrint className="icone_menu" />}>PROMOTIONS </MenuItem>}
{String(menu) === "dashbord_session" && <MenuItem onClick={config_dashbord_session_func} className="sousmenu_selected" icon={<FcFinePrint className="icone_menu" />}> PROMOTIONS </MenuItem>}
{String(menu) !== "dashbord_ressources_humaines" && <MenuItem onClick={config_dashbord_ressources_humaines_func} className="sousmenu" icon={<FcFinePrint className="icone_menu" />}> RES. HUMAINES </MenuItem>}
{String(menu) === "dashbord_ressources_humaines" && <MenuItem onClick={config_dashbord_ressources_humaines_func} className="sousmenu_selected" icon={<FcFinePrint className="icone_menu" />}> RES. HUMAINES </MenuItem>}
@ -2868,7 +2868,7 @@ const Partner = (props) => {
<Tooltip className="tooltip_css" id="tooltip_id_9" />
<a data-tooltip-id="tooltip_id_9" data-tooltip-html="SESSIONS">
<a data-tooltip-id="tooltip_id_9" data-tooltip-html="PROMOTIONS">
{String(menu) !== "mes_sessions" && <div className="sousmenu" onClick={DiplaySessionList} > <FcFlowChart className="icone_menu" /> &nbsp; </div>}
{String(menu) === "mes_sessions" && <div className="sousmenu_selected" onClick={DiplaySessionList} ><FcFlowChart className="icone_menu" /> &nbsp;</div>}
</a>

View File

@ -743,6 +743,7 @@ const Partner_Commande = (props) => {
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("archive", "0");
var myurl = process.env.REACT_APP_API_URL + "myclass/api/get_partner_class/";
@ -1218,11 +1219,11 @@ const Partner_Commande = (props) => {
//console.log("file_size = ",file_size," file_type = ",file_type);
if (file_size > 1000000) {
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Le fichier ne doit pas dépasser un 1 Méga octets");
setalert_type("error");
// alert("Le fichier ne doit pas dépasser un 1 Méga octets");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Le fichier ne doit pas dépasser un 1 Méga octets");
setalert_type("error");
// alert("Le fichier ne doit pas dépasser un 1 Méga octets");
return;
}
@ -1258,12 +1259,12 @@ const Partner_Commande = (props) => {
setliste_sessions_file_change_api("true");
//Getall_Training_Employee();
// alert(" Les employés ont été correctement importés");
// alert(" Les employés ont été correctement importés");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Les employés ont été correctement importés");
setalert_type("success");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Les employés ont été correctement importés");
setalert_type("success");
}
@ -1662,11 +1663,11 @@ const Partner_Commande = (props) => {
order_header_submenu_main();
} else {
// alert(" Aucune commande/devis recuperé");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Aucune commande/devis recuperé");
setalert_type("error");
// alert(" Aucune commande/devis recuperé");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Aucune commande/devis recuperé");
setalert_type("error");
}
@ -1818,7 +1819,7 @@ const Partner_Commande = (props) => {
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("archive", "0");
var myurl = process.env.REACT_APP_API_URL + "myclass/api/GetAllValideSessionPartner_List/";
setLoading(true);
@ -1927,11 +1928,11 @@ const Partner_Commande = (props) => {
}
} else {
// alert(" Aucun taux de TVA récuperé")
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Aucun taux de TVA récuperé");
setalert_type("error");
// alert(" Aucun taux de TVA récuperé")
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Aucun taux de TVA récuperé");
setalert_type("error");
}
}
else if (String(res.data.status) === String("Err_Connexion")) {
@ -2191,11 +2192,11 @@ const Partner_Commande = (props) => {
;
} else {
// alert(" Aucune ligne commande/devis recuperée");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Aucune ligne commande/devis recuperée");
setalert_type("error");
// alert(" Aucune ligne commande/devis recuperée");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Aucune ligne commande/devis recuperée");
setalert_type("error");
}
@ -2851,11 +2852,11 @@ const Partner_Commande = (props) => {
}
else {
// alert(" Type de commande inconnu.");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Type de commande inconnu.");
setalert_type("error");
// alert(" Type de commande inconnu.");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Type de commande inconnu.");
setalert_type("error");
return;
}
setLoading(true);
@ -2875,13 +2876,13 @@ const Partner_Commande = (props) => {
setOrder_data_changed("");
setorder_data_edit_mode("");
Display_Detail_Order_data(selected_id);
// alert(" La mise à jour du " + String(p_detail_header_type) + " été correctement faite.");
// alert(res.data.message);
// alert(" La mise à jour du " + String(p_detail_header_type) + " été correctement faite.");
// alert(res.data.message);
var txt = "La mise à jour du " + String(p_detail_header_type) + " été correctement faite."
setdisplay_alert_mysy("1");
setalert_message(txt);
setalert_type("success");
var txt = "La mise à jour du " + String(p_detail_header_type) + " été correctement faite."
setdisplay_alert_mysy("1");
setalert_message(txt);
setalert_type("success");
if (document.getElementById('myRef_head')) {
var divh = document.getElementById('myRef_head').offsetTop;
@ -3111,16 +3112,16 @@ const Partner_Commande = (props) => {
// Controle des champs obligatoires
if (!p_add_line_item || String(p_add_line_item).length < 2) {
//alert(" Vous devez choisir une formation ");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Vous devez choisir une formation ");
setalert_type("error");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Vous devez choisir une formation ");
setalert_type("error");
return;
}
if (!p_add_line_item_qty || parseFloat(String(p_add_line_item_qty)) <= 0) {
// alert(" La quantité choisie est incorrecte ");
// alert(" La quantité choisie est incorrecte ");
setdisplay_alert_mysy("1");
setalert_message(" La quantité choisie est incorrecte ");
setalert_type("error");
@ -3128,34 +3129,34 @@ const Partner_Commande = (props) => {
}
if (!p_add_line_item_price || parseFloat(String(p_add_line_item_price)) < 0) {
// alert(" Le prix unitaire est incorrecte ");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(" Le prix unitaire est incorrecte ");
setalert_type("error");
// alert(" Le prix unitaire est incorrecte ");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(" Le prix unitaire est incorrecte ");
setalert_type("error");
return;
}
if (String(p_add_line_item_type_reduction) === "percent" &&
(parseFloat(String(p_add_line_item_reduction_value)) < 0 || parseFloat(String(p_add_line_item_reduction_value)) > 100)) {
// alert(" Pour une reduction de type 'pourcentage', la valeur doit être comprise entre 0 et 100 ");
// alert(" Pour une reduction de type 'pourcentage', la valeur doit être comprise entre 0 et 100 ");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Pour une reduction de type 'pourcentage', la valeur doit être comprise entre 0 et 100");
setalert_type("error");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Pour une reduction de type 'pourcentage', la valeur doit être comprise entre 0 et 100");
setalert_type("error");
return;
}
if (String(p_add_line_item_type_reduction) === "fixe" &&
(parseFloat(String(p_add_line_item_reduction_value)) < 0 || parseFloat(String(p_add_line_item_reduction_value)) > parseFloat(String(p_add_line_item_price)))) {
// alert(" Pour une reduction de type 'fixe', la valeur ne doit pas excéder le prix unitaire de l'article ");
// alert(" Pour une reduction de type 'fixe', la valeur ne doit pas excéder le prix unitaire de l'article ");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(" Pour une reduction de type 'fixe', la valeur ne doit pas excéder le prix unitaire de l'article ");
setalert_type("error");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(" Pour une reduction de type 'fixe', la valeur ne doit pas excéder le prix unitaire de l'article ");
setalert_type("error");
return;
}
@ -3176,12 +3177,12 @@ const Partner_Commande = (props) => {
clean_article_detail_fields();
Display_Detail_Order_data(selected_id);
// alert(" L'article a été correctement ajouté / mis à jour.");
// alert(" L'article a été correctement ajouté / mis à jour.");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("L'article a été correctement ajouté / mis à jour.");
setalert_type("success");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("L'article a été correctement ajouté / mis à jour.");
setalert_type("success");
setDialog_Detail_Article_open(false);
@ -3328,11 +3329,11 @@ const Partner_Commande = (props) => {
if (!p_add_cmd_header_client_id || String(p_add_cmd_header_client_id).length < 2) {
// alert(" Vous devez choisir un client");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Vous devez choisir un client");
setalert_type("error");
// alert(" Vous devez choisir un client");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Vous devez choisir un client");
setalert_type("error");
return;
}
//console.log("### form = ", form);
@ -3353,11 +3354,11 @@ const Partner_Commande = (props) => {
} else if (String(p_add_cmd_header_order_type) === "commande") {
myurl = process.env.REACT_APP_API_URL + "myclass/api/Add_Partner_Order/";
} else {
// alert(" Type de commande inconnu");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Type de commande inconnu");
setalert_type("error");
// alert(" Type de commande inconnu");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Type de commande inconnu");
setalert_type("error");
return;
}
@ -3411,20 +3412,20 @@ const Partner_Commande = (props) => {
setAdd_Dialog_Detail_Order_api("false");
if (String(p_add_cmd_header_order_type) === "devis") {
// alert(" Impossible d'ajouter le devis");
// alert(" Impossible d'ajouter le devis");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Impossible d'ajouter le devis");
setalert_type("error");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Impossible d'ajouter le devis");
setalert_type("error");
} else if (String(p_add_cmd_header_order_type) === "commande") {
// alert(" La commande d'ajouter la commande.");
// alert(" La commande d'ajouter la commande.");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("La commande d'ajouter la commande.");
setalert_type("error");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("La commande d'ajouter la commande.");
setalert_type("error");
}
})
@ -3496,7 +3497,7 @@ const Partner_Commande = (props) => {
/*
if (document.getElementById("order_header_main")) {
document.getElementById("order_header_main").style.backgroundColor = "#104277";
document.getElementById("order_header_main").style.backgroundColor = "#107758";
document.getElementById("order_header_main").style.color = "white";
}
@ -3528,7 +3529,7 @@ const Partner_Commande = (props) => {
/*
if (document.getElementById("order_header_detail")) {
document.getElementById("order_header_detail").style.backgroundColor = "#104277";
document.getElementById("order_header_detail").style.backgroundColor = "#107758";
document.getElementById("order_header_detail").style.color = "white";
}
@ -3556,7 +3557,7 @@ const Partner_Commande = (props) => {
await sleep(5);
/*
if (document.getElementById("order_header_facturation")) {
document.getElementById("order_header_facturation").style.backgroundColor = "#104277";
document.getElementById("order_header_facturation").style.backgroundColor = "#107758";
document.getElementById("order_header_facturation").style.color = "white";
}
@ -3584,7 +3585,7 @@ const Partner_Commande = (props) => {
await sleep(5);
/* if (document.getElementById("order_header_facturation")) {
document.getElementById("order_header_facturation").style.backgroundColor = "#104277";
document.getElementById("order_header_facturation").style.backgroundColor = "#107758";
document.getElementById("order_header_facturation").style.color = "white";
}
@ -3636,7 +3637,7 @@ const Partner_Commande = (props) => {
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}
@ -3714,11 +3715,11 @@ const Partner_Commande = (props) => {
function Compute_Order_Header_Price() {
if (String(Order_data_changed) === "1") {
// alert(" Merci d'enregistrer les modification avant de lancer le calcul");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(" Merci d'enregistrer les modification avant de lancer le calcul");
setalert_type("error");
// alert(" Merci d'enregistrer les modification avant de lancer le calcul");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(" Merci d'enregistrer les modification avant de lancer le calcul");
setalert_type("error");
}
Compute_Partner_Order();
@ -3867,9 +3868,9 @@ const Partner_Commande = (props) => {
setdisplay_alert_mysy("1");
setalert_message("Impossible d'envoyer le devis par email");
setalert_type("error");
// alert(" Impossible d'envoyer le devis par email");
// alert(" Impossible d'envoyer le devis par email");
} else if (String(p_add_cmd_header_order_type) === "commande") {
// alert(" Impossible d'envoyer la commande par email");
// alert(" Impossible d'envoyer la commande par email");
setdisplay_alert_mysy("1");
setalert_message("Impossible d'envoyer la commande par email");
setalert_type("error");
@ -3928,19 +3929,19 @@ const Partner_Commande = (props) => {
setConfirm_Order_Data_api("false");
if (String(p_add_cmd_header_order_type) === "devis") {
// alert(" Impossible de confirmer le devis");
// alert(" Impossible de confirmer le devis");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Impossible de confirmer le devis");
setalert_type("error");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Impossible de confirmer le devis");
setalert_type("error");
} else if (String(p_add_cmd_header_order_type) === "commande") {
// alert(" Impossible de confirmer la commande");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Impossible de confirmer la commande");
setalert_type("error");
// alert(" Impossible de confirmer la commande");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Impossible de confirmer la commande");
setalert_type("error");
}
})
@ -4776,23 +4777,23 @@ const Partner_Commande = (props) => {
if (file_type !== "application/pdf") {
// alert("Le fichier n'est pas de type PDF");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Le fichier n'est pas de type PDF");
setalert_type("error");
// alert("Le fichier n'est pas de type PDF");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Le fichier n'est pas de type PDF");
setalert_type("error");
return;
}
if (file_size > 10000000) {
// alert("Le fichier ne doit pas depasser un 1 Méga octets");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Le fichier ne doit pas depasser un 1 Méga octets");
setalert_type("error");
// console.log("Le fichier ne doit pas depasser un 1 Méga octets");
// alert("Le fichier ne doit pas depasser un 1 Méga octets");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("Le fichier ne doit pas depasser un 1 Méga octets");
setalert_type("error");
// console.log("Le fichier ne doit pas depasser un 1 Méga octets");
return;
}
@ -5023,7 +5024,7 @@ const Partner_Commande = (props) => {
static
onClose={() => null} >
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width_700px" style={{ "minHeight": "20rem", width: '60rem' }}>
<div>
@ -5094,7 +5095,7 @@ const Partner_Commande = (props) => {
>
<DialogTitle> Création Session </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Création Session </DialogTitle>
<DialogContent style={{ "minHeight": "20rem", "width": "30rem" }}>
@ -5116,12 +5117,12 @@ const Partner_Commande = (props) => {
console.log(" date_start_session = ", date_start_session);*/
if (local_date > date_end_session) {
// alert(" La date est après la fin de la session");
// alert(" La date est après la fin de la session");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(" La date est après la fin de la session");
setalert_type("error");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(" La date est après la fin de la session");
setalert_type("error");
return;
}
@ -5158,11 +5159,11 @@ const Partner_Commande = (props) => {
if (local_date < date_start_session) {
// alert(" La date est avant le début de la session");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("La date est avant le début de la session");
setalert_type("error");
// alert(" La date est avant le début de la session");
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message("La date est avant le début de la session");
setalert_type("error");
return;
}
@ -5277,7 +5278,7 @@ const Partner_Commande = (props) => {
onClose={() => null}
>
<DialogTitle> Cloture devis <font style={{ fontWeight: "700" }}> {String(p_detail_header_ref_interne)} </font> </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Cloture devis <font style={{ fontWeight: "700" }}> {String(p_detail_header_ref_interne)} </font> </DialogTitle>
<DialogContent style={{ "minHeight": "20rem", "width": "30rem" }}>
@ -5373,7 +5374,7 @@ const Partner_Commande = (props) => {
static
onClose={() => null} >
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "20rem" }}>
<DialogContentText>
Envoi devis par email
@ -5509,7 +5510,7 @@ const Partner_Commande = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}
@ -5532,7 +5533,7 @@ const Partner_Commande = (props) => {
static
onClose={() => null} >
<DialogTitle>Edition Détail ligne <font style={{ fontWeight: "700" }}> {String(p_detail_header_type).toLocaleUpperCase()} </font> </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Edition Détail ligne <font style={{ fontWeight: "700" }}> {String(p_detail_header_type).toLocaleUpperCase()} </font> </DialogTitle>
<DialogContent>
{/*p_add_line_item = {p_add_line_item} <br/> */}
@ -6193,7 +6194,7 @@ const Partner_Commande = (props) => {
onClose={() => null}
>
<DialogTitle>{Dialog_1_message}</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> {Dialog_1_message}</DialogTitle>
<DialogContent>
<div className="session_caract_Dialog" > <b>Client </b>
@ -6502,7 +6503,7 @@ const Partner_Commande = (props) => {
<h3 style={{ fontFamily:'DM Sans' }}> Mes Commandes et Devis </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Mes Commandes et Devis </h3>
<div className="div_row">
<div className="titre1"> Utilisez les filtres !</div>
<div className="div_row" style={{ "marginBottom": "5px" }}>

View File

@ -241,6 +241,23 @@ const Partner_Config_Formulaires = (props) => {
},
{
field: 'is_alert', headerName: 'Alert', flex: 1, hide: false, editable: false,
renderCell: (cellValues) => {
return (
<div style={{ paddingLeft: "5px", paddingRight: "10px", "display": "block", wordBreak: "break-all" }}>
{String(cellValues.row.is_alert) === "1" && "Oui"}&nbsp;
{String(cellValues.row.is_alert) !== "1" && "Non"}&nbsp;
</div>
);
},
},
{ field: 'alert_seuil', headerName: 'Seuil Alert', flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{
field: "delete", headerName: 'Supprimer',
@ -1154,6 +1171,16 @@ const Partner_Config_Formulaires = (props) => {
}
if (alert_checked === true) {
form.append("is_alert", "1");
form.append("alert_seuil", alert_seuil_value);
} else {
form.append("is_alert", "0");
form.append("alert_seuil", "");
}
if (statistic_checked === true) {
form.append("is_statistic", "1");
} else {
@ -1210,6 +1237,9 @@ const Partner_Config_Formulaires = (props) => {
setnew_qcm_choix_value("");
setstatistic_checked(false);
setalert_checked(false);
setalert_seuil_value("");
Get_Given_Formulaire_Data(selected_id);
if (document.getElementById('myRef')) {
@ -1413,6 +1443,16 @@ const Partner_Config_Formulaires = (props) => {
setstatistic_checked(event.target.checked);
};
const [alert_checked, setalert_checked] = React.useState(false);
const [alert_seuil_value, setalert_seuil_value] = React.useState("");
const handleChange_alert_checked = (event) => {
setalert_seuil_value("");
setalert_checked(event.target.checked);
};
const [display_alert_mysy, setdisplay_alert_mysy] = useState("");
const [alert_message, setalert_message] = useState("");
const [alert_type, setalert_type] = useState("");
@ -1428,6 +1468,24 @@ const Partner_Config_Formulaires = (props) => {
setdisplay_alert_mysy("");
}
const New_Option_Oui_Non = [
{
value: '1',
label: 'Oui',
},
{
value: '0',
label: 'Non',
},
{
value: '',
label: '',
},
];
return (
<div className="partner_configuration_technique">
@ -1435,6 +1493,17 @@ const Partner_Config_Formulaires = (props) => {
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
{/*** Affichage des messages d'alerte*/}
{display_alert_mysy && String(display_alert_mysy) === "1" &&
<Module_Alert_Confirmation alert_message={alert_message}
alert_type={alert_type}
clear_alert_message={clear_alert_message}
clear_alert_type={clear_alert_type}
clear_display_alert_mysy={clear_display_alert_mysy}
/>
}
{/*** FIN Affichage des messages d'alerte*/}
{/**** Dialog pour gestion d'une question */}
@ -1467,7 +1536,7 @@ const Partner_Config_Formulaires = (props) => {
>
<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" style={{ "minHeight": "25rem" }}>
<DialogContentText>
@ -1488,8 +1557,7 @@ const Partner_Config_Formulaires = (props) => {
onChange={(e) => {
setquestion_question(e.target.value);
}
}
}}
/>
</div>
@ -1509,6 +1577,10 @@ const Partner_Config_Formulaires = (props) => {
value={New_Option_type_Question.filter((data) => (data).value === String(question_type))[0].label}
onChange={(event, value) => {
setalert_checked(false);
setalert_seuil_value("");
if (value && value.value) {
setquestion_type(value.value);
} else {
@ -1621,9 +1693,7 @@ const Partner_Config_Formulaires = (props) => {
{tab_checkbox_choix &&
tab_checkbox_choix.map((choix) => (
<div>
<TextField
value={choix}
autoFocus
margin="dense"
@ -1663,7 +1733,6 @@ const Partner_Config_Formulaires = (props) => {
value={new_checkbox_choix_value}
onChange={(e) => {
setnew_checkbox_choix_value(e.target.value);
}
}
/>
@ -1680,25 +1749,102 @@ const Partner_Config_Formulaires = (props) => {
{(String(question_type) === "note" || String(question_type) === "bool" || String(question_type) === "entier") && <div className="session_caract_Dialog" >
<Tooltip className="tooltip_css" id="statistic_01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="statistic_01" data-tooltip-html="En cochant cette case, le système va créer une statistique associée à la question.">
<div class="separator">
<nav className="separator_label">
Configuration </nav>
</div>
<div>
<Tooltip className="tooltip_css" id="statistic_01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="statistic_01" data-tooltip-html="En cochant cette case, le système va créer une statistique associée à la question.">
<nav style={{ width: "100%", float: "left" }}>
<nav style={{ width: "75%", float: "left", "marginTop": '0.5rem' }}>
Créer une statistique &nbsp;<FcInfo /> &nbsp; &nbsp; &nbsp;
</nav>
<nav style={{ width: "20%", float: "left", "textAlign": "right" }}>
<Checkbox
checked={statistic_checked}
onChange={handleChange_statistic_checked}
inputProps={{ 'aria-label': 'controlled' }}
/>
</nav>
</nav>
</a>
</div>
<div>
<nav style={{ width: "100%", float: "left" }}>
<nav style={{ width: "75%", float: "left", "marginTop": '0.5rem' }}>
Créer une statistique &nbsp;<FcInfo /> &nbsp; &nbsp; &nbsp;
Alert sur réponse &nbsp;<FcInfo /> &nbsp; &nbsp; &nbsp;
</nav>
<nav style={{ width: "20%", float: "left", "textAlign": "right" }}>
<Checkbox
checked={statistic_checked}
onChange={handleChange_statistic_checked}
checked={alert_checked}
onChange={handleChange_alert_checked}
inputProps={{ 'aria-label': 'controlled' }}
/>
</nav>
</nav>
</a>
{alert_checked &&
<div>
<nav style={{ width: "50%", float: "left", "marginTop": '0.5rem' }}>
Seuil/Valeur déclenchement &nbsp;<FcInfo /> &nbsp; &nbsp; &nbsp;
</nav>
{(String(question_type) === "note" || String(question_type) === "entier") &&
<nav style={{ width: "49%", float: "left", "textAlign": "right" }}>
<TextField
autoFocus
margin="dense"
id="seuil_oui_non_number"
name="seuil_oui_non_number"
className="disabled_style"
type="number"
InputProps={{ inputProps: { min: 2, max: 9999 } }}
value={alert_seuil_value}
onChange={(event) => {
setalert_seuil_value(event.target.value);
}}
/>
</nav>}
{(String(question_type) === "bool" || String(question_type) === "entier") &&
<nav style={{ width: "49%", float: "left", "textAlign": "right" }}>
<Autocomplete
disablePortal
name="seuil_oui_non"
id="seuil_oui_non"
className="disabled_style"
options={New_Option_Oui_Non}
value={New_Option_Oui_Non.filter((data) => (data).value === String(alert_seuil_value))[0].label}
onChange={(event, value) => {
if (value && value.value) {
setalert_seuil_value(value.value);
} else {
setalert_seuil_value("");
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
</nav>}
</div>
}
</nav>
</div>
</div>}
</DialogContent>
@ -1728,7 +1874,7 @@ const Partner_Config_Formulaires = (props) => {
<h3 style={{ fontFamily:'DM Sans' }}> Votre configuration des formulaires </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Votre configuration des formulaires </h3>
<div className="div_row">
<div className="titre1"> Utilisez les filtres !</div>
<div className="div_row" style={{ "marginBottom": "5px" }}>
@ -2276,7 +2422,7 @@ const Partner_Config_Formulaires = (props) => {
className="disabled_style"
checked={true}
// style={{ background: '#ECEFF1' }}
// style={{ background: '#ECEFF1' }}
/>}
{String(p_detail_from_default) !== "1" &&
@ -2286,7 +2432,7 @@ const Partner_Config_Formulaires = (props) => {
className="disabled_style"
checked={false}
// style={{ background: '#ECEFF1' }}
// style={{ background: '#ECEFF1' }}
/>}
@ -2348,9 +2494,8 @@ const Partner_Config_Formulaires = (props) => {
list_choix: (item).list_choix,
list_case_cocher: (item).list_case_cocher,
is_statistic: (item).is_statistic,
is_alert: (item).is_alert,
alert_seuil: (item).alert_seuil,
}
))}
@ -2360,6 +2505,16 @@ const Partner_Config_Formulaires = (props) => {
disableSelectionOnClick
onRowDoubleClick={(newSelectionModel) => {
setalert_checked(false);
setalert_seuil_value("");
if (newSelectionModel.row.is_alert && newSelectionModel.row.is_alert === "1")
setalert_checked(true);
if (newSelectionModel.row.alert_seuil)
setalert_seuil_value(newSelectionModel.row.alert_seuil);
setselected_question_id(newSelectionModel.row._id);
setquestion_question(newSelectionModel.row.question);
setquestion_type(newSelectionModel.row.type);
@ -2489,6 +2644,8 @@ const Partner_Config_Formulaires = (props) => {
onChange={(event, value) => {
setconfig_data_changed("1");
setalert_checked(false);
setalert_seuil_value("");
if (value && value.value) {
setp_detail_from_type(value.value);
} else {
@ -2593,7 +2750,7 @@ const Partner_Config_Formulaires = (props) => {
id="detail_config_par_defaut"
className="disabled_style"
checked={true}
// style={{ background: '#ECEFF1' }}
// style={{ background: '#ECEFF1' }}
onChange={(e) => {
if (e.target.checked) {
setp_detail_from_default("1");
@ -2610,7 +2767,7 @@ const Partner_Config_Formulaires = (props) => {
id="detail_config_par_defaut"
className="disabled_style"
checked={false}
// style={{ background: '#ECEFF1' }}
// style={{ background: '#ECEFF1' }}
onChange={(e) => {
if (e.target.checked) {
setp_detail_from_default("1");
@ -2638,7 +2795,7 @@ const Partner_Config_Formulaires = (props) => {
{p_detail_from_list_question && p_detail_from_list_question.length > 0 && <div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
&nbsp;
<Box
<Box
sx={{
height: 500,
width: '100%',
@ -2678,6 +2835,12 @@ const Partner_Config_Formulaires = (props) => {
question: (item).question,
type: (item).type,
max_note: (item).max_note,
list_choix: (item).list_choix,
list_case_cocher: (item).list_case_cocher,
is_statistic: (item).is_statistic,
is_alert: (item).is_alert,
alert_seuil: (item).alert_seuil,
}
))}
@ -2909,7 +3072,7 @@ const Partner_Config_Formulaires = (props) => {
setp_detail_one_from_default("0");
}
}}
// style={{ background: '#FFFFFF' }}
// style={{ background: '#FFFFFF' }}
/>
</div>

File diff suppressed because it is too large Load Diff

View File

@ -616,7 +616,7 @@ const Partner_Configuration_Session_Steps = (props) => {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle> Choisir une couleur</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Choisir une couleur</DialogTitle>
<DialogContent className="DialogContent_color_pickup_width" >
<DialogContentText>
@ -676,7 +676,7 @@ const Partner_Configuration_Session_Steps = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}

View File

@ -1,47 +1,29 @@
import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import Checkbox from '@mui/material/Checkbox';
import Autocomplete from '@mui/material/Autocomplete';
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint } from "react-icons/fc";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box';
import { Typography, LinearProgress, sliderClasses } from '@mui/material';
import styled from 'styled-components';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
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 { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
import ToggleSwitch from "./ToggleSwitch";
import { FcInfo } from "react-icons/fc";
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import { makeStyles } from "@material-ui/core/styles";
import Paper from '@material-ui/core/Paper';
import Draggable from 'react-draggable';
@ -471,6 +453,7 @@ const Partner_Configuration_Technique = (props) => {
const columns_list_competence = [
{ field: '_id', headerName: '_id', hide: true },
{ field: 'id', headerName: 'id', hide: true },
{ field: 'code', headerName: 'Code', flex: 1, hide: false, editable: false },
{ field: 'description', headerName: 'Description', flex: 1, hide: false, editable: false },
{ field: 'domaine', headerName: 'Domaine', flex: 1, hide: false, editable: false },
{ field: 'metier', headerName: 'Métier', flex: 1, hide: false, editable: false },
@ -1076,7 +1059,7 @@ const Partner_Configuration_Technique = (props) => {
if (String(res.data.status) === String("true")) {
//console.log(" In Getall_Partner_Competence_List res.data.status = " + res.data.status);
//console.log(" In Getall_Partner_Competence_List res.data.message r_class = " + res.data.message);
// console.log(" In Getall_Partner_Competence_List res.data.message r_class = " + res.data.message);
setGetall_Partner_Competence_List_api("true");
setGetall_Partner_Competence_List_result(res.data.message);
@ -1087,19 +1070,18 @@ const Partner_Configuration_Technique = (props) => {
var localid = JSON.parse(x).id;
var local_id = JSON.parse(x)._id;
var local_description = JSON.parse(x).description;
var local_code = JSON.parse(x).code;
//---
var node = {
"_id": local_id,
"id": localid,
"label": local_description,
"label": local_code,
"code": local_code,
"description": local_description,
};
new_data2.push(node);
});
//---
@ -1109,7 +1091,6 @@ const Partner_Configuration_Technique = (props) => {
"label": "",
"code": "",
"description": "",
"rang": "",
};
new_data2.push(node);
@ -1811,6 +1792,7 @@ const Partner_Configuration_Technique = (props) => {
const [selected_competence_id, setselected_competence_id] = useState("");
const [p_detail_competence_code, setp_detail_competence_code] = useState("");
const [p_detail_competence_description, setp_detail_competence_description] = useState("");
const [p_detail_competence_domaine, setp_detail_competence_domaine] = useState("");
const [p_detail_competence_metier, setp_detail_competence_metier] = useState("");
@ -2539,6 +2521,7 @@ const Partner_Configuration_Technique = (props) => {
// Il s'agit d'une mise à jour
myurl = process.env.REACT_APP_API_URL + "myclass/api/Update_Competence/";
form.append("competence_id", selected_competence_id);
form.append("code", p_detail_competence_code);
form.append("description", p_detail_competence_description);
form.append("domaine", p_detail_competence_domaine);
form.append("metier", p_detail_competence_metier);
@ -2547,6 +2530,7 @@ const Partner_Configuration_Technique = (props) => {
} else {
// Il s'agit d'une creation
myurl = process.env.REACT_APP_API_URL + "myclass/api/Add_Competence/";
form.append("code", p_detail_competence_code);
form.append("description", p_detail_competence_description);
form.append("domaine", p_detail_competence_domaine);
form.append("metier", p_detail_competence_metier);
@ -2602,6 +2586,7 @@ const Partner_Configuration_Technique = (props) => {
setgridline_competence_id("");
setselected_competence_id("");
setp_detail_competence_description("");
setp_detail_competence_code("");
setp_detail_competence_domaine("");
setp_detail_competence_metier("");
setp_detail_competence_commentaire("");
@ -2703,7 +2688,7 @@ const Partner_Configuration_Technique = (props) => {
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}
@ -2783,9 +2768,30 @@ const Partner_Configuration_Technique = (props) => {
>
<DialogTitle> Compétence </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Compétence </DialogTitle>
<DialogContent className="DialogContent_width">
<div className="session_caract_Dialog" > Code
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_competence_code"
id="event_dialog_competence_code"
fullWidth
value={p_detail_competence_code}
onChange={(e) => {
setp_detail_competence_code(e.target.value);
}
}
/>
</div>
<div className="session_caract_Dialog" > Description
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
@ -3608,7 +3614,7 @@ const Partner_Configuration_Technique = (props) => {
</Dialog>
<h3 style={{ fontFamily:'DM Sans' }}> Votre configuration </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Votre configuration </h3>
<div className="div_row" ref={myRef_head} id="myRef_head" >
<Button variant="outlined" onClick={submenu_technique} className="detail_class_submenu" id='technique' name='technique'>Technique</Button>
@ -4765,6 +4771,7 @@ const Partner_Configuration_Technique = (props) => {
{
id: index,
_id: JSON.parse(item)._id,
code: JSON.parse(item).code,
description: JSON.parse(item).description,
domaine: JSON.parse(item).domaine,
metier: JSON.parse(item).metier,
@ -4780,7 +4787,7 @@ const Partner_Configuration_Technique = (props) => {
onRowDoubleClick={(newSelectionModel) => {
setgridline_competence_id(newSelectionModel.row.id);
setselected_competence_id(newSelectionModel.row._id);
setp_detail_competence_code(newSelectionModel.row.code);
setp_detail_competence_description(newSelectionModel.row.description);
setp_detail_competence_domaine(newSelectionModel.row.domaine);
setp_detail_competence_metier(newSelectionModel.row.metier);
@ -4859,7 +4866,7 @@ const Partner_Configuration_Technique = (props) => {
<Button variant="outlined" onClick={() => {
setselected_competence_id("");
setp_detail_competence_code("");
setp_detail_competence_description("");
setp_detail_competence_domaine("");
setp_detail_competence_metier("");

View File

@ -545,7 +545,7 @@ const Partner_domaine_Categorie_Metier = (props) => {
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}
@ -1652,7 +1652,7 @@ const Partner_domaine_Categorie_Metier = (props) => {
>
<DialogTitle>Domaine de Formation </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Domaine de Formation </DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_domaine_1_message}
@ -1747,7 +1747,7 @@ const Partner_domaine_Categorie_Metier = (props) => {
>
<DialogTitle>Catégorie de Formation </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Catégorie de Formation </DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_Categorie_1_message}
@ -1874,7 +1874,7 @@ const Partner_domaine_Categorie_Metier = (props) => {
>
<DialogTitle>Catégorie de Formation </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Catégorie de Formation </DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_Metier_1_message}

View File

@ -1493,7 +1493,7 @@ const Partner_Facture = (props) => {
submenu_color_management("main");
/* if (document.getElementById("order_header_main")) {
document.getElementById("order_header_main").style.backgroundColor = "#104277";
document.getElementById("order_header_main").style.backgroundColor = "#107758";
document.getElementById("order_header_main").style.color = "white";
}
@ -1520,7 +1520,7 @@ const Partner_Facture = (props) => {
submenu_color_management("detail");
/* if (document.getElementById("order_header_detail")) {
document.getElementById("order_header_detail").style.backgroundColor = "#104277";
document.getElementById("order_header_detail").style.backgroundColor = "#107758";
document.getElementById("order_header_detail").style.color = "white";
}
@ -1546,7 +1546,7 @@ const Partner_Facture = (props) => {
submenu_color_management("facturation");
/* if (document.getElementById("order_header_facturation")) {
document.getElementById("order_header_facturation").style.backgroundColor = "#104277";
document.getElementById("order_header_facturation").style.backgroundColor = "#107758";
document.getElementById("order_header_facturation").style.color = "white";
}
@ -1577,7 +1577,7 @@ const Partner_Facture = (props) => {
submenu_color_management("paiement");
/* if (document.getElementById("order_header_facturation")) {
document.getElementById("order_header_facturation").style.backgroundColor = "#104277";
document.getElementById("order_header_facturation").style.backgroundColor = "#107758";
document.getElementById("order_header_facturation").style.color = "white";
}
@ -1613,7 +1613,7 @@ const Partner_Facture = (props) => {
}
if (document.getElementById(current_menu)) {
document.getElementById(current_menu).style.backgroundColor = "#104277";
document.getElementById(current_menu).style.backgroundColor = "#107758";
document.getElementById(current_menu).style.color = "white";
document.getElementById(current_menu).style.fontWeight = "bold";
}

View File

@ -393,7 +393,7 @@ const Partner_Prix_Achat = (props) => {
>
<DialogTitle>Groupe prix achat </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Groupe prix achat </DialogTitle>
<DialogContent className="DialogContent_width">
<div className="session_caract_Dialog" > Code groupe de prix

View File

@ -1149,7 +1149,7 @@ const Partner_Product_Service = (props) => {
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}

View File

@ -0,0 +1,428 @@
.partner_header_automatic_files {
@media only screen and (max-width: 600px) {
position: fixed;
/* margin-top: 22px;*/
width: 100%;
opacity: 1;
background: #FFF;
.header_new_2025 {
border-bottom: 1px solid #dcdcdc;
width: 100%;
padding-left: 50px;
padding-top: 15px;
padding-bottom: 10px;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
margin: 0 auto;
}
.logo-menu {
display: flex;
align-items: center;
gap: 40px;
margin-left: 2rem;
}
.logo {
width: 96px;
height: 32px;
}
.menu-list {
display: none;
}
.menu-link {
display: none;
}
.cta-login {
display: flex;
align-items: center;
gap: 12px;
}
.cta-buttons {
display: flex;
gap: 12px;
}
.hide_on_mobile {
display: none;
}
.btn {
padding: 10px 15px;
border-radius: 200px;
font-family: 'DM Sans', sans-serif;
font-size: 12px;
font-weight: 600;
line-height: 126%;
cursor: pointer;
}
.btn-primary {
background-color: #3e6ee3;
color: #ffffff;
border: none;
}
.btn-secondary {
background-color: transparent;
color: #4b5162;
border: 1px solid #c7c9ce;
}
.separator {
width: 1px;
height: 12px;
background-color: rgba(23, 23, 23, 0.1);
border-radius: 30px;
}
.login-link {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
}
.user-icon {
width: 18px;
height: 18px;
}
.login-link span {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #171717;
line-height: 122%;
}
}
@media only screen and (min-width: 601px) and (max-width: 991px) {
.header_new_2025 {
border-bottom: 1px solid #dcdcdc;
padding: 14px 48px;
width: 100%;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
margin: 0 auto;
}
.logo-menu {
display: flex;
align-items: center;
gap: 10px;
max-width: 60%;
flex-direction: row;
}
.logo {
width: 96px;
height: 32px;
}
.menu-list {
display: flex;
align-items: center;
gap: 14px;
flex-direction: row;
flex-wrap: wrap;
}
.menu-link {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #4b5162;
text-decoration: none;
line-height: 122%;
}
.cta-login {
display: flex;
align-items: center;
gap: 3px;
}
.cta-buttons {
display: flex;
gap: 1px;
}
.btn {
padding: 5px 8px;
border-radius: 200px;
font-family: 'DM Sans', sans-serif;
font-size: 12px;
font-weight: 700;
line-height: 126%;
cursor: pointer;
}
.btn-primary {
background-color: #3e6ee3;
color: #ffffff;
border: none;
}
.btn-secondary {
background-color: transparent;
color: #4b5162;
border: 1px solid #c7c9ce;
}
.separator {
width: 1px;
height: 12px;
background-color: rgba(23, 23, 23, 0.1);
border-radius: 30px;
}
.login-link {
display: flex;
align-items: center;
gap: 2px;
cursor: pointer;
}
.user-icon {
width: 18px;
height: 18px;
}
.login-link span {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #171717;
line-height: 122%;
}
}
@media only screen and (min-width: 992px) and (max-width: 1199px) {
.header_new_2025 {
border-bottom: 1px solid #dcdcdc;
padding: 14px 48px;
width: 100%;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
margin: 0 auto;
}
.logo-menu {
display: flex;
align-items: center;
gap: 10px;
width: 70%;
flex-direction: row;
}
.logo {
width: 96px;
height: 32px;
}
.menu-list {
display: flex;
align-items: center;
gap: 14px;
flex-direction: row;
flex-wrap: wrap;
}
.menu-link {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #4b5162;
text-decoration: none;
line-height: 122%;
}
.cta-login {
display: flex;
align-items: center;
gap: 5px;
}
.cta-buttons {
display: flex;
gap: 5px;
}
.btn {
padding: 3px 10px;
border-radius: 200px;
font-family: 'DM Sans', sans-serif;
font-size: 14px;
font-weight: 700;
line-height: 126%;
cursor: pointer;
}
.btn-primary {
background-color: #3e6ee3;
color: #ffffff;
border: none;
}
.btn-secondary {
background-color: transparent;
color: #4b5162;
border: 1px solid #c7c9ce;
}
.separator {
width: 1px;
height: 5px;
background-color: rgba(23, 23, 23, 0.1);
border-radius: 30px;
}
.login-link {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
}
.user-icon {
width: 18px;
height: 18px;
}
.login-link span {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #171717;
line-height: 122%;
}
}
@media only screen and (min-width: 1200px) {
.header_new_2025 {
border-bottom: 1px solid #dcdcdc;
padding: 14px 48px;
width: 100%;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
margin: 0 auto;
}
.logo-menu {
display: flex;
align-items: center;
gap: 40px;
}
.logo {
width: 96px;
height: 32px;
}
.menu-list {
display: flex;
align-items: center;
gap: 24px;
}
.menu-link {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #4b5162;
text-decoration: none;
line-height: 122%;
}
.cta-login {
display: flex;
align-items: center;
gap: 12px;
}
.cta-buttons {
display: flex;
gap: 12px;
}
.btn {
padding: 12px 24px;
border-radius: 200px;
font-family: 'DM Sans', sans-serif;
font-size: 14px;
font-weight: 700;
line-height: 126%;
cursor: pointer;
}
.btn-primary {
background-color: #3e6ee3;
color: #ffffff;
border: none;
}
.btn-secondary {
background-color: transparent;
color: #4b5162;
border: 1px solid #c7c9ce;
}
.separator {
width: 1px;
height: 12px;
background-color: rgba(23, 23, 23, 0.1);
border-radius: 30px;
}
.login-link {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
}
.user-icon {
width: 18px;
height: 18px;
}
.login-link span {
font-family: 'DM Sans', sans-serif;
font-size: 16px;
font-weight: 500;
color: #171717;
line-height: 122%;
}
}
}

View File

@ -0,0 +1,322 @@
import React, { useState, useEffect } from 'react';
import './Partner_Header.css';
import moment from "moment";
import { getCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import Header_MySy_Logo from '../../img_new_design_2025/header_mysy_logo.png';
import Header_User from '../../img_new_design_2025/header_user.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 Button from '@mui/material/Button';
import { useCookies } from "react-cookie";
import CancelPresentationIcon from '@mui/icons-material/CancelPresentation';
import { makeStyles } from "@material-ui/core/styles";
import Paper from '@material-ui/core/Paper';
import Draggable from 'react-draggable';
import { IconButton } from '@material-ui/core';
function PaperComponent(props) {
return (
<Draggable
handle="#draggable-dialog-title"
cancel={'[class*="MuiDialogContent-root"]'}
>
<Paper {...props} />
</Draggable>
);
}
const useStyles = makeStyles((theme) => ({
dialog: {
position: 'absolute',
// left: 10,
top: 400
},
paper: {
overflowY: 'unset',
},
customizedButton: {
position: 'absolute',
left: '98%',
top: '-3%',
backgroundColor: 'lightgray',
color: 'gray',
},
}));
const Partner_Header = () => {
const history = useHistory();
const classes = useStyles();
const [userconnected, setuserconnected] = useState("0");
const [someoneconnected, setsomeoneconnected] = useState("0");
const [partnerconnected, setpartnerconnected] = useState("0");
const stored_user = getCookie('tokenmysych');
const stored_part = getCookie('tokenmysypart');
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych'], { path: '/' });
const [partcookie, setpartCookie, removepartCookie] = useCookies(['tokenmysypart'], { path: '/' });
const [PartnerMenu, setPartnerMenu] = React.useState(null);
const [AccountMenu, setAccountMenu] = React.useState(null);
const [ProduitMenu, setproduitMenu] = React.useState(null);
useEffect(() => {
var local_user_connect = 0;
var local_part_connect = 0;
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
local_user_connect = 0;
} else {
setuserconnected("1");
setsomeoneconnected("1");
local_user_connect = 1;
//alert(" user connected OK");
}
if (typeof (stored_part) === "undefined" || String(stored_part) === '') {
setpartnerconnected("0");
local_part_connect = 0;
} else {
setpartnerconnected("1");
setsomeoneconnected("1");
local_part_connect = 1;
//alert(" partner connected OK");
}
}, []);
const handleAccountCreation = () => {
setAccountMenu(null);
history.push("/signup/")
};
const handleMyAccount = () => {
setAccountMenu(null);
history.push("/mysy-user-account")
};
const handleAccountConnexion = () => {
setAccountMenu(null);
history.push("/signin/")
};
const handleMyPartnerAccount = () => {
setAccountMenu(null);
history.push("/Partner")
};
function handleAccountConnexion_v2() {
if (String(userconnected) === String("1")) {
handleMyAccount();
}
else if (String(partnerconnected) === String("1")) {
handleMyPartnerAccount();
}
}
const [Dialog_1_open, setDialog_1_open] = React.useState(false);
const Dialog_1_handleClose = () => {
};
const Dialog_1_handleClose_buton = () => {
setDialog_1_open(false);
};
function part_logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_part) != "undefined") {
const stored_cookie = getCookie('tokenmysypart');
var acces_right_token_name = stored_cookie + "_uar";
setpartCookie("tokenmysypart", "", { path: '/' });
setpartCookie(acces_right_token_name, "", { path: '/' });
removeCookie(acces_right_token_name, { path: '/' });
setpartCookie("mysy_session_display_view", "", { path: '/' });
setpartCookie("mysy_menu_gauche_reduit", "", { path: '/' });
setpartCookie("mysy_catalog_data_row_grouped_by", "", { path: '/' });
removeCookie("tokenmysypart", { path: '/' });
removeCookie("mysy_session_display_view", { path: '/' });
removeCookie("mysy_menu_gauche_reduit", { path: '/' });
removeCookie("mysy_catalog_data_row_grouped_by", { path: '/' });
}
setsomeoneconnected("0");
setDialog_1_open(false);
history.push("/recherche-formation");
}
function user_logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_user) != "undefined") {
const stored_cookie = getCookie('tokenmysych');
var acces_right_token_name = stored_cookie + "_uar";
setpartCookie("tokenmysych", "", { path: '/' });
setpartCookie(acces_right_token_name, "", { path: '/' });
removeCookie(acces_right_token_name, { path: '/' });
removeCookie("tokenmysych", { path: '/' });
}
history.push("/ent_student");
}
return (
<div className='partner_header_automatic_files'>
{/*** GESTION Deconnexion */}
<Dialog
open={Dialog_1_open}
// onClose={Dialog_1_handleClose}
className="displaypartnersession"
static
onClose={() => null}
PaperProps={{
className: classes.paper, // Apply the paper style
style: {
overflowY: 'unset',
position: 'absolute',
top: '20rem',
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>
Confirmez la deconnexion de l'Intranet<br />
</DialogContentText>
</DialogContent>
<DialogActions>
<IconButton
//autoFocus
onClick={Dialog_1_handleClose_buton}
color="primary"
className={classes.customizedButton}
>
<CancelPresentationIcon />
</IconButton>
<div className="div_row">
<div className="div_row_gauche">
<Button
onClick={(e) => {
if (partnerconnected && String(partnerconnected) === '1')
part_logout_confirmation();
if (userconnected && String(userconnected) === '1')
user_logout_confirmation();
}}
className="bton_enreg_dialog">Deconnexion</Button>
</div>
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Button onClick={Dialog_1_handleClose_buton} className="bton_annule_dialog" >Annuler</Button>
</div>
</div>
</DialogActions>
</Dialog>
{/*** Fin GESTION Deconnexion */}
<header className="header_new_2025">
<div className="header-content">
<div className="logo-menu">
<img src={Header_MySy_Logo} alt="Logo MySy" className="logo" style={{ cursor: 'pointer' }} onClick={(e) => {
// e.preventDefault();
history.push("/");
}} />
<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>
<div className="separator"></div>
<a href="/marketplace" className="menu-link">Marketplace</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>}
</div>
<div className="separator hide_on_mobile"></div>
{String(someoneconnected) !== String("1") && <div className="login-link hide_on_mobile" onClick={handleAccountConnexion}>
<img src={Header_User} alt="User icon" className="user-icon hide_on_mobile" />
<span className='hide_on_mobile'>Connexion</span>
</div>}
{String(someoneconnected) === String("1") && <div className="login-link hide_on_mobile" onClick={(e) => setDialog_1_open(true)}>
<img src={Header_User} alt="User icon" className="user-icon hide_on_mobile" />
<span className='hide_on_mobile'>Deconnexion</span>
</div>}
</div>
</div >
</header >
</div >
);
};
export default Partner_Header;

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

@ -226,7 +226,7 @@ const QuiSommesNous_v4 = () => {
className="displaypartnersession"
>
<DialogTitle>Contactez Nous</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Contactez Nous</DialogTitle>
<DialogContent className="DialogContent_width">

View File

@ -2771,7 +2771,7 @@ const Recherche_new_v2 = () => {
className="displaypartnersession"
>
<DialogTitle>Contactez Nous</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Contactez Nous</DialogTitle>
<DialogContent className="DialogContent_width">
@ -2910,7 +2910,7 @@ const Recherche_new_v2 = () => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
Confirmez la deconnexion

View File

@ -2605,7 +2605,7 @@ const Recherche_new_v3 = () => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
Confirmez la deconnexion

View File

@ -2617,7 +2617,7 @@ const Recherche_new_v4 = () => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
Confirmez la deconnexion

View File

@ -0,0 +1,460 @@
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";
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 [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 > 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");
// 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 </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;

View File

@ -2587,7 +2587,7 @@ const Subdomain_Recherche_new_v2 = () => {
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
Confirmez la deconnexion

View File

@ -3,7 +3,7 @@ import axios from "axios";
import { Helmet } from "react-helmet";
import SideBar from "./sidebar";
import ReactPlayer from 'react-player'
import { Slide } from 'react-slideshow-image';
import { Slide } from 'react-slideshow-image';
import { Zoom } from 'react-slideshow-image';
import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png";
import 'react-slideshow-image/dist/styles.css'
@ -941,7 +941,7 @@ Cette fonction recuperer les stats des TOP 5 formations sur la periode saisie pa
<Dialog
open={open}
onClose={handleClose}>
<DialogTitle>Subscribe</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Subscribe</DialogTitle>
<DialogContent>
<DialogContentText>
To subscribe to this website, please enter your email address here. We
@ -1192,7 +1192,7 @@ Cette fonction recuperer les stats des TOP 5 formations sur la periode saisie pa
Cherif BALDE<br />
</div>
<div className="div_function" style={{ "fontSize": '20px', fontFamily:'DM Sans' }}>
Directeur Général <br/> MySy Training / HELYOS
Directeur Général <br/> MySy Training / ELYOS
</div>
</div>
<div className="ch_div_centre">
@ -1227,7 +1227,7 @@ Cette fonction recuperer les stats des TOP 5 formations sur la periode saisie pa
Patrick PIPAZ<br />
</div>
<div className="div_function" style={{ "fontSize": '20px', fontFamily:'DM Sans' }}>
Responsable développement <br/> MySy Training / HELYOS
Responsable Commercial <br/> MySy Training / ELYOS
</div>
</div>
<div className="ch_div_centre">

View File

@ -1463,7 +1463,7 @@ const TestUrl_New = (props) => {
<Dialog
open={open}
onClose={handleClose}>
<DialogTitle>Subscribe</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Subscribe</DialogTitle>
<DialogContent>
<DialogContentText>
{dialogMessage}

View File

@ -962,8 +962,6 @@ function UpdateParnterInfo(props) {
form.append("indicateur_4_taille", p_indicateur4_taille);
form.append("indicateur_4_color", p_indicateur4_color);
form.append("contact_public_email", p_contact_public_email);
form.append("contact_public_telephone", p_contact_public_telephone);
@ -975,6 +973,21 @@ function UpdateParnterInfo(props) {
form.append("indicateur_4_gras", "400");
if (partner_catalog_pub_url)
form.append("partner_catalog_pub_url", partner_catalog_pub_url);
else
form.append("partner_catalog_pub_url", "");
if (partner_intranet_pub_url)
form.append("partner_intranet_pub_url", partner_catalog_pub_url);
else
form.append("partner_intranet_pub_url", "");
if (partner_ent_student_url)
form.append("partner_ent_student_url", partner_ent_student_url);
else
form.append("partner_ent_student_url", "");
form.append("_id", selected_catalog_pub_config_id);
@ -1737,6 +1750,7 @@ function UpdateParnterInfo(props) {
const [partner_catalog_pub_url, setpartner_catalog_pub_url] = useState("");
const [partner_intranet_pub_url, setpartner_intranet_pub_url] = useState("");
const [partner_ent_student_url, setpartner_ent_student_url] = useState("");
async function submenu_donnee_catalog_pub() {
Get_Partner_Catalog_Pub_Config();
@ -1744,9 +1758,11 @@ function UpdateParnterInfo(props) {
var new_nom = (p_nom).replace(/[^0-9a-z]/gi, '').toLocaleLowerCase();
var new_catalog_url = window.location.protocol + "//" + new_nom + "." + process.env.REACT_APP_PART_PUB_CATALOG_DOMAIN + "moncatalog";
var new_intranet_url = window.location.protocol + "//" + new_nom + "." + process.env.REACT_APP_PART_PUB_CATALOG_DOMAIN + "intranet";
var new_ent_student = window.location.protocol + "//" + new_nom + "." + process.env.REACT_APP_PART_PUB_CATALOG_DOMAIN + "ent_student";
setpartner_catalog_pub_url(new_catalog_url);
setpartner_intranet_pub_url(new_intranet_url);
setpartner_ent_student_url(new_ent_student);
setsubmenu("submenu_donnee_catalog_pub");
}
@ -2175,7 +2191,7 @@ function UpdateParnterInfo(props) {
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Partner_Catalog_Pub_Config = ', error);
alert(" Impossible de récuperer la configuration du catalogue public ")
alert(" Impossible de récuperer la configuration de vos sites publics ")
})
}
@ -2602,16 +2618,16 @@ function UpdateParnterInfo(props) {
form.append("_id", selected_catalog_pub_config_id);
form.append("banniere_img", img_bg_file);
// console.log("Add_Update_Catalog_Pub_Banniere form == ", form);
// console.log("Add_Update_Catalog_Pub_Banniere form == ", form);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Add_Update_Partner_Catalog_Pub_Config/";
// console.log("myurl== ", myurl);
// console.log("myurl== ", myurl);
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
// console.log(" In Add_Update_Catalog_Pub_Banniere res.data.status = " + res.data.status);
// console.log(" In Add_Update_Catalog_Pub_Banniere res.data.status = " + res.data.status);
//console.log(" In Add_Update_Catalog_Pub_Banniere res.data.message r_class = " + res.data.message);
if (String(res.data.status) === String("true")) {
@ -3362,7 +3378,7 @@ function UpdateParnterInfo(props) {
>
<DialogTitle> Choisir une couleur</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Choisir une couleur</DialogTitle>
<DialogContent className="DialogContent_color_pickup_width" >
<DialogContentText>
@ -3429,7 +3445,7 @@ function UpdateParnterInfo(props) {
{String(is_partner_admin_account) === "1" && <Button variant="outlined" onClick={submenu_donnee_facturation} className="detail_submenu" id='submenu_donnee_facturation' name='submenu_donnee_facturation'>DONNEES FACTURATION</Button>}
<Button variant="outlined" onClick={submenu_donnee_securite} className="detail_submenu" id='submenu_donnee_securite' name='submenu_donnee_securite'>SECURITE</Button>
{/*<Button variant="outlined" onClick={submenu_contact} className="detail_submenu" id='submenu_contact' name='submenu_contact'>Contact & Adresses</Button>*/}
{String(is_partner_admin_account) === "1" && <Button variant="outlined" onClick={submenu_donnee_catalog_pub} className="detail_submenu" id='submenu_donnee_catalog_pub' name='submenu_donnee_catalog_pub'>CATALOG. PUB</Button>}
{String(is_partner_admin_account) === "1" && <Button variant="outlined" onClick={submenu_donnee_catalog_pub} className="detail_submenu" id='submenu_donnee_catalog_pub' name='submenu_donnee_catalog_pub'>SITES PUBLICS</Button>}
</div>
@ -3447,7 +3463,7 @@ function UpdateParnterInfo(props) {
</div>}
{String(submenu).trim() === "submenu_donnee_catalog_pub" && <div className="training_data">
<h3 style={{ fontFamily:'DM Sans' }}> Configuration du Catalogue public </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Configuration des sites publics </h3>
<div className="partner_catalog_pub">
@ -3455,7 +3471,7 @@ function UpdateParnterInfo(props) {
<div className="div_row">
<TextField
name="config_url"
label="lien web (url) mon catalogue "
label="lien web (url) Catalogue "
className="texte_area"
sx={{ m: 1, width: '48%' }}
InputProps={{
@ -3484,8 +3500,8 @@ function UpdateParnterInfo(props) {
</div>
<div className="div_row">
<TextField
name="config_url"
label="lien web (url) mon intranet "
name="config_url_intranet"
label="lien web (url) Intranet "
className="texte_area"
sx={{ m: 1, width: '20%' }}
InputProps={{
@ -3513,6 +3529,40 @@ function UpdateParnterInfo(props) {
</Button>
</div>
<div className="div_row">
<TextField
name="config_url_ent_student"
label="lien web (url) Espace numérique de travail (ENT) "
className="texte_area"
sx={{ m: 1, width: '20%' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<LanguageIcon />
</InputAdornment>
),
}}
value={partner_ent_student_url}
/> <Button
onClick={(event) => {
window.open(
String(partner_ent_student_url),
'_blank'
);
}}
style={{ marginTop: '10px' }}
>
<OpenInNewIcon />
</Button>
</div>
<div className="div_row">
<hr className="hr_break" />
</div>
@ -3520,7 +3570,6 @@ function UpdateParnterInfo(props) {
{String(submenu_catalog_pub) === String("design") &&
<div style={{ "border": "None" }}>
<div className="div_row">
@ -4749,7 +4798,7 @@ function UpdateParnterInfo(props) {
{Partner_Catalog_Pub_banniere && String(Partner_Catalog_Pub_banniere).length > 20 && <div className="div_row" style={{ "border": "None" }}>
Bannière actuelle : <br />
<img src={Partner_Catalog_Pub_banniere} alt={""} className="img_bg_file_css" />
<img src={Partner_Catalog_Pub_banniere} alt={""} className="img_bg_file_css" />
<br />
<br />
<Button variant="contained" className="btn_enreg" onClick={Delete_Catalog_Pub_Banniere_Img}>Supprimer Bannière
@ -6014,27 +6063,27 @@ function UpdateParnterInfo(props) {
<div className="koUpdateData" style={{ "color": "orange", "textAlign": "center" }}> /!\ Pensez à enregistrer les modifications</div>
</div>}
</div>
<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>
<div className="div_row_droite">
<Button variant="contained" color="success" className="div_row22 btn_modif" onClick={annuler_change_user_data}>Annuler</Button>
</div>
{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>
<div className="div_row_droite">
<Button variant="contained" color="success" className="div_row22 btn_modif" onClick={annuler_change_user_data}>Annuler</Button>
</div>
}
{fields1desabled == true &&
<Button variant="contained" color="success" className="div_row22 btn_modif" onClick={enablefieds1}>Editer</Button>
}
</div>
<div className="div_row"> &nbsp;</div>
}
{fields1desabled == true &&
<Button variant="contained" color="success" className="div_row22 btn_modif" onClick={enablefieds1}>Editer</Button>
}
</div>
<div className="div_row"> &nbsp;</div>
<div className="titre1"> Accès E-Learning </div>
<div style={{ display: 'flex', flexDirection: 'row', gap: '20px', width: '100%', flexWrap: 'wrap', justifyContent: 'left' }} onChange={DataUpdated}>

View File

@ -21,9 +21,11 @@ import TwitterIcon from '@mui/icons-material/Twitter';
import FacebookIcon from '@mui/icons-material/Facebook';
import LinkedInIcon from '@mui/icons-material/LinkedIn';
import axios from "axios";
import { propsToClassKey } from "@mui/styles";
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
function UpdateUserInfo() {
function UpdateUserInfo(props) {
const history = useHistory();
const [myApiResponse, setmyApiResponse] = useState("");
const [result, setResult] = useState("");
@ -118,6 +120,8 @@ function UpdateUserInfo() {
var mylocaltraining = JSON.parse(res.data.message);
if (mylocaltraining) {
console.log(" #### mylocaltraining === ", mylocaltraining)
if (mylocaltraining.adr_city) {
document.getElementsByName("adr_city")[0].value = mylocaltraining.adr_city;
document.getElementsByName("adr_city")[0].disabled = true;
@ -173,14 +177,14 @@ function UpdateUserInfo() {
document.getElementsByName("adr_street")[0].style.backgroundColor = "#ECEFF1";
}
if (mylocaltraining.surname) {
document.getElementsByName("surname")[0].value = mylocaltraining.surname;
if (mylocaltraining.prenom) {
document.getElementsByName("surname")[0].value = mylocaltraining.prenom;
document.getElementsByName("surname")[0].disabled = true;
document.getElementsByName("surname")[0].style.backgroundColor = "#ECEFF1";
}
if (mylocaltraining.last_name) {
document.getElementsByName("last_name")[0].value = mylocaltraining.last_name;
if (mylocaltraining.nom) {
document.getElementsByName("last_name")[0].value = mylocaltraining.nom;
document.getElementsByName("last_name")[0].disabled = true;
document.getElementsByName("last_name")[0].style.backgroundColor = "#ECEFF1";
}
@ -298,9 +302,11 @@ function UpdateUserInfo() {
}
const [isLoading, setLoading] = useState();
function RecordData() {
const formData = new FormData();
const url = process.env.REACT_APP_API_URL + "myclass/api/update_user_account/";
const url = process.env.REACT_APP_API_URL + "myclass/api/Get_Ent_Student_update_user_account/";
var adr_city = document.getElementsByName("adr_city")[0].value;
var adr_zip = document.getElementsByName("adr_zip")[0].value;
@ -310,8 +316,8 @@ function UpdateUserInfo() {
var link_linkedin = document.getElementsByName("link_linkedin")[0].value;
var link_twitter = document.getElementsByName("link_twitter")[0].value;
var adr_street = document.getElementsByName("adr_street")[0].value;
var surname = document.getElementsByName("surname")[0].value;
var last_name = document.getElementsByName("last_name")[0].value;
var prenom = document.getElementsByName("surname")[0].value;
var nom = document.getElementsByName("last_name")[0].value;
formData.append('token', stored_user);
@ -322,11 +328,13 @@ function UpdateUserInfo() {
formData.append('link_facebook', link_facebook);
formData.append('link_twitter', link_twitter);
formData.append('adr_street', adr_street);
formData.append('surname', surname);
formData.append('last_name', last_name);
formData.append('prenom', prenom);
formData.append('nom', nom);
formData.append('link_linkedin', link_linkedin);
formData.append('apprenant_id', props.apprenant_id);
setLoading(true);
fetch(
url,
{
@ -336,22 +344,39 @@ function UpdateUserInfo() {
)
.then((response) => response.json())
.then((result) => {
setLoading(false);
//console.log('Success:', result['message'], "result['status'] = ", result['status']);
setmyApiResponse(result['status']);
setResult(result['message']);
if (String(result['status']) === String("true")) {
settestval("true");
desablefield1();
}else if (String(result['status']) === String("Err_Connexion")) {
setdisplay_alert_mysy("1");
setalert_message(result['message']);
setalert_type("success");
} else if (String(result['status']) === String("false")) {
setmyApiResponse("false");
setdisplay_alert_mysy("1");
setalert_message(result['message']);
setalert_type("error");
}
else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']);
history.push("/Connexion");
}
}
})
.catch((error) => {
setLoading(false);
console.error('Error:', error);
setmyApiResponse("false");
setdisplay_alert_mysy("1");
setalert_message("Impossible de mettre à jour les données");
setalert_type("error");
});
@ -396,7 +421,7 @@ function UpdateUserInfo() {
function UpdateUserPwd() {
setupdatepwd(false);
const url = process.env.REACT_APP_API_URL + "myclass/api/change_user_pwd/";
const url = process.env.REACT_APP_API_URL + "myclass/api/Get_Ent_Student_change_user_pwd/";
const formData = new FormData();
formData.append('token', stored_user);
@ -413,8 +438,9 @@ function UpdateUserInfo() {
formData.append('pwd', pwd);
formData.append('new_pwd', new_pwd);
formData.append('conf_new_pwd', conf_new_pwd);
formData.append('apprenant_id', props.apprenant_id);
setLoading(true);
fetch(
url,
{
@ -424,16 +450,26 @@ function UpdateUserInfo() {
)
.then((response) => response.json())
.then((result) => {
setLoading(false);
//console.log('Success:', result['message'], "result['status'] = ", result['status']);
setmyApiResponse(result['status']);
setResult(result['message']);
if (String(result['status']) == String("true")) {
setupdatepwd(true);
setfields1desabled(true);
setdisplay_alert_mysy("1");
setalert_message(result['message']);
setalert_type("success");
} else {
setdisplay_alert_mysy("1");
setalert_message(result['message']);
setalert_type("error");
}
})
.catch((error) => {
setLoading(false);
console.error('Error:', error);
setmyApiResponse("false");
setupdatepwd(false);
@ -498,32 +534,53 @@ function UpdateUserInfo() {
};
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("");
}
return (
<div className='updateuserinfo'>
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
{/*** Affichage des messages d'alerte*/}
{display_alert_mysy && String(display_alert_mysy) === "1" &&
<Module_Alert_Confirmation alert_message={alert_message}
alert_type={alert_type}
clear_alert_message={clear_alert_message}
clear_alert_type={clear_alert_type}
clear_display_alert_mysy={clear_display_alert_mysy}
/>
}
{/*** FIN Affichage des messages d'alerte*/}
<div className="titre1"> Données personnelles </div>
<hr className="my_hr"/>
<hr className="my_hr" />
{String(testval) == String("true") && <div className="okUpdateData">
Les données ont été mises à jour.
</div>
}
{String(testval) == String("false") && <div className="koUpdateData">
Erreur mise à jour.
</div>
}
&nbsp;
<Box alignItems="left" sx={{ '& > :not(style)': { m: 1 }, width: '100%', }}>
&nbsp;
<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%' }}
sx={{ m: 1, width: '48%', fontFamily: 'DM Sans' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
@ -539,7 +596,7 @@ function UpdateUserInfo() {
name="surname"
label="Prénom"
className="texte_area"
sx={{ m: 1, width: '48%' }}
sx={{ m: 1, width: '48%', fontFamily: 'DM Sans' }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
@ -646,7 +703,7 @@ function UpdateUserInfo() {
/>
<br />
<TextField
className="texte_area"
className="texte_area"
name="adr_zip"
label="Code Postal"
sx={{ m: 1, width: '48%' }}
@ -661,7 +718,7 @@ function UpdateUserInfo() {
/>
<TextField
className="texte_area"
className="texte_area"
name="adr_city"
label="Ville"
sx={{ m: 1, width: '48%' }}
@ -677,7 +734,7 @@ function UpdateUserInfo() {
<br />
<TextField
className="texte_area"
className="texte_area"
name="adr_country"
label="Pays"
sx={{ m: 1, width: '48%' }}
@ -709,24 +766,14 @@ function UpdateUserInfo() {
</div>
</Box>
<hr className="my_hr"/>
<div style={{"width":"10%"}}> &nbsp;</div>
<hr className="my_hr" />
<div style={{ "width": "10%" }}> &nbsp;</div>
<div className="titre1"> Securité </div>
<hr className="my_hr"/>
<hr className="my_hr" />
&nbsp;
<Box alignItems="left" sx={{ '& > :not(style)': { m: 1 } }}>
{updatepwd == false && <div className="koUpdateData">
Erreur mise à jour.
</div>
}
{updatepwd == true && <div className="okUpdateData">
La mise à jour été faite
</div>
}
&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
@ -751,7 +798,7 @@ function UpdateUserInfo() {
</FormControl>
<br />
<FormControl sx={{ m: 1, width: '90%' }} variant="standard" size="small" className="texte_area_passwd">
<FormControl sx={{ m: 1, width: '90%' }} variant="standard" size="small" className="texte_area_passwd">
<InputLabel htmlFor="outlined-adornment-password2"></InputLabel>
<OutlinedInput
id="new_pwd"

View File

@ -2,12 +2,13 @@ import React, { useRef, useState, useEffect } from "react";
import "./new_s_detail_formation_2025.css";
import { useParams } from 'react-router-dom'
import axios from "axios";
import { FcInfo } from "react-icons/fc";
import 'reactjs-popup/dist/index.css';
import { Helmet } from "react-helmet";
import 'react-slideshow-image/dist/styles.css'
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import slideimg1 from "../../mysy_img/education.jpg";
import slideimg4 from "../../mysy_img/mysy_img.png";
@ -59,7 +60,7 @@ import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
const New_C_Detail_Formation_2025 = (props) => {
const { classId, action } = useParams();
const [result, setResult] = useState("");
@ -87,14 +88,14 @@ const New_C_Detail_Formation_2025 = (props) => {
const [text_size, settext_size] = useState("0");
const socialIconStyles = {
width: '24px',
height: '24px',
width: '24px',
height: '24px',
cursor: 'pointer',
};
const socialIconStyles_mobile = {
width: '24px',
height: '24px',
width: '24px',
height: '24px',
cursor: 'pointer',
};
@ -842,6 +843,7 @@ const New_C_Detail_Formation_2025 = (props) => {
} else {
setinscritpion("1");
}
@ -1384,7 +1386,7 @@ const New_C_Detail_Formation_2025 = (props) => {
<div>
<div style={{ width: '90%', marginLeft: 'auto', marginRight: 'auto', background: "#FFF", borderRadius: '10px' }}>
<div style={{ width: '90%', marginLeft: 'auto', marginRight: 'auto', background: "#FFF", marginTop: '1rem', paddingBottom:'1.5rem' }}>
<div style={{ width: '90%', marginLeft: 'auto', marginRight: 'auto', background: "#FFF", marginTop: '1rem', paddingBottom: '1.5rem' }}>
<div style={{ width: '100%', float: 'left', marginBottom: '1rem' }}>
@ -1457,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>
@ -1652,9 +1656,9 @@ const New_C_Detail_Formation_2025 = (props) => {
<div style={{ width: '90%', marginLeft: 'auto', marginRight: 'auto', background: "#FFF", borderRadius: '10px' }}>
<div style={{ width: '90%', marginLeft: 'auto', marginRight: 'auto', background: "#FFF", marginTop: '1rem' }}>
<div className="mob_info_page" id="mob_info_page">
<div className="mob_info_page" id="mob_info_page" >
<div className="mob_info_page_title_desc" >
<div className="mob_info_page_title_desc" ref={myRef_informe} id="myRef_informe" >
{String(inscritpion) === "2" && <div>
@ -1699,32 +1703,40 @@ const New_C_Detail_Formation_2025 = (props) => {
{(JSON.parse(formation).session_ondemande) && (JSON.parse(formation).session_ondemande) === "1" && <nav> Sessions de formation à la demande</nav>}
{(!(JSON.parse(formation).session_ondemande) || (JSON.parse(formation).session_ondemande) === "0") && <nav>
{(JSON.parse(formation).distantiel) === "1" && (JSON.parse(formation).presentiel) === "1" &&
{(JSON.parse(formation).mode_animation) === "2" &&
(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)} au
{(JSON.parse(formation).date_fin).substring(0, 10)} <b> A Distance</b> et <b>En Présentiel </b>- {(JSON.parse(formation).adresse)} &nbsp;{(JSON.parse(formation).code_postal)}
{(JSON.parse(formation).date_fin).substring(0, 10)}
<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)}
</nav>
}
{(JSON.parse(formation).distantiel) === "1" && (JSON.parse(formation).presentiel) === "1" &&
{(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_fin).substring(0, 10)} <b> A Distance</b> et <b>En Présentiel </b>- {(JSON.parse(formation).adresse)} &nbsp;{(JSON.parse(formation).code_postal)}
{(JSON.parse(formation).date_fin).substring(0, 10)}
<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)}
</nav>
}
{(JSON.parse(formation).distantiel) === "1" && ((JSON.parse(formation).presentiel) === "0" || !(JSON.parse(formation).presentiel)) &&
{(JSON.parse(formation).mode_animation) === "1" &&
(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)} au
{(JSON.parse(formation).date_fin).substring(0, 10)} <b>A Distance </b> </nav>
}
{(JSON.parse(formation).distantiel) === "1" && ((JSON.parse(formation).presentiel) === "0" || !(JSON.parse(formation).presentiel)) &&
{(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;
@ -1732,14 +1744,14 @@ const New_C_Detail_Formation_2025 = (props) => {
}
{(JSON.parse(formation).presentiel) === "1" && ((JSON.parse(formation).distantiel) === "0" || !(JSON.parse(formation).distantiel)) &&
{(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> -
{(JSON.parse(formation).adresse)} &nbsp;{(JSON.parse(formation).code_postal)}
</nav>}
{(JSON.parse(formation).presentiel) === "1" && ((JSON.parse(formation).distantiel) === "0" || !(JSON.parse(formation).distantiel)) &&
{(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_fin).substring(0, 10)} <b>En Présentiel </b> -
@ -1824,7 +1836,7 @@ const New_C_Detail_Formation_2025 = (props) => {
>
<Typography sx={{ color: 'text.secondary', }}>
{val.titre}
{val.titre}
</Typography>
</AccordionSummary>
<AccordionDetails>
@ -1864,18 +1876,19 @@ const New_C_Detail_Formation_2025 = (props) => {
</div>
</div>
<hr style={{ "width": "100%", border: "1px solid #E2E9FB", marginTop: '10px' }} />
<hr style={{ "width": "100%", border: "1px solid #E2E9FB", marginTop: '10px' }} />
<div style={{ width: '90%', marginLeft: 'auto', marginRight: 'auto', background: "#FFF", borderRadius: '10px' }}>
<div style={{ width: '90%', marginLeft: 'auto', marginRight: 'auto', background: "#FFF", marginTop: '1rem', height:'10px' }}>
<div style={{ width: '90%', marginLeft: 'auto', marginRight: 'auto', background: "#FFF", marginTop: '1rem', height: '10px' }}>
&nbsp;
</div>
</div>
<div style={{ width: '90%', marginLeft: 'auto', marginRight: 'auto', background: "#FFF", borderRadius: '10px' }}>
<div style={{ width: '100%', float: 'left', minHeight: '10rem', background: 'None', zIndex: '99', position: "relative", backgroundColor: 'white', marginBottom:'2rem',
borderRadius:'10px'
}}>
<div style={{
width: '100%', float: 'left', minHeight: '10rem', background: 'None', zIndex: '99', position: "relative", backgroundColor: 'white', marginBottom: '2rem',
borderRadius: '10px'
}}>
<br />
<div className="mob_block_cross_sell_cat" id="mob_block_cross_sell_cat_new">
@ -2059,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' }} >
<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"
@ -2093,7 +2106,7 @@ const New_C_Detail_Formation_2025 = (props) => {
</div>
}
<br />
<div className="block_info_page_pave_title_desc">
@ -2113,7 +2126,6 @@ const New_C_Detail_Formation_2025 = (props) => {
<div className="block_info_page_pave_title_desc_title">
Les sessions
</div>
<div className="block_info_page_pave_title_desc_desc session_block">
<ul style={{ "width": "100%" }}>
@ -2126,53 +2138,60 @@ const New_C_Detail_Formation_2025 = (props) => {
{(JSON.parse(formation).session_ondemande) && (JSON.parse(formation).session_ondemande) === "1" && <nav> Sessions de formation à la demande</nav>}
{(!(JSON.parse(formation).session_ondemande) || (JSON.parse(formation).session_ondemande) === "0") && <nav>
{(JSON.parse(formation).distantiel) === "1" && (JSON.parse(formation).presentiel) === "1" &&
{(JSON.parse(formation).mode_animation) === "2" &&
(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> A Distance</b> et <b>En Présentiel </b>- {(JSON.parse(formation).adresse)} &nbsp;{(JSON.parse(formation).code_postal)}
{(JSON.parse(formation).date_fin).substring(0, 10)}
<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)}
</nav>
}
{(JSON.parse(formation).distantiel) === "1" && (JSON.parse(formation).presentiel) === "1" &&
{(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_fin).substring(0, 10)} <b> A Distance</b> et <b>En Présentiel </b>- {(JSON.parse(formation).adresse)} &nbsp;{(JSON.parse(formation).code_postal)}
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)}
</nav>
}
{(JSON.parse(formation).distantiel) === "1" && ((JSON.parse(formation).presentiel) === "0" || !(JSON.parse(formation).presentiel)) &&
{(JSON.parse(formation).mode_animation) === "1" &&
(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>A Distance </b> </nav>
}
{(JSON.parse(formation).distantiel) === "1" && ((JSON.parse(formation).presentiel) === "0" || !(JSON.parse(formation).presentiel)) &&
{(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;
{(JSON.parse(formation).date_fin).substring(0, 10)} <b>A Distance </b> </nav>
Le &nbsp; {(JSON.parse(formation).date_debut).substring(0, 10)}&nbsp; <b>A Distance </b> </nav>
}
{(JSON.parse(formation).presentiel) === "1" && ((JSON.parse(formation).distantiel) === "0" || !(JSON.parse(formation).distantiel)) &&
{(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> -
{(JSON.parse(formation).adresse)} &nbsp;{(JSON.parse(formation).code_postal)}
</nav>}
{(JSON.parse(formation).presentiel) === "1" && ((JSON.parse(formation).distantiel) === "0" || !(JSON.parse(formation).distantiel)) &&
{(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_fin).substring(0, 10)} <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>}
</nav>}
</li>
@ -2216,7 +2235,7 @@ const New_C_Detail_Formation_2025 = (props) => {
<br />
{DetailTraining["tab_ue_detail_data"] && DetailTraining["tab_ue_detail_data"].length > 0 && < div className="block_info_page_pave_title_desc_long_text" >
<div className="block_info_page_pave_title_desc_title">
Modules
Modules
</div>
@ -2233,7 +2252,7 @@ const New_C_Detail_Formation_2025 = (props) => {
id={val._id}
>
<Typography sx={{ color: 'text.secondary', fontWeight:'500' }}>
<Typography sx={{ color: 'text.secondary', fontWeight: '500' }}>
{val.titre}
</Typography>
</AccordionSummary>
@ -2248,7 +2267,7 @@ const New_C_Detail_Formation_2025 = (props) => {
</div>
))}
</div>
</div>
</div>}
@ -2367,8 +2386,8 @@ const New_C_Detail_Formation_2025 = (props) => {
<div className="block_sticky_info_price">Gratuit
</div>
<div className="tag_eligle_cpf">Eligle CFP
</div>
{DetailTraining["cpf"] && String(DetailTraining["cpf"]) === "1" && <div className="tag_eligle_cpf">Éligible CPF</div>}
{(!DetailTraining["cpf"] || String(DetailTraining["cpf"]) !== "1") && <div className="tag_eligle_cpf">Non Élig. CPF</div>}
</div>
}
@ -2376,21 +2395,28 @@ const New_C_Detail_Formation_2025 = (props) => {
&& DetailTraining["price"] && <div className="block_prix_2025">
<div className="block_sticky_info_price"> {String(DetailTraining["price"])} HT
</div>
<div className="tag_eligle_cpf">Eligle CFP
</div>
{DetailTraining["cpf"] && String(DetailTraining["cpf"]) === "1" && <div className="tag_eligle_cpf">Éligible CPF</div>}
{(!DetailTraining["cpf"] || String(DetailTraining["cpf"]) !== "1") && <div className="tag_eligle_cpf">Non Élig. CPF</div>}
</div>}
{String(DetailTraining["price"]) && String(DetailTraining["price"]) !== String("0") && DetailTraining.business_prices && Object.keys(DetailTraining.business_prices).length > 0
&& 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;
@ -608,13 +623,13 @@
.detail_class_submenu:hover:active,
.detail_class_submenu:hover {
background-color: #104277;
background-color: #107758;
color: white;
}
.detail_class_submenu:focus {
background-color: #104277;
background-color: #107758;
color: white;
}
@ -1579,7 +1594,7 @@
.discounted_price {
font-weight: 600;
font-size: 20px;
font-size: 18px;
color: #ff8c00;
}
@ -1894,13 +1909,13 @@
.detail_class_submenu:hover:active,
.detail_class_submenu:hover {
background-color: #104277;
background-color: #107758;
color: white;
}
.detail_class_submenu:focus {
background-color: #104277;
background-color: #107758;
color: white;
}
@ -1968,8 +1983,8 @@
text-align: right;
padding-right: 2rem;
border-radius: 20rem;
background-color: #104277;
border: 2px solid #104277;
background-color: #107758;
border: 2px solid #107758;
width: 12rem;
box-shadow: 1px 1px 10px 1px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 1px 1px 10px 1px rgba(0, 0, 0, 0.5);
@ -2466,7 +2481,7 @@
top: 350px;
text-align: left;
}
.block_info_page_pave_title_desc {
/* Title + Description */
@ -3711,7 +3726,7 @@
.discounted_price {
font-weight: 600;
font-size: 20px;
font-size: 18px;
color: #ff8c00;
}
@ -4077,13 +4092,13 @@
.detail_class_submenu:hover:active,
.detail_class_submenu:hover {
background-color: #104277;
background-color: #107758;
color: white;
}
.detail_class_submenu:focus {
background-color: #104277;
background-color: #107758;
color: white;
}
@ -4151,8 +4166,8 @@
text-align: right;
padding-right: 2rem;
border-radius: 20rem;
background-color: #104277;
border: 2px solid #104277;
background-color: #107758;
border: 2px solid #107758;
width: 12rem;
box-shadow: 1px 1px 10px 1px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 1px 1px 10px 1px rgba(0, 0, 0, 0.5);
@ -5896,7 +5911,7 @@
.discounted_price {
font-weight: 600;
font-size: 20px;
font-size: 18px;
color: #ff8c00;
}
@ -6262,13 +6277,13 @@
.detail_class_submenu:hover:active,
.detail_class_submenu:hover {
background-color: #104277;
background-color: #107758;
color: white;
}
.detail_class_submenu:focus {
background-color: #104277;
background-color: #107758;
color: white;
}
@ -6336,8 +6351,8 @@
text-align: right;
padding-right: 2rem;
border-radius: 20rem;
background-color: #104277;
border: 2px solid #104277;
background-color: #107758;
border: 2px solid #107758;
width: 12rem;
box-shadow: 1px 1px 10px 1px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 1px 1px 10px 1px rgba(0, 0, 0, 0.5);

View File

@ -160,7 +160,7 @@ const Header = () => {
setsomeoneconnected("0");
setDialog_1_open(false);
history.push("/recherche-formation");
}
}
function user_logout_confirmation() {
/* si c'est une connexion partner qui est active */
@ -197,7 +197,7 @@ const Header = () => {
style: {
overflowY: 'unset',
position: 'absolute',
top: '7rem',
top: '20rem',
margin: "2px",
},
}}

View File

@ -0,0 +1,322 @@
import React, { useState, useEffect } from 'react';
import './Header.css';
import moment from "moment";
import { getCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import Header_MySy_Logo from '../../img_new_design_2025/header_mysy_logo.png';
import Header_User from '../../img_new_design_2025/header_user.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 Button from '@mui/material/Button';
import { useCookies } from "react-cookie";
import CancelPresentationIcon from '@mui/icons-material/CancelPresentation';
import { makeStyles } from "@material-ui/core/styles";
import Paper from '@material-ui/core/Paper';
import Draggable from 'react-draggable';
import { IconButton } from '@material-ui/core';
function PaperComponent(props) {
return (
<Draggable
handle="#draggable-dialog-title"
cancel={'[class*="MuiDialogContent-root"]'}
>
<Paper {...props} />
</Draggable>
);
}
const useStyles = makeStyles((theme) => ({
dialog: {
position: 'absolute',
// left: 10,
top: 400
},
paper: {
overflowY: 'unset',
},
customizedButton: {
position: 'absolute',
left: '98%',
top: '-3%',
backgroundColor: 'lightgray',
color: 'gray',
},
}));
const Header_Client_Intranet = () => {
const history = useHistory();
const classes = useStyles();
const [userconnected, setuserconnected] = useState("0");
const [someoneconnected, setsomeoneconnected] = useState("0");
const [partnerconnected, setpartnerconnected] = useState("0");
const stored_user = getCookie('tokenmysych');
const stored_part = getCookie('tokenmysypart');
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych'], { path: '/' });
const [partcookie, setpartCookie, removepartCookie] = useCookies(['tokenmysypart'], { path: '/' });
const [PartnerMenu, setPartnerMenu] = React.useState(null);
const [AccountMenu, setAccountMenu] = React.useState(null);
const [ProduitMenu, setproduitMenu] = React.useState(null);
useEffect(() => {
var local_user_connect = 0;
var local_part_connect = 0;
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
local_user_connect = 0;
} else {
setuserconnected("1");
setsomeoneconnected("1");
local_user_connect = 1;
//alert(" user connected OK");
}
if (typeof (stored_part) === "undefined" || String(stored_part) === '') {
setpartnerconnected("0");
local_part_connect = 0;
} else {
setpartnerconnected("1");
setsomeoneconnected("1");
local_part_connect = 1;
//alert(" partner connected OK");
}
}, []);
const handleAccountCreation = () => {
setAccountMenu(null);
history.push("/signup/")
};
const handleMyAccount = () => {
setAccountMenu(null);
history.push("/mysy-user-account")
};
const handleAccountConnexion = () => {
setAccountMenu(null);
history.push("/signin/")
};
const handleMyPartnerAccount = () => {
setAccountMenu(null);
history.push("/Partner")
};
function handleAccountConnexion_v2() {
if (String(userconnected) === String("1")) {
handleMyAccount();
}
else if (String(partnerconnected) === String("1")) {
handleMyPartnerAccount();
}
}
const [Dialog_1_open, setDialog_1_open] = React.useState(false);
const Dialog_1_handleClose = () => {
};
const Dialog_1_handleClose_buton = () => {
setDialog_1_open(false);
};
function part_logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_part) != "undefined") {
const stored_cookie = getCookie('tokenmysypart');
var acces_right_token_name = stored_cookie + "_uar";
setpartCookie("tokenmysypart", "", { path: '/' });
setpartCookie(acces_right_token_name, "", { path: '/' });
removeCookie(acces_right_token_name, { path: '/' });
setpartCookie("mysy_session_display_view", "", { path: '/' });
setpartCookie("mysy_menu_gauche_reduit", "", { path: '/' });
setpartCookie("mysy_catalog_data_row_grouped_by", "", { path: '/' });
removeCookie("tokenmysypart", { path: '/' });
removeCookie("mysy_session_display_view", { path: '/' });
removeCookie("mysy_menu_gauche_reduit", { path: '/' });
removeCookie("mysy_catalog_data_row_grouped_by", { path: '/' });
}
setsomeoneconnected("0");
setDialog_1_open(false);
history.push("/recherche-formation");
}
function user_logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_user) != "undefined") {
const stored_cookie = getCookie('tokenmysych');
var acces_right_token_name = stored_cookie + "_uar";
setpartCookie("tokenmysych", "", { path: '/' });
setpartCookie(acces_right_token_name, "", { path: '/' });
removeCookie(acces_right_token_name, { path: '/' });
removeCookie("tokenmysych", { path: '/' });
}
history.push("/intranet");
}
return (
<div className='header_automatic_files'>
{/*** GESTION Deconnexion */}
<Dialog
open={Dialog_1_open}
// onClose={Dialog_1_handleClose}
className="displaypartnersession"
static
onClose={() => null}
PaperProps={{
className: classes.paper, // Apply the paper style
style: {
overflowY: 'unset',
position: 'absolute',
top: '20rem',
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>
Confirmez la deconnexion <br />
</DialogContentText>
</DialogContent>
<DialogActions>
<IconButton
//autoFocus
onClick={Dialog_1_handleClose_buton}
color="primary"
className={classes.customizedButton}
>
<CancelPresentationIcon />
</IconButton>
<div className="div_row">
<div className="div_row_gauche">
<Button
onClick={(e) => {
if (partnerconnected && String(partnerconnected) === '1')
part_logout_confirmation();
if (userconnected && String(userconnected) === '1')
user_logout_confirmation();
}}
className="bton_enreg_dialog">Deconnexion</Button>
</div>
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Button onClick={Dialog_1_handleClose_buton} className="bton_annule_dialog" >Annuler</Button>
</div>
</div>
</DialogActions>
</Dialog>
{/*** Fin GESTION Deconnexion */}
<header className="header_new_2025">
<div className="header-content">
<div className="logo-menu">
<img src={Header_MySy_Logo} alt="Logo MySy" className="logo" style={{ cursor: 'pointer' }} onClick={(e) => {
// e.preventDefault();
history.push("/");
}} />
<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>
<div className="separator"></div>
<a href="/marketplace" className="menu-link">Marketplace</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>}
</div>
<div className="separator hide_on_mobile"></div>
{String(someoneconnected) !== String("1") && <div className="login-link hide_on_mobile" onClick={handleAccountConnexion}>
<img src={Header_User} alt="User icon" className="user-icon hide_on_mobile" />
<span className='hide_on_mobile'>Connexion</span>
</div>}
{String(someoneconnected) === String("1") && <div className="login-link hide_on_mobile" onClick={(e) => setDialog_1_open(true)}>
<img src={Header_User} alt="User icon" className="user-icon hide_on_mobile" />
<span className='hide_on_mobile'>Deconnexion</span>
</div>}
</div>
</div >
</header >
</div >
);
};
export default Header_Client_Intranet;

View File

@ -0,0 +1,322 @@
import React, { useState, useEffect } from 'react';
import './Header.css';
import moment from "moment";
import { getCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import Header_MySy_Logo from '../../img_new_design_2025/header_mysy_logo.png';
import Header_User from '../../img_new_design_2025/header_user.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 Button from '@mui/material/Button';
import { useCookies } from "react-cookie";
import CancelPresentationIcon from '@mui/icons-material/CancelPresentation';
import { makeStyles } from "@material-ui/core/styles";
import Paper from '@material-ui/core/Paper';
import Draggable from 'react-draggable';
import { IconButton } from '@material-ui/core';
function PaperComponent(props) {
return (
<Draggable
handle="#draggable-dialog-title"
cancel={'[class*="MuiDialogContent-root"]'}
>
<Paper {...props} />
</Draggable>
);
}
const useStyles = makeStyles((theme) => ({
dialog: {
position: 'absolute',
// left: 10,
top: 400
},
paper: {
overflowY: 'unset',
},
customizedButton: {
position: 'absolute',
left: '98%',
top: '-3%',
backgroundColor: 'lightgray',
color: 'gray',
},
}));
const Header_ENT_Student = () => {
const history = useHistory();
const classes = useStyles();
const [userconnected, setuserconnected] = useState("0");
const [someoneconnected, setsomeoneconnected] = useState("0");
const [partnerconnected, setpartnerconnected] = useState("0");
const stored_user = getCookie('tokenmysych');
const stored_part = getCookie('tokenmysypart');
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych'], { path: '/' });
const [partcookie, setpartCookie, removepartCookie] = useCookies(['tokenmysypart'], { path: '/' });
const [PartnerMenu, setPartnerMenu] = React.useState(null);
const [AccountMenu, setAccountMenu] = React.useState(null);
const [ProduitMenu, setproduitMenu] = React.useState(null);
useEffect(() => {
var local_user_connect = 0;
var local_part_connect = 0;
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
setuserconnected("0");
local_user_connect = 0;
} else {
setuserconnected("1");
setsomeoneconnected("1");
local_user_connect = 1;
//alert(" user connected OK");
}
if (typeof (stored_part) === "undefined" || String(stored_part) === '') {
setpartnerconnected("0");
local_part_connect = 0;
} else {
setpartnerconnected("1");
setsomeoneconnected("1");
local_part_connect = 1;
//alert(" partner connected OK");
}
}, []);
const handleAccountCreation = () => {
setAccountMenu(null);
history.push("/signup/")
};
const handleMyAccount = () => {
setAccountMenu(null);
history.push("/mysy-user-account")
};
const handleAccountConnexion = () => {
setAccountMenu(null);
history.push("/signin/")
};
const handleMyPartnerAccount = () => {
setAccountMenu(null);
history.push("/Partner")
};
function handleAccountConnexion_v2() {
if (String(userconnected) === String("1")) {
handleMyAccount();
}
else if (String(partnerconnected) === String("1")) {
handleMyPartnerAccount();
}
}
const [Dialog_1_open, setDialog_1_open] = React.useState(false);
const Dialog_1_handleClose = () => {
};
const Dialog_1_handleClose_buton = () => {
setDialog_1_open(false);
};
function part_logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_part) != "undefined") {
const stored_cookie = getCookie('tokenmysypart');
var acces_right_token_name = stored_cookie + "_uar";
setpartCookie("tokenmysypart", "", { path: '/' });
setpartCookie(acces_right_token_name, "", { path: '/' });
removeCookie(acces_right_token_name, { path: '/' });
setpartCookie("mysy_session_display_view", "", { path: '/' });
setpartCookie("mysy_menu_gauche_reduit", "", { path: '/' });
setpartCookie("mysy_catalog_data_row_grouped_by", "", { path: '/' });
removeCookie("tokenmysypart", { path: '/' });
removeCookie("mysy_session_display_view", { path: '/' });
removeCookie("mysy_menu_gauche_reduit", { path: '/' });
removeCookie("mysy_catalog_data_row_grouped_by", { path: '/' });
}
setsomeoneconnected("0");
setDialog_1_open(false);
history.push("/recherche-formation");
}
function user_logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_user) != "undefined") {
const stored_cookie = getCookie('tokenmysych');
var acces_right_token_name = stored_cookie + "_uar";
setpartCookie("tokenmysych", "", { path: '/' });
setpartCookie(acces_right_token_name, "", { path: '/' });
removeCookie(acces_right_token_name, { path: '/' });
removeCookie("tokenmysych", { path: '/' });
}
history.push("/intranet");
}
return (
<div className='header_automatic_files'>
{/*** GESTION Deconnexion */}
<Dialog
open={Dialog_1_open}
// onClose={Dialog_1_handleClose}
className="displaypartnersession"
static
onClose={() => null}
PaperProps={{
className: classes.paper, // Apply the paper style
style: {
overflowY: 'unset',
position: 'absolute',
top: '20rem',
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>
Confirmez la deconnexion <br />
</DialogContentText>
</DialogContent>
<DialogActions>
<IconButton
//autoFocus
onClick={Dialog_1_handleClose_buton}
color="primary"
className={classes.customizedButton}
>
<CancelPresentationIcon />
</IconButton>
<div className="div_row">
<div className="div_row_gauche">
<Button
onClick={(e) => {
if (partnerconnected && String(partnerconnected) === '1')
part_logout_confirmation();
if (userconnected && String(userconnected) === '1')
user_logout_confirmation();
}}
className="bton_enreg_dialog">Deconnexion</Button>
</div>
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Button onClick={Dialog_1_handleClose_buton} className="bton_annule_dialog" >Annuler</Button>
</div>
</div>
</DialogActions>
</Dialog>
{/*** Fin GESTION Deconnexion */}
<header className="header_new_2025">
<div className="header-content">
<div className="logo-menu">
<img src={Header_MySy_Logo} alt="Logo MySy" className="logo" style={{ cursor: 'pointer' }} onClick={(e) => {
// e.preventDefault();
history.push("/");
}} />
<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>
<div className="separator"></div>
<a href="/marketplace" className="menu-link">Marketplace</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>}
</div>
<div className="separator hide_on_mobile"></div>
{String(someoneconnected) !== String("1") && <div className="login-link hide_on_mobile" onClick={handleAccountConnexion}>
<img src={Header_User} alt="User icon" className="user-icon hide_on_mobile" />
<span className='hide_on_mobile'>Connexion</span>
</div>}
{String(someoneconnected) === String("1") && <div className="login-link hide_on_mobile" onClick={(e) => setDialog_1_open(true)}>
<img src={Header_User} alt="User icon" className="user-icon hide_on_mobile" />
<span className='hide_on_mobile'>Deconnexion</span>
</div>}
</div>
</div >
</header >
</div >
);
};
export default Header_ENT_Student;

View File

@ -3683,7 +3683,7 @@ const New_C_Marketplace_2025 = () => {
{result && myApiResponse === "True" && !newresult &&
<div className="okUpdateData">
<div style={{ "width": "100%" }}>
<div style={{ "width": "50%", "float": "left" }}>
<div className="block_pagination">
<Pagination
className="pagination-bar"
currentPage={currentPage2}
@ -3692,7 +3692,7 @@ const New_C_Marketplace_2025 = () => {
onPageChange={page => setCurrentPage2(page)}
/>
</div>
<div style={{ "width": "40%", "float": "right" }}>
<div className="block_trier_par">
<div className="input-group input-group-sm mb-3 ">
<span className="filter_span">Trier par </span>
@ -3704,7 +3704,7 @@ const New_C_Marketplace_2025 = () => {
<option value="duration">Duree</option>
</select>
<span style={{ width: '10%' }}><TbArrowsDownUp style={{ height: '1.5rem', paddingTop: '5px', width: '40%' }}
<span style={{ width: '10%' }}><TbArrowsDownUp style={{ height: '1.5rem', paddingTop: '5px', width: '40%' }}
onClick={(e) => {
if (trier_par === "1")
settrier_par("-1");
@ -3734,8 +3734,6 @@ const New_C_Marketplace_2025 = () => {
pageSize={PageSize}
onPageChange={page => setCurrentPage2(page)}
/>
</div>}
@ -3758,7 +3756,6 @@ const New_C_Marketplace_2025 = () => {
{result && myApiResponse == "True" && fin == 0 && newresult &&
newresult.slice(0, PageSize).map((formation) => (
<div className="block_formation" >
<New_C_Formation_2025 formation={JSON.parse(formation)} key={JSON.parse(formation).title} />
</div>

View File

@ -31,6 +31,21 @@
display: none;
}
.block_pagination {
width: 100%;
float: left;
}
.block_trier_par {
width: 100%;
float: left;
}
/*style smartphones et petites tablettes en portrait*/
.text_head {
@ -393,11 +408,11 @@
padding-bottom: auto;
word-break: break-word;
margin-right: 0.5rem;
color: #104277;
color: #107758;
font-size: 0.75rem;
white-space: nowrap;
width: 20%;
}
.filter_val {
@ -411,7 +426,7 @@
background: transparent;
color: #3b3e40;
font-family: "DM Sans", "verdana", "Quicksand", "Signika";
border: 1px solid #C7C9CE;
border: 1px solid #C7C9CE;
border-radius: 0.3rem !important;
width: 65%;
margin-top: 0.3rem;
@ -844,7 +859,7 @@
}
.block_nos_formation {
padding: 0px;
padding: 0px;
width: 100%;
}
@ -920,9 +935,9 @@
.content_search_bar {
margin-top: 3rem;
width: 90%;
margin-left: auto;
margin-right: auto;
width: 94%;
margin-left: 3%;
}
.search_bar_h {
@ -957,7 +972,7 @@
padding: 0px;
gap: 24px;
width: 95%;
width: 100%;
height: 80px;
@ -1035,6 +1050,7 @@
order: 0;
flex-grow: 0;
margin-bottom: 1rem;
width: 100%;
}
@ -2194,9 +2210,9 @@
.cta_recherche_TXT_search_loup {
display: block;
width: 100%;
border-radius: 60px;
height: 40px;
@ -2213,7 +2229,7 @@
order: 0;
align-self: stretch;
flex-grow: 0;
background-color: #3e6ee3;
color: #ffffff;
border: none;
@ -2254,6 +2270,17 @@
@media only screen and (min-width: 601px) and (max-width: 991px) {
.block_pagination {
width: 50%;
float: left;
}
.block_trier_par {
width: 40%;
float: right;
}
/*style petites-moyennes tablettes */
.domaine_icone {
display: none
@ -2569,11 +2596,11 @@
padding-bottom: auto;
word-break: break-word;
margin-right: 0.5rem;
color: #104277;
color: #107758;
font-size: 0.75rem;
white-space: nowrap;
width: 20%;
}
.filter_val {
@ -2587,7 +2614,7 @@
background: transparent;
color: #3b3e40;
font-family: "DM Sans", "verdana", "Quicksand", "Signika";
border: 1px solid #C7C9CE;
border: 1px solid #C7C9CE;
border-radius: 0.3rem !important;
width: 65%;
margin-top: 0.3rem;
@ -5334,6 +5361,17 @@
@media only screen and (min-width: 992px) and (max-width: 1199px) {
/*style grande tablettes & Pc portable */
.block_pagination {
width: 50%;
float: left;
}
.block_trier_par {
width: 40%;
float: right;
}
.div_row {
float: left;
border-width: 0.01rem;
@ -5622,12 +5660,12 @@
padding-bottom: auto;
word-break: break-word;
margin-right: 0.5rem;
color: #104277;
color: #107758;
font-size: 0.9rem;
white-space: nowrap;
width: 20%;
padding-top: 10px;
padding-top: 10px;
}
.filter_val {
@ -5641,7 +5679,7 @@
background: transparent;
color: #3b3e40;
font-family: "DM Sans", "verdana", "Quicksand", "Signika";
border: 1px solid #C7C9CE;
border: 1px solid #C7C9CE;
border-radius: 0.3rem !important;
width: 65%;
margin-top: 0.3rem;
@ -8385,6 +8423,17 @@
@media only screen and (min-width: 1200px) and (max-width: 1919px) {
.block_pagination {
width: 50%;
float: left;
}
.block_trier_par {
width: 40%;
float: right;
}
/* Ordi de bureau et grands ecrans*/
.align_gauche {
margin-left: 0rem;
@ -8690,12 +8739,12 @@
padding-bottom: auto;
word-break: break-word;
margin-right: 0.5rem;
color: #104277;
color: #107758;
font-size: 0.9rem;
white-space: nowrap;
width: 20%;
padding-top: 10px;
padding-top: 10px;
}
.filter_val {
@ -8709,7 +8758,7 @@
background: transparent;
color: #3b3e40;
font-family: "DM Sans", "verdana", "Quicksand", "Signika";
border: 1px solid #C7C9CE;
border: 1px solid #C7C9CE;
border-radius: 0.3rem !important;
width: 65%;
margin-top: 0.3rem;
@ -11470,6 +11519,17 @@
}
@media only screen and (min-width: 1920px) {
.block_pagination {
width: 50%;
float: left;
}
.block_trier_par {
width: 40%;
float: right;
}
.calage {
width: 2%;
}
@ -11775,12 +11835,12 @@
padding-bottom: auto;
word-break: break-word;
margin-right: 0.5rem;
color: #104277;
color: #107758;
font-size: 0.75rem;
white-space: nowrap;
width: 20%;
padding-top: 10px;
}
.filter_val {
@ -11794,7 +11854,7 @@
background: transparent;
color: #3b3e40;
font-family: "DM Sans", "verdana", "Quicksand", "Signika";
border: 1px solid #C7C9CE;
border: 1px solid #C7C9CE;
border-radius: 0.3rem !important;
width: 65%;
margin-top: 0.3rem;
@ -14723,7 +14783,7 @@
}
.dHtlYi {
background: #104277;
background: #107758;
}
.bQSvsY {

View File

@ -25,7 +25,7 @@ const SideBar = () => {
const environnment = process.env.REACT_APP_ENV
function logout_confirmation() {

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

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 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";
import Student_Account from "./../components/Student_Account";
const student_account = () => {
return (
<div>
<New_Navigation_ENT_Student_2025 />
<ENT_Student_New_C_Header_2025_V2 />
<Student_Account />
<New_C_Footer_Without_Testimony_2025_V2 />
</div>
)
}
export default student_account;

Some files were not shown because too many files have changed in this diff Show More