14/06/2026 - 12h

branche_01062025
Cherif 2026-06-14 11:55:42 +02:00
parent 5053d6b951
commit 22eaf4528f
15 changed files with 1246 additions and 319 deletions

View File

@ -11704,7 +11704,9 @@ const AddClassManual = (props) => {
id="competence_nom"
name="competence_nom"
fullWidth
sx={{
backgroundColor: "#FFF",
}}
options={New_Getall_Employee_Statistic_Question_List_result}
value={New_Getall_Employee_Statistic_Question_List_result.filter((data) => (data)._id === String(selected_statistic_question_id))[0].label}

View File

@ -990,14 +990,7 @@ const AddParnerClient = (props) => {
})
}
const [New_Getall_Training_Employee_No_Filter_result, setNew_Getall_Training_Employee_No_Filter_result] = useState([{
"_id": "",
"id": "",
"label": "",
"nom": "",
"prenom": "",
"ismanager": ""
}]);
const [New_Getall_Training_Employee_No_Filter_result, setNew_Getall_Training_Employee_No_Filter_result] = useState([]);
const [Getall_Training_Employee_No_Filter_api, setGetall_Training_Employee_No_Filter_api] = useState();
const [Getall_Training_Employee_No_Filter_message, setGetall_Training_Employee_No_Filter_message] = useState();
@ -4088,8 +4081,8 @@ const AddParnerClient = (props) => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Get_All_Paiement_of_Client res.data.status = " + res.data.status);
console.log(" In Get_All_Paiement_of_Client res.data.message r_class = " + res.data.message);
console.log(" In Get_All_Paiement_of_Client res.data.total_payed_amount r_class = " + res.data.total_payed_amount);
// console.log(" In Get_All_Paiement_of_Client res.data.message r_class = " + res.data.message);
// console.log(" In Get_All_Paiement_of_Client res.data.total_payed_amount r_class = " + res.data.total_payed_amount);
setGet_All_Paiement_of_Client_api("true");
setGet_All_Paiement_of_Client_result(res.data.message);
setNew_Get_All_Paiement_Total_Payed(res.data.total_payed_amount);
@ -7910,7 +7903,7 @@ const AddParnerClient = (props) => {
<div style={{ width: '100%', float: 'left' }}>
<div className="Grid_2_col_sub_colone_header">
Rôle principal exist
Rôle principal
</div>
<div className="div_row" style={{ paddingBottom: '0px' }}> &nbsp;</div>

View File

@ -8723,11 +8723,11 @@ const Apprenant = (props) => {
<div className="session_data" ref={myRef_head} id="myRef_head">
<div style={{ "border": "None" }}>
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
<div style={{ height: 850, width: '100%', paddingRight: '5px' }}>
&nbsp;
<Box
sx={{
height: 500,
height: 800,
width: '100%',
paddingRight: '1px',
'& .cell--presentiel': {
@ -8811,7 +8811,7 @@ const Apprenant = (props) => {
))}
columns={columns}
pageSize={10}
pageSize={20}
className="datagridclass"
onRowDoubleClick={(newSelectionModel) => {
@ -8853,7 +8853,7 @@ const Apprenant = (props) => {
rowsPerPageOptions={[10]}
rowsPerPageOptions={[20]}
disableSelectionOnClick
/* components={{
Toolbar: GridToolbar,
@ -10151,7 +10151,7 @@ const Apprenant = (props) => {
}}
disabled={false}
className="disabled_style enable_style"
value={p_detail_nom}
value={p_detail_nom_fille}
onChange={(e) => {
setp_detail_nom_fille(e.target.value);
setapprenant_data_changed("1");
@ -11192,11 +11192,11 @@ const Apprenant = (props) => {
<div className="session_data" >
<div style={{ "border": "None" }}>
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
<div style={{ height: 850, width: '100%', paddingRight: '5px' }}>
&nbsp;
<Box
sx={{
height: 500,
height: 800,
width: '100%',
paddingRight: '1px',
@ -11247,7 +11247,7 @@ const Apprenant = (props) => {
))}
columns={columns_suivi_pedagogique}
pageSize={10}
pageSize={20}
className="datagridclass"
onRowDoubleClick={(newSelectionModel) => {
@ -11264,7 +11264,7 @@ const Apprenant = (props) => {
rowsPerPageOptions={[10]}
rowsPerPageOptions={[20]}
disableSelectionOnClick
components={{
Toolbar: GridToolbar,

View File

@ -9170,6 +9170,9 @@ const Autre_RH = (props) => {
id="combo-box-demo"
className="block_en_mass_select"
fullWidth
sx={{
backgroundColor: "#FFF",
}}
options={New_Option}
onChange={(event, value) => {
if (value && value.value) {
@ -12029,6 +12032,9 @@ const Autre_RH = (props) => {
id="combo-box-demo"
className="block_en_mass_select"
fullWidth
sx={{
backgroundColor: "#FFF",
}}
options={New_Option_Evaluation_Masse}
onChange={(event, value) => {
if (value && value.value) {
@ -12811,7 +12817,9 @@ const Autre_RH = (props) => {
name="competence_nom"
fullWidth
sx={{
backgroundColor: "#FFF",
}}
options={New_Getall_Employee_Statistic_Question_List_result}
value={New_Getall_Employee_Statistic_Question_List_result.filter((data) => (data)._id === String(selected_statistic_question_id))[0].label}

View File

@ -2424,19 +2424,19 @@ const Config_Documents = (props) => {
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
@ -2538,19 +2538,19 @@ const Config_Documents = (props) => {
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
@ -2661,11 +2661,11 @@ const Config_Documents = (props) => {
<div className="session_data">
<div style={{ "border": "None" }}>
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
<div style={{ height: 850, width: '100%', paddingRight: '5px' }}>
&nbsp;
<Box
sx={{
height: 500,
height: 800,
width: '100%',
paddingRight: '1px',
@ -2682,10 +2682,10 @@ const Config_Documents = (props) => {
"& .MuiDataGrid-columnHeaders": {
backgroundColor: "#dfe8f2",
color: "#0a2a4d",
fontSize: '14px',
fontFamily:'DM Sans',
backgroundColor: "#dfe8f2",
color: "#0a2a4d",
fontSize: '14px',
fontFamily: 'DM Sans',
},
'& .line--statut--selected': {
@ -2738,7 +2738,7 @@ const Config_Documents = (props) => {
))}
columns={columns}
pageSize={10}
pageSize={20}
className="datagridclass"
onRowDoubleClick={(newSelectionModel) => {
@ -2748,7 +2748,7 @@ const Config_Documents = (props) => {
}}
rowsPerPageOptions={[10]}
rowsPerPageOptions={[20]}
//disableSelectionOnClick
components={{
Toolbar: GridToolbar,
@ -3151,8 +3151,8 @@ const Config_Documents = (props) => {
height: 700,
menubar: true,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],
@ -3183,8 +3183,8 @@ const Config_Documents = (props) => {
menubar: true,
readonly: 1,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],
@ -3240,8 +3240,8 @@ const Config_Documents = (props) => {
height: 700,
menubar: true,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],
@ -3278,8 +3278,8 @@ const Config_Documents = (props) => {
height: 700,
menubar: true,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],
@ -3406,19 +3406,20 @@ const Config_Documents = (props) => {
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
sx={{
background: '#FFF',
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
@ -3633,8 +3634,8 @@ const Config_Documents = (props) => {
height: 700,
menubar: true,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],
@ -3675,8 +3676,8 @@ const Config_Documents = (props) => {
height: 700,
menubar: true,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],

View File

@ -31,7 +31,7 @@ import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io";
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 Checkbox from '@mui/material/Checkbox';
import Autocomplete from '@mui/material/Autocomplete';
import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
@ -137,66 +137,66 @@ const Config_Documents_Super_Admin = (props) => {
);
}
},*/
/* {
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<Popup
trigger={<Button
onClick={(event) => {
// handleClick_delete(event, cellValues);
}}
>
<CiTrash />
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, le document sera <i><font color="red"> définitivement supprimé</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
handleClick_delete(event, cellValues);
//console.log('modal closed ');
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
);
}
}*/
/* {
field: "delete", headerName: 'Supprimer',
renderCell: (cellValues) => {
return (
<Popup
trigger={<Button
onClick={(event) => {
// handleClick_delete(event, cellValues);
}}
>
<CiTrash />
</Button>}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, le document sera <i><font color="red"> définitivement supprimé</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
handleClick_delete(event, cellValues);
//console.log('modal closed ');
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup_annuler"
onClick={() => {
console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
);
}
}*/
]
@ -2056,7 +2056,7 @@ const Config_Documents_Super_Admin = (props) => {
if (file_size > 10000000) {
alert("Le fichier ne doit pas depasser un 1 Méga octets");
return;
}
@ -2156,7 +2156,7 @@ const Config_Documents_Super_Admin = (props) => {
>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_1_message}
@ -2176,7 +2176,7 @@ const Config_Documents_Super_Admin = (props) => {
className="displaypartnersession"
>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily:'DM Sans'}} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogTitle style={{ cursor: 'move', background: '#fff', fontFamily: 'DM Sans' }} id="draggable-dialog-title"> MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<div className="session_caract_Dialog" > Type Document
@ -2273,7 +2273,7 @@ const Config_Documents_Super_Admin = (props) => {
</Dialog>
<h3 style={{ fontFamily:'DM Sans' }}> Configuration documents (Admin) </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Configuration documents (Admin) </h3>
<div className="div_row">
<div className="titre1"> Utilisez les filtres !</div>
<div className="div_row" style={{ "marginBottom": "5px" }}>
@ -2295,19 +2295,19 @@ const Config_Documents_Super_Admin = (props) => {
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
@ -2409,19 +2409,19 @@ const Config_Documents_Super_Admin = (props) => {
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
@ -2532,11 +2532,11 @@ const Config_Documents_Super_Admin = (props) => {
<div className="session_data">
<div style={{ "border": "None" }}>
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
<div style={{ height: 850, width: '100%', paddingRight: '5px' }}>
&nbsp;
<Box
sx={{
height: 500,
height: 800,
width: '100%',
paddingRight: '1px',
@ -2553,10 +2553,10 @@ const Config_Documents_Super_Admin = (props) => {
"& .MuiDataGrid-columnHeaders": {
backgroundColor: "#dfe8f2",
color: "#0a2a4d",
fontSize: '14px',
fontFamily:'DM Sans',
backgroundColor: "#dfe8f2",
color: "#0a2a4d",
fontSize: '14px',
fontFamily: 'DM Sans',
},
'& .line--statut--selected': {
@ -2610,7 +2610,7 @@ const Config_Documents_Super_Admin = (props) => {
))}
columns={columns}
pageSize={10}
pageSize={20}
className="datagridclass"
onRowDoubleClick={(newSelectionModel) => {
@ -2620,7 +2620,7 @@ const Config_Documents_Super_Admin = (props) => {
}}
rowsPerPageOptions={[10]}
rowsPerPageOptions={[20]}
//disableSelectionOnClick
components={{
Toolbar: GridToolbar,
@ -2686,7 +2686,7 @@ const Config_Documents_Super_Admin = (props) => {
{String(display_detail_document) === "1" && String(add_one_document) !== "1" && <div className="div_row">
<h3 style={{ fontFamily:'DM Sans' }}> Détail document <i> {p_detail_nom} </i></h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Détail document <i> {p_detail_nom} </i></h3>
<div className="div_row">
@ -2752,11 +2752,11 @@ const Config_Documents_Super_Admin = (props) => {
{String(partner_document_data_edit_mode) !== "1" && String(p_detail_type_doc) === "email" && <div className="div_row_gauche texte_area_filter" >
Joindre en PDF <br />
<Checkbox
name="document_join_pdf"
className="disabled_style"
checked={p_detail_joint_pdf}
checked={p_detail_joint_pdf}
/>
</div>}
@ -2798,7 +2798,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 />
@ -3024,8 +3024,8 @@ const Config_Documents_Super_Admin = (props) => {
height: 700,
menubar: true,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],
@ -3056,8 +3056,8 @@ const Config_Documents_Super_Admin = (props) => {
menubar: true,
readonly: 1,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],
@ -3079,7 +3079,7 @@ const Config_Documents_Super_Admin = (props) => {
<div className="div_row" >
{p_detail_joint_pdf === true && p_detail_type_doc === "email" && <div className="div_row" style={{ "border": "None", "width": "98%", "marginLeft": "1%", "marginRight": "1%", "float": "left" }}>
{p_detail_joint_pdf === true && p_detail_type_doc === "email" && <div className="div_row" style={{ "border": "None", "width": "98%", "marginLeft": "1%", "marginRight": "1%", "float": "left" }}>
<Button variant="outlined"
onClick={(event) => {
setdocument_principal_ou_corp_mail("1");
@ -3093,7 +3093,7 @@ const Config_Documents_Super_Admin = (props) => {
</div>}
{p_detail_joint_pdf === true && p_detail_type_doc === "email" && String(document_principal_ou_corp_mail) === "2" &&
{p_detail_joint_pdf === true && p_detail_type_doc === "email" && String(document_principal_ou_corp_mail) === "2" &&
<div style={{ "width": "98%", "marginLeft": "1%", "marginRight": "1%", "float": "left" }}>
<div className="titre_training_text"> Modifier le Corps du mail </div>
@ -3113,8 +3113,8 @@ const Config_Documents_Super_Admin = (props) => {
height: 700,
menubar: true,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],
@ -3151,8 +3151,8 @@ const Config_Documents_Super_Admin = (props) => {
height: 700,
menubar: true,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],
@ -3198,7 +3198,7 @@ const Config_Documents_Super_Admin = (props) => {
{String(partner_document_data_edit_mode) !== "1" && <div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
&nbsp;
&nbsp;
</div>}
@ -3216,7 +3216,7 @@ const Config_Documents_Super_Admin = (props) => {
</div>}
{String(display_detail_document) !== "1" && String(add_one_document) === "1" && <div className="div_row">
<h3 style={{ fontFamily:'DM Sans' }}> Personnaliser un nouveau document </h3>
<h3 style={{ fontFamily: 'DM Sans' }}> Personnaliser un nouveau document </h3>
<div className="div_row" style={{ "textAlign": "left" }}>
<div className="div_row_gauche"> Choisir le document à ajouter <br />
@ -3238,19 +3238,20 @@ const Config_Documents_Super_Admin = (props) => {
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
sx={{
background: '#FFF',
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
@ -3332,7 +3333,7 @@ const Config_Documents_Super_Admin = (props) => {
{String(p_one_detail_type_doc) === "email" && <div className="div_row_gauche texte_area_filter" >
Joindre en PDF <br />
<Checkbox
<Checkbox
name="document_join_pdf"
// className="disabled_style"
checked={p_detail_joint_pdf}
@ -3425,7 +3426,7 @@ const Config_Documents_Super_Admin = (props) => {
<div className="div_row" >
{p_detail_joint_pdf === true && p_detail_type_doc === "email" && <div className="div_row" style={{ "border": "None", "width": "98%", "marginLeft": "1%", "marginRight": "1%", "float": "left" }}>
{p_detail_joint_pdf === true && p_detail_type_doc === "email" && <div className="div_row" style={{ "border": "None", "width": "98%", "marginLeft": "1%", "marginRight": "1%", "float": "left" }}>
<Button variant="outlined"
onClick={(event) => {
setdocument_principal_ou_corp_mail("1");
@ -3439,7 +3440,7 @@ const Config_Documents_Super_Admin = (props) => {
</div>}
{p_detail_joint_pdf === true && p_detail_type_doc === "email" && String(document_principal_ou_corp_mail) === "2" &&
{p_detail_joint_pdf === true && p_detail_type_doc === "email" && String(document_principal_ou_corp_mail) === "2" &&
<div style={{ "width": "98%", "marginLeft": "1%", "marginRight": "1%", "float": "left" }}>
<div className="titre_training_text"> Créer le Corps du mail </div>
@ -3465,8 +3466,8 @@ const Config_Documents_Super_Admin = (props) => {
height: 700,
menubar: true,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],
@ -3507,8 +3508,8 @@ const Config_Documents_Super_Admin = (props) => {
height: 700,
menubar: true,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace',
'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount',
'lists', 'link', 'image', 'charmap', 'preview', 'anchor', 'searchreplace', 'visualblocks',
],

View File

@ -10187,11 +10187,11 @@ const Employes = (props) => {
<div className="session_data">
<div style={{ "border": "None" }}>
<div style={{ height: 550, width: '100%', paddingRight: '5px' }}>
<div style={{ height: 850, width: '100%', paddingRight: '5px' }}>
&nbsp;
<Box
sx={{
height: 500,
height: 800,
width: '100%',
paddingRight: '1px',
fontFamily: "Plus Jakarta Sans, sans-serif", color: '#EEF1F6',
@ -10335,7 +10335,7 @@ const Employes = (props) => {
}}
rowsPerPageOptions={[10]}
rowsPerPageOptions={[15]}
disableSelectionOnClick
components={{
Toolbar: GridToolbar,
@ -10420,6 +10420,9 @@ const Employes = (props) => {
id="combo-box-demo"
className="block_en_mass_select"
fullWidth
sx={{
backgroundColor: "#FFF",
}}
options={New_Option}
onChange={(event, value) => {
if (value && value.value) {
@ -13836,6 +13839,9 @@ const Employes = (props) => {
id="combo-box-demo"
className="block_en_mass_select"
fullWidth
sx={{
backgroundColor: "#FFF",
}}
options={New_Option_Evaluation_Masse}
onChange={(event, value) => {
if (value && value.value) {
@ -14611,7 +14617,9 @@ const Employes = (props) => {
name="competence_nom"
fullWidth
sx={{
backgroundColor: "#FFF",
}}
options={New_Getall_Employee_Statistic_Question_List_result}
value={New_Getall_Employee_Statistic_Question_List_result.filter((data) => (data)._id === String(selected_statistic_question_id))[0].label}

View File

@ -21,7 +21,14 @@ import { BsCheck2Circle } from "react-icons/bs";
import Box from '@mui/material/Box';
import { FlagTriangleRight } from 'lucide-react';
import { CiBoxList } from "react-icons/ci";
import {
Clock,
User,
UserCheck,
UserX,
Hourglass,
MinusCircle,
} from "lucide-react";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
@ -583,7 +590,7 @@ const Module_Absence = (props) => {
//console.log(eventInfo);
return (
<>
<div style={{ width: '100%', float: 'left', height: '30px' }}> <div style={{ width: '65%', float: 'left' }}> <b> {eventInfo.timeText}</b> </div>
{/*<> <div style={{ width: '100%', float: 'left', height: '30px' }}> <div style={{ width: '65%', float: 'left' }}> <b> {eventInfo.timeText}</b> </div>
<div style={{ width: '30%', float: 'right', textAlign: 'right', paddingLeft: '10px' }}>
{eventInfo.event.extendedProps.justified && eventInfo.event.extendedProps.justified === "true" &&
<nav style={{ background: '#c2f0bc', borderRadius: '20rem', textAlign: 'center', height: '20px', width: '20px', width: '20px' }}> <FlagTriangleRight size={14} style={{ color: 'green' }} /> </nav>}
@ -593,11 +600,73 @@ const Module_Absence = (props) => {
</div>
</div>
{eventInfo.event.title && <> <i>{eventInfo.event.title}</i> <br /></>}
{eventInfo.event.extendedProps.code_session && <> <i>{eventInfo.event.extendedProps.code_session}</i> <br /></>}
{eventInfo.event.title && <> <i>{eventInfo.event.title}</i> <br /></>}
{eventInfo.event.extendedProps.code_session && <> <i>{eventInfo.event.extendedProps.code_session}</i> <br /></>}
</>*/}
{eventInfo.event.extendedProps.justified && eventInfo.event.extendedProps.justified === "true" &&
<div className={"calendar-slot slot-green"} style={{ height: '100%' }}>
<div className="slot-left-line" />
<div className="slot-header">
<div className="slot-time">
<Clock size={18} strokeWidth={2.5} />
<span>{eventInfo.timeText}</span>
</div>
</div>
<div className="slot-content">
<div className="slot-title">{eventInfo.event.title}</div>
<div className="slot-subtitle">{eventInfo.event.extendedProps.code_session}</div>
</div>
<div className={"absence-badge badge-green"}>
<div className="absence-icon">
<UserCheck size={30} strokeWidth={2.6} />
</div>
<div className="absence-text">
<div className="absence-label">Justifiée</div>
</div>
</div>
</div>}
{!eventInfo.event.extendedProps.justified || eventInfo.event.extendedProps.justified !== "true" &&
<div className={"calendar-slot slot-orange"} style={{ height: '100%' }}>
<div className="slot-left-line" />
<div className="slot-header">
<div className="slot-time">
<UserX size={18} strokeWidth={2.5} />
<span>{eventInfo.timeText}</span>
</div>
</div>
<div className="slot-content">
<div className="slot-title">{eventInfo.event.title}</div>
<div className="slot-subtitle">{eventInfo.event.extendedProps.code_session}</div>
</div>
<div className={"absence-badge badge-orange"}>
<div className="absence-icon">
<UserX size={30} strokeWidth={2.6} />
</div>
<div className="absence-text">
<div className="absence-label">Non justifiée</div>
</div>
</div>
</div>}
</>
)
};
@ -1677,6 +1746,7 @@ const Module_Absence = (props) => {
&nbsp;
<FullCalendar
height={800}
locales={allLocales}
locale={'fr'}
editable
@ -1897,4 +1967,292 @@ width: 100%;
font-size: 13px;
color: #64748b;
}
.calendar-slot {
position: relative;
width: 100%;
border-radius: 14px;
padding: 8px 8px;
overflow: hidden;
color: #ffffff;
font-family: "DM Sans", Arial, Helvetica, sans-serif;
box-shadow: 0 18px 35px rgba(15, 23, 42, 0.16);
box-sizing: border-box;
}
.slot-left-line {
position: absolute;
left: 0;
top: 0;
width: 10px;
height: 100%;
background: rgba(0, 0, 0, 0.22);
}
.slot-blue {
background: linear-gradient(135deg, #3d8df2 0%, #216dc7 100%);
}
.slot-green {
background: linear-gradient(135deg, #2fc96b 0%, #16a34a 100%);
}
.slot-orange {
background: linear-gradient(135deg, #ffb31a 0%, #fb8c00 100%);
}
.slot-gray {
background: linear-gradient(135deg, #9ca3af 0%, #64748b 100%);
}
.slot-header {
display: flex;
justify-content: space-between;
align-items: center;
gap: 1px;
margin-bottom: 2px;
}
.slot-time {
display: flex;
align-items: center;
gap: 10px;
font-size: 14px;
font-weight: 800;
letter-spacing: -0.4px;
}
.slot-mode {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 14px;
border-radius: 10px;
font-size: 12px;
font-weight: 800;
background: rgba(15, 23, 42, 0.14);
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
white-space: nowrap;
}
.slot-content {
margin-bottom: 16px;
}
.slot-title {
font-size: 12px;
line-height: 15px;
font-weight: 850;
letter-spacing: -0.6px;
}
.slot-subtitle {
margin-top: 2px;
font-size: 12px;
line-height: 26px;
font-weight: 600;
opacity: 0.92;
}
.absence-badge {
display: flex;
align-items: center;
gap: 18px;
padding: 6px 10px;
border-radius: 10px;
background: #ffffff;
box-sizing: border-box;
box-shadow: 0 10px 24px rgba(15, 23, 42, 0.12);
}
.absence-icon {
width: 18px;
height: 18px;
border-radius: 999px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.absence-text {
min-width: 0;
}
.absence-label {
font-size: 12px;
line-height: 15px;
font-weight: 850;
}
.absence-description {
margin-top: 6px;
font-size: 12px;
line-height: 22px;
font-weight: 500;
color: #64748b;
}
.badge-green {
background: linear-gradient(180deg, #f0fdf4 0%, #ffffff 100%);
border-left: 3px solid #16a34a;
}
.badge-green .absence-icon,
.badge-green .absence-label {
color: #15803d;
}
.badge-red {
background: linear-gradient(180deg, #fff7f5 0%, #ffffff 100%);
border-left: 3px solid #ef3b2d;
}
.badge-red .absence-icon,
.badge-red .absence-label {
color: #dc2626;
}
.badge-orange {
background: linear-gradient(180deg, #fff7ed 0%, #ffffff 100%);
border-left: 3px solid #f59e0b;
}
.badge-orange .absence-icon,
.badge-orange .absence-label {
color: #d97706;
}
.badge-gray {
background: linear-gradient(180deg, #f8fafc 0%, #ffffff 100%);
border-left: 3px solid #64748b;
}
.badge-gray .absence-icon,
.badge-gray .absence-label {
color: #64748b;
}
.compact-slot {
position: relative;
width: 100%;
min-height: 74px;
padding: 8px 9px;
border-radius: 8px;
color: #ffffff;
font-family: "DM Sans", Arial, Helvetica, sans-serif;
overflow: hidden;
box-sizing: border-box;
}
.compact-top {
display: flex;
align-items: center;
justify-content: space-between;
gap: 6px;
margin-bottom: 8px;
font-size: 12px;
font-weight: 850;
}
.compact-title {
font-size: 12px;
line-height: 15px;
font-weight: 750;
}
.compact-status {
display: inline-flex;
align-items: center;
gap: 4px;
max-width: 128px;
padding: 3px 6px;
border-radius: 999px;
font-size: 10px;
font-weight: 850;
background: #ffffff;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.compact-status span {
overflow: hidden;
text-overflow: ellipsis;
}
.compact-status.badge-green {
color: #15803d;
border-left: none;
}
.compact-status.badge-red {
color: #dc2626;
border-left: none;
}
.compact-status.badge-orange {
color: #d97706;
border-left: none;
}
.compact-status.badge-gray {
color: #64748b;
border-left: none;
}
@media (max-width: 768px) {
.calendar-slot {
min-height: 180px;
padding: 18px 16px;
}
.slot-time {
font-size: 12px;
}
.slot-mode {
font-size: 12px;
padding: 7px 10px;
}
.slot-title {
font-size: 14px;
line-height: 25px;
}
.slot-subtitle {
font-size: 12px;
line-height: 21px;
}
.absence-badge {
gap: 12px;
padding: 12px 14px;
}
.absence-icon {
width: 12px;
height: 12px;
}
.absence-label {
font-size: 12px;
line-height: 21px;
}
.absence-description {
font-size: 12px;
line-height: 18px;
}
}
.fc-v-event {
display: block;
background: #FFF;
border: none;
}
`;

View File

@ -21,7 +21,14 @@ import moment from "moment";
import Box from '@mui/material/Box';
import { CiBoxList } from "react-icons/ci";
import {
Clock,
User,
UserCheck,
UserX,
Hourglass,
MinusCircle,
} from "lucide-react";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
@ -342,6 +349,7 @@ const Module_ENT_Absence = (props) => {
const stored_cookie = getCookie('tokenmysych');
form.append("token", stored_cookie);
form.append("apprenant_id", props.apprenant_id);
form.append("inscription_id", props.inscription_id);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Ent_Student_Absence/";
@ -427,6 +435,7 @@ const Module_ENT_Absence = (props) => {
const stored_cookie = getCookie('tokenmysych');
form.append("token", stored_cookie);
form.append("apprenant_id", props.apprenant_id);
form.append("inscription_id", props.inscription_id);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Ent_Student_total_Heure_Absence/";
@ -705,7 +714,7 @@ const Module_ENT_Absence = (props) => {
//console.log(eventInfo);
return (
<>
<div style={{ width: '100%', float: 'left', height: '30px' }}> <div style={{ width: '65%', float: 'left' }}> <b> {eventInfo.timeText}</b> </div>
{/*<> <div style={{ width: '100%', float: 'left', height: '30px' }}> <div style={{ width: '65%', float: 'left' }}> <b> {eventInfo.timeText}</b> </div>
<div style={{ width: '30%', float: 'right', textAlign: 'right', paddingLeft: '10px' }}>
{eventInfo.event.extendedProps.justified && eventInfo.event.extendedProps.justified === "true" &&
<nav style={{ background: '#c2f0bc', borderRadius: '20rem', textAlign: 'center', height: '20px', width: '20px', width: '20px' }}> <FlagTriangleRight size={14} style={{ color: 'green' }} /> </nav>}
@ -716,9 +725,66 @@ const Module_ENT_Absence = (props) => {
</div>
{eventInfo.event.title && <> <i>{eventInfo.event.title}</i> <br /></>}
</>*/}
{eventInfo.event.extendedProps.justified && eventInfo.event.extendedProps.justified === "true" &&
<div className={"calendar-slot slot-green"} style={{ height: '100%' }}>
<div className="slot-left-line" />
<div className="slot-header">
<div className="slot-time">
<Clock size={18} strokeWidth={2.5} />
<span>{eventInfo.timeText}</span>
</div>
</div>
<div className="slot-content">
<div className="slot-title">{eventInfo.event.title}</div>
<div className="slot-subtitle">{eventInfo.event.extendedProps.code_session}</div>
</div>
<div className={"absence-badge badge-green"}>
<div className="absence-icon">
<UserCheck size={30} strokeWidth={2.6} />
</div>
<div className="absence-text">
<div className="absence-label">Justifiée</div>
</div>
</div>
</div>}
{!eventInfo.event.extendedProps.justified || eventInfo.event.extendedProps.justified !== "true" &&
<div className={"calendar-slot slot-orange"} style={{ height: '100%' }}>
<div className="slot-left-line" />
<div className="slot-header">
<div className="slot-time">
<UserX size={18} strokeWidth={2.5} />
<span>{eventInfo.timeText}</span>
</div>
</div>
<div className="slot-content">
<div className="slot-title">{eventInfo.event.title}</div>
<div className="slot-subtitle">{eventInfo.event.extendedProps.code_session}</div>
</div>
<div className={"absence-badge badge-orange"}>
<div className="absence-icon">
<UserX size={30} strokeWidth={2.6} />
</div>
<div className="absence-text">
<div className="absence-label">Non justifiée</div>
</div>
</div>
</div>}
</>
)
@ -923,7 +989,7 @@ const Module_ENT_Absence = (props) => {
useEffect(() => {
console.log(" INSCRIT ID = ", props.inscription_id);
// Get_Connected_User_List_Agenda_Events();
//Get_Partner_Debut_Fin_Journee();
Get_ENT_Apprenant_Absence();
@ -1224,32 +1290,8 @@ const Module_ENT_Absence = (props) => {
<nav style={{ "float": "left", "width": "30%", "paddingTop": "15px" }}> Type </nav>
<nav style={{ "float": "right", "width": "65%" }}>
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_type"
id="event_dialog_type"
select
fullWidth
value={p_detail_event_type}
onChange={(e) => {
if (String(props.write_access) === "1") {
setp_detail_event_type(e.target.value);
}
}
}
>
<MenuItem value="absence" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Absence &nbsp;&nbsp;</MenuItem>
<MenuItem value="planning" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Planning &nbsp;</MenuItem>
<MenuItem value="autre" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Autre &nbsp;</MenuItem>
</TextField>
<nav style={{ "float": "right", "width": "65%", "paddingTop": "15px" }}>
Absence
</nav>
</div>
@ -1258,14 +1300,7 @@ const Module_ENT_Absence = (props) => {
<nav style={{ "float": "left", "width": "30%", "paddingTop": "15px" }}> Justifié ? </nav>
<nav style={{ "float": "right", "width": "50%" }}
onClick={(e) => {
if (p_detail_justified === true)
setp_detail_justified(false);
else
setp_detail_justified(true);
}
}
disabled={true}
id="toggleSwitchNav" name="toggleSwitchNav">
<ToggleSwitch_v2_mysy id="toggleSwitch" name="toggleSwitch" checked={p_detail_justified}
@ -1444,7 +1479,7 @@ const Module_ENT_Absence = (props) => {
</Dialog>
{local_heure_non_justifie && local_heure_non_justifie.length > 0 && <h3 style={{ fontFamily: 'DM Sans', fontSize: '26px', width: '100%', textAlign: "center" }}> Absences - {Get_ENT_Apprenant_Total_Heure_Absence_result &&
<font style={{ "color": "orange", "textAlign": "center" }}>
@ -1469,6 +1504,7 @@ const Module_ENT_Absence = (props) => {
<div className="bloc_planning" style={{ fontSize: '12px' }}>
<FullCalendar
height={800}
locales={allLocales}
locale={'fr'}
@ -1673,5 +1709,309 @@ width: 100%;
}
.fc-event-main{
word-wrap: break-word;
}
.fc .fc-timegrid-slot {
height: 35px !important;
}
.fc .fc-timegrid-slot-label-cushion {
font-size: 13px;
font-weight: 700;
color: #475569;
}
.fc .fc-timegrid-axis-cushion {
font-size: 13px;
color: #64748b;
}
.calendar-slot {
position: relative;
width: 100%;
border-radius: 14px;
padding: 8px 8px;
overflow: hidden;
color: #ffffff;
font-family: "DM Sans", Arial, Helvetica, sans-serif;
box-shadow: 0 18px 35px rgba(15, 23, 42, 0.16);
box-sizing: border-box;
}
.slot-left-line {
position: absolute;
left: 0;
top: 0;
width: 10px;
height: 100%;
background: rgba(0, 0, 0, 0.22);
}
.slot-blue {
background: linear-gradient(135deg, #3d8df2 0%, #216dc7 100%);
}
.slot-green {
background: linear-gradient(135deg, #2fc96b 0%, #16a34a 100%);
}
.slot-orange {
background: linear-gradient(135deg, #ffb31a 0%, #fb8c00 100%);
}
.slot-gray {
background: linear-gradient(135deg, #9ca3af 0%, #64748b 100%);
}
.slot-header {
display: flex;
justify-content: space-between;
align-items: center;
gap: 1px;
margin-bottom: 2px;
}
.slot-time {
display: flex;
align-items: center;
gap: 10px;
font-size: 14px;
font-weight: 800;
letter-spacing: -0.4px;
}
.slot-mode {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 14px;
border-radius: 10px;
font-size: 12px;
font-weight: 800;
background: rgba(15, 23, 42, 0.14);
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
white-space: nowrap;
}
.slot-content {
margin-bottom: 16px;
}
.slot-title {
font-size: 12px;
line-height: 15px;
font-weight: 850;
letter-spacing: -0.6px;
}
.slot-subtitle {
margin-top: 2px;
font-size: 12px;
line-height: 26px;
font-weight: 600;
opacity: 0.92;
}
.absence-badge {
display: flex;
align-items: center;
gap: 18px;
padding: 6px 10px;
border-radius: 10px;
background: #ffffff;
box-sizing: border-box;
box-shadow: 0 10px 24px rgba(15, 23, 42, 0.12);
}
.absence-icon {
width: 18px;
height: 18px;
border-radius: 999px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.absence-text {
min-width: 0;
}
.absence-label {
font-size: 12px;
line-height: 15px;
font-weight: 850;
}
.absence-description {
margin-top: 6px;
font-size: 12px;
line-height: 22px;
font-weight: 500;
color: #64748b;
}
.badge-green {
background: linear-gradient(180deg, #f0fdf4 0%, #ffffff 100%);
border-left: 3px solid #16a34a;
}
.badge-green .absence-icon,
.badge-green .absence-label {
color: #15803d;
}
.badge-red {
background: linear-gradient(180deg, #fff7f5 0%, #ffffff 100%);
border-left: 3px solid #ef3b2d;
}
.badge-red .absence-icon,
.badge-red .absence-label {
color: #dc2626;
}
.badge-orange {
background: linear-gradient(180deg, #fff7ed 0%, #ffffff 100%);
border-left: 3px solid #f59e0b;
}
.badge-orange .absence-icon,
.badge-orange .absence-label {
color: #d97706;
}
.badge-gray {
background: linear-gradient(180deg, #f8fafc 0%, #ffffff 100%);
border-left: 3px solid #64748b;
}
.badge-gray .absence-icon,
.badge-gray .absence-label {
color: #64748b;
}
.compact-slot {
position: relative;
width: 100%;
min-height: 74px;
padding: 8px 9px;
border-radius: 8px;
color: #ffffff;
font-family: "DM Sans", Arial, Helvetica, sans-serif;
overflow: hidden;
box-sizing: border-box;
}
.compact-top {
display: flex;
align-items: center;
justify-content: space-between;
gap: 6px;
margin-bottom: 8px;
font-size: 12px;
font-weight: 850;
}
.compact-title {
font-size: 12px;
line-height: 15px;
font-weight: 750;
}
.compact-status {
display: inline-flex;
align-items: center;
gap: 4px;
max-width: 128px;
padding: 3px 6px;
border-radius: 999px;
font-size: 10px;
font-weight: 850;
background: #ffffff;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.compact-status span {
overflow: hidden;
text-overflow: ellipsis;
}
.compact-status.badge-green {
color: #15803d;
border-left: none;
}
.compact-status.badge-red {
color: #dc2626;
border-left: none;
}
.compact-status.badge-orange {
color: #d97706;
border-left: none;
}
.compact-status.badge-gray {
color: #64748b;
border-left: none;
}
@media (max-width: 768px) {
.calendar-slot {
min-height: 180px;
padding: 18px 16px;
}
.slot-time {
font-size: 12px;
}
.slot-mode {
font-size: 12px;
padding: 7px 10px;
}
.slot-title {
font-size: 14px;
line-height: 25px;
}
.slot-subtitle {
font-size: 12px;
line-height: 21px;
}
.absence-badge {
gap: 12px;
padding: 12px 14px;
}
.absence-icon {
width: 12px;
height: 12px;
}
.absence-label {
font-size: 12px;
line-height: 21px;
}
.absence-description {
font-size: 12px;
line-height: 18px;
}
}
.fc-v-event {
display: block;
background: #FFF;
border: none;
}
`;

View File

@ -2280,7 +2280,7 @@ const Module_Ent_Mes_Formations = (props) => {
setdeclare_absence("1");
}} className="bton_enreg_dialog" >Déclater une absence</Button>
}} className="bton_enreg_dialog" >Déclarer une absence</Button>
</div>
</div>}
@ -3252,7 +3252,9 @@ const Module_Ent_Mes_Formations = (props) => {
<Module_ENT_Absence attendee_email={props.email_apprenant}
apprenant_id={props.apprenant_id}
class_id={selected_id} />
class_id={selected_id}
inscription_id={selected_inscription_id}
/>
</div>}

View File

@ -1124,19 +1124,19 @@ const Module_Evaluation_Positionnement = (props) => {
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
@ -1368,6 +1368,9 @@ const Module_Evaluation_Positionnement = (props) => {
id="combo-box-demo"
className="block_en_mass_select"
fullWidth
sx={{
backgroundColor: "#FFF",
}}
options={New_Option_q_position_Masse}
onChange={(event, value) => {
if (value && value.value) {

View File

@ -51,7 +51,8 @@ import 'react-tooltip/dist/react-tooltip.css'
import TextareaAutosize from '@mui/material/TextareaAutosize';
import Module_Alert_Confirmation from "./Module_Alert_Confirmation";
import VisibilityIcon from '@mui/icons-material/Visibility';
import ArrowCircleDownIcon from '@mui/icons-material/ArrowCircleDown';
const useStyles = makeStyles((theme) => ({
@ -202,13 +203,52 @@ const Module_Relance_Client_Facture = (props) => {
{ field: '_id', headerName: '_id', hide: true, disableExport: true, },
{ field: 'id', headerName: 'id', hide: true, disableExport: true },
{ field: 'client_id', headerName: 'client_id', hide: true, disableExport: true },
{ field: 'relance_date', headerName: 'Date Relance', maxwidth: 250, flex: 1, hide: false, editable: false },
{ field: 'stored_document_id', headerName: 'stored_document_id', hide: true, disableExport: true },
{ field: 'strored_document_file_extention', headerName: 'strored_document_file_extention', hide: true, disableExport: true },
{ field: 'strored_document_file_business_object', headerName: 'strored_document_file_business_object', hide: true, disableExport: true },
{ field: 'relance_date', headerName: 'Date Relance', maxwidth: 200, flex: 1, hide: false, editable: false },
{
field: 'total_reste_to_paye', headerName: 'Montant Rel.', maxwidth: 250, flex: 1, hide: false, editable: false, align: 'right', headerAlign: "right",
renderCell: (params) => <ExpandableCell_String_to_monetaire {...params} />,
},
{ field: 'relance_level', headerName: 'Niveau Relance', hide: false, minWidth: 200, flex: 1, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, align: 'center', headerAlign: "center" },
{ field: 'relance_level', headerName: 'Niveau Relance', hide: false, minWidth: 200, flex: 1, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, align: 'center', headerAlign: "center" },
{ field: 'mode_envoi', headerName: 'Envoi par', hide: false, minWidth: 150, flex: 1, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, align: 'center', headerAlign: "center" },
{
field: 'Visualiser', headerName: 'Visualiser', minWidth: 50, flex: 1, maxWidth: 100, hide: false, editable: false,
renderCell: (cellValues) => {
return (
<nav style={{ width: '100%', 'textAlign': 'center', cursor: 'pointer' }} onClick={(e) => {
preview_document_pdf(cellValues.row.stored_document_id, cellValues.row.strored_document_file_extention, cellValues.row.strored_document_file_business_object);
setselected_doc_name(cellValues.row.strored_document_file_business_object);
setDialog_Preview_Doc_open(true);
}}>
<VisibilityIcon style={{ color: '#6a329f' }} />
</nav>)
},
},
{
field: 'Télécharger', headerName: 'Télécharger', minWidth: 50, flex: 1, maxWidth: 100, hide: false, editable: false,
renderCell: (cellValues) => {
return (
<nav style={{ width: '100%', 'textAlign': 'center', cursor: 'pointer' }} onClick={(e) => {
print_document_pdf(cellValues.row.stored_document_id, cellValues.row.strored_document_file_extention, cellValues.row.strored_document_file_business_object);
setselected_doc_name(cellValues.row.strored_document_file_business_object);
}}>
<ArrowCircleDownIcon style={{ color: '#107758' }} />
</nav>)
},
},
]
@ -229,6 +269,37 @@ const Module_Relance_Client_Facture = (props) => {
renderCell: (params) => <ExpandableCell_String_to_monetaire {...params} />,
},
/*{
field: 'Visualiser', headerName: 'Visualiser', minWidth: 50, flex: 1, maxWidth: 100, hide: false, editable: false,
renderCell: (cellValues) => {
return (
<nav style={{ width: '100%', 'textAlign': 'center', cursor: 'pointer' }} onClick={(e) => {
preview_document_pdf(cellValues.row._id, cellValues.row.file_extention, cellValues.row.file_business_object);
setselected_doc_name(cellValues.row.file_business_object);
setDialog_Preview_Doc_open(true);
}}>
<VisibilityIcon style={{ color: '#6a329f' }} />
</nav>)
},
},
{
field: 'Télécharger', headerName: 'Télécharger', minWidth: 50, flex: 1, maxWidth: 100, hide: false, editable: false,
renderCell: (cellValues) => {
return (
<nav style={{ width: '100%', 'textAlign': 'center', cursor: 'pointer' }} onClick={(e) => {
print_document_pdf(cellValues.row._id, cellValues.row.file_extention, cellValues.row.file_business_object);
setselected_doc_name(cellValues.row.file_business_object);
}}>
<ArrowCircleDownIcon style={{ color: '#107758' }} />
</nav>)
},
},*/
]
@ -252,7 +323,7 @@ const Module_Relance_Client_Facture = (props) => {
axios.post(myurl, form).then(res => {
//console.log(" In Get_List_Relance_Client_Facture res.data.status = " + res.data.status);
// console.log(" In Get_List_Relance_Client_Facture res.data.message r_class = " + res.data.message);
// console.log(" In Get_List_Relance_Client_Facture res.data.message r_class = " + res.data.message);
if (String(res.data.status) === String("true")) {
setGet_List_Relance_Client_Facture_api("true");
@ -842,6 +913,78 @@ const Module_Relance_Client_Facture = (props) => {
})
}
function preview_document_pdf(doc_id, file_extention, file_business_object) {
var part_cookie = getCookie('tokenmysypart');
var nom_fichier_cmd = String(file_business_object) + "." + String(file_extention);
// console.log(" nom_fichier_cmd = ", nom_fichier_cmd, " --- doc_id = ", doc_id);
var url = process.env.REACT_APP_API_URL + "myclass/api/Get_Stored_Downloaded_File_From_Id/" + part_cookie + "/" + doc_id;
//console.log(" nom_fichier_cmd = ", nom_fichier_cmd, " --- selected_id = ", selected_id, " --- url =", url);
axios.get(url, { responseType: 'blob', },)
.then((res) => {
const blob = new Blob([res.data], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
setselected_doc_img(url);
// fileDownload(res.data, nom_fichier_cmd)
}).catch((error) => {
console.error('Error:', error);
});
}
const [print_doc_id, setprint_doc_id] = useState("");
const [print_file_extention, setprint_file_extention] = useState("");
const [print_file_business_object, setprint_file_business_object] = useState("");
function print_document_pdf(doc_id, file_extention, file_business_object) {
const stored_cookie = getCookie('tokenmysypart');
var nom_fichier_cmd = String(file_business_object) + "." + String(file_extention);
// console.log(" stored_cookie = ", stored_cookie, " --- doc_id = ", doc_id);
var url = process.env.REACT_APP_API_URL + "myclass/api/Get_Stored_Downloaded_File_From_Id/" + stored_cookie + "/" + doc_id;
//console.log(" nom_fichier_cmd = ", nom_fichier_cmd, " --- selected_id = ", selected_id, " --- url =", url);
axios.get(url, { responseType: 'blob', },)
.then((res) => {
fileDownload(res.data, nom_fichier_cmd)
}).catch((error) => {
console.error('Error:', error);
});
}
const [Dialog_Preview_Doc_message, setDialog_Preview_Doc_message] = React.useState(false);
const [Dialog_Preview_Doc_open, setDialog_Preview_Doc_open] = React.useState(false);
function Dialog_Preview_Doc_handle_change_participant_session(message) {
setDialog_Preview_Doc_message(message);
setDialog_Preview_Doc_open(true);
}
const Dialog_Preview_Doc_handleClose = () => {
};
const Dialog_Preview_Doc_handleClose_buton = () => {
setDialog_Preview_Doc_open(false);
};
const [selected_doc_name, setselected_doc_name] = React.useState("");
const [selected_doc_img, setselected_doc_img] = React.useState("");
return (
<div className="module_relance_client_facture">
@ -860,6 +1003,70 @@ const Module_Relance_Client_Facture = (props) => {
}
{/*** FIN Affichage des messages d'alerte*/}
{/***** Dialog Preview Image */}
<Dialog
open={Dialog_Preview_Doc_open}
// onClose={Dialog_Preview_Doc_handleClose}
static
onClose={() => null}
PaperProps={{
className: classes.paper, // Apply the paper style
style: {
overflowY: 'unset',
position: 'absolute',
top: '7rem',
margin: "2px",
width: '50rem',
maxWidth: 'unset',
background: '#efefef',
borderRadius: '20px!important'
},
}}
hideBackdrop={true}
disableScrollLock
classes={{
paper: classes.dialog
}}
PaperComponent={PaperComponent}
aria-labelledby="draggable-dialog-title"
>
<DialogTitle style={{ cursor: 'move', fontFamily: "DM Sans", paddingBottom: '5px' }} id="draggable-dialog-title" >{selected_doc_name}</DialogTitle>
<DialogContent>
<DialogContentText>
{Dialog_Preview_Doc_message}
</DialogContentText>
<div style={{ width: '100%', height: '45rem' }}> <br />
{selected_doc_img &&
<iframe src={selected_doc_img} style={{ height: '43rem', width: '96%' }}></iframe>}
</div>
</DialogContent>
<DialogActions>
<IconButton
// autoFocus
onClick={Dialog_Preview_Doc_handleClose_buton}
color="primary"
className={classes.customizedButton}
>
<CancelPresentationIcon />
</IconButton>
</DialogActions>
</Dialog>
{/***** FIN Dialog Preview Image */}
{/* Dialog pour gerer les Relance_Client */}
<Dialog
@ -917,19 +1124,19 @@ const Module_Relance_Client_Facture = (props) => {
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}}
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
@ -975,19 +1182,19 @@ const Module_Relance_Client_Facture = (props) => {
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}} />
sx={{
"& .MuiOutlinedInput-root": {
"& fieldset": {
border: "solid #e8eef6 1px;",
},
"&:hover fieldset": {
border: "solid #e8eef6 1px;",
},
"&.Mui-focused fieldset": {
border: "solid #e8eef6 1px;",
},
},
}} />
}
/>
@ -1298,7 +1505,7 @@ const Module_Relance_Client_Facture = (props) => {
}}
componentsProps={{ toolbar: { data_colums: columns_facture_retard } }}
// checkboxSelection
// checkboxSelection
disableSelectionOnClick
onSelectionModelChange={(newSelectionModel) => {
setselectionModel_relance(newSelectionModel);
@ -1457,7 +1664,7 @@ const Module_Relance_Client_Facture = (props) => {
}}
componentsProps={{ toolbar: { data_colums: columns_relances } }}
// checkboxSelection
// checkboxSelection
disableSelectionOnClick
onSelectionModelChange={(newSelectionModel) => {
setselectionModel_relance(newSelectionModel);
@ -1489,12 +1696,18 @@ const Module_Relance_Client_Facture = (props) => {
relance_date: JSON.parse(item).relance_date,
relance_level: JSON.parse(item).relance_level,
total_reste_to_paye: JSON.parse(item).total_reste_to_paye,
mode_envoi: JSON.parse(item).mode_envoi,
stored_document_id: JSON.parse(item).stored_document_id,
strored_document_file_extention: JSON.parse(item).strored_document_file_extention,
strored_document_file_business_object: JSON.parse(item).strored_document_file_business_object,
}
))}
onRowDoubleClick={(newSelectionModel) => {
console.log(" ## newSelectionModel = ", newSelectionModel.row.total_reste_to_paye)
// console.log(" ## newSelectionModel = ", newSelectionModel.row.total_reste_to_paye)
}}
columns={columns_relances}

View File

@ -7702,7 +7702,7 @@ const Module_Session_Planification = (props) => {
{display_view && String(display_view) === "list" && <div style={{ "border": "None", minHeight: '800px', background: '#FFF' }}>
<div style={{ height: 750, width: '100%', paddingRight: '1px', background: '#FFF', marginBottom: '1rem' }}>
<div style={{ height: 8550, width: '100%', paddingRight: '1px', background: '#FFF', marginBottom: '1rem' }}>
&nbsp;
<Box
@ -8012,7 +8012,7 @@ const Module_Session_Planification = (props) => {
<FullCalendar
height={750}
locales={allLocales}
locale={'fr'}
locale={'fr'}
editable
selectable
//events={events}

View File

@ -470,8 +470,6 @@ const Modules_Mes_Documents = (props) => {
const [print_doc_id, setprint_doc_id] = useState("");
const [print_file_extention, setprint_file_extention] = useState("");
const [print_file_business_object, setprint_file_business_object] = useState("");

View File

@ -1950,12 +1950,12 @@ const Partner_Client = (props) => {
</div>
<div className="div_row session_data" >
<div style={{ height: 650, width: '100%', paddingRight: '1px' }}>
<div style={{ height: 850, width: '100%', paddingRight: '1px' }}>
&nbsp;
<Box
sx={{
height: "600px",
height: "800px",
width: '100%',
paddingRight: '1px',
'& .cell--presentiel': {
@ -2021,10 +2021,10 @@ const Partner_Client = (props) => {
))}
columns={columns_clients}
pageSize={10}
pageSize={20}
className="datagridclass"
rowsPerPageOptions={[10]}
rowsPerPageOptions={[20]}
//disableSelectionOnClick
checkboxSelection
components={{