22/05/23 - 23h
parent
397afe0652
commit
59312c18c9
File diff suppressed because it is too large
Load Diff
|
@ -15,6 +15,7 @@
|
|||
"@mantine/hooks": "^4.2.10",
|
||||
"@mantine/rte": "^4.2.10",
|
||||
"@material-ui/core": "^4.12.4",
|
||||
"@material/tooltip": "^14.0.0",
|
||||
"@mui/icons-material": "^5.4.2",
|
||||
"@mui/material": "^5.4.2",
|
||||
"@mui/x-data-grid": "^5.5.1",
|
||||
|
@ -42,6 +43,7 @@
|
|||
"gatsby-plugin-cookie-gdpr-axeptio": "^1.0.2",
|
||||
"google-map-react": "^2.1.10",
|
||||
"html-react-parser": "^2.0.0",
|
||||
"install": "^0.13.0",
|
||||
"js-cookie": "^3.0.1",
|
||||
"js-file-download": "^0.4.12",
|
||||
"js-video-url-parser": "^0.5.1",
|
||||
|
@ -49,6 +51,7 @@
|
|||
"mui-daterange-picker": "^1.0.5",
|
||||
"next": "^12.0.10",
|
||||
"next-link": "^2.0.0",
|
||||
"npm": "^9.6.7",
|
||||
"popups": "^1.1.3",
|
||||
"powerbi-client": "^2.19.1",
|
||||
"powerbi-client-react": "^1.3.3",
|
||||
|
@ -111,6 +114,7 @@
|
|||
"react-swipeable-views": "^0.14.0",
|
||||
"react-time-picker": "^4.5.0",
|
||||
"react-toastify": "^9.0.0",
|
||||
"react-tooltip": "^5.13.1",
|
||||
"react-use-cookie": "^1.3.0",
|
||||
"react-video-js-player": "^1.1.1",
|
||||
"reactjs-popup": "^2.0.5",
|
||||
|
|
|
@ -22,6 +22,9 @@ import { IoArrowUndoCircle } from "react-icons/io5";
|
|||
import { GrUserAdmin, GrOrderedList } from "react-icons/gr";
|
||||
import parse from 'html-react-parser';
|
||||
|
||||
import 'react-tooltip/dist/react-tooltip.css'
|
||||
import { Tooltip } from 'react-tooltip'
|
||||
|
||||
import GestionAdministrative from "./GestionAdministrative";
|
||||
|
||||
const AddClassManual = (props) => {
|
||||
|
@ -32,6 +35,7 @@ const AddClassManual = (props) => {
|
|||
const [mypublished, setmypublished] = useState("");
|
||||
const [mydistance, setmydistance] = useState("");
|
||||
const [mytrainingsupport, setmytrainingsupport] = useState("n/a");
|
||||
const [mytrainingdurationunit, setmytrainingdurationunit] = useState("");
|
||||
const [mycpf, setmycpf] = useState("");
|
||||
const [mycertif, setmycertif] = useState("");
|
||||
const [importmessage, setimportmessage] = useState("");
|
||||
|
@ -69,6 +73,15 @@ const AddClassManual = (props) => {
|
|||
|
||||
}
|
||||
|
||||
const handleChangeDurationUnit = (event) => {
|
||||
const name = event.target.name;
|
||||
const value = event.target.value;
|
||||
|
||||
setmytrainingdurationunit(value);
|
||||
setdatamodification("1");
|
||||
|
||||
}
|
||||
|
||||
const handleChangecpf = (event) => {
|
||||
const name = event.target.name;
|
||||
const value = event.target.value;
|
||||
|
@ -149,6 +162,30 @@ const AddClassManual = (props) => {
|
|||
|
||||
];
|
||||
|
||||
const duration_unit_list = [
|
||||
{
|
||||
value: 'heure',
|
||||
label: 'Heures',
|
||||
},
|
||||
|
||||
{
|
||||
value: 'jour',
|
||||
label: 'Jours',
|
||||
},
|
||||
{
|
||||
value: 'semaine',
|
||||
label: 'Semaines',
|
||||
},
|
||||
{
|
||||
value: 'mois',
|
||||
label: 'Mois',
|
||||
},
|
||||
{
|
||||
value: 'user_rythme',
|
||||
label: 'Rythme stagiaire',
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
const publiee = [
|
||||
{
|
||||
|
@ -164,9 +201,6 @@ const AddClassManual = (props) => {
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function handleOnClose(event) {
|
||||
setShowModal(false);
|
||||
}
|
||||
|
@ -374,6 +408,15 @@ const AddClassManual = (props) => {
|
|||
setmytrainingsupport("n/a");
|
||||
}
|
||||
|
||||
if (mylocaltraining.duration_unit) {
|
||||
setmytrainingdurationunit(mylocaltraining.duration_unit);
|
||||
//console.log(" ### duration_unit = ", mylocaltraining.duration_unit);
|
||||
}
|
||||
else {
|
||||
setmytrainingdurationunit("");
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (mylocaltraining.certif) {
|
||||
setmycertif(mylocaltraining.certif);
|
||||
|
@ -391,7 +434,7 @@ const AddClassManual = (props) => {
|
|||
|
||||
if (mylocaltraining.domaine) {
|
||||
setmytrainingdomaine(mylocaltraining.domaine);
|
||||
console.log(" ### mylocaltraining.domaine = ", mylocaltraining.domaine);
|
||||
//console.log(" ### mylocaltraining.domaine = ", mylocaltraining.domaine);
|
||||
}
|
||||
else
|
||||
setmytrainingdomaine("");
|
||||
|
@ -399,7 +442,7 @@ const AddClassManual = (props) => {
|
|||
|
||||
if (mylocaltraining.metier) {
|
||||
setmytrainingmetier(mylocaltraining.metier);
|
||||
console.log(" ### mylocaltraining.metier = ", mylocaltraining.metier);
|
||||
//console.log(" ### mylocaltraining.metier = ", mylocaltraining.metier);
|
||||
}
|
||||
else
|
||||
setmytrainingmetier("");
|
||||
|
@ -656,6 +699,7 @@ const AddClassManual = (props) => {
|
|||
formData.append('distantiel', distentiel);
|
||||
formData.append('price', price);
|
||||
formData.append('duration', duree);
|
||||
formData.append('duration_unit', mytrainingdurationunit);
|
||||
formData.append('url', url);
|
||||
formData.append('class_inscription_url', class_inscription_url);
|
||||
formData.append('mots_cle', mots_cle);
|
||||
|
@ -1369,7 +1413,7 @@ const AddClassManual = (props) => {
|
|||
|
||||
<TextField
|
||||
name="duree"
|
||||
label="Duree (jour)"
|
||||
label="Duree"
|
||||
type="number"
|
||||
InputLabelProps={{
|
||||
shrink: true,
|
||||
|
@ -1378,6 +1422,32 @@ const AddClassManual = (props) => {
|
|||
className="disabled_style"
|
||||
/>
|
||||
</div>
|
||||
<Tooltip id="my-tooltip11" />
|
||||
<a data-tooltip-id="my-tooltip11" data-tooltip-content="Les durée autorisées sont : 'heure', 'jour', 'semaine', 'mois', 'annee', 'rythme participant'">
|
||||
<div className="training_caract">
|
||||
<TextField
|
||||
name="duration_unit"
|
||||
id="duration_unit"
|
||||
select
|
||||
label="Unité de durée"
|
||||
value={mytrainingdurationunit}
|
||||
InputLabelProps={{
|
||||
shrink: true,
|
||||
}}
|
||||
onChange={handleChangeDurationUnit}
|
||||
disabled={false}
|
||||
className="disabled_style"
|
||||
>
|
||||
|
||||
{duration_unit_list.map((option) => (
|
||||
<MenuItem key={option.value} value={option.value} >
|
||||
{option.label} <br />
|
||||
</MenuItem>
|
||||
))}
|
||||
|
||||
</TextField>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<div className="training_caract">
|
||||
<TextField
|
||||
|
|
|
@ -332,7 +332,7 @@ const DisplayDetailClass_new_v2 = (props) => {
|
|||
|
||||
axios.post(myurl, form).then(res => {
|
||||
console.log(" In Display res.data.status = " + res.data.status);
|
||||
//console.log(" In Display res.data.message = " + res.data.message);
|
||||
//console.log(" In Display res.data.message = " + res.data.message);
|
||||
if (String(res.data.status) === String("true")) {
|
||||
|
||||
if (res.data.message.length > 0) {
|
||||
|
@ -1172,14 +1172,18 @@ const DisplayDetailClass_new_v2 = (props) => {
|
|||
</div>
|
||||
|
||||
|
||||
{String(DetailTraining["price"]) && String(DetailTraining["price"]) === String("0") &&
|
||||
<div className="mob_price">Gratuit
|
||||
</div>
|
||||
}
|
||||
|
||||
{DetailTraining["price"] && (!DetailTraining.business_prices || Object.keys(DetailTraining.business_prices).length <= 0)
|
||||
{String(DetailTraining["price"]) && String(DetailTraining["price"]) !== String("0") && String(DetailTraining["price"]) === String("0") && (!DetailTraining.business_prices || Object.keys(DetailTraining.business_prices).length <= 0)
|
||||
&&
|
||||
<div className="mob_price">
|
||||
{String(DetailTraining["price"])} € HT
|
||||
</div>}
|
||||
|
||||
{DetailTraining["price"] && DetailTraining.business_prices && Object.keys(DetailTraining.business_prices).length > 0
|
||||
{String(DetailTraining["price"]) && String(DetailTraining["price"]) !== String("0") && DetailTraining.business_prices && Object.keys(DetailTraining.business_prices).length > 0
|
||||
&& <div className="mob_price">
|
||||
<nav className="discounted_price">{String(DetailTraining.business_prices[0].discounted_price)} € HT</nav>
|
||||
|
||||
|
@ -1263,10 +1267,17 @@ const DisplayDetailClass_new_v2 = (props) => {
|
|||
Durée :
|
||||
</div>
|
||||
|
||||
<div className="mob_caracteristic_list_title_desc_desc">
|
||||
{DetailTraining["duration"]} {DetailTraining["duration_unit"]} (s)
|
||||
</div>
|
||||
{String(DetailTraining["duration_unit"]) !== "user_rythme" &&
|
||||
<div className="mob_caracteristic_list_title_desc_desc">
|
||||
{DetailTraining["duration"]} {DetailTraining["duration_unit"]} (s)
|
||||
</div>
|
||||
}
|
||||
|
||||
{String(DetailTraining["duration_unit"]) === "user_rythme" &&
|
||||
<div className="mob_caracteristic_list_title_desc_desc">
|
||||
A votre rythme
|
||||
</div>
|
||||
}
|
||||
|
||||
</div>
|
||||
|
||||
|
@ -2002,10 +2013,16 @@ const DisplayDetailClass_new_v2 = (props) => {
|
|||
|
||||
<div className="block_sticky_info">
|
||||
|
||||
{DetailTraining["price"] && (!DetailTraining.business_prices || Object.keys(DetailTraining.business_prices).length <= 0)
|
||||
&& <div className="block_sticky_info_price"> {String(DetailTraining["price"])} HT </div>}
|
||||
|
||||
{DetailTraining["price"] && DetailTraining.business_prices && Object.keys(DetailTraining.business_prices).length > 0
|
||||
{String(DetailTraining["price"]) && String(DetailTraining["price"]) === String("0") &&
|
||||
<div className="block_sticky_info_price">Gratuit
|
||||
</div>
|
||||
}
|
||||
|
||||
{String(DetailTraining["price"]) && String(DetailTraining["price"]) !== String("0") && (!DetailTraining.business_prices || Object.keys(DetailTraining.business_prices).length <= 0)
|
||||
&& <div className="block_sticky_info_price"> {String(DetailTraining["price"])} HT </div>}
|
||||
|
||||
{String(DetailTraining["price"]) && String(DetailTraining["price"]) !== String("0") && DetailTraining.business_prices && Object.keys(DetailTraining.business_prices).length > 0
|
||||
&& <div className="block_sticky_info_price">
|
||||
<nav className="discounted_price">{String(DetailTraining.business_prices[0].discounted_price)} € HT</nav>
|
||||
|
||||
|
@ -2084,12 +2101,19 @@ const DisplayDetailClass_new_v2 = (props) => {
|
|||
<div className="block_sticky_info_caracteristique_list_title_desc_title">
|
||||
Durée :
|
||||
</div>
|
||||
{String(DetailTraining["duration_unit"]) !== "user_rythme" &&
|
||||
<div className="block_sticky_info_caracteristique_list_title_desc_desc">
|
||||
{DetailTraining["duration"]} {DetailTraining["duration_unit"]} (s)
|
||||
|
||||
<div className="block_sticky_info_caracteristique_list_title_desc_desc">
|
||||
{DetailTraining["duration"]} {DetailTraining["duration_unit"]} (s)
|
||||
</div>
|
||||
}
|
||||
|
||||
</div>
|
||||
{String(DetailTraining["duration_unit"]) === "user_rythme" &&
|
||||
<div className="block_sticky_info_caracteristique_list_title_desc_desc">
|
||||
A votre rythme
|
||||
|
||||
</div>
|
||||
}
|
||||
|
||||
</div>
|
||||
</li>
|
||||
|
|
|
@ -210,6 +210,11 @@ const DistplayPartnerTraningsPage = (props) => {
|
|||
|
||||
|
||||
function Visualiser(event, cellValues) {
|
||||
// On ne visualise que les formations publiées
|
||||
if( cellValues.row.published !== "1" ){
|
||||
alert(" Vous devez publier la formation pour la visualiser ");
|
||||
return;
|
||||
}
|
||||
window.open(
|
||||
"/Display-Detail-formation/" + cellValues.row.internal_url,
|
||||
'_blank'
|
||||
|
|
|
@ -409,6 +409,16 @@ const Formation = (props) => {
|
|||
{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>
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,10 @@ import { PaymentElement } from '@stripe/react-stripe-js';
|
|||
import Popup from 'reactjs-popup';
|
||||
import SendIcon from '@mui/icons-material/Send';
|
||||
|
||||
import 'react-tooltip/dist/react-tooltip.css'
|
||||
import { Tooltip } from 'react-tooltip'
|
||||
|
||||
|
||||
const stripePromise = loadStripe('pk_test_51LUUfAAbmaEugrFTI25uZBD3IFjbtaL6jUfRV83diDf7nco8worna4NGKhMHbPP71WCwT5EHFRdDNatxPrJWwgZ300kgH5EO4p');
|
||||
//const stripePromise_PROD = loadStripe('pk_live_51LUUfAAbmaEugrFTyfNe4Dj0vbxc5qXQqNs0rztjAKy8oSlc5EEQyJGjA8Z5kXmP2gvUMcYLUBYCIyWWzLCw59RY00PtGInkVf');
|
||||
|
||||
|
@ -561,8 +565,14 @@ function HebergementLms(props) {
|
|||
id='menu_import_formation' name='menu_import_formation'>Choisir une image <br />
|
||||
|
||||
</Button><br />
|
||||
<nav className="koUpdateData" style={{ "color": "orange" }}> <i> Important : Taille du logo : longueur entre 140px et 250px et largeur entre 60px et 150px, au format PNG <br />
|
||||
Le nom du fichier ne contient que des caractères alphanumériques </i> </nav>
|
||||
<nav className="koUpdateData" style={{ "color": "orange" }}>
|
||||
<Tooltip id="tooltip_2" />
|
||||
|
||||
<a data-tooltip-id="tooltip_2" data-tooltip-content="Respecter ces critères vous aide à avoir un meilleur affichage">
|
||||
<i> Important : Taille du logo : longueur entre 140px et 250px et largeur entre 60px et 150px, au format PNG <br />
|
||||
Le nom du fichier ne contient que des caractères alphanumériques </i>
|
||||
</a>
|
||||
</nav>
|
||||
{logo_file_name && <nav className="okUpdateData"><i>{logo_file_name}</i></nav>}
|
||||
<input type="file"
|
||||
accept=".png"
|
||||
|
@ -627,8 +637,14 @@ function HebergementLms(props) {
|
|||
id='menu_import_formation' name='menu_import_formation'>Choisir une image bannière <br />
|
||||
|
||||
</Button><br />
|
||||
<nav className="koUpdateData" style={{ "color": "orange" }}> <i> Important : Taille de la bannière : longueur entre 1500px et 1930px et largeur entre 150px et 195px, au format PNG <br />
|
||||
Le nom du fichier ne contient que des caractères alphanumériques </i> </nav>
|
||||
<nav className="koUpdateData" style={{ "color": "orange" }}>
|
||||
<Tooltip id="tooltip_1" />
|
||||
|
||||
<a data-tooltip-id="tooltip_1" data-tooltip-content="Respecter ces critères vous aide à avoir un meilleur affichage">
|
||||
<i> Important : Taille de la bannière : longueur entre 1500px et 1930px et largeur entre 150px et 195px, au format PNG <br />
|
||||
Le nom du fichier ne contient que des caractères alphanumériques </i>
|
||||
</a>
|
||||
</nav>
|
||||
|
||||
{bg_file_name && <nav className="okUpdateData"><i>{bg_file_name}</i></nav>}
|
||||
<input type="file"
|
||||
|
|
|
@ -26,7 +26,7 @@ import * as V from 'victory';
|
|||
import { VictoryBar, VictoryLine, VictoryScatter, VictoryChart } from 'victory';
|
||||
import Canvas from 'react-canvas-js'
|
||||
|
||||
import { ResponsiveContainer, LineChart, Line, BarChart, Bar, CartesianGrid, XAxis, YAxis, Tooltip, Legend } from 'recharts';
|
||||
import { ResponsiveContainer, LineChart, Line, BarChart, Bar, CartesianGrid, XAxis, YAxis, Legend } from 'recharts';
|
||||
|
||||
import Chart from 'react-apexcharts'
|
||||
import 'react-date-range/dist/styles.css'; // main style file
|
||||
|
@ -52,7 +52,8 @@ import {
|
|||
useElements,
|
||||
} from '@stripe/react-stripe-js';
|
||||
|
||||
|
||||
import 'react-tooltip/dist/react-tooltip.css'
|
||||
import { Tooltip } from 'react-tooltip'
|
||||
|
||||
// pour le payement stripe : https://stripe.com/docs/payments/quickstart?client=react&lang=python
|
||||
const stripePromise = loadStripe('pk_test_51LUUfAAbmaEugrFTI25uZBD3IFjbtaL6jUfRV83diDf7nco8worna4NGKhMHbPP71WCwT5EHFRdDNatxPrJWwgZ300kgH5EO4p');
|
||||
|
@ -892,15 +893,20 @@ Cette fonction recuperer les stats des TOP 5 formations sur la periode saisie pa
|
|||
|
||||
<h2> cartouche formaion </h2>
|
||||
|
||||
<Tooltip id="my-tooltip" />
|
||||
|
||||
<a data-tooltip-id="my-tooltip" data-tooltip-content="Hello world!">
|
||||
info bull infobulle ◕‿‿◕
|
||||
</a>
|
||||
|
||||
<button onClick={loading} id="finalise"> loading .....</button>
|
||||
<div>
|
||||
|
||||
{isLoading && <div className="loader-container">
|
||||
{isLoading && <div className="loader-container">
|
||||
|
||||
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
|
||||
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
|
||||
|
||||
</div>}
|
||||
</div>}
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -24,6 +24,8 @@ const NotFound = () => {
|
|||
|
||||
|
||||
<div className="div_mobile">
|
||||
<br/>
|
||||
<br/>
|
||||
<div className="nom_prenom"> Cette formation n'est pas active ou n'existe pas.</div>
|
||||
<div className="nom_prenom"> <a href={process.env.REACT_APP_BASE_URL}> Retour vers le moteur de recherche </a> </div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue