22/09/2023 - 18h53

recette2
cherif 2023-09-22 18:50:51 +02:00
parent a3d9886bc0
commit 3e02c431c0
11 changed files with 2532 additions and 557 deletions

View File

@ -372,7 +372,7 @@ const AddParnerClient = (props) => {
const [addcontact, setaddcontact] = useState("0");
function Add_Contact() {
setdatamodification_contact("0");
setformedit_mode_contact("0");
setformedit_mode_contact("1");
clean_contact_set_values();
setaddcontact("1");
setcurrent_contact_recid("");
@ -1701,13 +1701,13 @@ const AddParnerClient = (props) => {
} else {
// Il s'agit d'un ajout d'une nouvelle activité. on a rien dans le current_activite_recid
myurl = process.env.REACT_APP_API_URL + "myclass/api/Add_activite/";
myurl = process.env.REACT_APP_API_URL + "myclass/api/Add_Contact/";
form.append("related_collection", "partner_client");
form.append("related_collection_owner_email", p_client_email);
}
console.log(" ### current_contact_recid = ", current_contact_recid, " myurl = ", myurl)
//console.log(" ### current_contact_recid = ", current_contact_recid, " myurl = ", myurl)
// Données de contact du client du partner
var contact_email = ""
@ -1952,6 +1952,7 @@ const AddParnerClient = (props) => {
Disable_contact_fields();
setformedit_mode_contact("0");
}
else if (String(res.data.status) === String("Err_Connexion")) {
@ -2166,7 +2167,7 @@ const AddParnerClient = (props) => {
</div>
<div className="div_row_droite" style={{ "textAlign": "right" }}>
<Button variant="contained" color="success" className="bton_annule" onClick={close_detail_client}>Fermer</Button>
</div>
</div>
</div>
</div>
}
@ -2531,15 +2532,15 @@ const AddParnerClient = (props) => {
{String(submenu).trim() === "submenu_contact" && <div className="training_data">
{String(addcontact) !== "1" && <div className="div_row" style={{ "marginLeft": "5px", "marginRight": "5px", "paddingRight": "10px" }}>
<div className="div_row" onClick={Add_Contact} > <AiOutlineUserAdd /> Ajouter un contact </div>
<div className="div_row scroll_mysy">
<div className="div_row" onClick={Add_Contact} style={{ "cursor": "pointer" }}> <AiOutlineUserAdd /> Ajouter un contact </div>
<div className="div_row scroll_mysy" style={{ "height": "30rem", }}>
<div className="contact_grid">
{Get_List_Contact_Of_client_Part_result && String(Get_List_Contact_Of_client_Part_api) === "true" &&
Get_List_Contact_Of_client_Part_result.map((client) => (
<div contactmail={String(JSON.parse(client).email)} onClick={Display_Part_Client_Contact}>
{(JSON.parse(client).nom || JSON.parse(client).prenom) && <nav className="grid_title"> {String(JSON.parse(client).prenom)} &nbsp; {String(JSON.parse(client).nom)} <hr/> </nav>}
{(JSON.parse(client).nom || JSON.parse(client).prenom) && <nav className="grid_title"> {String(JSON.parse(client).prenom)} &nbsp; {String(JSON.parse(client).nom)} <hr /> </nav>}
{JSON.parse(client).fonction && <nav> {String(JSON.parse(client).fonction)} </nav>}
{JSON.parse(client).email && <nav> {String(JSON.parse(client).email)} </nav>}
{JSON.parse(client).telephone && <nav> {String(JSON.parse(client).telephone)} </nav>}
@ -2569,7 +2570,7 @@ const AddParnerClient = (props) => {
/>
</div>
<div className="training_caract">
{ String(formedit_mode_contact) === "1" && <div className="training_caract">
<TextField
required
name="contact_civilite"
@ -2577,13 +2578,38 @@ const AddParnerClient = (props) => {
InputLabelProps={{
shrink: true,
}}
select
disabled={false}
className="disabled_style"
value={p_contact_civilite}
onChange={(e) => setp_contact_civilite(e.target.value)}
>
<MenuItem value="Mme" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Mme. &nbsp;</MenuItem>
<MenuItem value="M." style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >M. &nbsp;</MenuItem>
<MenuItem value="Neutre" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Neutre&nbsp;&nbsp;</MenuItem>
</TextField>
</div>}
{ String(formedit_mode_contact) !== "1" && <div className="training_caract">
<TextField
required
name="contact_civilite"
label="Civilité"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_contact_civilite}
onChange={(e) => setp_contact_civilite(e.target.value)}
/>
</div>
</div>}
<div className="training_caract">

View File

@ -1930,7 +1930,7 @@ const Config_Documents = (props) => {
</div>
<div className="div_row_droite" style={{ "textAlign": "left" }}>
<div className="div_row"> Choisir un champ fff <br />
<div className="div_row"> Choisir un champ <br />
<TextField
name="one_champ_table"
id="one_champ_table"

View File

@ -115,7 +115,7 @@ const DisplayPartnerSession = (props) => {
{ field: 'id', headerName: 'id', hide: true },
{ field: '_id', headerName: '_id', hide: true },
{ field: 'class_internal_url', headerName: 'class_internal_url', hide: true },
{ field: 'code_session', headerName: 'Code session', hide: false, flex:1 },
{ field: 'code_session', headerName: 'Code session', hide: false, flex: 1 },
{
field: 'statut', headerName: 'Statut', hide: true, width: datagrid_columns_size_model2,
valueFormatter: (params) => {
@ -147,7 +147,7 @@ const DisplayPartnerSession = (props) => {
return "???";
},
},
{ field: 'class_external_code', headerName: 'Code Formation', align: "center", hideable: true, flex:1, hide: true,},
{ field: 'class_external_code', headerName: 'Code Formation', align: "center", hideable: true, flex: 1, hide: true, },
{ field: 'date_debut', headerName: 'Debut', hide: false, width: datagrid_columns_size_model2, },
{ field: 'date_fin', headerName: 'Fin', hideable: false, width: datagrid_columns_size_model2, },
{
@ -175,7 +175,7 @@ const DisplayPartnerSession = (props) => {
{ field: 'formateur', headerName: 'Formateur', width: datagrid_columns_size_model1, hide: true, hideable: true, },
{ field: 'nb_participant', headerName: 'Nb Parti.', width: datagrid_columns_size_model2, align: "center", },
{
field: 'taux_remplissage', headerName: 'Remplissage', align: "center", flex:1,
field: 'taux_remplissage', headerName: 'Remplissage', align: "center", flex: 1,
align: "left",
renderCell: (params) => {
return (
@ -199,7 +199,7 @@ const DisplayPartnerSession = (props) => {
{ field: 'prix_session', headerName: 'Prix', width: datagrid_columns_size_model2, align: "center", },
{ field: 'title', headerName: 'Formation', width: datagrid_columns_size_model1, align: "center", hide: true, hideable: true, },
{ field: 'domaine', headerName: 'Domaine', width: datagrid_columns_size_model1, align: "center", hide: true, hideable: true, },
{ field: 'duration', headerName: 'Durée', width: datagrid_columns_size_model2, align: "center", },
{
field: "delete", headerName: 'Supprimer',
@ -2468,7 +2468,7 @@ const DisplayPartnerSession = (props) => {
}
var nb_participant = ""
@ -3135,8 +3135,8 @@ const DisplayPartnerSession = (props) => {
setaddOneSession("");
setEdite_session("");
submenu_detail_session();
setedit_session_form(false);
setsubmenu("");
setedit_session_form(false);
setsubmenu("");
setSelectionModel([]);
}
@ -3680,7 +3680,7 @@ const DisplayPartnerSession = (props) => {
if (String(result['status']) === String("true")) {
setrecord_Stagiaire_Image_api("true");
setuserimgclassprofilchanged("");
alert(" L'image à jour a été mise enregistrée ");
alert(" L'image a été enregistrée ");
} else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']);
@ -4279,9 +4279,9 @@ const DisplayPartnerSession = (props) => {
return (
<div className="displaypartnersession">
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
<Dialog
open={Dialog_1_open}
@ -5387,7 +5387,7 @@ const DisplayPartnerSession = (props) => {
{GetCurrentPartnerClass_result &&
GetCurrentPartnerClass_result.map((myclass) => (
<MenuItem key={JSON.parse(myclass).internal_url} value={JSON.parse(myclass).internal_url} style={{ "paddingLeft": "5px", "textAlign": "left", "width":"100%"}}>
<MenuItem key={JSON.parse(myclass).internal_url} value={JSON.parse(myclass).internal_url} style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>
{JSON.parse(myclass).title}
</MenuItem>
@ -5476,12 +5476,12 @@ const DisplayPartnerSession = (props) => {
value={p_one_session_etape}
onChange={(e) => setp_one_session_etape(e.target.value)}
>
<MenuItem value="0" style={{ "paddingLeft": "5px", "textAlign": "left", "width":'100%' }}>Projet &nbsp;&nbsp;</MenuItem>
<MenuItem value="1" style={{ "paddingLeft": "5px", "textAlign": "left" , "width":'100%'}}>Planification &nbsp;</MenuItem>
<MenuItem value="2" style={{ "paddingLeft": "5px", "textAlign": "left", "width":'100%' }}>Planifiée &nbsp;</MenuItem>
<MenuItem value="3" style={{ "paddingLeft": "5px", "textAlign": "left", "width":'100%' }}>Terminée &nbsp;</MenuItem>
<MenuItem value="4" style={{ "paddingLeft": "5px", "textAlign": "left" , "width":'100%'}}>Facturée &nbsp;</MenuItem>
<MenuItem value="-1" style={{ "paddingLeft": "5px", "textAlign": "left", "width":'100%' }}>Annulée &nbsp;</MenuItem>
<MenuItem value="0" style={{ "paddingLeft": "5px", "textAlign": "left", "width": '100%' }}>Projet &nbsp;&nbsp;</MenuItem>
<MenuItem value="1" style={{ "paddingLeft": "5px", "textAlign": "left", "width": '100%' }}>Planification &nbsp;</MenuItem>
<MenuItem value="2" style={{ "paddingLeft": "5px", "textAlign": "left", "width": '100%' }}>Planifiée &nbsp;</MenuItem>
<MenuItem value="3" style={{ "paddingLeft": "5px", "textAlign": "left", "width": '100%' }}>Terminée &nbsp;</MenuItem>
<MenuItem value="4" style={{ "paddingLeft": "5px", "textAlign": "left", "width": '100%' }}>Facturée &nbsp;</MenuItem>
<MenuItem value="-1" style={{ "paddingLeft": "5px", "textAlign": "left", "width": '100%' }}>Annulée &nbsp;</MenuItem>
</TextField>
</div>
@ -5766,7 +5766,7 @@ const DisplayPartnerSession = (props) => {
>
{GetAttestation_Certif_result &&
GetAttestation_Certif_result.map((certificat) => (
<MenuItem key={JSON.parse(certificat).nom} value={JSON.parse(certificat).nom} style={{ "paddingLeft": "5px", "textAlign": "left", "width":'100%' }}>
<MenuItem key={JSON.parse(certificat).nom} value={JSON.parse(certificat).nom} style={{ "paddingLeft": "5px", "textAlign": "left", "width": '100%' }}>
{JSON.parse(certificat).nom}&nbsp; &nbsp;<br />
</MenuItem>
@ -6643,7 +6643,7 @@ const DisplayPartnerSession = (props) => {
{Getall_TrainingSession_result &&
Getall_TrainingSession_result.map((mysession) => (
<MenuItem key={JSON.parse(mysession)._id} value={JSON.parse(mysession)._id}
style={{ "paddingLeft": "5px", "textAlign": "left", "width":'100%' }}>
style={{ "paddingLeft": "5px", "textAlign": "left", "width": '100%' }}>
{JSON.parse(mysession).code_session}&nbsp;&nbsp;
</MenuItem>
@ -6677,7 +6677,7 @@ const DisplayPartnerSession = (props) => {
{Get_List_Partner_Clients_result &&
Get_List_Partner_Clients_result.map((myclient) => (
<MenuItem key={JSON.parse(myclient).nom} value={JSON.parse(myclient)._id}
style={{ "paddingLeft": "5px", "textAlign": "left", "width":'100%' }}>
style={{ "paddingLeft": "5px", "textAlign": "left", "width": '100%' }}>
{JSON.parse(myclient).nom}&nbsp;&nbsp;
</MenuItem>

View File

@ -1352,7 +1352,7 @@ const DisplayPartnerStagiaires = (props) => {
if (String(result['status']) === String("true")) {
setrecord_Stagiaire_Image_api("true");
setuserimgclassprofilchanged("");
alert(" L'image à jour a été mise enregistrée ");
alert(" L'image a été enregistrée ");
} else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']);
@ -2063,10 +2063,11 @@ const DisplayPartnerStagiaires = (props) => {
if (String(res.data.status) === String("true")) {
setOne_Create_Participant_api("true");
setOne_Create_Participant_result(res.data.message);
alert(" Le participant a été correctement ajouté");
setaddOneParticipant();
Getall_TrainingParticipant();
clear_one_Attende_Fields();
alert(" Le participant a été correctement ajouté");
myRef_head.current.scrollIntoView({ behavior: "smooth" });
} else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message);
@ -2082,7 +2083,7 @@ const DisplayPartnerStagiaires = (props) => {
console.warn('One_Create_Participant : Not good man :( = ' + error);
setOne_Create_Participant_api("false");
alert(" Impossible d'ajouter le participants")
alert(" Impossible d'ajouter le participant")
})
}
@ -3293,7 +3294,7 @@ const DisplayPartnerStagiaires = (props) => {
>
{GetCurrentPartnerClass_result &&
GetCurrentPartnerClass_result.map((myclass) => (
<MenuItem key={JSON.parse(myclass).title} value={JSON.parse(myclass).internal_url} style={{ "paddingLeft": "5px", "textAlign": "left", }}>
<MenuItem key={JSON.parse(myclass).title} value={JSON.parse(myclass).internal_url} style={{ "paddingLeft": "5px", "textAlign": "left", "width":"100%" }}>
{JSON.parse(myclass).title}
</MenuItem>

View File

@ -49,7 +49,7 @@ const Employes = (props) => {
const [selectionModel_affectations, setSelectionModel_affectations] = React.useState([]);
var date_today_90j = new Date();
date_today_90j.setDate(date_today_90j.getDate() +90);
date_today_90j.setDate(date_today_90j.getDate() + 90);
const [p_filtre1, setp_filtre1] = useState();
@ -67,11 +67,11 @@ const Employes = (props) => {
const columns = [
{ field: '_id', headerName: '_id', hide: true },
{ field: 'id', headerName: 'id', hide: true },
{ field: 'email', headerName: 'email', width: 150, hideable: false, },
{ field: 'nom', headerName: 'nom', width: 150, hide: false, editable: true },
{ field: 'prenom', headerName: 'prenom', width: 150, hide: false, editable: true },
{ field: 'email', headerName: 'email', flex: 1, hideable: false, },
{ field: 'nom', headerName: 'nom', flex: 1, hide: false, },
{ field: 'prenom', headerName: 'prenom', flex: 1, hide: false, },
{
field: 'ismanager', headerName: 'Manager', width: 150, hide: false, editable: true,
field: 'ismanager', headerName: 'Manager', width: 150, hide: false,
valueFormatter: (params) => {
if (String(params.value) === "0")
return "Non";
@ -82,9 +82,9 @@ const Employes = (props) => {
return String(params.value);
},
},
{ field: 'telephone_mobile', headerName: 'Mobile', width: 150, hide: false, editable: true },
{ field: 'telephone_mobile', headerName: 'Mobile', width: 150, hide: false, },
{
field: 'civilite', headerName: 'Civilité', width: 150, hide: false, editable: true,
field: 'civilite', headerName: 'Civilité', width: 150, hide: false,
valueFormatter: (params) => {
if (String(params.value) === "0")
return "Mme";
@ -96,8 +96,8 @@ const Employes = (props) => {
return String(params.value);
},
},
{ field: 'profil', headerName: 'profil', width: 150, hide: false, editable: true },
{ field: 'fonction', headerName: 'Fonction', width: 150, hide: false, editable: true },
{ field: 'profil', headerName: 'profil', width: 150, hide: false, },
{ field: 'fonction', headerName: 'Fonction', width: 150, hide: false, },
/* {
field: "Detail", headerName: 'Voir detail',
@ -183,11 +183,11 @@ const Employes = (props) => {
const columns_employee_affectation = [
{ field: '_id', headerName: '_id', hide: true },
{ field: 'id', headerName: 'id', hide: true },
{ field: 'poste', headerName: 'Poste', width: 150, hideable: false, },
{ field: 'date_du', headerName: 'Du', width: 150, hide: false, editable: true },
{ field: 'date_au', headerName: 'Au', width: 150, hide: false, editable: true },
{ field: 'related_target_collection_object', headerName: 'Cible', width: 150, hide: false, editable: true },
{ field: 'related_target_collection_id_nom', headerName: 'Cible Nom', width: 150, hide: false, editable: true },
{ field: 'poste', headerName: 'Poste', flex: 1, hideable: false, },
{ field: 'date_du', headerName: 'Du', width: 150, hide: false, },
{ field: 'date_au', headerName: 'Au', width: 150, hide: false, },
{ field: 'related_target_collection_object', headerName: 'Cible', flex: 1, hide: false, },
{ field: 'related_target_collection_id_nom', headerName: 'Cible Nom', flex: 1, hide: false, },
{ field: 'target_related_collection', headerName: 'Type', hide: true },
{ field: 'target_related_collection_id', headerName: 'Type ID', hide: true },
{
@ -341,7 +341,7 @@ const Employes = (props) => {
setAdd_new_affectation("");
clean_affectation_fields();
clean_nouvelle_affectation_fields();
setsubmenu("");
var line = JSON.parse(rows_affectations[selected_row_id]);
@ -1289,7 +1289,7 @@ const Employes = (props) => {
if (String(result['status']) === String("true")) {
setrecord_employee_Image_api("true");
setuserimgclassprofilchanged("");
alert(" L'image à jour a été mise enregistrée ");
alert(" L'image a été enregistrée ");
} else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']);
@ -1839,6 +1839,12 @@ const Employes = (props) => {
if (String(employee_data_edit_mode) !== "1")
disable_Employee_DetailFields();
setSelectionModel_affectations([]);
setdisplay_affectation("0");
setAdd_new_affectation("");
clean_affectation_fields();
clean_nouvelle_affectation_fields();
}
@ -1892,7 +1898,11 @@ const Employes = (props) => {
document.getElementById("affectation").style.backgroundColor = "#d8edfc";
document.getElementById("affectation").style.color = "black";
}
setSelectionModel_affectations([]);
setdisplay_affectation("0");
setAdd_new_affectation("");
clean_affectation_fields();
clean_nouvelle_affectation_fields();
}
@ -1948,7 +1958,7 @@ const Employes = (props) => {
const [p_one_affect_poste, setp_one_affect_poste] = useState();
const [p_one_affect_date_du, setp_one_affect_date_du] = useState(new Date().toLocaleDateString('fr-FR'));
const [p_one_affect_date_au, setp_one_affect_date_au] = useState(date_today_90j.toLocaleDateString('fr-FR'));
const [p_one_affect_date_au, setp_one_affect_date_au] = useState(date_today_90j.toLocaleDateString('fr-FR'));
const [p_one_affect_cible, setp_one_affect_cible] = useState();
const [p_one_affect_cible_nom, setp_one_affect_cible_nom] = useState();
const [p_one_affect_comment, setp_one_affect_comment] = useState();
@ -2819,19 +2829,23 @@ const Employes = (props) => {
</div>
</div>
<div className="div_row"> &nbsp;</div>
<div className="div_row">
{/*<div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_employe} className="detail_class_submenu" id='detail_employe' name='detail_employe'>Détail employé</Button>
<Button variant="outlined" onClick={submenu_droit_acces} className="detail_class_submenu" id='droit_acces' name='droit_acces'>Droits d'acces </Button>
<Button variant="outlined" onClick={submenu_affectation} className="detail_class_submenu" id='affectation' name='affectation'>Affectation </Button>
</div>
</div>*/}
</div>
{String(submenu) === "detail_employe" && String(add_One_Employee) !== "1" && <div className="div_row">
<div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_employe} className="detail_class_submenu" id='detail_employe' name='detail_employe'>Détail employé</Button>
<Button variant="outlined" onClick={submenu_droit_acces} className="detail_class_submenu" id='droit_acces' name='droit_acces'>Droits d'acces </Button>
<Button variant="outlined" onClick={submenu_affectation} className="detail_class_submenu" id='affectation' name='affectation'>Affectation </Button>
</div>
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Détail Employé </nav>
<div className="div_row" style={{ "border": "None" }}>
<div className="div_row_gauche">
@ -3368,6 +3382,11 @@ const Employes = (props) => {
{String(submenu) === "detail_employe" && String(add_One_Employee) === "1" && <div className="div_row">
<div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_employe} className="detail_class_submenu" id='detail_employe' name='detail_employe'>Détail employé</Button>
<Button variant="outlined" onClick={submenu_droit_acces} className="detail_class_submenu" id='droit_acces' name='droit_acces'>Droits d'acces </Button>
<Button variant="outlined" onClick={submenu_affectation} className="detail_class_submenu" id='affectation' name='affectation'>Affectation </Button>
</div>
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Ajouter un Employé </nav>
<div className="session_data" >
@ -3775,7 +3794,12 @@ const Employes = (props) => {
{String(submenu) === "affectation" && <div className="div_row">
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Affectation </nav>
<div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_employe} className="detail_class_submenu" id='detail_employe' name='detail_employe'>Détail employé</Button>
<Button variant="outlined" onClick={submenu_droit_acces} className="detail_class_submenu" id='droit_acces' name='droit_acces'>Droits d'acces </Button>
<Button variant="outlined" onClick={submenu_affectation} className="detail_class_submenu" id='affectation' name='affectation'>Affectation </Button>
</div>
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Liste Affectations </nav>
<div className="session_data">
<div style={{ "border": "None" }}>
@ -4090,12 +4114,12 @@ const Employes = (props) => {
<TextField
name="affect_comment"
id="affect_comment"
text
multiline
InputLabelProps={{
shrink: true,
}}
minRows={3}
maxRows={3}
rows={1}
maxRows={1}
disabled={false}
className="disabled_style enable_style"
value={p_affect_comment}
@ -4277,12 +4301,12 @@ const Employes = (props) => {
<TextField
name="one_affect_comment"
id="one_affect_comment"
text
multiline
InputLabelProps={{
shrink: true,
}}
minRows={3}
maxRows={3}
rows={1}
maxRows={1}
disabled={false}
className="disabled_style enable_style"
value={p_one_affect_comment}
@ -4326,6 +4350,11 @@ const Employes = (props) => {
{String(submenu) === "droit_acces" && <div className="div_row">
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Droit Acces </nav>
<div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_employe} className="detail_class_submenu" id='detail_employe' name='detail_employe'>Détail employé</Button>
<Button variant="outlined" onClick={submenu_droit_acces} className="detail_class_submenu" id='droit_acces' name='droit_acces'>Droits d'acces </Button>
<Button variant="outlined" onClick={submenu_affectation} className="detail_class_submenu" id='affectation' name='affectation'>Affectation </Button>
</div>
</div>}

View File

@ -4373,7 +4373,6 @@ function GestionAdministrative(props) {
if (String(res.data.status) === String("true")) {
setOne_Create_Participant_api("true");
setOne_Create_Participant_result(res.data.message);
alert(" Le participant a été correctement ajouté");
setaddOneParticipant("0");
setreduction_session("1");
GetListePreinscrit(mysession);
@ -4381,6 +4380,8 @@ function GestionAdministrative(props) {
GetListeEmargement(mysession);
GetListeEvaluation(mysession);
submenu_inscrit();
alert(" Le participant a été correctement ajouté");
myRef_detail_inscrit.current.scrollIntoView({ behavior: "smooth" });
} else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message);
@ -4476,6 +4477,9 @@ function GestionAdministrative(props) {
const [isimgclassSelected_recid, setisimgclassSelected_recid] = useState("");
const [isimgclassSelectedfile, setisimgclassSelectedfile] = useState(false);
const myRef_detail_inscrit = useRef(null)
const [userimgclassprofil, setuserimgclassprofil] = useState();
const [userimgclassprofilchanged, setuserimgclassprofilchanged] = useState("");
@ -4650,7 +4654,7 @@ function GestionAdministrative(props) {
if (String(result['status']) === String("true")) {
setrecord_Stagiaire_Image_api("true");
setuserimgclassprofilchanged("");
alert(" L'image à jour a été mise enregistrée ");
alert(" L'image a été enregistrée ");
} else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']);
@ -5987,7 +5991,7 @@ function GestionAdministrative(props) {
<div style={{ "textAlign": "left", "float": "left", "width": "100%" }} id="participant_menu_tab">
<div style={{ "textAlign": "left", "float": "left", "width": "100%" }} id="participant_menu_tab" ref={myRef_detail_inscrit}>
<Button variant="outlined" onClick={submenu_preinscrit} className="detail_class_submenu" id='menu_preinscrit' name='menu_preinscrit'>Preinscription ({String(nb_stagiaire_Preinscrit)})</Button>
<Button variant="outlined" onClick={submenu_inscrit} className="detail_class_submenu" id='menu_inscrit' name='menu_inscrit'>Inscription ({String(nb_stagiaire_Inscrit)})</Button>
<Button variant="outlined" onClick={submenu_emargement} className="detail_class_submenu" id='menu_emarge' name='menu_emarge'>Liste émargement</Button>
@ -6614,7 +6618,7 @@ function GestionAdministrative(props) {
className="disabled_style enable_style"
>
{status_inscription.map((option) => (
<MenuItem key={option.value} value={option.value}>
<MenuItem key={option.value} value={option.value} style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>
{option.label} &nbsp; <br />
</MenuItem>
))}

View File

@ -50,7 +50,7 @@ const Materiels = (props) => {
var date_today_90j = new Date();
date_today_90j.setDate(date_today_90j.getDate() +90);
date_today_90j.setDate(date_today_90j.getDate() + 90);
const [p_filtre1, setp_filtre1] = useState();
const [p_filtre1_value, setp_filtre1_value] = useState();
@ -67,12 +67,12 @@ const Materiels = (props) => {
const columns = [
{ field: '_id', headerName: '_id', hide: true },
{ field: 'id', headerName: 'id', hide: true },
{ field: 'ref_interne', headerName: 'Ref. Interne', width: 150, hideable: false, },
{ field: 'nom', headerName: 'Nom', width: 150, hide: false, editable: true },
{ field: 'famille', headerName: 'Famille', width: 150, hide: false, editable: true },
{ field: 'marque', headerName: 'Marque', width: 150, hide: false, editable: true },
{ field: 'type', headerName: 'Type', width: 150, hide: false, editable: true },
{ field: 'fournisseur', headerName: 'Fournisseur', width: 150, hide: false, editable: true },
{ field: 'ref_interne', headerName: 'Ref. Interne', flex: 1, hideable: false, },
{ field: 'nom', headerName: 'Nom', flex: 1, hide: false, },
{ field: 'famille', headerName: 'Famille', flex: 1, hide: false, },
{ field: 'marque', headerName: 'Marque', flex: 1, hide: false, },
{ field: 'type', headerName: 'Type', width: 150, hide: false, },
{ field: 'fournisseur', headerName: 'Fournisseur', flex: 1, hide: false, },
{
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
@ -139,11 +139,11 @@ const Materiels = (props) => {
const columns_materielle_affectation = [
{ field: '_id', headerName: '_id', hide: true },
{ field: 'id', headerName: 'id', hide: true },
{ field: 'poste', headerName: 'Poste', width: 150, hideable: false, },
{ field: 'date_du', headerName: 'Du', width: 150, hide: false, editable: true },
{ field: 'date_au', headerName: 'Au', width: 150, hide: false, editable: true },
{ field: 'related_target_collection_object', headerName: 'Cible', width: 150, hide: false, editable: true },
{ field: 'related_target_collection_id_nom', headerName: 'Cible Nom', width: 150, hide: false, editable: true },
{ field: 'poste', headerName: 'Poste', flex: 1, hideable: false, },
{ field: 'date_du', headerName: 'Du', width: 150, hide: false, },
{ field: 'date_au', headerName: 'Au', width: 150, hide: false, },
{ field: 'related_target_collection_object', headerName: 'Cible', flex: 1, hide: false, },
{ field: 'related_target_collection_id_nom', headerName: 'Cible Nom', flex: 1, hide: false, },
{ field: 'target_related_collection', headerName: 'Type', hide: true },
{ field: 'target_related_collection_id', headerName: 'Type ID', hide: true },
{
@ -652,6 +652,13 @@ const Materiels = (props) => {
if (String(materiel_data_edit_mode) !== "1")
disable_Materiel_DetailFields();
setSelectionModel_affectations([]);
setdisplay_affectation("0");
setAdd_new_affectation("");
clean_affectation_fields();
clean_nouvelle_affectation_fields();
}
@ -1146,14 +1153,14 @@ const Materiels = (props) => {
if (String(result['status']) === String("true")) {
setrecord_materiel_Image_api("true");
setuserimgclassprofilchanged("");
alert(" L'image à jour a été mise enregistrée ");
alert(" L'image a été enregistrée ");
} else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']);
history.push("/Connexion");
} else {
setrecord_materiel_Image_api("false");
alert(" Erreur : " + result['message']);
alert(result['message']);
}
})
@ -1253,7 +1260,9 @@ const Materiels = (props) => {
setsubmenu("detail_materiel");
setadd_One_Materiel("");
Get_Materiel_Data(selected_id);
//Get_Materiel_Data(selected_id);
Display_Detail_Material_Data(selected_id);
if (myRef_head)
myRef_head.current.scrollIntoView({ behavior: "smooth" });
@ -2408,7 +2417,7 @@ const Materiels = (props) => {
<div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
{/* <Button variant="outlined" onClick={submenu_import_materiel} className="detail_class_submenu bton_import_excel"
{/* <Button variant="outlined" onClick={submenu_import_materiel} className="detail_class_submenu bton_import_excel"
id='menu_import_participant' name='menu_import_participant'>Importer du materiel Excel &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
@ -2438,16 +2447,15 @@ const Materiels = (props) => {
</div>
</div>
<div className="div_row"> &nbsp;</div>
<div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_materiel} className="detail_class_submenu" id='detail_materiel' name='detail_materiel'>Détail Materiel</Button>
<Button variant="outlined" onClick={submenu_affectation} className="detail_class_submenu" id='affectation' name='affectation'>Affectation </Button>
</div>
</div>
{String(submenu) === "detail_materiel" && String(add_One_Materiel) !== "1" && <div className="div_row">
<div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_materiel} className="detail_class_submenu" id='detail_materiel' name='detail_materiel'>Détail Materiel</Button>
<Button variant="outlined" onClick={submenu_affectation} className="detail_class_submenu" id='affectation' name='affectation'>Affectation </Button>
</div>
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Détail Materiel </nav>
<div className="div_row" style={{ "border": "None" }}>
<div className="div_row_gauche">
@ -2764,6 +2772,10 @@ const Materiels = (props) => {
{String(submenu) === "detail_materiel" && String(add_One_Materiel) === "1" && <div className="div_row">
<div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_materiel} className="detail_class_submenu" id='detail_materiel' name='detail_materiel'>Détail Materiel</Button>
<Button variant="outlined" onClick={submenu_affectation} className="detail_class_submenu" id='affectation' name='affectation'>Affectation </Button>
</div>
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Ajouter un nouveau materiel </nav>
<div className="session_data" >
<div className="session_caract"> Ref. Interne<br />
@ -3014,6 +3026,10 @@ const Materiels = (props) => {
</div>}
{String(submenu) === "affectation" && <div className="div_row">
<div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_materiel} className="detail_class_submenu" id='detail_materiel' name='detail_materiel'>Détail Materiel</Button>
<Button variant="outlined" onClick={submenu_affectation} className="detail_class_submenu" id='affectation' name='affectation'>Affectation </Button>
</div>
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Affectation </nav>
<div className="session_data">
<div style={{ "border": "None" }}>

View File

@ -54,7 +54,7 @@ const PartnerClientActivite = (props) => {
const history = useHistory();
var date_today_90j = new Date();
date_today_90j.setDate(date_today_90j.getDate() +90);
date_today_90j.setDate(date_today_90j.getDate() + 90);
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
@ -293,12 +293,16 @@ const PartnerClientActivite = (props) => {
setrecordPartnerClient_Activite_Data_api("true");
setrecordPartnerClient_Activite_Data_result(res.data.message);
setshowactivite_detail("0");
Get_List_Activite_Of_client_Part();
alert(res.data.message);
setdatamodification_activite("0");
setformedit_mode_activite("0");
setcurrent_activite_recid("");
setshow_all_activite_list("1");
setshowactivite_detail('0');
setadd_one_activite('0');
alert(res.data.message);
}
else if (String(res.data.status) === String("Err_Connexion")) {
@ -728,6 +732,7 @@ const PartnerClientActivite = (props) => {
</div>}
{String(showactivite_detail) === "1" && <div className="div_row" style={{ "marginLeft": "5px", "marginRight": "5px" }} onChange={DataUpdated_Activite_Data}>
<div className="training_caract">
<nav style={{ "fontSize": "11px" }}> &nbsp;</nav>
<TextField
required
name="activite_description"
@ -766,6 +771,8 @@ const PartnerClientActivite = (props) => {
</div>}
{String(formedit_mode_activite) === "0" && <div className="training_caract">
<nav style={{ "fontSize": "11px" }}> &nbsp;</nav>
<TextField
required
name="activite_deadline"
@ -775,7 +782,7 @@ const PartnerClientActivite = (props) => {
}}
disabled={false}
className="disabled_style"
value={setp_activite_deadline_label}
value={p_activite_deadline_label}
/>
</div>}

View File

@ -1,4 +1,4 @@
import React, { useState, useEffect } from "react";
import React, { useRef, useState, useEffect } from "react";
import axios from "axios";
import partnerbannerimg from "../mysy_img/MYSY_banner_compte.png";
import profileimg from "../mysy_img/MYSY-profil-2.png";
@ -41,15 +41,20 @@ import {
import { DataGrid, GridToolbar, frFR, GridCellParams } from '@mui/x-data-grid';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint, FcDeleteDatabase } from "react-icons/fc";
import { darken, lighten, styled } from '@mui/material/styles';
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import AddParnerClient from "./AddPartnerClient";
//import { FcHome} from "react-icons/fc";
import { alpha } from '@mui/material/styles';
import { gridClasses } from '@mui/x-data-grid';
import { AiOutlineUserAdd } from "react-icons/ai";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
const Partner_Client = (props) => {
@ -280,72 +285,203 @@ const Partner_Client = (props) => {
var clientmail = String(line.email);
setClient_email(clientmail);
setEdite_Client("1");
if (myRef_detail_client.current) {
myRef_detail_client.current.scrollIntoView({ behavior: "smooth" });
}
}
}
const [p_filtre1, setp_filtre1] = useState();
const [p_filtre1_value, setp_filtre1_value] = useState();
const [p_filtre2, setp_filtre2] = useState();
const [p_filtre2_value, setp_filtre2_value] = useState();
function clean_all_filters() {
setp_filtre1();
setp_filtre1_value();
setp_filtre2();
setp_filtre2_value();
}
const myRef_detail_client = useRef(null)
return (
<div className="partner_client">
<div className="div_row">
{String(Edite_Client) === "1" && <div className="div_row">
<div className="titre1"> Detail client : {Client_email}</div>
<h3> Vos clients</h3>
<AddParnerClient client_mail={Client_email} close_detail_client={close_detail_client} />
<div className="titre1"> Utilisez les filtres !</div>
<div>
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter" >
<TextField
name="filtre1"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
value={p_filtre1}
onChange={(e) => {
setp_filtre1(e.target.value)
}}
>
</div>}
<MenuItem value="nom_client" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Nom &nbsp;&nbsp;</MenuItem>
<MenuItem value="email_client" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Email &nbsp;</MenuItem>
{String(Edite_Client) === "2" && <div className="div_row">
<div className="titre1"> Detail client : {Client_email}</div>
<AddParnerClient client_mail={Client_email} close_detail_client={close_detail_client} new_customer="1"
Get_List_Partner_Clients={Get_List_Partner_Clients} />
</div>}
</TextField>
</div>
<div className="titre1"> Liste des clients</div>
<div className="div_row">
<div style={{ height: "500px", width: '100%' }}>
<div className="div_row">
<div className="div_row_droite texte_area_filter_value" >
{p_filtre1 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre1_value"
id="filtre1_value"
<Button variant="outlined" onClick={submenu_import_part_client_mass} className="detail_class_submenu bton_add_menuclient" style={{
"background": "#c8cfd5",
"color": "black", "width": "auto"
}}
id='menu_import_participant' name='menu_import_participant'>Choisir un fichier et Importer &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_filtre1_value}
onChange={(e) => { setp_filtre1_value(e.target.value); }}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<AiFillCloseCircle
style={{ 'cursor': "pointer", "color": "orangered" }}
onClick={(e) => {
setp_filtre1_value("");
}} />
</InputAdornment>
),
}}
/>
}
</div>
{p_filtre1 && <div className='filter_bton_add'>
<Tooltip id="my-tooltip01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip01" data-tooltip-content="Ajouter une nouvelle ligne de filtre">
&nbsp; <MdAddCircleOutline onClick={(e) => {
setp_filtre2("1");
}} />
</a>
</div>}
{p_filtre1 && <div className='filter_bton_add'>
<Tooltip id="my-tooltip02" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip02" data-tooltip-content="Supprimer cette ligne de filtre">
&nbsp; <MdRemoveCircleOutline onClick={(e) => {
setp_filtre1();
setp_filtre1_value();
}}
/>
</a>
</div>}
</div>
{p_filtre2 &&
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter">
<TextField
name="filtre2"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
value={p_filtre2}
onChange={(e) => {
setp_filtre2(e.target.value)
}}
>
<MenuItem value="nom_client" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Nom &nbsp;&nbsp;</MenuItem>
<MenuItem value="email_client" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Email &nbsp;</MenuItem>
</TextField>
</div>
<div className="div_row_droite texte_area_filter" >
{String(p_filtre2).length > 3 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre2_value"
id="filtre2_value"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_filtre2_value}
onChange={(e) => setp_filtre2_value(e.target.value)}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<AiFillCloseCircle
style={{ 'cursor': "pointer", "color": "orangered" }}
onClick={(e) => {
setp_filtre2_value("");
}} />
</InputAdornment>
),
}}
/>}
</div>
{String(p_filtre2).length > 3 && <div className='filter_bton_add'>
<Tooltip id="my-tooltip04" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip04" data-tooltip-content="Supprimer cette ligne de filtre">
&nbsp; <MdRemoveCircleOutline
onClick={(e) => {
setp_filtre2();
setp_filtre2_value();
}}
/>
</a>
</div>}
</div>
}
{<div className="div_row" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
<Button variant="contained" className="bton_enreg" onClick={Get_List_Partner_Clients}>Rechercher
</Button>
</div>
<Button variant="outlined" onClick={handleClick_add_new_client}
className="detail_class_submenu bton_add_menuclient"
id='menu_one_participant' name='menu_one_participant'><img src={participants} alt="ajout un client" className="icon_plus" /> &nbsp;
Ajouter 1 Client
<div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_annule" onClick={clean_all_filters}>Annuler
</Button>
<br />
<a href='/sample/template_import_client.csv' download>Télécharger un fichier modèle</a>
<br />
<i>{part_client_file_name}</i><br />
{String(liste_part_client_file_change_api) === String("true") && <nav className="okUpdateData"> Les client ont été correctement importés</nav>}
{String(liste_part_client_file_change_api) === String("false") && <nav className="koUpdateData"> {liste_part_client_file_change_message} </nav>}
<input type="file"
accept=".csv"
ref={hiddenFileInput}
style={{ display: 'none' }}
name="liste_participants_file"
onChange={liste_part_client_file_change}
/>
</div>
</div>}
</div>
<div className="div_row">
<div style={{ height: 550, width: '100%', paddingRight: '1px' }}>
&nbsp;
<Box
sx={{
@ -403,29 +539,58 @@ const Partner_Client = (props) => {
</div>
{/*<div className="titre1"> Grid des clients</div>
<div className="div_row" style={{ "marginLeft": "5px", "marginRight": "5px" }}>
<div className="client_grid">
{Get_List_Partner_Clients_result && String(Get_List_Partner_Clients_api) === "true" &&
Get_List_Partner_Clients_result.map((client) => (
<div className="div_row" ref={myRef_detail_client}>
<div>
mail = {String(JSON.parse(client).email)} <br />
nom = {String(JSON.parse(client).nom)} <br />
Tel = {String(JSON.parse(client).telephone)} <br />
Adresse = {String(JSON.parse(client).adr_adresse)} - {String(JSON.parse(client).adr_ville)} <br />
<Button variant="outlined" onClick={submenu_import_part_client_mass} className="detail_class_submenu bton_import_excel"
id='menu_import_participant' name='menu_import_participant'>Choisir un fichier et Importer &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
</div>
<Button variant="outlined" onClick={handleClick_add_new_client}
className="detail_class_submenu bton_add_session"
id='menu_one_participant' name='menu_one_participant'><img src={participants} alt="ajout un client" className="icon_plus" /> &nbsp;
Ajouter 1 Client
</Button>
<br />
<a href='/sample/template_import_client.csv' download>Télécharger un fichier modèle</a>
<br />
<i>{part_client_file_name}</i><br />
{String(liste_part_client_file_change_api) === String("true") && <nav className="okUpdateData"> Les client ont été correctement importés</nav>}
{String(liste_part_client_file_change_api) === String("false") && <nav className="koUpdateData"> {liste_part_client_file_change_message} </nav>}
<input type="file"
accept=".csv"
ref={hiddenFileInput}
style={{ display: 'none' }}
name="liste_participants_file"
onChange={liste_part_client_file_change}
/>
))}
</div>
</div>
*/}
</div>
{String(Edite_Client) === "1" && <div className="div_row">
<div className="titre1"> Detail client : {Client_email}</div>
<AddParnerClient client_mail={Client_email} close_detail_client={close_detail_client} />
</div>}
{String(Edite_Client) === "2" && <div className="div_row">
<div className="titre1"> Detail client : {Client_email}</div>
<AddParnerClient client_mail={Client_email} close_detail_client={close_detail_client} new_customer="1"
Get_List_Partner_Clients={Get_List_Partner_Clients} />
</div>}
</div>
)

View File

@ -1053,7 +1053,7 @@
.scroll_mysy {
overflow-y: auto;
max-height: 20rem;
height: 30rem;
overflow-y: visible;
overflow-y: scroll;
padding-right: 1rem !important;

File diff suppressed because it is too large Load Diff