Compare commits

...

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

267 changed files with 100055 additions and 15057 deletions

View File

@ -1,3 +1,2 @@
nom;raison_sociale;email;adresse;code_postal;ville;pays;siret;telephone;tva;website;invoice_adresse;invoice_code_postal;invoice_email;invoice_nom;invoice_siret;invoice_tva;invoice_ville;invoice_pays
client_test01;raison_sociale1;email-test01@mysy-training.fr;2 place du test;75001;Paris;France;Siret1;1010101;;www.client_test01.fr;invoice_adresse;invoice_code_postal;fact@mysy.fr;invoice_nom_val;invoice_siret_val;invoice_tva;invoice_ville;invoice_pays
client_test02;raison_sociale1;email_test02@mysy-training.fr;2 place du test;75001;Paris;France;Siret1;1010101;;www.client-test02.fr;invoice_adresse;invoice_code_postal;fact@mysy.fr;invoice_nom_val;invoice_siret_val;invoice_tva;invoice_ville;invoice_pays
nom;raison_sociale;email;adresse;code_postal;ville;pays;siret;telephone;tva;website;invoice_adresse;invoice_code_postal;invoice_email;invoice_nom;invoice_siret;invoice_tva;invoice_ville;invoice_pays;condition_paiement_code;is_compagnie;partner_groupe_client_code;contact_civilite;contact_nom;contact_prenom;contact_email;is_contact_communication;contact_fonction;contact_mobile;contact_phone;contact_adresse;contact_code_postal;contact_ville;contact_pays;contact_siret;contact_tva;is_fournisseur;is_client;is_financeur;client_type_code
imprt_client_01;raison_sociale1;import_mail_01@mysy-training.fr;2 place du test;75001;Paris;France;Siret1;1010101;;www.client_test01.fr;invoice_adresse;invoice_code_postal;fact@mysy.fr;invoice_nom_val;invoice_siret_val;invoice_tva;invoice_ville;invoice_pays;15JM;1;qsd;M;toto1;prenom_toto;toto@lll.fr;1;fonction;6060606;1020304;addd;45000;villllle;payssss;siret011_contact;tvz_ci;0;1;;CL_TYPE1

1 nom raison_sociale email adresse code_postal ville pays siret telephone tva website invoice_adresse invoice_code_postal invoice_email invoice_nom invoice_siret invoice_tva invoice_ville invoice_pays condition_paiement_code is_compagnie partner_groupe_client_code contact_civilite contact_nom contact_prenom contact_email is_contact_communication contact_fonction contact_mobile contact_phone contact_adresse contact_code_postal contact_ville contact_pays contact_siret contact_tva is_fournisseur is_client is_financeur client_type_code
2 client_test01 imprt_client_01 raison_sociale1 email-test01@mysy-training.fr import_mail_01@mysy-training.fr 2 place du test 75001 Paris France Siret1 1010101 www.client_test01.fr invoice_adresse invoice_code_postal fact@mysy.fr invoice_nom_val invoice_siret_val invoice_tva invoice_ville invoice_pays 15JM 1 qsd M toto1 prenom_toto toto@lll.fr 1 fonction 6060606 1020304 addd 45000 villllle payssss siret011_contact tvz_ci 0 1 CL_TYPE1
client_test02 raison_sociale1 email_test02@mysy-training.fr 2 place du test 75001 Paris France Siret1 1010101 www.client-test02.fr invoice_adresse invoice_code_postal fact@mysy.fr invoice_nom_val invoice_siret_val invoice_tva invoice_ville invoice_pays

View File

@ -1,3 +1,3 @@
formation_code_externe;code_session;date_debut;date_fin;nb_participant;adresse;code_postal;ville;pays;date_debut_inscription;date_fin_inscription;distanciel;presentiel;prix_session;session_status;lms_class_code;session_etape;formateur_email;titre;location_type;is_bpf
MYSY_Demo_AP_v2;SESS_01_DEMO_AP_V2;05/07/2024;15/07/2024;10;2 passage de la Providence 01;75001;Paris 1;France;03/01/2024;05/07/2024;1;0;1550;1;;0;;Session Fev;intra;1
MYSY_Demo_AP_v2;SESS_02_DEMO_AP_V2;20/08/2024;30/08/2024;15;3 passage de la Providence 03;75001;Paris 2;France;04/01/2024;20/08/2024;0;1;1550;1;;0;;Session Avril;extra;1
formation_code_externe;code_session;date_debut;date_fin;nb_participant;adresse;code_postal;ville;pays;date_debut_inscription;date_fin_inscription;distanciel;presentiel;prix_session;session_status;lms_class_code;session_etape;formateur_email;titre;location_type;is_bpf;type_session
MYSY_Demo_AP_v2;SESS_01_DEMO_AP_V2;05/07/2024;15/07/2024;10;2 passage de la Providence 01;75001;Paris 1;France;03/01/2024;05/07/2024;1;0;1550;1;;0;;Session Fev;intra;1;0
MYSY_Demo_AP_v2;SESS_02_DEMO_AP_V2;20/08/2024;30/08/2024;15;3 passage de la Providence 03;75001;Paris 2;France;04/01/2024;20/08/2024;0;1;1550;1;;0;;Session Avril;extra;1;0

1 formation_code_externe code_session date_debut date_fin nb_participant adresse code_postal ville pays date_debut_inscription date_fin_inscription distanciel presentiel prix_session session_status lms_class_code session_etape formateur_email titre location_type is_bpf type_session
2 MYSY_Demo_AP_v2 SESS_01_DEMO_AP_V2 05/07/2024 15/07/2024 10 2 passage de la Providence 01 75001 Paris 1 France 03/01/2024 05/07/2024 1 0 1550 1 0 Session Fev intra 1 0
3 MYSY_Demo_AP_v2 SESS_02_DEMO_AP_V2 20/08/2024 30/08/2024 15 3 passage de la Providence 03 75001 Paris 2 France 04/01/2024 20/08/2024 0 1 1550 1 0 Session Avril extra 1 0

View File

