27/07/23 - 17h

recette2
cherif 2023-07-27 17:14:40 +02:00
parent c1cbd82330
commit 4db656694b
8 changed files with 194 additions and 116 deletions

15
package-lock.json generated
View File

@ -54,6 +54,7 @@
"js-cookie": "^3.0.1",
"js-file-download": "^0.4.12",
"js-video-url-parser": "^0.5.1",
"lucide-react": "^0.263.1",
"moment": "^2.29.4",
"mui-datatables": "^4.3.0",
"mui-daterange-picker": "^1.0.5",
@ -24453,6 +24454,14 @@
"es5-ext": "~0.10.2"
}
},
"node_modules/lucide-react": {
"version": "0.263.1",
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.263.1.tgz",
"integrity": "sha512-keqxAx97PlaEN89PXZ6ki1N8nRjGWtDa4021GFYLNj0RgruM5odbpl8GHTExj0hhPq3sF6Up0gnxt6TSHu+ovw==",
"peerDependencies": {
"react": "^16.5.1 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/lz-string": {
"version": "1.4.4",
"license": "WTFPL",
@ -61957,6 +61966,12 @@
"es5-ext": "~0.10.2"
}
},
"lucide-react": {
"version": "0.263.1",
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.263.1.tgz",
"integrity": "sha512-keqxAx97PlaEN89PXZ6ki1N8nRjGWtDa4021GFYLNj0RgruM5odbpl8GHTExj0hhPq3sF6Up0gnxt6TSHu+ovw==",
"requires": {}
},
"lz-string": {
"version": "1.4.4"
},

View File

@ -49,6 +49,7 @@
"js-cookie": "^3.0.1",
"js-file-download": "^0.4.12",
"js-video-url-parser": "^0.5.1",
"lucide-react": "^0.263.1",
"moment": "^2.29.4",
"mui-datatables": "^4.3.0",
"mui-daterange-picker": "^1.0.5",

View File

@ -16,7 +16,10 @@ import parse from 'html-react-parser'
import { BsEye, BsFileText } from "react-icons/bs";
import { useHistory } from "react-router-dom";
import axios from "axios";
import { CiCoffeeBean } from "react-icons/ci";
import { CiCoffeeBean, CiDesktop, CiFileOff } from "react-icons/ci";
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
//import { LuScreenShare, LuScreenShareOff } from "react-icons/lu";
const DistplayPartnerTraningsPage = (props) => {
@ -28,10 +31,6 @@ const DistplayPartnerTraningsPage = (props) => {
{ value: 'title', label: 'Titre' },
{ value: 'certif', label: 'Certification' }
]
const [selectedfilt1, setselectedfilt1] = useState("");
const [selectedfilt2, setselectedfilt2] = useState("");
const [selectedfilt3, setselectedfilt3] = useState("");
@ -186,6 +185,7 @@ const DistplayPartnerTraningsPage = (props) => {
}
const columns = [
{ field: 'id', headerName: 'id', hide: true },
{ field: 'lms_class_code', headerName: 'lms_class_code', hide: true },
{ field: 'zone_diffusion', headerName: 'zone_diffusion', hide: true },
{ field: 'internal_url', headerName: 'internal_url', hide: true },
{ field: 'external_code', headerName: 'Code Formation', width: 200, hideable: false, flex: 1 },
@ -253,56 +253,64 @@ const DistplayPartnerTraningsPage = (props) => {
field: "push_to_lms", headerName: 'Push Elearning',
renderCell: (cellValues) => {
return (
<nav>
<Popup
trigger={<Button
onClick={(event) => {
handlepush_to_lms(event, cellValues);
}}
<Popup
trigger={<Button
onClick={(event) => {
handlepush_to_lms(event, cellValues);
}}
>
{cellValues.row.lms_class_code && String(cellValues.row.lms_class_code).length > 2 && <CiFileOff />}
{cellValues.row.lms_class_code && String(cellValues.row.lms_class_code).length <= 2 && <CiDesktop />}
{!cellValues.row.lms_class_code && <CiDesktop />}
</Button>}
modal
nested
position="center center"
>
<CiCoffeeBean />
</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">
{' '}
/!\ Important : Confirmer la publication de la formation dans l'eapce E-Learning
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
handlepush_to_lms(event, cellValues);
close();
}}> Valider </button>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
/!\ Important : Confirmer la publication de la formation dans l'eapce E-Learning.
Vous allez écraser d'eventuelles informations déjà présente dans le e-Learning, pour cette formation.
</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) => {
handlepush_to_lms(event, cellValues);
close();
}}
>
Annuler
</button>
}}> 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>
</div>
)}
</Popup>
)}
</Popup>
</nav>
);
}
@ -649,12 +657,22 @@ const DistplayPartnerTraningsPage = (props) => {
}
const [isLoading, setLoading] = useState();
const [handlepush_to_lms_api, sethandlepush_to_lms_api] = useState("");
const [handlepush_to_lms_result, sethandlepush_to_lms_result] = useState("");
const [handlepush_to_lms_message, sethandlepush_to_lms_message] = useState("");
function handlepush_to_lms(event, cellValues) {
if (cellValues.row.lms_class_code && String(cellValues.row.lms_class_code).length > 2) {
alert(" Cette formation est déjà publiée sur la plateforme de E-Learning");
return;
}
setLoading(true);
//console.log(" ### event.target.value = ", event.target.value);
const formData = new FormData();
const url = process.env.REACT_APP_API_URL + "myclass/api/Push_Class_To_MySy_LMS/";
@ -671,7 +689,8 @@ const DistplayPartnerTraningsPage = (props) => {
sethandlepush_to_lms_api("true");
sethandlepush_to_lms_result(res.data.message);
alert(res.data.message );
setLoading(false);
alert(res.data.message);
}
@ -684,12 +703,14 @@ const DistplayPartnerTraningsPage = (props) => {
sethandlepush_to_lms_api("false");
sethandlepush_to_lms_message(res.data.message);
alert("Erreur : "+res.data.message );
setLoading(false);
alert("Erreur : " + res.data.message);
}
}).catch((error) => {
console.warn('Erro handlepush_to_lms = ', error);
sethandlepush_to_lms_api("false");
setLoading(false);
})
}
@ -697,13 +718,9 @@ const DistplayPartnerTraningsPage = (props) => {
return (
<div className='displaypartnertrainingpagination'>
{/*String(myApiResponse) === String("False") && <div className="parter_div_droite">
<div className="koUpdateData"> Impossible de contacter l'hote distant </div>
</div>
*/}
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
{updatetraining && <div>
@ -838,6 +855,7 @@ const DistplayPartnerTraningsPage = (props) => {
price: JSON.parse(item).price,
description: parse((JSON.parse(item).description).replace(/(<([^>]+)>)/ig, '')),
published: JSON.parse(item).published,
lms_class_code: JSON.parse(item).lms_class_code,
}
))}

