14/08/23 - 16h30

recette2
cherif 2023-08-14 16:37:39 +02:00
parent 9f1e13e4ff
commit fa961ebc3d
6 changed files with 658 additions and 324 deletions

View File

@ -77,7 +77,7 @@ function App() {
<Route path="/Display-Detail-formation-Coeur/:classId" exact component={CoupDeCoeur} />
<Route path="/Partner/:action/:orderid/:packs" exact component={Partner} />
<Route path="/Partner/:action" exact component={Partner} />
<Route path="/Partner" exact component={Partner} />
<Route path="/Partner" exact component={Partner} />
<Route path="/PartnerLogin" exact component={PartnerLogin} />
<Route path="/PartnerLogin0" exact component={PartnerLogin0} />
<Route path="/PartnerLogin1" exact component={PartnerLogin1} />

View File

@ -22,7 +22,7 @@ import { Editor } from '@tinymce/tinymce-react';
import { IoArrowUndoCircle } from "react-icons/io5";
import { GrUserAdmin, GrOrderedList } from "react-icons/gr";
import parse from 'html-react-parser';
import { FcViewDetails } from "react-icons/fc";
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";
@ -128,45 +128,6 @@ const DisplayPartnerSession = (props) => {
{ field: 'duration_unit', headerName: 'unité', width: 100, align: "center", flex: 1 },
/* {
field: "management", headerName: 'Gestion',
renderCell: (cellValues) => {
return (
<Button
onClick={(event) => {
handleClickSessionManagement(event, cellValues);
}}
>
<BsFileText />
</Button>
);
}
},
{
field: "Print", headerName: 'Editer',
renderCell: (cellValues) => {
return (
<Button
onClick={(event) => {
handleClick_edit_session(event, cellValues);
}}
>
<AiOutlineEdit />
</Button>
);
}
},*/
]
const columns_preinscrit = [
@ -260,7 +221,7 @@ const DisplayPartnerSession = (props) => {
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Info </div>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
@ -306,10 +267,10 @@ const DisplayPartnerSession = (props) => {
trigger={<Button
onClick={(event) => {
//handleClick_refuse(event, cellValues);
handleClick_refuse(event, cellValues);
}}
>
<FcCancel />
<FcDisapprove />
</Button>}
modal
@ -321,7 +282,7 @@ const DisplayPartnerSession = (props) => {
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Info </div>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
@ -358,6 +319,66 @@ const DisplayPartnerSession = (props) => {
</Popup>
);
}
},
{
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<Popup
trigger={<Button
onClick={(event) => {
handleClick_delete(event, cellValues);
}}
>
<FcCancel />
</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 du stagiaire 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>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
);
}
}
@ -462,7 +483,7 @@ const DisplayPartnerSession = (props) => {
form.append(filtre2, filtre2_value);
}
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
@ -511,6 +532,10 @@ const DisplayPartnerSession = (props) => {
var internal_url = cellValues.row.class_internal_url;
setselected_internal_url(cellValues.row.class_internal_url);
setselected_class_title(cellValues.row.title);
setEdite_session("1");
submenu_detail_session();
@ -534,6 +559,8 @@ const DisplayPartnerSession = (props) => {
var internal_url = line.class_internal_url;
setselected_internal_url(line.class_internal_url);
setselected_class_title(line.title);
setEdite_session("1");
submenu_detail_session();
@ -571,10 +598,42 @@ const DisplayPartnerSession = (props) => {
function submenu_preinscrit() {
setsubmenu("preinscrit");
if (document.getElementById("preinscrit")) {
document.getElementById("preinscrit").style.backgroundColor = "#104277";
document.getElementById("preinscrit").style.color = "white";
}
if (document.getElementById("detail_session")) {
document.getElementById("detail_session").style.backgroundColor = "#d8edfc";
document.getElementById("detail_session").style.color = "black";
}
if (document.getElementById("inscrit")) {
document.getElementById("inscrit").style.backgroundColor = "#d8edfc";
document.getElementById("inscrit").style.color = "black";
}
}
function submenu_inscrit() {
setsubmenu("inscrit");
if (document.getElementById("inscrit")) {
document.getElementById("inscrit").style.backgroundColor = "#104277";
document.getElementById("inscrit").style.color = "white";
}
if (document.getElementById("detail_session")) {
document.getElementById("detail_session").style.backgroundColor = "#d8edfc";
document.getElementById("detail_session").style.color = "black";
}
if (document.getElementById("preinscrit")) {
document.getElementById("preinscrit").style.backgroundColor = "#d8edfc";
document.getElementById("preinscrit").style.color = "black";
}
}
async function submenu_detail_session() {
@ -585,6 +644,21 @@ const DisplayPartnerSession = (props) => {
desableSessionFields();
}
if (document.getElementById("detail_session")) {
document.getElementById("detail_session").style.backgroundColor = "#104277";
document.getElementById("detail_session").style.color = "white";
}
if (document.getElementById("inscrit")) {
document.getElementById("inscrit").style.backgroundColor = "#d8edfc";
document.getElementById("inscrit").style.color = "black";
}
if (document.getElementById("preinscrit")) {
document.getElementById("preinscrit").style.backgroundColor = "#d8edfc";
document.getElementById("preinscrit").style.color = "black";
}
}
@ -595,12 +669,15 @@ const DisplayPartnerSession = (props) => {
var internal_url = cellValues.row.class_internal_url;
setselected_internal_url(cellValues.row.class_internal_url);
setselected_class_title(cellValues.row.title);
GetListePreinscrit(cellValues.row.code_session, cellValues.row.class_internal_url);
GetListeInscrit(cellValues.row.code_session, cellValues.row.class_internal_url);
}
const [selected_code_session, setselected_code_session] = useState();
const [selected_internal_url, setselected_internal_url] = useState();
const [selected_class_title, setselected_class_title] = useState();
const [one_selected_internal_url, setone_selected_internal_url] = useState();
@ -644,11 +721,12 @@ const DisplayPartnerSession = (props) => {
//console.log('Success:', result['message']);
setliste_participants_file_change_result(result['message']);
setliste_participants_file_change_api("true");
GetListePreinscrit(selected_code_session);
GetListeInscrit(selected_code_session);
GetListePreinscrit(selected_code_session, selected_internal_url);
GetListeInscrit(selected_code_session, selected_internal_url);
alert(" Les stagiaires ont été correctement importés");
submenu_inscrit();
} else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']);
history.push("/Connexion");
@ -1250,6 +1328,62 @@ const DisplayPartnerSession = (props) => {
});
}
const [DeleteStagiaireData_api, setDeleteStagiaireData_api] = useState();
const [DeleteStagiaireData_message, setDeleteStagiaireData_message] = useState();
const [DeleteStagiaireData_result, setDeleteStagiaireData_result] = useState();
function DeleteStagiaireData(nom, prenom, email) {
setSendInscriptionCancell_api();
var form = new FormData();
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
if (selected_code_session.length <= 0) {
alert(" Vous devez choisir une session");
return;
}
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("class_internal_url", selected_internal_url);
form.append("session_id", selected_code_session);
form.append("nom", nom);
form.append("prenom", prenom);
form.append("email", email);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/DeleteAttendeeInscription/";
axios.post(myurl, form).then(res => {
//console.log(" In DeleteStagiaireData res.data.status = " + res.data.status);
//console.log(" In DeleteStagiaireData res.data.message r_class = " + res.data.message);
if (String(res.data.status) === String("true")) {
setDeleteStagiaireData_api("true");
setDeleteStagiaireData_result(res.data.message);
GetListePreinscrit(selected_code_session, selected_internal_url);
GetListeInscrit(selected_code_session, selected_internal_url);
setretval_ch("1");
alert(" La mise à jour été correctement faite.")
}
else {
setDeleteStagiaireData_api("false");
setDeleteStagiaireData_message(res.data.message);
setretval_ch("-1");
alert(res.data.message);
}
}).catch((error) => {
console.warn('DeleteStagiaireData : Not good man :( mysearchtext = ' + error);
setDeleteStagiaireData_api("false");
setretval_ch("-1");
alert(" Impossible de supprimer le stagaire");
})
}
const [retval_ch, setretval_ch] = useState();
const [UpdateStagiaireData_api, setUpdateStagiaireData_api] = useState();
@ -2678,6 +2812,18 @@ const DisplayPartnerSession = (props) => {
}
function handleClick_delete(event, cellValues) {
// Recuperation du motif du refus :
var nom = cellValues.row.nom;
var email = cellValues.row.email;
var prenom = cellValues.row.prenom;
DeleteStagiaireData(nom, prenom, email);
}
const [p_one_nom_part, setp_one_nom_part] = useState();
const [p_one_prenom_part, setp_one_prenom_part] = useState();
const [p_one_email_part, setp_one_email_part] = useState();
@ -3357,7 +3503,7 @@ const DisplayPartnerSession = (props) => {
const [p_filtre2, setp_filtre2] = useState();
const [p_filtre2_value, setp_filtre2_value] = useState();
function clean_all_filters(){
function clean_all_filters() {
setp_filtre1();
setp_filtre1_value();
setp_filtre2();
@ -3372,7 +3518,7 @@ const DisplayPartnerSession = (props) => {
<h3> Vos sessions de formation </h3>
<div className="titre1"> Utilisez les filtres !</div>
<div className="div_row" style={{"marginBottom":"5px"}}>
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter" >
<TextField
name="filtre1"
@ -3404,7 +3550,7 @@ const DisplayPartnerSession = (props) => {
disabled={false}
className="disabled_style"
value={p_filtre1_value}
onChange={(e) => {setp_filtre1_value(e.target.value); }}
onChange={(e) => { setp_filtre1_value(e.target.value); }}
InputProps={{
endAdornment: (
<InputAdornment position="end">
@ -3423,7 +3569,7 @@ const DisplayPartnerSession = (props) => {
</div>
{!!p_filtre1_value &&
<div className="div_row" style={{"marginBottom":"5px"}}>
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter">
<TextField
name="filtre2"
@ -3489,7 +3635,7 @@ const DisplayPartnerSession = (props) => {
</div>}
<br />
<div style={{ "textAlign": "left", "float": "left", "width": "100%" }} id="participant_menu_tab">
@ -3543,89 +3689,50 @@ const DisplayPartnerSession = (props) => {
/>
<br />
{/*selectionModel && selectionModel.length >= 1 &&
<div className="div_row" style={{ "border": "none" }}>
<div className="block_en_mass">
<nav className='traitement_mass'>Traitement en masse</nav>
&nbsp;<select
id={"actionmass_preinsc"} name={"actionmass_preinsc"}
onChange={actionmass_preinsc}
className="action_mass">
<option selected value="n/a">Choisir une action</option>
<option value="valider">Valider</option>
<option value="refuser">Refuser</option>
</select> &nbsp;
{actionmass_preinsc_val &&
<Popup
trigger={<Button className="bton_traiter_en_mass" >
<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">
{' '}
Confirmer l'action <b> {actionmass_preinsc_val} </b> en masse.
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
actionmass_preinsc_Traitemet();
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>
}
<br />
</div>
</div>*/}
<br />
{/* <Button variant="contained" onClick={GetAllClass_new}>Contained</Button>*/}
</div>
</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" onClick={submenu_import_session} className="detail_class_submenu bton_import_excel"
id='menu_import_participant' name='menu_import_participant'>Importer des Sessions Excel &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
<Button variant="outlined" onClick={submenu_add_one_session}
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout 1 Session &nbsp;
<img src={add_plus} alt="ajout session" className="icon_plus" />
</Button>
<br />
{session_file_name && <nav><i>{session_file_name}</i></nav>}
{String(liste_sessions_file_change_api) === String("true") && <nav className="okUpdateData"> Les Sessions ont été correctement importés</nav>}
{String(liste_sessions_file_change_api) === String("false") && <nav className="koUpdateData"> {liste_sessions_file_change_message} </nav>}
<input type="file"
accept=".csv"
ref={hiddenFileInput_session}
style={{ display: 'none' }}
name="liste_sessions_file"
onChange={liste_sessions_file_change}
/>
<a href='/sample/template_import_session_plusieurs_formations.csv' download>Télécharger un fichier modèle</a>
</div>
</div>
<div className="div_row"> &nbsp;</div>
<div className="div_row">
<Button variant="outlined" onClick={submenu_detail_session} className="detail_class_submenu" id='menu_preinscrit' name='menu_preinscrit'>Détail Session</Button>
<Button variant="outlined" onClick={submenu_preinscrit} className="detail_class_submenu" id='menu_preinscrit' name='menu_preinscrit'>Preinscription
{<nav>({String(nb_stagiaire_Preinscrit)})</nav>} </Button>
<Button variant="outlined" onClick={submenu_inscrit} className="detail_class_submenu" id='menu_inscrit' name='menu_inscrit'>Inscription
{<nav> ({String(nb_stagiaire_Inscrit)}) </nav>}</Button>
<Button variant="outlined" onClick={submenu_detail_session} className="detail_class_submenu" id='detail_session' name='detail_session'>Détail Session</Button>
<Button variant="outlined" onClick={submenu_preinscrit} className="detail_class_submenu" id='preinscrit' name='preinscrit'>Preinscription ({String(nb_stagiaire_Preinscrit)}) </Button>
<Button variant="outlined" onClick={submenu_inscrit} className="detail_class_submenu" id='inscrit' name='inscrit'>Inscription ({String(nb_stagiaire_Inscrit)}) </Button>
</div>
@ -3634,40 +3741,6 @@ const DisplayPartnerSession = (props) => {
{String(submenu) === String("detail_session") && <div style={{ "border": "None" }}>
<div className="div_row" style={{ "border": "None" }}>
<div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined" onClick={submenu_import_session} className="detail_class_submenu bton_import_excel"
id='menu_import_participant' name='menu_import_participant'>Importer des Sessions Excel &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
<Button variant="outlined" onClick={submenu_add_one_session}
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout 1 Session &nbsp;
<img src={add_plus} alt="ajout session" className="icon_plus" />
</Button>
<br />
{session_file_name && <nav><i>{session_file_name}</i></nav>}
{String(liste_sessions_file_change_api) === String("true") && <nav className="okUpdateData"> Les Sessions ont été correctement importés</nav>}
{String(liste_sessions_file_change_api) === String("false") && <nav className="koUpdateData"> {liste_sessions_file_change_message} </nav>}
<input type="file"
accept=".csv"
ref={hiddenFileInput_session}
style={{ display: 'none' }}
name="liste_sessions_file"
onChange={liste_sessions_file_change}
/>
<a href='/sample/template_import_session_plusieurs_formations.csv' download>Télécharger un fichier modèle</a>
</div>
</div>
{String(addOneSession) !== "1" && <div className="session_data" onChange={IssessionChanged}>
<div className="session_caract"> Formation <br />
@ -3720,7 +3793,8 @@ const DisplayPartnerSession = (props) => {
disabled={false}
className="disabled_style enable_style"
value={p_session_ondemande}
onChange={(e) => setp_session_ondemande(e.target.value)}
onChange={(e) => {setp_session_ondemande(e.target.value);
IssessionChanged();}}
>
<MenuItem value="1" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Oui &nbsp;&nbsp;</MenuItem>
<MenuItem value="0" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Non &nbsp;</MenuItem>
@ -3757,10 +3831,13 @@ const DisplayPartnerSession = (props) => {
disabled={false}
className="disabled_style enable_style"
value={p_session_status}
onChange={(e) => setp_session_status(e.target.value)}
onChange={(e) => {
setp_session_status(e.target.value);
IssessionChanged();}
}
>
<MenuItem value="0" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Activer &nbsp;&nbsp;</MenuItem>
<MenuItem value="1" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Désactiver &nbsp;</MenuItem>
<MenuItem value="0" style={{ "paddingLeft": "5px", "textAlign": "left","background":"orange" }}>Inactif &nbsp;&nbsp;</MenuItem>
<MenuItem value="1" style={{ "paddingLeft": "5px", "textAlign": "left", "background":"green" }}>Actif &nbsp;</MenuItem>
</TextField>
</div>}
@ -3776,6 +3853,7 @@ const DisplayPartnerSession = (props) => {
disabled={false}
className="disabled_style enable_style"
value={p_session_status_label}
/>
@ -3794,7 +3872,9 @@ const DisplayPartnerSession = (props) => {
disabled={false}
className="disabled_style enable_style"
value={p_session_etape}
onChange={(e) => setp_session_etape(e.target.value)}
onChange={(e) => {setp_session_etape(e.target.value);
IssessionChanged();
}}
>
<MenuItem value="0" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Projet &nbsp;&nbsp;</MenuItem>
<MenuItem value="1" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Planification &nbsp;</MenuItem>
@ -3835,6 +3915,7 @@ const DisplayPartnerSession = (props) => {
onChange={(date) => {
setSessionstartDate(date);
setsessionChanged(true);
IssessionChanged();
}
}
showTimeSelect={false}
@ -3855,6 +3936,7 @@ const DisplayPartnerSession = (props) => {
onChange={(date) => {
setSessionendDate(date);
setsessionChanged(true);
IssessionChanged();
}
}
showTimeSelect={false}
@ -3874,6 +3956,7 @@ const DisplayPartnerSession = (props) => {
onChange={(date) => {
setSessionstartDateInscription(date);
setsessionChanged(true);
IssessionChanged();
}
}
@ -3896,6 +3979,7 @@ const DisplayPartnerSession = (props) => {
onChange={(date) => {
setSessionendDateInscription(date);
setsessionChanged(true);
IssessionChanged();
}
}
showTimeSelect={false}
@ -3918,7 +4002,9 @@ const DisplayPartnerSession = (props) => {
disabled={false}
className="disabled_style"
value={p_session_presentiel}
onChange={(e) => setp_session_presentiel(e.target.value)}
onChange={(e) => {setp_session_presentiel(e.target.value);
IssessionChanged();}
}
>
<MenuItem value="1" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Oui &nbsp;&nbsp;</MenuItem>
<MenuItem value="0" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Non &nbsp;</MenuItem>
@ -3955,7 +4041,9 @@ const DisplayPartnerSession = (props) => {
disabled={false}
className="disabled_style"
value={p_session_distance}
onChange={(e) => setp_session_distance(e.target.value)}
onChange={(e) => {setp_session_distance(e.target.value);
IssessionChanged();}
}
>
<MenuItem value="1" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Oui &nbsp;&nbsp;</MenuItem>
<MenuItem value="0" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Non &nbsp;</MenuItem>
@ -4078,7 +4166,9 @@ const DisplayPartnerSession = (props) => {
disabled={false}
className="disabled_style"
value={p_nb_participant}
onChange={(e) => setp_nb_participant(e.target.value)}
onChange={(e) => {setp_nb_participant(e.target.value);
IssessionChanged();}
}
/>
</div>
@ -4095,7 +4185,8 @@ const DisplayPartnerSession = (props) => {
disabled={false}
className="disabled_style"
value={p_prix_session}
onChange={(e) => setp_prix_session(e.target.value)}
onChange={(e) => {setp_prix_session(e.target.value);
IssessionChanged();}}
/>
</div>
@ -4265,7 +4356,8 @@ const DisplayPartnerSession = (props) => {
disabled={false}
className="disabled_style enable_style"
value={p_one_session_ondemande}
onChange={(e) => setp_one_session_ondemande(e.target.value)}
onChange={(e) => {setp_one_session_ondemande(e.target.value);
}}
>
<MenuItem value="1" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Oui &nbsp;&nbsp;</MenuItem>
@ -4288,8 +4380,8 @@ const DisplayPartnerSession = (props) => {
value={p_one_session_status}
onChange={(e) => setp_one_session_status(e.target.value)}
>
<MenuItem value="0" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Activer &nbsp;&nbsp;</MenuItem>
<MenuItem value="1" style={{ "paddingLeft": "5px", "textAlign": "left" }}>Désactiver &nbsp;</MenuItem>
<MenuItem value="0" style={{ "paddingLeft": "5px", "textAlign": "left", "background":"orange" }}>Inactif &nbsp;&nbsp;</MenuItem>
<MenuItem value="1" style={{ "paddingLeft": "5px", "textAlign": "left" , "background":"green"}}>Actif &nbsp;</MenuItem>
</TextField>
</div>
@ -4653,42 +4745,10 @@ const DisplayPartnerSession = (props) => {
{String(submenu) === String("preinscrit") && <div style={{ "border": "None" }}>
<div className="div_row" style={{ "border": "None" }}>
{String(addOneParticipant) !== "1" && selected_code_session && selected_internal_url && <div id='ajout_participant' style={{ "textAlign": "left", "float": "left", "width": "100%" }}>
<Button variant="outlined" onClick={"submenu_import_participant"} className="detail_class_submenu bton_import_excel" style={{
"background": "#c8cfd5",
"color": "black", "width": "auto"
}}
id='menu_import_participant' name='menu_import_participant'>Choisir un fichier et Importer les participants &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
<Button variant="outlined" onClick={submenu_add_one_participant}
className="detail_class_submenu bton_add_session"
id='menu_one_participant' name='menu_one_participant'>Ajouter 1 participant &nbsp;
<img src={participants} alt="ajout un participant" className="icon_plus" />
</Button>
<br />
<a href='/sample/template_import_stagiaires.csv' download>Télécharger un fichier modèle</a>
<br />
<i>{participant_file_name}</i><br />
{String(liste_participants_file_change_api) === String("true") && <nav className="okUpdateData"> Les participants ont été correctement importés</nav>}
{String(liste_participants_file_change_api) === String("false") && <nav className="koUpdateData"> {liste_participants_file_change_message} </nav>}
<input type="file"
accept=".csv"
ref={hiddenFileInput}
style={{ display: 'none' }}
name="liste_participants_file"
onChange={liste_participants_file_change}
/>
</div>}
{String(addOneParticipant) === "1" && <div className="div_row session_data" style={{ "border": "None", "backgroundColor": "#F0F0F0" }}>
<h5> Ajout d'un nouveau participant a la session {selected_code_session} de la formation {selected_internal_url}</h5>
<div className="titre1"> Ajout d'un nouveau participant a la session <u> {selected_code_session} </u> de la formation <u> {selected_class_title} </u></div>
<div className="session_caract"> Nom *<br />
<TextField
@ -4841,11 +4901,7 @@ const DisplayPartnerSession = (props) => {
components={{
Toolbar: GridToolbar,
}}
/>
<br />
{selectionModel_preinsc && selectionModel_preinsc.length >= 1 &&
<div className="div_row" style={{ "border": "none" }}>
@ -4911,85 +4967,51 @@ const DisplayPartnerSession = (props) => {
</div>
</div>}
<br />
{/* <Button variant="contained" onClick={GetAllClass_new}>Contained</Button>*/}
{String(addOneParticipant) !== "1" && selected_code_session && selected_internal_url && <div id='ajout_participant' style={{ "textAlign": "left", "float": "left", "width": "100%" }}>
<Button variant="outlined" onClick={submenu_import_participant} className="detail_class_submenu bton_import_excel" style={{
"background": "#c8cfd5",
"color": "black", "width": "auto"
}}
id='menu_import_participant' name='menu_import_participant'>Importer des participants excel &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
<Button variant="outlined" onClick={submenu_add_one_participant}
className="detail_class_submenu bton_add_session"
id='menu_one_participant' name='menu_one_participant'>Ajouter 1 participant &nbsp;
<img src={participants} alt="ajout un participant" className="icon_plus" />
</Button>
<br />
<a href='/sample/template_import_stagiaires.csv' download>Télécharger un fichier modèle</a>
<br />
<i>{participant_file_name}</i><br />
{String(liste_participants_file_change_api) === String("true") && <nav className="okUpdateData"> Les participants ont été correctement importés</nav>}
{String(liste_participants_file_change_api) === String("false") && <nav className="koUpdateData"> {liste_participants_file_change_message} </nav>}
<input type="file"
accept=".csv"
ref={hiddenFileInput}
style={{ display: 'none' }}
name="liste_participants_file"
onChange={liste_participants_file_change}
/>
</div>}
</div>}
</div>}
{String(submenu) === String("inscrit") && <div style={{ "border": "None" }}>
<div className="div_row" style={{ "border": "None" }}>
{String(addOneParticipant) !== "1" && selected_code_session && selected_internal_url && <div className="div_row" style={{ "border": "None" }}>
{selected_code_session && selected_internal_url && <div id='ajout_participant' style={{ "textAlign": "left", "float": "left", "width": "100%" }}>
<Button variant="outlined" onClick={"submenu_import_participant"} className="detail_class_submenu bton_import_excel" style={{
"background": "#c8cfd5",
"color": "black", "width": "auto"
}}
id='menu_import_participant' name='menu_import_participant'>Choisir un fichier et Importer les participants &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
<Button variant="outlined" onClick={submenu_add_one_participant}
className="detail_class_submenu bton_add_session"
id='menu_one_participant' name='menu_one_participant'>Ajouter 1 participant &nbsp;
<img src={participants} alt="ajout un participant" className="icon_plus" />
</Button>
<br />
<a href='/sample/template_import_stagiaires.csv' download>Télécharger un fichier modèle</a>
<br />
<i>{participant_file_name}</i><br />
{String(liste_participants_file_change_api) === String("true") && <nav className="okUpdateData"> Les participants ont été correctement importés</nav>}
{String(liste_participants_file_change_api) === String("false") && <nav className="koUpdateData"> {liste_participants_file_change_message} </nav>}
<input type="file"
accept=".csv"
ref={hiddenFileInput}
style={{ display: 'none' }}
name="liste_participants_file"
onChange={liste_participants_file_change}
/>
</div>}
{!selected_code_session && !selected_internal_url && <div id='ajout_participant' style={{ "textAlign": "left", "float": "left", "width": "100%" }}>
<Button variant="outlined" onClick={"submenu_import_participant"} className="detail_class_submenu bton_import_excel" style={{
"background": "#c8cfd5",
"color": "black", "width": "auto"
}}
id='menu_import_participant' name='menu_import_participant'>Choisir un fichier et Importer les participants &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
<Button variant="outlined" onClick={submenu_add_one_participant_inactif}
className="detail_class_submenu bton_add_session"
id='menu_one_participant' name='menu_one_participant'>Ajouter 1 participant &nbsp;
<img src={participants} alt="ajout un participant" className="icon_plus" />
</Button>
<br />
<a href='/sample/template_import_stagiaires.csv' download>Télécharger un fichier modèle</a>
<br />
<i>{participant_file_name}</i><br />
{String(liste_participants_file_change_api) === String("true") && <nav className="okUpdateData"> Les participants ont été correctement importés</nav>}
{String(liste_participants_file_change_api) === String("false") && <nav className="koUpdateData"> {liste_participants_file_change_message} </nav>}
<input type="file"
accept=".csv"
ref={hiddenFileInput}
style={{ display: 'none' }}
name="liste_participants_file"
onChange={liste_participants_file_change}
/>
</div>}
{String(addOneParticipant) === "1" && <div className="div_row session_data" style={{ "border": "None", "backgroundColor": "#F0F0F0" }}>
<h5> Ajout d'un nouveau participant</h5>
@ -5116,7 +5138,8 @@ const DisplayPartnerSession = (props) => {
</div>}
{String(addOneParticipant) === "1" && <div className="div_row session_data" style={{ "border": "None", "backgroundColor": "#F0F0F0" }}>
<h5> Ajout d'un nouveau participant a la session {selected_code_session} de la formation {selected_internal_url}</h5>
<div className="titre1"> Ajout d'un nouveau participant a la session <u> {selected_code_session} </u> de la formation <u> {selected_class_title} </u></div>
<div className="session_caract"> Nom *<br />
<TextField
@ -5271,7 +5294,7 @@ const DisplayPartnerSession = (props) => {
/>
<br />
{selectionModel_insc && selectionModel_insc.length >= 1 &&
<div className="block_en_mass">
<nav className='traitement_mass'>Traitement en masse / Inscrit</nav>
@ -5340,7 +5363,42 @@ const DisplayPartnerSession = (props) => {
}
<br />
{/* <Button variant="contained" onClick={GetAllClass_new}>Contained</Button>*/}
{String(addOneParticipant) !== "1" && selected_code_session && selected_internal_url && <div id='ajout_participant' style={{ "textAlign": "left", "float": "left", "width": "100%" }}>
<Button variant="outlined" onClick={submenu_import_participant} className="detail_class_submenu bton_import_excel" style={{
"background": "#c8cfd5",
"color": "black", "width": "auto"
}}
id='menu_import_participant' name='menu_import_participant'>Importer des participants excel &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
<Button variant="outlined" onClick={submenu_add_one_participant}
className="detail_class_submenu bton_add_session"
id='menu_one_participant' name='menu_one_participant'>Ajouter 1 participant &nbsp;
<img src={participants} alt="ajout un participant" className="icon_plus" />
</Button>
<br />
<a href='/sample/template_import_stagiaires.csv' download>Télécharger un fichier modèle</a>
<br />
<i>{participant_file_name}</i><br />
{String(liste_participants_file_change_api) === String("true") && <nav className="okUpdateData"> Les participants ont été correctement importés</nav>}
{String(liste_participants_file_change_api) === String("false") && <nav className="koUpdateData"> {liste_participants_file_change_message} </nav>}
<input type="file"
accept=".csv"
ref={hiddenFileInput}
style={{ display: 'none' }}
name="liste_participants_file"
onChange={liste_participants_file_change}
/>
</div>}
</div>}

View File

@ -28,7 +28,7 @@ import fileDownload from 'js-file-download'
import { ConsoleView } from "react-device-detect";
import { confirmAlert } from 'react-confirm-alert';
import SendIcon from '@mui/icons-material/Send';
import { FcViewDetails } from "react-icons/fc";
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import parse from 'html-react-parser'
import { Editor } from '@tinymce/tinymce-react';
import { FcAddImage } from "react-icons/fc";
@ -81,7 +81,7 @@ function GestionAdministrative(props) {
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Info </div>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
@ -139,7 +139,7 @@ function GestionAdministrative(props) {
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Info </div>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
@ -188,7 +188,7 @@ function GestionAdministrative(props) {
handleClick_refuse(event, cellValues);
}}
>
<FcCancel />
<FcDisapprove />
</Button>}
modal
@ -200,7 +200,7 @@ function GestionAdministrative(props) {
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Info </div>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
@ -237,6 +237,66 @@ function GestionAdministrative(props) {
</Popup>
);
}
},
{
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<Popup
trigger={<Button
onClick={(event) => {
handleClick_delete(event, cellValues);
}}
>
<FcCancel />
</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 du stagiaire 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>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
);
}
}
@ -372,6 +432,71 @@ function GestionAdministrative(props) {
]
function handleClick_delete(event, cellValues) {
// Recuperation du motif du refus :
var nom = cellValues.row.nom;
var email = cellValues.row.email;
var prenom = cellValues.row.prenom;
DeleteStagiaireData(nom, prenom, email);
}
const [DeleteStagiaireData_api, setDeleteStagiaireData_api] = useState();
const [DeleteStagiaireData_message, setDeleteStagiaireData_message] = useState();
const [DeleteStagiaireData_result, setDeleteStagiaireData_result] = useState();
function DeleteStagiaireData(nom, prenom, email) {
setSendInscriptionCancell_api();
var form = new FormData();
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
if (mysession.length <= 0) {
alert(" Vous devez choisir une session");
return;
}
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("class_internal_url", internal_url);
form.append("session_id", mysession);
form.append("nom", nom);
form.append("prenom", prenom);
form.append("email", email);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/DeleteAttendeeInscription/";
axios.post(myurl, form).then(res => {
//console.log(" In DeleteStagiaireData res.data.status = " + res.data.status);
//console.log(" In DeleteStagiaireData res.data.message r_class = " + res.data.message);
if (String(res.data.status) === String("true")) {
setDeleteStagiaireData_api("true");
setDeleteStagiaireData_result(res.data.message);
GetListePreinscrit(mysession);
setretval_ch("1");
alert(" La mise à jour été correctement faite.")
}
else {
setDeleteStagiaireData_api("false");
setDeleteStagiaireData_message(res.data.message);
setretval_ch("-1");
alert(res.data.message);
}
}).catch((error) => {
console.warn('DeleteStagiaireData : Not good man :( mysearchtext = ' + error);
setDeleteStagiaireData_api("false");
setretval_ch("-1");
alert(" Impossible de supprimer le stagaire");
})
}
const [UpdateStagiaireEmargement_api, setUpdateStagiaireEmargement_api] = useState();
const [UpdateStagiaireEmargement_message, setUpdateStagiaireEmargement_message] = useState();
@ -5329,7 +5454,7 @@ function GestionAdministrative(props) {
"background": "#c8cfd5",
"color": "black", "width": "auto"
}}
id='menu_import_participant' name='menu_import_participant'>Choisir un fichier et Importer les participants &nbsp;
id='menu_import_participant' name='menu_import_participant'>Importer des participants excel &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
<Button variant="outlined" onClick={submenu_add_one_participant}

View File

@ -37,7 +37,7 @@ import {
FcHome, FcButtingIn, FcDepartment, FcBullish, FcAddDatabase, FcFolder,
FcList, FcGraduationCap, FcMultipleDevices, FcCurrencyExchange,
FcMoneyTransfer, FcFeedback, FcKey, FcVideoCall, FcSettings,
FcBusinesswoman, FcServices, FcCollect, FcCandleSticks, FcKindle,
FcBusinesswoman, FcServices, FcCollect, FcCandleSticks, FcKindle,
FcFlowChart, FcReading
} from "react-icons/fc";
@ -62,7 +62,7 @@ const Partner = (props) => {
const [gotocheckout, setgotocheckout] = useState("");
// Constante permet de savoir a fonction du menu on a faire
const [menu, setmenu] = useState("affichage");
const [menu, setmenu] = useState();
const [selectedFile, setSelectedFile] = useState();
const [isSelected, setIsSelected] = useState(false);
@ -222,11 +222,6 @@ const Partner = (props) => {
useEffect(() => {
setapiexcelimportmessage();
getImage();
GetPartnerNameFromToken();
DiplaytrainingList();
setformation_file_name();
if (location && location.state && location.state.local_sub_menu) {
setmenu(location.state.local_sub_menu);
@ -234,11 +229,14 @@ const Partner = (props) => {
//alert(" le pack = "+location.state.currentpack);
}
var list_menu = ['creation', 'infopartner', 'statistique', 'abonnement', 'affichage', 'ordervalide']
var list_menu = ['creation', 'infopartner', 'statistique', 'abonnement', 'affichage', 'ordervalide',
'mes_sessions', 'setuplms', 'facture', 'pricing', 'mes_clients', 'mes_devis', 'mes_cmd', 'mes_stagiaires']
if (action && list_menu.includes(action)) {
setmenu(action);
console.log(" 222 action =", action);
if (action && orderid && packs && String("ordervalide")) {
CheckSalesOrder();
}
@ -246,8 +244,14 @@ const Partner = (props) => {
if (action && orderid && packs && String("abonnement")) {
//console.log(" abonnement : payement intent = ", orderid, " pack = ", packs);
}
}
} else {
DiplaytrainingList();
}
getImage();
GetPartnerNameFromToken();
setformation_file_name();
GetPartnerLMSData();
}, [])
@ -257,12 +261,14 @@ const Partner = (props) => {
setmenu("creation");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/creation");
}
function PersonnalData(event) {
setmenu("infopartner");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/infopartner");
}
@ -270,12 +276,14 @@ const Partner = (props) => {
setmenu("statistique");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/statistique");
}
function DisplaySetUpLMS(event) {
setmenu("setuplms");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/setuplms");
}
function DisplayFacure(event) {
@ -283,36 +291,42 @@ const Partner = (props) => {
setmenu("facture");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/facture");
}
function Abonnement_func(event) {
setmenu("abonnement");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/abonnement");
}
function pricing_func(event) {
setmenu("pricing");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/pricing");
}
function mes_clients_func(event) {
setmenu("mes_clients");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/mes_clients");
}
function mes_devis_func(event) {
setmenu("mes_devis");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/mes_devis");
}
function mes_cmd_func(event) {
setmenu("mes_cmd");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/mes_cmd");
}
@ -320,12 +334,14 @@ const Partner = (props) => {
setmenu("mes_sessions");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/mes_sessions");
}
function DiplayStagiaireList(event) {
setmenu("mes_stagiaires");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/mes_stagiaires");
}
@ -336,6 +352,7 @@ const Partner = (props) => {
setmenu("affichage");
setapiexcelimportmessage();
setformation_file_name();
history.push("/Partner/affichage");
var server_address = "127.0.0.1";
//var server_address = "89.156.84.196";
@ -785,17 +802,9 @@ const Partner = (props) => {
}
{String(myApiResponse) === String("true") && menu === "affichage" &&
{String(menu) === "affichage" &&
<div className="div_droite">
{/*String(partnerstatus) === String("1") &&
<div className="accountsatatus"> Finalisez la création de votre compte en ajoutant le moyen de payement de votre choix :)
</div>*/}
<PartnerTranings ispending={partnerstatus} currentpack={partnerPackService} />
</div>
}
@ -808,7 +817,7 @@ const Partner = (props) => {
}
{String(myApiResponse) === String("true") && menu === "creation" &&
{String(menu) === "creation" &&
<div className="div_droite">
@ -927,22 +936,17 @@ const Partner = (props) => {
}
{String(myApiResponse) == String("true") && menu == "infopartner" &&
{String(menu) === "infopartner" &&
<div className="div_droite">
{/*String(partnerstatus) === String("1") &&
<div className="accountsatatus"> Finalisez la création de votre compte en ajoutant le moyen de payement de votre choix :)
</div>*/}
<PartnerInfo />
<PartnerInfo />
</div>
}
{String(menu) === "statistique" &&
<div className="div_droite">
{/*String(partnerstatus) === String("1") &&
<div className="accountsatatus"> Finalisez la création de votre compte en ajoutant le moyen de payement de votre choix :)
</div>*/}
<PartenairStat />
</div>
}
@ -959,6 +963,7 @@ const Partner = (props) => {
<div className="div_droite">
<DisplayPartnerSession />
</div>
}

View File

@ -1311,7 +1311,7 @@
margin-right: 1rem;
padding: 0.3rem;
margin-bottom: 0.5rem;
width: 11rem;
min-width: 12rem;
text-align: center;
border: 1px solid #9cf;
color: #3b3e40;
@ -1719,7 +1719,17 @@
margin-bottom: 2px !important;
}
.titre1 {
font-family: "Quicksand", "Signika", sans-serif;
font-size: medium;
text-align: center;
margin-bottom: 0.8rem;
color: white;
cursor: pointer;
font-style: italic;
background-color: gray;
font-weight: normal;
}
}

View File

@ -1,12 +1,12 @@
.displaypartnertrainingpagination {
.mysy_spinner{
.mysy_spinner {
border-radius: 5px;
border: 1px solid black;
opacity: 100%;
}
.loader-container {
width: 100%;
height: 100vh;
@ -20,7 +20,7 @@
background: white;
background-color: transparent;
}
.css-qc6sy-singleValue {
color: white !important;
}
@ -234,7 +234,7 @@
border: solid 1px;
height: 2.5rem;
color: white;
}
}
@ -803,6 +803,142 @@
letter-spacing: 3px;
}
.texte_area_filter {
float: left;
width: 47% !important;
font-size: x-small !important;
font-family: "verdana", "Quicksand", "Signika", sans-serif;
margin: 0.4rem !important;
margin-top: 0px !important;
margin-bottom: 2px !important;
}
.div_row {
float: left;
//border: 1px solid black;
border-width: 0.01rem;
width: 100%;
//margin-bottom: 1rem;
border-radius: 1rem;
}
.div_row_gauche {
float: left;
// border:1px solid black;
// border-width:0.01rem;
width: 45%;
border-radius: 1rem;
}
.div_row_droite {
float: right;
//border:1px solid black;
//border-width:0.01rem;
width: 45%;
border-radius: 1rem;
text-align: right;
}
.bton_suppr {
background: transparent;
color: red;
border-radius: 5rem;
font-size: small;
text-align: center;
height: 2.5rem;
width: 40%;
margin-left: 10px;
margin-right: 10px;
}
.bton_enreg {
border-radius: 5rem;
font-size: small;
background: #81BC3A !important;
text-align: center;
height: 2.5rem;
width: 40%;
color: white;
margin-left: 10px;
margin-right: 10px;
}
.bton_edit {
border-radius: 5rem;
font-size: small;
background: black !important;
text-align: right;
height: 2.5rem;
width: 40%;
color: white;
margin-left: 10px;
margin-right: 10px;
}
.bton_annule {
border-radius: 5rem;
font-size: small;
background: lightgray !important;
text-align: right;
height: 2.5rem;
width: 40%;
color: black;
margin-left: 10px;
margin-right: 10px;
}
.css-1t10bd6-MuiFormControl-root-MuiTextField-root fieldset {
border-color: transparent !important;
border-radius: 20px !important;
}
.disabled_style {
//background-color: #ECEFF1;
font-size: small !important;
color: black;
width: 90% !important;
height: 3.5rem !important;
margin: 5px !important;
//border: none !important;
border-radius: 5px;
background: white;
border: solid gainsboro 1px;
}
.training_caract {
width: 30%;
padding: 5px;
float: left;
}
.css-1t8l2tu-MuiInputBase-input-MuiOutlinedInput-input .Mui-disabled {
font: inherit;
letter-spacing: inherit;
color: currentColor;
border: 0;
box-sizing: content-box;
background: none;
background-color: rgba(0, 0, 0, 0);
margin: 0;
-webkit-tap-highlight-color: transparent;
display: block;
min-width: 0;
width: 100%;
-webkit-animation-name: mui-auto-fill-cancel;
animation-name: mui-auto-fill-cancel;
-webkit-animation-duration: 10ms;
animation-duration: 10ms;
height: 3rem !important;
padding: 0 !important;
padding-left: 5px !important;
}
.css-11u53oe-MuiSelect-select-MuiInputBase-input-MuiOutlinedInput-input {
padding: 1px !important;
}
}
// end media
}