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"); const [addcontact, setaddcontact] = useState("0");
function Add_Contact() { function Add_Contact() {
setdatamodification_contact("0"); setdatamodification_contact("0");
setformedit_mode_contact("0"); setformedit_mode_contact("1");
clean_contact_set_values(); clean_contact_set_values();
setaddcontact("1"); setaddcontact("1");
setcurrent_contact_recid(""); setcurrent_contact_recid("");
@ -1701,13 +1701,13 @@ const AddParnerClient = (props) => {
} else { } else {
// Il s'agit d'un ajout d'une nouvelle activité. on a rien dans le current_activite_recid // 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", "partner_client");
form.append("related_collection_owner_email", p_client_email); 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 // Données de contact du client du partner
var contact_email = "" var contact_email = ""
@ -1952,6 +1952,7 @@ const AddParnerClient = (props) => {
Disable_contact_fields(); Disable_contact_fields();
setformedit_mode_contact("0");
} }
else if (String(res.data.status) === String("Err_Connexion")) { else if (String(res.data.status) === String("Err_Connexion")) {
@ -2531,8 +2532,8 @@ const AddParnerClient = (props) => {
{String(submenu).trim() === "submenu_contact" && <div className="training_data"> {String(submenu).trim() === "submenu_contact" && <div className="training_data">
{String(addcontact) !== "1" && <div className="div_row" style={{ "marginLeft": "5px", "marginRight": "5px", "paddingRight": "10px" }}> {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" onClick={Add_Contact} style={{ "cursor": "pointer" }}> <AiOutlineUserAdd /> Ajouter un contact </div>
<div className="div_row scroll_mysy"> <div className="div_row scroll_mysy" style={{ "height": "30rem", }}>
<div className="contact_grid"> <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 && String(Get_List_Contact_Of_client_Part_api) === "true" &&
@ -2569,7 +2570,7 @@ const AddParnerClient = (props) => {
/> />
</div> </div>
<div className="training_caract"> { String(formedit_mode_contact) === "1" && <div className="training_caract">
<TextField <TextField
required required
name="contact_civilite" name="contact_civilite"
@ -2577,13 +2578,38 @@ const AddParnerClient = (props) => {
InputLabelProps={{ InputLabelProps={{
shrink: true, 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} disabled={false}
className="disabled_style" className="disabled_style"
value={p_contact_civilite} value={p_contact_civilite}
onChange={(e) => setp_contact_civilite(e.target.value)} onChange={(e) => setp_contact_civilite(e.target.value)}
/> />
</div>
</div>}
<div className="training_caract"> <div className="training_caract">

View File

@ -1930,7 +1930,7 @@ const Config_Documents = (props) => {
</div> </div>
<div className="div_row_droite" style={{ "textAlign": "left" }}> <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 <TextField
name="one_champ_table" name="one_champ_table"
id="one_champ_table" id="one_champ_table"

View File

@ -3680,7 +3680,7 @@ const DisplayPartnerSession = (props) => {
if (String(result['status']) === String("true")) { if (String(result['status']) === String("true")) {
setrecord_Stagiaire_Image_api("true"); setrecord_Stagiaire_Image_api("true");
setuserimgclassprofilchanged(""); 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")) { } else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']); alert('Erreur: ' + result['message']);

View File

@ -1352,7 +1352,7 @@ const DisplayPartnerStagiaires = (props) => {
if (String(result['status']) === String("true")) { if (String(result['status']) === String("true")) {
setrecord_Stagiaire_Image_api("true"); setrecord_Stagiaire_Image_api("true");
setuserimgclassprofilchanged(""); 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")) { } else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']); alert('Erreur: ' + result['message']);
@ -2063,10 +2063,11 @@ const DisplayPartnerStagiaires = (props) => {
if (String(res.data.status) === String("true")) { if (String(res.data.status) === String("true")) {
setOne_Create_Participant_api("true"); setOne_Create_Participant_api("true");
setOne_Create_Participant_result(res.data.message); setOne_Create_Participant_result(res.data.message);
alert(" Le participant a été correctement ajouté");
setaddOneParticipant(); setaddOneParticipant();
Getall_TrainingParticipant(); Getall_TrainingParticipant();
clear_one_Attende_Fields(); 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")) { } else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message); alert('Erreur: ' + res.data.message);
@ -2082,7 +2083,7 @@ const DisplayPartnerStagiaires = (props) => {
console.warn('One_Create_Participant : Not good man :( = ' + error); console.warn('One_Create_Participant : Not good man :( = ' + error);
setOne_Create_Participant_api("false"); 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 &&
GetCurrentPartnerClass_result.map((myclass) => ( 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} {JSON.parse(myclass).title}
</MenuItem> </MenuItem>

View File

@ -67,11 +67,11 @@ const Employes = (props) => {
const columns = [ const columns = [
{ field: '_id', headerName: '_id', hide: true }, { field: '_id', headerName: '_id', hide: true },
{ field: 'id', headerName: 'id', hide: true }, { field: 'id', headerName: 'id', hide: true },
{ field: 'email', headerName: 'email', width: 150, hideable: false, }, { field: 'email', headerName: 'email', flex: 1, hideable: false, },
{ field: 'nom', headerName: 'nom', width: 150, hide: false, editable: true }, { field: 'nom', headerName: 'nom', flex: 1, hide: false, },
{ field: 'prenom', headerName: 'prenom', width: 150, hide: false, editable: true }, { 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) => { valueFormatter: (params) => {
if (String(params.value) === "0") if (String(params.value) === "0")
return "Non"; return "Non";
@ -82,9 +82,9 @@ const Employes = (props) => {
return String(params.value); 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) => { valueFormatter: (params) => {
if (String(params.value) === "0") if (String(params.value) === "0")
return "Mme"; return "Mme";
@ -96,8 +96,8 @@ const Employes = (props) => {
return String(params.value); return String(params.value);
}, },
}, },
{ field: 'profil', headerName: 'profil', width: 150, hide: false, editable: true }, { field: 'profil', headerName: 'profil', width: 150, hide: false, },
{ field: 'fonction', headerName: 'Fonction', width: 150, hide: false, editable: true }, { field: 'fonction', headerName: 'Fonction', width: 150, hide: false, },
/* { /* {
field: "Detail", headerName: 'Voir detail', field: "Detail", headerName: 'Voir detail',
@ -183,11 +183,11 @@ const Employes = (props) => {
const columns_employee_affectation = [ const columns_employee_affectation = [
{ field: '_id', headerName: '_id', hide: true }, { field: '_id', headerName: '_id', hide: true },
{ field: 'id', headerName: 'id', hide: true }, { field: 'id', headerName: 'id', hide: true },
{ field: 'poste', headerName: 'Poste', width: 150, hideable: false, }, { field: 'poste', headerName: 'Poste', flex: 1, hideable: false, },
{ field: 'date_du', headerName: 'Du', width: 150, hide: false, editable: true }, { field: 'date_du', headerName: 'Du', width: 150, hide: false, },
{ field: 'date_au', headerName: 'Au', width: 150, hide: false, editable: true }, { field: 'date_au', headerName: 'Au', width: 150, hide: false, },
{ field: 'related_target_collection_object', headerName: 'Cible', width: 150, hide: false, editable: true }, { field: 'related_target_collection_object', headerName: 'Cible', flex: 1, hide: false, },
{ field: 'related_target_collection_id_nom', headerName: 'Cible Nom', width: 150, hide: false, editable: true }, { 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', headerName: 'Type', hide: true },
{ field: 'target_related_collection_id', headerName: 'Type ID', hide: true }, { field: 'target_related_collection_id', headerName: 'Type ID', hide: true },
{ {
@ -341,7 +341,7 @@ const Employes = (props) => {
setAdd_new_affectation(""); setAdd_new_affectation("");
clean_affectation_fields(); clean_affectation_fields();
clean_nouvelle_affectation_fields(); clean_nouvelle_affectation_fields();
setsubmenu("");
var line = JSON.parse(rows_affectations[selected_row_id]); var line = JSON.parse(rows_affectations[selected_row_id]);
@ -1289,7 +1289,7 @@ const Employes = (props) => {
if (String(result['status']) === String("true")) { if (String(result['status']) === String("true")) {
setrecord_employee_Image_api("true"); setrecord_employee_Image_api("true");
setuserimgclassprofilchanged(""); 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")) { } else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']); alert('Erreur: ' + result['message']);
@ -1839,6 +1839,12 @@ const Employes = (props) => {
if (String(employee_data_edit_mode) !== "1") if (String(employee_data_edit_mode) !== "1")
disable_Employee_DetailFields(); 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.backgroundColor = "#d8edfc";
document.getElementById("affectation").style.color = "black"; document.getElementById("affectation").style.color = "black";
} }
setSelectionModel_affectations([]);
setdisplay_affectation("0");
setAdd_new_affectation("");
clean_affectation_fields();
clean_nouvelle_affectation_fields();
} }
@ -2819,19 +2829,23 @@ const Employes = (props) => {
</div> </div>
</div> </div>
<div className="div_row"> &nbsp;</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" 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_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> <Button variant="outlined" onClick={submenu_affectation} className="detail_class_submenu" id='affectation' name='affectation'>Affectation </Button>
</div>*/}
</div>
</div> </div>
{String(submenu) === "detail_employe" && String(add_One_Employee) !== "1" && <div className="div_row"> {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> <nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Détail Employé </nav>
<div className="div_row" style={{ "border": "None" }}> <div className="div_row" style={{ "border": "None" }}>
<div className="div_row_gauche"> <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"> {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> <nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Ajouter un Employé </nav>
<div className="session_data" > <div className="session_data" >
@ -3775,7 +3794,12 @@ const Employes = (props) => {
{String(submenu) === "affectation" && <div className="div_row"> {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 className="session_data">
<div style={{ "border": "None" }}> <div style={{ "border": "None" }}>
@ -4090,12 +4114,12 @@ const Employes = (props) => {
<TextField <TextField
name="affect_comment" name="affect_comment"
id="affect_comment" id="affect_comment"
text multiline
InputLabelProps={{ InputLabelProps={{
shrink: true, shrink: true,
}} }}
minRows={3} rows={1}
maxRows={3} maxRows={1}
disabled={false} disabled={false}
className="disabled_style enable_style" className="disabled_style enable_style"
value={p_affect_comment} value={p_affect_comment}
@ -4277,12 +4301,12 @@ const Employes = (props) => {
<TextField <TextField
name="one_affect_comment" name="one_affect_comment"
id="one_affect_comment" id="one_affect_comment"
text multiline
InputLabelProps={{ InputLabelProps={{
shrink: true, shrink: true,
}} }}
minRows={3} rows={1}
maxRows={3} maxRows={1}
disabled={false} disabled={false}
className="disabled_style enable_style" className="disabled_style enable_style"
value={p_one_affect_comment} value={p_one_affect_comment}
@ -4326,6 +4350,11 @@ const Employes = (props) => {
{String(submenu) === "droit_acces" && <div className="div_row"> {String(submenu) === "droit_acces" && <div className="div_row">
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Droit Acces </nav> <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>} </div>}

View File

@ -4373,7 +4373,6 @@ function GestionAdministrative(props) {
if (String(res.data.status) === String("true")) { if (String(res.data.status) === String("true")) {
setOne_Create_Participant_api("true"); setOne_Create_Participant_api("true");
setOne_Create_Participant_result(res.data.message); setOne_Create_Participant_result(res.data.message);
alert(" Le participant a été correctement ajouté");
setaddOneParticipant("0"); setaddOneParticipant("0");
setreduction_session("1"); setreduction_session("1");
GetListePreinscrit(mysession); GetListePreinscrit(mysession);
@ -4381,6 +4380,8 @@ function GestionAdministrative(props) {
GetListeEmargement(mysession); GetListeEmargement(mysession);
GetListeEvaluation(mysession); GetListeEvaluation(mysession);
submenu_inscrit(); 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")) { } else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message); alert('Erreur: ' + res.data.message);
@ -4477,6 +4478,9 @@ function GestionAdministrative(props) {
const [isimgclassSelectedfile, setisimgclassSelectedfile] = useState(false); const [isimgclassSelectedfile, setisimgclassSelectedfile] = useState(false);
const myRef_detail_inscrit = useRef(null)
const [userimgclassprofil, setuserimgclassprofil] = useState(); const [userimgclassprofil, setuserimgclassprofil] = useState();
const [userimgclassprofilchanged, setuserimgclassprofilchanged] = useState(""); const [userimgclassprofilchanged, setuserimgclassprofilchanged] = useState("");
@ -4650,7 +4654,7 @@ function GestionAdministrative(props) {
if (String(result['status']) === String("true")) { if (String(result['status']) === String("true")) {
setrecord_Stagiaire_Image_api("true"); setrecord_Stagiaire_Image_api("true");
setuserimgclassprofilchanged(""); 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")) { } else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']); 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_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_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> <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" className="disabled_style enable_style"
> >
{status_inscription.map((option) => ( {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 /> {option.label} &nbsp; <br />
</MenuItem> </MenuItem>
))} ))}

View File

@ -67,12 +67,12 @@ const Materiels = (props) => {
const columns = [ const columns = [
{ field: '_id', headerName: '_id', hide: true }, { field: '_id', headerName: '_id', hide: true },
{ field: 'id', headerName: 'id', hide: true }, { field: 'id', headerName: 'id', hide: true },
{ field: 'ref_interne', headerName: 'Ref. Interne', width: 150, hideable: false, }, { field: 'ref_interne', headerName: 'Ref. Interne', flex: 1, hideable: false, },
{ field: 'nom', headerName: 'Nom', width: 150, hide: false, editable: true }, { field: 'nom', headerName: 'Nom', flex: 1, hide: false, },
{ field: 'famille', headerName: 'Famille', width: 150, hide: false, editable: true }, { field: 'famille', headerName: 'Famille', flex: 1, hide: false, },
{ field: 'marque', headerName: 'Marque', width: 150, hide: false, editable: true }, { field: 'marque', headerName: 'Marque', flex: 1, hide: false, },
{ field: 'type', headerName: 'Type', width: 150, hide: false, editable: true }, { field: 'type', headerName: 'Type', width: 150, hide: false, },
{ field: 'fournisseur', headerName: 'Fournisseur', width: 150, hide: false, editable: true }, { field: 'fournisseur', headerName: 'Fournisseur', flex: 1, hide: false, },
{ {
field: "delete", headerName: 'Supprimer', field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => { renderCell: (cellValues) => {
@ -139,11 +139,11 @@ const Materiels = (props) => {
const columns_materielle_affectation = [ const columns_materielle_affectation = [
{ field: '_id', headerName: '_id', hide: true }, { field: '_id', headerName: '_id', hide: true },
{ field: 'id', headerName: 'id', hide: true }, { field: 'id', headerName: 'id', hide: true },
{ field: 'poste', headerName: 'Poste', width: 150, hideable: false, }, { field: 'poste', headerName: 'Poste', flex: 1, hideable: false, },
{ field: 'date_du', headerName: 'Du', width: 150, hide: false, editable: true }, { field: 'date_du', headerName: 'Du', width: 150, hide: false, },
{ field: 'date_au', headerName: 'Au', width: 150, hide: false, editable: true }, { field: 'date_au', headerName: 'Au', width: 150, hide: false, },
{ field: 'related_target_collection_object', headerName: 'Cible', width: 150, hide: false, editable: true }, { field: 'related_target_collection_object', headerName: 'Cible', flex: 1, hide: false, },
{ field: 'related_target_collection_id_nom', headerName: 'Cible Nom', width: 150, hide: false, editable: true }, { 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', headerName: 'Type', hide: true },
{ field: 'target_related_collection_id', headerName: 'Type ID', 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") if (String(materiel_data_edit_mode) !== "1")
disable_Materiel_DetailFields(); 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")) { if (String(result['status']) === String("true")) {
setrecord_materiel_Image_api("true"); setrecord_materiel_Image_api("true");
setuserimgclassprofilchanged(""); 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")) { } else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']); alert('Erreur: ' + result['message']);
history.push("/Connexion"); history.push("/Connexion");
} else { } else {
setrecord_materiel_Image_api("false"); setrecord_materiel_Image_api("false");
alert(" Erreur : " + result['message']); alert(result['message']);
} }
}) })
@ -1253,7 +1260,9 @@ const Materiels = (props) => {
setsubmenu("detail_materiel"); setsubmenu("detail_materiel");
setadd_One_Materiel(""); setadd_One_Materiel("");
Get_Materiel_Data(selected_id); //Get_Materiel_Data(selected_id);
Display_Detail_Material_Data(selected_id);
if (myRef_head) if (myRef_head)
myRef_head.current.scrollIntoView({ behavior: "smooth" }); myRef_head.current.scrollIntoView({ behavior: "smooth" });
@ -2438,16 +2447,15 @@ const Materiels = (props) => {
</div> </div>
</div> </div>
<div className="div_row"> &nbsp;</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>
</div>
{String(submenu) === "detail_materiel" && String(add_One_Materiel) !== "1" && <div className="div_row"> {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> <nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Détail Materiel </nav>
<div className="div_row" style={{ "border": "None" }}> <div className="div_row" style={{ "border": "None" }}>
<div className="div_row_gauche"> <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"> {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> <nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Ajouter un nouveau materiel </nav>
<div className="session_data" > <div className="session_data" >
<div className="session_caract"> Ref. Interne<br /> <div className="session_caract"> Ref. Interne<br />
@ -3014,6 +3026,10 @@ const Materiels = (props) => {
</div>} </div>}
{String(submenu) === "affectation" && <div className="div_row"> {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> <nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Affectation </nav>
<div className="session_data"> <div className="session_data">
<div style={{ "border": "None" }}> <div style={{ "border": "None" }}>

View File

@ -293,12 +293,16 @@ const PartnerClientActivite = (props) => {
setrecordPartnerClient_Activite_Data_api("true"); setrecordPartnerClient_Activite_Data_api("true");
setrecordPartnerClient_Activite_Data_result(res.data.message); setrecordPartnerClient_Activite_Data_result(res.data.message);
setshowactivite_detail("0");
Get_List_Activite_Of_client_Part(); Get_List_Activite_Of_client_Part();
alert(res.data.message);
setdatamodification_activite("0"); setdatamodification_activite("0");
setformedit_mode_activite("0"); setformedit_mode_activite("0");
setcurrent_activite_recid(""); 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")) { else if (String(res.data.status) === String("Err_Connexion")) {
@ -728,6 +732,7 @@ const PartnerClientActivite = (props) => {
</div>} </div>}
{String(showactivite_detail) === "1" && <div className="div_row" style={{ "marginLeft": "5px", "marginRight": "5px" }} onChange={DataUpdated_Activite_Data}> {String(showactivite_detail) === "1" && <div className="div_row" style={{ "marginLeft": "5px", "marginRight": "5px" }} onChange={DataUpdated_Activite_Data}>
<div className="training_caract"> <div className="training_caract">
<nav style={{ "fontSize": "11px" }}> &nbsp;</nav>
<TextField <TextField
required required
name="activite_description" name="activite_description"
@ -766,6 +771,8 @@ const PartnerClientActivite = (props) => {
</div>} </div>}
{String(formedit_mode_activite) === "0" && <div className="training_caract"> {String(formedit_mode_activite) === "0" && <div className="training_caract">
<nav style={{ "fontSize": "11px" }}> &nbsp;</nav>
<TextField <TextField
required required
name="activite_deadline" name="activite_deadline"
@ -775,7 +782,7 @@ const PartnerClientActivite = (props) => {
}} }}
disabled={false} disabled={false}
className="disabled_style" className="disabled_style"
value={setp_activite_deadline_label} value={p_activite_deadline_label}
/> />
</div>} </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 axios from "axios";
import partnerbannerimg from "../mysy_img/MYSY_banner_compte.png"; import partnerbannerimg from "../mysy_img/MYSY_banner_compte.png";
import profileimg from "../mysy_img/MYSY-profil-2.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 { DataGrid, GridToolbar, frFR, GridCellParams } from '@mui/x-data-grid';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint, FcDeleteDatabase } from "react-icons/fc"; import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint, FcDeleteDatabase } from "react-icons/fc";
import { darken, lighten, styled } from '@mui/material/styles'; 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 AddParnerClient from "./AddPartnerClient";
//import { FcHome} from "react-icons/fc"; //import { FcHome} from "react-icons/fc";
import { alpha } from '@mui/material/styles'; import { alpha } from '@mui/material/styles';
import { gridClasses } from '@mui/x-data-grid'; import { gridClasses } from '@mui/x-data-grid';
import { AiOutlineUserAdd } from "react-icons/ai"; 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) => { const Partner_Client = (props) => {
@ -280,72 +285,203 @@ const Partner_Client = (props) => {
var clientmail = String(line.email); var clientmail = String(line.email);
setClient_email(clientmail); setClient_email(clientmail);
setEdite_Client("1"); 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 ( return (
<div className="partner_client"> <div className="partner_client">
<div className="div_row"> <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>} <div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter" >
{String(Edite_Client) === "2" && <div className="div_row"> <TextField
name="filtre1"
<div className="titre1"> Detail client : {Client_email}</div> label="Choisir un champ"
select
<AddParnerClient client_mail={Client_email} close_detail_client={close_detail_client} new_customer="1" sx={{ m: 1, width: '100%' }}
Get_List_Partner_Clients={Get_List_Partner_Clients} /> value={p_filtre1}
onChange={(e) => {
</div>} setp_filtre1(e.target.value)
<div className="titre1"> Liste des clients</div>
<div className="div_row">
<div style={{ height: "500px", width: '100%' }}>
<div className="div_row">
<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" />
</Button>
<Button variant="outlined" onClick={handleClick_add_new_client} <MenuItem value="nom_client" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Nom &nbsp;&nbsp;</MenuItem>
className="detail_class_submenu bton_add_menuclient" <MenuItem value="email_client" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Email &nbsp;</MenuItem>
id='menu_one_participant' name='menu_one_participant'><img src={participants} alt="ajout un client" className="icon_plus" /> &nbsp;
Ajouter 1 Client
</Button> </TextField>
</div>
<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" <div className="div_row_droite texte_area_filter_value" >
accept=".csv" {p_filtre1 &&
ref={hiddenFileInput} <TextField
style={{ display: 'none' }} sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="liste_participants_file" required
onChange={liste_part_client_file_change} name="filtre1_value"
id="filtre1_value"
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> </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>
<div className="div_row_droite" style={{ "textAlign": 'right', 'marginRight': '15px' }}>
<Button variant="contained" className="bton_annule" onClick={clean_all_filters}>Annuler
</Button>
</div>
</div>}
</div>
<div className="div_row">
<div style={{ height: 550, width: '100%', paddingRight: '1px' }}>
&nbsp; &nbsp;
<Box <Box
sx={{ sx={{
@ -403,28 +539,57 @@ const Partner_Client = (props) => {
</div> </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" && <div className="div_row" ref={myRef_detail_client}>
Get_List_Partner_Clients_result.map((client) => (
<div> <Button variant="outlined" onClick={submenu_import_part_client_mass} className="detail_class_submenu bton_import_excel"
mail = {String(JSON.parse(client).email)} <br /> id='menu_import_participant' name='menu_import_participant'>Choisir un fichier et Importer &nbsp;
nom = {String(JSON.parse(client).nom)} <br /> <img src={excel_icone} alt="ajout csv" className="icon_excel" />
Tel = {String(JSON.parse(client).telephone)} <br /> </Button>
Adresse = {String(JSON.parse(client).adr_adresse)} - {String(JSON.parse(client).adr_ville)} <br />
<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>
</div>
*/}
</div> <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> </div>

View File

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

File diff suppressed because it is too large Load Diff