View File

@ -36,7 +36,8 @@ import Pricing from "./Pricing";
import {
FcHome, FcButtingIn, FcDepartment, FcBullish, FcAddDatabase, FcFolder,
FcList, FcGraduationCap, FcMultipleDevices, FcCurrencyExchange,
FcMoneyTransfer, FcFeedback, FcKey, FcVideoCall, FcSettings
FcMoneyTransfer, FcFeedback, FcKey, FcVideoCall, FcSettings,
FcBusinesswoman, FcServices, FcCollect, FcCandleSticks
} from "react-icons/fc";
//import { FcHome} from "react-icons/fc";
@ -689,66 +690,45 @@ const Partner = (props) => {
{String(menu) !== "statistique" && <div className="sousmenu" onClick={DisplayStat}> <FcBullish className="icone_menu" /> STATISTIQUES</div>}
{String(menu) === "statistique" && <div className="sousmenu_selected" onClick={DisplayStat}> <FcBullish className="icone_menu" /> STATISTIQUES</div>}
<hr className="my_hr" />
<div class="separator"> Mes Clients </div>
<hr />
{String(deplie_mes_clients) === "1" && <div className="sousmenu sousmenu" style={{ "color": "white", "textAlign": "center" }} onClick={ftion_deplie_mes_clients}>
Mes Clients <img src={downarrow} className="hebergement_icone" />
<div>
<hr className="my_hr" />
{String(menu) !== "mes_clients" && <div className="sousmenu" onClick={mes_clients_func}>&nbsp;&nbsp;<FcBusinesswoman className="icone_menu" />&nbsp;MES CLIENTS</div>}
{String(menu) === "mes_clients" && <div className="sousmenu_selected" onClick={mes_clients_func}> &nbsp;&nbsp; <FcBusinesswoman className="icone_menu" />&nbsp;MES CLIENTS</div>}
</div>
<div>
<hr className="my_hr" />
{String(menu) !== "mes_devis" && <div className="sousmenu" onClick={mes_devis_func}>&nbsp;&nbsp;<FcCandleSticks className="icone_menu" />&nbsp;MES DEVIS</div>}
{String(menu) === "mes_devis" && <div className="sousmenu_selected" onClick={mes_devis_func}> &nbsp;&nbsp; <FcCandleSticks className="icone_menu" />&nbsp;MES DEVIS</div>}
</div>
<div>
<hr className="my_hr" />
{String(menu) !== "mes_cmd" && <div className="sousmenu" onClick={mes_cmd_func}>&nbsp;&nbsp;<FcCollect className="icone_menu" />&nbsp;MES COMMANDES</div>}
{String(menu) === "mes_cmd" && <div className="sousmenu_selected" onClick={mes_cmd_func}> &nbsp;&nbsp; <FcCollect className="icone_menu" />&nbsp;MES COMMANDES</div>}
</div>
<div class="separator"> Espace E-Learning </div>
{String(has_partner_lms_url) === "1" && <div className="sousmenu" onClick={(e) => {
e.preventDefault();
window.open(
partner_lms_url,
'_blank'
);
}}>&nbsp;&nbsp;<FcVideoCall className="icone_menu" />&nbsp;MON HEBERGEMENT </div>}
{String(has_partner_lms_url) === "1" && <div>
<hr className="my_hr" />
{String(menu) !== "statistique" && <div className="sousmenu" onClick={DisplaySetUpLMS}>&nbsp;&nbsp;<FcServices className="icone_menu" />&nbsp;CONFIGURATION</div>}
{String(menu) === "statistique" && <div className="sousmenu_hebergement_lms" onClick={DisplaySetUpLMS}> &nbsp;&nbsp; <FcServices className="icone_menu" />&nbsp;CONFIGURATION</div>}
</div>}
<hr className="my_hr" />
{String(deplie_mes_clients) !== "1" &&
<div className="sousmenu" style={{ "color": "white", "textAlign": "center" }} >
<nav onClick={ftion_deplie_mes_clients}> Mes Clients <img src={uparrow} /> </nav>
<hr className="my_hr" />
<div>
<hr className="my_hr" />
{String(menu) !== "mes_clients" && <div className="sousmenu" onClick={mes_clients_func}>&nbsp;&nbsp;<FcSettings className="icone_menu" />&nbsp;MES CLIENTS</div>}
{String(menu) === "mes_clients" && <div className="sousmenu_selected" onClick={mes_clients_func}> &nbsp;&nbsp; <FcSettings className="icone_menu" />&nbsp;MES CLIENTS</div>}
</div>
<div>
<hr className="my_hr" />
{String(menu) !== "mes_devis" && <div className="sousmenu" onClick={mes_devis_func}>&nbsp;&nbsp;<FcSettings className="icone_menu" />&nbsp;MES DEVIS</div>}
{String(menu) === "mes_devis" && <div className="sousmenu_selected" onClick={mes_devis_func}> &nbsp;&nbsp; <FcSettings className="icone_menu" />&nbsp;MES DEVIS</div>}
</div>
<div>
<hr className="my_hr" />
{String(menu) !== "mes_cmd" && <div className="sousmenu" onClick={mes_cmd_func}>&nbsp;&nbsp;<FcSettings className="icone_menu" />&nbsp;MES COMMANDES</div>}
{String(menu) === "mes_cmd" && <div className="sousmenu_selected" onClick={mes_cmd_func}> &nbsp;&nbsp; <FcSettings className="icone_menu" />&nbsp;MES COMMANDES</div>}
</div>
</div>}
<hr />
{String(deplie_hebergement) === "1" && <div className="sousmenu sousmenu" style={{ "color": "white", "textAlign": "center" }} onClick={ftion_deplie_hebergement}>
Espace E-Learning <img src={downarrow} className="hebergement_icone" />
</div>}
<hr className="my_hr" />
{String(deplie_hebergement) !== "1" &&
<div className="nom_prenom sousmenu" style={{ "color": "white", "textAlign": "center" }} >
<nav onClick={ftion_deplie_hebergement}> Espace E-Learning <img src={uparrow} className="hebergement_icone" /> </nav>
<hr className="my_hr" />
{String(has_partner_lms_url) === "1" && <div className="sousmenu" onClick={(e) => {
e.preventDefault();
window.open(
partner_lms_url,
'_blank'
);
}}>&nbsp;&nbsp;<FcVideoCall className="icone_menu" />&nbsp;MON HEBERGEMENT </div>}
{String(has_partner_lms_url) === "1" && <div>
<hr className="my_hr" />
{String(menu) !== "statistique" && <div className="sousmenu" onClick={DisplaySetUpLMS}>&nbsp;&nbsp;<FcSettings className="icone_menu" />&nbsp;CONFIGURATION</div>}
{String(menu) === "statistique" && <div className="sousmenu_hebergement_lms" onClick={DisplaySetUpLMS}> &nbsp;&nbsp; <FcSettings className="icone_menu" />&nbsp;CONFIGURATION</div>}
</div>}
</div>}
<hr className="my_hr" />

View File

@ -197,6 +197,15 @@ const Partner_Client = (props) => {
<div className="div_row">
<div style={{ height: 500, width: '100%' }}>
<div className="div_row">
<Button variant="outlined" onClick={"submenu_import_participant"} className="menu_import_participant bton_import_excel" style={{
"background": "#c8cfd5",
"color": "black", "width": "auto"
}}
id='menu_import_participant' name='menu_import_participant'>Choisir un fichier et Importer des clients &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'><img src={participants} alt="ajout un client" className="icon_plus" /> &nbsp;

View File

@ -1,4 +1,26 @@
.displaypartnertrainingpagination {
.mysy_spinner{
border-radius: 5px;
border: 1px solid black;
opacity: 100%;
}
.loader-container {
width: 100%;
height: 100vh;
display: flex;
//justify-content: center;
align-items: center;
left: -5%;
position: fixed;
z-index: 1;
top: 0px;
background: white;
background-color: transparent;
}
.css-qc6sy-singleValue {
color: white !important;
}

View File

@ -2000,6 +2000,28 @@
border-bottom-right-radius: 5px;
}
.separator {
display: flex;
align-items: center;
text-align: center;
margin-bottom: 0.5rem !important;
}
.separator::before,
.separator::after {
content: '';
flex: 1;
border-bottom: 1px solid #e0e0e0;
}
.separator:not(:empty)::before {
margin-right: .35em;
}
.separator:not(:empty)::after {
margin-left: .35em;
}
}
.mce-content-body {

View File

@ -111,6 +111,17 @@
.client_grid>div:hover {
box-shadow: 5px 1px 5px 1px rgb(0 0 0 / 25%);
}
.icon_excel {
width: 6%;
}
.bton_import_excel {
background: #c8cfd5;
color: black;
width: 30% !important;
}
}
}