17/12/2023 - 21h12

recette2
cherif 2023-12-17 21:06:45 +01:00
parent 906ff4aad7
commit 49334cee17
5 changed files with 466 additions and 185 deletions

View File

@ -1200,6 +1200,13 @@ const AddParnerClient = (props) => {
if (document.getElementsByName("client_email")) {
client_email = document.getElementsByName("client_email")[0].value;
}
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!client_email.match(validRegex)) {
alert("L'adresse email est invalide.");
return;
}
form.append("email", client_email);
@ -1208,6 +1215,11 @@ const AddParnerClient = (props) => {
client_nom = document.getElementsByName("client_nom")[0].value;
}
form.append("nom", client_nom);
if (String(client_nom).trim() === "") {
alert("Le nom du client est invalide.");
return;
}
var client_raison_sociale = ""
if (document.getElementsByName("client_raison_sociale")) {
@ -1332,6 +1344,12 @@ const AddParnerClient = (props) => {
if (document.getElementsByName("client_email")) {
client_email = document.getElementsByName("client_email")[0].value;
}
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!client_email.match(validRegex)) {
alert("L'adresse email est invalide.");
return;
}
form.append("email", client_email);
@ -1339,6 +1357,11 @@ const AddParnerClient = (props) => {
if (document.getElementsByName("client_nom")) {
client_nom = document.getElementsByName("client_nom")[0].value;
}
if (String(client_nom).trim() === "") {
alert("Le nom du client est invalide.");
return;
}
form.append("nom", client_nom);
var client_raison_sociale = ""
@ -2151,25 +2174,23 @@ const AddParnerClient = (props) => {
<Button variant="outlined" onClick={submenu_donnee_client} className="detail_submenu" id='submenu_donnee_client' name='submenu_donnee_client'>Données Client</Button>
</div>
<div className="session_caract">
Email <br />
<div className="session_caract"> Raison sociale <br />
<TextField
required
name="client_email"
//label="Email"
name="client_raison_sociale"
//label="Raison sociale"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_client_email}
onChange={(e) => setclient_email(e.target.value)}
value={p_client_raison_sociale}
onChange={(e) => setclient_raison_sociale(e.target.value)}
/>
</div>
<div className="session_caract"> Nom <br />
<div className="session_caract"> <b>Nom </b> <br />
<TextField
required
name="client_nom"
@ -2186,20 +2207,7 @@ const AddParnerClient = (props) => {
</div>
<div className="session_caract"> Raison sociale <br />
<TextField
required
name="client_raison_sociale"
//label="Raison sociale"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_client_raison_sociale}
onChange={(e) => setclient_raison_sociale(e.target.value)}
/>
</div>
<div className="session_caract"> Type client <br />
<TextField
@ -2247,7 +2255,7 @@ const AddParnerClient = (props) => {
/>
</div>
<div className="session_caract"> N° TVA <br />
<div className="session_caract"> N° TVA <br />
<TextField
required
name="client_tva"
@ -2262,6 +2270,22 @@ const AddParnerClient = (props) => {
/>
</div>
<div className="session_caract">
<b>Email</b> <br />
<TextField
required
name="client_email"
//label="Email"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_client_email}
onChange={(e) => setclient_email(e.target.value)}
/>
</div>
<div className="session_caract"> Adresse <br />
<TextField
required
@ -2426,24 +2450,24 @@ const AddParnerClient = (props) => {
{String(submenu).trim() === "submenu_donnee_client" && <div className="training_data" onChange={DataUpdated}>
<div className="session_caract"> Email<br />
<div className="session_caract"> Raison sociale <br />
<TextField
required
name="client_email"
//label="Email"
name="client_raison_sociale"
//label="Raison sociale"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_client_email}
onChange={(e) => setclient_email(e.target.value)}
value={p_client_raison_sociale}
onChange={(e) => setclient_raison_sociale(e.target.value)}
/>
</div>
<div className="session_caract"> Nom<br />
<div className="session_caract"><b> Nom </b><br />
<TextField
required
name="client_nom"
@ -2460,21 +2484,7 @@ const AddParnerClient = (props) => {
</div>
<div className="session_caract"> Raison sociale <br />
<TextField
required
name="client_raison_sociale"
//label="Raison sociale"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_client_raison_sociale}
onChange={(e) => setclient_raison_sociale(e.target.value)}
/>
</div>
{String(formedit_mode) !== "1" && <div className="session_caract"> Type client<br />
<TextField
required
@ -2553,6 +2563,22 @@ const AddParnerClient = (props) => {
/>
</div>
<div className="session_caract"> <b> Email </b> <br />
<TextField
required
name="client_email"
//label="Email"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_client_email}
onChange={(e) => setclient_email(e.target.value)}
/>
</div>
<div className="session_caract"> Adresse<br />
<TextField
required

View File

@ -32,6 +32,8 @@ import { Fab } from "@material-ui/core";
import fileDownload from 'js-file-download'
import { AiTwotoneEdit, AiTwotoneSave } from "react-icons/ai";
import Checkbox from '@mui/material/Checkbox';
import Autocomplete from '@mui/material/Autocomplete';
const Config_Documents = (props) => {
const history = useHistory();
@ -75,14 +77,14 @@ const Config_Documents = (props) => {
const columns = [
{ field: '_id', headerName: '_id', hide: true },
{ field: 'id', headerName: 'id', hide: true },
{ field: 'nom', headerName: 'nom', hideable: false, minWidth: 150, flex:1, },
{ field: 'ref_interne', headerName: 'ref_interne', hideable: false, minWidth: 50, maxWidth :200,flex:1, },
{ field: 'type_doc', headerName: 'type_doc', minWidth: 50, maxWidth :100,flex:1, hideable: false, },
{ field: 'cible', headerName: 'cible', minWidth: 100, maxWidth :150,flex:1, hide: false, editable: false },
{ field: 'default', headerName: 'par default', minWidth: 100, maxWidth :100,flex:1, hide: false, editable: false },
{ field: 'sujet', headerName: 'sujet', hide: false, editable: false, minWidth: 150,flex:1, },
{ field: 'nom', headerName: 'nom', hideable: false, minWidth: 150, flex: 1, },
{ field: 'ref_interne', headerName: 'ref_interne', hideable: false, minWidth: 50, maxWidth: 200, flex: 1, },
{ field: 'type_doc', headerName: 'type_doc', minWidth: 50, maxWidth: 100, flex: 1, hideable: false, },
{ field: 'cible', headerName: 'cible', minWidth: 100, maxWidth: 150, flex: 1, hide: false, editable: false },
{ field: 'default', headerName: 'par default', minWidth: 100, maxWidth: 100, flex: 1, hide: false, editable: false },
{ field: 'sujet', headerName: 'sujet', hide: false, editable: false, minWidth: 150, flex: 1, },
{
field: 'duplicate', headerName: 'Dupliquer', hide: false, editable: false, minWidth: 50, maxWidth :100,flex:1,
field: 'duplicate', headerName: 'Dupliquer', hide: false, editable: false, minWidth: 50, maxWidth: 100, flex: 1,
renderCell: (cellValues) => {
return (
@ -858,21 +860,26 @@ const Config_Documents = (props) => {
const [p_collection, setp_collection] = useState();
function add_selected_fields() {
if( String(partner_document_data_edit_mode) === "1" ){
if(!p_champ_table || String(p_champ_table) === "undefined"){
alert(" vous devez choisir un champ ");
return;
}
if (String(partner_document_data_edit_mode) === "1") {
// Cas d'un update
if( document_principal_ou_corp_mail && String(document_principal_ou_corp_mail) == "2"){
if (document_principal_ou_corp_mail && String(document_principal_ou_corp_mail) == "2") {
one_editorRef_corp_mail.current.insertContent(String(p_champ_table));
}else{
one_editorRef_programme.current.insertContent(String(p_champ_table));
} else {
one_editorRef_programme.current.insertContent(String(p_champ_table));
}
}else if( String(display_add_one_document) === "1" ){
} else if (String(display_add_one_document) === "1") {
// Cas de la creation d'un nouveau document
if( document_principal_ou_corp_mail && String(document_principal_ou_corp_mail) == "2"){
if (document_principal_ou_corp_mail && String(document_principal_ou_corp_mail) == "2") {
one_editorRef_corp_mail.current.insertContent(String(p_champ_table));
}else{
one_editorRef_programme.current.insertContent(String(p_champ_table));
} else {
one_editorRef_programme.current.insertContent(String(p_champ_table));
}
}
@ -1117,7 +1124,7 @@ const Config_Documents = (props) => {
setAdd_one_Partner_Document_api("true");
setAdd_one_Partner_Document_result(res.data.message);
clear_one_detail_fields();
setadd_one_document();
setdisplay_add_one_document();
@ -1146,6 +1153,9 @@ const Config_Documents = (props) => {
}
const [New_Get_Given_Personnalisable_Collection_and_Fields_result, setNew_Get_Given_Personnalisable_Collection_and_Fields_result] = useState([]);
const [Get_Given_Personnalisable_Collection_and_Fields_api, setGet_Given_Personnalisable_Collection_and_Fields_api] = useState();
const [Get_Given_Personnalisable_Collection_and_Fields_message, setGet_Given_Personnalisable_Collection_and_Fields_message] = useState();
const [Get_Given_Personnalisable_Collection_and_Fields_result, setGet_Given_Personnalisable_Collection_and_Fields_result] = useState();
@ -1172,6 +1182,30 @@ const Config_Documents = (props) => {
setGet_Given_Personnalisable_Collection_and_Fields_api("true");
setGet_Given_Personnalisable_Collection_and_Fields_result(res.data.message);
const new_data = res.data.message.map((x) => {
var localid = JSON.parse(x).id;
var local_id = JSON.parse(x)._id;
//---
var local_courrier_template_ref_interne = JSON.parse(x).courrier_template_ref_interne;
var local_nom_champ_technique = JSON.parse(x).nom_champ_technique;
var local_nom_champ_fonctionel = JSON.parse(x).nom_champ_fonctionel;
//---
return {
"id": localid, "_id": String(local_id), "label": local_nom_champ_fonctionel, "courrier_template_ref_interne": local_courrier_template_ref_interne,
"nom_champ_technique": local_nom_champ_technique, "nom_champ_fonctionel": local_nom_champ_fonctionel
}
// return {"_id": " + str(local_id) + ", "label": " + local_courrier_template_ref_interne + '" , "courrier_template_ref_interne": "' + local_courrier_template_ref_interne + '", "nom_champ_technique": "' + local_nom_champ_technique + '", "nom_champ_fonctionel": "' + local_nom_champ_fonctionel + '","valide": "1" };
});
setNew_Get_Given_Personnalisable_Collection_and_Fields_result(new_data);
}
else {
setGet_Given_Personnalisable_Collection_and_Fields_api("false");
@ -1594,6 +1628,8 @@ const Config_Documents = (props) => {
clear_one_detail_fields();
setadd_one_document();
setdisplay_add_one_document();
setp_champ_table("");
}
@ -2576,45 +2612,31 @@ const Config_Documents = (props) => {
</div>
<div className="div_row_droite_1_tier" style={{ "textAlign": "left" }}>
{String(partner_document_data_edit_mode) === "1" &&
<div className="div_row" > Choisir un champ <br />
<TextField
name="champ_table"
id="champ_table"
select
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style enable_style"
value={p_champ_table}
onChange={(e) => {
setp_champ_table(e.target.value);
}}
>
<Autocomplete
disablePortal
id="combo-box-demo"
options={New_Get_Given_Personnalisable_Collection_and_Fields_result}
onChange={(event, value) => {
setp_champ_table(value.nom_champ_technique);
}}
{Get_Given_Personnalisable_Collection_and_Fields_result &&
Get_Given_Personnalisable_Collection_and_Fields_result.filter((local_mymanager) => JSON.parse(local_mymanager).courrier_template_ref_interne === p_detail_ref_interne).map((mycollection) => (
<MenuItem key={JSON.parse(mycollection).nom_champ_technique}
value={JSON.parse(mycollection).nom_champ_technique}
style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%", "fontSize": "12px" }}>
{JSON.parse(mycollection).nom_champ_fonctionel}&nbsp;&nbsp;
renderInput={(params) => <TextField {...params} label="Choisir " />
}
/>
}
</MenuItem>
))}
</TextField>
{String(partner_document_data_edit_mode) === "1" &&
<div className="div_row">
<Button className="bton_enreg" onClick={add_selected_fields} style={{ "margin": "1rem", "minWidth": '80%' }}
>Ajouter Champ Choisi &nbsp;
</Button>
</div>}
{String(partner_document_data_edit_mode) === "1" &&
<div className="div_row">
<Button className="bton_enreg" onClick={add_selected_fields} style={{ "margin": "1rem", "minWidth":'80%' }}
>Ajouter Champ Choisi &nbsp;
</Button>
</div>}
</div>
{p_detail_type_doc && String(p_detail_type_doc).toLocaleLowerCase() === "email" && <div className="div_row" style={{ "marginRight": "15px" }} >
<div>
@ -3114,7 +3136,7 @@ const Config_Documents = (props) => {
</div>
{String(p_one_detail_type_doc) === "email" && <div className="div_row_gauche texte_area_filter" >
{String(p_one_detail_type_doc) === "email" && <div className="div_row_gauche texte_area_filter" >
Joindre en PDF <br />
<Checkbox

View File

@ -45,7 +45,9 @@ import { AiTwotoneEdit, AiTwotoneSave } from "react-icons/ai";
import { confirmAlert } from 'react-confirm-alert';
import ToggleSwitch from "./ToggleSwitch";
import Module_Historique_Action from "./Module_Historique_Action";
import { HiDocumentCheck } from "react-icons/hi2";
import { BsSend } from "react-icons/bs";
import Autocomplete from '@mui/material/Autocomplete';
const DisplayPartnerSession = (props) => {
const history = useHistory();
@ -1689,7 +1691,7 @@ const DisplayPartnerSession = (props) => {
}
}
console.log("4");
if (document.getElementById('detail_session')) {
//myRef.current.scrollIntoView({ behavior: "smooth" });
@ -1803,9 +1805,9 @@ const DisplayPartnerSession = (props) => {
form.append("status", "1");
/*
/!\ : Cette fonction a besoin d'un token actif
*/
/!\ : Cette fonction a besoin d'un token actif
*/
if (String(stored_cookie) === String("")) {
alert(" La session n'est plus valide ");
@ -1987,7 +1989,7 @@ const DisplayPartnerSession = (props) => {
//console.log(" ### localsessionid = ", localsessionid, " -- class_internal_url = ", class_internal_url);
/*
/!\ : Cette fonction a besoin d'un token actif
*/
@ -2069,7 +2071,7 @@ const DisplayPartnerSession = (props) => {
if (one_prenom_part.trim() == "") {
alert(" Vous devez saisir le prenom du participant");
alert(" Vous devez saisir le prénom du participant");
return;
}
@ -2602,6 +2604,29 @@ const DisplayPartnerSession = (props) => {
form.append("nom", p_detail_nom);
form.append("prenom", p_detail_prenom);
form.append("email", p_detail_mail);
form.append("telephone", p_detail_tel);
if (String(p_detail_nom).trim().length < 2) {
alert("Le nom est invalide.");
return;
}
if (String(p_detail_prenom).trim().length < 2) {
alert("Le prénom est invalide.");
return;
}
if (String(p_detail_tel).trim().length < 2) {
alert("Le Téléphone est invalide.");
return;
}
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!p_detail_mail.match(validRegex)) {
alert("L'adresse email est invalide.");
return;
}
if (p_detail_employeur)
form.append("employeur", p_detail_employeur);
@ -2627,14 +2652,15 @@ const DisplayPartnerSession = (props) => {
form.append("opco", "");
form.append("_id", selected_inscription_id);
if (p_detail_client_rattachement_nom)
if (p_detail_client_rattachement_id)
form.append("client_rattachement_id", p_detail_client_rattachement_id);
else
form.append("client_rattachement_id", "");
/*
Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenaire
*/
Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenaire
*/
for (let i = 0; i < spec_field_updated_values_hooks_stagiaire.length; i++) {
var local_value = String(spec_field_updated_values_hooks_stagiaire[i].field_value);
@ -3639,7 +3665,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/*var formateur = "";
if (document.getElementById("one_formateur") && document.getElementById("one_formateur").value != "")
formateur = document.getElementById("one_formateur").value;
*/
*/
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
const stored_cookie = getCookie('tokenmysypart');
@ -4266,9 +4292,11 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
}
const [SessionendDateInscription, setSessionendDateInscription] = useState();
const [New_GetCurrentPartnerClass_result, setNew_GetCurrentPartnerClass_result] = useState([]);
const [GetCurrentPartnerClass_api, setGetCurrentPartnerClass_api] = useState();
const [GetCurrentPartnerClass_message, setGetCurrentPartnerClass_message] = useState();
const [GetCurrentPartnerClass_result, setGetCurrentPartnerClass_result] = useState();
const [GetCurrentPartnerClass_result, setGetCurrentPartnerClass_result] = useState([]);
function GetCurrentPartnerClass(event) {
var form = new FormData();
@ -4308,10 +4336,38 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
if (String(res.data.status) === String("true")) {
//console.log(" In GetCurrentPartnerClass res.data.status = " + res.data.status);
//console.log(" In GetCurrentPartnerClass res.data.message r_class = " + res.data.message);
console.log(" In GetCurrentPartnerClass res.data.message r_class = " + res.data.message);
setGetCurrentPartnerClass_api("true");
setGetCurrentPartnerClass_result(res.data.message);
var new_data2 = [];
const new_data = res.data.message.map((x) => {
//---
var localid = JSON.parse(x).id;
var local_id = JSON.parse(x)._id;
var local_internal_url = JSON.parse(x).internal_url;
var local_title = JSON.parse(x).title;
//---
var node = {
"_id": local_id, "id": localid,
"label": local_title, "internal_url": local_internal_url,
"title": local_title
};
new_data2.push(node);
// return {"_id": " + str(local_id) + ", "label": " + local_courrier_template_ref_interne + '" , "courrier_template_ref_interne": "' + local_courrier_template_ref_interne + '", "nom_champ_technique": "' + local_nom_champ_technique + '", "nom_champ_fonctionel": "' + local_nom_champ_fonctionel + '","valide": "1" };
});
if (new_data2.length > 0)
setNew_GetCurrentPartnerClass_result(new_data2);
} else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message);
@ -4348,11 +4404,11 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/*
# status : 0 ==> Preinscription
# status : 1 ==> Inscription validée
# status : -1 ==> Inscription annulée
"""
*/
# status : 0 ==> Preinscription
# status : 1 ==> Inscription validée
# status : -1 ==> Inscription annulée
"""
*/
function handleClick_accept(event, cellValues) {
var montant = String(cellValues.row.amount);
@ -6298,12 +6354,12 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
1 - Récuperer la liste des champs specifiques de la collection concernée - Array : list_nom_champs_spec
2 - Récupérer les caracteristiques de champs champs spécifique : "id, nom, label, type valeur, etc"
- avec un champ 'value' à vide. Mettre dans le tableau JSON, 'spec_champs_valeur'
3 - Créer une nouvelle table qui permettra de gerer les hook : const [rows_champs_specifics, setrows_champs_specifics] = useState([]);
4 - Afficher en html les elements 'rows_champs_specifics'
5 - Gerer la modification avec la fonction 'change_champs_spec_handle'
6 - On recuperer les valeur lors du click d'enregistrement.
*/
@ -7154,7 +7210,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
form.append("session_id", localsessionid);
/*
/!\ : Cette fonction a besoin d'un token actif
*/
@ -7796,9 +7852,17 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
}
//form.append("File", list_files);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Prepare_and_Send_Convention_From_Session_By_Email/";
if (String(selected_convention_id) === "default_mail") {
// Il s'agit d'envoyer les convention par defaut de type mail
myurl = process.env.REACT_APP_API_URL + "myclass/api/Prepare_and_Send_Default_Convention_From_Session_By_Email/";
}
setLoading(true);
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Prepare_and_Send_Convention_From_Session_By_Email/",
myurl,
{
method: 'POST',
body: form,
@ -9266,7 +9330,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
setselected_convention_email_test();
///Get_Stagiaire_List_Email_Com();
setDialog_convention_open(true);
}} >Editer une convention</label><br />
}} ><HiDocumentCheck /> <BsSend /> Editer une convention</label> <br />
</div>
</div>
@ -10134,7 +10198,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
{String(addOneSession) === "1" && <div className="div_row session_data" style={{ "border": "None", "backgroundColor": "#F0F0F0" }} >
<h5> Ajout d'une session de formation</h5>
<div className="session_caract" > Choisir une formation *<br />
{/*<div className="session_caract" > Choisir une formation *<br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -10165,10 +10229,31 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
</TextField>
</div>*/}
<div className="session_caract" > Choisir une formation <br />
<Autocomplete
disablePortal
id="combo-box-demo"
className="disabled_style enable_style"
options={New_GetCurrentPartnerClass_result}
onChange={(event, value) => {
// setp_champ_table(value.nom_champ_technique);
setone_selected_internal_url(value.internal_url);
setp_one_myclass_title(value.internal_url)
Get_Class_Data(value.internal_url);
}}
renderInput={(params) => <TextField {...params} label="Choisir " />
}
/>
</div>
<div className="session_caract"> Code Session *<br />
<div className="session_caract"><b> Code Session </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11161,7 +11246,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
{String(addOneParticipant) === "1" && <div className="div_row session_data" style={{ "border": "None", "backgroundColor": "#F0F0F0" }}>
<div className="titre1"> Ajout d'un nouveau participant à la session <u> {selected_code_session} </u> de la formation <u> {selected_class_title} </u></div>
<div className="session_caract"> Nom *<br />
<div className="session_caract"> <b> Nom </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11182,7 +11267,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
</div>
<div className="session_caract"> Prenom *<br />
<div className="session_caract"> <b> Prenom </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11202,7 +11287,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/>
</div>
<div className="session_caract"> Email *<br />
<div className="session_caract"> <b> Email </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11222,7 +11307,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/>
</div>
<div className="session_caract"> téléphone *<br />
<div className="session_caract"> <b> téléphone </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11541,7 +11626,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
{String(addOneParticipant) === "1" && <div className="div_row session_data" style={{ "border": "None", "backgroundColor": "#F0F0F0" }}>
<h5> Ajout d'un nouveau participant</h5>
<div className="session_caract"> Nom *<br />
<div className="session_caract"> <b> Nom </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11559,7 +11644,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
</div>
<div className="session_caract"> Prenom *<br />
<div className="session_caract"> <b> Prénom </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11576,7 +11661,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/>
</div>
<div className="session_caract"> Email *<br />
<div className="session_caract"> <b> Email </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11595,7 +11680,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/>
</div>
<div className="session_caract"> téléphone *<br />
<div className="session_caract"> <b> Téléphone </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11612,7 +11697,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/>
</div>
<div className="session_caract"> Statut Inscription ss*<br />
<div className="session_caract"> Statut Inscription <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11705,7 +11790,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
<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 />
<div className="session_caract"> <b> Nom </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11726,7 +11811,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
</div>
<div className="session_caract"> Prenom *<br />
<div className="session_caract"> <b> Prénom </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11746,7 +11831,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/>
</div>
<div className="session_caract"> Email *<br />
<div className="session_caract"> <b> Email </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -11766,7 +11851,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/>
</div>
<div className="session_caract"> téléphone *<br />
<div className="session_caract"> <b> Téléphone </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -12218,8 +12303,8 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
className="disabled_style"
value={p_detail_client_rattachement_nom}
onChange={(e) => {
//setp_detail_client_rattachement_id(e.target.value);
setp_detail_client_rattachement_nom(e.target.value);
setp_detail_client_rattachement_id(e.target.value);
//setp_detail_client_rattachement_nom(e.target.value);
setparticipant_data_changed("1");
Dialog_1_handle_change_participant_session(" Attention, vous allez modifier le client de rattachement du participant");
}
@ -12299,7 +12384,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
</div>}
<div className="session_caract"> Nom<br />
<div className="session_caract"> <b> Nom </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -12321,7 +12406,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/>
</div>
<div className="session_caract"> Prenom<br />
<div className="session_caract"> <b> Prénom </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -12342,7 +12427,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/>
</div>
<div className="session_caract"> Email<br />
<div className="session_caract"> <b> Email </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -12363,7 +12448,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
/>
</div>
<div className="session_caract"> Téléphone <br />
<div className="session_caract"> <b> Téléphone </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required

View File

@ -48,6 +48,8 @@ import Switch from '@mui/material/Switch';
import { FcSearch } from "react-icons/fc";
import { useHistory } from "react-router-dom";
import Module_Historique_Action from "./Module_Historique_Action";
import ToggleSwitch from "./ToggleSwitch";
import Autocomplete from '@mui/material/Autocomplete';
const DisplayPartnerStagiaires = (props) => {
const history = useHistory();
@ -1032,7 +1034,7 @@ const DisplayPartnerStagiaires = (props) => {
setp_detail_client_rattachement_nom();
setp_detail_client_rattachement_id();
setp_detail_type_apprenant();
setp_detail_type_apprenant();
setp_detail_type_apprenant_label();
setfield_evaluation();
@ -1073,7 +1075,7 @@ const DisplayPartnerStagiaires = (props) => {
if (document.getElementsByName("one_pays_part") && document.getElementsByName("one_pays_part")[0])
document.getElementsByName("one_pays_part")[0].value = "";
if (document.getElementsByName("one_detail_type_apprenant") && document.getElementsByName("one_pays_part")[0])
if (document.getElementsByName("one_detail_type_apprenant") && document.getElementsByName("one_pays_part")[0])
document.getElementsByName("one_detail_type_apprenant")[0].value = "";
if (document.getElementsByName("one_status_part") && document.getElementsByName("one_status_part")[0])
@ -1969,7 +1971,7 @@ const DisplayPartnerStagiaires = (props) => {
}
const [New_Getall_TrainingSession_result, setNew_Getall_TrainingSession_result] = useState();
const [Getall_TrainingSession_api, setGetall_TrainingSession_api] = useState();
const [Getall_TrainingSession_message, setGetall_TrainingSession_message] = useState();
@ -1987,10 +1989,41 @@ const DisplayPartnerStagiaires = (props) => {
if (String(res.data.status) === String("true")) {
//console.log(" In Getall_TrainingSession res.data.status = " + res.data.status);
//console.log(" In Getall_TrainingSession res.data.message r_class = " + res.data.message);
console.log(" In Getall_TrainingSession res.data.message r_class = " + res.data.message);
setGetall_TrainingSession_api("true");
setGetall_TrainingSession_result(res.data.message);
var new_data2 = [];
const new_data = res.data.message.map((x) => {
//---
var localid = JSON.parse(x).id;
var local_id = JSON.parse(x)._id;
var local_internal_url = JSON.parse(x).internal_url;
var local_title_session = JSON.parse(x).titre;
var local_code_session = JSON.parse(x).code_session;
//---
var node = {
"_id": local_id,
"id": localid,
"label": local_code_session,
"class_internal_url": local_internal_url,
"titre": local_title_session
};
new_data2.push(node);
// return {"_id": " + str(local_id) + ", "label": " + local_courrier_template_ref_interne + '" , "courrier_template_ref_interne": "' + local_courrier_template_ref_interne + '", "nom_champ_technique": "' + local_nom_champ_technique + '", "nom_champ_fonctionel": "' + local_nom_champ_fonctionel + '","valide": "1" };
});
if (new_data2.length > 0)
setNew_Getall_TrainingSession_result(new_data2);
}
else {
setGetall_TrainingSession_api("false");
@ -2215,7 +2248,7 @@ const DisplayPartnerStagiaires = (props) => {
if (mylocalattendee.type_apprenant) {
setp_detail_type_apprenant(mylocalattendee.type_apprenant);
// console.log(" ### mylocalattendee.type_apprenant = ", mylocalattendee.type_apprenant);
// console.log(" ### mylocalattendee.type_apprenant = ", mylocalattendee.type_apprenant);
if (String(mylocalattendee.type_apprenant) === "0")
setp_detail_type_apprenant_label("Autre");
@ -2635,6 +2668,28 @@ const DisplayPartnerStagiaires = (props) => {
form.append("email", p_one_email_part);
form.append("telephone", p_one_phone_part);
if (String(p_one_nom_part).trim().length < 2) {
alert("Le nom est invalide.");
return;
}
if (String(p_one_prenom_part).trim().length < 2) {
alert("Le prenom est invalide.");
return;
}
if (String(p_one_phone_part).trim().length < 2) {
alert("Le Téléphone est invalide.");
return;
}
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!p_one_email_part.match(validRegex)) {
alert("L'adresse email est invalide.");
return;
}
if (p_one_adresse_part)
form.append("adresse", p_one_adresse_part);
else
@ -2772,6 +2827,30 @@ const DisplayPartnerStagiaires = (props) => {
form.append("nom", p_detail_nom);
form.append("prenom", p_detail_prenom);
form.append("email", p_detail_mail);
form.append("telephone", p_detail_tel);
if (String(p_detail_nom).trim().length < 2) {
alert("Le nom est invalide.");
return;
}
if (String(p_detail_prenom).trim().length < 2) {
alert("Le prenom est invalide.");
return;
}
if (String(p_detail_tel).trim().length < 2) {
alert("Le Téléphone est invalide.");
return;
}
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!p_detail_mail.match(validRegex)) {
alert("L'adresse email est invalide.");
return;
}
if (p_detail_employeur)
form.append("employeur", p_detail_employeur);
@ -2836,7 +2915,8 @@ const DisplayPartnerStagiaires = (props) => {
form.append("_id", selected_id);
if (p_detail_client_rattachement_nom)
if (p_detail_client_rattachement_id)
form.append("client_rattachement_id", p_detail_client_rattachement_id);
else
form.append("client_rattachement_id", "");
@ -4153,7 +4233,7 @@ const DisplayPartnerStagiaires = (props) => {
else
form.append("tuteur1_prenom", "");
if (p_detail_tuteur1_email && String(p_detail_tuteur2_email).trim() !== "") {
if (p_detail_tuteur1_email && String(p_detail_tuteur1_email).trim() !== "") {
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!p_detail_tuteur1_email.match(validRegex)) {
alert("L'adresse email est invalide.");
@ -4828,11 +4908,43 @@ const DisplayPartnerStagiaires = (props) => {
/>
</div>
<div className="session_caract_Dialog" > Inclure Communication
{/* <div className="session_caract_Dialog" > Inclure Communication
<Switch checked={p_detail_tuteur1_include_com} onChange={(e) => {
setp_detail_tuteur1_include_com(e.target.checked)
}} />
</div>
</div>*/}
<Tooltip id="tooltip_com1" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="tooltip_com1" data-tooltip-content="Si oui, ce tuteur recevra tous les emails échangés">
<div className="session_caract" style={{ "float": "right", "fontSize": "12px", 'fontWeight': 'bolder', "width": "100%" }}>
<nav onChange={(e) => {
//console.log("is_contact_include_com == ", is_contact_include_com);
if (p_detail_tuteur1_include_com === true)
setp_detail_tuteur1_include_com(false)
else {
// Pour activier la fontion de "include com", le contact foit avoir une adresse email
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!p_detail_tuteur1_email.match(validRegex)) {
alert("L'adresse email est invalide. Pour activer cette fontion, vous devez saisir une adresse email valide");
return;
}
setp_detail_tuteur1_include_com(true);
}
}}
id="toggleSwitchNav" name="toggleSwitchNav">
<ToggleSwitch
label="Inclure / Exclure de la communication ? " id="toggleSwitch" name="toggleSwitch" checked={p_detail_tuteur1_include_com} style={{ height: "2rem" }} />
</nav>
</div>
</a>
</DialogContent>}
@ -4958,11 +5070,44 @@ const DisplayPartnerStagiaires = (props) => {
/>
</div>
<div className="session_caract_Dialog" > Inclure Communication
{/*<div className="session_caract_Dialog" > Inclure Communication
<Switch checked={p_detail_tuteur2_include_com} onChange={(e) => {
setp_detail_tuteur2_include_com(e.target.checked)
}} />
</div>
</div>*/}
<Tooltip id="tooltip_com" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="tooltip_com" data-tooltip-content="Si oui, ce tuteur recevra tous les emails échangés">
<div className="session_caract" style={{ "float": "right", "fontSize": "12px", 'fontWeight': 'bolder', "width": "100%" }}>
<nav onChange={(e) => {
//console.log("is_contact_include_com == ", is_contact_include_com);
if (p_detail_tuteur2_include_com === true)
setp_detail_tuteur2_include_com(false)
else {
// Pour activier la fontion de "include com", le contact foit avoir une adresse email
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!p_detail_tuteur2_email.match(validRegex)) {
alert("L'adresse email est invalide. Pour activer cette fontion, vous devez saisir une adresse email valide");
return;
}
setp_detail_tuteur2_include_com(true);
}
}}
id="toggleSwitchNav" name="toggleSwitchNav">
<ToggleSwitch
label="Inclure / Exclure de la communication ? " id="toggleSwitch" name="toggleSwitch" checked={p_detail_tuteur2_include_com} style={{ height: "2rem" }} />
</nav>
</div>
</a>
</DialogContent>}
@ -5093,23 +5238,23 @@ const DisplayPartnerStagiaires = (props) => {
</div>}
{String(selected_convention_type) === "email" && <div className="session_caract_Dialog" > Adresse email de test
<Tooltip id="test01" style={{ "fontSize": "12px" }} />
<Tooltip id="test01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="test01" data-tooltip-content="Pour recevoir une email de test avant de l'envoyer">
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_email_test_convention"
id="event_dialog_email_test_convention"
name="event_dialog_email_test_convention"
id="event_dialog_email_test_convention"
fullWidth
fullWidth
value={selected_convention_email_test}
onChange={(e) => {
setselected_convention_email_test(e.target.value);
}
}
/>
value={selected_convention_email_test}
onChange={(e) => {
setselected_convention_email_test(e.target.value);
}
}
/>
</a>
</div>
@ -5621,10 +5766,10 @@ const DisplayPartnerStagiaires = (props) => {
</div>
</div>
<div style={{ "textAlign": "left", "float": "left", "width": "100%", "paddingRight":"10px" }} id="participant_menu_tab">
<div style={{ "textAlign": "left", "float": "left", "width": "100%", "paddingRight": "10px" }} id="participant_menu_tab">
<div className="session_data">
<div style={{ "border": "None", paddingRight: '10px' }}>
<div style={{ "border": "None", paddingRight: '10px' }}>
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
&nbsp;
@ -5689,7 +5834,7 @@ const DisplayPartnerStagiaires = (props) => {
>
<DataGrid
checkboxSelection
onSelectionModelChange={(newSelectionModel) => {
setSelectionModel(newSelectionModel);
/*if (newSelectionModel.length === 1)
@ -5913,8 +6058,8 @@ const DisplayPartnerStagiaires = (props) => {
</div>
</div>
<div className="div_row"> &nbsp;</div>
{( (selected_id && String(selected_id).length > 2) || (String(addOneParticipant) === "1" ) ) && <div className="div_row">
{((selected_id && String(selected_id).length > 2) || (String(addOneParticipant) === "1")) && <div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_stagaire} className="detail_class_submenu" id='detail_session' name='detail_session'>Détail Stagiaire</Button>
<Button variant="outlined" onClick={submenu_sessions} className="detail_class_submenu" id='preinscrit' name='preinscrit'>Détail Session </Button>
<Button variant="outlined" onClick={submenu_absence} className="detail_class_submenu" id='absence' name='absence'>Absence </Button>
@ -5957,7 +6102,7 @@ const DisplayPartnerStagiaires = (props) => {
</TextField>
</div>
<div className="session_caract"> Session <br />
<div className="session_caract"> <b> Session </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -5997,8 +6142,7 @@ const DisplayPartnerStagiaires = (props) => {
</div>
<div className="session_caract"> Nom *<br />
<div className="session_caract"> <b> Nom </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -6020,7 +6164,7 @@ const DisplayPartnerStagiaires = (props) => {
</div>
<div className="session_caract"> Prenom *<br />
<div className="session_caract"> <b> Prenom </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -6040,7 +6184,7 @@ const DisplayPartnerStagiaires = (props) => {
/>
</div>
<div className="session_caract"> Email *<br />
<div className="session_caract"> <b> Email </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -6060,7 +6204,7 @@ const DisplayPartnerStagiaires = (props) => {
/>
</div>
<div className="session_caract"> téléphone *<br />
<div className="session_caract"> <b> Téléphone </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -6191,7 +6335,7 @@ const DisplayPartnerStagiaires = (props) => {
</TextField>
</div>
<div className="session_caract"> Client <br />
<div className="session_caract"> Client 2<br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -6424,7 +6568,7 @@ const DisplayPartnerStagiaires = (props) => {
<div className="session_data" >
<div>
{String(participant_data_edit_mode) !== "1" && <div className="session_caract"> Session <br />
{String(participant_data_edit_mode) !== "1" && <div className="session_caract"> <b> Session </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -6444,7 +6588,7 @@ const DisplayPartnerStagiaires = (props) => {
</div>}
{String(participant_data_edit_mode) === "1" && <div className="session_caract"> Session <br />
{String(participant_data_edit_mode) === "1" && <div className="session_caract"> <b> Session </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -6492,8 +6636,8 @@ const DisplayPartnerStagiaires = (props) => {
className="disabled_style"
value={p_detail_client_rattachement_nom}
onChange={(e) => {
//setp_detail_client_rattachement_id(e.target.value);
setp_detail_client_rattachement_nom(e.target.value);
setp_detail_client_rattachement_id(e.target.value);
//setp_detail_client_rattachement_nom(e.target.value);
setparticipant_data_changed("1");
Dialog_1_handle_change_participant_session(" Attention, vous allez modifier le client de rattachement du participant");
}
@ -6622,7 +6766,7 @@ const DisplayPartnerStagiaires = (props) => {
</div>}
<div className="session_caract"> Nom<br />
<div className="session_caract"> <b> Nom </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -6644,7 +6788,7 @@ const DisplayPartnerStagiaires = (props) => {
/>
</div>
<div className="session_caract"> Prenom<br />
<div className="session_caract"> <b> Prenom </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -6664,7 +6808,7 @@ const DisplayPartnerStagiaires = (props) => {
/>
</div>
<div className="session_caract"> Email<br />
<div className="session_caract"> <b> Email </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -6686,7 +6830,7 @@ const DisplayPartnerStagiaires = (props) => {
/>
</div>
<div className="session_caract"> Téléphone <br />
<div className="session_caract"> <b> Téléphone </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -7059,7 +7203,7 @@ const DisplayPartnerStagiaires = (props) => {
</div>
<div className="tuteur_field"> Téléphone <br />
<div className="tuteur_field"> <b> Téléphone </b><br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -7160,7 +7304,7 @@ const DisplayPartnerStagiaires = (props) => {
</div>
<div className="tuteur_field"> Téléphone <br />
<div className="tuteur_field"> <b> Téléphone </b> <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required

View File

@ -467,6 +467,7 @@
width: 100%;
border-radius: 1rem;
text-align: right;
padding-right: 5px;
}
@ -1040,6 +1041,7 @@
width: 30%;
border-radius: 1rem;
text-align: right;
padding-right: 10px;
}
@ -1209,6 +1211,7 @@
width: 30%;
border-radius: 1rem;
text-align: right;
padding-right: 10px;
}
@ -1676,6 +1679,7 @@
width: 30%;
border-radius: 1rem;
text-align: right;
padding-right: 15px;
}
.selectsession {