@ -1,27 +1,26 @@
import React, { useState, useEffect } from "react";
import { BrowserRouter, Switch, Route } from "react-router-dom"
import React, { useState, useEffect, lazy, Suspense } from "react";
import { BrowserRouter, Route, Switch, useHistory } from "react-router-dom";
import './App.css';
import NotFound from './pages/NotFound'
import Contact from './pages/Contact'
import Connexion from './pages/Connexion'
import Login from './pages/Login';
/*// ---
import Recherche_new_v2 from "./pages/recherche_new_v2";
import Recherche_new_v3 from "./pages/recherche_new_v3";
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 Student_Account from "./pages/student_account";
import DisplayDetailClass_new_v2 from "./pages/displaydetailclass_new_v2";
import DisplayDetailClass_new_v3 from "./pages/displaydetailclass_new_v3";
//---------*/
/*
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";
@ -29,29 +28,25 @@ import CreateAccount from "./pages/createaccount";
import PartnerLogin from "./pages/partnerlogin";
import PartnerLogin0 from "./pages/partnerlogin0";
import PartnerLogin1 from "./pages/partnerlogin1";
*/
/*
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";
import Recherche_new from "./pages/recherche_new";
import Recherche_old from "./pages/recherche";
import UserSignFirst from "./pages/usersigninfirst";
import GestionAdministrative from "./components/GestionAdministrative";
import Emargement from "./pages/emargementOk";
import Formation_Cartouche_Com from "./pages/recherche_cartouche_com";
*/
/*
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";
@ -63,27 +58,86 @@ import AutomaticQuotation from "./pages/automaticquotation";
import MySyIA from "./pages/iamysy";
import Maintenance from "./pages/maintenance_page";
import Subdomain_Recherche_new_v2 from "./pages/subdomain_recherche_new_v2";
*/
/*
// New Design 2025
import New_Sign_In_2025 from "./pages/new_p_sign_in_2025";
import New_Sign_Up_2025 from "./pages/new_p_sign_up_2025";
import New_Tarif_2025 from "./pages/new_p_tarif_2025";
import New_Contact_2025 from "./pages/new_p_contact_2025";
import New_Article_Detail_2025 from "./pages/new_p_article_detail_2025";
import New_Formation_Detail_2025 from "./pages/new_p_detail_formation_2025";
import New_Marktplace_2025 from "./pages/new_p_marketplace_2025";
//import New_Marktplace_2025 from "./pages/new_p_marketplace_2025";
import New_Fonctionnalite_2025 from "./pages/new_p_fonctionnalite_2025";
import New_A_Propos_2025 from "./pages/new_p_a_propos_2025";
import New_Home_Page_2025 from "./pages/new_p_home_page_2025";
import Jmjformation_catalogue from "./pages/jmjformation_catalogue_public";
import New_Test_Header_Footer_2025 from "./pages/new_p_test_header_footer_2025";
*/
import img_loading_spin from "./mysy_img/mysy_spin_loading.gif";
function App() {
const New_Marktplace_2025 = lazy(() => import("./pages/new_p_marketplace_2025"));
const New_Test_Header_Footer_2025 = lazy(() => import("./pages/new_p_test_header_footer_2025"));
const Jmjformation_catalogue = lazy(() => import("./pages/jmjformation_catalogue_public"));
const New_Home_Page_2025 = lazy(() => import("./pages/new_p_home_page_2025"));
const New_A_Propos_2025 = lazy(() => import("./pages/new_p_a_propos_2025"));
const New_Fonctionnalite_2025 = lazy(() => import("./pages/new_p_fonctionnalite_2025"));
const New_Formation_Detail_2025 = lazy(() => import("./pages/new_p_detail_formation_2025"));
const New_Article_Detail_2025 = lazy(() => import("./pages/new_p_article_detail_2025"));
const New_Contact_2025 = lazy(() => import("./pages/new_p_contact_2025"));
const New_Tarif_2025 = lazy(() => import("./pages/new_p_tarif_2025"));
const New_Sign_Up_2025 = lazy(() => import("./pages/new_p_sign_up_2025"));
const New_Sign_In_2025 = lazy(() => import("./pages/new_p_sign_in_2025"));
const Student_Account = lazy(() => import("./pages/student_account"));
const Account = lazy(() => import("./pages/account"));
const TestUrl = lazy(() => import("./pages/testurl"));
const Mon_Ent_Student = lazy(() => import("./pages/mon_ent_student"));
const Mon_Intranet_Public = lazy(() => import("./pages/mon_intranet_public"));
const Mon_Catalogue_Public = lazy(() => import("./pages/mon_catalogue_public"));
const Recherche_new_v4 = lazy(() => import("./pages/recherche_new_v4"));
const Recherche_new_v3 = lazy(() => import("./pages/recherche_new_v3"));
const Recherche_new_v2 = lazy(() => import("./pages/recherche_new_v2"));
const Subdomain_Recherche_new_v2 = lazy(() => import("./pages/subdomain_recherche_new_v2"));
const Maintenance = lazy(() => import("./pages/maintenance_page"));
const MySyIA = lazy(() => import("./pages/iamysy"));
const AutomaticQuotation = lazy(() => import("./pages/automaticquotation"));
const Emarge_QR_Code = lazy(() => import("./pages/emarge_qr_code"));
const UpdateAttendeeList = lazy(() => import("./pages/updateattendeelist"));
const SurveyDocument = lazy(() => import("./pages/surveydocument"));
const ESignDiplayDignedDocument = lazy(() => import("./pages/edigndiplaydigneddocument"));
const ESign = lazy(() => import("./pages/eSigne"));
const Test_Drag_Drop2 = lazy(() => import("./pages/test_dnd"));
const Test_Drag_Drop = lazy(() => import("./pages/test_drag_drop"));
const TestUrl_New = lazy(() => import("./pages/testurl_new"));
const Training_Inactive_Or_Not_Found = lazy(() => import("./pages/Traning_Inactif_Or_Not_Exist"));
const OrderConfirmation_3DS = lazy(() => import("./pages/orderconfirmation_3DS"));
const SeDesabonner = lazy(() => import("./pages/sedesabonner"));
const Emargement = lazy(() => import("./pages/emargementOk"));
const UserSignFirst = lazy(() => import("./pages/usersigninfirst"));
const Recherche_new = lazy(() => import("./pages/recherche_new"));
const ProduitsService = lazy(() => import("./pages/produitservice"));
const AccountUserActivated = lazy(() => import("./pages/accountuseractivated"));
const DeleteUserAccount = lazy(() => import("./pages/deleteuseraccount"));
const ResetUserPwd = lazy(() => import("./pages/resetuserpwd"));
const AddArticle = lazy(() => import("./pages/addarticle"));
const RechecheArticles = lazy(() => import("./pages/recherchearticles"));
const PartnerLogin1 = lazy(() => import("./pages/partnerlogin1"));
const PartnerLogin0 = lazy(() => import("./pages/partnerlogin0"));
const PartnerLogin = lazy(() => import("./pages/partnerlogin"));
const CreateAccount = lazy(() => import("./pages/createaccount"));
const Partner = lazy(() => import("./pages/partner"));
const Acceuil = lazy(() => import("./pages/acceuil"));
const AddArticleAvis = lazy(() => import("./pages/addarticleavis"));
const Display_Partner_Catalog_DetailClass_new_v2 = lazy(() => import("./pages/display_partner_catalog_detailclass_new_v2"));
const [screenSizeh, getDimension] = useState({
dynamicWidth: window.innerHeight
});
@ -98,13 +152,24 @@ function App() {
return subdomain;
};
const history = useHistory();
const [isLoading, setLoading] = useState();
const [mysy_domain, setmysy_domain] = useState(window.location.hostname.split('.')[0]);
useEffect(() => {
setLoading(true);
let myurl = window.location.host;
let myurl_pathname = window.location.pathname;
// console.log(" ### mysy_domain =", mysy_domain)
// console.log(" ### myurl =", myurl)
// console.log(" ### window.location.hostname =", window.location.hostname)
var domain = myurl;
if (domain.includes('://')) {
@ -124,22 +189,27 @@ 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";
}
}
setLoading(false);
}, []);
return (
<div>
<div className="App">
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
{/*API DEV = {process.env.REACT_APP_API_URL_DEV} <br/>
API REC = {process.env.REACT_APP_API_URL_REC}<br/>
API URL = {process.env.REACT_APP_API_URL}<br/>
@ -147,84 +217,80 @@ function App() {
<div className="main_haut">
<BrowserRouter>
<scrollToTop />
<Switch>
<Suspense fallback={<div>Loading...</div>}>
<BrowserRouter>
<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} />
<Route path="/v3" exact component={Recherche_new_v3} />
<Route path="/v4" exact component={Recherche_new_v4} />
<Route path="/maintenance" exact component={Maintenance} />
<Route path="/subdomain" exact component={Subdomain_Recherche_new_v2} />
<Route path="/markeplace" exact component={Contact} />
<Route path="/moncatalog" exact component={Mon_Catalogue_Public} />
<Route path="/intranet" exact component={Mon_Intranet_Public} />
<Route path="/create_account" exact component={CreateAccount} />
<Route path="/user-connexion" exact component={Connexion} />
<Route path="/acceuil" exact component={Acceuil} />
<Route path="/testurl/:course/:tab" exact component={TestUrl} />
<Route path="/testurl_new/:courseid/:tabid" exact component={TestUrl_New} />
<Route path="/maintenance" exact component={Maintenance} />
<Route path="/ajout-article" exact component={AddArticleAvis} />
<Route path="/markeplace" exact component={Contact} />
<Route path="/create_account" exact component={CreateAccount} />
<Route path="/user-connexion" exact component={Connexion} />
<Route path="/Display-Partner-Catalog-Detail-formation/:classId" exact component={Display_Partner_Catalog_DetailClass_new_v2} />
<Route path="/Display-Partner-Catalog-Detail-formation/:classId/:action" exact component={Display_Partner_Catalog_DetailClass_new_v2} />
<Route path="/testurl/:course/:tab" exact component={TestUrl} />
<Route path="/testurl_new/:courseid/:tabid" exact component={TestUrl_New} />
<Route path="/mysy-account-activated/" exact component={AccountUserActivated} />
{/* <Route path="/Produits-Services/" exact component={ProduitsService} />*/}
<Route path="/tarifs_produits_services/" exact component={ProduitsService} />
<Route path="/Recherche_new/" exact component={Recherche_new} />
<Route path="/Recherche_new/:type/:categorie" exact component={Recherche_new} />
<Route path="/ajout-article" exact component={AddArticleAvis} />
<Route path="/Connexion-utilisateur-0/" exact component={UserSignFirst} />
<Route path="/Emargement/" exact component={Emargement} />
<Route path="/Test_DragDrop/" exact component={Test_Drag_Drop} />
<Route path="/Test_DragDrop2/" exact component={Test_Drag_Drop2} />
<Route path="/Recherche_new_v2/" exact component={Recherche_new_v2} />
<Route path="/Recherche_new_v2/:type/:categorie" exact component={Recherche_new_v2} />
<Route path="/unsubscribe/" exact component={SeDesabonner} />
<Route path="/OrderConfirmation_3DS/:orderid/:packs" exact component={OrderConfirmation_3DS} />
<Route path="/page-inconnue/" exact component={NotFound} />
<Route path="/formation-inconnue/" exact component={Training_Inactive_Or_Not_Found} />
<Route path="/Display-Partner-Catalog-Detail-formation/:classId" exact component={Display_Partner_Catalog_DetailClass_new_v2} />
<Route path="/Display-Partner-Catalog-Detail-formation/:classId/:action" exact component={Display_Partner_Catalog_DetailClass_new_v2} />
<Route path="/qr_emargement/:session_id/:partner_owner_recid/:my_safe_token" exact component={Emarge_QR_Code} />
<Route path="/E_Signature/:document_id" exact component={ESign} />
<Route path="/E_Document/:document_id/:partner_owner_recid/:secret_key_signature" exact component={ESignDiplayDignedDocument} />
<Route path="/Survey/:survey_id/" exact component={SurveyDocument} />
<Route path="/UpadateAttendeeList/:client_id/:session_id/:partner_owner_recid/" exact component={UpdateAttendeeList} />
<Route path="/automatic-quotation/:partner_owner_recid/:objid/" exact component={AutomaticQuotation} />
<Route path="/intelligence-artificielle-mysy-training/" exact component={MySyIA} />
<Route path="/mysy-account-activated/" exact component={AccountUserActivated} />
{/* <Route path="/Produits-Services/" exact component={ProduitsService} />*/}
<Route path="/tarifs_produits_services/" exact component={ProduitsService} />
<Route path="/Recherche_new/" exact component={Recherche_new} />
<Route path="/GestionAdministrative/:internal_url" exact component={GestionAdministrative} />
<Route path="/Recherche_new/:type/:categorie" exact component={Recherche_new} />
<Route path="/Recherche_old/" exact component={Recherche_old} />
<Route path="/Connexion-utilisateur-0/" exact component={UserSignFirst} />
<Route path="/Emargement/" exact component={Emargement} />
<Route path="/CartoucheComMySy/" exact component={Formation_Cartouche_Com} />
<Route path="/Test_DragDrop/" exact component={Test_Drag_Drop} />
<Route path="/Test_DragDrop2/" exact component={Test_Drag_Drop2} />
<Route path="/Recherche_new_v2/" exact component={Recherche_new_v2} />
<Route path="/Recherche_new_v2/:type/:categorie" exact component={Recherche_new_v2} />
<Route path="/unsubscribe/" exact component={SeDesabonner} />
<Route path="/OrderConfirmation_3DS/:orderid/:packs" exact component={OrderConfirmation_3DS} />
<Route path="/page-inconnue/" exact component={NotFound} />
<Route path="/formation-inconnue/" exact component={Training_Inactive_Or_Not_Found} />
{/**** New design 2025 */}
<Route path="/signin/" exact component={New_Sign_In_2025} />
<Route path="/signup/" exact component={New_Sign_Up_2025} />
<Route path="/tarif/" exact component={New_Tarif_2025} />
<Route path="/contact/" exact component={New_Contact_2025} />
<Route path="/qr_emargement/:session_id/:partner_owner_recid/:my_safe_token" exact component={Emarge_QR_Code} />
<Route path="/E_Signature/:document_id" exact component={ESign} />
<Route path="/E_Document/:document_id/:partner_owner_recid/:secret_key_signature" exact component={ESignDiplayDignedDocument} />
<Route path="/Survey/:survey_id/" exact component={SurveyDocument} />
<Route path="/UpadateAttendeeList/:client_id/:session_id/:partner_owner_recid/" exact component={UpdateAttendeeList} />
<Route path="/automatic-quotation/:partner_owner_recid/:objid/" exact component={AutomaticQuotation} />
<Route path="/intelligence-artificielle-mysy-training/" exact component={MySyIA} />
{/**** New design 2025 */}
<Route path="/signin/" exact component={New_Sign_In_2025} />
<Route path="/signup/" exact component={New_Sign_Up_2025} />
<Route path="/tarif/" exact component={New_Tarif_2025} />
<Route path="/contact/" exact component={New_Contact_2025} />
{/*
{/*
09/03/25 : un redirection a été faite dans cloudflaire pour les lignes ci-dessous
@ -234,17 +300,17 @@ function App() {
<Route path="/display-detail-article/:articleId" exact component={New_Article_Detail_2025} />
<Route path="/Display-Detail-Article/:articleId" exact component={New_Article_Detail_2025} />
<Route path="/display-detail-article/:articleId" exact component={New_Article_Detail_2025} />
<Route path="/Display-Detail-Article/:articleId" exact component={New_Article_Detail_2025} />
<Route path="/detaile-formation/:classId" exact component={New_Formation_Detail_2025} />
{/* ex : http://localhost:3009/detaile-formation/habilitation-electrique-882*/}
<Route path="/detail-formation/:classId" exact component={New_Formation_Detail_2025} />
{/* ex : http://localhost:3009/detail-formation/habilitation-electrique-882*/}
<Route path="/marketplace/" exact component={New_Marktplace_2025} />
<Route path="/fonctionnalites/" exact component={New_Fonctionnalite_2025} />
<Route path="/marketplace/" exact component={New_Marktplace_2025} />
<Route path="/fonctionnalites/" exact component={New_Fonctionnalite_2025} />
<Route path="/apropos/" exact component={New_A_Propos_2025} />
{/*
<Route path="/apropos/" exact component={New_A_Propos_2025} />
{/*
09/03/25 : un redirection a été faite dans cloudflaire pour les lignes ci-dessous
<Route path="/QuiSommesNous" exact component={New_A_Propos_2025} />
@ -253,48 +319,50 @@ function App() {
*/}
<Route path="/" exact component={New_Home_Page_2025} />
<Route path="/" exact component={New_Home_Page_2025} />
<Route path="/jmjformation" exact component={Jmjformation_catalogue} />
{/* Debut Migration */}
<Route path="/Partner/:action/:orderid/:packs" exact component={Partner} />
<Route path="/Partner/:action/:orderid" exact component={Partner} />
<Route path="/Partner/:action" exact component={Partner} />
<Route path="/Partner" exact component={Partner} />
<Route path="/recherche-formation" exact component={New_Marktplace_2025} />
<Route path="/recherche-formation/ref/:NewSearchText" exact component={New_Marktplace_2025} />
<Route path="/mysy-training-login/:obj/:objid" exact component={New_Sign_In_2025} />
<Route path="/Connexion" exact component={New_Sign_In_2025} />
<Route path="/Recherche-Article-formation" exact component={RechecheArticles} />
<Route path="/Display-Detail-formation_v3/:classId" exact component={New_Formation_Detail_2025} />
<Route path="/Display-Detail-formation/:classId" exact component={New_Formation_Detail_2025} />
<Route path="/Display-Detail-formation/:classId/:action" exact component={New_Formation_Detail_2025} />
<Route path="/Display-Detail-formation_old/:classId/:action" exact component={New_Formation_Detail_2025} />
<Route path="/PartnerLogin" exact component={PartnerLogin} />
<Route path="/PartnerLogin0" exact component={PartnerLogin0} />
<Route path="/PartnerLogin1" exact component={PartnerLogin1} />
<Route path="/mysy-user-account" exact component={Account} />
<Route path="/Ajout-Article-formation" exact component={AddArticle} />
<Route path="/ResetUserPwd/:token/:accounttype" exact component={ResetUserPwd} />
<Route path="/DeleteUserAccount/:token" exact component={DeleteUserAccount} />
<Route path="/mysy-student-account" exact component={Student_Account} />
{/* Fin Migration */}
{/* Debut Migration */}
<Route path="/Partner/:action/:orderid/:packs" exact component={Partner} />
<Route path="/Partner/:action/:orderid" exact component={Partner} />
<Route path="/Partner/:action" exact component={Partner} />
<Route path="/Partner" exact component={Partner} />
<Route path="/recherche-formation" exact component={New_Marktplace_2025} />
<Route path="/recherche-formation/ref/:NewSearchText" exact component={New_Marktplace_2025} />
<Route path="/mysy-training-login/:obj/:objid" exact component={New_Sign_In_2025} />
<Route path="/Connexion" exact component={New_Sign_In_2025} />
<Route path="/Recherche-Article-formation" exact component={RechecheArticles} />
<Route path="/new_header_footer/" exact component={New_Test_Header_Footer_2025} />
<Route path="/Display-Detail-formation_v3/:classId" exact component={New_Formation_Detail_2025} />
<Route path="/Display-Detail-formation/:classId" exact component={New_Formation_Detail_2025} />
<Route path="/Display-Detail-formation/:classId/:action" exact component={New_Formation_Detail_2025} />
<Route path="/Display-Detail-formation_old/:classId/:action" exact component={New_Formation_Detail_2025} />
<Route component={NotFound} />
</Switch>
</BrowserRouter>
<Route path="/PartnerLogin" exact component={PartnerLogin} />
<Route path="/PartnerLogin0" exact component={PartnerLogin0} />
<Route path="/PartnerLogin1" exact component={PartnerLogin1} />
<Route path="/mysy-user-account" exact component={Account} />
<Route path="/Ajout-Article-formation" exact component={AddArticle} />
<Route path="/ResetUserPwd/:token/:accounttype" exact component={ResetUserPwd} />
<Route path="/DeleteUserAccount/:token" exact component={DeleteUserAccount} />
{/* Fin Migration */}
<Route path="/new_header_footer/" exact component={New_Test_Header_Footer_2025} />
<Route component={NotFound} />
</Switch>
</BrowserRouter>
</Suspense>
</div>
</div>

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" />
@ -482,13 +482,7 @@ function Account() {
{result}
</div>}
{String(menu) === String("affichage") && <UpdateUserInfo />}
{String(menu) === String("recherche") && <UserHistoryRecherche />}
{String(menu) === String("upgradecompte") && <UpgradeToPro />}
{String(menu) === String("profil_objectif") && <Profil_Objectif />}
{String(menu) === String("mes_factures") && connected_user_data && connected_user_data.partner_owner_recid &&
connected_user_data.partner_client_id &&
@ -568,8 +562,6 @@ function Account() {
/>}
{String(menu) === String("mes_documents") && <Profil_Objectif />}

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

@ -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";
}
@ -2258,7 +2258,7 @@ function CheckOut(props) {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
close();

File diff suppressed because it is too large Load Diff

View File

@ -220,7 +220,7 @@ const Config_Documents = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();
@ -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}
@ -3209,7 +3209,7 @@ const Config_Documents = (props) => {
set_field_corp_mail(one_editorRef_corp_mail.current.getContent());
setpartner_document_data_changed("1");
}}
init={{
init={{
resize: false,
height: 700,
menubar: true,
@ -3239,7 +3239,7 @@ const Config_Documents = (props) => {
name="detail_document_principal"
onInit={(evt, editor) => one_editorRef_programme.current = editor}
//initialValue={field_programme_initial_value}
onKeyUp={editor_keyup}
value={field_programme}
onEditorChange={(newValue, editor) => {
@ -3330,7 +3330,7 @@ const Config_Documents = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();

View File

@ -179,7 +179,7 @@ const Config_Documents_Super_Admin = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();
@ -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
@ -2773,7 +2773,7 @@ const Config_Documents_Super_Admin = (props) => {
}}
/>
</div>}
</div>}
{String(partner_document_data_edit_mode) === "1" && <div className="div_row_gauche texte_area_filter" >
Version par defaut <br />

View File

@ -184,7 +184,7 @@ const CRM_Opportunite = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -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

@ -589,7 +589,7 @@ const Dashbord_Factures_Devis_Par_Periode = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();

View File

@ -614,7 +614,7 @@ const Dashbord_Factures_Par_Client = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();

View File

@ -598,7 +598,7 @@ const Dashbord_Factures_Par_Periode = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();

View File

@ -535,7 +535,7 @@ const Dashbord_Factures_Previsionnel_Par_Periode = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();

View File

@ -338,7 +338,7 @@ const Dashbord_Formation_Evol_Session = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();

View File

@ -585,7 +585,7 @@ const Dashbord_Inscriptions_all_inscriptions = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();

View File

@ -576,7 +576,7 @@ const Dashbord_Ressources_Humaines_Tache_Couts = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();

View File

@ -553,7 +553,7 @@ const Dashbord_Ressources_Humaines_Tache_by_rhid = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();

View File

@ -444,7 +444,7 @@ const Dashbord_Session_Par_Fteur = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();

View File

@ -519,7 +519,7 @@ const Dashbord_Session_Repartition_Fteur = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();

View File

@ -448,7 +448,7 @@ const Dashbord_Session_Taux_Remplissage = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();

View File

@ -614,14 +614,13 @@ const DisplayDetailClassAction = (props) => {
</div>
</div>}
{(String(action).toLocaleLowerCase() === "inscription" || String(action).toLocaleLowerCase() === "information")
&& String(action).toLocaleLowerCase() !== "evaluation"
&& <div className="description detail_element" name='section_info'>
<Inscription_Information internal_url={classId} action={action} trainig_price={DetailTraining["price"]} />
</div>
}
{String(action).toLocaleLowerCase() !== "inscription" && String(action).toLocaleLowerCase() !== "information" && String(tokenEval_api) === "true"
&& <div className="description detail_element" name='section_info'>
Zone evaluation : <button> fermer</button>

View File

@ -576,7 +576,7 @@ const DisplayDetailClass_new_v2 = (props) => {
//console.log(" ON PASSE&nbsp; au&nbsp;MIN");
var local_tmp_val = 2100 + decalage_pr_certificat;
var local_main_h_px = 4800 + decalage_pr_certificat;
local_tmp = local_tmp_val + "px";
main_h_px = local_main_h_px + "px";
@ -1619,7 +1619,7 @@ const DisplayDetailClass_new_v2 = (props) => {
{DetailTraining["pourqui"] && <div className="mob_info_page_title_desc_long_txt">
<div className="mob_info_page_title_desc_title">
Pour Qui ?
Pour Qui
</div>
{DetailTraining["pourqui"] && <div className="mob_info_page_title_desc_desc pourqui_block">
@ -2146,7 +2146,7 @@ const DisplayDetailClass_new_v2 = (props) => {
{DetailTraining["pourqui"] && String(DetailTraining["pourqui"]).length > 2 && <div className="block_info_page_pave_title_desc_long_text">
<div className="block_info_page_pave_title_desc_title ">
Pour Qui ?
Pour Qui
</div>
{DetailTraining["pourqui"] && <div className="block_info_page_pave_title_desc_desc pourqui_block">
{parse(String(DetailTraining["pourqui"]))}

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">
@ -1836,7 +1836,7 @@ const DisplayDetailClass_new_v3 = (props) => {
{DetailTraining["pourqui"] && <div className="mob_info_page_title_desc_long_txt">
<div className="mob_info_page_title_desc_title">
Pour Qui ?
Pour Qui
</div>
{DetailTraining["pourqui"] && <div className="mob_info_page_title_desc_desc pourqui_block">
@ -2242,7 +2242,7 @@ const DisplayDetailClass_new_v3 = (props) => {
{DetailTraining["pourqui"] && String(DetailTraining["pourqui"]).length > 2 && <div className="block_info_page_pave_title_desc_long_text">
<div className="block_info_page_pave_title_desc_title ">
Pour Qui ?
Pour Qui
</div>
{DetailTraining["pourqui"] && <div className="block_info_page_pave_title_desc_desc pourqui_block">
{parse(String(DetailTraining["pourqui"]))}

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

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';
@ -221,7 +218,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -330,7 +327,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -716,16 +713,12 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
if (local_ue.support) {
setp_detail_support(local_ue.support);
} else {
setp_detail_support("");
}
if (local_ue.duration) {
setp_detail_duration(local_ue.duration);
} else {
@ -782,13 +775,30 @@ const DisplayPartnerUnite_Enseignement = (props) => {
if (local_ue.niveau_competence) {
setp_detail_tab_competence(local_ue.niveau_competence);
var tab_tmp = String(local_ue.niveau_competence).split(",");
setVal(tab_tmp);
// setVal(tab_tmp);
} else {
setp_detail_tab_competence([]);
// 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 +928,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 +996,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 +1012,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 +1027,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 +1042,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 +1057,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 +1073,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 +1089,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;
}
}
@ -1128,6 +1166,8 @@ const DisplayPartnerUnite_Enseignement = (props) => {
setdisplay_ue("0");
setue_data_edit_mode("");
setadd_one_ue("1");
setVal([]);
if (document.getElementById('myRef')) {
var divh = document.getElementById('myRef').offsetTop;
@ -1153,6 +1193,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("");
@ -1255,6 +1297,11 @@ const DisplayPartnerUnite_Enseignement = (props) => {
setdisplay_ue("0");
setue_data_edit_mode("");
setadd_one_ue("");
setVal([]);
window.scrollTo({
top: 0,
behavior: "smooth",
});
}
const New_Option_Filter = [
@ -1345,6 +1392,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 +1681,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 +1935,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 +2072,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 +2098,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"}
@ -2414,7 +2624,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
onRowDoubleClick={(newSelectionModel) => {
// handleClick_edit_config_From_Line(newSelectionModel.row.id);
setVal([]);
setselected_id(newSelectionModel.row._id);
handleClick_edit_ue_From_Line(newSelectionModel.row.id);
setsession_file_name("");
@ -2675,10 +2885,10 @@ const DisplayPartnerUnite_Enseignement = (props) => {
/>
</div>}
</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) => {
@ -2689,8 +2899,8 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}}
value={val}
options={nivau_competence}
className="disabled_style"
options={New_Getall_Partner_Competence_List_result}
className="disabled_style disabled_style_no_border"
renderInput={(params) => (
<TextField
{...params}
@ -2699,7 +2909,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
/>
)}
renderTags={CustomChip}
/>
</div>
@ -2719,7 +2929,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}}
//disabled={true}
className="disabled_style"
value={p_detail_tab_competence}
value={p_detail_list_competence_code}
/>
@ -2728,7 +2938,14 @@ const DisplayPartnerUnite_Enseignement = (props) => {
</div>}
{ue_data_edit_mode && String(ue_data_edit_mode) === "1" && New_Get_List_Regle_Calcul_Note_UE_result && New_Get_List_Regle_Calcul_Note_UE_result.length > 0 &&
<div className="session_caract"> Règle de calcul note <br />
<div className="session_caract"> Règle de calcul note &nbsp;
<Tooltip className="tooltip_css" id="detail_regle_calcul2" />
<a data-tooltip-id="detail_regle_calcul2" data-tooltip-html={New_Get_List_Regle_Calcul_Note_UE_result.filter((data) => (data)._id === String(p_detail_note_ue_calculation_rule_id))[0].calcul_rule}>
<FcInfo />
</a>
<br />
<Autocomplete
disablePortal
name="detail_ue_note_ue_calculation_rule_id"
@ -2754,7 +2971,15 @@ const DisplayPartnerUnite_Enseignement = (props) => {
{ue_data_edit_mode && String(ue_data_edit_mode) !== "1" && New_Get_List_Regle_Calcul_Note_UE_result && New_Get_List_Regle_Calcul_Note_UE_result.length > 0 &&
<div className="session_caract"> Règle de calcul note <br />
<div className="session_caract"> Règle de calcul note &nbsp;
<Tooltip className="tooltip_css" id="detail_regle_calcul" />
<a data-tooltip-id="detail_regle_calcul" data-tooltip-html={New_Get_List_Regle_Calcul_Note_UE_result.filter((data) => (data)._id === String(p_detail_note_ue_calculation_rule_id))[0].calcul_rule}>
<FcInfo />
</a>
<br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -2765,8 +2990,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
InputLabelProps={{
shrink: true,
}}
//disabled={true}
disabled={true}
value={New_Get_List_Regle_Calcul_Note_UE_result.filter((data) => (data)._id === String(p_detail_note_ue_calculation_rule_id))[0].label}
@ -3850,7 +4074,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
</div>}
<div className="session_caract"> Compétence <br />
<div className="session_caract"> Compétence <br />
<Autocomplete
multiple
onChange={(event, newValue) => {
@ -3861,7 +4085,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}}
value={val}
options={nivau_competence}
options={New_Getall_Partner_Competence_List_result}
className="disabled_style"
renderInput={(params) => (
<TextField
@ -3895,7 +4119,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
}}
renderInput={(params) => <TextField {...params} label="Formateur" />
renderInput={(params) => <TextField {...params} label="Formule de calcul" />
}
/>}

View File

@ -296,7 +296,7 @@ const Display_Action_And_Class = (props) => {
if (res.data.status != "False") {
//console.log(" getClassImage : In test res.data.status = " + res.data.status);
console.log(" getClassImage: res.data.message.img = " + res.data.message);
// console.log(" getClassImage: res.data.message.img = " + res.data.message);
if (res.data.message.img.length > 0) {
setisclassimage("True");
@ -1401,7 +1401,7 @@ const Display_Action_And_Class = (props) => {
{DetailTraining["pourqui"] && <div className="mob_info_page_title_desc_long_txt">
<div className="mob_info_page_title_desc_title">
Pour Qui ?
Pour Qui
</div>
{DetailTraining["pourqui"] && <div className="mob_info_page_title_desc_desc pourqui_block">
@ -1584,7 +1584,7 @@ const Display_Action_And_Class = (props) => {
{DetailTraining["pourqui"] && String(DetailTraining["pourqui"]).length > 2 && <div className="block_info_page_pave_title_desc_long_text">
<div className="block_info_page_pave_title_desc_title ">
Pour Qui ?
Pour Qui
</div>
{DetailTraining["pourqui"] && <div className="block_info_page_pave_title_desc_desc pourqui_block">
{parse(String(DetailTraining["pourqui"]))}

File diff suppressed because it is too large Load Diff

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

@ -1,60 +1,37 @@
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 Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
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 } 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 { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
import { useParams } from 'react-router-dom'
import Header from "./Header";
import Footer from "./Fotter";
import { FcInfo } from "react-icons/fc";
import { Document, Page } from 'react-pdf'
import { gridClasses } from '@mui/x-data-grid';
import Link from '@mui/material/Link';
import { PiDotsThree } from "react-icons/pi";
import SignatureCanvas from 'react-signature-canvas';
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';
import { IconButton } from '@material-ui/core';
import AutoFixHighOutlinedIcon from '@mui/icons-material/AutoFixHighOutlined';
import CancelPresentationIcon from '@mui/icons-material/CancelPresentation';
function PaperComponent(props) {
@ -279,6 +256,12 @@ function Emarge_QR_Code() {
var liste_formation = GetSelectedRows_Emarg_Ids();
var tab_emargement = [];
if (liste_formation.length <= 0) {
setdisplay_alert_mysy("1");
setalert_message("Vous devez sélectionner une ligne d'émargement");
setalert_type("error");
}
for (var i = 0; i < liste_formation.length; i++) {
var line = JSON.parse(get_E_Document_result[liste_formation[i]]);
tab_emargement.push(line._id)
@ -507,17 +490,41 @@ function Emarge_QR_Code() {
const [pad_signature_img, setpad_signature_img] = React.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="emarge_qr_code">
{/*** 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*/}
{/* POUR SIGNATURE MANUSCRITE */}
<Dialog
open={Dialog_SIGN_MANUSCRITE_open}
// onClose={Dialog_SIGN_MANUSCRITE_handleClose}
// onClose={Dialog_SIGN_MANUSCRITE_handleClose}
className="esign"
static
onClose={() => null}
@ -544,7 +551,7 @@ function Emarge_QR_Code() {
>
<DialogTitle style={{ cursor: 'move', fontFamily:"DM Sans"}} id="draggable-dialog-title">Signature Manuscrite </DialogTitle>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title">Signature Manuscrite </DialogTitle>
<DialogContent className="DialogContent_width" >
<div style={{ width: "100%" }}>
@ -556,9 +563,9 @@ function Emarge_QR_Code() {
}} />
</div>
<div style={{ width: "100%", marginLeft:'auto', marginRight:'auto', width:315 }}>
<nav className="bton_supprime_image_class" style={{width:'100%'}} onClick={(e) => {
<div style={{ width: "100%", marginLeft: 'auto', marginRight: 'auto', width: 315 }}>
<nav className="bton_supprime_image_class" style={{ width: '100%' }} onClick={(e) => {
clearCanvas();
}}>Effacer </nav>
@ -571,7 +578,7 @@ function Emarge_QR_Code() {
<DialogActions>
<IconButton
<IconButton
autoFocus
onClick={Dialog_SIGN_MANUSCRITE_handleClose_buton}
color="primary"
@ -602,10 +609,10 @@ function Emarge_QR_Code() {
onClose={Dialog_SIGN_VALIDATION_handleClose}
className="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">
@ -678,13 +685,13 @@ 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">
<div className="div_row_dialog">
<div className="session_caract_Dialog" > <b>Email </b>
<div className="session_caract_Dialog" > <b>Saisir votre email </b>
<TextField
autoFocus
margin="dense"
@ -749,7 +756,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">
@ -782,7 +789,7 @@ function Emarge_QR_Code() {
</div>}
<h3 style={{ fontFamily:'DM Sans' }}> Emargement électronique </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Emargement électronique </h3>
<div className="div_row">
<div className="block_guide_line" >
@ -987,7 +994,7 @@ function Emarge_QR_Code() {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -1026,7 +1033,7 @@ function Emarge_QR_Code() {
<div className="div_row">
&nbsp;
</div>
</div>
);
}

File diff suppressed because it is too large Load Diff

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',
margin: "auto",
},
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 (
@ -263,7 +235,7 @@ const Equipe_Team = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -360,7 +332,7 @@ const Equipe_Team = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -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";
}
}
@ -1602,7 +1574,10 @@ const Equipe_Team = (props) => {
function Record_All_PJ() {
if (!p_detail_one_file_to_download_type_name) {
alert(" Vous devez donner un nom à la pièce jointe");
// alert(" Vous devez donner un nom à la pièce jointe");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez donner un nom à la pièce jointe");
setalert_type("error");
return;
}
@ -1645,7 +1620,10 @@ const Equipe_Team = (props) => {
setfile_1_name();
setp_detail_one_file_to_download_type_name();
//GetCurrentClass_trainingsession();
alert(" La pièce jointe " + file_1_name.name + " a été bien enregistrée")
// alert(" La pièce jointe " + file_1_name.name + " a été bien enregistrée")
setdisplay_alert_mysy("1");
setalert_message(" La pièce jointe " + file_1_name.name + " a été bien enregistrée");
setalert_type("success");
}
else {
@ -2507,7 +2485,7 @@ const Equipe_Team = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -2927,8 +2905,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' }}>
@ -3349,7 +3325,7 @@ const Equipe_Team = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();

View File

@ -1,5 +1,5 @@
import React, { useState, useEffect } from "react";
import ReactPlayer from 'react-player'
import { FacebookShareButton, LinkedinShareButton, TwitterShareButton } from "react-share";
import { SocialIcon } from 'react-social-icons';
import { Button, } from "reactstrap";
@ -7,19 +7,16 @@ import { useHistory } from "react-router-dom";
import { Helmet } from "react-helmet";
import { useCookies } from "react-cookie";
import { confirmAlert } from 'react-confirm-alert';
import topimg from "../mysy_img/top.png";
import coeurimg from "../mysy_img/coeur.png";
import img_met_program from "../mysy_img/met_programmation.jpg";
import img_met_hotel from "../mysy_img/met_hotel.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_projet from "../mysy_img/met_projet.jpg";
import img_met_market from "../mysy_img/met_market.jpg";
import img_met_autre2 from "../mysy_img/met_autre2.jpg";
import img_met_dev_perso from "../mysy_img/metier_dev_perso.jpg";
import img_met_rh from "../mysy_img/met_rh.jpg";
@ -413,7 +410,7 @@ const Formation_Partner_Catalog = (props) => {
</div>
<div className="div_row row_formation_desc">
<div className="div_row row_formation_desc">
{parse(String(props.formation.description).replace(/(<([^>]+)>)/ig, ''))}
</div>
@ -570,75 +567,7 @@ const Formation_Partner_Catalog = (props) => {
</div>
{/* <div style={{ "width": "90%" }}>
<div className="criteres ftion_tab_gauche">
Type
</div>
<div className="criteres ftion_tab_droite">
{props.formation.type} &nbsp;
</div>
</div>
<div style={{ "width": "90%" }}>
<div className="criteres ftion_tab_gauche">
Support
</div>
<div className="criteres ftion_tab_droite">
{props.formation.support} &nbsp;
</div>
</div>
*/}
{/*props.formation.zone_diffusion && props.formation.zone_diffusion.country && <div style={{ "width": "100%" }}>
<div className="criteres ftion_tab_gauche">
Test : pays
</div>
<div className="criteres ftion_tab_droite">
{props.formation.zone_diffusion.country} &nbsp;
</div>
</div>*/}
{/*props.formation.zone_diffusion && props.formation.zone_diffusion.city && <div style={{ "width": "100%" }}>
<div className="criteres ftion_tab_gauche">
Test : Ville
</div>
<div className="criteres ftion_tab_droite">
{props.formation.zone_diffusion.city} &nbsp;
</div>
</div>*/}
{/*
{props.formation.presentiel && props.formation.presentiel.presentiel &&
<div style={{ "width": "100%" }}>
<div className="criteres ftion_tab_gauche">
Presentiel
</div>
<div className="criteres ftion_tab_droite">
{props.formation.presentiel.presentiel} &nbsp;
</div>
</div>}
{props.formation.presentiel && props.formation.presentiel.distantiel &&
<div style={{ "width": "100%" }}>
<div className="criteres ftion_tab_gauche">
Distantiel
</div>
<div className="criteres ftion_tab_droite">
{props.formation.presentiel.distantiel} &nbsp;
</div>
</div>}
*/}
</div>}
@ -707,20 +636,6 @@ const Formation_Partner_Catalog = (props) => {
</div>}
</div>
{/*<div style={{ "width": "100%", "float": "right" }}>
<div className="criteres ftion_tab_gauche">
Type
</div>
{props.formation.type &&
<div className="criteres ftion_tab_droite">
{props.formation.type}
</div>}
{!props.formation.type &&
<div className="criteres ftion_tab_droite">
NC
</div>}
</div>*/}
</div>

View File

@ -1,17 +1,6 @@
import React, { useRef, useState, useEffect } from "react";
import { styled } from '@mui/material/styles';
import Paper from '@mui/material/Paper';
import Grid from '@mui/material/Grid';
import { FacebookShareButton, LinkedinShareButton, TwitterShareButton } from "react-share";
import { SocialIcon } from 'react-social-icons';
import {
Box,
Container,
Row,
Column,
FooterLink,
Heading,
} from "./FooterStyles";
import moment from "moment";
const Fotter_Catalog_Pub = (props) => {
@ -56,6 +45,14 @@ const Fotter_Catalog_Pub = (props) => {
downloadLink.click();
}
const [current_year, setcurrent_year] = useState("");
useEffect(() => {
var date2 = new Date();
const format2 = "YYYY";
var dateTime2 = moment(date2).format(format2);
setcurrent_year(dateTime2)
}, []);
return (
<div className='footer_catalog_pub'>
@ -67,8 +64,8 @@ const Fotter_Catalog_Pub = (props) => {
<hr />
<i className='copyright'>
Copyright © 2024 {props.partner_data.nom} . Tous droits réservés. &nbsp;
Copyright © {current_year} {props.partner_data.nom} . Tous droits réservés. &nbsp;
<a> <nav onClick={Display_Mention_Legale_File} >| Mentions légales </nav> </a>
<a> <nav onClick={Display_CGU_File} >| Conditions générales dutilisation </nav> </a>
<a><nav onClick={Display_CGV_File} > | Conditions générales de vente </nav> </a>

View File

@ -112,7 +112,7 @@ function GestionAdministrative(props) {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -173,7 +173,7 @@ function GestionAdministrative(props) {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -237,7 +237,7 @@ function GestionAdministrative(props) {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -297,7 +297,7 @@ function GestionAdministrative(props) {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -430,7 +430,7 @@ function GestionAdministrative(props) {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -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
@ -7621,8 +7621,8 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
<button
className="gest_bton_popup_annuler"
onClick={() => {
close();
@ -7896,8 +7896,8 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -8037,8 +8037,8 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -8162,8 +8162,8 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();

View File

@ -6,20 +6,13 @@ 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 { 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';
@ -41,11 +34,10 @@ 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";
@ -53,12 +45,11 @@ 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 { FcMultipleSmartphones } from "react-icons/fc";
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
@ -72,8 +63,7 @@ import {
GridToolbarFilterButton, GridToolbarDensitySelector, GridToolbarExportContainer, useGridApiContext,
gridFilteredSortedRowIdsSelector,
gridVisibleColumnFieldsSelector,
GridValueGetterParams,
GridPreferencePanelsValue,
} from '@mui/x-data-grid';
import * as XLSX from 'xlsx';
@ -264,65 +254,68 @@ const Groupe_Apprenant = (props) => {
field: "delete", headerName: 'Supprimer', disableExport: true,
renderCell: (cellValues) => {
return (
<nav>
{String(cellValues.row.nb_membre) !== "0" && <Button onClick={(e) => {
alert(" Vous devez supprimer les membres avant de supprimer le groupe");
}}>
<CiTrash />
<>
</Button>}
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && <nav>
{String(cellValues.row.nb_membre) !== "0" && <Button onClick={(e) => {
alert(" Vous devez supprimer les membres avant de supprimer le groupe");
}}>
<CiTrash />
{String(cellValues.row.nb_membre) === "0" &&
<Popup
trigger={<Button
</Button>}
{String(cellValues.row.nb_membre) === "0" &&
<Popup
trigger={<Button
>
<CiTrash />
</Button>}
modal
nested
position="center center"
>
<CiTrash />
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
</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, le groupe sera <i><font color="red"> définitivement supprimé</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
handleClick_delete_groupe(event, cellValues);
//console.log('modal closed ');
close();
}}> Valider </button>
En confirmant cette opération, le groupe sera <i><font color="red"> définitivement supprimé</font></i>. <br />
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
handleClick_delete_groupe(event, cellValues);
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
</div>
)}
</Popup>}
)}
</Popup>}
</nav>
</nav>}
</>
);
}
}
@ -341,59 +334,60 @@ const Groupe_Apprenant = (props) => {
field: "delete", headerName: 'Supprimer', disableExport: true,
renderCell: (cellValues) => {
return (
<>
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && <Popup
trigger={<Button
<Popup
trigger={<Button
onClick={(event) => {
onClick={(event) => {
// handleClick_delete(event, cellValues);
}}
>
<CiTrash />
// handleClick_delete(event, cellValues);
}}
</Button>}
modal
nested
position="center center"
>
<CiTrash />
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, la personne sera <i><font color="red"> supprimée du groupe </font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
var tab = []
tab.push(String(cellValues.row._id));
Delete_List_Membre_From_Groupe(tab);
close();
}}> Valider </button>
En confirmant cette opération, la personne sera <i><font color="red"> supprimée du groupe </font></i>. <br />
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
var tab = []
tab.push(String(cellValues.row._id));
Delete_List_Membre_From_Groupe(tab);
close();
}}
>
Annuler
</button>
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
</div>
)}
</Popup>
)}
</Popup>}
</>
);
@ -914,7 +908,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";
}
}
@ -1032,7 +1026,10 @@ const Groupe_Apprenant = (props) => {
function Record_All_PJ() {
if (!p_detail_one_file_to_download_type_name) {
alert(" Vous devez donner un nom à la pièce jointe");
// alert(" Vous devez donner un nom à la pièce jointe");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez donner un nom à la pièce jointe");
setalert_type("error");
return;
}
@ -1076,7 +1073,10 @@ const Groupe_Apprenant = (props) => {
setfile_1_name();
setp_detail_one_file_to_download_type_name();
//GetCurrentClass_trainingsession();
alert(" La pièce jointe " + file_1_name.name + " a été bien enregistrée")
// alert(" La pièce jointe " + file_1_name.name + " a été bien enregistrée")
setdisplay_alert_mysy("1");
setalert_message(" La pièce jointe " + file_1_name.name + " a été bien enregistrée");
setalert_type("success");
}
else {
@ -2418,7 +2418,7 @@ const Groupe_Apprenant = (props) => {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title"> Choisir une couleur</DialogTitle>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title"> Choisir une couleur</DialogTitle>
<DialogContent className="DialogContent_color_pickup_width" >
<DialogContentText>
@ -2437,6 +2437,7 @@ const Groupe_Apprenant = (props) => {
}}
name="detail_grp_color"
id="detail_grp_color"
disabled={Boolean(String(props.check_user_acces_right("stagiaire", "write")))}
onChange={(color) => {
setp_detail_color(color.hex);
setgrp_apprenant_data_changed("1");
@ -2501,7 +2502,7 @@ const Groupe_Apprenant = (props) => {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title"> Création automatique des groupes </DialogTitle>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title"> Création automatique des groupes </DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
@ -3263,7 +3264,7 @@ const Groupe_Apprenant = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -3288,7 +3289,7 @@ const Groupe_Apprenant = (props) => {
<div className="div_row" style={{ "border": "None" }} id="bton_gestion_grp" name="bton_gestion_grp">
<div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined"
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && <Button variant="outlined"
className="detail_class_submenu bton_add_session bton_add_session_create_automatic" style={{ "width": "40%" }}
id='menu_import_participant' name='menu_import_participant' onClick={(event) => {
@ -3300,16 +3301,16 @@ const Groupe_Apprenant = (props) => {
}} > Gestion automatique
&nbsp; <FcMultipleSmartphones />
</Button>
</Button>}
&nbsp;
<Button variant="outlined" onClick={Ajout_1_grp_apprenant}
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && <Button variant="outlined" onClick={Ajout_1_grp_apprenant}
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout 1 Grp &nbsp;
<IoAddCircleOutline style={{ "fontSize": "x-large", "color": "green" }} />
</Button>
</Button>}
</div>
</div>
@ -3320,7 +3321,7 @@ const Groupe_Apprenant = (props) => {
{selected_id && String(selected_id).length > 5 && <div className="div_row">
<Button variant="outlined" onClick={submenu_detail} className="detail_class_submenu" id='detail_groupe' name='detail_groupe'>Détail Evaluation</Button>
<Button variant="outlined" onClick={submenu_apprenant} className="detail_class_submenu" id='apprenant' name='apprenant'>Membres </Button>
<Button variant="outlined" onClick={submenu_selection} className="detail_class_submenu" id='selection' name='selection'>Sélection </Button>
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && <Button variant="outlined" onClick={submenu_selection} className="detail_class_submenu" id='selection' name='selection'>Sélection </Button>}
<Button variant="outlined" onClick={submenu_piece_jointe} className="detail_class_submenu" id='piece_jointe' name='piece_jointe'>Pièces Jointes </Button>
</div>}
@ -3642,7 +3643,9 @@ const Groupe_Apprenant = (props) => {
<div className="session_caract"> Code couleur &nbsp;
<nav className="disabled_style" style={{ backgroundColor: p_detail_color, cursor: 'pointer', borderRadius: '10px', paddingTop: '15px' }} onClick={(event, value) => {
setDialog_GRP_COLOR_open(true)
if (String(props.check_user_acces_right("stagiaire", "write")) === "1")
setDialog_GRP_COLOR_open(true)
}}
> &nbsp; Cliquer pour choisir </nav>
@ -3669,7 +3672,7 @@ const Groupe_Apprenant = (props) => {
<div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
{ String(grp_apprenant_data_edit_mode) === "1" && <div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
{String(grp_apprenant_data_edit_mode) === "1" && <div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
<Button variant="contained" className="bton_enreg" onClick={Add_Update_Grp_Apprenant_Data}>Enregistrer les modifications
</Button>
@ -3683,7 +3686,7 @@ const Groupe_Apprenant = (props) => {
</div>
{String(grp_apprenant_data_edit_mode) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && String(grp_apprenant_data_edit_mode) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_edit" onClick={Enable_Grp_Apprenant_DetailFields}>Editer
</Button>
@ -3697,7 +3700,7 @@ const Groupe_Apprenant = (props) => {
</div>}
{String(add_one_grp_apprenant) === "1" && String(display_grp_apprenant) !== "1" && <div className="div_row session_data">
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && String(add_one_grp_apprenant) === "1" && String(display_grp_apprenant) !== "1" && <div className="div_row session_data">
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600", "paddingTop": "10px", "paddingLeft": "5px" }}> Ajouter un nouveau groupe </nav>
@ -3880,7 +3883,8 @@ const Groupe_Apprenant = (props) => {
<div className="session_caract"> Code couleur &nbsp;
<nav className="disabled_style" style={{ backgroundColor: p_detail_color, cursor: 'pointer', borderRadius: '10px', paddingTop: '15px' }} onClick={(event, value) => {
setDialog_GRP_COLOR_open(true)
if (String(props.check_user_acces_right("stagiaire", "write")) === "1")
setDialog_GRP_COLOR_open(true)
}}
> &nbsp; Cliquer pour choisir </nav>
@ -3934,7 +3938,7 @@ const Groupe_Apprenant = (props) => {
<div className="div_row session_data">
<div className="div_row" style={{ "padding": "5px", 'paddingTop': '15px' }}>
<div style={{ "fontSize": "12px" }}>
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && <div style={{ "fontSize": "12px" }}>
<label htmlFor="upload-photo">
<input
style={{ display: "none" }}
@ -3955,7 +3959,7 @@ const Groupe_Apprenant = (props) => {
</Fab>
</label>
</div>
</div>}
{file_1_name && file_1_name.name &&
<nav style={{ "fontSize": "12px" }}>
<div className="session_caract">Nom du fichier <br />
@ -4014,7 +4018,7 @@ const Groupe_Apprenant = (props) => {
name={(JSON.parse(val).file_name)}
id={(JSON.parse(val).file_name)} onClick={Download_one_attached_document}> Télécharger &nbsp;</font></nav>
<Popup
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && <Popup
trigger={
<nav style={{ "color": "red", "cursor": "pointer" }} > Supprimer</nav>
@ -4050,7 +4054,7 @@ const Groupe_Apprenant = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -4062,7 +4066,7 @@ const Groupe_Apprenant = (props) => {
</div>
</div>
)}
</Popup>
</Popup>}
</div>
))}

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

@ -1,31 +1,22 @@
import React, { useRef, useState, useEffect } from "react";
import Button from '@mui/material/Button';
import { getCookie } from 'react-use-cookie';
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import axios from "axios";
import Box from '@mui/material/Box';
import { useHistory } from "react-router-dom";
import { FcIdea } from "react-icons/fc";
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import img_paypal from "./../mysy_img/paypal.png"
import moment from "moment";
import {
CardElement,
useStripe,
useElements,
} from '@stripe/react-stripe-js';
import { Elements } from '@stripe/react-stripe-js';
import { loadStripe } from '@stripe/stripe-js';
import { PaymentElement } from '@stripe/react-stripe-js';
import Popup from 'reactjs-popup';
import SendIcon from '@mui/icons-material/Send';
import Popup from 'reactjs-popup';
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import EditIcon from '@mui/icons-material/Edit';
import { MdDeleteForever } from "react-icons/md";
import Fab from '@mui/material/Fab';
import { IoIosAddCircleOutline, IoMdTrash } from "react-icons/io";
@ -279,7 +270,7 @@ function HebergementLms(props) {
img_height = this.height;
img_width = this.width;
_URL.revokeObjectURL(objectUrl);
// console.log(" img_width = ", img_width, " img_height = ", img_height)
// console.log(" img_width = ", img_width, " img_height = ", img_height)
if (parseFloat(img_width) > 130 && parseFloat(img_width) < 260 &&
parseFloat(img_height) > 60 && parseFloat(img_height) < 150) {
@ -753,7 +744,9 @@ function HebergementLms(props) {
<div className="session_caract">Choisir un exemple de thème : <br />
<select id="lms_theme_liste" name="lms_theme_liste" value={selected_lms_theme} onChange={handleChangeselected_lms_theme} className="selectsession">
<select id="lms_theme_liste" name="lms_theme_liste"
disabled={Boolean(String(props.check_user_acces_right("lms", "write")))}
value={selected_lms_theme} onChange={handleChangeselected_lms_theme} className="selectsession">
<option value="">Choisir un modèle </option>
{GetLms_Themes_result &&
GetLms_Themes_result.map((lms_theme) => (
@ -774,7 +767,7 @@ function HebergementLms(props) {
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
</div>
{<div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
{String(props.check_user_acces_right("lms", "write")) === "1" && <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="btn_modif" onClick={"One_annuleSessionUpdate"}>Annuler
@ -807,7 +800,7 @@ function HebergementLms(props) {
</div>}
<div style={{ "width": "250px", textAlign: 'left', "marginTop": "1rem", marginBottom: '1rem' }} onClick={(e) => {
{String(props.check_user_acces_right("lms", "write")) === "1" && <div style={{ "width": "250px", textAlign: 'left', "marginTop": "1rem", marginBottom: '1rem' }} onClick={(e) => {
e.preventDefault();
}}>
@ -867,7 +860,7 @@ Le nom du fichier ne contient que des caractères alphanumériques </i>">
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();
@ -883,7 +876,7 @@ Le nom du fichier ne contient que des caractères alphanumériques </i>">
</nav>
</a>
</div>
</div>}
@ -910,13 +903,13 @@ Le nom du fichier ne contient que des caractères alphanumériques </i>">
</nav>*/}
<br />
{logo_file_name && <nav className="okUpdateData"><i>{logo_file_name}</i></nav>}
<input type="file"
{String(props.check_user_acces_right("lms", "write")) === "1" && <input type="file"
accept=".png"
ref={hiddenFileInput_logo}
style={{ display: 'none' }}
name="liste_formation_file"
onChange={handleSubmission_logo}
/>
/>}
{img_logo_file && <nav> Fichier à importer : {img_logo_file.name} <br />
<img src={img_logo_file} alt={""} />
@ -938,7 +931,7 @@ Le nom du fichier ne contient que des caractères alphanumériques </i>">
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
</div>
<div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
{String(props.check_user_acces_right("lms", "write")) === "1" && <div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
<div className="div_row" style={{
@ -964,7 +957,7 @@ Le nom du fichier ne contient que des caractères alphanumériques </i>">
</div>
</div>
</div>}
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
</div>
@ -983,7 +976,7 @@ Le nom du fichier ne contient que des caractères alphanumériques </i>">
</Button>*/}
</div>}
<div style={{ "width": "250px", marginLeft: 'auto', marginRight: 'auto', "marginTop": "1rem", marginBottom: '1rem' }} onClick={(e) => {
{String(props.check_user_acces_right("lms", "write")) === "1" && <div style={{ "width": "250px", marginLeft: 'auto', marginRight: 'auto', "marginTop": "1rem", marginBottom: '1rem' }} onClick={(e) => {
e.preventDefault();
}}>
@ -1043,7 +1036,7 @@ Le nom du fichier ne contient que des caractères alphanumériques </i>">
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();
@ -1059,7 +1052,7 @@ Le nom du fichier ne contient que des caractères alphanumériques </i>">
</nav>
</a>
</div>
</div>}
@ -1072,13 +1065,13 @@ Le nom du fichier ne contient que des caractères alphanumériques </i>">
{bg_file_name && <nav className="okUpdateData"><i>{bg_file_name}</i></nav>}
<input type="file"
{String(props.check_user_acces_right("lms", "write")) === "1" && <input type="file"
accept=".png"
ref={hiddenFileInput_bg}
style={{ display: 'none' }}
name="liste_formation_file"
onChange={handleSubmission_bg}
/>
/>}
{img_bg_file && <nav> Fichier à importer : {img_bg_file.name} <br />
<img src={img_bg_file} alt={""} className="img_bg_file_css" />
@ -1097,7 +1090,7 @@ Le nom du fichier ne contient que des caractères alphanumériques </i>">
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
</div>
<div className="div_row">
{String(props.check_user_acces_right("lms", "write")) === "1" && <div className="div_row">
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
<div className="div_row" style={{
@ -1128,7 +1121,7 @@ Le nom du fichier ne contient que des caractères alphanumériques </i>">
&nbsp;
</div>
</div>
</div>}
</div>
</div>}

File diff suppressed because it is too large Load Diff

View File

@ -298,7 +298,7 @@ const options_menu_vertical = [
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -430,7 +430,7 @@ const options_menu_vertical = [
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -500,7 +500,7 @@ const options_menu_vertical = [
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -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

@ -59,6 +59,7 @@ import Checkbox from '@mui/material/Checkbox';
import Module_Email_Management from "./Module_Email_Management";
import FormGroup from '@mui/material/FormGroup';
import FormControlLabel from '@mui/material/FormControlLabel';
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import {
GridToolbarContainer, GridToolbarExport, GridToolbarColumnsButton,
@ -150,10 +151,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 +789,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 +1083,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 +1814,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 +1903,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 +1915,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 +1935,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 +1953,8 @@ const Intranet_Mes_Stagiaires = (props) => {
setdisplay_detail_ue("");
setdisplay_notes("1");
desableSessionFields();
}
@ -2230,62 +2221,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 +2271,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 +2486,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 +2502,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 +2519,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 +4167,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);
@ -4898,7 +4871,10 @@ const Intranet_Mes_Stagiaires = (props) => {
function Record_All_PJ() {
if (!p_detail_one_file_to_download_type_name) {
alert(" Vous devez donner un nom à la pièce jointe");
// alert(" Vous devez donner un nom à la pièce jointe");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez donner un nom à la pièce jointe");
setalert_type("error");
return;
}
@ -4943,7 +4919,11 @@ const Intranet_Mes_Stagiaires = (props) => {
setfile_1_name();
setp_detail_one_file_to_download_type_name();
//GetCurrentClass_trainingsession();
alert(" La pièce jointe " + file_1_name.name + " a été bien enregistrée")
// alert(" La pièce jointe " + file_1_name.name + " a été bien enregistrée")
setdisplay_alert_mysy("1");
setalert_message(result['message']);
setalert_type("error");
}
else {
@ -6345,115 +6325,130 @@ 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;
});
// FIN EXPORT EXCEL DATAGRID
const worksheet = XLSX.utils.json_to_sheet(rows);
XLSX.utils.sheet_add_aoa(worksheet, [[...local_config.columnNames]], {
origin: 'A1',
});
const [display_alert_mysy, setdisplay_alert_mysy] = useState("");
const [alert_message, setalert_message] = useState("");
const [alert_type, setalert_type] = useState("");
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 clear_alert_message() {
setalert_message("");
}
function clear_alert_type() {
setalert_type("");
}
function clear_display_alert_mysy() {
setdisplay_alert_mysy("");
}
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
return (
<div className="intranet_mes_stagiaires">
@ -6461,15 +6456,26 @@ function ExportMenuItem(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 info stagiaire */}
<Dialog
open={Dialog_stagiaire_open}
//onClose={Dialog_stagiaire_handleClose}
className="displaypartnersession"
static
onClose={() => null}
@ -6494,7 +6500,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 +6646,7 @@ function ExportMenuItem(props) {
<DialogActions>
<IconButton
<IconButton
autoFocus
onClick={Dialog_stagiaire_handleClose_buton}
color="primary"
@ -6671,7 +6677,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 +6721,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 +7103,7 @@ function ExportMenuItem(props) {
<DialogActions>
<IconButton
<IconButton
autoFocus
onClick={Dialog_tuteur_1_handleClose_buton}
color="primary"
@ -7133,7 +7139,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 +7451,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 +7956,7 @@ function ExportMenuItem(props) {
}}
>
<DataGrid
// checkboxSelection
// checkboxSelection
components={{
Toolbar: CustomToolbar
}}
@ -8057,9 +8063,9 @@ function ExportMenuItem(props) {
rowsPerPageOptions={[10]}
disableSelectionOnClick
/* components={{
Toolbar: GridToolbar,
}}*/
/* components={{
Toolbar: GridToolbar,
}}*/
//sx={datagridSx}
getCellClassName={(params) => {
//field === 'distantiel'
@ -8343,7 +8349,7 @@ function ExportMenuItem(props) {
</div>}
</div>
@ -8352,7 +8358,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 +8391,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 +10314,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" }}>
@ -10691,7 +10692,7 @@ function ExportMenuItem(props) {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -10726,7 +10727,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 +10800,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 +10873,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

@ -211,7 +211,7 @@ const Intranet_Tous_Documents = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -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";
}
@ -1168,7 +1168,7 @@ const Intranet_Tous_Documents = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();

View File

@ -0,0 +1,480 @@
import React, { useState, useEffect } from "react";
import { useHistory } from "react-router-dom";
import { useCookies } from "react-cookie";
import { confirmAlert } from 'react-confirm-alert';
import Fotter_Catalog_Pub from "../Fotter_Catalog_Pub";
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'
import { CiLocationOn } from "react-icons/ci";
const Formation_Partner_Catalog_Special_JMJFormation = (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',
margin: "auto",
},
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();
if (props.formation.url && props.formation.url.length > 5) {
window.open(
props.formation.url,
'_blank'
);
} else {
window.open(
"/Display-Partner-Catalog-Detail-formation/" + props.formation.internal_url,
'_blank'
);
}
}}> Voir les détails </nav></button>
</div>
</div>
</div>
)
}
export default Formation_Partner_Catalog_Special_JMJFormation;

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

Binary file not shown.

View File

@ -4,7 +4,7 @@ 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 { getCookie, } 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";
@ -20,7 +20,6 @@ import 'reactjs-popup/dist/index.css';
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";
@ -44,11 +43,10 @@ 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";
import ToggleSwitch from "./ToggleSwitch";
import daygridPlugin from "@fullcalendar/daygrid";
import FullCalendar, { formatDate } from "@fullcalendar/react";
@ -225,9 +223,7 @@ const Jury = (props) => {
{ field: '_id', headerName: '_id', hide: true, Width: 0, disableExport: true, },
{ field: 'id', headerName: 'id', hide: true, Width: 0, disableExport: true, },
{ field: 'session_id', headerName: 'session_id', hide: true, Width: 0, disableExport: true, },
{ field: 'chef_jury_id', headerName: 'chef_jury_id', hide: true, Width: 0, disableExport: true, },
{ field: 'code', headerName: 'Code', flex: 1, hide: false, minWidth: 180, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'description', headerName: 'Description', flex: 1, hide: false, minWidth: 180, renderCell: (params) => <ExpandableCell_50 {...params} />, },
@ -244,66 +240,68 @@ const Jury = (props) => {
field: "delete", headerName: 'Supprimer', disableExport: true,
renderCell: (cellValues) => {
return (
<nav>
{String(cellValues.row.nb_membre) !== "0" && <Button onClick={(e) => {
alert(" Vous devez supprimer les membres avant de supprimer le jury");
}}>
<CiTrash />
<>
{String(props.check_user_acces_right("jury", "write")) === "1" && <nav>
{String(cellValues.row.nb_membre) !== "0" && <Button onClick={(e) => {
alert(" Vous devez supprimer les membres avant de supprimer le jury");
}}>
<CiTrash />
</Button>}
</Button>}
{String(cellValues.row.nb_membre) === "0" &&
<Popup
trigger={<Button
{String(cellValues.row.nb_membre) === "0" &&
<Popup
trigger={<Button
>
<CiTrash />
</Button>}
modal
nested
position="center center"
>
<CiTrash />
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
</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, le jury sera <i><font color="red"> définitivement supprimé</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
Delete_Given_Jury(cellValues.row._id);
//console.log('modal closed ');
close();
}}> Valider </button>
En confirmant cette opération, le jury sera <i><font color="red"> définitivement supprimé</font></i>. <br />
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
Delete_Given_Jury(cellValues.row._id);
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
</div>
)}
</Popup>}
)}
</Popup>}
</nav>
</nav>}
</>
);
}
}
@ -344,61 +342,62 @@ const Jury = (props) => {
field: "delete", headerName: 'Supprimer', disableExport: true,
renderCell: (cellValues) => {
return (
<>
{String(props.check_user_acces_right("jury", "write")) === "1" && <Popup
trigger={<Button
<Popup
trigger={<Button
onClick={(event) => {
onClick={(event) => {
// handleClick_delete(event, cellValues);
}}
>
<CiTrash />
// handleClick_delete(event, cellValues);
}}
</Button>}
modal
nested
position="center center"
>
<CiTrash />
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, la personne sera <i><font color="red"> supprimée de l'équipe </font></i>. <br />
En confirmant cette opération, la personne sera <i><font color="red"> supprimée de l'équipe </font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
var tab = []
tab.push(String(cellValues.row._id));
Delete_List_Membre_From_Jury(tab);
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
var tab = []
tab.push(String(cellValues.row._id));
Delete_List_Membre_From_Jury(tab);
close();
}}
>
Annuler
</button>
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
</div>
)}
</Popup>
)}
</Popup>}
</>
);
@ -448,7 +447,7 @@ const Jury = (props) => {
renderCell: (cellValues) => {
return (
<nav>
<Button onClick={(e) => {
{String(props.check_user_acces_right("jury", "write")) === "1" && <Button onClick={(e) => {
Get_Jury_List_Apprenant_Soutenance(cellValues.row._id, cellValues.row.jury_soutenance_id);
@ -464,10 +463,7 @@ const Jury = (props) => {
}}>
<TbUsersGroup />
</Button>
</Button>}
</nav>
);
}
@ -478,7 +474,7 @@ const Jury = (props) => {
renderCell: (cellValues) => {
return (
<nav>
<Popup
{String(props.check_user_acces_right("jury", "write")) === "1" && <Popup
trigger={<Button
>
<CiTrash />
@ -512,7 +508,7 @@ const Jury = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -524,7 +520,7 @@ const Jury = (props) => {
</div>
</div>
)}
</Popup>
</Popup>}
</nav>
);
@ -536,7 +532,7 @@ const Jury = (props) => {
renderCell: (cellValues) => {
return (
<div>
<nav style={{ width: '100%', 'textAlign': 'center' }}>
{String(props.check_user_acces_right("jury", "write")) === "1" && <nav style={{ width: '100%', 'textAlign': 'center' }}>
<IconButton
aria-label="more"
id="long-button"
@ -632,7 +628,7 @@ const Jury = (props) => {
</nav>
</nav>}
</div>
);
},
@ -660,7 +656,7 @@ const Jury = (props) => {
renderCell: (cellValues) => {
return (
<nav>
<Popup
{String(props.check_user_acces_right("jury", "write")) === "1" && <Popup
trigger={<Button
>
<CiTrash />
@ -694,7 +690,7 @@ const Jury = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -706,7 +702,7 @@ const Jury = (props) => {
</div>
</div>
)}
</Popup>
</Popup>}
</nav>
);
@ -2068,7 +2064,7 @@ const Jury = (props) => {
async function submenu_detail() {
await sleep(5);
setsubmenu("detail_jury");
inactive_active_menu_header("detail_jury");
@ -2080,7 +2076,7 @@ const Jury = (props) => {
}
async function submenu_membres() {
await sleep(5);
setsubmenu("membre");
inactive_active_menu_header("membre");
@ -2092,7 +2088,7 @@ const Jury = (props) => {
}
async function submenu_piece_jointe() {
await sleep(5);
setsubmenu("piece_jointe");
inactive_active_menu_header("piece_jointe");
@ -2107,7 +2103,7 @@ const Jury = (props) => {
}
async function submenu_selection() {
await sleep(5);
setsubmenu("selection");
inactive_active_menu_header("selection");
@ -2161,7 +2157,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";
}
}
@ -2705,7 +2701,10 @@ const Jury = (props) => {
function Record_All_PJ() {
if (!p_detail_one_file_to_download_type_name) {
alert(" Vous devez donner un nom à la pièce jointe");
// alert(" Vous devez donner un nom à la pièce jointe");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez donner un nom à la pièce jointe");
setalert_type("error");
return;
}
@ -2748,7 +2747,10 @@ const Jury = (props) => {
setfile_1_name();
setp_detail_one_file_to_download_type_name();
//GetCurrentClass_trainingsession();
alert(" La pièce jointe " + file_1_name.name + " a été bien enregistrée")
// alert(" La pièce jointe " + file_1_name.name + " a été bien enregistrée")
setdisplay_alert_mysy("1");
setalert_message(" La pièce jointe " + file_1_name.name + " a été bien enregistrée");
setalert_type("success");
}
else {
@ -3029,9 +3031,6 @@ const Jury = (props) => {
const handleSelect_V2 = (info) => {
GetListeInscrit();
setGet_Jury_List_Apprenant_Seance_insc_result([]);
setselected_agenda_id("");
@ -3426,7 +3425,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/";
@ -4410,6 +4409,14 @@ const Jury = (props) => {
const [selected_inscription_id_for_jury, setselected_inscription_id_for_jury] = useState("");
const New_Option_mode_animation = [
{ "id": "1", "label": "Distanciel", "value": "1" },
{ "id": "2", "label": "Hybride", "value": "2" },
{ "id": "0", "label": "Présentiel", "value": "0" },
{ "id": "", "label": "", "value": "" },
]
return (
<div className="jurys">
{isLoading && <div className="loader-container">
@ -4459,7 +4466,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 +4609,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 +4927,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 +5794,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 +6356,7 @@ const Jury = (props) => {
},
"& .MuiDataGrid-columnHeaders": {
backgroundColor: "#c8cfd5",
@ -6573,7 +6580,7 @@ const Jury = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -6600,11 +6607,11 @@ const Jury = (props) => {
&nbsp;
<Button variant="outlined" onClick={Ajout_1_jury}
{String(props.check_user_acces_right("jury", "write")) === "1" && <Button variant="outlined" onClick={Ajout_1_jury}
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout 1 Jury &nbsp;
<IoAddCircleOutline style={{ "fontSize": "x-large", "color": "green" }} />
</Button>
</Button>}
</div>
</div>
@ -7340,12 +7347,12 @@ const Jury = (props) => {
&nbsp;
</div>
<div className="div_row" style={{ "border": "None" }}>
{String(equipe_data_changed) === "1" && String(equipe_data_edit_mode) === "1" && <div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
{String(props.check_user_acces_right("jury", "write")) === "1" && String(equipe_data_changed) === "1" && String(equipe_data_edit_mode) === "1" && <div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
/!\ Pensez à enregistrer les modifications
</div>}
<div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
{String(props.check_user_acces_right("jury", "write")) === "1" && <div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
{String(equipe_data_edit_mode) === "1" && <div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
@ -7358,10 +7365,10 @@ const Jury = (props) => {
<Button variant="contained" className="bton_annule" onClick={Annule_Jury_DetailFields}>Annuler
</Button>
</div>}
</div>
</div>}
{String(equipe_data_edit_mode) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
{String(props.check_user_acces_right("jury", "write")) === "1" && String(equipe_data_edit_mode) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_edit" onClick={Enable_Jury_DetailFields}>Editer
</Button>
@ -8034,8 +8041,8 @@ const Jury = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -8098,7 +8105,7 @@ const Jury = (props) => {
<div className="div_row session_data">
<div className="div_row" style={{ "padding": "5px", 'paddingTop': '15px' }}>
<div style={{ "fontSize": "12px" }}>
{String(props.check_user_acces_right("jury", "write")) === "1" && <div style={{ "fontSize": "12px" }}>
<label htmlFor="upload-photo">
<input
style={{ display: "none" }}
@ -8119,7 +8126,7 @@ const Jury = (props) => {
</Fab>
</label>
</div>
</div>}
{file_1_name && file_1_name.name &&
<nav style={{ "fontSize": "12px" }}>
<div className="session_caract">Nom du fichier <br />
@ -8178,7 +8185,7 @@ const Jury = (props) => {
name={(JSON.parse(val).file_name)}
id={(JSON.parse(val).file_name)} onClick={Download_one_attached_document}> Télécharger &nbsp;</font></nav>
<Popup
{String(props.check_user_acces_right("jury", "write")) === "1" && <Popup
trigger={
<nav style={{ "color": "red", "cursor": "pointer" }} > Supprimer</nav>
@ -8214,7 +8221,7 @@ const Jury = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -8226,7 +8233,7 @@ const Jury = (props) => {
</div>
</div>
)}
</Popup>
</Popup>}
</div>
))}
@ -8250,7 +8257,7 @@ const Jury = (props) => {
</div>
}
{
String(submenu) === "planning" && <div className="div_row ">
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Soutenances</nav>
@ -8376,23 +8383,25 @@ const Jury = (props) => {
className="datagridclass"
onRowDoubleClick={(newSelectionModel) => {
setselected_agenda_id(newSelectionModel.row._id);
setselected_jury_soutenance_id(newSelectionModel.row.jury_soutenance_id);
setp_detail_linked_collection_recid(newSelectionModel.row.jury_session_id);
setsubmenu_detail_seance("display_jury_seance");
GetCurrentSession(newSelectionModel.row.jury_session_id);
if (String(props.check_user_acces_right("jury", "write")) === "1") {
setselected_agenda_id(newSelectionModel.row._id);
setselected_jury_soutenance_id(newSelectionModel.row.jury_soutenance_id);
setp_detail_linked_collection_recid(newSelectionModel.row.jury_session_id);
setsubmenu_detail_seance("display_jury_seance");
GetCurrentSession(newSelectionModel.row.jury_session_id);
if (String(selected_jury_cible) === "soutenance") {
Get_Jury_List_Apprenant_Soutenance(newSelectionModel.row._id, newSelectionModel.row.jury_soutenance_id);
}
if (String(selected_jury_cible) === "soutenance") {
Get_Jury_List_Apprenant_Soutenance(newSelectionModel.row._id, newSelectionModel.row.jury_soutenance_id);
}
if (document.getElementById('myRef_note_classemment')) {
var divh = document.getElementById('myRef_note_classemment').offsetTop;
if (document.getElementById('myRef_note_classemment')) {
var divh = document.getElementById('myRef_note_classemment').offsetTop;
window.scrollTo({
top: divh,
behavior: "smooth",
});
window.scrollTo({
top: divh,
behavior: "smooth",
});
}
}
}}
@ -8557,10 +8566,11 @@ const Jury = (props) => {
</div>
</div>
<div className="div_row" style={{ "border": "None" }}>
<div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined"
{String(props.check_user_acces_right("jury", "write")) === "1" && <Button variant="outlined"
onClick={(event) => {
GetListeInscrit();
setGet_Jury_List_Apprenant_Seance_insc_result([]);
@ -8586,7 +8596,7 @@ const Jury = (props) => {
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout 1 Soutenance &nbsp;
<IoAddCircleOutline style={{ "fontSize": "x-large", "color": "green" }} />
</Button>
</Button>}
</div>
</div>
@ -8779,7 +8789,7 @@ const Jury = (props) => {
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
</div>
{String(soutenance_data_edit_mode) === "1" && <div className="div_row" style={{ "border": "None" }}>
{String(props.check_user_acces_right("jury", "write")) === "1" && String(soutenance_data_edit_mode) === "1" && <div className="div_row" style={{ "border": "None" }}>
<div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
@ -8803,8 +8813,8 @@ const Jury = (props) => {
{String(soutenance_data_edit_mode) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_edit" onClick={Enable_Jury_Soutenance_DetailFields}>Editer
</Button>
{String(props.check_user_acces_right("jury", "write")) === "1" && <Button variant="contained" className="bton_edit" onClick={Enable_Jury_Soutenance_DetailFields}>Editer
</Button>}
</div>}

View File

@ -29,8 +29,8 @@ 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 { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
import { IoAddCircleOutline } from "react-icons/io5";
import ToggleSwitch from "./ToggleSwitch";
import ToggleSwitch_v2_mysy from "./ToggleSwitch_v2_mysy";
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
@ -143,57 +143,58 @@ const Materiel_Salle = (props) => {
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<>
{String(props.check_user_acces_right("materiel", "write")) === "1" && <Popup
trigger={<Button
<Popup
trigger={<Button
onClick={(event) => {
// handleClick_delete(event, cellValues);
}}
>
<CiTrash />
onClick={(event) => {
// handleClick_delete(event, cellValues);
}}
</Button>}
modal
nested
position="center center"
>
<CiTrash />
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, la salle 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(event, cellValues);
//console.log('modal closed ');
close();
}}> Valider </button>
En confirmant cette opération, la salle sera <i><font color="red"> définitivement supprimée</font></i>. <br />
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
handleClick_delete(event, cellValues);
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
</div>
)}
</Popup>
)}
</Popup>}
</>
);
@ -217,56 +218,58 @@ const Materiel_Salle = (props) => {
renderCell: (cellValues) => {
return (
<Popup
trigger={<Button
<>
{String(props.check_user_acces_right("materiel", "write")) === "1" && <Popup
trigger={<Button
onClick={(event) => {
//handleClick_delete(event, cellValues);
}}
onClick={(event) => {
//handleClick_delete(event, cellValues);
}}
>
<CiTrash />
</Button>}
modal
nested
position="center center"
>
<CiTrash />
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, la fonction 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_affection(event, cellValues);
//console.log('modal closed ');
close();
}}> Valider </button>
En confirmant cette opération, la fonction sera <i><font color="red"> définitivement supprimée</font></i>. <br />
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
handleClick_delete_affection(event, cellValues);
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
</div>
)}
</Popup>
)}
</Popup>}
</>
);
@ -287,67 +290,6 @@ const Materiel_Salle = (props) => {
{ field: 'related_target_collection_id_nom', headerName: 'Cible Nom', flex: 1, hide: false, },
{ field: 'target_related_collection', headerName: 'Type', hide: true },
{ field: 'target_related_collection_id', headerName: 'Type ID', hide: true },
{/*
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<Popup
trigger={<Button
onClick={(event) => {
//handleClick_delete(event, cellValues);
}}
>
<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, la fonction 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_affection(event, cellValues);
//console.log('modal closed ');
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
);
}
*/}
]
@ -371,7 +313,7 @@ const Materiel_Salle = (props) => {
const [Partner_Debut_Journee, setPartner_Debut_Journee] = useState("7:00");
const [Partner_Fin_Journee, setPartner_Fin_Journee] = useState("20:00");
const [New_Getall_Partner_Site_Formation_result, setNew_Getall_Partner_Site_Formation_result] = useState([]);
const [Getall_Partner_Site_Formation_api, setGetall_Partner_Site_Formation_api] = useState();
@ -760,14 +702,20 @@ const Materiel_Salle = (props) => {
setliste_sessions_file_change_api("true");
Getall_Training_Materiel_Salle();
alert(" Le materiel ont été correctement importé");
// alert(" Le materiel ont été correctement importé");
setdisplay_alert_mysy("1");
setalert_message(" Le materiel ont été correctement importé");
setalert_type("success");
}
else {
setliste_sessions_file_change_message(result['message']);
setliste_sessions_file_change_api("false");
alert('Erreur: ' + result['message']);
// alert('Erreur: ' + result['message']);
setdisplay_alert_mysy("1");
setalert_message(result['message']);
setalert_type("error");
}
@ -1628,8 +1576,8 @@ const Materiel_Salle = (props) => {
).then((response) => response.json())
.then((result) => {
console.log(' removeRecodedClassImage : status:', result['status']);
console.log('removeRecodedClassImage : Success:', result['message']);
// console.log(' removeRecodedClassImage : status:', result['status']);
// console.log('removeRecodedClassImage : Success:', result['message']);
if (String(result['status']) === String("true")) {
@ -1782,12 +1730,15 @@ const Materiel_Salle = (props) => {
)
.then((response) => response.json())
.then((result) => {
console.log('Success:', result['message'], "result['status'] = ", result['status']);
// console.log('Success:', result['message'], "result['status'] = ", result['status']);
if (String(result['status']) === String("true")) {
setrecord_materiel_Image_api("true");
setuserimgclassprofilchanged("");
alert(" L'image a été enregistrée ");
//alert(" L'image a été enregistrée ");
setdisplay_alert_mysy("1");
setalert_message(" L'image a été enregistrée ");
setalert_type("success");
} else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']);
@ -1795,6 +1746,9 @@ const Materiel_Salle = (props) => {
} else {
setrecord_materiel_Image_api("false");
alert(result['message']);
// setdisplay_alert_mysy("1");
setalert_message(result['message']);
setalert_type("error");
}
})
@ -2734,16 +2688,18 @@ const Materiel_Salle = (props) => {
// Pas d'acces en ecriture.
return;
}
setp_detail_title("Nouvelle")
setp_detail_start(info.start)
setp_detail_end(info.end)
setp_detail_comment("");
setp_detail_sequence_session_id("");
setp_detail_event_id("");
if (String(props.check_user_acces_right("materiel", "write")) === "1") {
setp_detail_title("Nouvelle")
setp_detail_start(info.start)
setp_detail_end(info.end)
setp_detail_comment("");
setp_detail_sequence_session_id("");
setp_detail_event_id("");
setStartDate(info.start);
setendDate(info.end);
setDialog_1_open(true);
setStartDate(info.start);
setendDate(info.end);
setDialog_1_open(true);
}
};
const [Get_List_Agenda_Events_For_Given_User_api, setGet_List_Agenda_Events_For_Given_User_api] = useState();
@ -2946,47 +2902,48 @@ const Materiel_Salle = (props) => {
const handleEventClick = (arg) => {
if (String(props.check_user_acces_right("materiel", "write")) === "1") {
setp_detail_title(arg.event.title)
setp_detail_start(arg.event.start)
setp_detail_end(arg.event.end)
setp_detail_event_id(arg.event.id);
setp_detail_title(arg.event.title)
setp_detail_start(arg.event.start)
setp_detail_end(arg.event.end)
setp_detail_event_id(arg.event.id);
if (arg.event.extendedProps.comment) {
setp_detail_comment(arg.event.extendedProps.comment);
if (arg.event.extendedProps.comment) {
setp_detail_comment(arg.event.extendedProps.comment);
}
else
setp_detail_comment("");
}
else
setp_detail_comment("");
if (arg.event.extendedProps.sequence_session_id) {
setp_detail_sequence_session_id(arg.event.extendedProps.sequence_session_id);
if (arg.event.extendedProps.sequence_session_id) {
setp_detail_sequence_session_id(arg.event.extendedProps.sequence_session_id);
}
else
setp_detail_sequence_session_id("");
}
else
setp_detail_sequence_session_id("");
if (arg.event.extendedProps.justified) {
if (String(arg.event.extendedProps.justified) === "true")
setp_detail_justified(true);
if (arg.event.extendedProps.justified) {
if (String(arg.event.extendedProps.justified) === "true")
setp_detail_justified(true);
else
setp_detail_justified(false);
}
else
setp_detail_justified(false);
if (arg.event.extendedProps.type) {
setp_detail_event_type(arg.event.extendedProps.type);
}
else
setp_detail_event_type("");
setStartDate(arg.event.start);
setendDate(arg.event.end);
setDialog_1_open(true);
}
else
setp_detail_justified(false);
if (arg.event.extendedProps.type) {
setp_detail_event_type(arg.event.extendedProps.type);
}
else
setp_detail_event_type("");
setStartDate(arg.event.start);
setendDate(arg.event.end);
setDialog_1_open(true);
}
const [Delete_One_Agenda_Event_api, setDelete_One_Agenda_Event_api] = useState();
@ -3080,7 +3037,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 +3093,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 +3137,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}
@ -3345,7 +3302,7 @@ const Materiel_Salle = (props) => {
<DialogActions>
<IconButton
autoFocus
// autoFocus
onClick={Close_Dialog_Detail_Event_open}
color="primary"
className={classes.customizedButton}
@ -3388,7 +3345,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" }}>
@ -3771,11 +3728,11 @@ const Materiel_Salle = (props) => {
*/}
<Button variant="outlined" onClick={submenu_add_one_materiel}
{String(props.check_user_acces_right("materiel", "write")) === "1" && <Button variant="outlined" onClick={submenu_add_one_materiel}
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout 1 Salle &nbsp;
<IoAddCircleOutline style={{ "fontSize": "x-large", "color": "green" }} />
</Button>
</Button>}
<br />
{session_file_name && <nav><i>{session_file_name}</i></nav>}
@ -3816,7 +3773,7 @@ const Materiel_Salle = (props) => {
</div>
<div className="div_row_droite_image">
<input type="file" id="files_img_class" accept="image/*" onChange={imglogoclasschangeHandler} style={{ opacity: "0", zIndex: "-1", maxWidth: "5px", maxHeight: "0px" }} /><br />
{<nav>
{String(props.check_user_acces_right("materiel", "write")) === "1" && <nav>
<label for="files_img_class" className="bton_image_class">Charger une photo</label><br />
@ -3870,9 +3827,10 @@ const Materiel_Salle = (props) => {
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_detail_ref_interne}
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
onChange={(e) => {
setp_detail_ref_interne(e.target.value);
setmateriel_data_changed("1");
@ -3892,7 +3850,7 @@ const Materiel_Salle = (props) => {
InputLabelProps={{
shrink: true,
}}
disabled={false}
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
className="disabled_style"
value={p_detail_nom}
onChange={(e) => {
@ -3914,7 +3872,7 @@ const Materiel_Salle = (props) => {
InputLabelProps={{
shrink: true,
}}
disabled={false}
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
className="disabled_style"
value={p_detail_description}
onChange={(e) => {
@ -3943,7 +3901,7 @@ const Materiel_Salle = (props) => {
className="disabled_style"
options={New_Getall_Partner_Site_Formation_result}
value={New_Getall_Partner_Site_Formation_result.filter((data) => (data)._id === String(p_detail_site_formation))[0].label}
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
onChange={(event, value) => {
if (value && value._id) {
setp_detail_site_formation(value._id);
@ -3968,11 +3926,11 @@ const Materiel_Salle = (props) => {
required
name="detail_site_formation"
id="detail_site_formation"
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={New_Getall_Partner_Site_Formation_result.filter((data) => (data)._id === String(p_detail_site_formation))[0].label}
/>
@ -3989,11 +3947,11 @@ const Materiel_Salle = (props) => {
required
name="detail_prix_achat"
id="detail_prix_achat"
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style disabled_style_moitier"
value={p_detail_prix_achat}
onChange={(e) => {
@ -4008,12 +3966,12 @@ const Materiel_Salle = (props) => {
required
name="detail_prix_achat_by"
id="detail_prix_achat_by"
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
InputLabelProps={{
shrink: true,
}}
inputProps={{ min: "1", max: "1000", step: "1" }}
disabled={false}
className="disabled_style disabled_style_moitier"
value={New_Price_by.filter((data) => (data).value === String(p_detail_prix_achat_by))[0].label}
@ -4024,7 +3982,7 @@ const Materiel_Salle = (props) => {
id="detail_prix_achat_by"
className="disabled_style disabled_style_moitier"
value={New_Price_by.filter((data) => (data).value === String(p_detail_prix_achat_by))[0].label}
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
options={New_Price_by}
onChange={(event, value) => {
if (value && value.value) {
@ -4057,7 +4015,7 @@ const Materiel_Salle = (props) => {
InputLabelProps={{
shrink: true,
}}
disabled={false}
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
className="disabled_style"
value={p_detail_complement_adresse}
onChange={(e) => {
@ -4079,7 +4037,7 @@ const Materiel_Salle = (props) => {
InputLabelProps={{
shrink: true,
}}
disabled={false}
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
className="disabled_style"
value={p_detail_capacite_ideale}
onChange={(e) => {
@ -4101,7 +4059,7 @@ const Materiel_Salle = (props) => {
InputLabelProps={{
shrink: true,
}}
disabled={false}
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
className="disabled_style"
value={p_detail_capacite_max}
onChange={(e) => {
@ -4117,13 +4075,16 @@ const Materiel_Salle = (props) => {
<div className="session_caract" >
Accès handicapé ?<br />
<nav className="disabled_style" style={{ "height": '3rem', border: "none" }}
onChange={(e) => {
setmateriel_data_changed("1");
if (p_detail_acces_handicape === true)
setp_detail_acces_handicape(false)
else {
setp_detail_acces_handicape(true);
onChange={(e) => {
if (String(props.check_user_acces_right("materiel", "write")) === "1") {
setmateriel_data_changed("1");
if (p_detail_acces_handicape === true)
setp_detail_acces_handicape(false)
else {
setp_detail_acces_handicape(true);
}
}
}}
@ -4144,7 +4105,7 @@ const Materiel_Salle = (props) => {
InputLabelProps={{
shrink: true,
}}
disabled={false}
disabled={Boolean(String(props.check_user_acces_right("materiel", "write")))}
className="disabled_style"
value={p_detail_detail}
onChange={(e) => {
@ -4179,7 +4140,7 @@ const Materiel_Salle = (props) => {
</div>
{String(materiel_data_edit_mode) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
{String(props.check_user_acces_right("materiel", "write")) === "1" && String(materiel_data_edit_mode) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_edit" onClick={Enable_Materiel_DetailFields}>Editer
</Button>
@ -4631,11 +4592,11 @@ const Materiel_Salle = (props) => {
<div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined" onClick={add_one_affectation_block}
{String(props.check_user_acces_right("materiel", "write")) === "1" && <Button variant="outlined" onClick={add_one_affectation_block}
className="detail_class_submenu bton_add_session"
id='menu_add_participant' name='menu_add_participant'>Ajout 1 affectation &nbsp;
<IoAddCircleOutline style={{ "fontSize": "x-large", "color": "green" }} />
</Button>
</Button>}
<br />
@ -4938,7 +4899,7 @@ const Materiel_Salle = (props) => {
</div>}
{String(edite_affectation_form) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
{String(props.check_user_acces_right("materiel", "write")) === "1" && String(edite_affectation_form) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_edit" onClick={Enable_Detail_Affectation_Fields}>Editer
</Button>

View File

@ -126,57 +126,59 @@ const Materiels = (props) => {
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<>
{String(props.check_user_acces_right("materiel", "write")) === "1" &&
<Popup
trigger={<Button
<Popup
trigger={<Button
onClick={(event) => {
// handleClick_delete(event, cellValues);
}}
>
<CiTrash />
onClick={(event) => {
// handleClick_delete(event, cellValues);
}}
>
<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, le matériel sera <i><font color="red"> définitivement supprimé</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
handleClick_delete(event, cellValues);
//console.log('modal closed ');
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</Button>}
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, le matériel sera <i><font color="red"> définitivement supprimé</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
handleClick_delete(event, cellValues);
//console.log('modal closed ');
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
</div>
</div>
)}
</Popup>
)}
</Popup>}
</>
);
@ -199,57 +201,59 @@ const Materiels = (props) => {
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<>
{String(props.check_user_acces_right("materiel", "write")) === "1" &&
<Popup
trigger={<Button
<Popup
trigger={<Button
onClick={(event) => {
//handleClick_delete(event, cellValues);
}}
>
<CiTrash />
onClick={(event) => {
//handleClick_delete(event, cellValues);
}}
>
<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, la fonction 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_affection(event, cellValues);
//console.log('modal closed ');
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, la fonction 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_affection(event, cellValues);
//console.log('modal closed ');
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
</div>
</div>
)}
</Popup>
)}
</Popup>}
</>
);
@ -676,7 +680,7 @@ const Materiels = (props) => {
.catch((error) => {
console.error('Error:', error);
setliste_sessions_file_change_api("false");
setdisplay_alert_mysy("1");
setalert_message(" Impossible d'importer le materiel ");
setalert_type("error");
@ -702,19 +706,19 @@ const Materiels = (props) => {
if (p_one_detail_ref_interne.trim() == "") {
setdisplay_alert_mysy("1");
setalert_message(" Vous devez saisir la référence interne du materiel");
setalert_type("error");
setalert_message(" Vous devez saisir la référence interne du materiel");
setalert_type("error");
return;
}
if (p_one_detail_nom.trim() == "") {
setdisplay_alert_mysy("1");
setalert_message(" Vous devez saisir le nom du materiel");
setalert_type("error");
setalert_message(" Vous devez saisir le nom du materiel");
setalert_type("error");
return;
}
@ -823,8 +827,8 @@ const Materiels = (props) => {
console.warn('UpdateStagiaireData : Not good man :( Add_One_Materiel_Data = ' + error);
setAdd_One_Materiel_Data_api("false");
setdisplay_alert_mysy("1");
setalert_message(" Impossible d'ajouter le materiel");
setalert_type("error");
setalert_message(" Impossible d'ajouter le materiel");
setalert_type("error");
})
@ -868,10 +872,10 @@ const Materiels = (props) => {
console.warn('Not good man :( Getall_Training_Materiel_No_Salle_No_Filter = ', error);
setGetall_Training_Materiel_No_Salle_No_Filter_api("false");
setdisplay_alert_mysy("1");
setalert_message(" Impossible de recuperer la liste du materiel");
setalert_type("error");
setalert_message(" Impossible de recuperer la liste du materiel");
setalert_type("error");
//setmyApimyApiMessage("")
})
}
@ -1264,7 +1268,7 @@ const Materiels = (props) => {
Getall_Materiel_Affectation(materiel_id);
Getall_Materiel_Rattachement(materiel_id);
if (document.getElementById('myRef')) {
var divh = document.getElementById('myRef').offsetTop;
window.scrollTo({
@ -2843,7 +2847,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 +2901,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 +2945,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}
@ -3106,7 +3110,7 @@ const Materiels = (props) => {
<DialogActions>
<IconButton
autoFocus
// autoFocus
onClick={Close_Dialog_Detail_Event_open}
color="primary"
className={classes.customizedButton}
@ -3564,11 +3568,11 @@ const Materiels = (props) => {
*/}
<Button variant="outlined" onClick={submenu_add_one_materiel}
{String(props.check_user_acces_right("materiel", "write")) === "1" && <Button variant="outlined" onClick={submenu_add_one_materiel}
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout 1 Materiel &nbsp;
<IoAddCircleOutline style={{ "fontSize": "x-large", "color": "green" }} />
</Button>
</Button>}
<br />
{session_file_name && <nav><i>{session_file_name}</i></nav>}
@ -3618,7 +3622,7 @@ const Materiels = (props) => {
</div>
<div className="div_row_droite_image">
<input type="file" id="files_img_class" accept="image/*" onChange={imglogoclasschangeHandler} style={{ opacity: "0", zIndex: "-1", maxWidth: "5px", maxHeight: "0px" }} /><br />
{<nav>
{String(props.check_user_acces_right("materiel", "write")) === "1" && <nav>
<label for="files_img_class" className="bton_image_class">Charger une photo</label><br />
@ -3985,7 +3989,7 @@ const Materiels = (props) => {
</div>
{String(materiel_data_edit_mode) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
{String(props.check_user_acces_right("materiel", "write")) === "1" && String(materiel_data_edit_mode) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_edit" onClick={Enable_Materiel_DetailFields}>Editer
</Button>
@ -4427,11 +4431,11 @@ const Materiels = (props) => {
<div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined" onClick={add_one_affectation_block}
{String(props.check_user_acces_right("materiel", "write")) === "1" && <Button variant="outlined" onClick={add_one_affectation_block}
className="detail_class_submenu bton_add_session"
id='menu_add_participant' name='menu_add_participant'>Ajout 1 affectation &nbsp;
<IoAddCircleOutline style={{ "fontSize": "x-large", "color": "green" }} />
</Button>
</Button>}
<br />
@ -4734,7 +4738,7 @@ const Materiels = (props) => {
</div>}
{String(edite_affectation_form) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
{String(props.check_user_acces_right("materiel", "write")) === "1" && String(edite_affectation_form) !== "1" && <div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_edit" onClick={Enable_Detail_Affectation_Fields}>Editer
</Button>

View File

@ -1,4 +1,4 @@
import React, { useRef, useState, useEffect } from "react";
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
@ -18,7 +18,7 @@ import moment from "moment";
import Box from '@mui/material/Box';
import { CiBoxList } from "react-icons/ci";
import { CiBoxList } from "react-icons/ci";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
@ -82,7 +82,7 @@ const Module_Absence = (props) => {
{ field: 'event_comment', headerName: 'Comment', flex: 1, hide: true, editable: false, },
]
@ -512,48 +512,50 @@ const Module_Absence = (props) => {
const handleEventClick = (arg) => {
if (String(selected_attendee_email).length < 2) {
alert(" Vous devez choisir un stagiaire");
return;
}
if (String(props.check_user_acces_right("stagiaire", "write")) === "1") {
if (String(selected_attendee_email).length < 2) {
alert(" Vous devez choisir un stagiaire");
return;
}
setp_detail_title(arg.event.title)
setp_detail_start(arg.event.start)
setp_detail_end(arg.event.end)
setp_detail_event_id(arg.event.id);
setp_detail_title(arg.event.title)
setp_detail_start(arg.event.start)
setp_detail_end(arg.event.end)
setp_detail_event_id(arg.event.id);
if (arg.event.extendedProps.comment) {
setp_detail_comment(arg.event.extendedProps.comment);
}
else
setp_detail_comment("");
if (arg.event.extendedProps.comment) {
setp_detail_comment(arg.event.extendedProps.comment);
}
else
setp_detail_comment("");
if (arg.event.extendedProps.justified) {
if (String(arg.event.extendedProps.justified) === "true")
setp_detail_justified(true);
if (arg.event.extendedProps.justified) {
if (String(arg.event.extendedProps.justified) === "true")
setp_detail_justified(true);
else
setp_detail_justified(false);
}
else
setp_detail_justified(false);
if (arg.event.extendedProps.type) {
setp_detail_event_type(arg.event.extendedProps.type);
}
else
setp_detail_event_type("");
setStartDate(arg.event.start);
setendDate(arg.event.end);
setDialog_1_open(true);
}
else
setp_detail_justified(false);
if (arg.event.extendedProps.type) {
setp_detail_event_type(arg.event.extendedProps.type);
}
else
setp_detail_event_type("");
setStartDate(arg.event.start);
setendDate(arg.event.end);
setDialog_1_open(true);
}
@ -888,7 +890,7 @@ const Module_Absence = (props) => {
setdisplay_view("list");
}
return (
<div className="module_agenda">
@ -904,7 +906,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}
@ -1100,14 +1102,14 @@ const Module_Absence = (props) => {
</Dialog>
<h3 style={{ fontFamily:'DM Sans' }}> Planning </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Planning </h3>
<div style={{ "textAlign": "right", "float": "right", "width": "100%" }}>
Affichage : <nav className="mode_affichage" onClick={func_display_planning_view}> <FcPlanner /> planning </nav>
<nav className="mode_affichage" onClick={func_display_list_view}> <CiBoxList /> Liste </nav>
</div>
{String(display_view) === "planning" && <div style={{ "width": "98%", "marginLeft": "5px" }}>
&nbsp;

View File

@ -695,6 +695,8 @@ const Module_Agenda = (props) => {
const handleEventClick = (arg) => {
if (String(selected_employee_id).length < 2) {
// alert(" Vous devez choisir un employé ou un materiel");
// alert(res.data.message);
@ -1174,10 +1176,52 @@ const Module_Agenda = (props) => {
function show_other_agenda() {
settab_selected_users([]);
New_Option_Type_Ressource = []
if (String(props.check_user_acces_right("agenda_employes", "read")) !== "1" && String(props.check_user_acces_right("agenda_materiel_salle", "read")) !== "1") {
setdisplay_alert_mysy("1");
setalert_message(" Vos droits ne sont pas suffisants pour accéder à cette fonctionnalité ");
setalert_type("warning");
return;
}
if (String(props.check_user_acces_right("agenda_employes", "read")) === "1" && String(props.check_user_acces_right("agenda_materiel_salle", "read")) === "1") {
New_Option_Type_Ressource = [
{ "id": "0", "label": "Employe", "value": "ressource_humaine" },
{ "id": "1", "label": "Materiel & Salle", "value": "ressource_materielle" },
]
setp_filtre1("ressource_humaine");
setp_filtre1_label("Employe");
setp_filtre1_value("ressource_humaine")
} else if (String(props.check_user_acces_right("agenda_employes", "read")) === "1") {
New_Option_Type_Ressource = [
{ "id": "0", "label": "Employe", "value": "ressource_humaine" },
]
setp_filtre1("ressource_humaine");
setp_filtre1_label("Employe");
setp_filtre1_value("ressource_humaine")
} else if (String(props.check_user_acces_right("agenda_materiel_salle", "read")) === "1") {
New_Option_Type_Ressource = [
{ "id": "0", "label": "Materiel & Salle", "value": "ressource_materielle" },
]
setp_filtre1("ressource_materielle");
setp_filtre1_label("Materiel & Salle");
setp_filtre1_value("ressource_materielle")
}
setdisplay_other_agenda("1");
}
function show_my_agenda() {
settab_selected_users([]);
setp_filtre1("ressource_humaine");
setagenda_owner_name("Mon Planning");
setselected_employee_id(myconntected_employee_id);
@ -1192,12 +1236,26 @@ const Module_Agenda = (props) => {
{ "id": "2", "label": "Autre", "value": "autre" },
]
const New_Option_Type_Ressource = [
{ "id": "0", "label": "Employe", "value": "ressource_humaine" },
{ "id": "1", "label": "Materiel", "value": "ressource_materielle" },
var New_Option_Type_Ressource = [
]
if (String(props.check_user_acces_right("agenda_employes", "read")) === "1" && String(props.check_user_acces_right("agenda_materiel_salle", "read")) === "1") {
New_Option_Type_Ressource = [
{ "id": "0", "label": "Employe", "value": "ressource_humaine" },
{ "id": "1", "label": "Materiel & Salle", "value": "ressource_materielle" },
]
} else if (String(props.check_user_acces_right("agenda_employes", "read")) === "1") {
New_Option_Type_Ressource = [
{ "id": "0", "label": "Employe", "value": "ressource_humaine" },
]
} else if (String(props.check_user_acces_right("agenda_materiel_salle", "read")) === "1") {
New_Option_Type_Ressource = [
{ "id": "0", "label": "Materiel & Salle", "value": "ressource_materielle" },
]
}
const events_test = [{
"id": 1,
"type": null,
@ -1315,7 +1373,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}
@ -1480,7 +1538,7 @@ const Module_Agenda = (props) => {
<DialogActions>
<IconButton
autoFocus
// autoFocus
onClick={Close_Dialog_Detail_Event_open}
color="primary"
className={classes.customizedButton}
@ -1488,8 +1546,44 @@ const Module_Agenda = (props) => {
<CancelPresentationIcon />
</IconButton>
<div className="div_row">
{String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "" && <div className="div_row_gauche">
{/*** Si l'agenda d'une autre personne, je dois etre autorisé à ecrire */}
{String(agenda_owner_name) !== "Mon Planning" && String(p_filtre1) === "ressource_humaine" && String(props.check_user_acces_right("agenda_employes", "write")) === "1" &&
<div className="div_row_gauche">
{p_detail_event_id && String(p_detail_event_id) !== "" && <Button onClick={Update_One_Agenda_Event} className="bton_enreg_dialog">Mettre à jour</Button>}
{(!p_detail_event_id || String(p_detail_event_id) === "") && <Button onClick={Update_One_Agenda_Event} className="bton_enreg_dialog">Ajouter</Button>}
</div>}
{/*** Si l'agenda d'un materiel, je dois etre autorisé à ecrire */}
{String(agenda_owner_name) !== "Mon Planning" && String(p_filtre1) === "ressource_materielle" && String(props.check_user_acces_right("agenda_materiel_salle", "write")) === "1" &&
<div className="div_row_gauche">
{p_detail_event_id && String(p_detail_event_id) !== "" && <Button onClick={Update_One_Agenda_Event} className="bton_enreg_dialog">Mettre à jour</Button>}
{(!p_detail_event_id || String(p_detail_event_id) === "") && <Button onClick={Update_One_Agenda_Event} className="bton_enreg_dialog">Ajouter</Button>}
</div>}
{/*** Si c'est mon agenda, j'ai tous les droit */}
{String(agenda_owner_name) === "Mon Planning" &&
<div className="div_row_gauche">
{p_detail_event_id && String(p_detail_event_id) !== "" && <Button onClick={Update_One_Agenda_Event} className="bton_enreg_dialog">Mettre à jour</Button>}
{(!p_detail_event_id || String(p_detail_event_id) === "") && <Button onClick={Update_One_Agenda_Event} className="bton_enreg_dialog">Ajouter</Button>}
</div>}
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Button onClick={Close_Dialog_Detail_Event_open} className="bton_annule_dialog" >Fermer</Button>
</div>
</div>
{/* <div className="div_row">
{String(setagenda_owner_name) !== "setagenda_owner_name" && String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "" && <div className="div_row_gauche">
{p_detail_event_id && String(p_detail_event_id) !== "" && <Button onClick={Update_One_Agenda_Event} className="bton_enreg_dialog">Mettre à jour</Button>}
{(!p_detail_event_id || String(p_detail_event_id) === "") && <Button onClick={Update_One_Agenda_Event} className="bton_enreg_dialog">Ajouter</Button>}
@ -1499,12 +1593,15 @@ const Module_Agenda = (props) => {
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Button onClick={Close_Dialog_Detail_Event_open} className="bton_annule_dialog" >Fermer</Button>
</div>
</div>
</div>*/}
</DialogActions>
{String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "" && p_detail_event_id && String(p_detail_event_id) !== "" &&
String(agenda_owner_name) !== "Mon Planning" && String(p_filtre1) === "ressource_humaine" && String(props.check_user_acces_right("agenda_employes", "write")) === "1" &&
<DialogActions>
<div className="div_row" style={{ "textAlign": "center" }}>
<Button onClick={(e) => {
@ -1520,6 +1617,59 @@ const Module_Agenda = (props) => {
</DialogActions>}
{String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "" && p_detail_event_id && String(p_detail_event_id) !== "" &&
String(agenda_owner_name) !== "Mon Planning" && String(p_filtre1) === "ressource_materielle" && String(props.check_user_acces_right("agenda_materiel_salle", "write")) === "1" && <DialogActions>
<div className="div_row" style={{ "textAlign": "center" }}>
<Button onClick={(e) => {
const response = window.confirm("Confirmez-vous la suppression de l'événement ?");
if (!response) {
return;
}
Delete_One_Agenda_Event();
}
} className="bton_supprime_dialog">Supprimer l'événement</Button>
</div>
</DialogActions>}
{String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "" && p_detail_event_id && String(p_detail_event_id) !== "" &&
String(agenda_owner_name) === "Mon Planning" && <DialogActions>
<div className="div_row" style={{ "textAlign": "center" }}>
<Button onClick={(e) => {
const response = window.confirm("Confirmez-vous la suppression de l'événement ?");
if (!response) {
return;
}
Delete_One_Agenda_Event();
}
} className="bton_supprime_dialog">Supprimer l'événement</Button>
</div>
</DialogActions>}
{/*String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "" && p_detail_event_id && String(p_detail_event_id) !== "" &&
<DialogActions>
<div className="div_row" style={{ "textAlign": "center" }}>
<Button onClick={(e) => {
const response = window.confirm("Confirmez-vous la suppression de l'événement ?");
if (!response) {
return;
}
Delete_One_Agenda_Event();
}
} className="bton_supprime_dialog">Supprimer l'événement</Button>
</div>
</DialogActions>*/}
</Dialog>
{/*** FIn Dialog detail eventement */}
@ -1577,7 +1727,7 @@ const Module_Agenda = (props) => {
{p_filtre1 && String(p_filtre1) === "ressource_humaine" && <div className="div_row_droite texte_area_filter_value" >
<Autocomplete
disablePortal
@ -1592,7 +1742,7 @@ const Module_Agenda = (props) => {
onChange={(event, value) => {
// console.log(" ## settab_selected_users = ", tab_selected_users)
// console.log(" ## settab_selected_users = ", tab_selected_users)
settab_selected_users([
...fixedVal,
...value.filter((i) => fixedVal.indexOf(i) === -1),

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}
@ -841,7 +841,7 @@ const Module_Attestation_Formation = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -1069,7 +1069,7 @@ const Module_Attestation_Formation = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();

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

@ -107,7 +107,7 @@ const useStyles = makeStyles((theme) => ({
color: 'gray',
},
}));
const Module_Editique = (props) => {
const classes = useStyles();
@ -200,12 +200,14 @@ const Module_Editique = (props) => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Invoice_Session_Formation res.data.status = " + res.data.status);
//console.log(" In Invoice_Session_Formation res.data.message r_class = " + res.data.message);
setInvoice_Session_Formation_api("true");
setInvoice_Session_Formation_result(res.data.message);
Getall_Editable_Document_By_Partner_By_Collection();
props.GetListeInscrit(props.related_collection_recid, props.internal_url);
props.Get_List_Partner_Clients();
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
@ -1501,6 +1503,24 @@ const Module_Editique = (props) => {
{ "id": "", "label": "", "value": "" },
]
const New_Option_Automatic_Doc_Action_Target_For_Q_Position = [
{ "id": "start_session", "label": "Date Début Session", "value": "start_session" },
{ "id": "end_session", "label": "Date Fin Session", "value": "end_session" },
{ "id": "preinscription", "label": "A la pré-inscription", "value": "preinscription" },
{ "id": "inscription", "label": "A l'inscription", "value": "inscription" },
{ "id": "", "label": "", "value": "" },
]
const New_Option_Automatic_Doc_Action_Target_GLOBAL_FOR_ALL = [
{ "id": "start_session", "label": "Date Début Session", "value": "start_session" },
{ "id": "end_session", "label": "Date Fin Session", "value": "end_session" },
{ "id": "preinscription", "label": "A la pré-inscription", "value": "preinscription" },
{ "id": "inscription", "label": "A l'inscription", "value": "inscription" },
{ "id": "every_session_sequence_day", "label": "Envoyer chaque jour", "value": "every_session_sequence_day" },
{ "id": "", "label": "", "value": "" },
]
return (
<div className="module_editique">
@ -1528,7 +1548,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 +1573,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}
@ -1700,35 +1720,34 @@ const Module_Editique = (props) => {
/>}
</div>
{(String(p_doc_automatic_setup_action_target_date) === "start_session" || String(p_doc_automatic_setup_action_target_date) === "end_session") &&
{String(p_doc_automatic_setup_action_target_date) !== "every_session_sequence_day" &&
<div className="session_caract_Dialog"> Nb Jours <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="nb_jour_document"
id="nb_jour_document"
<div className="session_caract_Dialog"> Nb Jours <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="nb_jour_document"
id="nb_jour_document"
InputLabelProps={{
shrink: true,
}}
InputLabelProps={{
shrink: true,
}}
type="number"
inputProps={{ min: "0", max: "200", step: "1" }}
type="number"
inputProps={{ min: "0", max: "200", step: "1" }}
disabled={false}
className="disabled_style"
value={p_doc_automatic_setup_nb_jour}
onChange={(e) => {
setp_doc_automatic_setup_nb_jour(e.target.value);
setis_modified_doc_automatic_setup("1");
}}
disabled={false}
className="disabled_style"
value={p_doc_automatic_setup_nb_jour}
onChange={(e) => {
setp_doc_automatic_setup_nb_jour(e.target.value);
setis_modified_doc_automatic_setup("1");
}}
style={{ background: '#FFFFFF' }}
style={{ background: '#FFFFFF' }}
/>
</div>}
/>
</div>}
<div className="session_caract_Dialog">
<Tooltip className="tooltip_css" id="help_target_action_document" style={{ "fontSize": "12px" }} />
@ -1738,6 +1757,7 @@ const Module_Editique = (props) => {
{String(p_doc_automatic_setup_nom_document) !== "EMARGEMENT" &&
String(p_doc_automatic_setup_nom_document) !== "QUESTION POSITIONNEMENT" &&
<Autocomplete
disablePortal
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 } }}
@ -1775,6 +1795,33 @@ const Module_Editique = (props) => {
options={New_Option_Automatic_Doc_Action_Target_For_Emargement}
value={New_Option_Automatic_Doc_Action_Target_For_Emargement.filter((data) => (data).value === String(p_doc_automatic_setup_action_target_date))[0].label}
onChange={(event, value) => {
setis_modified_doc_automatic_setup("1");
if (value && value.value) {
setp_doc_automatic_setup_action_target_date(value.value);
} else {
setp_doc_automatic_setup_action_target_date("")
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>}
{String(p_doc_automatic_setup_nom_document) === "QUESTION POSITIONNEMENT" &&
<Autocomplete
disablePortal
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 } }}
name="target_action_document"
id="target_action_document"
className="disabled_style"
options={New_Option_Automatic_Doc_Action_Target_For_Q_Position}
value={New_Option_Automatic_Doc_Action_Target_For_Q_Position.filter((data) => (data).value === String(p_doc_automatic_setup_action_target_date))[0].label}
onChange={(event, value) => {
setis_modified_doc_automatic_setup("1");
if (value && value.value) {
@ -2238,7 +2285,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}
@ -2274,39 +2321,39 @@ const Module_Editique = (props) => {
</div>
{(String(selected_convention_type) === "email" || String(selected_convention_type) === "pdf") &&
<div className="session_caract_Dialog" > Choisir une convocation
<Autocomplete
disablePortal
name="event_dialog_version_convention"
id="event_dialog_version_convention"
fullWidth
//className="disabled_style enable_style"
options={New_Get_List_Stagiaire_Convocations_result}
{(String(selected_convention_type) === "email" || String(selected_convention_type) === "pdf") &&
<div className="session_caract_Dialog" > Choisir une convocation
<Autocomplete
disablePortal
name="event_dialog_version_convention"
id="event_dialog_version_convention"
fullWidth
//className="disabled_style enable_style"
options={New_Get_List_Stagiaire_Convocations_result}
onChange={(event, value) => {
if (value && value._id) {
onChange={(event, value) => {
if (value && value._id) {
setselected_convention_id(value._id);
setselected_convention_id(value._id);
if (String(value._id) === "default_mail") {
setselected_convention_type("email");
if (String(value._id) === "default_mail") {
setselected_convention_type("email");
}
else if (String(value._id) === "default_pdf") {
setselected_convention_type("pdf");
} else {
var result2 = Get_List_Stagiaire_Convocations_result.filter((local_mymanager) => JSON.parse(local_mymanager)._id === String(value._id))
setselected_convention_type(JSON.parse(result2).type_doc);
}
settab_convention_pieces_jointes_result([]);
}
else if (String(value._id) === "default_pdf") {
setselected_convention_type("pdf");
} else {
var result2 = Get_List_Stagiaire_Convocations_result.filter((local_mymanager) => JSON.parse(local_mymanager)._id === String(value._id))
setselected_convention_type(JSON.parse(result2).type_doc);
}
settab_convention_pieces_jointes_result([]);
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option" />
}
}}
/>
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option" />
}
/>
</div>}
</div>}
{String(selected_convention_type) === "email" && <div className="session_caract_Dialog" > Type Document<br />
<TextField
@ -2875,7 +2922,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 +2963,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" }}>
@ -3134,16 +3181,25 @@ const Module_Editique = (props) => {
}}
>
{x && String(x.actif) === "1" &&
{x && String(x.actif) === "1" && New_Option_Automatic_Doc_Action_Target_GLOBAL_FOR_ALL.length > 0 &&
<nav>
<Tooltip className="tooltip_css" id={x.courrier_template_type_document_id} style={{ textAlign: 'left' }} />
<a data-tooltip-id={x.courrier_template_type_document_id}
{(String(x.action_target_date) === "start_session" || String(x.action_target_date) === "end_session") && <a data-tooltip-id={x.courrier_template_type_document_id}
data-tooltip-html={" Traitement Automatique : Oui <br/> Nb Jours : " + `${x.nb_jour_action}` + " <br/>Date Cible: " + `${x.action_target_date}` + " <br/>Exécution dans : " + `${x.delta_day}` + " Jour(s)"}>
{String(x.delta_day) < "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#FFA500' }} />}
{String(x.delta_day) >= "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#218e1f' }} />}
</a>
</a>}
{String(x.action_target_date) !== "start_session" && String(x.action_target_date) !== "end_session" && <a data-tooltip-id={x.courrier_template_type_document_id}
data-tooltip-html={"Traitement Automatique : Oui <br/>Exécution : " + `${New_Option_Automatic_Doc_Action_Target_GLOBAL_FOR_ALL.filter((data) => (data).value === String(x.action_target_date))[0].label}`}>
{String(x.delta_day) < "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#FFA500' }} />}
{String(x.delta_day) >= "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#218e1f' }} />}
</a>}
</nav>}
{x && String((x).actif) !== "1" &&
@ -3320,16 +3376,25 @@ const Module_Editique = (props) => {
}}
>
{x && String(x.actif) === "1" &&
{x && String(x.actif) === "1" && New_Option_Automatic_Doc_Action_Target_GLOBAL_FOR_ALL.length > 0 &&
<nav>
<Tooltip className="tooltip_css" id={x.courrier_template_type_document_id} style={{ textAlign: 'left' }} />
<a data-tooltip-id={x.courrier_template_type_document_id}
{(String(x.action_target_date) === "start_session" || String(x.action_target_date) === "end_session") && <a data-tooltip-id={x.courrier_template_type_document_id}
data-tooltip-html={" Traitement Automatique : Oui <br/> Nb Jours : " + `${x.nb_jour_action}` + " <br/>Date Cible: " + `${x.action_target_date}` + " <br/>Exécution dans : " + `${x.delta_day}` + " Jour(s)"}>
{String(x.delta_day) < "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#FFA500' }} />}
{String(x.delta_day) >= "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#218e1f' }} />}
</a>
</a>}
{String(x.action_target_date) !== "start_session" && String(x.action_target_date) !== "end_session" && <a data-tooltip-id={x.courrier_template_type_document_id}
data-tooltip-html={"Traitement Automatique : Oui <br/>Exécution : " + `${New_Option_Automatic_Doc_Action_Target_GLOBAL_FOR_ALL.filter((data) => (data).value === String(x.action_target_date))[0].label}`}>
{String(x.delta_day) < "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#FFA500' }} />}
{String(x.delta_day) >= "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#218e1f' }} />}
</a>}
</nav>}
{x && String((x).actif) !== "1" &&
@ -3504,16 +3569,25 @@ const Module_Editique = (props) => {
}}
>
{x && String(x.actif) === "1" &&
{x && String(x.actif) === "1" && New_Option_Automatic_Doc_Action_Target_GLOBAL_FOR_ALL.length > 0 &&
<nav>
<Tooltip className="tooltip_css" id={x.courrier_template_type_document_id} style={{ textAlign: 'left' }} />
<a data-tooltip-id={x.courrier_template_type_document_id}
{(String(x.action_target_date) === "start_session" || String(x.action_target_date) === "end_session") && <a data-tooltip-id={x.courrier_template_type_document_id}
data-tooltip-html={" Traitement Automatique : Oui <br/> Nb Jours : " + `${x.nb_jour_action}` + " <br/>Date Cible: " + `${x.action_target_date}` + " <br/>Exécution dans : " + `${x.delta_day}` + " Jour(s)"}>
{String(x.delta_day) < "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#FFA500' }} />}
{String(x.delta_day) >= "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#218e1f' }} />}
</a>
</a>}
{String(x.action_target_date) !== "start_session" && String(x.action_target_date) !== "end_session" && <a data-tooltip-id={x.courrier_template_type_document_id}
data-tooltip-html={"Traitement Automatique : Oui <br/>Exécution : " + `${New_Option_Automatic_Doc_Action_Target_GLOBAL_FOR_ALL.filter((data) => (data).value === String(x.action_target_date))[0].label}`}>
{String(x.delta_day) < "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#FFA500' }} />}
{String(x.delta_day) >= "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#218e1f' }} />}
</a>}
</nav>}
{x && String((x).actif) !== "1" &&
@ -3591,15 +3665,25 @@ const Module_Editique = (props) => {
}}
>
{x && String(x.actif) === "1" &&
{x && String(x.actif) === "1" && New_Option_Automatic_Doc_Action_Target_GLOBAL_FOR_ALL.length > 0 &&
<nav>
<Tooltip className="tooltip_css" id={x.courrier_template_type_document_id} style={{ textAlign: 'left' }} />
<a data-tooltip-id={x.courrier_template_type_document_id}
{(String(x.action_target_date) === "start_session" || String(x.action_target_date) === "end_session") && <a data-tooltip-id={x.courrier_template_type_document_id}
data-tooltip-html={" Traitement Automatique : Oui <br/> Nb Jours : " + `${x.nb_jour_action}` + " <br/>Date Cible: " + `${x.action_target_date}` + " <br/>Exécution dans : " + `${x.delta_day}` + " Jour(s)"}>
{String(x.delta_day) < "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#FFA500' }} />}
{String(x.delta_day) >= "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#218e1f' }} />}
</a>
</a>}
{String(x.action_target_date) !== "start_session" && String(x.action_target_date) !== "end_session" && <a data-tooltip-id={x.courrier_template_type_document_id}
data-tooltip-html={"Traitement Automatique : Oui <br/>Exécution : " + `${New_Option_Automatic_Doc_Action_Target_GLOBAL_FOR_ALL.filter((data) => (data).value === String(x.action_target_date))[0].label}`}>
{String(x.delta_day) < "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#FFA500' }} />}
{String(x.delta_day) >= "0" && <MdFlashAuto style={{ fontSize: '25px', color: '#218e1f' }} />}
</a>}
</nav>}
{x && String((x).actif) !== "1" &&
@ -3762,7 +3846,7 @@ const Module_Editique = (props) => {
</Button>
</nav>
<nav style={{ float: "right", "width": '45%' , display:'none'}}> Non Traité
<nav style={{ float: "right", "width": '45%', display: 'none' }}> Non Traité
<Button onClick={handleExpandClick_audit}>
{expanded_nom_traite.length === 0 ? 'Voir tout' : 'Réduire'}
</Button>

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>
@ -1042,7 +1091,7 @@ const Module_Email_Management = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();

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_annuler"
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_annuler"
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_annuler"
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,22 @@
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 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
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 { FcViewDetails, FcInfo } 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 +24,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 +114,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,
@ -232,6 +233,7 @@ const Module_Evaluation_Positionnement = (props) => {
useEffect(() => {
setselected_session_id(props.related_collection_recid);
Getall_Survey_Q_Positionnement_By_Session();
GetListeInscrit();
}, [])
@ -241,7 +243,7 @@ const Module_Evaluation_Positionnement = (props) => {
{ "id": "email", "label": "Email", "value": "email" },
]
const [selected_formulaire_id, setselected_formulaire_id] = useState();
const [selected_formulaire_id, setselected_formulaire_id] = useState("");
const [selected_formulaire_type, setselected_formulaire_type] = useState("");
const [New_Getall_Partner_Formulaires_with_Filter, setNew_Getall_Partner_Formulaires_with_Filter] = useState([]);
@ -326,6 +328,14 @@ const Module_Evaluation_Positionnement = (props) => {
const [Create_List_Survey_For_Session_For_Inscrit_message, setCreate_List_Survey_For_Session_For_Inscrit_message] = useState();
const [Create_List_Survey_For_Session_For_Inscrit_result, setCreate_List_Survey_For_Session_For_Inscrit_result] = useState();
function Create_List_Survey_For_Session_For_Inscrit() {
if (String(selected_formulaire_id).length < 5) {
setdisplay_alert_mysy("1");
setalert_message("Vous devez choisir un questionnaire de positionnement");
setalert_type("error");
return;
}
var form = new FormData();
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
const stored_cookie = getCookie('tokenmysypart');
@ -335,7 +345,14 @@ const Module_Evaluation_Positionnement = (props) => {
form.append("survey_type", "pos");
form.append("sending_date", "");
var tab_inscrit_ids = []
for (var i = 0; i < val.length; i++) {
tab_inscrit_ids.push(val[i]._id)
}
form.append("tab_inscrit_ids", tab_inscrit_ids);
//alert(" mysession = "+mysession);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Init_Survey_Tab_For_All_Session_Inscrit/";
@ -374,7 +391,7 @@ const Module_Evaluation_Positionnement = (props) => {
setLoading(false);
console.warn('Create_List_Survey_For_Session_For_Inscrit : Not good man :( mysearchtext = ' + error);
setCreate_List_Survey_For_Session_For_Inscrit_api("false");
// alert(" Impossible d'initialiser la liste des enquête de positionnement ");
// alert(" Impossible d'initialiser la liste des enquête de positionnement ");
setdisplay_alert_mysy("1");
setalert_message(" Impossible d'initialiser la liste des enquête de positionnement ");
setalert_type("error");
@ -385,6 +402,7 @@ const Module_Evaluation_Positionnement = (props) => {
const New_Option_q_position_Masse = [
{ "id": "resend", "label": "(R)envoyer", "value": "resend" },
{ "id": "print", "label": "Export (PDF) ", "value": "print" },
{ "id": "delete_survey", "label": "Supprimer ", "value": "delete_survey" },
]
const [actionmass_q_position_val, setactionmass_q_position_val] = useState();
@ -431,6 +449,23 @@ const Module_Evaluation_Positionnement = (props) => {
}
else if (String(actionmass_q_position_val) === String("delete_survey")) {
var tab_ids_survey = []
for (var i = 0; i < selectionModel_q_position.length; i++) {
var myid = parseInt(String(selectionModel_q_position[i]));
var line = JSON.parse(Getall_Survey_Q_Positionnement_By_Session_result[myid]);
var line_id = JSON.parse(Getall_Survey_Q_Positionnement_By_Session_result[myid])._id;
tab_ids_survey.push(line_id);
}
// console.log(" ### tab_ids_survey === ", tab_ids_survey);
Delete_Survey_Ids(tab_ids_survey);
}
}
@ -487,7 +522,68 @@ const Module_Evaluation_Positionnement = (props) => {
setLoading(false);
console.warn('Send_Survey_By_Email_For_Ids : Not good man :( mysearchtext = ' + error);
setSend_Survey_By_Email_For_Ids_api("false");
// alert(" Impossible d'envoyer les demandes");
// alert(" Impossible d'envoyer les demandes");
setdisplay_alert_mysy("1");
setalert_message("Impossible d'envoyer les demandes");
setalert_type("error");
})
}
const [Delete_Survey_Ids_api, setDelete_Survey_Ids_api] = useState();
const [Delete_Survey_Ids_message, setDelete_Survey_Ids_message] = useState();
const [Delete_Survey_Ids_result, setDelete_Survey_Ids_result] = useState();
function Delete_Survey_Ids(tab_survey) {
var form = new FormData();
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("tab_ids", tab_survey);
//alert(" mysession = "+mysession);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_List_Survey/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In UpdateStagiaireData res.data.status = " + res.data.status);
//console.log(" In UpdateStagiaireData res.data.message r_class = " + res.data.message);
setDelete_Survey_Ids_api("true");
setDelete_Survey_Ids_result(res.data.message);
Getall_Survey_Q_Positionnement_By_Session();
setactionmass_q_position_val("");
setselectionModel_q_position([]);
// alert(res.data.message)
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("success");
} else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message);
history.push("/Connexion");
}
else {
setDelete_Survey_Ids_api("false");
setDelete_Survey_Ids_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('Delete_Survey_Ids : Not good man :( mysearchtext = ' + error);
setDelete_Survey_Ids_api("false");
// alert(" Impossible d'envoyer les demandes");
setdisplay_alert_mysy("1");
setalert_message("Impossible d'envoyer les demandes");
setalert_type("error");
@ -510,7 +606,7 @@ const Module_Evaluation_Positionnement = (props) => {
setLoading(false);
//console.log(" In Export_Dashbord_to_CSV res.data = " + res.data);
if (String(res.data) === String("false")) {
// alert("Impossible d'exporter les réponses (2) ");
// alert("Impossible d'exporter les réponses (2) ");
setdisplay_alert_mysy("1");
setalert_message("Impossible d'exporter les réponses (2)");
setalert_type("error");
@ -521,7 +617,7 @@ const Module_Evaluation_Positionnement = (props) => {
}).catch((error) => {
setLoading(false);
console.error('Error:', error);
// alert(" Impossible d'exporter les réponses ")
// alert(" Impossible d'exporter les réponses ")
setdisplay_alert_mysy("1");
setalert_message("Impossible d'exporter les réponses");
setalert_type("error");
@ -597,6 +693,103 @@ const Module_Evaluation_Positionnement = (props) => {
setdisplay_alert_mysy("");
}
const [New_GetListeInscrit_insc_result, setNew_GetListeInscrit_insc_result] = useState([]);
const [GetListeIinscrit_insc_api, setGetListeIinscrit_insc_api] = useState();
const [GetListeIinscrit_insc_meassage, setGetListeIinscrit_insc_meassage] = useState();
const [GetListeIinscrit_insc_result, setGetListeIinscrit_insc_result] = useState([])
function GetListeInscrit() {
var form = new FormData();
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("class_internal_url", props.class_internal_url);
form.append("session_id", props.related_collection_recid);
form.append("status", "1");
/*
/!\ : Cette fonction a besoin d'un token actif
*/
if (String(stored_cookie) === String("")) {
alert(" La session n'est plus valide ");
history.push("/Connexion");
return;
}
setLoading(true);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/GetAllClassStagiaire/";
fetch(myurl,
{
method: 'POST',
body: form,
})
.then((data) => data.json())
.then((data) => {
setLoading(false);
//console.log(' GetListeInscrit : Success:', data['message'], "data['status'] = ", data['status']);
setGetListeIinscrit_insc_result(data['message']);
if (String(data['status']) === String("true")) {
//console.log("erreur rrrr:" + data['status'])
setGetListeIinscrit_insc_api("true");
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_nom = JSON.parse(x).nom;
var local_prenom = JSON.parse(x).prenom;
//---
var node = {
"_id": local_id,
"id": localid,
"label": local_prenom + " " + local_nom,
"nom": local_nom,
"prenom": local_prenom,
};
new_data2.push(node);
});
if (new_data2.length > 0)
setNew_GetListeInscrit_insc_result(new_data2);
} else if (String(data['status']) === String("Err_Connexion")) {
alert('Erreur: ' + data['message']);
history.push("/Connexion");
}
else {
setGetListeIinscrit_insc_api("false");
}
}).catch((error) => {
setLoading(false);
console.error('Error:', error);
setGetListeIinscrit_insc_api("false");
});
}
const fixedVal = [];
const [val, setVal] = useState([...fixedVal]);
return (
<div className="module_evaluation_positionnement">
@ -615,6 +808,7 @@ const Module_Evaluation_Positionnement = (props) => {
}
{/*** FIN Affichage des messages d'alerte*/}
<Dialog
open={Dialog_1_open}
// onClose={Dialog_1_handleClose}
@ -644,7 +838,7 @@ const Module_Evaluation_Positionnement = (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">
<DialogContentText>
{Dialog_1_message}
@ -700,7 +894,6 @@ const Module_Evaluation_Positionnement = (props) => {
</Dialog>
{/* Dialog pour gerer les LIST_POSITION_QUESTION */}
<Dialog
open={Dialog_LIST_POSITION_QUESTION_open}
@ -730,14 +923,52 @@ const Module_Evaluation_Positionnement = (props) => {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle style={{ cursor: 'move', fontFamily:"DM Sans"}} id="draggable-dialog-title">MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title">MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "30rem" }}>
<DialogContentText>
{Dialog_1_message}
</DialogContentText>
<div className="session_caract_Dialog">
<Tooltip className="tooltip_css" id="tooltip_emarge01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="tooltip_emarge01" data-tooltip-html="Si vide, tous les apprenants sont pris en compte ">
Apprenant &nbsp; <FcInfo />
</a>
<br />
{New_GetListeInscrit_insc_result.length > 0 && <Autocomplete
disablePortal
name="inscrit_data_list"
id="inscrit_data_list"
// value={New_Option_Type_Cout.filter((data) => (data).id === String(p_detail_fin_data_type_cout))[0].label}
<div className="session_caract_Dialog" > Choisir un questionnaire de positionnement
fullWidth
options={New_GetListeInscrit_insc_result}
multiple
onChange={(event, newValue) => {
setVal([
...fixedVal,
...newValue.filter((i) => fixedVal.indexOf(i) === -1),
]);
}}
value={val}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option (tout si vide)"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>}
</div>
<div className="session_caract_Dialog" > <b> Choisir un questionnaire de positionnement </b>
<Autocomplete
disablePortal
name="event_dialog_version_q_position"
@ -748,7 +979,6 @@ const Module_Evaluation_Positionnement = (props) => {
onChange={(event, value) => {
if (value && value._id) {
setselected_formulaire_id(value._id);
} else {
@ -781,6 +1011,13 @@ const Module_Evaluation_Positionnement = (props) => {
<div className="div_row_gauche">
<Button onClick={(e) => {
if (String(selected_formulaire_id).length < 5) {
setdisplay_alert_mysy("1");
setalert_message("Vous devez choisir un questionnaire de positionnement");
setalert_type("error");
return;
}
var tab_ids_inscription = []
for (var i = 0; i < selectionModel_q_position.length; i++) {
var myid = parseInt(String(selectionModel_q_position[i]));
@ -795,7 +1032,7 @@ const Module_Evaluation_Positionnement = (props) => {
Dialog_LIST_POSITION_QUESTION_handleClose_buton();
}}
className="bton_enreg_dialog">Initialiser la liste </Button>
className="bton_enreg_dialog">(R)Initialiser </Button>
</div>
@ -813,57 +1050,12 @@ const Module_Evaluation_Positionnement = (props) => {
<div>
<div className="div_row" style={{ "textAlign": "right", "marginTop": "0.5rem" }}>
<Button className="bton_emarge" onClick={(event, value) => {
setVal([]);
<Popup
trigger={
<Button className="bton_emarge">Initialiser le questionnaire</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">
{' '}
<font> Confirmez la ()initialisation l'enquête. <br />
<font color="red"> /!\ Si une enquête de positionnement existe pour cette session, elle sera supprimée et récréée </font>
</font>
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
Getall_Partner_Formulaires_with_Filter();
setDialog_LIST_POSITION_QUESTION_open(true);
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>
Getall_Partner_Formulaires_with_Filter();
setDialog_LIST_POSITION_QUESTION_open(true);
}}>Initialiser Q. Position</Button>
@ -874,7 +1066,7 @@ const Module_Evaluation_Positionnement = (props) => {
<Button className="bton_emarge" onClick={(event) => {
Export_survey_datatab_class();
}}>Exporter (excel)</Button><br />
</div>
@ -1027,7 +1219,8 @@ const Module_Evaluation_Positionnement = (props) => {
onChange={(event, value) => {
if (value && value.value) {
if (String(value.value) === "reinit" || String(value.value) === "resend"
|| String(value.value) === "print") {
|| String(value.value) === "print"
|| String(value.value) === "delete_survey") {
setactionmass_q_position_val(value.value);
@ -1076,6 +1269,14 @@ const Module_Evaluation_Positionnement = (props) => {
Confirmer l'export PDF de questionnaire de positionnement pour {selectionModel_q_position.length} ligne(s).
</nav>}
{String(actionmass_q_position_val) === "delete_survey" &&
<font color="red"> Seule les demandes au statut <b>'Init' </b> sont supprimables<br />
<font color="red"> Confirmer la suppression en masse de {selectionModel_q_position.length} questionnaire(s) de positionnement.
</font>
</font>}
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
@ -1087,7 +1288,7 @@ const Module_Evaluation_Positionnement = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();

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

@ -149,7 +149,7 @@ const Module_Selection_Evaluation_Apprenants = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -425,7 +425,7 @@ const Module_Selection_Evaluation_Apprenants = (props) => {
var line_json = line;
console.log(" line_json = ", line_json);
// console.log(" line_json = ", line_json);
//console.log(" line_json['_id'] = ", line_json['_id']);
tab_mongo_preins_ids.push(line_json._id)

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}
@ -1813,7 +1813,7 @@ const Module_Session_Evaluation = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -2028,7 +2028,7 @@ const Module_Session_Evaluation = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -2105,7 +2105,7 @@ const Module_Session_Evaluation = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -2323,7 +2323,7 @@ const Module_Session_Evaluation = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -2403,7 +2403,7 @@ const Module_Session_Evaluation = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -2621,7 +2621,7 @@ const Module_Session_Evaluation = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();

View File

@ -1,6 +1,6 @@
import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import fileDownload from 'js-file-download';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
@ -219,54 +219,26 @@ const Module_Session_Notes_Classement = (props) => {
},
{ field: 'credit_acquis', headerName: 'Credit acquis', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'rang_calculation_date', headerName: 'Date Calcul', minwidth: 100, flex: 1, hide: true, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'jury_note', headerName: 'Note Jury', width: 200, editable: jury_cell_editable, renderCell: (params) => <ExpandableCell_50_bg_hiligt_red_color {...params} />, align: "center", },
{ field: 'jury_observation', headerName: 'Observ. Jury', width: 200, editable: jury_cell_editable, renderCell: (params) => <ExpandableCell_50_bg_hiligt_red_color {...params} />, align: "left", },
{ field: 'jury_note', headerName: 'Note Jury', width: 200, editable: false, renderCell: (params) => <ExpandableCell_50_bg_hiligt_red_color {...params} />, align: "center", },
{ field: 'jury_observation', headerName: 'Observ. Jury', width: 200, editable: false, renderCell: (params) => <ExpandableCell_50_bg_hiligt_red_color {...params} />, align: "left", },
{
field: 'jury_validation', headerName: 'Validation Jury', width: 150, hide: false, editable: jury_cell_editable,
field: 'jury_validation', headerName: 'Validation Jury', width: 150, hide: false, editable: false,
renderCell: (cellValues) => {
return (
<nav>
{New_Option_Valisation_Jury && New_Option_Valisation_Jury.length > 0 && jury_cell_editable === true && <Autocomplete
disablePortal
name="filtre1"
id="filtre1"
value={New_Option_Valisation_Jury.filter((data) => (data).value === String(cellValues.row.jury_validation))[0].label}
options={New_Option_Valisation_Jury}
onChange={(event, value) => {
if (value && value.value) {
mysy_onchange_list(cellValues.row.id, "jury_validation_champ_technique", value.value);
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder=""
inputProps={{ ...params.inputProps, style: { fontSize: 10, height: "1rem" } }}
/>
}
/>}
{jury_cell_editable !== true &&
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
{cellValues.row.jury_validation_champ_technique && String(cellValues.row.jury_validation_champ_technique) === "1" && "Oui"}
{cellValues.row.jury_validation_champ_technique && String(cellValues.row.jury_validation_champ_technique) === "0" && "Non"}
</div>
}
</nav>
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
{cellValues.row.jury_validation && String(cellValues.row.jury_validation) === "1" && "Oui"}
{cellValues.row.jury_validation && String(cellValues.row.jury_validation) === "0" && "Non"}
</div>
);
}
},
{
field: 'jury_validation_champ_technique', headerName: 'Validation Jury_tech', width: 200, renderCell: (params) => <ExpandableCell_50_bg_hiligt_red_color {...params} />, align: "center",
field: 'jury_validation_champ_technique', headerName: 'Validation Jury_tech', width: 0, hide: true, renderCell: (params) => <ExpandableCell_50_bg_hiligt_red_color {...params} />, align: "center",
},
{
@ -361,7 +333,7 @@ const Module_Session_Notes_Classement = (props) => {
{ field: 'ue_id', headerName: 'ue_id', hide: true },
{ field: 'class_id', headerName: 'class_id', hide: true },
{ field: 'class_id_external_code', headerName: 'Code Formation', hide: true },
{ field: 'ue_id_code', headerName: 'UE Code', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'ue_id_code', headerName: 'UE/Matière', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'inscription_id_nom', headerName: 'Nom', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'inscription_id_prenom', headerName: 'Prenom', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
@ -387,7 +359,7 @@ const Module_Session_Notes_Classement = (props) => {
{ field: 'ue_id', headerName: 'ue_id', hide: true },
{ field: 'class_id', headerName: 'class_id', hide: true },
{ field: 'class_id_external_code', headerName: 'Code Formation', hide: true },
{ field: 'ue_id_code', headerName: 'UE Code', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'ue_id_code', headerName: 'UE/Matière', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'inscription_id_nom', headerName: 'Nom', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'inscription_id_prenom', headerName: 'Prenom', minwidth: 200, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
@ -396,7 +368,7 @@ const Module_Session_Notes_Classement = (props) => {
{ field: 'seuil_validation', headerName: 'Seuil val.', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'ue_coefficient', headerName: 'Coeff.', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'credit', headerName: 'Credit.', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'moyenne_session_ue', headerName: 'Moy. Ens.', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{
field: 'ue_validation', headerName: 'Validé', minwidth: 100, flex: 1, hide: false, editable: false,
@ -416,11 +388,12 @@ const Module_Session_Notes_Classement = (props) => {
{ field: 'note_td', headerName: 'note_td', hide: true },
{ field: 'note_tp', headerName: 'note_tp', hide: true },
{ field: 'note_examen', headerName: 'note_examen', hide: true },
{ field: 'jury_note', headerName: 'Note Jury', hide: true },
{ field: 'jury_observation', headerName: 'Observ. Jury', width: 200, editable: jury_cell_editable, renderCell: (params) => <ExpandableCell_50_bg_hiligt_red_color {...params} />, align: "left", },
{ field: 'jury_note', headerName: 'Note Jury', width: 200, editable: jury_cell_editable, renderCell: (params) => <ExpandableCell_50_bg_hiligt_red_color {...params} />, align: "left", },
{ field: 'detail', headerName: 'Detail Note', minwidth: 100, flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'detail', headerName: 'Detail Note', hide: true },
{
field: 'gestion', headerName: 'Gestion', minWidth: 50, flex: 1, maxWidth: 100, hideable: true, hide: false, editable: false, align: "center",
@ -865,6 +838,8 @@ const Module_Session_Notes_Classement = (props) => {
var inscription_id_nom = JSON.parse(x).inscription_id_nom;
var inscription_id_prenom = JSON.parse(x).inscription_id_prenom;
var moyenne_session_ue = JSON.parse(x).moyenne_session_ue;
//---
@ -894,6 +869,7 @@ const Module_Session_Notes_Classement = (props) => {
"inscription_id_mail": inscription_id_mail,
"inscription_id_nom": inscription_id_nom,
"inscription_id_prenom": inscription_id_prenom,
"moyenne_session_ue": moyenne_session_ue,
};
new_data2.push(node);
@ -922,6 +898,7 @@ const Module_Session_Notes_Classement = (props) => {
"seuil_validation": "",
"ue_coefficient": "",
"ue_validation": "",
"moyenne_session_ue": "",
};
new_data2.push(node);
@ -1076,7 +1053,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/";
@ -1535,7 +1512,7 @@ const Module_Session_Notes_Classement = (props) => {
const New_Option_Filter = [
{ "id": "ue_id", "label": "Code UE", "value": "ue_id" },
{ "id": "ue_id", "label": "UE/matière", "value": "ue_id" },
{ "id": "inscrit_id", "label": "Apprenant ", "value": "inscrit_id" },
{ "id": "", "label": "", "value": "" },
{ "id": "1", "label": "", "value": "1" }, // Cette ligne pour couvrir l'ajout d'une ligne de filter. C'est fait expres.
@ -2036,6 +2013,7 @@ const Module_Session_Notes_Classement = (props) => {
const [actionmass_ftion_val, setactionmass_ftion_val] = useState();
const New_Option = [
{ "id": "0", "label": "(R)Inscrire", "value": "inscription" },
{ "id": "1", "label": "Imp. Bulletin", "value": "print_bulletin" },
{ "id": "2", "label": "", "value": "" },
]
@ -2190,6 +2168,51 @@ const Module_Session_Notes_Classement = (props) => {
}
function Download_Bulletins_Notes() {
const stored_cookie = getCookie('tokenmysypart');
var nom_fichier_cmd = "Bulletin.zip";
var tab_inscrit_ids = []
for (var i = 0; i < selectionModel_note_Session_classement.length; i++) {
var myid = parseInt(String(selectionModel_note_Session_classement[i]));
var line = New_Getall_Session_Final_Note_Classement_result[myid];
tab_inscrit_ids.push(line._id);
//console.log(rowss[myid]['external_code']);
}
// console.log(" ### tab_inscrit_ids = ", tab_inscrit_ids)
var url = process.env.REACT_APP_API_URL + "myclass/api/Prepare_and_Send_Inscrit_Bulletin_Note_By_PDF/" + stored_cookie + "/" + tab_inscrit_ids + "/685ebd41ed392125a88f1574";
setLoading(true);
axios.get(url, { responseType: 'blob', },)
.then((res) => {
setLoading(false);
//console.log(" In Download_Stagiaire_Conventions_PDF res.data = " + res.data);
if (String(res.data) === String("false")) {
alert("Impossible de télécharger les bulletins (2) ");
} else {
fileDownload(res.data, nom_fichier_cmd);
setactionmass_ftion_val("");
}
}).catch((error) => {
setLoading(false);
console.error('Error:', error);
setdisplay_alert_mysy("1");
setalert_message(" Impossible de télécharger les bulletins");
setalert_type("error");
});
}
const [Add_Inscription_List_Apprenant_api, setAdd_Inscription_List_Apprenant_api] = useState();
const [Add_Inscription_List_Apprenant_message, setAdd_Inscription_List_Apprenant_message] = useState();
const [Add_Inscription_List_Apprenant_result, setAdd_Inscription_List_Apprenant_result] = useState();
@ -2448,7 +2471,7 @@ const Module_Session_Notes_Classement = (props) => {
<DialogActions>
<IconButton
autoFocus
// autoFocus
onClick={Dialog_add_inscription_handleClose_buton}
color="primary"
className={classes.customizedButton}
@ -2509,7 +2532,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}
@ -2560,23 +2583,27 @@ const Module_Session_Notes_Classement = (props) => {
</div>
<div className="session_caract_Dialog" > <b> Validation </b> <br />
{New_Option_Valisation_Jury && New_Option_Valisation_Jury.length > 0 && jury_cell_editable === true && <Autocomplete
disablePortal
name="filtre1"
id="filtre1"
<TextareaAutosize
name="detail_jury_note"
id="detail_jury_note"
aria-label="minimum height"
rows={1}
value={New_Option_Valisation_Jury.filter((data) => (data).value === String(p_detail_jury_validation))[0].label}
options={New_Option_Valisation_Jury}
onChange={(event, value) => {
if (value && value.value) {
setp_detail_jury_validation(value.value)
}
style={{
border: "1px solid gainsboro", width: '99%', padding: '2px',
maxHeight: '3rem', height: '3rem', minHeight: '3rem', marginBottom: '3rem'
}}
value={p_detail_jury_validation}
onChange={(e) => {
setp_detail_jury_validation(e.target.value);
}}
/>
renderInput={(params) => <TextField {...params} label="" placeholder=""
inputProps={{ ...params.inputProps, style: { fontSize: 10, height: "1rem" } }}
/>
}
/>}
</div>
@ -2650,7 +2677,7 @@ const Module_Session_Notes_Classement = (props) => {
&nbsp;
<div style={{ width: '100%', float: 'left' }}>
<nav style={{ textAlign: 'center', width: '50%', float: 'left' }}> Notes & Classement Final (session)</nav>
<nav style={{ textAlign: 'center', width: '50%', float: 'left' }}> Notes & Classement Final (Promotion)</nav>
<nav style={{ textAlign: 'right', width: '50%', float: 'left' }}>
<Button variant="outlined" onClick={Calcul_Note_Classement_Session} className="detail_class_submenu" id='calcul_moyenne' name='calcul_moyenne'> Calcul Moyenne </Button>
@ -2821,11 +2848,12 @@ const Module_Session_Notes_Classement = (props) => {
options={New_Option}
onChange={(event, value) => {
if (value && value.value) {
if (String(value.value) === "inscription") {
if (String(value.value) === "inscription"
|| String(value.value) === "print_bulletin") {
setactionmass_ftion_val(value.value);
}
else {
setactionmass_ftion_val();
setactionmass_ftion_val("");
}
}
@ -2852,6 +2880,16 @@ const Module_Session_Notes_Classement = (props) => {
</nav>}
{actionmass_ftion_val && String(actionmass_ftion_val) === "print_bulletin" && <nav className='block_en_mass_bton_action'>
<Button className="bton_enreg" style={{ "width": "90%" }} onClick={(event) => {
Download_Bulletins_Notes();
}}>
<FcAcceptDatabase /> Traiter
</Button>
</nav>}
</div>}
@ -3194,7 +3232,7 @@ const Module_Session_Notes_Classement = (props) => {
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
&nbsp;
<nav style={{ textAlign: 'center' }}> Notes & Rang par UE</nav>
<nav style={{ textAlign: 'center' }}> Notes & Rang par UE/Matière</nav>
<Box
sx={{
height: 500,
@ -3310,6 +3348,8 @@ const Module_Session_Notes_Classement = (props) => {
jury_note: JSON.parse(item).jury_note,
jury_observation: JSON.parse(item).jury_observation,
jury_validation: JSON.parse(item).jury_validation,
moyenne_session_ue: JSON.parse(item).moyenne_session_ue,
}
))}
@ -3392,7 +3432,7 @@ const Module_Session_Notes_Classement = (props) => {
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
&nbsp;
<nav style={{ textAlign: 'center' }}> Matrice détaillée des notes Toutes UE </nav>
<nav style={{ textAlign: 'center' }}> Matrice détaillée des notes Toutes UE/Matières </nav>
<Box
sx={{
height: 500,

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";
}
@ -481,8 +464,8 @@ const Modules_Mes_Documents = (props) => {
{ "id": "filter_type_document", "label": "Type Document", "value": "filter_type_document" },
{ "id": "filter_nom_client", "label": "Nom Client", "value": "filter_nom_client" },
{ "id": "date_creation", "label": "Date Création (jj/mm/aaaa) ", "value": "date_creation" },
{ "id": "filter_formation_external_code", "label": "Lié a la Formation (code externe)", "value": "filter_formation_external_code" },
{ "id": "filter_session_code", "label": "Lié a la session (code session)", "value": "filter_session_code" },
/*{ "id": "filter_formation_external_code", "label": "Lié a la Formation (code externe)", "value": "filter_formation_external_code" },
{ "id": "filter_session_code", "label": "Lié a la session (code session)", "value": "filter_session_code" },*/
{ "id": "", "label": "", "value": "" },
{ "id": "1", "label": "", "value": "1" }, // Cette ligne pour couvrir l'ajout d'une ligne de filter. C'est fait expres.
]
@ -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,
}
))}
@ -1478,7 +1461,7 @@ const Modules_Mes_Documents = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();

View File

@ -3,7 +3,7 @@ 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 { IoAppsSharp, IoListSharp } from "react-icons/io5";
import Formation_Grid_2Col from "./Formation_Grid_2Col";
import Pagination from "./TestPagination";
@ -16,6 +16,9 @@ import AideRecherche from "./AideRecherche"
import { useParams } from 'react-router-dom'
import Fotter_Catalog_Pub from "./Fotter_Catalog_Pub";
import img_header_jmg from "../mysy_img2/img_jmj_modif.jpg"
import Formation_Partner_Catalog_Special_JMJFormation from "./Jmj_Theme/Formation_Partner_Catalog_Special_JMJFormation";
import "./Jmj_Theme/jmj_formation.css";
import { confirmAlert } from 'react-confirm-alert'; // Import
import { useCookies } from "react-cookie";
@ -29,7 +32,6 @@ let PageSize = 10;
const Mon_Catalogue_Public = (props) => {
const { type, categorie } = useParams();
const { NewSearchText } = useParams();
const [v11, setv11] = useState("");
@ -919,23 +921,12 @@ const Mon_Catalogue_Public = (props) => {
var ip = "";
Get_Subdomain_Partner_Data(window.location.host)
Get_Subdomain_Partner_Data(window.location.host);
async function fetchData() {
// const result = await axios('https://geolocation-db.com/json/',);
/* setuserIp("172.71.122.128");
setcountry_code("FR");
setcountry_name("France");
setcity("Paris");
setpostal("75001");
setlatitude("48.861000061035156");
setlongitude("2.3380000591278076");
setIPv4("172.71.122.128");
setstate("France");*/
let windowWidth = window.innerWidth;
if (showelement === "init") {
@ -953,70 +944,11 @@ const Mon_Catalogue_Public = (props) => {
}
}
if (categorie && String(categorie).length > 0) {
getClassByMetier_categorie(categorie);
}
else {
DisplayXfirstClas(result.data);
}
DisplayXfirstClas(result.data);
}
fetchData();
async function loadSuggestedWord() {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Suggested_Word/";
//alert(" URL = "+process.env.REACT_APP_API_URL + "myclass/api/Get_Suggested_Word/");
//console.log(" ### URL ##### = "+process.env.REACT_APP_API_URL + "myclass/api/Get_Suggested_Word/");
var form = new FormData();
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Get_Suggested_Word/",
{
method: 'POST',
}
).then((response) => response.json())
.then((result) => {
//console.log('Success:', result['message']);
setsuggestedwords(result['message']);
})
.catch((error) => {
console.error('Error:');
});
}
loadSuggestedWord();
async function loadSuggestedFrCities() {
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Get_Suggested_Fr_Cities/",
{
method: 'POST',
}
).then((response) => response.json())
.then((result) => {
//console.log(' loadSuggestedFrCities CITIES = Success:', result['message']);
setsuggestedcities(result['message']);
//console.log(" CITIES = " + result['message']);
})
.catch((error) => {
console.error('Error:');
});
}
loadSuggestedFrCities();
async function loadDomainMetier() {
@ -1060,7 +992,7 @@ const Mon_Catalogue_Public = (props) => {
});
}
//loadDomainMetier();
loadDomainMetier();
async function loadDomain() {
@ -1478,9 +1410,6 @@ const Mon_Catalogue_Public = (props) => {
}
var my_local_user_connect;
var my_local_part_connect;
@ -2781,6 +2710,19 @@ const Mon_Catalogue_Public = (props) => {
setmy_theme_code(theme_code);
var catalog_pub_affiche_indicateur = ""
if (JSON.parse(x).affiche_indicateur)
catalog_pub_affiche_indicateur = JSON.parse(x).affiche_indicateur;
var catalog_pub_affiche_raison_sociale = ""
if (JSON.parse(x).affiche_raison_sociale)
catalog_pub_affiche_raison_sociale = JSON.parse(x).affiche_raison_sociale;
var catalog_pub_affiche_contact = ""
if (JSON.parse(x).affiche_contact)
catalog_pub_affiche_contact = JSON.parse(x).affiche_contact;
console.log(" ### setmy_theme_code = ", theme_code);
@ -2842,8 +2784,12 @@ const Mon_Catalogue_Public = (props) => {
"catalog_pub_theme_id": catalog_pub_theme_id,
"theme_code": theme_code,
"affiche_indicateur": catalog_pub_affiche_indicateur,
"affiche_raison_sociale": catalog_pub_affiche_raison_sociale,
"affiche_contact": catalog_pub_affiche_contact,
};
// console.log(" --- node = ", node);
console.log(" --- node = ", node);
new_data2.push(node);
});
@ -2897,7 +2843,7 @@ const Mon_Catalogue_Public = (props) => {
<Helmet>
<title>Formation & Tutoriel Gratuit ou payant Excellente qualité</title>
<meta name="description" content="(zzz)Trouver des Formations et Tutoriels d'excellente qualité : Gratuit ou payant / A distance ou en presentiel, etc." />
<meta name="description" content="Trouver des Formations et Tutoriels d'excellente qualité : Gratuit ou payant / A distance ou en presentiel, etc." />
<meta name="robots" content="index,follow" />
<link rel="canonical" href={`${process.env.REACT_APP_BASE_URL}` + "/recherche-formation"} />
<meta name="title" content="Formation & Tutoriel Gratuit ou payant Excellente qualité" />
@ -2918,7 +2864,7 @@ const Mon_Catalogue_Public = (props) => {
<div className="bloc_logo_indic_model_2">
<div className="bloc_logo_indic_logo_model_2">
<img src={New_Get_Subdomain_Partner_Data_result[0].catalog_pub_logo} alt={New_Get_Subdomain_Partner_Data_result[0].nom} />
<img src={New_Get_Subdomain_Partner_Data_result[0].catalog_pub_logo} />
</div>
<div className="bloc_logo_indic_contact_model_2">
@ -2930,13 +2876,13 @@ const Mon_Catalogue_Public = (props) => {
&nbsp;
</div>
</div>
<div className="bloc_milieu_model_2">
<div className="bloc_milieu_text_model_2">
<div className="bloc_milieu_text_model_2_gauche">
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_indicateur) === "1" && <div className="bloc_milieu_text_model_2_gauche">
<font className="bloc_logo_indic_indic_text"> Indicateurs </font> <br />
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_txt &&
@ -2982,8 +2928,10 @@ const Mon_Catalogue_Public = (props) => {
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_txt}
</div>}
</div>
<div className="bloc_milieu_text_model_2_centre">
</div>}
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_raison_sociale) === "1" && <div className="bloc_milieu_text_model_2_centre">
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0 &&
<nav>
<font className='title1_nom_model_2'> {New_Get_Subdomain_Partner_Data_result[0].nom} </font> <br />
@ -3002,14 +2950,14 @@ const Mon_Catalogue_Public = (props) => {
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_message_2_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_message_2_txt} </nav>}
</div>
<div className="bloc_milieu_text_model_2_droite">
</div>}
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_contact) === "1" && <div className="bloc_milieu_text_model_2_droite">
<font className="bloc_logo_indic_contact_text_model_2"> Contact </font> <br />
Tel : {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_contact_public_telephone} <br />
Email : {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_contact_public_email}
</div>
</div>}
</div>
</div>
@ -3641,7 +3589,7 @@ const Mon_Catalogue_Public = (props) => {
{/******* Gestion du THEME PAR DEFAULT " */}
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& String(my_theme_code) !== "MySy_Theme2" && <div>
&& String(my_theme_code) !== "MySy_Theme2" && String(my_theme_code) !== "MySy_Theme_JMJ" && <div>
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_banniere_img && <div >
@ -3652,17 +3600,17 @@ const Mon_Catalogue_Public = (props) => {
<div className="bloc_logo_indic">
<div className="bloc_logo_indic_logo">
<img src={New_Get_Subdomain_Partner_Data_result[0].catalog_pub_logo} alt={New_Get_Subdomain_Partner_Data_result[0].nom} />
<img src={New_Get_Subdomain_Partner_Data_result[0].catalog_pub_logo} />
</div>
<div className="bloc_logo_indic_contact">
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_contact) === "1" && <div className="bloc_logo_indic_contact">
<font className="bloc_logo_indic_contact_text"> Contact </font> <br />
Tel : {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_contact_public_telephone} <br />
Email : {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_contact_public_email}
</div>
</div>}
<div className="bloc_logo_indic_indic">
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_indicateur) === "1" && <div className="bloc_logo_indic_indic">
<font className="bloc_logo_indic_indic_text"> Indicateurs </font> <br />
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_txt &&
@ -3707,11 +3655,11 @@ const Mon_Catalogue_Public = (props) => {
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_txt}
</div>}
</div>
</div>}
</div>
<div className="bloc_milieu">
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_raison_sociale) === "1" && <div className="bloc_milieu">
<div className="bloc_milieu_text">
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0 &&
@ -3736,7 +3684,7 @@ const Mon_Catalogue_Public = (props) => {
<img style={{ width: '60%' }}
src={img_header} />
</div>
</div>
</div>}
<div className="Header_Content">
@ -4443,7 +4391,7 @@ const Mon_Catalogue_Public = (props) => {
{result && myApiResponse === "True" && !newresult &&
<div className="okUpdateData">
<div style={{ "width": "100%" }}>
<div style={{ "width": "50%", "float": "left" }}>
<div className="pave_trier_par_gauche">
<Pagination
className="pagination-bar"
currentPage={currentPage2}
@ -4452,8 +4400,8 @@ const Mon_Catalogue_Public = (props) => {
onPageChange={page => setCurrentPage2(page)}
/>
</div>
<div style={{ "width": "40%", "float": "right" }}>
<div className="input-group input-group-sm mb-3 ">
<div className="pave_trier_par_droite">
<div>
<span className="filter_span">Trier par </span>
<select className="filter_val"
@ -4464,7 +4412,7 @@ const Mon_Catalogue_Public = (props) => {
<option value="duration">Duree</option>
<option selected value="note">Pertinence</option>
</select>
<span style={{ width: '10%' }}><TbArrowsDownUp style={{ height: '2rem', paddingTop: '5px', width: '40%' }}
<span style={{ width: '10%' }}><TbArrowsDownUp style={{ height: '2rem', minWidth: '20px' }}
onClick={(e) => {
if (trier_par === "1")
settrier_par("-1");
@ -4593,6 +4541,406 @@ const Mon_Catalogue_Public = (props) => {
</div>}
{/******* FIN Gestion du THEME PAR DEFAULT " */}
{/******* Gestion du THEME THEME SPECIAL JMJ Formation " */}
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& String(my_theme_code) === "MySy_Theme_JMJ" &&
<div className="jmj_formation">
<div className="jmj_block_header">
<div className="jmj_block_header_img">
<div style={{ "width": "100%", float: "left" }}>
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_banniere_img && <div >
<img src={New_Get_Subdomain_Partner_Data_result[0].catalog_pub_banniere_img} className="Partner_Catalog_Background_Header_jmj"></img>
</div>}
<div className="jmj_header_gauche">
<div className="bloc_logo_indic" style={{ position: "unset" }}>
<div className="bloc_logo_indic_logo">
<img src={New_Get_Subdomain_Partner_Data_result[0].catalog_pub_logo} />
</div>
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_contact) === "1" && <div className="bloc_logo_indic_contact">
<font className="bloc_logo_indic_contact_text"> Contact </font> <br />
Tel : {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_contact_public_telephone} <br />
Email : {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_contact_public_email}
</div>}
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_indicateur) === "1" && <div className="bloc_logo_indic_indic">
<font className="bloc_logo_indic_indic_text"> Indicateurs </font> <br />
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_txt &&
<div style={{
textAlign: "left",
width: '100%',
fontSize: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_taille}` + "px",
color: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_color}`,
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_txt}
</div>}
{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",
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}`,
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_2_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_2_txt}
</div>}
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_3_txt &&
<div style={{
textAlign: "left",
width: '100%',
fontSize: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_3_taille}` + "px",
color: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_3_color}`,
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_3_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_3_txt}
</div>}
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_txt &&
<div style={{
textAlign: "left",
width: '100%',
fontSize: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_taille}` + "px",
color: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_color}`,
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_txt}
</div>}
</div>}
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_raison_sociale) === "1" && <div className="bloc_milieu" style={{ position: "unset" }}>
<div className="bloc_milieu_text">
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0 &&
<nav className="title1_nom" style={{ marginBottom: "2rem" }}>
{New_Get_Subdomain_Partner_Data_result[0].nom}
</nav>}
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0 &&
<nav style={{ marginBottom: "2rem" }}>
<font className='title1_text1' style={{
fontSize: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_message_1_taille}` + "px",
color: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_message_1_color}`,
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_message_1_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_message_1_txt} </font>
</nav>}
{New_Get_Subdomain_Partner_Data_result[0] && New_Get_Subdomain_Partner_Data_result[0].catalog_pub_message_2_txt &&
<nav className="title2" style={{
fontSize: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_message_2_taille}` + "px",
color: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_message_2_color}`,
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_message_2_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_message_2_txt} </nav>}
</div>
<div className="bloc_img_milieu_gauche">
<img style={{ width: '60%' }}
src={img_header_jmg} />
</div>
</div>}
</div>
</div>
<div className="jmj_header_droite">
{/* <img src={img_header_jmg} style={{ width: '100%', paddingTop: '3rem' }} />*/} &nbsp;
</div>
</div>
</div>
<div style={{ width: '100%', background: '#f3f4fb', paddingTop: "2rem" }}>
<div className="jmj_block_milieu">
<div className="jmj_block_milieu_gauche">
{showelement === "true" && <div className="rech_leftbox" >
<div className="sous_filter">
<div className="tab_critere_espace">
<div className="filter_valeur" onChange={TrainingCPFHandle}>
<div className="filter_valeur_txt" > Eligible CPF
</div>
<div className="filter_valeur_block_val">
<div className="frame_133" >
<div className="frame_133_grp" >
<input className="frame_133_grp_radio" type="radio" value="1" id={"TrainingCPF"} name={"TrainingCPF"} />
<nav className="frame_133_grp_txt"> Oui </nav>
</div>
</div>
<div className="frame_134">
<div className="frame_134_grp" >
<input className="frame_133_grp_radio" type="radio" value="0" id={"TrainingCPF"} name={"TrainingCPF"} />
<nav className="frame_133_grp_txt"> Non </nav>
</div>
</div>
{String(cpfchecked) === String("1") && <div className="frame_135" onClick={annulefiltrecpf}>
<div className="frame_135_grp" >
<img src={tick_ko} alt="KO" className="tick_ok_ko" />
</div>
</div>}
</div>
</div>
<div className="filter_valeur" onChange={TrainingCertifHandle}>
<div className="filter_valeur_txt" > Certification
</div>
<div className="filter_valeur_block_val">
<div className="frame_133" >
<div className="frame_133_grp" >
<input className="frame_133_grp_radio" type="radio" value="1" id={"TrainingCertif"} name={"TrainingCertif"} />
<nav className="frame_133_grp_txt"> Oui </nav>
</div>
</div>
<div className="frame_134">
<div className="frame_134_grp" >
<input className="frame_133_grp_radio" type="radio" value="0" id={"TrainingCertif"} name={"TrainingCertif"} />
<nav className="frame_133_grp_txt"> Non </nav>
</div>
</div>
{String(certifchecked) === String("1") && <div className="frame_135" onClick={annulefiltrecertif}>
<div className="frame_135_grp" >
<img src={tick_ko} alt="KO" className="tick_ok_ko" />
</div>
</div>}
</div>
</div>
<div className="filter_valeur" onChange={TrainingTypeHandle}>
<div className="filter_valeur_txt" > Type
</div>
<div className="filter_valeur_block_val">
<div className="frame_133" >
<div className="frame_133_grp" >
<input className="frame_133_grp_radio" type="radio" value="cours" id={"TrainingType"} name={"TrainingType"} />
<nav className="frame_133_grp_txt"> Cours </nav>
</div>
</div>
<div className="frame_134">
<div className="frame_134_grp" >
<input className="frame_133_grp_radio" type="radio" value="tuto" id={"TrainingType"} name={"TrainingType"} />
<nav className="frame_133_grp_txt"> Tuto </nav>
</div>
</div>
{String(typechecked) === String("1") && <div className="frame_135" onClick={annulefiltretypechecked}>
<div className="frame_135_grp" >
<img src={tick_ko} alt="KO" className="tick_ok_ko" />
</div>
</div>}
</div>
</div>
<div className="filter_valeur" >
<div className="filter_valeur_txt" > Support
</div>
<div className="filter_valeur_block_val">
<select className="form-select form-select-sm limite_input" onChange={TrainingSupportHandle} aria-label=".form-select-sm example"
id="supoort_list_derou" name="supoort_list_derou" >
<option selected value="">Choisir</option>
<option value="video">Video</option>
<option value="réalité virtuelle">Realité Virtuelle</option>
<option value="document">Document</option>
<option value="mixte">Mixte</option>
</select>
</div>
</div>
<div className="filter_valeur">
<div className="filter_valeur_txt" > Prix
</div>
<div className="new_filter_zone_cerif_radio_left range_prix_mobile" style={{
"width": "90%",
'float': "right", "textAlign": 'right', "marginTop": "1rem",
"fontFamily": 'Manrope',
}} onClick={TrainingPriceHandle}>
<InputRange
maxValue={10000}
minValue={0}
formatLabel={value => `${value}`}
value={range_price}
step={500}
name="toto"
onChange={value => setrange_price(value)}
//onChange={TrainingPriceHandle}
onChangeComplete={value => console.log(value)}
/>
</div>
<div> &nbsp;</div>
</div>
</div>
</div>
</div>
}
</div>
<div className="jmj_block_milieu_droite">
<div className="rech_middlebox" id="rech_middlebox" style={{ width: '100%' }}>
<div> <h3 style={{ fontFamily: 'DM Sans', color: '#0A043C' }}> Nos Formations </h3></div>
<div style={{
display: 'flex', flexDirection: 'row', justifyContent: 'center', width: '100%', flexWrap: 'wrap',
padding: "2px", margin: '2px', gap: '10px', alignItems: 'center',
}}>
<div style={{ width: '100%' }}>
{result && myApiResponse === "True" && !newresult &&
<div className="okUpdateData">
<div style={{ "width": "100%" }}>
<div style={{ "width": "40%", "float": "left" }}>
<Pagination
className="pagination-bar"
currentPage={currentPage2}
totalCount={result.length}
pageSize={PageSize}
onPageChange={page => setCurrentPage2(page)}
/>
</div>
<div style={{ "width": "60%", "float": "right" }}>
<div className="input-group input-group-sm mb-3 ">
<span className="filter_span">Trier par </span>
<select className="filter_val"
id={"trierpar"} name={"trierpar"}
onChange={trier}>
<option value="price">Prix</option>
<option value="duration">Duree</option>
<option selected value="note">Pertinence</option>
</select>
<span style={{ width: '10%' }}><TbArrowsDownUp style={{ height: '2rem', paddingTop: '5px', width: '40%' }}
onClick={(e) => {
if (trier_par === "1")
settrier_par("-1");
else
settrier_par("1");
trier();
}}
/> </span>
</div>
</div>
</div>
</div>}
</div>
<div style={{ width: '100%', marginBottom:"1rem" }}>
<div className="block_display_flex_formation" style={{ width: '100%' }}>
{result && myApiResponse == "True" && fin == 0 && !newresult &&
result.slice(0, PageSize).map((formation) => (
<div className="block_formation" ref={inputEl} id="inputEl_element">
<Formation_Partner_Catalog_Special_JMJFormation formation={JSON.parse(formation)}
key={JSON.parse(formation).title} coeur={JSON.parse(formation).title}
partner_data={New_Get_Subdomain_Partner_Data_result[0]} />
</div>
))}
{result && myApiResponse == "True" && fin == 0 && newresult &&
newresult.slice(0, PageSize).map((formation) => (
<div className="block_formation" >
<Formation_Partner_Catalog_Special_JMJFormation formation={JSON.parse(formation)}
key={JSON.parse(formation).title} partner_data={New_Get_Subdomain_Partner_Data_result[0]} />
</div>
))}
{result && myApiResponse === "True" && fin === 1 && !newresult
&& currentTableData2
&& currentTableData2.map((formation) => (
<div className="block_formation" >
<Formation_Partner_Catalog_Special_JMJFormation formation={JSON.parse(formation)}
key={JSON.parse(formation).title} partner_data={New_Get_Subdomain_Partner_Data_result[0]} />
</div>
))}
{result && myApiResponse === "True" && fin === 1 && newresult
&& currentTableData2
&& currentTableData2.map((formation) => (
<div className="block_formation" >
<Formation_Partner_Catalog_Special_JMJFormation formation={JSON.parse(formation)} key={JSON.parse(formation).title}
partner_data={New_Get_Subdomain_Partner_Data_result[0]} />
</div>
))}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div >
<Fotter_Catalog_Pub partner_data={New_Get_Subdomain_Partner_Data_result[0]} />
</div>
</div>
</div>}
{/******* FIN Gestion du THEME SPECIAL JMJ Formation " */}
</div >
);

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";
}
@ -466,8 +466,8 @@ const Mon_Tableau_De_Bord = (props) => {
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
console.log(" In Getall_Qry_Formation_Session res.data.status = " + res.data.status);
console.log(" In Getall_Qry_Formation_Session res.data.message r_class = " + res.data.message);
//console.log(" In Getall_Qry_Formation_Session res.data.status = " + res.data.status);
// console.log(" In Getall_Qry_Formation_Session res.data.message r_class = " + res.data.message);
setGetall_Qry_Formation_Session_result_JSON(JSON.parse('[' + res.data.message + ']'));
@ -1860,9 +1860,7 @@ const Mon_Tableau_De_Bord = (props) => {
</div>
<BarChart
dataset={Getall_Qry_Inscription_Data_result_JSON[0].data}
// xAxis={[{ scaleType: 'band', dataKey: 'label', tickPlacement: 'middle' }]}
xAxis={[{
@ -1874,7 +1872,7 @@ const Mon_Tableau_De_Bord = (props) => {
return `${month.slice(0, 4)}`
}
else if (String(month).length >= 4 && String(month).length <= 8) {
else if (String(month).length >= 4 && String(month).length <= 8) {
return `${month.slice(0, 4)}` + " \n" + `${month.slice(4, String(month).length)}`
}

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) === '') {
@ -265,11 +265,12 @@ const New_C_Formation_2025 = (props) => {
display: 'flex',
flexDirection: 'column',
},
image: {
maxWidth: '100%',
height: '200px',
overflow: 'hidden',
marginTop: '-2rem'
margin: "auto",
},
content: {
@ -354,7 +355,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 +416,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 +433,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>
@ -450,7 +463,7 @@ const New_C_Formation_2025 = (props) => {
);
} else {
window.open(
"/detaile-formation/" + props.formation.internal_url,
"/detail-formation/" + props.formation.internal_url,
'_blank'
);
}
@ -460,473 +473,7 @@ const New_C_Formation_2025 = (props) => {
</div>
{/*
<div style={{ "width": "100%", marginLeft: '20px' }}>
{class_img_stored_in_bdd && String(class_img_stored_in_bdd).length > 50 && <div className="forma_img_gauche">
<img src={class_img_stored_in_bdd} alt="informatique" style={styles.image} />
</div>
}
{(!class_img_stored_in_bdd || String(class_img_stored_in_bdd).length < 50) && String(ismetiermanaged) !== "0" && String(ismetiermanaged) !== "1" &&
<div className="forma_img_gauche">
{(!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 className="forma_img_gauche">
<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 className="forma_img_gauche">
<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 className="forma_img_gauche">
<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="forma_rightbox"
onClick={(e) => {
e.preventDefault();
if (props.formation.url && props.formation.url.length > 5) {
window.open(
props.formation.url,
'_blank'
);
} else {
window.open(
"/Display-Detail-formation/" + props.formation.internal_url,
'_blank'
);
}
}}>
<div className="p_forma">
<div className="div_row">
<div className="div_row_gauche" style={{ "marginTop": "5px" }}>
{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 />
}
</div>
<div className="div_row_droite div_row_droite_cpf">
<div className="block_cpf">
<div className="block_cpf_txt">
{props.formation.cpf && String(props.formation.cpf) === String("1") &&
<div>
OUI Éligible au CPF &nbsp;
</div>}
{props.formation.cpf && String(props.formation.cpf) !== String("1") &&
<div>
NON Éligible au CPF &nbsp;
</div>}
{!props.formation.cpf &&
<div>
NON Éligible au CPF &nbsp;
</div>}
</div>
</div>
</div>
</div>
<div className="div_row row_formation_title">
<p className="p_class training_title">
<b>
{String(parse(String(props.formation.title).replace(/(<([^>]+)>)/ig, ''))).substring(0, 100)}
</b>
</p>
</div>
<div className="div_row">
{String(props.formation.price).length == 9 &&
<div className="training_price" > <i>Prix : Non communiqué</i> &nbsp;
</div>
}
{String(props.formation.price).length != 9 && String(props.formation.price) === String("0") &&
<div className="training_price">Gratuit &nbsp;
</div>
}
{String(props.formation.price).length != 9 && String(props.formation.price) !== String("0") && (!props.formation.business_prices ||
Object.keys(props.formation.business_prices).length <= 0) &&
<div className="training_price">{props.formation.price} HT&nbsp;
</div>
}
{String(props.formation.price).length != 9 && String(props.formation.price) !== String("0") &&
props.formation.business_prices && Object.keys(props.formation.business_prices).length > 0 &&
<div className="training_price">
<nav className="discounted_price">{String(props.formation.business_prices[0].discounted_price)} HT</nav>
<nav className="training_price_barre">
{props.formation.price} HT&nbsp;
</nav>
<nav className="discount_block"> (- {String(props.formation.business_prices[0].discount)} % )
</nav>
</div>
}
</div>
<div className="div_row row_formation_desc">
{parse(String(props.formation.description).replace(/(<([^>]+)>)/ig, ''))}
</div>
{GetCurrentClass_trainingsession_cities_result && GetCurrentClass_trainingsession_cities_result.length > 0 &&
<nav style={{ "width": "100%", "float": "left", "textAlign": "left", "color": "#619E31" }}>
<nav style={{ "width": "auto", "float": "left" }}> <CiLocationOn className="icone_location" />&nbsp; </nav>
{GetCurrentClass_trainingsession_cities_result && GetCurrentClass_trainingsession_cities_result.sort().slice(0, 5).map((formation_ville) => (
<nav style={{ "width": "auto", "float": "left" }}>
{formation_ville &&
<b> {formation_ville.replaceAll('"', '').substring(0, 20).toLocaleLowerCase().charAt(0).toUpperCase() +
formation_ville.replaceAll('"', '').substring(0, 20).toLocaleLowerCase().slice(1)} &nbsp;&nbsp; </b>
}
</nav>
))}
</nav>
}
{!GetCurrentClass_result || GetCurrentClass_result.length <= 0 &&
<nav style={{ "width": "100%", "float": "left", "textAlign": "left", "fontWeight": "700" }}><CiLocationOn className="icone_location" />&nbsp; A venir </nav>
}
</div>
</div>
<div className="div_row row_formation_crit">
<hr style={{ "width": "90%", "marginLeft": "auto", "marginRight": "auto", "marginBottom": "2px", "marginTop": "2px" }} />
<div className="div_row_gauche div_row_gauche_critere" >
<div className="div_row_critere" style={{ "marginTop": "0.5rem", "marginBottom": "0.3rem" }}>
{!props.formation.extented_search &&
<div className="div_row_gauche">
{props.formation.duration_unit &&
<div style={{ "width": "100%" }}>
<div className="criteres ftion_tab_gauche">Durée
</div>
{String(props.formation.duration_unit) === "heure" &&
<div className="criteres ftion_tab_droite">
{props.formation.duration} hr(s) &nbsp;
</div>}
{String(props.formation.duration_unit) === "heures" &&
<div className="criteres ftion_tab_droite">
{props.formation.duration} hr(s) &nbsp;
</div>}
{String(props.formation.duration_unit) === "jour" &&
<div className="criteres ftion_tab_droite">
{props.formation.duration} jr(s) &nbsp;
</div>}
{String(props.formation.duration_unit) === "mois" &&
<div className="criteres ftion_tab_droite">
{props.formation.duration} mois(s)
</div>}
{String(props.formation.duration_unit) === "semaine" &&
<div className="criteres ftion_tab_droite">
{props.formation.duration} Sem (s)
</div>}
{String(props.formation.duration_unit) === "user_rythme" &&
<div className="criteres ftion_tab_droite">
A votre rythme
</div>}
</div>
}
{!props.formation.duration_unit &&
<div style={{ "width": "100%" }}>
<div className="criteres ftion_tab_gauche">Durée
</div>
{props.formation.duration && <div className="criteres ftion_tab_droite">
{props.formation.duration} jr(s) &nbsp;
</div>}
{!props.formation.duration && <div className="criteres ftion_tab_droite">
<i> En traitement &nbsp; </i>
</div>}
</div>
}
<div style={{ "width": "100%" }}>
<div className="criteres ftion_tab_gauche">
Certification
</div>
<div className="criteres ftion_tab_droite">
{props.formation.certif && String(props.formation.certif) === String("1") &&
<div>
Oui &nbsp;
</div>}
{props.formation.certif && String(props.formation.certif) !== String("1") &&
<div>
Non &nbsp;
</div>}
{!props.formation.certif &&
<div>
NC &nbsp;
</div>}
</div>
</div>
<div className="media_sociaux" style={{ 'float': "left", marginTop: "0.2rem", }}>
<FacebookShareButton
url={"https://www.mysy-training.com/Display-Detail-formation/" + props.formation.internal_url}
quote={props.formation.title + " -- " + props.formation.description}
hashtag={"ySyTraining"}
>
<SocialIcon network="facebook" style={{ height: 20, width: 20 }} />
</FacebookShareButton>
&nbsp;
<TwitterShareButton
url={"https://www.mysy-training.com/Display-Detail-formation/" + props.formation.internal_url}
hashtag={"#MySy-Formation"}
>
<SocialIcon network="twitter" style={{ height: 20, width: 20 }} />
</TwitterShareButton>
&nbsp;
<LinkedinShareButton
url={"https://www.mysy-training.com/Display-Detail-formation/" + props.formation.internal_url}
title={" Une nouvelle formation : " + props.formation.title}
summary={props.formation.title + " -- " + props.formation.description}
source={"https://www.mysy-training.com/"}
>
<SocialIcon network="linkedin" style={{ height: 20, width: 20 }} />
</LinkedinShareButton>
</div>
</div>}
<div className="div_row_droite" style={{ textAlign: "center" }}>
{String(props.formation.coeur) === String("1") && <div>
<img class="imgcoeur" src={coeurimg} alt="coup de coeur" />
</div>}
<div style={{ "width": "100%", "float": "right" }}>
<div className="criteres ftion_tab_gauche">
Sur site
</div>
{props.formation.presentiel && props.formation.presentiel.presentiel &&
String(props.formation.presentiel.presentiel) === String("1") && <div className="criteres ftion_tab_droite">
Oui
</div>}
{props.formation.presentiel && props.formation.presentiel.presentiel &&
String(props.formation.presentiel.presentiel) !== String("1") && <div className="criteres ftion_tab_droite">
Non
</div>}
{!props.formation.presentiel || !props.formation.presentiel.presentiel &&
<div className="criteres ftion_tab_droite">
NC
</div>}
</div>
<div style={{ "width": "100%", "float": "right" }}>
<div className="criteres ftion_tab_gauche">
A distance
</div>
{props.formation.presentiel && props.formation.presentiel.distantiel &&
String(props.formation.presentiel.distantiel) === String("1") && <div className="criteres ftion_tab_droite">
Oui
</div>}
{props.formation.presentiel && props.formation.presentiel.distantiel &&
String(props.formation.presentiel.distantiel) !== String("1") && <div className="criteres ftion_tab_droite">
Non
</div>}
{!props.formation.presentiel || !props.formation.presentiel.distantiel &&
<div className="criteres ftion_tab_droite">
NC
</div>}
</div>
<div style={{ "width": "100%", "float": "right" }}>
<div className="criteres ftion_tab_gauche">
Support
</div>
{props.formation.support &&
<div className="criteres ftion_tab_droite">
{props.formation.support}
</div>}
{!props.formation.support &&
<div className="criteres ftion_tab_droite">
NC
</div>}
</div>
</div>
</div>
</div>
<div className="div_row_droite div_row_droite_critere" >
{!props.formation.extented_search && props.formation.coeur != "1" &&
<div style={{ 'float': "right", "width": "100%", textAlign: "right", marginTop: "0rem", }}>
<Button className="bton_se_renseinger"
onClick={(e) => {
e.preventDefault();
if (props.formation.url && props.formation.url.length > 5) {
window.open(
props.formation.url,
'_blank'
);
} else {
window.open(
"/Display-Detail-formation/" + props.formation.internal_url + "/Information",
'_blank'
);
}
}}
>Se renseigner </Button>
<Button className="bton_voir_detail"
onClick={(e) => {
e.preventDefault();
//test(props.formation.external_code);
if (props.formation.url && props.formation.url.length > 5) {
window.open(
props.formation.url,
'_blank'
);
} else {
window.open(
"/Display-Detail-formation/" + props.formation.internal_url,
'_blank'
);
}
}}
>Voir details</Button>
{GetCurrentClass_result && GetCurrentClass_result.length > 0 &&
<Button variant="contained" className="bton_sinscrire"
onClick={(e) => {
e.preventDefault();
window.open(
"/Display-Detail-formation/" + props.formation.internal_url + "/Inscription",
'_blank'
);
}}
>S'incrire</Button>
}
</div>}
</div>
</div>
</div>
*/}
</div>
)

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;

File diff suppressed because it is too large Load Diff

View File

@ -39,8 +39,6 @@ import {
FcEngineering
} from "react-icons/fc";
import { SlClose } from "react-icons/sl";
import CircleNotificationsIcon from '@mui/icons-material/CircleNotifications';
import { FcInspection } from "react-icons/fc";
@ -50,6 +48,7 @@ import { BiPurchaseTag } from "react-icons/bi";
import { BsTools } from "react-icons/bs";
import DisplayPartnerPromotion from "./DisplayPartnerPromotion";
import DisplayPartnerSession from "./DisplayPartnerSession";
import DisplayPartnerStagiaires from "./DisplayPartnerStagiaires";
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
@ -487,7 +486,7 @@ const Partner = (props) => {
"dashbord_inscriptions", "mes_salles", "mes_opportunites", "config_formulaires", "dashbord_factures", "mes_ue",
"domaine_categorie_metier", "config_formation_initiale", "note_evaluation", "groupe_apprenant",
"part_produit_service", "config_document_super_admin", "tous_mes_document", "equipe_team",
"jurys"]
"jurys", "mes_promotions"]
if (action && list_menu.includes(action)) {
@ -940,7 +939,6 @@ const Partner = (props) => {
function DiplaySessionList(event) {
var security_retval = check_user_acces_right("session", "read");
if (security_retval === 1) {
setmenu("mes_sessions");
setapiexcelimportmessage();
@ -954,6 +952,23 @@ const Partner = (props) => {
}
}
function DiplayPromotionList(event) {
var security_retval = check_user_acces_right("session", "read");
if (security_retval === 1) {
setmenu("mes_promotions");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/mes_promotions");
document.body.style.backgroundColor = "#ffffff";
inactive_active_menu_header("my_promotion");
} else {
Dialog_1_handle_acces_insuffisant("Vos droits ne sont pas suffisants pour accéder à la gestion des sessions");
}
}
function Display_note_evaluation_func(event) {
var security_retval = check_user_acces_right("note_evaluation", "read");
@ -1010,7 +1025,7 @@ const Partner = (props) => {
document.body.style.backgroundColor = "#ffffff";
inactive_active_menu_header("my_apprenant");
} else {
Dialog_1_handle_acces_insuffisant("Vos droits ne sont pas suffisants pour accéder à la gestion des stagiaires");
Dialog_1_handle_acces_insuffisant("Vos droits ne sont pas suffisants pour accéder à la gestion des apprenants");
}
}
@ -1756,7 +1771,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}
@ -1952,8 +1967,8 @@ const Partner = (props) => {
{String(menu) !== "affichage" && <MenuItem onClick={DiplaytrainingList} className="sousmenu" icon={<FcList className="icone_menu" />}> CATALOGUE </MenuItem>}
{String(menu) === "affichage" && <MenuItem onClick={DiplaytrainingList} className="sousmenu_selected" icon={<FcList className="icone_menu" />}> CATALOGUE </MenuItem>}
{String(formation_initiale) === "1" && String(menu) !== "mes_ue" && <MenuItem onClick={DiplayPartner_UE} className="sousmenu" icon={<FcOrgUnit className="icone_menu" />}> UNIT. ENSEI. </MenuItem>}
{String(formation_initiale) === "1" && String(menu) === "mes_ue" && <MenuItem onClick={DiplayPartner_UE} className="sousmenu_selected" icon={<FcOrgUnit className="icone_menu" />}> UNIT. ENSEI. </MenuItem>}
{String(menu) !== "mes_ue" && <MenuItem onClick={DiplayPartner_UE} className="sousmenu" icon={<FcOrgUnit className="icone_menu" />}> UNIT. ENSEI. </MenuItem>}
{String(menu) === "mes_ue" && <MenuItem onClick={DiplayPartner_UE} className="sousmenu_selected" icon={<FcOrgUnit className="icone_menu" />}> UNIT. ENSEI. </MenuItem>}
{String(menu) !== "domaine_categorie_metier" && <MenuItem onClick={DiplayPartner_Domaine_Categorie_Metier} className="sousmenu" icon={<FcEngineering className="icone_menu" />}> CARACTERISTIQUES </MenuItem>}
{String(menu) === "domaine_categorie_metier" && <MenuItem onClick={DiplayPartner_Domaine_Categorie_Metier} className="sousmenu_selected" icon={<FcEngineering className="icone_menu" />}> CARACTERISTIQUES </MenuItem>}
@ -1976,6 +1991,14 @@ const Partner = (props) => {
</Sidebar>
</div>
{String(formation_initiale) === "1" && <div>
<Sidebar className="my_sidebar">
{String(menu) !== "mes_promotions" && <Menu className="my_menu bck_menu_seul" id="my_promotion" name="my_promotion" onClick={DiplayPromotionList} >&nbsp;<CoPresentIcon className="icone_menu" color={"secondary"} /> &nbsp;PROMOTIONS </Menu>}
{String(menu) === "mes_promotions" && <Menu className="my_menu bck_menu_seul_selected" id="my_promotion" name="my_promotion" onClick={DiplayPromotionList} >&nbsp;<CoPresentIcon className="icone_menu" color={"secondary"} /> &nbsp;PROMOTIONS </Menu>}
</Sidebar>
</div>}
{String(formation_initiale) === "1" &&
<div>
<Sidebar className="my_sidebar">
@ -2118,14 +2141,17 @@ const Partner = (props) => {
<Sidebar className="my_sidebar">
<Menu className="my_menu">
<SubMenu label="Espace E-Learning" className="my_chart" id="my_e_learning" name="my_e_learning" icon={<CameraOutdoorSharpIcon color={"quatro"} />} style={{ overflow: 'hidden' }}>
{String(has_partner_lms_url) === "1" && <MenuItem onClick={(e) => {
e.preventDefault();
window.open(
partner_lms_url,
'_blank'
);
if (String(check_user_acces_right("lms", "write")) === "1") {
e.preventDefault();
window.open(
partner_lms_url,
'_blank'
);
} else {
Dialog_1_handle_acces_insuffisant("Vos droits ne sont pas suffisants pour accéder à la gestion du E-Learning");
}
}} className="sousmenu" icon={<FcVideoCall className="icone_menu" />}> MON HEBERGEMENT </MenuItem>}
@ -2148,8 +2174,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>}
@ -2328,7 +2354,8 @@ const Partner = (props) => {
<div className="div_droite">
<Notes_Evaluation ispending={partnerstatus} currentpack={partnerPackService} conntected_employee_id={conntected_employee_id}
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale} />
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale}
check_user_acces_right={check_user_acces_right} />
</div>
}
@ -2340,7 +2367,7 @@ const Partner = (props) => {
read_access={check_user_acces_right("materiel", "read")}
write_access={check_user_acces_right("materiel", "write")}
check_user_acces_right={check_user_acces_right}
/>
/>
</div>
}
@ -2349,7 +2376,8 @@ const Partner = (props) => {
<div className="div_droite">
<Groupe_Apprenant ispending={partnerstatus} currentpack={partnerPackService} conntected_employee_id={conntected_employee_id}
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale} />
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale}
check_user_acces_right={check_user_acces_right} />
</div>
}
@ -2499,7 +2527,9 @@ const Partner = (props) => {
{String(menu) === "setuplms" &&
<div className="div_droite">
<HebergementLms conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("lms", "read")} write_access={check_user_acces_right("lms", "write")} />
<HebergementLms conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("lms", "read")}
write_access={check_user_acces_right("lms", "write")}
check_user_acces_right={check_user_acces_right} />
</div>
}
@ -2519,6 +2549,24 @@ const Partner = (props) => {
</div>
}
{String(menu) === "mes_promotions" &&
<div className="div_droite">
<DisplayPartnerPromotion
conntected_account_id={conntected_account_id}
conntected_employee_id={conntected_employee_id}
formation_initiale={formation_initiale}
object_key={orderid}
class_internal_url={packs}
read_access={check_user_acces_right("session", "read")}
write_access={check_user_acces_right("session", "write")}
check_user_acces_right={check_user_acces_right} reduce={"0"} />
</div>
}
{String(menu) === "mes_employes" &&
<div className="div_droite">
<Employes conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("employe", "read")} write_access={check_user_acces_right("employe", "write")}
@ -2611,7 +2659,7 @@ const Partner = (props) => {
<Apprenant conntected_employee_id={conntected_employee_id} object_key={orderid} subdata={packs}
read_access={check_user_acces_right("stagiaire", "read")} write_access={check_user_acces_right("stagiaire", "write")}
check_user_acces_right={check_user_acces_right}
formation_initiale={formation_initiale} />
formation_initiale={formation_initiale} />
</div>
}
@ -2698,7 +2746,10 @@ const Partner = (props) => {
{String(menu) === "module_agenda" && <div className="div_droite">
<Module_Agenda conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("module_agenda", "read")} write_access={check_user_acces_right("module_agenda", "write")} />
<Module_Agenda conntected_employee_id={conntected_employee_id}
read_access={check_user_acces_right("module_agenda", "read")}
write_access={check_user_acces_right("module_agenda", "write")}
check_user_acces_right={check_user_acces_right} />
</div>
}
@ -2757,7 +2808,7 @@ const Partner = (props) => {
{/* div_gauche div_gauche_reduit */}
{
left_menu === false && <div className="sub_dib_mobile" >
<div className="div_gauche div_gauche_reduit" id="div_gauche">
<div className="div_gauche div_gauche_reduit" id="div_gauche" style={{borderRadius:'0px', margin:'0px'}}>
<nav className="not_display_mobile">
{left_menu === true && <div style={{ "cursor": "pointer", textAlign: "left" }} onClick={open_close_left_menu}>
@ -2874,12 +2925,22 @@ const Partner = (props) => {
</a>
<hr className="my_hr" />
<Tooltip className="tooltip_css" id="tooltip_id_901" />
{String(formation_initiale) === "1" && <a data-tooltip-id="tooltip_id_901" data-tooltip-html="PROMOTIONS">
{String(menu) !== "mes_promotions" && <div className="sousmenu" onClick={DiplayPromotionList} > <FcFlowChart className="icone_menu" /> &nbsp; </div>}
{String(menu) === "mes_promotions" && <div className="sousmenu_selected" onClick={DiplayPromotionList} ><FcFlowChart className="icone_menu" /> &nbsp;</div>}
<hr className="my_hr" />
</a>}
<Tooltip className="tooltip_css" id="tooltip_id_906" />
{String(formation_initiale) === "1" && <a data-tooltip-id="tooltip_id_906" data-tooltip-html="JURYS">
{String(menu) !== "jurys" && <div className="sousmenu" onClick={Display_jurys_func} > <RocketIcon className="icone_menu" /> &nbsp; </div>}
{String(menu) === "jurys" && <div className="sousmenu_selected" onClick={Display_jurys_func} ><RocketIcon className="icone_menu" /> &nbsp;</div>}
<hr className="my_hr" />
</a>}
<hr className="my_hr" />
<Tooltip className="tooltip_css" id="tooltip_id_907" />
{String(formation_initiale) === "1" && <a data-tooltip-id="tooltip_id_907" data-tooltip-html="NOTES & EVALUATIONS">
@ -3117,7 +3178,8 @@ const Partner = (props) => {
<div className="div_droite div_droite_ralonge">
<Partner_Config_Ftion_Initiale ispending={partnerstatus} currentpack={partnerPackService} conntected_employee_id={conntected_employee_id}
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale} />
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale}
check_user_acces_right={check_user_acces_right} />
</div>
}
@ -3125,7 +3187,8 @@ const Partner = (props) => {
<div className="div_droite div_droite_ralonge">
<Notes_Evaluation ispending={partnerstatus} currentpack={partnerPackService} conntected_employee_id={conntected_employee_id}
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale} />
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale}
check_user_acces_right={check_user_acces_right} />
</div>
}
@ -3133,8 +3196,8 @@ const Partner = (props) => {
<div className="div_droite div_droite_ralonge">
<Jury ispending={partnerstatus} currentpack={partnerPackService} conntected_employee_id={conntected_employee_id}
class_external_code={orderid}
class_internal_url={packs}
class_external_code={orderid}
class_internal_url={packs}
formation_initiale={formation_initiale}
read_access={check_user_acces_right("materiel", "read")}
write_access={check_user_acces_right("materiel", "write")}
@ -3146,7 +3209,8 @@ const Partner = (props) => {
<div className="div_droite div_droite_ralonge">
<Groupe_Apprenant ispending={partnerstatus} currentpack={partnerPackService} conntected_employee_id={conntected_employee_id}
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale} />
class_external_code={orderid} class_internal_url={packs} formation_initiale={formation_initiale}
check_user_acces_right={check_user_acces_right} />
</div>
}
@ -3295,7 +3359,10 @@ const Partner = (props) => {
{String(menu) === "setuplms" &&
<div className="div_droite div_droite_ralonge">
<HebergementLms conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("lms", "read")} write_access={check_user_acces_right("lms", "write")} />
<HebergementLms conntected_employee_id={conntected_employee_id}
read_access={check_user_acces_right("lms", "read")}
write_access={check_user_acces_right("lms", "write")}
check_user_acces_right={check_user_acces_right} />
</div>
}
@ -3312,6 +3379,19 @@ const Partner = (props) => {
</div>
}
{String(menu) === "mes_sessions" &&
<div className="div_droite div_droite_ralonge">
<DisplayPartnerPromotion
conntected_account_id={conntected_account_id}
formation_initiale={formation_initiale}
conntected_employee_id={conntected_employee_id} object_key={orderid} class_internal_url={packs}
read_access={check_user_acces_right("session", "read")} write_access={check_user_acces_right("session", "write")}
check_user_acces_right={check_user_acces_right} reduce={"1"} />
</div>
}
{String(menu) === "mes_employes" &&
<div className="div_droite div_droite_ralonge">
<Employes conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("employe", "read")}
@ -3402,8 +3482,8 @@ const Partner = (props) => {
<Apprenant conntected_employee_id={conntected_employee_id} object_key={orderid} subdata={packs}
read_access={check_user_acces_right("stagiaire", "read")} write_access={check_user_acces_right("stagiaire", "write")}
check_user_acces_right={check_user_acces_right}
formation_initiale={formation_initiale}/>
check_user_acces_right={check_user_acces_right}
formation_initiale={formation_initiale} />
</div>
}
@ -3485,7 +3565,9 @@ const Partner = (props) => {
{String(menu) === "module_agenda" && <div className="div_droite div_droite_ralonge">
<Module_Agenda conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("module_agenda", "read")} write_access={check_user_acces_right("module_agenda", "write")} />
<Module_Agenda conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("module_agenda", "read")}
write_access={check_user_acces_right("module_agenda", "write")}
check_user_acces_right={check_user_acces_right}/>
</div>
}

View File

@ -2,11 +2,11 @@ import React, { useRef, useState, useEffect } from "react";
import axios from "axios";
import Button from '@mui/material/Button';
import SendIcon from '@mui/icons-material/Send';
import { getCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
@ -17,7 +17,7 @@ import DialogTitle from '@mui/material/DialogTitle';
import excel_icone from "../mysy_img/excel_icone.png";
import participants from "../mysy_img/participants.png";
import Box from '@mui/material/Box';
import Footer from "./Fotter";
import { DataGrid, GridToolbar, frFR, GridCellParams } from '@mui/x-data-grid';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint, FcDeleteDatabase } from "react-icons/fc";
@ -26,12 +26,11 @@ import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import AddParnerClient from "./AddPartnerClient";
//import { FcHome} from "react-icons/fc";
import { alpha } from '@mui/material/styles';
import { gridClasses } from '@mui/x-data-grid';
import { AiOutlineUserAdd } from "react-icons/ai";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import { CiTrash } from "react-icons/ci";
@ -205,60 +204,60 @@ const Partner_Client = (props) => {
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<>
{String(props.check_user_acces_right("client", "write")) === "1" && <Popup
trigger={<Button
<Popup
trigger={<Button
onClick={(event) => {
// handleClick_delete(event, cellValues);
}}
>
<CiTrash />
onClick={(event) => {
// handleClick_delete(event, cellValues);
}}
</Button>}
modal
nested
position="center center"
>
<CiTrash />
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
</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, le client sera <i><font color="red"> définitivement supprimé</font></i>. <br />
Avant, assurez-vous de n'avoir aucun stagiaire, un devis ou commande rattaché au client.
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
handleClick_supprimer(event, cellValues);
//console.log('modal closed ');
close();
}}> Valider </button>
En confirmant cette opération, le client sera <i><font color="red"> définitivement supprimé</font></i>. <br />
Avant, assurez-vous de n'avoir aucun stagiaire, un devis ou commande rattaché au client.
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
handleClick_supprimer(event, cellValues);
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
</div>
)}
</Popup>
)}
</Popup>}
</>
);
}
@ -303,6 +302,70 @@ const Partner_Client = (props) => {
const [Delete_LIST_Client_Data_api, setDelete_LIST_Client_Data_api] = useState();
const [Delete_LIST_Client_Data_message, setDelete_LIST_Client_Data_message] = useState();
const [Delete_LIST_Client_Data_result, setDelete_LIST_Client_Data_result] = useState();
function Delete_LIST_Client_Data() {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
var tab_tmp = []
for (var i = 0; i < selectionModel.length; i++) {
var myid = parseInt(String(selectionModel[i]));
var line = JSON.parse(rows_list_clients[myid]);
tab_tmp.push(line._id);
}
form.append("token", stored_cookie);
form.append("tab_ids", tab_tmp);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_List_Partner_Client/";
axios.post(myurl, form).then(res => {
//console.log(" In Delete_LIST_Client_Data res.data.status = " + res.data.status);
//console.log(" In Delete_LIST_Client_Data res.data.message r_class = " + res.data.message);
if (String(res.data.status) === String("true")) {
setDelete_LIST_Client_Data_api("true");
setDelete_LIST_Client_Data_result(res.data.message);
Get_List_Partner_Clients();
setSelectionModel([]);
setEdite_Client();
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("success");
}
else if (String(res.data.status) === String("Err_Connexion")) {
alert(res.data.message);
history.push("/Connexion");
}
else {
setDelete_LIST_Client_Data_api("false");
setDelete_LIST_Client_Data_message(res.data.message);
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("error");
}
}).catch((error) => {
console.warn('Not good man :( Delete_LIST_Client_Data = ', error);
setDelete_LIST_Client_Data_api("false");
// alert(" Impossible de supprimer le client");
setdisplay_alert_mysy("1");
setalert_message(" Impossible de supprimer la liste de clients");
setalert_type("error");
})
}
const [Delete_Client_Data_api, setDelete_Client_Data_api] = useState();
const [Delete_Client_Data_message, setDelete_Client_Data_message] = useState();
const [Delete_Client_Data_result, setDelete_Client_Data_result] = useState();
@ -349,19 +412,28 @@ const Partner_Client = (props) => {
}).catch((error) => {
console.warn('Not good man :( Delete_Client_Data = ', error);
setDelete_Client_Data_api("false");
alert(" Impossible de supprimer le client");
// alert(" Impossible de supprimer le client");
setdisplay_alert_mysy("1");
setalert_message(" Impossible de supprimer le client");
setalert_type("error");
})
}
const [loading_datagrid, setloading_datagrid] = useState(true);
const [Get_List_Partner_Clients_api, setGet_List_Partner_Clients_api] = useState();
const [Get_List_Partner_Clients_message, setGet_List_Partner_Clients_message] = useState();
const [Get_List_Partner_Clients_result, setGet_List_Partner_Clients_result] = useState([]);
function Get_List_Partner_Clients(event) {
setloading_datagrid(true);
var form = new FormData();
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_List_Partner_Client/";
@ -374,19 +446,23 @@ const Partner_Client = (props) => {
setGet_List_Partner_Clients_api("true");
setGet_List_Partner_Clients_result(res.data.message);
setrows_list_clients(res.data.message);
setloading_datagrid(false);
}
else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message);
history.push("/Connexion");
setloading_datagrid(false);
}
else {
setGet_List_Partner_Clients_api("false");
setGet_List_Partner_Clients_message(res.data.message);
setloading_datagrid(false);
}
}).catch((error) => {
console.warn('Not good man :( Get_List_Partner_Clients = ', error);
setGet_List_Partner_Clients_api("false");
setloading_datagrid(false);
//setmyApimyApiMessage("")
})
}
@ -450,7 +526,10 @@ const Partner_Client = (props) => {
}).catch((error) => {
console.warn('Not good man :( Get_List_Partner_Clients_With_Filter = ', error);
setGet_List_Partner_Clients_With_Filter_api("false");
alert(" Impossible de récupérer la liste des client");
// alert(" Impossible de récupérer la liste des client");
setdisplay_alert_mysy("1");
setalert_message(" Impossible de récupérer la liste des client");
setalert_type("error");
//setmyApimyApiMessage("")
})
}
@ -488,6 +567,7 @@ const Partner_Client = (props) => {
}, []);
const [isLoading, setLoading] = useState();
const [part_client_file_name, setpart_client_file_name] = useState();
function submenu_import_part_client_mass() {
@ -508,7 +588,11 @@ const Partner_Client = (props) => {
//console.log("file_size = ",file_size," file_type = ",file_type);
if (file_size > 1000000) {
alert("Le fichier ne doit pas dépasser un 1 Méga octets");
// alert("Le fichier ne doit pas dépasser un 1 Méga octets");
setdisplay_alert_mysy("1");
setalert_message("Le fichier ne doit pas dépasser un 1 Méga octets");
setalert_type("error");
return;
}
@ -520,7 +604,7 @@ const Partner_Client = (props) => {
const stored_cookie = getCookie('tokenmysypart');
formData.append("token", stored_cookie);
setLoading(true);
//console.log("token = " + stored_cookie);
fetch(
@ -533,6 +617,7 @@ const Partner_Client = (props) => {
.then((response) => response.json())
.then((result) => {
if (String(result['status']) === String("true")) {
setLoading(false);
//console.log('Success:', result['message']);
setliste_part_client_file_change_result(result['message']);
setliste_part_client_file_change_api("true");
@ -546,11 +631,13 @@ const Partner_Client = (props) => {
} else if (String(result['status']) === String("Err_Connexion")) {
setLoading(false);
alert('Erreur: ' + result['message']);
history.push("/Connexion");
}
else {
setLoading(false);
setliste_part_client_file_change_message(result['message']);
setliste_part_client_file_change_api("false");
// alert(result['message']);
@ -562,6 +649,7 @@ const Partner_Client = (props) => {
})
.catch((error) => {
setLoading(false);
console.error('Error:', error);
setliste_part_client_file_change_api("false");
});
@ -644,8 +732,8 @@ const Partner_Client = (props) => {
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_filtre2, setp_filtre2] = useState("");
const [p_filtre2_value, setp_filtre2_value] = useState("");
function clean_all_filters() {
@ -703,11 +791,150 @@ const Partner_Client = (props) => {
const New_Option_Filter = [
{ "id": "nom", "label": "Nom ", "value": "nom" },
{ "id": "email", "label": "Email ", "value": "email" },
{ "id": "archive", "label": "Archive", "value": "archive" },
{ "id": "", "label": "", "value": "" },
{ "id": "1", "label": "", "value": "1" }, // Cette ligne pour couvrir l'ajout d'une ligne de filter. C'est fait expres.
]
const New_Option = [
{ "id": "0", "label": "Archiver/Désarch.", "value": "archive_desarchive" },
{ "id": "1", "label": "Supprimer", "value": "supprimer" },
]
// Action en mass
const [actionmass_ftion_val, setactionmass_ftion_val] = useState("");
const actionmass_ftion = (event) => {
const value = event.target.value;
if (String(value) === "supprimer" || String(value) === "archive_desarchive") {
setactionmass_ftion_val(value);
}
else {
setactionmass_ftion_val();
}
}
async function actionmass_ftion_Traitemet() {
if (String(actionmass_ftion_val) === String("archive_desarchive")) {
Archive_Given_Client(); // zzzz
}
if (String(actionmass_ftion_val) === String("supprimer")) {
Delete_LIST_Client_Data();
}
}
const New_Option_Is_archive = [
{ "id": "1", "label": "Oui", "value": "1" },
{ "id": "0", "label": "Non", "value": "0" },
{ "id": "2", "label": "Tout", "value": "2" },
{ "id": "", "label": "", "value": "" },
]
const [is_recherche, setis_recherche] = useState("0");
const [Archive_Given_Client_api, setArchive_Given_Client_api] = useState();
const [Archive_Given_Client_message, setArchive_Given_Client_message] = useState();
const [Archive_Given_Client_result, setArchive_Given_Client_result] = useState();
function Archive_Given_Client() {
var archive_statut = "1"
var tab_tmp = []
for (var i = 0; i < selectionModel.length; i++) {
var myid = parseInt(String(selectionModel[i]));
var line = JSON.parse(rows_list_clients[myid]);
tab_tmp.push(line._id);
// Si une seule ligne est a le statut "non archivé", alors on archive
if (line.archive && String(line.archive) === "0")
archive_statut = String(line.archive)
//console.log(rowss[myid]['external_code']);
}
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("tab_partner_client_ids", tab_tmp);
var myurl = "";
if (archive_statut !== "1")
myurl = process.env.REACT_APP_API_URL + "myclass/api/archive_partner_client/";
else
myurl = process.env.REACT_APP_API_URL + "myclass/api/unarchive_partner_client/";
setLoading(true);
axios.post(myurl, form).then(res => {
//console.log(" In Archive_Given_Client res.data.status = " + res.data.status);
//console.log(" In Archive_Given_Client res.data.message r_class = " + res.data.message);
setLoading(false);
if (String(res.data.status) === String("true")) {
setArchive_Given_Client_api("true");
setArchive_Given_Client_result(res.data.message);
setSelectionModel([]);
setactionmass_ftion_val("");
console.log(" ### is_recherche = ", is_recherche);
if (String(is_recherche) === "1") {
Get_List_Partner_Clients();
} else {
Get_List_Partner_Clients_With_Filter();
}
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("success");
}
else {
setArchive_Given_Client_api("false");
setArchive_Given_Client_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('UpdateStagiaireData : Not good man :( Archive_Given_Client = ' + error);
setArchive_Given_Client_api("false");
alert(" Impossible d'archiver/deséarchiver les clients ");
})
}
function display_child_alert_success(message) {
setdisplay_alert_mysy("1");
setalert_message(String(message));
setalert_type("success");
}
const [display_alert_mysy, setdisplay_alert_mysy] = useState("");
const [alert_message, setalert_message] = useState("");
@ -728,6 +955,11 @@ const Partner_Client = (props) => {
<div className="partner_client">
{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}
@ -768,7 +1000,7 @@ const Partner_Client = (props) => {
aria-labelledby="draggable-dialog-title"
>
<DialogTitle style={{ cursor: 'move', fontFamily:"DM Sans"}} id="draggable-dialog-title">client</DialogTitle>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title">client</DialogTitle>
<DialogContent className="DialogContent_width">
<div className="div_row_dialog">
@ -907,7 +1139,7 @@ const Partner_Client = (props) => {
<div className="div_row">
<h3 style={{ fontFamily:'DM Sans' }}> Mes clients & Organismes Financeurs</h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Clients & Organismes Financeurs</h3>
<div className="titre1"> Utilisez les filtres !</div>
<div>
@ -939,7 +1171,7 @@ const Partner_Client = (props) => {
<div className="div_row_droite texte_area_filter_value" >
{String(p_filtre1) !== "archive" && <div className="div_row_droite texte_area_filter_value" >
{p_filtre1 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
@ -969,7 +1201,36 @@ const Partner_Client = (props) => {
/>
}
</div>
</div>}
{String(p_filtre1) === "archive" && <div className="div_row_droite texte_area_filter_value" >
{p_filtre1 &&
<Autocomplete
disablePortal
name="filtre1_value"
id="filtre1_value"
value={New_Option_Is_archive.filter((data) => (data).id === String(p_filtre1_value))[0].label}
sx={{ float: "right" }}
className="disabled_style"
options={New_Option_Is_archive}
onChange={(event, value) => {
if (value && value.value) {
setp_filtre1_value(value.value);
} else {
setp_filtre1_value("");
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>}
/>
}
</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">
@ -1015,24 +1276,10 @@ const Partner_Client = (props) => {
/>
}
/>}
{/* <TextField
name="filtre2"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
value={p_filtre2}
onChange={(e) => {
setp_filtre2(e.target.value)
}}
>
<MenuItem value="nom_client" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Nom &nbsp;&nbsp;</MenuItem>
<MenuItem value="email_client" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Email &nbsp;</MenuItem>
</TextField> */}
</div>
<div className="div_row_droite texte_area_filter" >
{String(p_filtre2).length > 3 &&
{String(p_filtre2).length > 3 && String(p_filtre2) !== "archive" &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -1059,6 +1306,30 @@ const Partner_Client = (props) => {
}}
/>}
{String(p_filtre2).length > 3 && String(p_filtre2) === "archive" &&
<Autocomplete
disablePortal
name="filtre2_value"
id="filtre2_value"
value={New_Option_Is_archive.filter((data) => (data).id === String(p_filtre2_value))[0].label}
sx={{ float: "right" }}
className="disabled_style"
options={New_Option_Is_archive}
onChange={(event, value) => {
if (value && value.value) {
setp_filtre2_value(value.value);
} else {
setp_filtre2_value("");
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>}
/>}
</div>
@ -1080,12 +1351,21 @@ const Partner_Client = (props) => {
{<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_List_Partner_Clients_With_Filter} ref={myRef_head}>Rechercher
<Button variant="contained" className="bton_enreg"
onClick={(event) => {
Get_List_Partner_Clients_With_Filter();
setis_recherche("1");
}}
ref={myRef_head}>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 variant="contained" className="bton_annule" onClick={(event) => {
clean_all_filters();
setis_recherche("");
}}
>Annuler
</Button>
</div>
@ -1096,13 +1376,13 @@ const Partner_Client = (props) => {
</div>
<div className="div_row" style={{ paddingRight: '10px' }}>
<div style={{ height: 550, width: '100%', paddingRight: '1px' }}>
<div className="div_row session_data" >
<div style={{ height: 650, width: '100%', paddingRight: '1px' }}>
&nbsp;
<Box
sx={{
height: "500px",
height: "600px",
width: '100%',
paddingRight: '1px',
'& .cell--presentiel': {
@ -1137,6 +1417,7 @@ const Partner_Client = (props) => {
>
<DataGrid
disableSelectionOnClick
loading={loading_datagrid}
localeText={frFR.components.MuiDataGrid.defaultProps.localeText}
rows={rows_list_clients.map((item, index) => (
{
@ -1220,24 +1501,117 @@ const Partner_Client = (props) => {
</Box>
<br />
<div className="div_row">
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && selectionModel && selectionModel.length >= 1 &&
<div className="block_en_mass">
<nav >Traitement en masse </nav>
&nbsp;
<Autocomplete
disablePortal
id="combo-box-demo"
className="block_en_mass_select"
fullWidth
options={New_Option}
onChange={(event, value) => {
if (value && value.value) {
if (String(value.value) === "supprimer"
|| String(value.value) === "archive_desarchive") {
setactionmass_ftion_val(value.value);
}
else {
setactionmass_ftion_val();
}
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && actionmass_ftion_val && <nav className='block_en_mass_bton_action'>
<Popup
trigger={<Button className="bton_enreg" style={{ "width": "90%" }}>
<FcAcceptDatabase /> Traiter
</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">
{' '}
{String(actionmass_ftion_val) === "archive_desarchive" &&
<font> Confirmer la <b> l'archivage / désarchivage </b> en masse pour {selectionModel.length} lignes.
</font>}
{String(actionmass_ftion_val) === "supprimer" &&
<font color="red"> Confirmer la <b> suppression </b> en masse pour {selectionModel.length} lignes.
</font>}
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
actionmass_ftion_Traitemet();
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</nav>
}
</div>}
</div>
<br />
{/* <Button variant="contained" onClick={GetAllClass_new}>Contained</Button>*/}
</div>
</div>
<div className="div_row" ref={myRef_detail_client}>
{String(props.check_user_acces_right("client", "write")) === "1" && <div className="div_row" ref={myRef_detail_client}>
<Button variant="outlined" onClick={submenu_import_part_client_mass} className="detail_class_submenu bton_import_excel"
id='menu_import_participant' name='menu_import_participant'>Choisir un fichier et Importer &nbsp;
id='menu_import_participant' name='menu_import_participant' style={{ maxWidth: '20rem' }}>Choisir un fichier et Importer &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
<Button variant="outlined" onClick={handleClick_add_new_client}
className="detail_class_submenu bton_add_session"
id='menu_one_participant' name='menu_one_participant'> Ajout 1 Client / Financeur &nbsp; <img src={participants} alt="ajout un client" className="icon_plus" /> &nbsp;
id='menu_one_participant' name='menu_one_participant' style={{ maxWidth: '20rem' }}> Ajout 1 Client / Financeur &nbsp; <img src={participants} alt="ajout un client" className="icon_plus" /> &nbsp;
</Button>
@ -1258,26 +1632,30 @@ const Partner_Client = (props) => {
onChange={liste_part_client_file_change}
/>
</div>
</div>}
</div>
{String(Edite_Client) === "1" && <div className="div_row" style={{ "paddingRight": "10px" }}>
<div className="titre1"> Detail client / Financeur : {Client_email}</div>
<div className="titre1"> Detail client / Financeur <b>{Client_email} </b></div>
<AddParnerClient client_mail={Client_email} close_detail_client={close_detail_client} father_scroll_to_top={father_scroll_to_top}
client_id={selected_id} />
client_id={selected_id} check_user_acces_right={props.check_user_acces_right}
Get_List_Partner_Clients={Get_List_Partner_Clients} />
</div>}
{String(Edite_Client) === "2" && <div className="div_row">
<div className="titre1"> Detail client / Financeur : {Client_email}</div>
<div className="titre1"> Nouveau client / financeur</div>
<div ref={myRef_add_client}> &nbsp;</div>
<AddParnerClient client_mail={Client_email} close_detail_client={close_detail_client} new_customer="1" client_id={selected_id}
Get_List_Partner_Clients={Get_List_Partner_Clients} father_scroll_to_top={father_scroll_to_top} />
Get_List_Partner_Clients={Get_List_Partner_Clients} father_scroll_to_top={father_scroll_to_top}
check_user_acces_right={props.check_user_acces_right}
display_child_alert_success={display_child_alert_success}
/>
</div>}

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@ import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import TextareaAutosize from '@mui/material/TextareaAutosize';
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
@ -161,7 +161,7 @@ const Partner_Config_Formulaires = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -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',
@ -286,7 +303,7 @@ const Partner_Config_Formulaires = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -557,6 +574,7 @@ const Partner_Config_Formulaires = (props) => {
const [p_detail_one_from_commentaire, setp_detail_one_from_commentaire] = useState("");
const [p_detail_one_from_default, setp_detail_one_from_default] = useState("");
const [p_detail_one_from_default_bool, setp_detail_one_from_default_bool] = useState(false);
const [p_detail_one_from_list_question, setp_detail_one_from_list_question] = useState([]);
@ -907,6 +925,11 @@ const Partner_Config_Formulaires = (props) => {
top: divh,
behavior: "smooth",
});
} else {
window.scrollTo({
top: 0,
behavior: "smooth",
});
}
}
@ -1154,6 +1177,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 +1243,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 +1449,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 +1474,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 +1499,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 +1542,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 +1563,7 @@ const Partner_Config_Formulaires = (props) => {
onChange={(e) => {
setquestion_question(e.target.value);
}
}
}}
/>
</div>
@ -1509,6 +1583,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 +1699,7 @@ const Partner_Config_Formulaires = (props) => {
{tab_checkbox_choix &&
tab_checkbox_choix.map((choix) => (
<div>
<TextField
value={choix}
autoFocus
margin="dense"
@ -1663,7 +1739,6 @@ const Partner_Config_Formulaires = (props) => {
value={new_checkbox_choix_value}
onChange={(e) => {
setnew_checkbox_choix_value(e.target.value);
}
}
/>
@ -1680,25 +1755,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 +1880,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" }}>
@ -2036,9 +2188,6 @@ const Partner_Config_Formulaires = (props) => {
}, [`& .${gridClasses.cell}`]: {
py: 1,
},
}}
>
<DataGrid
@ -2081,8 +2230,6 @@ const Partner_Config_Formulaires = (props) => {
}}
//sx={datagridSx}
getCellClassName={(params) => {
//field === "order_header_status"
if (params.field === "order_header_status" && String(params.value) == "0") {
return 'cell--status--brouillon';
@ -2152,7 +2299,7 @@ const Partner_Config_Formulaires = (props) => {
}}
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout un formulaire &nbsp;
id='menu_import_participant' name='menu_import_participant' style={{ maxWidth: '20rem' }}>Ajout un formulaire &nbsp;
<IoAddCircleOutline style={{ "fontSize": "x-large", "color": "green" }} />
</Button>
</div>
@ -2234,22 +2381,6 @@ const Partner_Config_Formulaires = (props) => {
/>
</div>
<div className="session_caract"> Message d'introduction <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="detail_config_message_intro"
id="detail_config_message_intro"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_detail_from_message_intro}
/>
</div>
<div className="session_caract"> Commentaire <br />
<TextField
@ -2273,25 +2404,47 @@ const Partner_Config_Formulaires = (props) => {
<Checkbox
name="detail_config_par_defaut_1"
id="detail_config_par_defaut_1"
className="disabled_style"
// className="disabled_style"
checked={true}
// style={{ background: '#ECEFF1' }}
// style={{ background: '#ECEFF1' }}
/>}
{String(p_detail_from_default) !== "1" &&
<Checkbox
name="detail_config_par_defaut_1"
id="detail_config_par_defaut_1"
className="disabled_style"
// className="disabled_style"
checked={false}
// style={{ background: '#ECEFF1' }}
// style={{ background: '#ECEFF1' }}
/>}
</div>
<div className="div_row">
<div className="session_caract"> Message d'introduction <br />
<TextareaAutosize
name="detail_config_message_intro"
id="detail_config_message_intro"
aria-label="minimum height"
minRows={3}
maxRows={5}
className="disabled_style"
style={{
border: "1px solid gainsboro", padding: '2px',
maxHeight: '10rem', minHeight: '8rem', marginBottom: '3rem'
}}
value={p_detail_from_message_intro}
/>
</div>
</div>
<div className="div_row" style={{ "padding": "10px" }}>
@ -2348,9 +2501,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 +2512,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 +2651,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 {
@ -2544,27 +2708,7 @@ const Partner_Config_Formulaires = (props) => {
/>
</div>
<div className="session_caract"> Message d'introduction <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="detail_config_message_intro"
id="detail_config_message_intro"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_detail_from_message_intro}
onChange={(e) => {
setp_detail_from_message_intro(e.target.value);
setconfig_data_changed("1");
}}
multiline={true}
rows={2}
/>
</div>
<div className="session_caract"> Commentaire <br />
<TextField
@ -2591,9 +2735,9 @@ const Partner_Config_Formulaires = (props) => {
<Checkbox
name="detail_config_par_defaut"
id="detail_config_par_defaut"
className="disabled_style"
// className="disabled_style"
checked={true}
// style={{ background: '#ECEFF1' }}
// style={{ background: '#ECEFF1' }}
onChange={(e) => {
if (e.target.checked) {
setp_detail_from_default("1");
@ -2608,9 +2752,9 @@ const Partner_Config_Formulaires = (props) => {
<Checkbox
name="detail_config_par_defaut"
id="detail_config_par_defaut"
className="disabled_style"
// className="disabled_style"
checked={false}
// style={{ background: '#ECEFF1' }}
// style={{ background: '#ECEFF1' }}
onChange={(e) => {
if (e.target.checked) {
setp_detail_from_default("1");
@ -2624,6 +2768,32 @@ const Partner_Config_Formulaires = (props) => {
</div>
<div className="div_row">
<div className="session_caract"> Message d'introduction<br />
<TextareaAutosize
name="detail_config_message_intro"
id="detail_config_message_intro"
aria-label="minimum height"
minRows={3}
maxRows={5}
className="disabled_style"
style={{
border: "1px solid gainsboro", padding: '2px',
maxHeight: '10rem', minHeight: '8rem', marginBottom: '3rem'
}}
value={p_detail_from_message_intro}
onChange={(e) => {
setp_detail_from_message_intro(e.target.value);
setconfig_data_changed("1");
}}
/>
</div>
</div>
</div>
@ -2678,6 +2848,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,
}
))}
@ -2739,7 +2915,7 @@ const Partner_Config_Formulaires = (props) => {
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
<Button variant="contained" className="bton_enreg" onClick={Update_formlaire_data}>Enregistrer les modifications
<Button variant="contained" className="bton_enreg" onClick={Update_formlaire_data}>Enregistrer
</Button>
</div>
@ -2764,7 +2940,7 @@ const Partner_Config_Formulaires = (props) => {
String(add_new_form) === "1" && <div className="div_row">
<div className="session_data">
Ajouter un nouveau formulaire
<h5 style={{ textAlign: "center", paddingTop: '5px', fontFamily: "DM Sans" }} >Ajouter un nouveau formulaire </h5>
<br />
<div className="session_caract"> Code <br />
@ -2854,25 +3030,7 @@ const Partner_Config_Formulaires = (props) => {
/>
</div>
<div className="session_caract"> Message d'introduction <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="detail_config_message_intro"
id="detail_config_message_intro"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_detail_one_from_message_intro}
onChange={(e) => {
setp_detail_one_from_message_intro(e.target.value);
}}
/>
</div>
<div className="session_caract"> Commentaire <br />
@ -2900,20 +3058,48 @@ const Partner_Config_Formulaires = (props) => {
name="detail_config_par_defaut"
id="detail_config_par_defaut"
className="disabled_style"
checked={false}
// className="disabled_style"
checked={p_detail_one_from_default_bool}
onChange={(e) => {
setp_detail_one_from_default_bool(e.target.checked);
if (e.target.checked) {
setp_detail_one_from_default("1");
} else {
setp_detail_one_from_default("0");
}
}}
// style={{ background: '#FFFFFF' }}
// style={{ background: '#FFFFFF' }}
/>
</div>
<div className="div_row">
<div className="session_caract"> Message d'introduction <br />
<TextareaAutosize
name="detail_config_message_intro"
id="detail_config_message_intro"
aria-label="minimum height"
minRows={3}
maxRows={5}
className="disabled_style"
style={{
border: "1px solid gainsboro", padding: '2px',
maxHeight: '10rem', minHeight: '8rem', marginBottom: '3rem'
}}
value={p_detail_one_from_message_intro}
onChange={(e) => {
setp_detail_one_from_message_intro(e.target.value);
}}
/>
</div>
</div>
<div>
<div className="div_row" style={{ "border": "None" }}>
&nbsp;

File diff suppressed because it is too large Load Diff

View File

@ -116,7 +116,7 @@ const Partner_Configuration_Jours_Travail = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -1885,7 +1885,7 @@ const Partner_Configuration_Jours_Travail = (props) => {
<Popup
trigger={
<Button variant="contained" className="bton_enreg" >Enregistrer
<Button variant="contained" className="bton_enreg" style={{maxWidth:'20rem'}}>Enregistrer
</Button>
}
modal
@ -1916,7 +1916,7 @@ const Partner_Configuration_Jours_Travail = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -2361,7 +2361,7 @@ const Partner_Configuration_Jours_Travail = (props) => {
<Popup
trigger={
<Button variant="contained" className="bton_enreg" >Enregistrer
<Button variant="contained" className="bton_enreg" style={{maxWidth:'20rem'}} >Enregistrer
</Button>
}
modal
@ -2392,7 +2392,7 @@ const Partner_Configuration_Jours_Travail = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();

View File

@ -165,7 +165,7 @@ const Partner_Configuration_Session_Steps = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -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}

File diff suppressed because it is too large Load Diff

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