branche_01062025
Cherif 2025-07-20 20:53:26 +02:00
parent 1ccb50cb06
commit 63d3491031
24 changed files with 1267 additions and 265 deletions

View File

@ -362,7 +362,7 @@ function App() {
</Switch>
</BrowserRouter>
/</Suspense>
</Suspense>
</div>
</div>

View File

@ -126,6 +126,8 @@ const AddParnerClient = (props) => {
const [p_client_raison_sociale, setclient_raison_sociale] = useState("");
const [p_client_is_company, setp_client_is_company] = useState("");
const [p_detail_archive, setp_detail_archive] = useState("");
const [p_client_siret, setclient_siret] = useState("");
@ -803,6 +805,13 @@ const AddParnerClient = (props) => {
}
setp_detail_archive("0");
if (mylocalclient.archive) {
setp_detail_archive(mylocalclient.archive);
}
if (String(mylocalclient.is_financeur) === "1")
setp_client_is_financeur(true);
else
@ -4157,9 +4166,13 @@ const AddParnerClient = (props) => {
{String(submenu).trim() === "submenu_donnee_client" && <div className="training_data" onChange={DataUpdated}>
{p_detail_archive && String(p_detail_archive) === "1" &&
<div class="block_archive"> Document Archivé </div>}
<div className="session_caract" >
&nbsp; <br />
<nav style={{ "paddingLeft": "10px" }}>
<Radio

View File

@ -7456,7 +7456,7 @@ const Apprenant = (props) => {
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && <div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined" onClick={submenu_import_apprenant} className="detail_class_submenu bton_import_excel"
id='menu_import_participant' name='menu_import_participant'>Importer des apprenants excel &nbsp;
id='menu_import_participant' name='menu_import_participant' style={{ maxWidth: "20rem" }}>Importer des apprenants excel &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>

View File

@ -2773,7 +2773,7 @@ const Config_Documents_Super_Admin = (props) => {
}}
/>
</div>}
</div>}
{String(partner_document_data_edit_mode) === "1" && <div className="div_row_gauche texte_area_filter" >
Version par defaut <br />

View File

@ -969,9 +969,6 @@ const DisplayPartnerPromotion = (props) => {
</div>
</DialogContent>
</Dialog>}
{/*** FIN GESTION Dialog menu item mise à jour*/}
@ -26642,6 +26639,7 @@ const DisplayPartnerPromotion = (props) => {
submenu_evaluation={submenu_evaluation_session}
submenu_attestation={submenu_attestation}
submenu_q_positionnement={submenu_q_positionnement}
Get_List_Partner_Clients={Get_List_Partner_Clients}
nb_valide_inscription_entreprise={nb_valide_inscription_entreprise}
nb_valide_inscription_individuelle={nb_valide_inscription_individuelle}
selected_session_invoiced_statut={selected_session_invoiced_statut}

View File

@ -19256,7 +19256,6 @@ const DisplayPartnerSession = (props) => {
</div>
{String(p_filtre1) !== "archive" && <div className="div_row_droite texte_area_filter_value" >
{p_filtre1 &&
<TextField
@ -26712,10 +26711,12 @@ const DisplayPartnerSession = (props) => {
submenu_evaluation={submenu_evaluation_session}
submenu_attestation={submenu_attestation}
submenu_q_positionnement={submenu_q_positionnement}
Get_List_Partner_Clients={Get_List_Partner_Clients}
nb_valide_inscription_entreprise={nb_valide_inscription_entreprise}
nb_valide_inscription_individuelle={nb_valide_inscription_individuelle}
selected_session_invoiced_statut={selected_session_invoiced_statut}
Session_automatic_traitement_data={GetCurrentSession_automatic_traitement_data}
/>
</div>}

View File

@ -153,6 +153,7 @@ const DisplayPartnerStagiaires = (props) => {
const columns = [
{ field: '_id', headerName: '_id', hide: true, editable: false, Width: 0, disableExport: true, },
{ field: 'session_id', headerName: 'session_id', hide: true, editable: false, Width: 0, disableExport: true, },
{ field: 'archive', headerName: 'archive', hide: true, editable: false, Width: 0, disableExport: true, },
{ field: 'id', headerName: 'id', hide: true, Width: 0, disableExport: true, },
{ field: 'class_id', headerName: 'class_id', hide: true, Width: 0, disableExport: true, },
{ field: 'class_internal_url', headerName: 'class_internal_url', hide: true, editable: false, Width: 0, disableExport: true, },
@ -221,7 +222,7 @@ const DisplayPartnerStagiaires = (props) => {
renderCell: (cellValues) => {
return (
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
{New_Get_List_Partner_Clients_result && New_Get_List_Partner_Clients_result.length > 0 && <nav>
{New_Get_List_Partner_Clients_result && New_Get_List_Partner_Clients_result.length > 0 && cellValues.row.client_facture && <nav>
{New_Get_List_Partner_Clients_result.filter((data) => (data)._id === String(cellValues.row.client_facture))[0].label}
</nav>}
</div>
@ -940,7 +941,10 @@ const DisplayPartnerStagiaires = (props) => {
setselected_code_session('');
setsubmenu('');
alert(" La mise à jour a été correctement faite.")
// alert(" La mise à jour a été correctement faite.");
setdisplay_alert_mysy("1");
setalert_message(" La mise à jour a été correctement faite.");
setalert_type("success");
}
else {
setDeleteStagiaireData_api("false");
@ -1044,6 +1048,7 @@ const DisplayPartnerStagiaires = (props) => {
const [Getall_TrainingParticipant_result, setGetall_TrainingParticipant_result] = useState([]);
function Getall_TrainingParticipant(event) {
setloading_datagrid(true);
setSelectionModel([]);
var form = new FormData();
@ -1094,6 +1099,7 @@ const DisplayPartnerStagiaires = (props) => {
setLoading(false);
if (String(res.data.status) === String("true")) {
setloading_datagrid(false);
//console.log(" In Getall_TrainingParticipant res.data.status = " + res.data.status);
//console.log(" In Getall_TrainingParticipant res.data.message r_class = " + res.data.message);
setGetall_TrainingParticipant_api("true");
@ -1103,6 +1109,7 @@ const DisplayPartnerStagiaires = (props) => {
}
else {
setloading_datagrid(false);
setGetall_TrainingParticipant_api("false");
setGetall_TrainingParticipant_message(res.data.message);
// alert(res.data.message);
@ -1112,6 +1119,7 @@ const DisplayPartnerStagiaires = (props) => {
}
}).catch((error) => {
setloading_datagrid(false);
setLoading(false);
console.warn('Not good man :( Getall_TrainingParticipant = ', error);
setGetall_TrainingParticipant_api("false");
@ -1123,7 +1131,7 @@ const DisplayPartnerStagiaires = (props) => {
function Getall_TrainingParticpant_no_filter(event) {
setloading_datagrid(true);
var form = new FormData();
@ -1137,6 +1145,7 @@ const DisplayPartnerStagiaires = (props) => {
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
setloading_datagrid(false);
//console.log(" In Getall_TrainingParticipant res.data.status = " + res.data.status);
//console.log(" In Getall_TrainingParticipant res.data.message r_class = " + res.data.message);
setGetall_TrainingParticipant_api("true");
@ -1144,11 +1153,13 @@ const DisplayPartnerStagiaires = (props) => {
setRows(res.data.message);
}
else {
setloading_datagrid(false);
setGetall_TrainingParticipant_api("false");
setGetall_TrainingParticipant_message(res.data.message);
}
}).catch((error) => {
setloading_datagrid(false);
setLoading(false);
console.warn('Not good man :( Getall_TrainingParticipant = ', error);
setGetall_TrainingParticipant_api("false");
@ -1610,7 +1621,10 @@ const DisplayPartnerStagiaires = (props) => {
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!local_mail.trim().match(validRegex)) {
alert("L'adresse email est invalide. Impossible de renvoyer les identifiants");
// alert("L'adresse email est invalide. Impossible de renvoyer les identifiants");
setdisplay_alert_mysy("1");
setalert_message("L'adresse email est invalide. Impossible de renvoyer les identifiants");
setalert_type("error");
return;
}
formData.append("email", local_mail);
@ -1695,7 +1709,10 @@ const DisplayPartnerStagiaires = (props) => {
//alert("file_size = "+file_size+" file_type = "+file_type+" a = "+a);
if (file_size > 1000000) {
alert("L'image ne doit pas dépasser un 1 Méga octets");
// alert("L'image ne doit pas dépasser un 1 Méga octets");
setdisplay_alert_mysy("1");
setalert_message("L'image ne doit pas dépasser un 1 Méga octets");
setalert_type("error");
return;
}
setisimgclassSelected(event.target.files[0]);
@ -1796,12 +1813,18 @@ const DisplayPartnerStagiaires = (props) => {
trainer = document.getElementsByName("formateur")[0].value;
if (trainer == "") {
alert(" Aucun formateur pour cette session ");
//alert(" Aucun formateur pour cette session ");
setdisplay_alert_mysy("1");
setalert_message(" Aucun formateur pour cette session ");
setalert_type("error");
return;
}
if (addendeeEmail == "") {
alert(" Aucun utilisateur choisi ");
// alert(" Aucun utilisateur choisi ");
setdisplay_alert_mysy("1");
setalert_message(" Aucun utilisateur choisi ");
setalert_type("error");
return;
}
@ -2261,6 +2284,7 @@ const DisplayPartnerStagiaires = (props) => {
desableSessionFields();
}
const [loading_datagrid, setloading_datagrid] = useState(true);
const [SendEvaluationEmail_api, setSendEvaluationEmail_api] = useState();
const [SendEvaluationEmail_message, setSendEvaluationEmail_message] = useState();
@ -2320,7 +2344,10 @@ const DisplayPartnerStagiaires = (props) => {
//console.log(" In SendEvaluationEmail res.data.message r_class = " + res.data.message);
setSendEvaluationEmail_api("true");
setSendEvaluationEmail_result(res.data.message);
alert(" La demande a été correctement envoyée");
// alert(" La demande a été correctement envoyée");
setdisplay_alert_mysy("1");
setalert_message(" La demande a été correctement envoyée");
setalert_type("success");
} else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message);
@ -2329,7 +2356,10 @@ const DisplayPartnerStagiaires = (props) => {
else {
setSendEvaluationEmail_api("false");
setSendEvaluationEmail_message(res.data.message);
alert(" Erreur : " + res.data.message);
// alert(" Erreur : " + res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("error");
}
}).catch((error) => {
@ -2373,14 +2403,20 @@ const DisplayPartnerStagiaires = (props) => {
if (String(result['status']) === String("true")) {
setrecord_Stagiaire_Image_api("true");
setuserimgclassprofilchanged("");
alert(" L'image a été enregistrée ");
// alert(" L'image a été enregistrée ");
setdisplay_alert_mysy("1");
setalert_message(" L'image a été enregistrée ");
setalert_type("success");
} else if (String(result['status']) === String("Err_Connexion")) {
alert('Erreur: ' + result['message']);
history.push("/Connexion");
} else {
setrecord_Stagiaire_Image_api("false");
alert(" Erreur : " + result['message']);
// alert(" Erreur : " + result['message']);
setdisplay_alert_mysy("1");
setalert_message(result['message']);
setalert_type("error");
}
})
@ -2397,7 +2433,11 @@ const DisplayPartnerStagiaires = (props) => {
function removeRecodedLogoImage() {
if (!isimgclassSelected_recid || String(isimgclassSelected_recid).length < 3) {
alert(" Image incorrecte. Impossible de la supprimer ");
//alert(" Image incorrecte. Impossible de la supprimer ");
setdisplay_alert_mysy("1");
setalert_message(" Image incorrecte. Impossible de la supprimer ");
setalert_type("error");
return;
}
@ -2463,7 +2503,11 @@ const DisplayPartnerStagiaires = (props) => {
//console.log("file_size = ",file_size," file_type = ",file_type);
if (file_size > 1000000) {
alert("Le fichier ne doit pas dépasser un 1 Méga octets");
// alert("Le fichier ne doit pas dépasser un 1 Méga octets");
setdisplay_alert_mysy("1");
setalert_message("Le fichier ne doit pas dépasser un 1 Méga octets");
setalert_type("error");
return;
}
@ -2505,7 +2549,10 @@ const DisplayPartnerStagiaires = (props) => {
setliste_sessions_file_change_api("true");
Getall_TrainingParticipant();
alert(" Les stagiaires ont été correctement importés");
// alert(" Les stagiaires ont été correctement importés");
setdisplay_alert_mysy("1");
setalert_message(" Les stagiaires ont été correctement importés");
setalert_type("success");
}
@ -3282,6 +3329,8 @@ const DisplayPartnerStagiaires = (props) => {
const [p_detail_tuteur1_civilite, setp_detail_tuteur1_civilite] = useState("");
const [p_detail_archive, setp_detail_archive] = useState("");
const [p_detail_tuteur1_prenom, setp_detail_tuteur1_prenom] = useState("");
const [p_detail_tuteur1_email, setp_detail_tuteur1_email] = useState("");
@ -3394,7 +3443,7 @@ const DisplayPartnerStagiaires = (props) => {
if (String(res.data.status) === "true") {
// console.log(" In GetAttendee res.data.status = " + res.data.status);
// console.log(" In GetAttendee res.data.message r_class = " + res.data.message);
//console.log(" In GetAttendee res.data.message r_class = " + res.data.message);
setGetAttendee_api("true");
setGetAttendee_result(res.data.message);
@ -3555,6 +3604,13 @@ const DisplayPartnerStagiaires = (props) => {
}
if (mylocalattendee.archive) {
setp_detail_archive(mylocalattendee.archive);
} else {
setp_detail_archive("0");
}
if (mylocalattendee.employeur) {
setp_detail_employeur(mylocalattendee.employeur);
@ -3862,28 +3918,43 @@ const DisplayPartnerStagiaires = (props) => {
if (!p_one_civilite_part || p_one_civilite_part.trim() == "") {
alert(" Vous devez saisir la civilité du participant");
// alert(" Vous devez saisir la civilité du participant");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez saisir la civilité du participant");
setalert_type("error");
return;
}
if (!p_one_nom_part || p_one_nom_part.trim() == "") {
alert(" Vous devez saisir le nom du participant");
// alert(" Vous devez saisir le nom du participant");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez saisir le nom du participant");
setalert_type("error");
return;
}
if (!p_one_prenom_part || p_one_prenom_part.trim() == "") {
alert(" Vous devez saisir le prenom du participant");
// alert(" Vous devez saisir le prenom du participant");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez saisir le prenom du participant");
setalert_type("error");
return;
}
if (!p_one_naissance_part || p_one_naissance_part.trim() == "") {
alert(" Vous devez saisir la date de naissance du participant");
// alert(" Vous devez saisir la date de naissance du participant");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez saisir la date de naissance du participant");
setalert_type("error");
return;
}
if (!p_one_email_part || p_one_email_part.trim() == "") {
alert(" Vous devez saisir l'email du participant");
// alert(" Vous devez saisir l'email du participant");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez saisir l'email du participant");
setalert_type("error");
return;
}
@ -3892,19 +3963,28 @@ const DisplayPartnerStagiaires = (props) => {
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!p_one_email_part.trim().match(validRegex)) {
alert("L'adresse email est invalide 1.");
// alert("L'adresse email est invalide.");
setdisplay_alert_mysy("1");
setalert_message("L'adresse email est invalide.");
setalert_type("error");
return;
}
if (!p_one_phone_part || p_one_phone_part.trim() == "") {
alert(" Vous devez saisir le téléphone du participant");
// alert(" Vous devez saisir le téléphone du participant");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez saisir le téléphone du participant");
setalert_type("error");
return;
}
if (!p_one_detail_session_class || p_one_detail_session_class.trim() == "") {
alert(" La session est invalide");
// alert(" La session est invalide");
setdisplay_alert_mysy("1");
setalert_message(" La session est invalide");
setalert_type("error");
return;
}
@ -3922,22 +4002,34 @@ const DisplayPartnerStagiaires = (props) => {
form.append("telephone", p_one_phone_part.trim());
if (String(p_one_civilite_part).trim().length == 0) {
alert("La civilité est invalide.");
// alert("La civilité est invalide.");
setdisplay_alert_mysy("1");
setalert_message("La civilité est invalide.");
setalert_type("error");
return;
}
if (String(p_one_nom_part).trim().length < 2) {
alert("Le nom est invalide.");
// alert("Le nom est invalide.");
setdisplay_alert_mysy("1");
setalert_message("Le nom est invalide.");
setalert_type("error");
return;
}
if (String(p_one_prenom_part).trim().length < 2) {
alert("Le prenom est invalide.");
// alert("Le prenom est invalide.");
setdisplay_alert_mysy("1");
setalert_message("Le prenom est invalide.");
setalert_type("error");
return;
}
if (String(p_one_phone_part).trim().length < 2) {
alert("Le Téléphone est invalide.");
// alert("Le Téléphone est invalide.");
setdisplay_alert_mysy("1");
setalert_message("Le Téléphone est invalide.");
setalert_type("error");
return;
}
@ -4004,7 +4096,10 @@ const DisplayPartnerStagiaires = (props) => {
local_value = local_value.replaceAll(",", ".");
if (isNaN(local_value)) {
alert("Le champ " + spec_field_updated_values_hooks[i].field_label + " doit être numérique.")
var txt = "Le champ " + spec_field_updated_values_hooks[i].field_label + " doit être numérique."
setdisplay_alert_mysy("1");
setalert_message(txt);
setalert_type("error");
return;
}
}
@ -4013,7 +4108,10 @@ const DisplayPartnerStagiaires = (props) => {
}
if (String(spec_field_updated_values_hooks[i].is_mandatory) === "1") {
if (String(local_value).trim().length <= 0) {
alert("Le champ " + spec_field_updated_values_hooks[i].field_label + " est obligatoire.")
var txt = "Le champ " + spec_field_updated_values_hooks[i].field_label + " est obligatoire.";
setdisplay_alert_mysy("1");
setalert_message(txt);
setalert_type("error");
return;
}
@ -4090,7 +4188,10 @@ const DisplayPartnerStagiaires = (props) => {
if (p_detail_session_class.length <= 0) {
alert(" Vous devez choisir une session");
// alert(" Vous devez choisir une session");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez choisir une session");
setalert_type("error");
return;
}
@ -4106,29 +4207,44 @@ const DisplayPartnerStagiaires = (props) => {
form.append("date_naissance", p_detail_naissance);
if (!p_detail_nom || String(p_detail_nom).trim().length < 2) {
alert("Le nom est invalide.");
// alert("Le nom est invalide.");
setdisplay_alert_mysy("1");
setalert_message("Le nom est invalide.");
setalert_type("error");
return;
}
if (!p_detail_prenom || String(p_detail_prenom).trim().length < 2) {
alert("Le prenom est invalide.");
// alert("Le prenom est invalide.");
setdisplay_alert_mysy("1");
setalert_message("Le prenom est invalide.");
setalert_type("error");
return;
}
if (!p_detail_civilite || String(p_detail_civilite).trim() === "") {
alert("La civilité est invalide.");
// alert("La civilité est invalide.");
setdisplay_alert_mysy("1");
setalert_message("La civilité est invalide.");
setalert_type("error");
return;
}
if (!p_detail_tel || String(p_detail_tel).trim().length < 2) {
alert("Le numéro de téléphone est invalide.");
// alert("Le numéro de téléphone est invalide.");
setdisplay_alert_mysy("1");
setalert_message("Le numéro de téléphone est invalide.");
setalert_type("error");
return;
}
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!p_detail_mail.trim().match(validRegex)) {
alert("L'adresse email est invalide.");
// alert("L'adresse email est invalide.");
setdisplay_alert_mysy("1");
setalert_message("L'adresse email est invalide.");
setalert_type("error");
return;
}
@ -4221,7 +4337,10 @@ const DisplayPartnerStagiaires = (props) => {
local_value = local_value.replaceAll(",", ".");
if (isNaN(local_value)) {
alert("Le champ " + spec_field_updated_values_hooks[i].field_label + " doit être numérique.")
var txt = "Le champ " + spec_field_updated_values_hooks[i].field_label + " doit être numérique.";
setdisplay_alert_mysy("1");
setalert_message(txt);
setalert_type("error");
return;
}
@ -4231,7 +4350,10 @@ const DisplayPartnerStagiaires = (props) => {
}
if (String(spec_field_updated_values_hooks[i].is_mandatory) === "1") {
if (String(local_value).trim().length <= 0) {
alert("Le champ " + spec_field_updated_values_hooks[i].field_label + " est obligatoire.")
var txt = "Le champ " + spec_field_updated_values_hooks[i].field_label + " est obligatoire.";
setdisplay_alert_mysy("1");
setalert_message(txt);
setalert_type("error");
return;
}
@ -4258,7 +4380,10 @@ const DisplayPartnerStagiaires = (props) => {
setparticipant_data_changed();
setparticipant_data_edit_mode();
GetAttendee_Data(p_detail_mail, p_detail_session_class_id, selected_internal_url);
alert(" La mise à jour a été correctement faite.");
setdisplay_alert_mysy("1");
setalert_message(" La mise à jour a été correctement faite.");
setalert_type("error");
//myRef_head.current.scrollIntoView({ behavior: "smooth" });
@ -4285,7 +4410,10 @@ const DisplayPartnerStagiaires = (props) => {
setLoading(false);
console.warn('UpdateStagiaireData : Not good man :( mysearchtext = ' + error);
setUpdateStagiaireData_api("false");
alert(" Impossible de mettre à jour le participant");
setdisplay_alert_mysy("1");
setalert_message(" Impossible de mettre à jour le participant");
setalert_type("error");
})
}
@ -4301,7 +4429,10 @@ const DisplayPartnerStagiaires = (props) => {
if (p_detail_session_class.length <= 0) {
alert(" Vous devez choisir une session");
// alert(" Vous devez choisir une session");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez choisir une session");
setalert_type("error");
return;
}
@ -4332,7 +4463,10 @@ const DisplayPartnerStagiaires = (props) => {
setparticipant_data_changed();
setparticipant_data_edit_mode();
GetAttendee_Data(p_detail_mail, p_detail_session_class_id, selected_internal_url);
alert(" La mise à jour a été correctement faite.");
// alert(" La mise à jour a été correctement faite.");
setdisplay_alert_mysy("1");
setalert_message(" La mise à jour a été correctement faite.");
setalert_type("error");
//myRef_head.current.scrollIntoView({ behavior: "smooth" });
@ -4399,8 +4533,8 @@ const DisplayPartnerStagiaires = (props) => {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Partner_List_Partner_Client/";
axios.post(myurl, form).then(res => {
//console.log(" In Get_List_Partner_Clients res.data.status = " + res.data.status);
//console.log(" In Get_List_Partner_Clients res.data.message r_class = " + res.data.message);
// console.log(" In Get_List_Partner_Clients res.data.status = " + res.data.status);
// console.log(" In Get_List_Partner_Clients res.data.message r_class = " + res.data.message);
if (String(res.data.status) === String("true")) {
setGet_List_Partner_Clients_api("true");
@ -4440,6 +4574,10 @@ const DisplayPartnerStagiaires = (props) => {
if (new_data2.length > 0)
setNew_Get_List_Partner_Clients_result(new_data2);
else
setNew_Get_List_Partner_Clients_result([]);
//console.log(" ### setNew_Get_List_Partner_Clients_result new_data2 = ", new_data2)
}
else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message);
@ -5525,7 +5663,6 @@ const DisplayPartnerStagiaires = (props) => {
if (String(actionmass_ftion_val) === String("valide_inscr")) {
Accept_List_Inscritpion(liste_session);
}
@ -5559,9 +5696,95 @@ const DisplayPartnerStagiaires = (props) => {
setDialog_PUSH_DOCUMENT_TO_ENT_open(true);
setent_push_doc_message_notif("");
}
if (String(actionmass_ftion_val) === String("archive_desarchive")) {
Archive_Given_Stagiaire();
}
}
const [Archive_Given_Stagiaire_api, setArchive_Given_Stagiaire_api] = useState();
const [Archive_Given_Stagiaire_message, setArchive_Given_Stagiaire_message] = useState();
const [Archive_Given_Stagiaire_result, setArchive_Given_Stagiaire_result] = useState();
function Archive_Given_Stagiaire() {
var archive_statut = "1"
var tab_tmp = []
for (var i = 0; i < selectionModel.length; i++) {
var myid = parseInt(String(selectionModel[i]));
var line = JSON.parse(rowss[myid]);
tab_tmp.push(line._id);
//console.log(rowss[myid]['external_code']);
// Si une seule ligne est a le statut "non archivé", alors on archive
if (line.archive && String(line.archive) === "0")
archive_statut = String(line.archive)
}
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("tab_stagiaire_ids", tab_tmp);
var myurl = "";
if (archive_statut !== "1")
myurl = process.env.REACT_APP_API_URL + "myclass/api/archive_stagiaire/";
else
myurl = process.env.REACT_APP_API_URL + "myclass/api/unarchive_stagiaire/";
setLoading(true);
axios.post(myurl, form).then(res => {
//console.log(" In Archive_Given_Stagiaire res.data.status = " + res.data.status);
//console.log(" In Archive_Given_Stagiaire res.data.message r_class = " + res.data.message);
setLoading(false);
if (String(res.data.status) === String("true")) {
setArchive_Given_Stagiaire_api("true");
setArchive_Given_Stagiaire_result(res.data.message);
setSelectionModel([]);
setactionmass_ftion_val("");
Getall_TrainingParticipant();
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("success");
}
else {
setArchive_Given_Stagiaire_api("false");
setArchive_Given_Stagiaire_message(res.data.message);
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("error");
}
}).catch((error) => {
setLoading(false);
console.warn('UpdateStagiaireData : Not good man :( Archive_Given_Stagiaire = ' + error);
setArchive_Given_Stagiaire_api("false");
alert(" Impossible d'archiver/deséarchiver les stagiaires ");
})
}
function Export_Inscriptions(tab_class) {
const stored_cookie = getCookie('tokenmysypart');
@ -5650,7 +5873,7 @@ const DisplayPartnerStagiaires = (props) => {
tab_tmp.push(line.email);
tab_tmp_inscription_id.push(line._id);
tab_tmp_session_id.push(line.session_id);
console.log(" ### line = ", line); // zzzz
}
setselectedtraining_emails(tab_tmp);
@ -5912,7 +6135,10 @@ const DisplayPartnerStagiaires = (props) => {
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
if (p_detail_session_class.length <= 0) {
alert(" Vous devez choisir une session");
// alert(" Vous devez choisir une session");
setdisplay_alert_mysy("1");
setalert_message(" Vous devez choisir une session");
setalert_type("error");
return;
}
const stored_cookie = getCookie('tokenmysypart');
@ -5940,7 +6166,10 @@ const DisplayPartnerStagiaires = (props) => {
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.trim().match(validRegex)) {
alert("L'adresse email du tuteur est invalide.");
// alert("L'adresse email du tuteur est invalide.");
setdisplay_alert_mysy("1");
setalert_message("L'adresse email du tuteur est invalide.");
setalert_type("error");
return;
}
@ -6005,7 +6234,10 @@ const DisplayPartnerStagiaires = (props) => {
if (p_detail_tuteur2_email && String(p_detail_tuteur2_email).trim() !== "") {
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!p_detail_tuteur2_email.trim().match(validRegex)) {
alert("L'adresse email du tuteur est invalide.");
// alert("L'adresse email du tuteur est invalide.");
setdisplay_alert_mysy("1");
setalert_message("L'adresse email du tuteur est invalide.");
setalert_type("error");
return;
}
form.append("tuteur2_email", p_detail_tuteur2_email.trim());
@ -6583,6 +6815,7 @@ const DisplayPartnerStagiaires = (props) => {
{ "id": "3", "label": "Desactiver Recyclage", "value": "recyclage_disable" },
{ "id": "4", "label": "Contacter par Email", "value": "sendemail" },
{ "id": "5", "label": "Partager Document", "value": "pushdocument" },
{ "id": "6", "label": "Archiver/Désarch.", "value": "archive_desarchive" },
]
@ -6617,6 +6850,7 @@ const DisplayPartnerStagiaires = (props) => {
{ "id": "code_session", "label": "Code Promo", "value": "code_session" },
{ "id": "class_title", "label": "Titre Formation", "value": "class_title" },
{ "id": "client_nom", "label": "Lié au Client (nom client) ", "value": "client_nom" },
{ "id": "archive", "label": "Archive", "value": "archive" },
{ "id": "", "label": "", "value": "" },
{ "id": "1", "label": "", "value": "1" }, // Cette ligne pour couvrir l'ajout d'une ligne de filter. C'est fait expres.
]
@ -7145,6 +7379,15 @@ const DisplayPartnerStagiaires = (props) => {
const [ent_push_doc_message_notif, setent_push_doc_message_notif] = useState(false);
const New_Option_Is_archive = [
{ "id": "1", "label": "Oui", "value": "1" },
{ "id": "0", "label": "Non", "value": "0" },
{ "id": "2", "label": "Tout", "value": "2" },
{ "id": "", "label": "", "value": "" },
]
const [is_recherche, setis_recherche] = useState("0");
return (
<div className="displaypartnerstagiaire">
{isLoading && <div className="loader-container">
@ -7304,8 +7547,8 @@ const DisplayPartnerStagiaires = (props) => {
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
@ -8532,7 +8775,7 @@ const DisplayPartnerStagiaires = (props) => {
<div className="div_row_droite texte_area_filter_value" >
{String(p_filtre1) !== "archive" && <div className="div_row_droite texte_area_filter_value" >
{p_filtre1 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
@ -8562,7 +8805,35 @@ const DisplayPartnerStagiaires = (props) => {
/>
}
</div>
</div>}
{String(p_filtre1) === "archive" && <div className="div_row_droite texte_area_filter_value" >
{p_filtre1 &&
<Autocomplete
disablePortal
name="filtre1_value"
id="filtre1_value"
value={New_Option_Is_archive.filter((data) => (data).id === String(p_filtre1_value))[0].label}
sx={{ float: "right" }}
className="disabled_style"
options={New_Option_Is_archive}
onChange={(event, value) => {
if (value && value.value) {
setp_filtre1_value(value.value);
} else {
setp_filtre1_value("");
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>}
/>
}
</div>}
{p_filtre1 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip01" data-tooltip-html="Ajouter une nouvelle ligne de filtre">
@ -8612,29 +8883,10 @@ const DisplayPartnerStagiaires = (props) => {
/>}
{/*<TextField
name="filtre2"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
options={filters}
value={p_filtre2}
onChange={(e) => {
setp_filtre2(e.target.value);
}}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Email &nbsp;</MenuItem>
<MenuItem value="nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Nom &nbsp;</MenuItem>
<MenuItem value="code_session" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Code Session &nbsp;&nbsp;</MenuItem>
<MenuItem value="class_title" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Titre Formation &nbsp;</MenuItem>
<MenuItem value="client_nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Lié au Client (nom client) &nbsp;</MenuItem>
</TextField>*/}
</div>
<div className="div_row_droite texte_area_filter_value" style={{ "marginTop": "0.5rem" }}>
{String(p_filtre2).length > 2 &&
{String(p_filtre2).length > 2 && String(p_filtre2) !== "archive" &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -8661,6 +8913,29 @@ const DisplayPartnerStagiaires = (props) => {
}}
/>}
{String(p_filtre2).length > 2 && String(p_filtre2) === "archive" &&
<Autocomplete
disablePortal
name="filtre2_value"
id="filtre2_value"
value={New_Option_Is_archive.filter((data) => (data).id === String(p_filtre2_value))[0].label}
sx={{ float: "right" }}
className="disabled_style"
options={New_Option_Is_archive}
onChange={(event, value) => {
if (value && value.value) {
setp_filtre2_value(value.value);
} else {
setp_filtre2_value("");
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>}
/>}
</div>
{String(p_filtre2).length > 2 && <div className='filter_bton_add' >
@ -8718,28 +8993,10 @@ const DisplayPartnerStagiaires = (props) => {
/>}
{/*<TextField
name="filtre3"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
options={filters}
value={p_filtre3}
onChange={(e) => {
setp_filtre3(e.target.value)
}}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Email &nbsp;</MenuItem>
<MenuItem value="nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Nom &nbsp;</MenuItem>
<MenuItem value="code_session" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Code Session &nbsp;&nbsp;</MenuItem>
<MenuItem value="class_title" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Titre Formation &nbsp;</MenuItem>
<MenuItem value="client_nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Lié au Client (nom client) &nbsp;</MenuItem>
</TextField>*/}
</div>
<div className="div_row_droite texte_area_filter_value" style={{ "marginTop": "0.5rem" }}>
{String(p_filtre3).length > 2 &&
{String(p_filtre3).length > 2 && String(p_filtre3) !== "archive" &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -8766,6 +9023,31 @@ const DisplayPartnerStagiaires = (props) => {
}}
/>}
{String(p_filtre3).length > 3 && String(p_filtre3) === "archive" &&
<Autocomplete
disablePortal
name="filtre2_value"
id="filtre2_value"
value={New_Option_Is_archive.filter((data) => (data).id === String(p_filtre3_value))[0].label}
sx={{ float: "right" }}
className="disabled_style"
options={New_Option_Is_archive}
onChange={(event, value) => {
if (value && value.value) {
setp_filtre3_value(value.value);
} else {
setp_filtre3_value("");
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>}
/>
}
</div>
{String(p_filtre2).length > 2 && <div className='filter_bton_add' >
@ -8819,26 +9101,6 @@ const DisplayPartnerStagiaires = (props) => {
/>}
{/*<TextField
name="filtre4"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
options={filters}
value={p_filtre4}
onChange={(e) => {
setp_filtre4(e.target.value)
}}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Email &nbsp;</MenuItem>
<MenuItem value="nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Nom &nbsp;</MenuItem>
<MenuItem value="code_session" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Code Session &nbsp;&nbsp;</MenuItem>
<MenuItem value="class_title" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Titre Formation &nbsp;</MenuItem>
<MenuItem value="client_nom" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Lié au Client (nom client) &nbsp;</MenuItem>
</TextField> */}
</div>
<div className="div_row_droite texte_area_filter_value" style={{ "marginTop": "0.5rem" }}>
{String(p_filtre4).length > 2 &&
@ -8889,12 +9151,21 @@ const DisplayPartnerStagiaires = (props) => {
<div className="div_row" ref={myRef_head} id="myRef_head" style={{ "border": "None", "color": "orange", "textAlign": "center" }}>
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
<Button variant="contained" className="bton_enreg" onClick={Getall_TrainingParticipant}>Rechercher
<Button variant="contained" className="bton_enreg"
onClick={(event) => {
Getall_TrainingParticipant();
setis_recherche("1");
}} >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 variant="contained" className="bton_annule"
onClick={(event) => {
clean_all_filters();
setis_recherche("");
}}
>Annuler
</Button>
</div>
@ -8986,6 +9257,7 @@ const DisplayPartnerStagiaires = (props) => {
}}
>
<DataGrid
loading={loading_datagrid}
checkboxSelection
components={{
Toolbar: CustomToolbar
@ -9048,6 +9320,8 @@ const DisplayPartnerStagiaires = (props) => {
nb_jour_avant_recyclage: JSON.parse(item).nb_jour_avant_recyclage,
warning_recyclage: JSON.parse(item).warning_recyclage,
warning_recyclage_alert: JSON.parse(item).warning_recyclage,
archive: JSON.parse(item).archive,
}
))}
@ -9393,11 +9667,13 @@ const DisplayPartnerStagiaires = (props) => {
onChange={(event, value) => {
if (value && value.value) {
if (String(value.value) === "supprimer"
|| String(value.value) === "convention" || String(value.value) === "exporter"
|| String(value.value) === "convention"
|| String(value.value) === "exporter"
|| String(value.value) === "valide_inscr"
|| String(value.value) === "recyclage_disable"
|| String(value.value) === "sendemail"
|| String(value.value) === "pushdocument") {
|| String(value.value) === "pushdocument"
|| String(value.value) === "archive_desarchive") {
setactionmass_ftion_val(value.value);
}
else {
@ -9462,6 +9738,10 @@ const DisplayPartnerStagiaires = (props) => {
<font> Confirmer la <b> rédaction d'un email </b> en masse pour {selectionModel.length} lignes.
</font>}
{String(actionmass_ftion_val) === "archive_desarchive" &&
<font> Confirmer la <b> l'archivage / désarchivage </b> en masse pour {selectionModel.length} lignes.
</font>}
</div>
@ -9516,7 +9796,7 @@ const DisplayPartnerStagiaires = (props) => {
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && <div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined" onClick={submenu_import_stagiaire} className="detail_class_submenu bton_import_excel"
id='menu_import_participant' name='menu_import_participant'>Importer des participants excel &nbsp;
id='menu_import_participant' name='menu_import_participant' style={{ maxWidth: "20rem" }}>Importer des participants excel &nbsp;
<img src={excel_icone} alt="ajout csv" className="icon_excel" />
</Button>
@ -10152,7 +10432,11 @@ const DisplayPartnerStagiaires = (props) => {
{String(display_detail_stagiaire) === "1" && selected_code_session && <div className="div_row" style={{ "border": "None", "background": '#F8F9F9', "padding": '5px' }}>
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Détail inscrit </nav>
{p_detail_archive && String(p_detail_archive) === "1" &&
<div class="block_archive"> Document Archivé </div>}
<nav style={{ "border": "None", "fontSize": "16px", "fontWeight": "600", fontFamily: 'DM Sans' }}> Détail inscrit </nav>
{String(GetAttendee_api) === "true" && <div className="div_row" style={{ "border": "None" }}>
{String(Resend_LMS_Credentials_api) === "true" && <div className="div_row okUpdateData" style={{ "textAlign": "center" }}>
@ -11808,7 +12092,7 @@ const DisplayPartnerStagiaires = (props) => {
{Get_List_Of_All_PJ_result && Get_List_Of_All_PJ_result.map((val) => (
<div className="div_row_list_pj" >
<nav style={{ "color": "green", "cursor": "pointer" }} onClick={Download_one_attached_document} name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}> Télécharger &nbsp;<i> {(JSON.parse(val).file_business_object)}</i> </nav> <br />
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && <Popup
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && <Popup
trigger={
<nav style={{ "color": "red", "cursor": "pointer" }} > Supprimer</nav>
@ -11929,7 +12213,6 @@ const DisplayPartnerStagiaires = (props) => {
/>
}
/>
}
</div>

View File

@ -1385,7 +1385,7 @@ const Display_Partner_Catalog_DetailClass_new_v2 = (props) => {
else {
setGet_Subdomain_Partner_Data_api("false");
setGet_Subdomain_Partner_Data_message(res.data.message);
alert(res.data.message);
//alert(res.data.message);
}
}).catch((error) => {

View File

@ -1,60 +1,37 @@
import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint } from "react-icons/fc";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box';
import { Typography, LinearProgress } from '@mui/material';
import styled from 'styled-components';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import { TransitionProps } from '@mui/material/transitions';
import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
import { useParams } from 'react-router-dom'
import Header from "./Header";
import Footer from "./Fotter";
import { FcInfo } from "react-icons/fc";
import { Document, Page } from 'react-pdf'
import { gridClasses } from '@mui/x-data-grid';
import Link from '@mui/material/Link';
import { PiDotsThree } from "react-icons/pi";
import SignatureCanvas from 'react-signature-canvas';
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import { makeStyles } from "@material-ui/core/styles";
import Paper from '@material-ui/core/Paper';
import Draggable from 'react-draggable';
import { IconButton } from '@material-ui/core';
import AutoFixHighOutlinedIcon from '@mui/icons-material/AutoFixHighOutlined';
import CancelPresentationIcon from '@mui/icons-material/CancelPresentation';
function PaperComponent(props) {
@ -279,6 +256,12 @@ function Emarge_QR_Code() {
var liste_formation = GetSelectedRows_Emarg_Ids();
var tab_emargement = [];
if (liste_formation.length <= 0) {
setdisplay_alert_mysy("1");
setalert_message("Vous devez sélectionner une ligne d'émargement");
setalert_type("error");
}
for (var i = 0; i < liste_formation.length; i++) {
var line = JSON.parse(get_E_Document_result[liste_formation[i]]);
tab_emargement.push(line._id)
@ -507,17 +490,41 @@ function Emarge_QR_Code() {
const [pad_signature_img, setpad_signature_img] = React.useState("");
const [display_alert_mysy, setdisplay_alert_mysy] = useState("");
const [alert_message, setalert_message] = useState("");
const [alert_type, setalert_type] = useState("");
function clear_alert_message() {
setalert_message("");
}
function clear_alert_type() {
setalert_type("");
}
function clear_display_alert_mysy() {
setdisplay_alert_mysy("");
}
return (
<div className="emarge_qr_code">
{/*** Affichage des messages d'alerte*/}
{display_alert_mysy && String(display_alert_mysy) === "1" &&
<Module_Alert_Confirmation alert_message={alert_message}
alert_type={alert_type}
clear_alert_message={clear_alert_message}
clear_alert_type={clear_alert_type}
clear_display_alert_mysy={clear_display_alert_mysy}
/>
}
{/*** FIN Affichage des messages d'alerte*/}
{/* POUR SIGNATURE MANUSCRITE */}
<Dialog
open={Dialog_SIGN_MANUSCRITE_open}
// onClose={Dialog_SIGN_MANUSCRITE_handleClose}
// onClose={Dialog_SIGN_MANUSCRITE_handleClose}
className="esign"
static
onClose={() => null}
@ -544,7 +551,7 @@ function Emarge_QR_Code() {
>
<DialogTitle style={{ cursor: 'move', fontFamily:"DM Sans"}} id="draggable-dialog-title">Signature Manuscrite </DialogTitle>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans" }} id="draggable-dialog-title">Signature Manuscrite </DialogTitle>
<DialogContent className="DialogContent_width" >
<div style={{ width: "100%" }}>
@ -556,9 +563,9 @@ function Emarge_QR_Code() {
}} />
</div>
<div style={{ width: "100%", marginLeft:'auto', marginRight:'auto', width:315 }}>
<nav className="bton_supprime_image_class" style={{width:'100%'}} onClick={(e) => {
<div style={{ width: "100%", marginLeft: 'auto', marginRight: 'auto', width: 315 }}>
<nav className="bton_supprime_image_class" style={{ width: '100%' }} onClick={(e) => {
clearCanvas();
}}>Effacer </nav>
@ -571,7 +578,7 @@ function Emarge_QR_Code() {
<DialogActions>
<IconButton
<IconButton
autoFocus
onClick={Dialog_SIGN_MANUSCRITE_handleClose_buton}
color="primary"
@ -602,10 +609,10 @@ function Emarge_QR_Code() {
onClose={Dialog_SIGN_VALIDATION_handleClose}
className="esign"
>
>
{!erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Signature </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Signature - <font color="red"> Identifiants invalides </font></DialogTitle>}
{!erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Signature </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Signature - <font color="red"> Identifiants invalides </font></DialogTitle>}
<DialogContent className="DialogContent_width">
@ -678,8 +685,8 @@ function Emarge_QR_Code() {
>
{!erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Authentification </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Authentification - <font color="red"> Identifiants invalides </font></DialogTitle>}
{!erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Authentification </DialogTitle>}
{erreur_recup_e_doc && <DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Authentification - <font color="red"> Identifiants invalides </font></DialogTitle>}
<DialogContent className="DialogContent_width">
@ -749,7 +756,7 @@ function Emarge_QR_Code() {
>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> Information </DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> Information </DialogTitle>
<DialogContent className="DialogContent_width">
@ -782,7 +789,7 @@ function Emarge_QR_Code() {
</div>}
<h3 style={{ fontFamily:'DM Sans' }}> Emargement électronique </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Emargement électronique </h3>
<div className="div_row">
<div className="block_guide_line" >
@ -1026,7 +1033,7 @@ function Emarge_QR_Code() {
<div className="div_row">
&nbsp;
</div>
</div>
);
}

View File

@ -29,6 +29,7 @@ import tick_ko from "../../mysy_img/tick_KO.png";
import img_header from "../../mysy_img2/img_header.png"
import img_header_jmg from "../../mysy_img2/img_jmj_modif.jpg"
import jmj_banniere_for_mobile from "../../mysy_img/jmj_bannier_mobile.png";
import { TbArrowsDownUp } from "react-icons/tb";
@ -1238,7 +1239,7 @@ const Jmjformation_Catalogue_Public = (props) => {
form.append("user_longitude", longitude);
form.append("user_state", state);
form.append("subdomain", "colasrail");
// form.append("subdomain", "nousformons");
// form.append("subdomain", "nousformons");
var myurl = ""
@ -1307,7 +1308,7 @@ const Jmjformation_Catalogue_Public = (props) => {
setResult([]);
//Get Criterias
var crit_SearchText = "";
var myurl = "";
@ -2463,7 +2464,7 @@ const Jmjformation_Catalogue_Public = (props) => {
var form = new FormData();
form.append("subdomain", "colasrail");
// form.append("subdomain", "nousformons");
// form.append("subdomain", "nousformons");
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Partner_Data_From_Subdomain/";
@ -2766,7 +2767,6 @@ const Jmjformation_Catalogue_Public = (props) => {
return (
<div className="mon_catalogue_public jmj_formation" >
@ -3536,7 +3536,7 @@ const Jmjformation_Catalogue_Public = (props) => {
<div className="bloc_logo_indic_contact">
<font className="bloc_logo_indic_contact_text"> Contact </font> <br />
<font className="bloc_logo_indic_contact_text"> Contact </font> <br />
Tel : {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_contact_public_telephone} <br />
Email : {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_contact_public_email}
</div>
@ -4082,31 +4082,39 @@ const Jmjformation_Catalogue_Public = (props) => {
<div className="jmj_block_header">
<div className="jmj_block_header_img">
<div style={{ "width": "100%", float: "left" }}>
<div style={{ "width": "100%", float: "left" }} >
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_banniere_img && <div >
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_banniere_img &&
<div className="jmj_banniere_no_mobile">
<img src={New_Get_Subdomain_Partner_Data_result[0].catalog_pub_banniere_img} className="Partner_Catalog_Background_Header_jmj"></img>
</div>}
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_banniere_img &&
<div className="jmj_banniere_mobile">
<img src={jmj_banniere_for_mobile} className="Partner_Catalog_Background_Header_jmj"></img>
</div>}
<div className="jmj_header_gauche">
<div className="bloc_logo_indic" style={{ position: "unset" }}>
<div className="bloc_logo_indic" style={{ position: "unset", width: '100%' }}>
<div className="bloc_logo_indic_logo">
<div className="jmj_bloc_logo_indic_logo" >
<img src={New_Get_Subdomain_Partner_Data_result[0].catalog_pub_logo} />
</div>
<div className="bloc_logo_indic_contact">
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_contact) === "1" && <div className="jmj_bloc_logo_indic_contact"
>
<font className="bloc_logo_indic_contact_text"> Contact </font> <br />
<font className="bloc_logo_indic_contact_text" style={{ fontSize: '25px', color: '#16274F', }}> Contactez-nous </font> <br />
Tel : {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_contact_public_telephone} <br />
Email : {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_contact_public_email}
</div>
</div>}
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_indicateur) === "1" && <div className="bloc_logo_indic_indic">
<font className="bloc_logo_indic_indic_text"> Indicateurs </font> <br />
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_indicateur) === "1" && <div className="jmj_bloc_logo_indic_indic">
<font className="bloc_logo_indic_indic_text" style={{ fontSize: '25px', color: '#16274F', }}> Nos performances </font> <br />
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0
&& New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_txt &&
<div style={{
@ -4114,6 +4122,7 @@ const Jmjformation_Catalogue_Public = (props) => {
width: '100%',
fontSize: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_taille}` + "px",
color: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_color}`,
color: '#16274F',
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_1_txt}
</div>}
@ -4125,6 +4134,7 @@ const Jmjformation_Catalogue_Public = (props) => {
width: '100%',
fontSize: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_2_taille}` + "px",
color: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_2_color}`,
color: '#16274F',
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_2_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_2_txt}
</div>}
@ -4136,6 +4146,7 @@ const Jmjformation_Catalogue_Public = (props) => {
width: '100%',
fontSize: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_3_taille}` + "px",
color: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_3_color}`,
color: '#16274F',
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_3_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_3_txt}
</div>}
@ -4147,12 +4158,13 @@ const Jmjformation_Catalogue_Public = (props) => {
width: '100%',
fontSize: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_taille}` + "px",
color: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_color}`,
color: '#16274F',
fontWeight: `${New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_gras}`,
}}> {New_Get_Subdomain_Partner_Data_result[0].catalog_pub_indicateur_4_txt}
</div>}
</div>}
<div className="bloc_milieu" style={{ position: "unset" }}>
{String(New_Get_Subdomain_Partner_Data_result[0].affiche_raison_sociale) === "1" && <div className="bloc_milieu" style={{ position: "unset" }}>
<div className="bloc_milieu_text">
{New_Get_Subdomain_Partner_Data_result && New_Get_Subdomain_Partner_Data_result.length > 0 &&
@ -4188,15 +4200,15 @@ const Jmjformation_Catalogue_Public = (props) => {
src={img_header_jmg} />
</div>
</div>
</div>}
</div>
</div>
<div className="jmj_header_droite">
{/*<div className="jmj_header_droite">
<img src={img_header_jmg} style={{ width: '100%', paddingTop: '3rem' }} />
</div>
</div>*/}
</div>
</div>
@ -4409,7 +4421,7 @@ const Jmjformation_Catalogue_Public = (props) => {
</div>
<div style={{ width: '100%', marginBottom:"1rem" }}>
<div style={{ width: '100%', marginBottom: "1rem" }}>
<div className="block_display_flex_formation" style={{ width: '100%' }}>

View File

@ -4,7 +4,7 @@
background: transparent !important;
color: white !important;
z-index: 999;
}
}
.css-qbdosj-Input {
background: transparent !important;
@ -163,7 +163,7 @@
margin-top: 0.5rem;
margin-right: auto;
margin-bottom: 10px;
height: auto;
height: auto;
}
.rech_middlebox {
@ -2255,6 +2255,12 @@
flex-wrap: wrap;
justify-content: left;
}
.jmj_banniere_no_mobile {
display: none;
}
.jmj_banniere_mobile {}
}
@ -2341,9 +2347,9 @@
.rech_leftbox {
border-width: 1px;
height: auto;
height: auto;
padding: 0.1rem;
border-radius: 1rem;
border-radius: 0px;
margin-bottom: 0.1rem;
font-family: "DM Sans" !important;
background: white;
@ -2351,8 +2357,8 @@
margin-top: 0.5rem;
padding-left: 5px;
width: 80%;
margin-left: 10%;
width: 98%;
margin-left: 1%;
}
.rech_middlebox {
@ -5348,6 +5354,12 @@
justify-content: left;
}
.jmj_banniere_no_mobile {}
.jmj_banniere_mobile {
display: none;
}
}
@ -5426,7 +5438,7 @@
float: left;
border-width: 1px;
width: 100%;
padding: 0.1rem;
border-radius: 1rem;
margin-bottom: 0.1rem;
@ -5435,7 +5447,7 @@
margin-left: 5px;
margin-top: 0.5rem;
padding-left: 5px;
height: auto;
height: auto;
}
.rech_middlebox {
@ -8413,6 +8425,13 @@
}
.jmj_banniere_no_mobile {}
.jmj_banniere_mobile {
display: none;
}
}
@media only screen and (min-width: 1200px) and (max-width: 1919px) {
@ -8477,7 +8496,7 @@
margin-left: 5px;
padding-left: 5px;
height: auto;
height: auto;
}
.rech_middlebox {
@ -11510,6 +11529,11 @@
}
.jmj_banniere_no_mobile {}
.jmj_banniere_mobile {
display: none;
}
}
@media only screen and (min-width: 1920px) {
@ -11567,7 +11591,7 @@
float: left;
border-width: 1px;
width: 100%;
padding: 0.5rem;
border-radius: 1rem;
margin-bottom: 0.1rem;
@ -14641,6 +14665,11 @@
}
.jmj_banniere_no_mobile {}
.jmj_banniere_mobile {
display: none;
}
}

View File

@ -107,7 +107,7 @@ const useStyles = makeStyles((theme) => ({
color: 'gray',
},
}));
const Module_Editique = (props) => {
const classes = useStyles();
@ -207,6 +207,7 @@ const Module_Editique = (props) => {
setInvoice_Session_Formation_result(res.data.message);
Getall_Editable_Document_By_Partner_By_Collection();
props.GetListeInscrit(props.related_collection_recid, props.internal_url);
props.Get_List_Partner_Clients();
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);

View File

@ -3137,7 +3137,8 @@ const Module_Session_Planification = (props) => {
var event_start = String(selected_sequence_startDate);
var event_end = String(selected_sequence_endDate);
console.log(" ### sequence_startDate 333 = ", sequence_startDate)
console.log(" ### sequence_startDate 333 = ", sequence_startDate);
console.log(" ### selected_sequence_startDate 444 = ", selected_sequence_startDate)
var local_event_start = moment(sequence_startDate).format("DD/MM/YYYY HH:mm");
var local_event_end = moment(sequence_endDate).format("DD/MM/YYYY HH:mm");
@ -3192,6 +3193,58 @@ const Module_Session_Planification = (props) => {
})
}
function Get_Ressource_Avabilities_from_list(local_related_collection_recid) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("related_collection", Dialog_seq_ressource_1_selected_type_ressource);
form.append("related_collection_recid", local_related_collection_recid);
form.append("event_start", String(selected_sequence_startDate));
form.append("event_end", String(selected_sequence_endDate));
//console.log(" ### form = ", form)
//return;
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Is_Ressource_Available/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
/*console.log(" In Get_Ressource_Avabilities res.data.status = " + res.data.status);
console.log(" In Get_Ressource_Avabilities res.data.message r_class = " + res.data.message);
console.log(" In Get_Ressource_Avabilities res.data.avability_check r_class = " + res.data.avability_check);
*/
setGet_Ressource_Avabilities_api("true");
setGet_Ressource_Avabilities_result(res.data.message);
setGet_Ressource_Avabilities_avability_check(res.data.avability_check);
}
else {
setGet_Ressource_Avabilities_api("false");
setGet_Ressource_Avabilities_message(res.data.message);
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("error");
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Ressource_Avabilities = ', error);
setGet_Ressource_Avabilities_api("false");
alert("Impossible de récuperer la liste des ressources de la sequence")
//setmyApimyApiMessage("")
})
}
const [check_ressource_avabilities, setcheck_ressource_avabilities] = useState("");
@ -4547,9 +4600,8 @@ const Module_Session_Planification = (props) => {
onChange={(event, value) => {
if (value && value._id) {
setDialog_seq_ressource_1_selected_ressource_id(value._id);
Get_Ressource_Avabilities(value._id);
Get_Ressource_Avabilities_from_list(value._id);
} else {
setGet_Ressource_Avabilities_avability_check("");
@ -4564,7 +4616,7 @@ const Module_Session_Planification = (props) => {
<div className="session_caract_Dialog koUpdateData">
<Tooltip className="tooltip_css" id="ressource_indispo_01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="ressource_indispo_01" data-tooltip-html="Cette ressource n'est pas disponible sur ce créneau. Verifiez son agenda">
<FcCancel /><FcInfo /> <font size="10px" color="orange"> /!\ Indisponible du {moment(sequence_startDate).format("DD/MM/YYYY HH:mm")} au {moment(sequence_endDate).format("DD/MM/YYYY HH:mm")} </font>
<FcCancel /><FcInfo /> <font size="10px" color="orange"> /!\ Indisponible du {String(selected_sequence_startDate)} au {String(selected_sequence_endDate)} </font>
</a>
</div>
}
@ -4597,7 +4649,7 @@ const Module_Session_Planification = (props) => {
if (value && value._id) {
setDialog_seq_ressource_1_selected_ressource_id(value._id);
// On ne fait le controle de disponibilité que si on une sequence precise. pas quand c'est en masse.
Get_Ressource_Avabilities(value._id);
Get_Ressource_Avabilities_from_list(value._id);
} else {
@ -4614,7 +4666,7 @@ const Module_Session_Planification = (props) => {
<div className="session_caract_Dialog koUpdateData">
<Tooltip className="tooltip_css" id="ressource_indispo_01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="ressource_indispo_01" data-tooltip-html="Cette ressource n'est pas disponible sur ce créneau. Verifiez son agenda">
<FcCancel /><FcInfo /> <font size="10px" color="orange"> /!\ Indisponible du {moment(sequence_startDate).format("DD/MM/YYYY HH:mm")} au {moment(sequence_endDate).format("DD/MM/YYYY HH:mm")} </font>
<FcCancel /><FcInfo /> <font size="10px" color="orange"> /!\ Indisponible du {String(selected_sequence_startDate)} au {String(selected_sequence_endDate)} </font>
</a>
</div>
}
@ -6651,7 +6703,7 @@ const Module_Session_Planification = (props) => {
<div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined"
className="detail_class_submenu bton_add_session bton_add_session_create_automatic" style={{ "width": "40%" , maxWidth:'20rem'}}
className="detail_class_submenu bton_add_session bton_add_session_create_automatic" style={{ "width": "40%", maxWidth: '20rem' }}
id='menu_import_participant' name='menu_import_participant' onClick={(event) => {
if (String(props.selected_session_invoiced_statut) === "1") {
alert(" La session est en cours de facturation ")

View File

@ -2876,7 +2876,7 @@ const Mon_Catalogue_Public = (props) => {
&nbsp;
</div>
</div>
<div className="bloc_milieu_model_2">

View File

@ -6,7 +6,7 @@ import Button from '@mui/material/Button';
import { getCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
@ -302,6 +302,70 @@ const Partner_Client = (props) => {
const [Delete_LIST_Client_Data_api, setDelete_LIST_Client_Data_api] = useState();
const [Delete_LIST_Client_Data_message, setDelete_LIST_Client_Data_message] = useState();
const [Delete_LIST_Client_Data_result, setDelete_LIST_Client_Data_result] = useState();
function Delete_LIST_Client_Data() {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
var tab_tmp = []
for (var i = 0; i < selectionModel.length; i++) {
var myid = parseInt(String(selectionModel[i]));
var line = JSON.parse(rows_list_clients[myid]);
tab_tmp.push(line._id);
}
form.append("token", stored_cookie);
form.append("tab_ids", tab_tmp);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_List_Partner_Client/";
axios.post(myurl, form).then(res => {
//console.log(" In Delete_LIST_Client_Data res.data.status = " + res.data.status);
//console.log(" In Delete_LIST_Client_Data res.data.message r_class = " + res.data.message);
if (String(res.data.status) === String("true")) {
setDelete_LIST_Client_Data_api("true");
setDelete_LIST_Client_Data_result(res.data.message);
Get_List_Partner_Clients();
setSelectionModel([]);
setEdite_Client();
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("success");
}
else if (String(res.data.status) === String("Err_Connexion")) {
alert(res.data.message);
history.push("/Connexion");
}
else {
setDelete_LIST_Client_Data_api("false");
setDelete_LIST_Client_Data_message(res.data.message);
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("error");
}
}).catch((error) => {
console.warn('Not good man :( Delete_LIST_Client_Data = ', error);
setDelete_LIST_Client_Data_api("false");
// alert(" Impossible de supprimer le client");
setdisplay_alert_mysy("1");
setalert_message(" Impossible de supprimer la liste de clients");
setalert_type("error");
})
}
const [Delete_Client_Data_api, setDelete_Client_Data_api] = useState();
const [Delete_Client_Data_message, setDelete_Client_Data_message] = useState();
const [Delete_Client_Data_result, setDelete_Client_Data_result] = useState();
@ -356,15 +420,20 @@ const Partner_Client = (props) => {
})
}
const [loading_datagrid, setloading_datagrid] = useState(true);
const [Get_List_Partner_Clients_api, setGet_List_Partner_Clients_api] = useState();
const [Get_List_Partner_Clients_message, setGet_List_Partner_Clients_message] = useState();
const [Get_List_Partner_Clients_result, setGet_List_Partner_Clients_result] = useState([]);
function Get_List_Partner_Clients(event) {
setloading_datagrid(true);
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("archive", "0");
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Partner_List_Partner_Client/";
@ -377,19 +446,23 @@ const Partner_Client = (props) => {
setGet_List_Partner_Clients_api("true");
setGet_List_Partner_Clients_result(res.data.message);
setrows_list_clients(res.data.message);
setloading_datagrid(false);
}
else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message);
history.push("/Connexion");
setloading_datagrid(false);
}
else {
setGet_List_Partner_Clients_api("false");
setGet_List_Partner_Clients_message(res.data.message);
setloading_datagrid(false);
}
}).catch((error) => {
console.warn('Not good man :( Get_List_Partner_Clients = ', error);
setGet_List_Partner_Clients_api("false");
setloading_datagrid(false);
//setmyApimyApiMessage("")
})
}
@ -494,6 +567,7 @@ const Partner_Client = (props) => {
}, []);
const [isLoading, setLoading] = useState();
const [part_client_file_name, setpart_client_file_name] = useState();
function submenu_import_part_client_mass() {
@ -530,7 +604,7 @@ const Partner_Client = (props) => {
const stored_cookie = getCookie('tokenmysypart');
formData.append("token", stored_cookie);
setLoading(true);
//console.log("token = " + stored_cookie);
fetch(
@ -543,6 +617,7 @@ const Partner_Client = (props) => {
.then((response) => response.json())
.then((result) => {
if (String(result['status']) === String("true")) {
setLoading(false);
//console.log('Success:', result['message']);
setliste_part_client_file_change_result(result['message']);
setliste_part_client_file_change_api("true");
@ -556,11 +631,13 @@ const Partner_Client = (props) => {
} else if (String(result['status']) === String("Err_Connexion")) {
setLoading(false);
alert('Erreur: ' + result['message']);
history.push("/Connexion");
}
else {
setLoading(false);
setliste_part_client_file_change_message(result['message']);
setliste_part_client_file_change_api("false");
// alert(result['message']);
@ -572,6 +649,7 @@ const Partner_Client = (props) => {
})
.catch((error) => {
setLoading(false);
console.error('Error:', error);
setliste_part_client_file_change_api("false");
});
@ -654,8 +732,8 @@ const Partner_Client = (props) => {
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();
const [p_filtre2, setp_filtre2] = useState("");
const [p_filtre2_value, setp_filtre2_value] = useState("");
function clean_all_filters() {
@ -713,10 +791,144 @@ const Partner_Client = (props) => {
const New_Option_Filter = [
{ "id": "nom", "label": "Nom ", "value": "nom" },
{ "id": "email", "label": "Email ", "value": "email" },
{ "id": "archive", "label": "Archive", "value": "archive" },
{ "id": "", "label": "", "value": "" },
{ "id": "1", "label": "", "value": "1" }, // Cette ligne pour couvrir l'ajout d'une ligne de filter. C'est fait expres.
]
const New_Option = [
{ "id": "0", "label": "Archiver/Désarch.", "value": "archive_desarchive" },
{ "id": "1", "label": "Supprimer", "value": "supprimer" },
]
// Action en mass
const [actionmass_ftion_val, setactionmass_ftion_val] = useState("");
const actionmass_ftion = (event) => {
const value = event.target.value;
if (String(value) === "supprimer" || String(value) === "archive_desarchive") {
setactionmass_ftion_val(value);
}
else {
setactionmass_ftion_val();
}
}
async function actionmass_ftion_Traitemet() {
if (String(actionmass_ftion_val) === String("archive_desarchive")) {
Archive_Given_Client(); // zzzz
}
if (String(actionmass_ftion_val) === String("supprimer")) {
Delete_LIST_Client_Data();
}
}
const New_Option_Is_archive = [
{ "id": "1", "label": "Oui", "value": "1" },
{ "id": "0", "label": "Non", "value": "0" },
{ "id": "2", "label": "Tout", "value": "2" },
{ "id": "", "label": "", "value": "" },
]
const [is_recherche, setis_recherche] = useState("0");
const [Archive_Given_Client_api, setArchive_Given_Client_api] = useState();
const [Archive_Given_Client_message, setArchive_Given_Client_message] = useState();
const [Archive_Given_Client_result, setArchive_Given_Client_result] = useState();
function Archive_Given_Client() {
var archive_statut = "1"
var tab_tmp = []
for (var i = 0; i < selectionModel.length; i++) {
var myid = parseInt(String(selectionModel[i]));
var line = JSON.parse(rows_list_clients[myid]);
tab_tmp.push(line._id);
// Si une seule ligne est a le statut "non archivé", alors on archive
if (line.archive && String(line.archive) === "0")
archive_statut = String(line.archive)
//console.log(rowss[myid]['external_code']);
}
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("tab_partner_client_ids", tab_tmp);
var myurl = "";
if (archive_statut !== "1")
myurl = process.env.REACT_APP_API_URL + "myclass/api/archive_partner_client/";
else
myurl = process.env.REACT_APP_API_URL + "myclass/api/unarchive_partner_client/";
setLoading(true);
axios.post(myurl, form).then(res => {
//console.log(" In Archive_Given_Client res.data.status = " + res.data.status);
//console.log(" In Archive_Given_Client res.data.message r_class = " + res.data.message);
setLoading(false);
if (String(res.data.status) === String("true")) {
setArchive_Given_Client_api("true");
setArchive_Given_Client_result(res.data.message);
setSelectionModel([]);
setactionmass_ftion_val("");
console.log(" ### is_recherche = ", is_recherche);
if (String(is_recherche) === "1") {
Get_List_Partner_Clients();
} else {
Get_List_Partner_Clients_With_Filter();
}
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("success");
}
else {
setArchive_Given_Client_api("false");
setArchive_Given_Client_message(res.data.message);
// alert(res.data.message);
setdisplay_alert_mysy("1");
setalert_message(res.data.message);
setalert_type("error");
}
}).catch((error) => {
setLoading(false);
console.warn('UpdateStagiaireData : Not good man :( Archive_Given_Client = ' + error);
setArchive_Given_Client_api("false");
alert(" Impossible d'archiver/deséarchiver les clients ");
})
}
function display_child_alert_success(message) {
setdisplay_alert_mysy("1");
@ -743,6 +955,11 @@ const Partner_Client = (props) => {
<div className="partner_client">
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
{/*** Affichage des messages d'alerte*/}
{display_alert_mysy && String(display_alert_mysy) === "1" &&
<Module_Alert_Confirmation alert_message={alert_message}
@ -954,7 +1171,7 @@ const Partner_Client = (props) => {
<div className="div_row_droite texte_area_filter_value" >
{String(p_filtre1) !== "archive" && <div className="div_row_droite texte_area_filter_value" >
{p_filtre1 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
@ -984,7 +1201,36 @@ const Partner_Client = (props) => {
/>
}
</div>
</div>}
{String(p_filtre1) === "archive" && <div className="div_row_droite texte_area_filter_value" >
{p_filtre1 &&
<Autocomplete
disablePortal
name="filtre1_value"
id="filtre1_value"
value={New_Option_Is_archive.filter((data) => (data).id === String(p_filtre1_value))[0].label}
sx={{ float: "right" }}
className="disabled_style"
options={New_Option_Is_archive}
onChange={(event, value) => {
if (value && value.value) {
setp_filtre1_value(value.value);
} else {
setp_filtre1_value("");
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>}
/>
}
</div>}
{p_filtre1 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip01" data-tooltip-html="Ajouter une nouvelle ligne de filtre">
@ -1030,24 +1276,10 @@ const Partner_Client = (props) => {
/>
}
/>}
{/* <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 &&
{String(p_filtre2).length > 3 && String(p_filtre2) !== "archive" &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
@ -1074,6 +1306,30 @@ const Partner_Client = (props) => {
}}
/>}
{String(p_filtre2).length > 3 && String(p_filtre2) === "archive" &&
<Autocomplete
disablePortal
name="filtre2_value"
id="filtre2_value"
value={New_Option_Is_archive.filter((data) => (data).id === String(p_filtre2_value))[0].label}
sx={{ float: "right" }}
className="disabled_style"
options={New_Option_Is_archive}
onChange={(event, value) => {
if (value && value.value) {
setp_filtre2_value(value.value);
} else {
setp_filtre2_value("");
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>}
/>}
</div>
@ -1095,12 +1351,21 @@ const Partner_Client = (props) => {
{<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_With_Filter} ref={myRef_head}>Rechercher
<Button variant="contained" className="bton_enreg"
onClick={(event) => {
Get_List_Partner_Clients_With_Filter();
setis_recherche("1");
}}
ref={myRef_head}>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 variant="contained" className="bton_annule" onClick={(event) => {
clean_all_filters();
setis_recherche("");
}}
>Annuler
</Button>
</div>
@ -1111,13 +1376,13 @@ const Partner_Client = (props) => {
</div>
<div className="div_row" style={{ paddingRight: '10px' }}>
<div style={{ height: 550, width: '100%', paddingRight: '1px' }}>
<div className="div_row session_data" >
<div style={{ height: 650, width: '100%', paddingRight: '1px' }}>
&nbsp;
<Box
sx={{
height: "500px",
height: "600px",
width: '100%',
paddingRight: '1px',
'& .cell--presentiel': {
@ -1152,6 +1417,7 @@ const Partner_Client = (props) => {
>
<DataGrid
disableSelectionOnClick
loading={loading_datagrid}
localeText={frFR.components.MuiDataGrid.defaultProps.localeText}
rows={rows_list_clients.map((item, index) => (
{
@ -1235,8 +1501,101 @@ const Partner_Client = (props) => {
</Box>
<br />
<div className="div_row">
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && selectionModel && selectionModel.length >= 1 &&
<div className="block_en_mass">
<nav >Traitement en masse </nav>
&nbsp;
<Autocomplete
disablePortal
id="combo-box-demo"
className="block_en_mass_select"
fullWidth
options={New_Option}
onChange={(event, value) => {
if (value && value.value) {
if (String(value.value) === "supprimer"
|| String(value.value) === "archive_desarchive") {
setactionmass_ftion_val(value.value);
}
else {
setactionmass_ftion_val();
}
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
{String(props.check_user_acces_right("stagiaire", "write")) === "1" && actionmass_ftion_val && <nav className='block_en_mass_bton_action'>
<Popup
trigger={<Button className="bton_enreg" style={{ "width": "90%" }}>
<FcAcceptDatabase /> Traiter
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
{String(actionmass_ftion_val) === "archive_desarchive" &&
<font> Confirmer la <b> l'archivage / désarchivage </b> en masse pour {selectionModel.length} lignes.
</font>}
{String(actionmass_ftion_val) === "supprimer" &&
<font color="red"> Confirmer la <b> suppression </b> en masse pour {selectionModel.length} lignes.
</font>}
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
actionmass_ftion_Traitemet();
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</nav>
}
</div>}
</div>
<br />
{/* <Button variant="contained" onClick={GetAllClass_new}>Contained</Button>*/}
</div>
</div>
@ -1280,11 +1639,11 @@ const Partner_Client = (props) => {
{String(Edite_Client) === "1" && <div className="div_row" style={{ "paddingRight": "10px" }}>
<div className="titre1"> Detail client / Financeur {Client_email}</div>
<div className="titre1"> Detail client / Financeur <b>{Client_email} </b></div>
<AddParnerClient client_mail={Client_email} close_detail_client={close_detail_client} father_scroll_to_top={father_scroll_to_top}
client_id={selected_id} check_user_acces_right={props.check_user_acces_right}
Get_List_Partner_Clients={Get_List_Partner_Clients}/>
client_id={selected_id} check_user_acces_right={props.check_user_acces_right}
Get_List_Partner_Clients={Get_List_Partner_Clients} />
</div>}

View File

@ -574,6 +574,7 @@ const Partner_Config_Formulaires = (props) => {
const [p_detail_one_from_commentaire, setp_detail_one_from_commentaire] = useState("");
const [p_detail_one_from_default, setp_detail_one_from_default] = useState("");
const [p_detail_one_from_default_bool, setp_detail_one_from_default_bool] = useState(false);
const [p_detail_one_from_list_question, setp_detail_one_from_list_question] = useState([]);
@ -2939,7 +2940,7 @@ const Partner_Config_Formulaires = (props) => {
String(add_new_form) === "1" && <div className="div_row">
<div className="session_data">
Ajouter un nouveau formulaire
<h5 style={{ textAlign: "center", paddingTop: '5px', fontFamily: "DM Sans" }} >Ajouter un nouveau formulaire </h5>
<br />
<div className="session_caract"> Code <br />
@ -3058,8 +3059,11 @@ const Partner_Config_Formulaires = (props) => {
id="detail_config_par_defaut"
// className="disabled_style"
checked={false}
checked={p_detail_one_from_default_bool}
onChange={(e) => {
setp_detail_one_from_default_bool(e.target.checked);
if (e.target.checked) {
setp_detail_one_from_default("1");
} else {
@ -3069,7 +3073,7 @@ const Partner_Config_Formulaires = (props) => {
// style={{ background: '#FFFFFF' }}
/>
</div>
<div className="div_row">
<div className="session_caract"> Message d'introduction <br />

View File

@ -77,7 +77,6 @@ function SurveyDocument() {
var local_node = {}
new_data2[String(obj_name)] = "";
});
settab_variable(new_data2);

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

View File

@ -1,5 +1,5 @@
import Jmjformation_Catalogue_Public from "../components/Jmj_Theme/Jmjformation_Catalogue_Public";
import New_C_Footer_2025_V2 from "../components/footer_automatic_files/Layout";
const jmjformation_catalogue_public = () => {
@ -8,8 +8,7 @@ const jmjformation_catalogue_public = () => {
<div>
<div>
<Jmjformation_Catalogue_Public />
<Jmjformation_Catalogue_Public />
</div>

View File

@ -13,6 +13,23 @@
}
.block_archive {
background-color: #774a10;
width: calc(100% - 20px);
margin-left: 10px;
margin-right: 10px;
border-radius: 5px;
text-align: center;
font-family: DM sans;
color: white;
margin-bottom: 0.5rem;
font-style: italic;
opacity: 80%;
font-weight: 600;
font-size: 14px;
}
@media only screen and (max-width: 600px) {
.div_row {

View File

@ -644,7 +644,7 @@
width: 100%;
border-left: 3mm ridge rgba(211, 220, 50, .6);
float: left;
}
}
.block_en_mass {
width: 100%;

View File

@ -23,6 +23,23 @@
left: 0px;
}
.block_archive {
background-color: #774a10;
width: calc(100% - 20px);
margin-left: 10px;
margin-right: 10px;
border-radius: 5px;
text-align: center;
font-family: DM sans;
color: white;
margin-bottom: 0.5rem;
font-style: italic;
opacity: 80%;
font-weight: 600;
font-size: 14px;
}
.spinner {
width: 20rem;
height: 10rem;

View File

@ -2315,6 +2315,13 @@
}
.jmj_bloc_logo_indic_logo {
width: 100%;
float: left;
text-align: left;
}
.bloc_logo_indic_contact {
width: 100%;
@ -2323,6 +2330,17 @@
}
.jmj_bloc_logo_indic_contact {
width: 100%;
float: right;
text-align: center;
margin-top: 15rem;
text-align: center;
font-family: 'DM Sans';
color: #16274F;
}
.bloc_logo_indic_indic {
width: 100%;
float: left;
@ -2332,6 +2350,16 @@
}
.jmj_bloc_logo_indic_indic {
width: 100%;
float: left;
padding: 10px;
margin-top: 1rem;
margin-bottom: 1rem;
}
.bloc_milieu {
min-height: 5rem;
width: 100%;
@ -2580,12 +2608,11 @@
border: none;
padding-top: 15px;
margin-bottom: 1rem;
min-height: 10rem;
}
.jmj_header_gauche {
width: 100%;
text-align: center;
height: 500px;
display: none;
}
.jmj_header_droite {
@ -2619,11 +2646,12 @@
.jmj_block_milieu_droite {
margin: auto;
width: 100%;
margin-top: 0px;
}
.Partner_Catalog_Background_Header_jmj {
width: 100%;
height: 600px;
max-height: 12rem;
left: 0px;
top: 0px;
z-index: -1;
@ -5726,8 +5754,8 @@
.bloc_logo_indic {
min-height: 5rem;
width: 90%;
margin-left: 5%;
width: 100%;
margin-left: 0%;
float: left;
position: absolute;
top: 1rem;
@ -5740,6 +5768,12 @@
text-align: left;
}
.jmj_bloc_logo_indic_logo {
width: 25%;
float: left;
text-align: left;
}
.bloc_logo_indic_contact {
@ -5748,12 +5782,37 @@
text-align: right;
}
.jmj_bloc_logo_indic_contact {
width: 18%;
float: right;
text-align: right;
margin-top: 15rem;
text-align: center;
font-family: 'DM Sans';
width: 25%;
color: #16274F;
margin-right: 2rem;
}
.bloc_logo_indic_indic {
width: 18%;
float: left;
}
.jmj_bloc_logo_indic_indic {
float: left;
margin-top: 15rem;
text-align: left;
font-family: 'DM Sans';
width: 30%;
margin-left: 2rem;
}
.bloc_milieu {
min-height: 5rem;
@ -5950,7 +6009,7 @@
}
.jmj_header_gauche {
width: 70%;
width: 100%;
float: left;
height: 400px;
}
@ -5959,6 +6018,7 @@
width: 25%;
float: left;
height: 400px;
display: none;
}
.jmj_block_milieu {
@ -5980,14 +6040,13 @@
}
.jmj_block_milieu_gauche {
padding: auto;
width: 100%;
margin-left: auto;
display: none;
}
.jmj_block_milieu_droite {
margin: auto;
width: 100%;
margin-top: 0px;
}
.Partner_Catalog_Background_Header_jmj {
@ -9085,6 +9144,11 @@
text-align: left;
}
.jmj_bloc_logo_indic_logo {
width: 40%;
float: left;
text-align: left;
}
.bloc_logo_indic_contact {
@ -9093,12 +9157,35 @@
text-align: right;
}
.jmj_bloc_logo_indic_contact {
width: 18%;
float: right;
text-align: right;
margin-top: 15rem;
text-align: center;
font-family: 'DM Sans';
width: 25%;
color: #16274F;
}
.bloc_logo_indic_indic {
width: 18%;
float: left;
}
.jmj_bloc_logo_indic_indic {
width: 18%;
float: left;
margin-top: 15rem;
text-align: left;
font-family: 'DM Sans';
width: 25%;
}
.bloc_milieu {
min-height: 5rem;
@ -9319,7 +9406,7 @@
}
.jmj_header_gauche {
width: 70%;
width: 100%;
float: left;
height: 400px;
}
@ -9328,6 +9415,7 @@
width: 25%;
float: left;
height: 400px;
display: none;
}
.jmj_block_milieu {
@ -9360,6 +9448,7 @@
margin: auto;
width: 70%;
min-height: 100vh;
margin-top: 0px;
}
@ -12462,6 +12551,12 @@
text-align: left;
}
.jmj_bloc_logo_indic_logo {
width: 40%;
float: left;
text-align: left;
}
.bloc_logo_indic_contact {
@ -12470,12 +12565,37 @@
text-align: right;
}
.jmj_bloc_logo_indic_contact {
width: 18%;
float: right;
text-align: right;
margin-top: 15rem;
text-align: center;
font-family: 'DM Sans';
width: 25%;
color: #16274F;
}
.bloc_logo_indic_indic {
width: 18%;
float: left;
}
.jmj_bloc_logo_indic_indic {
width: 18%;
float: left;
margin-top: 15rem;
text-align: left;
font-family: 'DM Sans';
width: 25%;
}
.bloc_milieu {
min-height: 5rem;
width: 90%;
@ -12718,7 +12838,7 @@
}
.jmj_header_gauche {
width: 70%;
width: 100%;
float: left;
height: 400px;
}
@ -12727,6 +12847,7 @@
width: 25%;
float: left;
height: 400px;
display: none;
}
.jmj_block_milieu {
@ -15899,6 +16020,18 @@
text-align: right;
}
.jmj_bloc_logo_indic_contact {
width: 18%;
float: right;
text-align: right;
margin-top: 15rem;
text-align: center;
font-family: 'DM Sans';
width: 25%;
color: #16274F;
}
.bloc_logo_indic_indic {
width: 18%;
@ -15906,6 +16039,18 @@
}
.jmj_bloc_logo_indic_indic {
width: 18%;
float: left;
margin-top: 15rem;
text-align: left;
font-family: 'DM Sans';
width: 25%;
}
.bloc_milieu {
min-height: 5rem;
width: 90%;
@ -16151,7 +16296,7 @@
}
.jmj_header_gauche {
width: 70%;
width: 100%;
float: left;
height: 400px;
}
@ -16160,6 +16305,7 @@
width: 25%;
float: left;
height: 400px;
display: none;
}
.jmj_block_milieu {
@ -16214,6 +16360,36 @@
float: right;
text-align: right;
}
.jmj_bloc_logo_indic_logo {
width: 40%;
float: left;
text-align: left;
}
.jmj_bloc_logo_indic_indic {
width: 18%;
float: left;
margin-top: 15rem;
text-align: left;
font-family: 'DM Sans';
width: 25%;
}
.jmj_bloc_logo_indic_contact {
width: 18%;
float: right;
text-align: right;
margin-top: 15rem;
text-align: center;
font-family: 'DM Sans';
width: 25%;
color: #16274F;
}
}
// end media

View File

@ -176,7 +176,7 @@
border-radius: 10px;
border: 1px solid;
}
.training_caract {
width: 100%;
@ -1625,6 +1625,26 @@
font-weight: normal;
}
.block_en_mass {
width: 50%;
float: left;
margin-bottom: 1rem;
margin-left: 15px;
}
.block_en_mass_select {
width: 45%;
float: left;
margin-bottom: 1rem;
}
.block_en_mass_bton_action {
width: 45%;
float: left;
margin-bottom: 1rem;
padding-top: 0.5rem !important;
}
}
@media only screen and (min-width: 1200px) {
@ -1846,6 +1866,26 @@
margin-left: 10rem;
}
.block_en_mass {
width: 50%;
float: left;
margin-bottom: 1rem;
margin-left: 15px;
}
.block_en_mass_select {
width: 45%;
float: left;
margin-bottom: 1rem;
}
.block_en_mass_bton_action {
width: 45%;
float: left;
margin-bottom: 1rem;
padding-top: 0.5rem !important;
}
.action_mass {
border-radius: 5px;
@ -1858,12 +1898,6 @@
.block_en_mass {
width: 50%;
float: left;
margin-bottom: 1rem;
}
.session_open_close {
cursor: pointer;
text-align: right;
@ -2172,6 +2206,7 @@
}
}
// end media