10/03/2025 - 13h
parent
6f197dbdbf
commit
b0b2108cae
|
@ -12,6 +12,13 @@
|
|||
<priority>1.0000</priority>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://mysy-training.com/</loc>
|
||||
<lastmod>2025-02-16T11:35:41+00:00</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
<priority>1.0000</priority>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://www.mysy-training.com/fonctionnalites</loc>
|
||||
<lastmod>2025-02-16T11:35:41+00:00</lastmod>
|
||||
|
|
26
src/App.js
26
src/App.js
|
@ -223,6 +223,17 @@ function App() {
|
|||
<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
|
||||
|
||||
<Route path="/ContactezNous" exact component={New_Contact_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} />
|
||||
|
||||
|
@ -233,6 +244,15 @@ function App() {
|
|||
<Route path="/fonctionnalites/" exact component={New_Fonctionnalite_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} />
|
||||
<Route path="/QuiSommesNous_v3" exact component={New_A_Propos_2025} />
|
||||
<Route path="/qui-sommes-nous" exact component={New_A_Propos_2025} />
|
||||
|
||||
*/}
|
||||
|
||||
<Route path="/" exact component={New_Home_Page_2025} />
|
||||
|
||||
|
||||
|
@ -260,12 +280,6 @@ function App() {
|
|||
<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="/QuiSommesNous" exact component={New_A_Propos_2025} />
|
||||
<Route path="/QuiSommesNous_v3" exact component={New_A_Propos_2025} />
|
||||
<Route path="/qui-sommes-nous" exact component={New_A_Propos_2025} />
|
||||
<Route path="/ContactezNous" exact component={New_Contact_2025} />
|
||||
|
||||
|
||||
|
||||
|
||||
<Route path="/DeleteUserAccount/:token" exact component={DeleteUserAccount} />
|
||||
|
|
|
@ -70,8 +70,8 @@ import RadioGroup from '@mui/material/RadioGroup';
|
|||
import FormControlLabel from '@mui/material/FormControlLabel';
|
||||
import FormControl from '@mui/material/FormControl';
|
||||
import FormLabel from '@mui/material/FormLabel';
|
||||
|
||||
import allLocales from '@fullcalendar/core/locales-all'
|
||||
import { FaUserPen } from "react-icons/fa6";
|
||||
import allLocales from '@fullcalendar/core/locales-all';
|
||||
import listPlugin from '@fullcalendar/list';
|
||||
import multiMonthPlugin from '@fullcalendar/multimonth'
|
||||
|
||||
|
@ -2484,7 +2484,7 @@ const DisplayPartnerSession = (props) => {
|
|||
|
||||
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();
|
||||
const [Get_List_Partner_Clients_result, setGet_List_Partner_Clients_result] = useState([]);
|
||||
function Get_List_Partner_Clients(event) {
|
||||
|
||||
var form = new FormData();
|
||||
|
@ -3338,6 +3338,62 @@ const DisplayPartnerSession = (props) => {
|
|||
})
|
||||
}
|
||||
|
||||
const [Update_PresInsc_Data_With_Nb_Personne_By_Client_api, setUpdate_PresInsc_Data_With_Nb_Personne_By_Client_api] = useState();
|
||||
const [Update_PresInsc_Data_With_Nb_Personne_By_Client_message, setUpdate_PresInsc_Data_With_Nb_Personne_By_Client_message] = useState();
|
||||
const [Update_PresInsc_Data_With_Nb_Personne_By_Client_result, setUpdate_PresInsc_Data_With_Nb_Personne_By_Client_result] = useState();
|
||||
function Update_PresInsc_Data_With_Nb_Personne_By_Client() {
|
||||
|
||||
|
||||
var form = new FormData();
|
||||
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
|
||||
|
||||
// console.log(" #### local_liste_class = ", local_liste_class)
|
||||
|
||||
const stored_cookie = getCookie('tokenmysypart');
|
||||
form.append("token", stored_cookie);
|
||||
form.append("client_id", p_maj_preinsc_client_id);
|
||||
form.append("session_id", selected_session_id);
|
||||
form.append("max_presinscrit", p_maj_preinsc_nb_participant);
|
||||
|
||||
|
||||
|
||||
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Prepare_request_For_Preinsciption_Creation_By_Customer/";
|
||||
setLoading(true);
|
||||
axios.post(myurl, form).then(res => {
|
||||
setLoading(false);
|
||||
//console.log(" In Update_PresInsc_Data_With_Nb_Personne_By_Client res.data.status = " + res.data.status);
|
||||
//console.log(" In Update_PresInsc_Data_With_Nb_Personne_By_Client res.data.message r_class = " + res.data.message);
|
||||
|
||||
if (String(res.data.status) === String("true")) {
|
||||
setUpdate_PresInsc_Data_With_Nb_Personne_By_Client_api("true");
|
||||
setUpdate_PresInsc_Data_With_Nb_Personne_By_Client_result(res.data.message);
|
||||
Dialog_MAJ_Preinsc_Client_handleClose_buton();
|
||||
// alert(res.data.message);
|
||||
setdisplay_alert_mysy("1");
|
||||
setalert_message(res.data.message);
|
||||
setalert_type("success");
|
||||
}
|
||||
else {
|
||||
setUpdate_PresInsc_Data_With_Nb_Personne_By_Client_api("false");
|
||||
setUpdate_PresInsc_Data_With_Nb_Personne_By_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('Update_PresInsc_Data_With_Nb_Personne_By_Client : Not good man :( mysearchtext = ' + error);
|
||||
setUpdate_PresInsc_Data_With_Nb_Personne_By_Client_api("false");
|
||||
alert(" Impossible d'envoyer la demande de mise à jour");
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
const [Refuse_List_Inscritpion_api, setRefuse_List_Inscritpion_api] = useState();
|
||||
const [Refuse_List_Inscritpion_message, setRefuse_List_Inscritpion_message] = useState();
|
||||
const [Refuse_List_Inscritpion_result, setRefuse_List_Inscritpion_result] = useState();
|
||||
|
@ -13960,6 +14016,31 @@ const DisplayPartnerSession = (props) => {
|
|||
const [dup_p_session_etape, setdup_p_session_etape] = useState("");
|
||||
const [dup_p_session_formateur_id, setdup_p_session_formateur_id] = useState("");
|
||||
|
||||
|
||||
|
||||
const [Dialog_MAJ_Preinsc_Client_message, setDialog_MAJ_Preinsc_Client_message] = React.useState(false);
|
||||
const [Dialog_MAJ_Preinsc_Client_open, setDialog_MAJ_Preinsc_Client_open] = React.useState(false);
|
||||
function Dialog_MAJ_Preinsc_Client_handle_change_participant_session(message) {
|
||||
setDialog_MAJ_Preinsc_Client_message(message);
|
||||
setDialog_MAJ_Preinsc_Client_open(true);
|
||||
}
|
||||
|
||||
const Dialog_MAJ_Preinsc_Client_handleClose = () => {
|
||||
//alert(" Utiliser le bouton 'fermer' ");
|
||||
//setOpen(false);
|
||||
};
|
||||
|
||||
const Dialog_MAJ_Preinsc_Client_handleClose_buton = () => {
|
||||
setp_maj_preinsc_client_id("");
|
||||
setp_maj_preinsc_nb_participant("");
|
||||
setDialog_MAJ_Preinsc_Client_open(false);
|
||||
};
|
||||
|
||||
|
||||
const [p_maj_preinsc_client_id, setp_maj_preinsc_client_id] = useState("");
|
||||
const [p_maj_preinsc_nb_participant, setp_maj_preinsc_nb_participant] = useState("1");
|
||||
|
||||
|
||||
return (
|
||||
<div className="displaypartnersession">
|
||||
|
||||
|
@ -14013,7 +14094,6 @@ const DisplayPartnerSession = (props) => {
|
|||
aria-labelledby="draggable-dialog-title"
|
||||
|
||||
>
|
||||
|
||||
<DialogTitle style={{ cursor: 'move' }} id="draggable-dialog-title"> Dupliquer : <i>{dup_list_session_code} </i> </DialogTitle>
|
||||
<DialogContent className="DialogContent_width" style={{ "minHeight": "20rem" }}>
|
||||
<DialogContentText>
|
||||
|
@ -14166,6 +14246,129 @@ const DisplayPartnerSession = (props) => {
|
|||
{/* FIN Dialog pour gerer les DUPLIQUER SESSION*/}
|
||||
|
||||
|
||||
{/* Dialog pour gerer les PREINSCRIPTION PAR CLIENT*/}
|
||||
<Dialog
|
||||
open={Dialog_MAJ_Preinsc_Client_open}
|
||||
// onClose={Dialog_MAJ_Preinsc_Client_handleClose}
|
||||
//className="displaypartnersession"
|
||||
|
||||
className="displaypartnersession"
|
||||
|
||||
static
|
||||
onClose={() => null}
|
||||
|
||||
PaperProps={{
|
||||
|
||||
|
||||
className: classes.paper, // Apply the paper style
|
||||
style: {
|
||||
overflowY: 'unset',
|
||||
position: 'absolute',
|
||||
top: '7rem',
|
||||
margin: "2px",
|
||||
},
|
||||
}}
|
||||
hideBackdrop={true}
|
||||
disableScrollLock
|
||||
classes={{
|
||||
paper: classes.dialog
|
||||
}}
|
||||
|
||||
PaperComponent={PaperComponent}
|
||||
aria-labelledby="draggable-dialog-title"
|
||||
|
||||
>
|
||||
<DialogTitle style={{ cursor: 'move' }} id="draggable-dialog-title"> Préinscription par le client zzz </DialogTitle>
|
||||
<DialogContent className="DialogContent_width" style={{ "minHeight": "20rem" }}>
|
||||
<DialogContentText>
|
||||
{Dialog_1_message}
|
||||
</DialogContentText>
|
||||
{New_Get_List_Partner_Clients_result && New_Get_List_Partner_Clients_result.length > 0 && <div className="session_caract_Dialog"> Client <br />
|
||||
<Autocomplete
|
||||
disablePortal
|
||||
name="maj_preinsc_client_id"
|
||||
id="maj_preinsc_client_id"
|
||||
className="disabled_style"
|
||||
|
||||
value={New_Get_List_Partner_Clients_result.filter((data) => (data)._id === String(p_maj_preinsc_client_id))[0].label}
|
||||
options={New_Get_List_Partner_Clients_result}
|
||||
onChange={(event, value) => {
|
||||
if (value && value._id) {
|
||||
setp_maj_preinsc_client_id(value._id);
|
||||
|
||||
} else {
|
||||
setp_maj_preinsc_client_id("");
|
||||
}
|
||||
}}
|
||||
|
||||
|
||||
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
|
||||
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
|
||||
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</div>}
|
||||
|
||||
|
||||
<div className="session_caract_Dialog">Maximum préinscription <br />
|
||||
<TextField
|
||||
name="maj_nb_participant"
|
||||
id="maj_nb_participant"
|
||||
|
||||
type="number"
|
||||
InputLabelProps={{
|
||||
shrink: true,
|
||||
}}
|
||||
inputProps={{ min: "1", max: "99", step: "1" }}
|
||||
disabled={false}
|
||||
className="disabled_style"
|
||||
value={p_maj_preinsc_nb_participant}
|
||||
onChange={(e) => {
|
||||
setp_maj_preinsc_nb_participant(e.target.value);
|
||||
}
|
||||
}
|
||||
/>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</DialogContent>
|
||||
|
||||
<DialogActions>
|
||||
|
||||
<IconButton
|
||||
autoFocus
|
||||
onClick={Dialog_MAJ_Preinsc_Client_handleClose_buton}
|
||||
color="primary"
|
||||
className={classes.customizedButton}
|
||||
>
|
||||
<CancelPresentationIcon />
|
||||
</IconButton>
|
||||
|
||||
|
||||
<div className="div_row">
|
||||
<div className="div_row_gauche">
|
||||
{String(p_maj_preinsc_client_id).length > 5 && String(p_maj_preinsc_nb_participant) > 0 &&
|
||||
<Button onClick={(e) => {
|
||||
|
||||
Update_PresInsc_Data_With_Nb_Personne_By_Client();
|
||||
}}
|
||||
className="bton_enreg_dialog">Envoyer </Button>}
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
|
||||
<Button onClick={Dialog_MAJ_Preinsc_Client_handleClose_buton} className="bton_annule_dialog" >Fermer</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</DialogActions>
|
||||
|
||||
</Dialog>
|
||||
{/* FIN Dialog pour gerer les PREINSCRIPTION PAR CLIENT*/}
|
||||
|
||||
|
||||
|
||||
{/* Dialog pour gerer les CONVENTIONS ENTREPRISE*/}
|
||||
|
@ -19930,7 +20133,7 @@ const DisplayPartnerSession = (props) => {
|
|||
onChange={liste_sessions_file_change}
|
||||
/>
|
||||
|
||||
<a href='/sample/template_import_session_formation.csv' download>Télécharger un fichier modèle</a>
|
||||
<a href='/sample/template_import_session_formation.csv' download>Télécharger un fichier modèle </a>
|
||||
</div>
|
||||
</div>
|
||||
<div className="div_row" ref={myRef_add_session} id="myRef_add_session"> </div>
|
||||
|
@ -22844,6 +23047,24 @@ const DisplayPartnerSession = (props) => {
|
|||
<img src={participants} alt="ajout un participant" className="icon_plus" />
|
||||
</Button>
|
||||
|
||||
<Tooltip className="tooltip_css" id="tooltip_maj_client" />
|
||||
<a data-tooltip-id="tooltip_maj_client" data-tooltip-html=" Demander au client de saisir la liste des participants">
|
||||
|
||||
<Button variant="outlined"
|
||||
onClick={(event) => {
|
||||
setp_maj_preinsc_client_id("");
|
||||
setp_maj_preinsc_nb_participant("1");
|
||||
setDialog_MAJ_Preinsc_Client_open(true);
|
||||
|
||||
}}
|
||||
|
||||
className="detail_class_submenu bton_add_session"
|
||||
id='menu_one_participant' name='menu_one_participant'>MAJ Client zzzz<FaUserPen style={{ fontSize: '16px' }} />
|
||||
|
||||
</Button>
|
||||
</a>
|
||||
|
||||
|
||||
<br />
|
||||
<a href='/sample/template_import_stagiaires.csv' download>Télécharger un fichier modèle</a>
|
||||
<br />
|
||||
|
|
|
@ -20,10 +20,7 @@ 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";
|
||||
|
||||
|
|
|
@ -25,13 +25,58 @@ import Link from '@mui/material/Link';
|
|||
import { PiDotsThree } from "react-icons/pi";
|
||||
import Popup from 'reactjs-popup';
|
||||
import 'reactjs-popup/dist/index.css';
|
||||
|
||||
import TextField from '@mui/material/TextField';
|
||||
import Display_Action_And_Class from "./Display_Action_And_Class";
|
||||
|
||||
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
|
||||
import AddCircleOutlineIcon from '@mui/icons-material/AddCircleOutline';
|
||||
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 { IconButton } from '@material-ui/core';
|
||||
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';
|
||||
|
||||
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',
|
||||
},
|
||||
}));
|
||||
|
||||
|
||||
function UpdateAttendeeList() {
|
||||
|
||||
const classes = useStyles();
|
||||
const history = useHistory();
|
||||
const { client_id, session_id, partner_owner_recid } = useParams();
|
||||
const [isLoading, setLoading] = useState();
|
||||
|
@ -74,6 +119,7 @@ function UpdateAttendeeList() {
|
|||
const columns_preinscrit = [
|
||||
{ field: 'id', headerName: 'id', hide: true },
|
||||
{ field: '_id', headerName: '_id', hide: true },
|
||||
|
||||
{
|
||||
field: 'civilite', headerName: 'Civ.', minWidth: 100, flex: 1, maxWidth: 100, hide: false, editable: true,
|
||||
type: "singleSelect",
|
||||
|
@ -101,10 +147,133 @@ function UpdateAttendeeList() {
|
|||
{ field: 'prenom', headerName: 'prenom', minWidth: 150, flex: 1, hide: false, editable: true, renderCell: (params) => <ExpandableCell_50 {...params} />, },
|
||||
{ field: 'email', headerName: 'email', minWidth: 150, flex: 1, editable: true, renderCell: (params) => <ExpandableCell_50 {...params} />, },
|
||||
|
||||
{
|
||||
field: 'status', headerName: 'Statut', minWidth: 150, flex: 1, editable: false,
|
||||
renderCell: (cellValues) => {
|
||||
return (
|
||||
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
|
||||
|
||||
{cellValues.row.status && String(cellValues.row.status) === "1" && "Validé"}
|
||||
{cellValues.row.status && String(cellValues.row.status) === "0" && "PréIns"}
|
||||
{cellValues.row.pres_dist_hyp && String(cellValues.row.status) !== "0"
|
||||
&& String(cellValues.row.status) === "1" && "N/A"}
|
||||
</div>
|
||||
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
]
|
||||
|
||||
|
||||
const columns_preinscrit_with_add_delete_bton = [
|
||||
{ field: 'id', headerName: 'id', hide: true },
|
||||
{ field: '_id', headerName: '_id', hide: true },
|
||||
|
||||
{
|
||||
field: 'civilite', headerName: 'Civ.', minWidth: 100, flex: 1, maxWidth: 100, hide: false, editable: true,
|
||||
type: "singleSelect",
|
||||
valueOptions: [
|
||||
{ value: 'm', label: 'M' },
|
||||
{ value: 'mme', label: 'Mme' },
|
||||
{ value: 'neutre', label: 'Neutre' }
|
||||
],
|
||||
renderCell: (params) => {
|
||||
return (
|
||||
|
||||
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
|
||||
|
||||
{params.value && String(params.value) === "m" && "M"}
|
||||
{params.value && String(params.value) === "mme" && "Mme"}
|
||||
{params.value && String(params.value) === "neutre" && "Neutre"}
|
||||
|
||||
</div>
|
||||
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
{ field: 'nom', headerName: 'nom', minWidth: 150, flex: 1, hide: false, editable: true, renderCell: (params) => <ExpandableCell_50 {...params} />, },
|
||||
{ field: 'prenom', headerName: 'prenom', minWidth: 150, flex: 1, hide: false, editable: true, renderCell: (params) => <ExpandableCell_50 {...params} />, },
|
||||
{ field: 'email', headerName: 'email', minWidth: 150, flex: 1, editable: true, renderCell: (params) => <ExpandableCell_50 {...params} />, },
|
||||
{
|
||||
field: 'status', headerName: 'Statut', minWidth: 150, flex: 1, editable: false,
|
||||
renderCell: (cellValues) => {
|
||||
return (
|
||||
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
|
||||
|
||||
{cellValues.row.status && String(cellValues.row.status) === "1" && "Validé"}
|
||||
{cellValues.row.status && String(cellValues.row.status) === "0" && "PréIns"}
|
||||
{cellValues.row.pres_dist_hyp && String(cellValues.row.status) !== "0"
|
||||
&& String(cellValues.row.status) === "1" && "N/A"}
|
||||
</div>
|
||||
|
||||
);
|
||||
}
|
||||
},
|
||||
{
|
||||
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}>
|
||||
×
|
||||
</button>
|
||||
<div className="gest_header"> MySy Information </div>
|
||||
<div className="gest_content">
|
||||
{' '}
|
||||
|
||||
En confirmant cette opération, la ligne 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) => {
|
||||
delete_data_grid_line(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>
|
||||
|
||||
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
]
|
||||
|
||||
|
||||
const [document_checked, setdocument_checked] = useState("0");
|
||||
|
||||
const [Getall_Client_Communication_Contact_api, setGetall_Client_Communication_Contact_api] = useState();
|
||||
|
@ -159,6 +328,8 @@ function UpdateAttendeeList() {
|
|||
|
||||
const [Partner_Recid, setPartner_Recid] = useState("");
|
||||
const [class_internal_url, setclass_internal_url] = useState("");
|
||||
const [max_presinscrit, setmax_presinscrit] = useState("");
|
||||
const [is_client_preinsc_update_request, setis_client_preinsc_update_request] = useState("");
|
||||
|
||||
|
||||
|
||||
|
@ -186,25 +357,29 @@ function UpdateAttendeeList() {
|
|||
setLoading(false);
|
||||
if (String(res.data.status) === String("true")) {
|
||||
//console.log(" In Getall_TrainingParticipant res.data.status = " + res.data.status);
|
||||
//console.log(" In Getall_TrainingParticipant res.data.message r_class = " + res.data.message);
|
||||
//console.log(" In Getall_TrainingParticipant res.data.message r_class = " + res.data.message, " -- message_global_data = ", res.data.message_global_data);
|
||||
setGetall_TrainingParticipant_api("true");
|
||||
setGetall_TrainingParticipant_result(res.data.message);
|
||||
setRows_preinsc(res.data.message);
|
||||
|
||||
setmax_presinscrit(String(JSON.parse(res.data.message_global_data).max_presinscrit))
|
||||
setis_client_preinsc_update_request(String(JSON.parse(res.data.message_global_data).is_client_preinsc_update_request))
|
||||
|
||||
|
||||
|
||||
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_status = JSON.parse(x).status;
|
||||
var local_nom = JSON.parse(x).nom;
|
||||
var local_prenom = JSON.parse(x).prenom;
|
||||
var local_email = JSON.parse(x).email;
|
||||
var local_civilite = JSON.parse(x).civilite;
|
||||
|
||||
setPartner_Recid(String(JSON.parse(x).partner_owner_recid))
|
||||
setclass_internal_url(String(JSON.parse(x).class_internal_url))
|
||||
setPartner_Recid(String(JSON.parse(x).partner_owner_recid));
|
||||
setclass_internal_url(String(JSON.parse(x).class_internal_url));
|
||||
|
||||
//---
|
||||
var node = {
|
||||
|
@ -214,6 +389,7 @@ function UpdateAttendeeList() {
|
|||
"prenom": local_prenom,
|
||||
"email": local_email,
|
||||
"civilite": local_civilite,
|
||||
"status": local_status,
|
||||
};
|
||||
new_data2.push(node);
|
||||
|
||||
|
@ -281,7 +457,7 @@ function UpdateAttendeeList() {
|
|||
tmp['prenom'] = (x).prenom;
|
||||
tmp['email'] = (x).email;
|
||||
tmp['civilite'] = (x).civilite;
|
||||
|
||||
tmp['status'] = (x).status;
|
||||
return tmp;
|
||||
|
||||
|
||||
|
@ -295,6 +471,7 @@ function UpdateAttendeeList() {
|
|||
tmp['prenom'] = new_value;
|
||||
tmp['email'] = (x).email;
|
||||
tmp['civilite'] = (x).civilite;
|
||||
tmp['status'] = (x).status;
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
@ -307,6 +484,7 @@ function UpdateAttendeeList() {
|
|||
tmp['prenom'] = (x).prenom;
|
||||
tmp['email'] = (x).email;
|
||||
tmp['civilite'] = new_value;
|
||||
tmp['status'] = (x).status;
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
@ -319,6 +497,7 @@ function UpdateAttendeeList() {
|
|||
tmp['prenom'] = (x).prenom;
|
||||
tmp['email'] = new_value;
|
||||
tmp['civilite'] = (x).civilite;
|
||||
tmp['status'] = (x).status;
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
@ -331,6 +510,7 @@ function UpdateAttendeeList() {
|
|||
tmp['prenom'] = (x).prenom;
|
||||
tmp['email'] = (x).email;
|
||||
tmp['civilite'] = (x).civilite;
|
||||
tmp['status'] = (x).status;
|
||||
|
||||
return tmp;
|
||||
|
||||
|
@ -359,7 +539,7 @@ function UpdateAttendeeList() {
|
|||
|
||||
const new_attende_dat_JSON = JSON.stringify(New_Getall_TrainingParticipant_result);
|
||||
|
||||
// console.log(" Record_New_Attendee_Data New_Getall_TrainingParticipant_result = ", New_Getall_TrainingParticipant_result);
|
||||
// console.log(" Record_New_Attendee_Data New_Getall_TrainingParticipant_result = ", New_Getall_TrainingParticipant_result);
|
||||
|
||||
const stored_cookie = getCookie('tokenmysypart');
|
||||
form.append("client_id", client_id);
|
||||
|
@ -371,8 +551,8 @@ function UpdateAttendeeList() {
|
|||
|
||||
setLoading(true);
|
||||
axios.post(myurl, form).then(res => {
|
||||
console.log(" In Record_New_Attendee_Data res.data.status = " + res.data.status);
|
||||
console.log(" In Record_New_Attendee_Data res.data.message r_class = " + res.data.message);
|
||||
// console.log(" In Record_New_Attendee_Data res.data.status = " + res.data.status);
|
||||
// console.log(" In Record_New_Attendee_Data res.data.message r_class = " + res.data.message);
|
||||
|
||||
setLoading(false);
|
||||
if (String(res.data.status) === String("true")) {
|
||||
|
@ -387,7 +567,7 @@ function UpdateAttendeeList() {
|
|||
else {
|
||||
setRecord_New_Attendee_Data_api("false");
|
||||
setRecord_New_Attendee_Data_message(res.data.message);
|
||||
// alert(res.data.message);
|
||||
// alert(res.data.message);
|
||||
setdisplay_alert_mysy("1");
|
||||
setalert_message(res.data.message);
|
||||
setalert_type("error");
|
||||
|
@ -416,6 +596,132 @@ function UpdateAttendeeList() {
|
|||
setdisplay_alert_mysy("");
|
||||
}
|
||||
|
||||
function add_one_ligne_to_datagrid() {
|
||||
|
||||
if (New_Getall_TrainingParticipant_result.length >= String(max_presinscrit)) {
|
||||
setdisplay_alert_mysy("1");
|
||||
setalert_message("Vous avez atteint le nombre maximum d'inscriptions autorisé");
|
||||
setalert_type("warning");
|
||||
return;
|
||||
}
|
||||
|
||||
if (String(is_client_preinsc_update_request) === "1" && New_Getall_TrainingParticipant_result.length < String(max_presinscrit)) {
|
||||
var new_data2 = [];
|
||||
const new_data = New_Getall_TrainingParticipant_result.map((x) => {
|
||||
//---
|
||||
var localid = (x).id;
|
||||
var local_id = (x)._id;
|
||||
var local_nom = (x).nom;
|
||||
var local_prenom = (x).prenom;
|
||||
var local_email = (x).email;
|
||||
var local_civilite = (x).civilite;
|
||||
var local_status = (x).status;
|
||||
|
||||
|
||||
//---
|
||||
var node = {
|
||||
"_id": local_id,
|
||||
"id": localid,
|
||||
"nom": local_nom,
|
||||
"prenom": local_prenom,
|
||||
"email": local_email,
|
||||
"civilite": local_civilite,
|
||||
"status": local_status,
|
||||
};
|
||||
new_data2.push(node);
|
||||
|
||||
});
|
||||
|
||||
//---
|
||||
var node = {
|
||||
"_id": "",
|
||||
"id": String(New_Getall_TrainingParticipant_result.length),
|
||||
"nom": "new_nom",
|
||||
"prenom": "new_prenom",
|
||||
"email": "new_email@email.com",
|
||||
"civilite": "neutre",
|
||||
"status": "0",
|
||||
};
|
||||
new_data2.push(node);
|
||||
|
||||
if (new_data2.length > 0) {
|
||||
setNew_Getall_TrainingParticipant_result(new_data2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function delete_data_grid_line(event, cellValues) {
|
||||
|
||||
if (cellValues.row.status !== "0") {
|
||||
setdisplay_alert_mysy("1");
|
||||
setalert_message("Le statut soit être à 'Preins' pour être supprimable. Merci de contacter le gestionnaire de formation");
|
||||
setalert_type("warning");
|
||||
return;
|
||||
}
|
||||
|
||||
if (String(is_client_preinsc_update_request) === "1" && New_Getall_TrainingParticipant_result.length <= String(max_presinscrit)) {
|
||||
var new_data2 = [];
|
||||
const new_data = New_Getall_TrainingParticipant_result.map((x) => {
|
||||
|
||||
|
||||
if ((x).id != cellValues.row.id) {
|
||||
//---
|
||||
var localid = (x).id;
|
||||
var local_id = (x)._id;
|
||||
var local_nom = (x).nom;
|
||||
var local_prenom = (x).prenom;
|
||||
var local_email = (x).email;
|
||||
var local_civilite = (x).civilite;
|
||||
var local_status = (x).status;
|
||||
|
||||
|
||||
|
||||
//---
|
||||
var node = {
|
||||
"_id": local_id,
|
||||
"id": localid,
|
||||
"nom": local_nom,
|
||||
"prenom": local_prenom,
|
||||
"email": local_email,
|
||||
"civilite": local_civilite,
|
||||
"status": local_status,
|
||||
};
|
||||
new_data2.push(node);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
if (new_data2.length > 0) {
|
||||
setNew_Getall_TrainingParticipant_result(new_data2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
const [Dialog_preinscrit_message, setDialog_preinscrit_message] = React.useState(false);
|
||||
const [Dialog_preinscrit_open, setDialog_preinscrit_open] = React.useState(false);
|
||||
function Dialog_preinscrit_handle_change_participant_session(message) {
|
||||
setDialog_preinscrit_message(message);
|
||||
setDialog_preinscrit_open(true);
|
||||
}
|
||||
|
||||
const Dialog_preinscrit_handleClose = () => {
|
||||
//alert(" Utiliser le bouton 'fermer' ");
|
||||
//setOpen(false);
|
||||
};
|
||||
|
||||
const Dialog_preinscrit_handleClose_buton = () => {
|
||||
|
||||
setDialog_preinscrit_open(false);
|
||||
};
|
||||
const [Dialog_1_message, setDialog_1_message] = React.useState(false);
|
||||
|
||||
return (
|
||||
<div className="updateattendeelist">
|
||||
|
||||
|
@ -424,7 +730,7 @@ function UpdateAttendeeList() {
|
|||
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
|
||||
</div>}
|
||||
|
||||
{/*** Affichage des messages d'alerte*/}
|
||||
{/*** Affichage des messages d'alerte*/}
|
||||
{display_alert_mysy && String(display_alert_mysy) === "1" &&
|
||||
<Module_Alert_Confirmation alert_message={alert_message}
|
||||
alert_type={alert_type}
|
||||
|
@ -435,41 +741,196 @@ function UpdateAttendeeList() {
|
|||
}
|
||||
{/*** FIN Affichage des messages d'alerte*/}
|
||||
|
||||
<div className="div_row">
|
||||
|
||||
</div>
|
||||
|
||||
{Getall_Client_Communication_Contact_result && Getall_Client_Communication_Contact_result.length > 0 && <div className="div_row" style={{ "width": "90%", "marginLeft": "5%", "background": "white", }}>
|
||||
<div style={{ textAlign: 'left' }}>
|
||||
|
||||
|
||||
<nav style={{ textAlign: 'left' }}>
|
||||
<b> Bonjour {JSON.parse(Getall_Client_Communication_Contact_result).civilite} {JSON.parse(Getall_Client_Communication_Contact_result).nom} </b>
|
||||
{/* Dialog pour gerer Un PRE/INSCRIT */}
|
||||
<Dialog
|
||||
open={Dialog_preinscrit_open}
|
||||
// onClose={Dialog_preinscrit_handleClose}
|
||||
//className="displaypartnersession"
|
||||
|
||||
</nav>
|
||||
className="displaypartnersession"
|
||||
|
||||
static
|
||||
onClose={() => null}
|
||||
|
||||
PaperProps={{
|
||||
|
||||
|
||||
className: classes.paper, // Apply the paper style
|
||||
style: {
|
||||
overflowY: 'unset',
|
||||
position: 'absolute',
|
||||
top: '7rem',
|
||||
margin: "2px",
|
||||
},
|
||||
}}
|
||||
hideBackdrop={true}
|
||||
disableScrollLock
|
||||
classes={{
|
||||
paper: classes.dialog
|
||||
}}
|
||||
|
||||
PaperComponent={PaperComponent}
|
||||
aria-labelledby="draggable-dialog-title"
|
||||
|
||||
>
|
||||
<DialogTitle style={{ cursor: 'move' }} id="draggable-dialog-title"> Apprenant </DialogTitle>
|
||||
<DialogContent className="DialogContent_width" style={{ "minHeight": "20rem" }}>
|
||||
<DialogContentText>
|
||||
{Dialog_1_message}
|
||||
</DialogContentText>
|
||||
|
||||
|
||||
<div className="session_caract_Dialog">Etape <br />
|
||||
|
||||
{/*<Autocomplete
|
||||
disablePortalNew
|
||||
name="duplicate_session_etape"
|
||||
id="duplicate_session_etape"
|
||||
className="disabled_style"
|
||||
options={New_Getall_Parter_OR_Default_Session_Steps_result}
|
||||
value={New_Getall_Parter_OR_Default_Session_Steps_result.filter((data) => (data).session_step_name === String(dup_p_session_etape))[0].session_step_name}
|
||||
|
||||
onChange={(event, value) => {
|
||||
if (value && value.session_step_name) {
|
||||
setdup_p_session_etape(value.session_step_name);
|
||||
|
||||
} else {
|
||||
setdup_p_session_etape("");
|
||||
}
|
||||
}}
|
||||
|
||||
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
|
||||
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
|
||||
|
||||
/>
|
||||
}
|
||||
/>*/}
|
||||
|
||||
|
||||
Merci de completer les informations des participants à session de formation ci-dessous. <br />
|
||||
</div>
|
||||
<br />
|
||||
{Getall_TrainingParticipant_result && Getall_TrainingParticipant_result.length > 0 &&
|
||||
<div style={{ textAlign: 'left' }}>
|
||||
<b> Formation : </b> {JSON.parse(Getall_TrainingParticipant_result[0]).title} <br />
|
||||
<b> Code Session : </b> {JSON.parse(Getall_TrainingParticipant_result[0]).title} <br />
|
||||
<b> Titre Session : </b> {JSON.parse(Getall_TrainingParticipant_result[0]).session_titre} <br />
|
||||
<b> Date début : </b> {JSON.parse(Getall_TrainingParticipant_result[0]).date_du} <br />
|
||||
<b> Date fin : </b> {JSON.parse(Getall_TrainingParticipant_result[0]).date_au} <br />
|
||||
|
||||
</div>
|
||||
}
|
||||
|
||||
<br />
|
||||
</div>}
|
||||
|
||||
{/*
|
||||
|
||||
<div className="session_caract_Dialog" > Date Session<br />
|
||||
<div style={{ width: "45%", float: "left", textAlign: "left" }}>
|
||||
<DatePicker
|
||||
name="date_du"
|
||||
id="date_du"
|
||||
selected={new Date(moment(dup_p_date_du, "DD/MM/YYYY"))}
|
||||
onChange={(date) => {
|
||||
setdup_p_date_du(format(date, 'd/MM/yyyy'));
|
||||
|
||||
}
|
||||
}
|
||||
showTimeSelect={false}
|
||||
dateFormat="dd/MM/yyyy"
|
||||
className="disabled_style enable_style datepicker_complement"
|
||||
locale='fr-FR'
|
||||
|
||||
/>
|
||||
|
||||
</div>
|
||||
<div style={{ float: "left", textAlign: "center", paddingTop: "20px", fontSize: "12px" }}>
|
||||
Au
|
||||
|
||||
</div>
|
||||
<div style={{ width: "45%", float: "left", textAlign: "right" }}>
|
||||
|
||||
<DatePicker
|
||||
name="date_du"
|
||||
id="date_du"
|
||||
selected={new Date(moment(dup_p_date_au, "DD/MM/YYYY"))}
|
||||
onChange={(date) => {
|
||||
setdup_p_date_au(format(date, 'd/MM/yyyy'));
|
||||
|
||||
}
|
||||
}
|
||||
showTimeSelect={false}
|
||||
dateFormat="dd/MM/yyyy"
|
||||
className="disabled_style enable_style datepicker_complement"
|
||||
locale='fr-FR'
|
||||
|
||||
/>
|
||||
</div>
|
||||
|
||||
</div> */}
|
||||
|
||||
</DialogContent>
|
||||
|
||||
<DialogActions>
|
||||
|
||||
<IconButton
|
||||
autoFocus
|
||||
onClick={Dialog_preinscrit_handleClose_buton}
|
||||
color="primary"
|
||||
className={classes.customizedButton}
|
||||
>
|
||||
<CancelPresentationIcon />
|
||||
</IconButton>
|
||||
|
||||
|
||||
<div className="div_row">
|
||||
<div className="div_row_gauche">
|
||||
<Button onClick={(e) => {
|
||||
|
||||
}}
|
||||
className="bton_enreg_dialog">Dupliquer </Button>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
|
||||
<Button onClick={Dialog_preinscrit_handleClose_buton} className="bton_annule_dialog" >Fermer</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</DialogActions>
|
||||
|
||||
</Dialog>
|
||||
{/* FIN Dialog pour gerer Un PRE/INSCRIT */}
|
||||
|
||||
|
||||
|
||||
<div className="div_row">
|
||||
|
||||
</div>
|
||||
{New_Getall_TrainingParticipant_result && New_Getall_TrainingParticipant_result.length > 0 && <div style={{ "width": "90%", "marginLeft": "5%", "background": "white", }}>
|
||||
|
||||
{Getall_Client_Communication_Contact_result && Getall_Client_Communication_Contact_result.length > 0 &&
|
||||
<div className="div_row" style={{ "width": "90%", "marginLeft": "5%", "background": "white", }}>
|
||||
<div style={{ textAlign: 'left' }}>
|
||||
|
||||
|
||||
<nav style={{ textAlign: 'left' }}>
|
||||
<b> Bonjour {JSON.parse(Getall_Client_Communication_Contact_result).civilite} {JSON.parse(Getall_Client_Communication_Contact_result).nom} </b>
|
||||
|
||||
</nav>
|
||||
|
||||
|
||||
Merci de completer les informations des participants à session de formation ci-dessous. <br />
|
||||
</div>
|
||||
<br />
|
||||
{Getall_TrainingParticipant_result && Getall_TrainingParticipant_result.length > 0 &&
|
||||
<div style={{ textAlign: 'left' }}>
|
||||
<b> Formation : </b> {JSON.parse(Getall_TrainingParticipant_result[0]).title} <br />
|
||||
<b> Code Session : </b> {JSON.parse(Getall_TrainingParticipant_result[0]).title} <br />
|
||||
<b> Titre Session : </b> {JSON.parse(Getall_TrainingParticipant_result[0]).session_titre} <br />
|
||||
<b> Date début : </b> {JSON.parse(Getall_TrainingParticipant_result[0]).date_du} <br />
|
||||
<b> Date fin : </b> {JSON.parse(Getall_TrainingParticipant_result[0]).date_au} <br />
|
||||
|
||||
</div>
|
||||
}
|
||||
|
||||
<br />
|
||||
</div>}
|
||||
|
||||
<div className="div_row">
|
||||
|
||||
</div>
|
||||
{String(is_client_preinsc_update_request) !== "1" && New_Getall_TrainingParticipant_result && New_Getall_TrainingParticipant_result.length > 0 && <div style={{ "width": "90%", "marginLeft": "5%", "background": "white", }}>
|
||||
|
||||
|
||||
<div className="session_data" >
|
||||
|
@ -484,7 +945,7 @@ function UpdateAttendeeList() {
|
|||
[`& .${gridClasses.cell}`]: {
|
||||
py: 1,
|
||||
},
|
||||
'& .line--statut--invoiced': {
|
||||
'& .line--inscription--done': {
|
||||
backgroundColor: '#EAFAF1',
|
||||
color: '#239B56',
|
||||
fontWeight: '700'
|
||||
|
@ -518,10 +979,12 @@ function UpdateAttendeeList() {
|
|||
{
|
||||
id: index,
|
||||
_id: item._id,
|
||||
_id: item._id,
|
||||
nom: item.nom,
|
||||
prenom: (item).prenom,
|
||||
email: (item).email,
|
||||
civilite: (item).civilite,
|
||||
status: (item).status,
|
||||
}
|
||||
))}
|
||||
|
||||
|
@ -534,6 +997,17 @@ function UpdateAttendeeList() {
|
|||
components={{
|
||||
Toolbar: GridToolbar,
|
||||
}}
|
||||
|
||||
getRowClassName={(params) => {
|
||||
|
||||
// Pour la gestion de la couleur de zone double cliquée
|
||||
if (String(params.row.status) === "1") {
|
||||
return 'line--inscription--done';
|
||||
}
|
||||
|
||||
|
||||
}}
|
||||
|
||||
getEstimatedRowHeight={() => 200}
|
||||
getRowHeight={() => "auto"}
|
||||
sx={{
|
||||
|
@ -554,7 +1028,162 @@ function UpdateAttendeeList() {
|
|||
|
||||
</div>
|
||||
<br />
|
||||
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
|
||||
|
||||
|
||||
|
||||
</div>}
|
||||
|
||||
<div className="div_row">
|
||||
{String(is_client_preinsc_update_request) !== "1" && String(document_checked) === "1" && (!Getall_TrainingParticipant_result || Getall_TrainingParticipant_result.length <= 0) && <div style={{
|
||||
height: "40vh", "width": "100%",
|
||||
"background": "#F2F4F4", overflow: "auto", "paddingBottom": "1rem",
|
||||
"marginTop": "5rem", "color": "red", fontWeight: '700', "fontSize": "20px"
|
||||
}}>
|
||||
|
||||
Le document est invalide
|
||||
|
||||
</div>}
|
||||
|
||||
{String(is_client_preinsc_update_request) === "1" && String(max_presinscrit) > "0" &&
|
||||
<div>
|
||||
<div className="div_row" style={{ "width": "90%", "marginLeft": "5%", "background": "white", "textAlign": 'left', "marginBottom": "2rem" }}>
|
||||
<b> Inscrire ou mettre à jour les participants à la formation. Maxium autorisé : {max_presinscrit} </b><br />
|
||||
Procedure : <br />
|
||||
Pour mettre à jour une cellule : Double cliquer sur la cellule et modifier l'information. <br />
|
||||
Pour ajouter ou supprimer une ligne : Utiliser les boutons.
|
||||
<br />
|
||||
</div>
|
||||
|
||||
|
||||
{New_Getall_TrainingParticipant_result && New_Getall_TrainingParticipant_result.length > 0 && <div style={{ "width": "90%", "marginLeft": "5%", "background": "white", }}>
|
||||
|
||||
<div className="session_data" >
|
||||
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
|
||||
<Box
|
||||
sx={{
|
||||
height: 500,
|
||||
width: '100%',
|
||||
paddingRight: '2px',
|
||||
|
||||
|
||||
[`& .${gridClasses.cell}`]: {
|
||||
py: 1,
|
||||
},
|
||||
'& .line--inscription--done': {
|
||||
backgroundColor: '#EAFAF1',
|
||||
color: '#239B56',
|
||||
fontWeight: '700'
|
||||
|
||||
},
|
||||
"& .MuiDataGrid-columnHeaders": {
|
||||
backgroundColor: "#c8cfd5",
|
||||
color: "black",
|
||||
fontSize: 14
|
||||
},
|
||||
|
||||
|
||||
}}
|
||||
|
||||
>
|
||||
<DataGrid
|
||||
|
||||
onCellEditCommit={OnchangeCellDataGrid}
|
||||
editMode="cell"
|
||||
|
||||
|
||||
checkboxSelection
|
||||
onSelectionModelChange={(newSelectionModel) => {
|
||||
setselectionModel_preinsc(newSelectionModel);
|
||||
//console.log("ch selected--" + newSelectionModel);
|
||||
}}
|
||||
selectionModel={selectionModel_preinsc}
|
||||
|
||||
localeText={frFR.components.MuiDataGrid.defaultProps.localeText}
|
||||
rows={New_Getall_TrainingParticipant_result.map((item, index) => (
|
||||
{
|
||||
id: index,
|
||||
_id: item._id,
|
||||
nom: item.nom,
|
||||
prenom: (item).prenom,
|
||||
email: (item).email,
|
||||
civilite: (item).civilite,
|
||||
status: (item).status,
|
||||
}
|
||||
))}
|
||||
|
||||
columns={columns_preinscrit_with_add_delete_bton}
|
||||
|
||||
isCellEditable={(params) => params.row.status === "0"}
|
||||
|
||||
pageSize={10}
|
||||
className="datagridclass"
|
||||
|
||||
|
||||
rowsPerPageOptions={[10]}
|
||||
disableSelectionOnClick
|
||||
components={{
|
||||
Toolbar: GridToolbar,
|
||||
}}
|
||||
|
||||
getRowClassName={(params) => {
|
||||
|
||||
// Pour la gestion de la couleur de zone double cliquée
|
||||
if (String(params.row.status) === "1") {
|
||||
return 'line--inscription--done';
|
||||
}
|
||||
|
||||
|
||||
}}
|
||||
|
||||
getEstimatedRowHeight={() => 200}
|
||||
getRowHeight={() => "auto"}
|
||||
sx={{
|
||||
"& .MuiDataGrid-cellContent": {
|
||||
minHeight: 50,
|
||||
|
||||
},
|
||||
[`& .${gridClasses.cell}`]: {
|
||||
py: 1,
|
||||
},
|
||||
}}
|
||||
/>
|
||||
</Box>
|
||||
|
||||
<br />
|
||||
|
||||
</div>
|
||||
|
||||
<div className="div_row" style={{ "border": "None", marginBottom: "1rem" }}>
|
||||
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }} >
|
||||
<nav style={{
|
||||
"textAlign": 'right', width: '15rem', color: '#1976d2',
|
||||
boxSizing: 'border-box', border: 'none', margin: 'auto', 'marginRight': '10px',
|
||||
'cursor': 'pointer'
|
||||
}} onClick={(event) => {
|
||||
add_one_ligne_to_datagrid();
|
||||
}}> <AddCircleOutlineIcon />1 ligne </nav>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<br />
|
||||
|
||||
</div>}
|
||||
|
||||
</div>}
|
||||
|
||||
</div>
|
||||
<br />
|
||||
<div className="div_row" style={{ width: '90%', marginLeft: '5%', marginTop: '1rem' }}>
|
||||
<div className="div_row_gauche" style={{ "textAlign": 'left', }}>
|
||||
|
||||
<Popup
|
||||
trigger={
|
||||
|
@ -605,44 +1234,34 @@ function UpdateAttendeeList() {
|
|||
|
||||
</div>
|
||||
|
||||
<div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }} >
|
||||
<div className="div_row_droite" style={{ "textAlign": 'right' }} >
|
||||
<Button variant="contained" className="bton_annule" onClick={(event) => {
|
||||
history.push("/");
|
||||
}} >Annuler
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div className="div_row" style={{ "border": "None" }}>
|
||||
|
||||
</div>
|
||||
|
||||
<div style={{ "width": "100%", "background": "#F2F4F4", overflow: "auto", "paddingBottom": "1rem" }}>
|
||||
<br />
|
||||
|
||||
{class_internal_url && String(class_internal_url).length > 2 && <div className="question_box_entete">
|
||||
<Display_Action_And_Class classId={class_internal_url} action={""} />
|
||||
|
||||
</div>}
|
||||
</div>
|
||||
|
||||
</div>}
|
||||
|
||||
<div className="div_row">
|
||||
{String(document_checked) === "1" && (!Getall_TrainingParticipant_result || Getall_TrainingParticipant_result.length <= 0) && <div style={{
|
||||
height: "40vh", "width": "100%",
|
||||
"background": "#F2F4F4", overflow: "auto", "paddingBottom": "1rem",
|
||||
"marginTop":"5rem", "color":"red", fontWeight:'700', "fontSize":"20px"
|
||||
}}>
|
||||
|
||||
Le document est invalide
|
||||
|
||||
</div>}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div className="div_row">
|
||||
|
||||
</div>
|
||||
|
||||
<div className="div_row" style={{ "border": "None" }}>
|
||||
|
||||
</div>
|
||||
|
||||
<div style={{ "width": "100%", "background": "#F2F4F4", overflow: "auto", "paddingBottom": "1rem" }}>
|
||||
<br />
|
||||
|
||||
{class_internal_url && String(class_internal_url).length > 2 && <div className="question_box_entete">
|
||||
<Display_Action_And_Class classId={class_internal_url} action={""} />
|
||||
|
||||
</div>}
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React, { useRef, useState, useEffect } from "react";
|
||||
import moment from "moment";
|
||||
import "./new_homepage.css";
|
||||
|
||||
import { Helmet } from "react-helmet";
|
||||
import WhyUsLayout from './WhyUsLayout.js';
|
||||
import LogoCloud from './LogoCloud.js';
|
||||
import VisionSection from './VisionSection.js';
|
||||
|
@ -25,6 +25,14 @@ const New_C_A_Propos_2025 = (props) => {
|
|||
return (
|
||||
|
||||
<div className="new_homepage_2025">
|
||||
<Helmet>
|
||||
<title>Éditeur Français de logiciels de gestion pour organismes de formation - Gestion administrative, CRM, E-Learning, Marketplace</title>
|
||||
<meta name="description" content="Éditeur Français de logiciels pour organismes de formation. Avec notre solution Tout-en-Un, Nous automatisons les étapes Qualiopi (Inscription, Documents personnalisés, Les émargements sécurisés, Les évaluations, etc). Votre Le bilan pédagogique et financier est généré automatiquement." />
|
||||
<meta name="robots" content="index,follow" />
|
||||
<meta name="title" content="Éditeur Français de logiciels de gestion pour organismes de formation - Gestion administrative, CRM, E-Learning, Marketplace" />
|
||||
<link rel="canonical" href={window.location.href} />
|
||||
|
||||
</Helmet>
|
||||
<div className="fonctionnalite_Background">
|
||||
<div className="title_and_cat">
|
||||
|
||||
|
|
Loading…
Reference in New Issue