recette2
cherif 2024-05-03 17:02:05 +02:00
parent 03273148fa
commit 3b5fb13d60
6 changed files with 1084 additions and 225 deletions

216
package-lock.json generated
View File

@ -18,10 +18,15 @@
"@fortawesome/free-regular-svg-icons": "^6.1.1",
"@fortawesome/free-solid-svg-icons": "^6.1.1",
"@fortawesome/react-fontawesome": "^0.1.18",
"@fullcalendar/core": "^6.1.9",
"@fullcalendar/core": "^6.1.11",
"@fullcalendar/daygrid": "^6.1.9",
"@fullcalendar/interaction": "^6.1.9",
"@fullcalendar/multimonth": "^6.1.11",
"@fullcalendar/react": "^6.1.9",
"@fullcalendar/resource": "^6.1.11",
"@fullcalendar/resource-timegrid": "^6.1.11",
"@fullcalendar/resource-timeline": "^6.1.11",
"@fullcalendar/scrollgrid": "^6.1.11",
"@fullcalendar/timegrid": "^6.1.9",
"@mantine/core": "^4.2.10",
"@mantine/hooks": "^4.2.10",
@ -3224,19 +3229,19 @@
}
},
"node_modules/@fullcalendar/core": {
"version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.9.tgz",
"integrity": "sha512-eeG+z9BWerdsU9Ac6j16rpYpPnE0wxtnEHiHrh/u/ADbGTR3hCOjCD9PxQOfhOTHbWOVs7JQunGcksSPu5WZBQ==",
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.11.tgz",
"integrity": "sha512-TjG7c8sUz+Vkui2FyCNJ+xqyu0nq653Ibe99A66LoW95oBo6tVhhKIaG1Wh0GVKymYiqAQN/OEdYTuj4ay27kA==",
"dependencies": {
"preact": "~10.12.1"
}
},
"node_modules/@fullcalendar/daygrid": {
"version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.9.tgz",
"integrity": "sha512-o/6joH/7lmVHXAkbaa/tUbzWYnGp/LgfdiFyYPkqQbjKEeivNZWF1WhHqFbhx0zbFONSHtrvkjY2bjr+Ef2quQ==",
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.11.tgz",
"integrity": "sha512-hF5jJB7cgUIxWD5MVjj8IU407HISyLu7BWXcEIuTytkfr8oolOXeCazqnnjmRbnFOncoJQVstTtq6SIhaT32Xg==",
"peerDependencies": {
"@fullcalendar/core": "~6.1.9"
"@fullcalendar/core": "~6.1.11"
}
},
"node_modules/@fullcalendar/interaction": {
@ -3247,6 +3252,25 @@
"@fullcalendar/core": "~6.1.9"
}
},
"node_modules/@fullcalendar/multimonth": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/multimonth/-/multimonth-6.1.11.tgz",
"integrity": "sha512-7DbPC+AAlaKnquGVdw1Z85Q3nSZ4GZ1NcVIk4k7bLnqDlntwHPPsrDlSIzUWKcN0q5/u7jQHm4PU1m3LAl70Sg==",
"dependencies": {
"@fullcalendar/daygrid": "~6.1.11"
},
"peerDependencies": {
"@fullcalendar/core": "~6.1.11"
}
},
"node_modules/@fullcalendar/premium-common": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/premium-common/-/premium-common-6.1.11.tgz",
"integrity": "sha512-3WsSizkGDJEu+AlgQlFXKI+/DYCYTRp0PQRz0vS63qKBEUsVzfSD0oi/7jCylZJlCUteIjbi4Hu1I2I5o6UHrQ==",
"peerDependencies": {
"@fullcalendar/core": "~6.1.11"
}
},
"node_modules/@fullcalendar/react": {
"version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.9.tgz",
@ -3257,15 +3281,90 @@
"react-dom": "^16.7.0 || ^17 || ^18"
}
},
"node_modules/@fullcalendar/timegrid": {
"version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.9.tgz",
"integrity": "sha512-le7UV05wVE1Trdr054kgJXTwa+A1pEI8nlCBnPWdcyrL+dTLoPvQ4AWEVCnV7So+4zRYaCqnqGXfCJsj0RQa0g==",
"node_modules/@fullcalendar/resource": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/resource/-/resource-6.1.11.tgz",
"integrity": "sha512-hxTQQ+eywfcC28JeyQEdJov+Jqa73zy4xU0Gg7DTTOVlS2lFVrQKM5aMXW8iz800rPbvHFAyVwfFNHclJrRoeQ==",
"dependencies": {
"@fullcalendar/daygrid": "~6.1.9"
"@fullcalendar/premium-common": "~6.1.11"
},
"peerDependencies": {
"@fullcalendar/core": "~6.1.9"
"@fullcalendar/core": "~6.1.11"
}
},
"node_modules/@fullcalendar/resource-daygrid": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/resource-daygrid/-/resource-daygrid-6.1.11.tgz",
"integrity": "sha512-d/tuNS3mEDELlcohaJ/tQh4SbfeJzO6+1jLZ7Zzpm2oerdYskAzroB0qUlzhs4F9E5WeMj5RfXWUbZ+bmeoYvQ==",
"dependencies": {
"@fullcalendar/daygrid": "~6.1.11",
"@fullcalendar/premium-common": "~6.1.11"
},
"peerDependencies": {
"@fullcalendar/core": "~6.1.11",
"@fullcalendar/resource": "~6.1.11"
}
},
"node_modules/@fullcalendar/resource-timegrid": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/resource-timegrid/-/resource-timegrid-6.1.11.tgz",
"integrity": "sha512-oomckSrvBjRpp2U8knsimhUWIaIcHf834gWOHpNMwxthzDX1CZ+QzQ3/ZSwMSu0N+L8y2TMpfcBwddX3gCEkTA==",
"dependencies": {
"@fullcalendar/premium-common": "~6.1.11",
"@fullcalendar/resource-daygrid": "~6.1.11",
"@fullcalendar/timegrid": "~6.1.11"
},
"peerDependencies": {
"@fullcalendar/core": "~6.1.11",
"@fullcalendar/resource": "~6.1.11"
}
},
"node_modules/@fullcalendar/resource-timeline": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/resource-timeline/-/resource-timeline-6.1.11.tgz",
"integrity": "sha512-RIQOwGxN8n2jSIOsEGUjzoGgdYDZq8t4sUvSUfnahGwyCesMqsYNmpA+58PFy/BHPIgxyvy8awH2CnjjSN7Uiw==",
"dependencies": {
"@fullcalendar/premium-common": "~6.1.11",
"@fullcalendar/scrollgrid": "~6.1.11",
"@fullcalendar/timeline": "~6.1.11"
},
"peerDependencies": {
"@fullcalendar/core": "~6.1.11",
"@fullcalendar/resource": "~6.1.11"
}
},
"node_modules/@fullcalendar/scrollgrid": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/scrollgrid/-/scrollgrid-6.1.11.tgz",
"integrity": "sha512-GRhhU8ACHqgfxdMnP59VPThfNG3Stkp9zq1sLnI992g1fZQ+V2UhYvl5qhu3eEVSp2KTDPx4NaoR35cQGrC1Mw==",
"dependencies": {
"@fullcalendar/premium-common": "~6.1.11"
},
"peerDependencies": {
"@fullcalendar/core": "~6.1.11"
}
},
"node_modules/@fullcalendar/timegrid": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.11.tgz",
"integrity": "sha512-0seUHK/ferH89IeuCvV4Bib0zWjgK0nsptNdmAc9wDBxD/d9hm5Mdti0URJX6bDoRtsSfRDu5XsRcrzwoc+AUQ==",
"dependencies": {
"@fullcalendar/daygrid": "~6.1.11"
},
"peerDependencies": {
"@fullcalendar/core": "~6.1.11"
}
},
"node_modules/@fullcalendar/timeline": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/timeline/-/timeline-6.1.11.tgz",
"integrity": "sha512-MGUEAHlFBWxpuhSWhZbHOtD9i+b8GZjqNV82MH+vwPHq1Jjqe8qj9Wby00vKikdWH+RuAB+IuiKjQaROEU0Ecw==",
"dependencies": {
"@fullcalendar/premium-common": "~6.1.11",
"@fullcalendar/scrollgrid": "~6.1.11"
},
"peerDependencies": {
"@fullcalendar/core": "~6.1.11"
}
},
"node_modules/@googlemaps/js-api-loader": {
@ -35898,34 +35997,101 @@
}
},
"@fullcalendar/core": {
"version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.9.tgz",
"integrity": "sha512-eeG+z9BWerdsU9Ac6j16rpYpPnE0wxtnEHiHrh/u/ADbGTR3hCOjCD9PxQOfhOTHbWOVs7JQunGcksSPu5WZBQ==",
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.11.tgz",
"integrity": "sha512-TjG7c8sUz+Vkui2FyCNJ+xqyu0nq653Ibe99A66LoW95oBo6tVhhKIaG1Wh0GVKymYiqAQN/OEdYTuj4ay27kA==",
"requires": {
"preact": "~10.12.1"
}
},
"@fullcalendar/daygrid": {
"version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.9.tgz",
"integrity": "sha512-o/6joH/7lmVHXAkbaa/tUbzWYnGp/LgfdiFyYPkqQbjKEeivNZWF1WhHqFbhx0zbFONSHtrvkjY2bjr+Ef2quQ=="
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.11.tgz",
"integrity": "sha512-hF5jJB7cgUIxWD5MVjj8IU407HISyLu7BWXcEIuTytkfr8oolOXeCazqnnjmRbnFOncoJQVstTtq6SIhaT32Xg=="
},
"@fullcalendar/interaction": {
"version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.9.tgz",
"integrity": "sha512-I3FGnv0kKZpIwujg3HllbKrciNjTqeTYy3oJG226oAn7lV6wnrrDYMmuGmA0jPJAGN46HKrQqKN7ItxQRDec4Q=="
},
"@fullcalendar/multimonth": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/multimonth/-/multimonth-6.1.11.tgz",
"integrity": "sha512-7DbPC+AAlaKnquGVdw1Z85Q3nSZ4GZ1NcVIk4k7bLnqDlntwHPPsrDlSIzUWKcN0q5/u7jQHm4PU1m3LAl70Sg==",
"requires": {
"@fullcalendar/daygrid": "~6.1.11"
}
},
"@fullcalendar/premium-common": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/premium-common/-/premium-common-6.1.11.tgz",
"integrity": "sha512-3WsSizkGDJEu+AlgQlFXKI+/DYCYTRp0PQRz0vS63qKBEUsVzfSD0oi/7jCylZJlCUteIjbi4Hu1I2I5o6UHrQ=="
},
"@fullcalendar/react": {
"version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.9.tgz",
"integrity": "sha512-ioxu0V++pYz2u/N1LL1V8DkMyiKGRun0gMAll2tQz3Kzi3r9pTwncGKRb1zO8h0e+TrInU08ywk/l5lBwp7eog=="
},
"@fullcalendar/timegrid": {
"version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.9.tgz",
"integrity": "sha512-le7UV05wVE1Trdr054kgJXTwa+A1pEI8nlCBnPWdcyrL+dTLoPvQ4AWEVCnV7So+4zRYaCqnqGXfCJsj0RQa0g==",
"@fullcalendar/resource": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/resource/-/resource-6.1.11.tgz",
"integrity": "sha512-hxTQQ+eywfcC28JeyQEdJov+Jqa73zy4xU0Gg7DTTOVlS2lFVrQKM5aMXW8iz800rPbvHFAyVwfFNHclJrRoeQ==",
"requires": {
"@fullcalendar/daygrid": "~6.1.9"
"@fullcalendar/premium-common": "~6.1.11"
}
},
"@fullcalendar/resource-daygrid": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/resource-daygrid/-/resource-daygrid-6.1.11.tgz",
"integrity": "sha512-d/tuNS3mEDELlcohaJ/tQh4SbfeJzO6+1jLZ7Zzpm2oerdYskAzroB0qUlzhs4F9E5WeMj5RfXWUbZ+bmeoYvQ==",
"requires": {
"@fullcalendar/daygrid": "~6.1.11",
"@fullcalendar/premium-common": "~6.1.11"
}
},
"@fullcalendar/resource-timegrid": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/resource-timegrid/-/resource-timegrid-6.1.11.tgz",
"integrity": "sha512-oomckSrvBjRpp2U8knsimhUWIaIcHf834gWOHpNMwxthzDX1CZ+QzQ3/ZSwMSu0N+L8y2TMpfcBwddX3gCEkTA==",
"requires": {
"@fullcalendar/premium-common": "~6.1.11",
"@fullcalendar/resource-daygrid": "~6.1.11",
"@fullcalendar/timegrid": "~6.1.11"
}
},
"@fullcalendar/resource-timeline": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/resource-timeline/-/resource-timeline-6.1.11.tgz",
"integrity": "sha512-RIQOwGxN8n2jSIOsEGUjzoGgdYDZq8t4sUvSUfnahGwyCesMqsYNmpA+58PFy/BHPIgxyvy8awH2CnjjSN7Uiw==",
"requires": {
"@fullcalendar/premium-common": "~6.1.11",
"@fullcalendar/scrollgrid": "~6.1.11",
"@fullcalendar/timeline": "~6.1.11"
}
},
"@fullcalendar/scrollgrid": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/scrollgrid/-/scrollgrid-6.1.11.tgz",
"integrity": "sha512-GRhhU8ACHqgfxdMnP59VPThfNG3Stkp9zq1sLnI992g1fZQ+V2UhYvl5qhu3eEVSp2KTDPx4NaoR35cQGrC1Mw==",
"requires": {
"@fullcalendar/premium-common": "~6.1.11"
}
},
"@fullcalendar/timegrid": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.11.tgz",
"integrity": "sha512-0seUHK/ferH89IeuCvV4Bib0zWjgK0nsptNdmAc9wDBxD/d9hm5Mdti0URJX6bDoRtsSfRDu5XsRcrzwoc+AUQ==",
"requires": {
"@fullcalendar/daygrid": "~6.1.11"
}
},
"@fullcalendar/timeline": {
"version": "6.1.11",
"resolved": "https://registry.npmjs.org/@fullcalendar/timeline/-/timeline-6.1.11.tgz",
"integrity": "sha512-MGUEAHlFBWxpuhSWhZbHOtD9i+b8GZjqNV82MH+vwPHq1Jjqe8qj9Wby00vKikdWH+RuAB+IuiKjQaROEU0Ecw==",
"requires": {
"@fullcalendar/premium-common": "~6.1.11",
"@fullcalendar/scrollgrid": "~6.1.11"
}
},
"@googlemaps/js-api-loader": {

View File

@ -13,10 +13,15 @@
"@fortawesome/free-regular-svg-icons": "^6.1.1",
"@fortawesome/free-solid-svg-icons": "^6.1.1",
"@fortawesome/react-fontawesome": "^0.1.18",
"@fullcalendar/core": "^6.1.9",
"@fullcalendar/core": "^6.1.11",
"@fullcalendar/daygrid": "^6.1.9",
"@fullcalendar/interaction": "^6.1.9",
"@fullcalendar/multimonth": "^6.1.11",
"@fullcalendar/react": "^6.1.9",
"@fullcalendar/resource": "^6.1.11",
"@fullcalendar/resource-timegrid": "^6.1.11",
"@fullcalendar/resource-timeline": "^6.1.11",
"@fullcalendar/scrollgrid": "^6.1.11",
"@fullcalendar/timegrid": "^6.1.9",
"@mantine/core": "^4.2.10",
"@mantine/hooks": "^4.2.10",

View File

@ -121,6 +121,33 @@ const AddClassManual = (props) => {
{ field: '_id', headerName: '_id', hide: true },
{ field: 'code', headerName: 'Code', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'titre', headerName: 'Titre', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'credit', headerName: 'Credit', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{
field: 'pres_dist_hyp', headerName: 'Animation', minWidth: 150, flex: 1,
renderCell: (cellValues) => {
return (
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
{cellValues.row.pres_dist_hyp && String(cellValues.row.pres_dist_hyp) === "1" && "Distanciel"}
{cellValues.row.pres_dist_hyp && String(cellValues.row.pres_dist_hyp) === "0" && "Présentiel"}
{cellValues.row.pres_dist_hyp && String(cellValues.row.pres_dist_hyp) === "2" && "Hybride"}
</div>
);
}
},
{
field: 'is_noted', headerName: 'Evalué', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />,
renderCell: (cellValues) => {
return (
<div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
{cellValues.row.is_noted && String(cellValues.row.is_noted) === "1" && "Oui"}
{cellValues.row.is_noted && String(cellValues.row.is_noted) === "0" && "Non"}
</div>
);
}
},
{ field: 'duration_concat', headerName: 'Durée', minWidth: 150, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'duration', headerName: 'Durée', minWidth: 150, hide: true, flex: 1, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'duration_unite', headerName: 'Unit.', minWidth: 150, hide: true, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
@ -133,7 +160,7 @@ const AddClassManual = (props) => {
<Popup
trigger={<Button
>
<CiTrash />
@ -187,7 +214,7 @@ const AddClassManual = (props) => {
]
function handleClick_delete_UE_From_Class(event, cellValues){
function handleClick_delete_UE_From_Class(event, cellValues) {
Delete_Given_UE_From_Class(cellValues.row._id);
}
@ -197,40 +224,40 @@ const AddClassManual = (props) => {
function Delete_Given_UE_From_Class(local_ue_id) {
var form = new FormData();
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("class_id", props.mytrainingclass['class_id']);
form.append("ue_id", local_ue_id);
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("class_id", props.mytrainingclass['class_id']);
form.append("ue_id", local_ue_id);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_UE_From_Class/";
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_UE_From_Class/";
axios.post(myurl, form).then(res => {
//console.log(" In Delete_Given_UE_From_Class res.data.status = " + res.data.status);
//console.log(" In Delete_Given_UE_From_Class res.data.message r_class = " + res.data.message);
axios.post(myurl, form).then(res => {
//console.log(" In Delete_Given_UE_From_Class res.data.status = " + res.data.status);
//console.log(" In Delete_Given_UE_From_Class res.data.message r_class = " + res.data.message);
if (String(res.data.status) === String("true")) {
setDelete_Given_UE_From_Class_api("true");
setDelete_Given_UE_From_Class_result(res.data.message);
Getall_Class_List_UE();
alert(res.data.message)
}
else {
setDelete_Given_UE_From_Class_api("false");
setDelete_Given_UE_From_Class_message(res.data.message);
if (String(res.data.status) === String("true")) {
setDelete_Given_UE_From_Class_api("true");
setDelete_Given_UE_From_Class_result(res.data.message);
Getall_Class_List_UE();
alert(res.data.message)
}
else {
setDelete_Given_UE_From_Class_api("false");
setDelete_Given_UE_From_Class_message(res.data.message);
alert(res.data.message);
alert(res.data.message);
}
}
}).catch((error) => {
}).catch((error) => {
console.warn('Delete_Given_UE_From_Class : Not good man :( mysearchtext = ' + error);
setDelete_Given_UE_From_Class_api("false");
alert(" Impossible de supprimer l'UE ");
})
console.warn('Delete_Given_UE_From_Class : Not good man :( mysearchtext = ' + error);
setDelete_Given_UE_From_Class_api("false");
alert(" Impossible de supprimer l'UE ");
})
}
const [ue_gridline_id, setue_gridline_id] = useState("");
@ -864,13 +891,13 @@ const AddClassManual = (props) => {
}
if (mylocaltraining.presentiel.distantiel) {
console.log(" ### distantiel distantiel distantiel = ", mylocaltraining.presentiel.distantiel);
setmydistance(mylocaltraining.presentiel.distantiel);
var result2 = presentiel.filter((local_mymanager) => local_mymanager.value === String((mylocaltraining.presentiel.distantiel)))
if (result2[0]){
if (result2[0]) {
setmydistance_label(result2[0].label);
console.log(" IN DISTANTIEL : result2[0].label = ", result2[0].label)
}
} else {
setmydistance("0");
@ -880,13 +907,13 @@ const AddClassManual = (props) => {
if (mylocaltraining.presentiel.presentiel) {
console.log(" ### presentiel presentiel presentiel = ", mylocaltraining.presentiel.presentiel);
setmypresence(mylocaltraining.presentiel.presentiel);
var result2 = presentiel.filter((local_mymanager) => local_mymanager.value === String((mylocaltraining.presentiel.presentiel)))
if (result2[0]){
if (result2[0]) {
setmypresence_label(result2[0].label);
console.log(" IN PRESEINTIEL : result2[0].label = ", result2[0].label)
}
} else {
setmypresence("0");
@ -1514,7 +1541,7 @@ const AddClassManual = (props) => {
.then((data) => data.json())
.then((data) => {
setLoading(false);
// console.log(' IN Get_List_Metiers Success:', data['message'], "data['status'] = ", data['status']);
// console.log(' IN Get_List_Metiers Success:', data['message'], "data['status'] = ", data['status']);
if (String(data['status']) === String("true")) {
setGet_List_Metiers_api("true");
@ -2339,6 +2366,9 @@ const AddClassManual = (props) => {
};
const [add_one_eu_to_class, setadd_one_eu_to_class] = useState("");
const [Record_All_PJ_api, setRecord_All_PJ_api] = useState();
const [Record_All_PJ_result, setRecord_All_PJ_result] = useState();
const [Record_All_PJ_message, setRecord_All_PJ_message] = useState();
@ -2603,9 +2633,7 @@ const AddClassManual = (props) => {
const [selected_ue_id, setselected_ue_id] = useState("");
const [selected_ue_credit, setselected_ue_credit] = useState("");
const [selected_ue_is_noted, setselected_ue_is_noted] = useState("");
const [selected_ue_pres_dist_hyp, setselected_ue_pres_dist_hyp] = useState("");
const New_Option_Is_Noted = [
@ -2629,15 +2657,27 @@ const AddClassManual = (props) => {
setselected_ue_credit("");
setselected_ue_is_noted("");
setselected_ue_pres_dist_hyp("");
setadd_one_eu_to_class("");
};
function clean_ue_data() {
setselected_ue_id("");
setselected_ue_credit("");
setselected_ue_is_noted("");
setselected_ue_pres_dist_hyp("");
setadd_one_eu_to_class("");
}
const Dialog_Unite_Enseignement_handleClose_buton = () => {
setDialog_Unite_Enseignement_open(false);
setselected_ue_id("");
setselected_ue_credit("");
setselected_ue_is_noted("");
setselected_ue_pres_dist_hyp("");
setadd_one_eu_to_class("");
};
const [Dialog_1_message, setDialog_1_message] = React.useState(false);
@ -2693,6 +2733,13 @@ const AddClassManual = (props) => {
})
}
const [gridline_ue_id, setgridline_ue_id] = useState("");
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds))
}
return (
<div className="addclassmanual">
{isLoading && <div className="loader-container">
@ -2712,35 +2759,56 @@ const AddClassManual = (props) => {
{Dialog_1_message}
</DialogContentText>
<div className="session_caract_Dialog" > Choisir une unité d'enseignement
<Autocomplete
disablePortal
name="event_dialog_ue_id"
id="event_dialog_ue_id"
fullWidth
//className="disabled_style enable_style"
options={New_Getall_Partner_List_UE_result}
{add_one_eu_to_class && String(add_one_eu_to_class) === "1" && <div className="session_caract_Dialog" > <b> Choisir une unité d'enseignement </b>
{New_Getall_Partner_List_UE_result && New_Getall_Partner_List_UE_result.length > 0 &&
<Autocomplete
disablePortal
name="event_dialog_ue_id"
id="event_dialog_ue_id"
fullWidth
//className="disabled_style enable_style"
options={New_Getall_Partner_List_UE_result}
//value={New_Getall_Partner_List_UE_result.filter((data) => (data)._id === String(selected_ue_id))[0].label}
onChange={(event, value) => {
if (value && value._id) {
onChange={(event, value) => {
if (value && value._id) {
setselected_ue_id(value._id);
setselected_ue_id(value._id);
} else {
setselected_ue_id("");
}
}}
} else {
setselected_ue_id("");
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une UE"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
}}
/>}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une UE"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
</div>}
/>
}
{add_one_eu_to_class && String(add_one_eu_to_class) !== "1" &&
New_Getall_Partner_List_UE_result && New_Getall_Partner_List_UE_result.length > 0 &&
selected_ue_id && <div className="session_caract_Dialog" > <b> Unité d'enseignement </b>
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_credit"
id="event_dialog_credit"
fullWidth
value={New_Getall_Partner_List_UE_result.filter((data) => (data)._id === String(selected_ue_id))[0].label}
/>
</div>
}
<div className="session_caract_Dialog" > <b> Crédits </b>
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
@ -2749,7 +2817,7 @@ const AddClassManual = (props) => {
id="event_dialog_credit"
type="number"
fullWidth
//value={p_detail_tuteur1_nom}
value={selected_ue_credit}
onChange={(e) => {
setselected_ue_credit(e.target.value);
}
@ -2761,11 +2829,12 @@ const AddClassManual = (props) => {
<div className="session_caract_Dialog"> <b> Est Evalué </b><br />
<Autocomplete
<Autocomplete
disablePortal
name="event_dialog_is_noted"
id="event_dialog_is_noted"
//value={New_civilite.filter((data) => (data).value === String(p_detail_tuteur1_civilite))[0].label}
value={New_Option_Is_Noted.filter((data) => (data).id === String(selected_ue_is_noted))[0].label}
fullWidth
@ -2780,8 +2849,7 @@ const AddClassManual = (props) => {
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>}
/>
@ -2792,7 +2860,7 @@ const AddClassManual = (props) => {
disablePortal
name="event_dialog_mode_animation"
id="event_dialog_mode_animation"
//value={New_civilite.filter((data) => (data).value === String(p_detail_tuteur1_civilite))[0].label}
value={New_Option_pres_dist_hyp.filter((data) => (data).id === String(selected_ue_pres_dist_hyp))[0].label}
fullWidth
@ -2948,6 +3016,11 @@ const AddClassManual = (props) => {
_id: JSON.parse(item)._id,
code: JSON.parse(item).code,
titre: JSON.parse(item).titre,
credit: JSON.parse(item).credit,
pres_dist_hyp: JSON.parse(item).pres_dist_hyp,
is_noted: JSON.parse(item).is_noted,
duration: JSON.parse(item).duration,
duration_unite: JSON.parse(item).duration_unite,
duration_concat: JSON.parse(item).duration_concat,
@ -2959,24 +3032,22 @@ const AddClassManual = (props) => {
pageSize={10}
className="datagridclass"
/* onRowDoubleClick={(newSelectionModel) => {
setgridline_id(newSelectionModel.row.id);
setsequence_gridline_id("");
setaddOneSession("0");
setEdite_session("0");
setsessionChanged(false);
//handleClick_edit_session_From_Line(newSelectionModel.row.id);
setselected_session_id(newSelectionModel.row._id);
setsession_selected_row_id(newSelectionModel.row.id);
setDialog_2_message(String(JSON.parse(rowss[newSelectionModel.row.id]).title));
setDialog_2_open(true);
}}*/
onRowDoubleClick={(newSelectionModel) => {
clean_ue_data();
setgridline_ue_id(newSelectionModel.row.id);
setselected_ue_id(newSelectionModel.row._id)
var current_class_ue_data = New_Getall_Class_List_UE_result.filter((ue_data) => ue_data._id === String((newSelectionModel.row._id)))
setselected_ue_credit(current_class_ue_data[0]['credit']);
setselected_ue_is_noted(current_class_ue_data[0]['is_noted']);
setselected_ue_pres_dist_hyp(current_class_ue_data[0]['pres_dist_hyp']);
setadd_one_eu_to_class("0");
setDialog_Unite_Enseignement_open(true);
}}
@ -3041,10 +3112,11 @@ const AddClassManual = (props) => {
<div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined" onClick={(e) => {
Getall_Partner_List_UE();
setadd_one_eu_to_class("1")
setDialog_Unite_Enseignement_open(true);
}}
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout une UE &nbsp;
id='menu_import_participant' name='menu_import_participant'>Ajout 1 UE &nbsp;
<IoAddCircleOutline style={{ "fontSize": "x-large", "color": "green" }} />
</Button>
</div>
@ -3241,8 +3313,8 @@ const AddClassManual = (props) => {
onChange={(event, value) => {
if (value && value.value) {
setmypresence(value.value);
setmypresence_label(value.label);
setdatamodification("1");

View File

@ -62,6 +62,7 @@ import FullCalendar from "@fullcalendar/react";
import daygridPlugin from "@fullcalendar/daygrid";
import interactionPlugin from "@fullcalendar/interaction";
import timeGridPlugin from "@fullcalendar/timegrid";
import resourceTimeGridPlugin from '@fullcalendar/resource-timegrid';
import allLocales from '@fullcalendar/core/locales-all'
@ -10044,10 +10045,7 @@ const DisplayPartnerSession = (props) => {
const handleSelect = (info) => {
/*if (String(selected_attendee_email).length < 2) {
alert(" Vous devez choisir un stagiaire");
return;
}
setp_detail_title("Nouvelle")
@ -10060,12 +10058,26 @@ const DisplayPartnerSession = (props) => {
setStartDate(info.start);
setendDate(info.end);
setDialog_1_open(true);*/
setDialog_DIALOG_AGENDA_open(true);
};
const [p_detail_event_id, setp_detail_event_id] = useState();
const [p_detail_title, setp_detail_title] = useState();
const [p_detail_start, setp_detail_start] = useState();
const [p_detail_end, setp_detail_end] = useState();
const [p_detail_comment, setp_detail_comment] = useState();
const [p_detail_sequence_session_id, setp_detail_sequence_session_id] = useState("");
const [p_detail_justified, setp_detail_justified] = useState(false);
const [p_detail_event_type, setp_detail_event_type] = useState();
const [startDate, setStartDate] = useState(new Date());
const [endDate, setendDate] = useState(new Date());
const [mysy_events, setmysy_events] = useState();
const [Partner_Debut_Journee, setPartner_Debut_Journee] = useState("7:00");
@ -10073,51 +10085,72 @@ const DisplayPartnerSession = (props) => {
const handleEventClick = (arg) => {
/* if (String(selected_attendee_email).length < 2) {
alert(" Vous devez choisir un stagiaire");
return;
}
setp_detail_title(arg.event.title)
setp_detail_start(arg.event.start)
setp_detail_end(arg.event.end)
setp_detail_event_id(arg.event.id);
if (arg.event.extendedProps.comment) {
setp_detail_comment(arg.event.extendedProps.comment);
}
else
setp_detail_comment("");
if (arg.event.extendedProps.justified) {
if (String(arg.event.extendedProps.justified) === "true")
setp_detail_justified(true);
else
setp_detail_justified(false);
}
else
setp_detail_justified(false);
if (arg.event.extendedProps.type) {
setp_detail_event_type(arg.event.extendedProps.type);
}
else
setp_detail_event_type("");
setStartDate(arg.event.start);
setendDate(arg.event.end);
setDialog_1_open(true);
*/
setp_detail_title(arg.event.title)
setp_detail_start(arg.event.start)
setp_detail_end(arg.event.end)
setp_detail_event_id(arg.event.id);
/*
if (arg.event.extendedProps.comment) {
setp_detail_comment(arg.event.extendedProps.comment);
}
else
setp_detail_comment("");
if (arg.event.extendedProps.justified) {
if (String(arg.event.extendedProps.justified) === "true")
setp_detail_justified(true);
else
setp_detail_justified(false);
}
else
setp_detail_justified(false);
if (arg.event.extendedProps.type) {
setp_detail_event_type(arg.event.extendedProps.type);
}
else
setp_detail_event_type("");
*/
setStartDate(arg.event.start);
setendDate(arg.event.end);
setDialog_DIALOG_AGENDA_open(true);
}
const [Dialog_DIALOG_AGENDA_message, setDialog_DIALOG_AGENDA_message] = React.useState(false);
const [Dialog_DIALOG_AGENDA_open, setDialog_DIALOG_AGENDA_open] = React.useState(false);
function Dialog_DIALOG_AGENDA_handle_change_participant_session(message) {
setDialog_DIALOG_AGENDA_message(message);
setDialog_DIALOG_AGENDA_open(true);
}
const Dialog_DIALOG_AGENDA_handleClose = () => {
//alert(" Utiliser le bouton 'fermer' ");
//setOpen(false);
};
const Dialog_DIALOG_AGENDA_handleClose_buton = () => {
setDialog_DIALOG_AGENDA_open(false);
};
const New_Option_Type_Event = [
{ "id": "0", "label": "Absence", "value": "absence" },
{ "id": "1", "label": "Planning", "value": "planning" },
{ "id": "2", "label": "Autre", "value": "autre" },
]
return (
<div className="displaypartnersession">
@ -10361,6 +10394,219 @@ const DisplayPartnerSession = (props) => {
</Dialog>
{/*** fin dialog choix modele sequence */}
{/**** Dialogue pour agenda */}
<Dialog
open={Dialog_DIALOG_AGENDA_open}
onClose={Dialog_DIALOG_AGENDA_handleClose}
className="module_agenda"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
{Dialog_DIALOG_AGENDA_message}
</DialogContentText>
<div className="session_caract_Dialog" >
<nav style={{ "float": "left", "width": "30%", "paddingTop": "15px" }}> Type </nav>
<nav style={{ "float": "right", "width": "65%" }}>
<Autocomplete
disablePortal
name="event_dialog_type"
id="event_dialog_type"
value={p_detail_event_type}
fullWidth
options={New_Option_Type_Event}
onChange={(event, value) => {
if (String(props.write_access) === "1") {
if (value && value.value) {
setp_detail_event_type(value.value);
}
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>
</nav>
</div>
{String(p_detail_event_type) !== "planning" && <div className="session_caract_Dialog" >
<nav style={{ "float": "left", "width": "30%", "paddingTop": "15px" }}> Justifié ? </nav>
<nav style={{ "float": "right", "width": "65%" }}
onClick={(e) => {
if (p_detail_justified === true)
setp_detail_justified(false);
else
setp_detail_justified(true);
}
}
id="toggleSwitchNav" name="toggleSwitchNav">
<ToggleSwitch id="toggleSwitch" name="toggleSwitch" checked={p_detail_justified}
/>
</nav>
</div>}
<div className="session_caract_Dialog" > Titre
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_title"
id="event_dialog_title"
fullWidth
value={p_detail_title}
onChange={(e) => {
if (String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "")
setp_detail_title(e.target.value);
}
}
/>
</div>
<div className="session_caract_Dialog" > Debut
<DatePicker
name="event_dialog_start"
id="event_dialog_start"
selected={startDate}
onChange={(date) => {
if (String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "")
return setStartDate(date);
}
}
className="disabled_style session_caract_Dialog_DatePicker"
locale='fr-FR'
showTimeSelect
timeFormat="HH:mm"
timeIntervals={15}
dateFormat="dd/MM/yyyy HH:mm"
is24Hour
/>
</div>
<div className="session_caract_Dialog" > Fin
<DatePicker
name="event_dialog_end"
id="event_dialog_end"
selected={endDate}
onChange={(date) => {
if (String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "")
return setendDate(date);
}
}
className="disabled_style session_caract_Dialog_DatePicker"
locale='fr-FR'
showTimeSelect
timeFormat="HH:mm"
timeIntervals={15}
dateFormat="dd/MM/yyyy HH:mm"
is24Hour
/>
</div>
<div className="session_caract_Dialog_comment_2_lines" > Commentaire
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_comment"
id="event_dialog_comment"
fullWidth
value={p_detail_comment}
onChange={(e) => {
console.log(" dans comment p_detail_sequence_session_id = ", p_detail_sequence_session_id);
if (String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "")
setp_detail_comment(e.target.value);
}
}
multiline
minRows={2}
maxRows={2}
rows={2}
/>
</div>
</DialogContent>
<DialogActions>
<div className="div_row">
{String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "" && <div className="div_row_gauche">
{p_detail_event_id && String(p_detail_event_id) !== "" && <Button onClick={"Update_One_Agenda_Event"} className="bton_enreg_dialog">Mettre à jour</Button>}
{(!p_detail_event_id || String(p_detail_event_id) === "") && <Button onClick={"Update_One_Agenda_Event"} className="bton_enreg_dialog">Ajouter</Button>}
</div>}
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Button onClick={Dialog_DIALOG_AGENDA_handleClose_buton} className="bton_annule_dialog" >Fermer</Button>
</div>
</div>
</DialogActions>
{String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "" && p_detail_event_id && String(p_detail_event_id) !== "" &&
<DialogActions>
<div className="div_row" style={{ "textAlign": "center" }}>
<Button onClick={(e) => {
const response = window.confirm("Confirmez-vous la suppression de l'événement ?");
if (!response) {
return;
}
"Delete_One_Agenda_Event"();
}
} className="bton_supprime_dialog">Supprimer l'événement</Button>
</div>
</DialogActions>}
</Dialog>
{/*** fin dialogue pr agenda */}
<Dialog
open={Dialog_1_open}
onClose={Dialog_1_handleClose}
@ -14011,7 +14257,7 @@ const DisplayPartnerSession = (props) => {
<div className="session_data">
<div style={{ "textAlign": "right", "float": "right", "width": "100%", "marginRight":'20px' }}>
<div style={{ "textAlign": "right", "float": "right", "width": "100%", "marginRight": '20px' }}>
Affichage : <nav className="mode_affichage" onClick={func_display_planning_view}> <FcPlanner /> planning </nav>
<nav className="mode_affichage" onClick={func_display_list_view}> <CiBoxList /> Liste </nav>
</div>
@ -14255,7 +14501,7 @@ const DisplayPartnerSession = (props) => {
}}
//eventContent={(info) => <EventItem info={info} />}
//plugins={[timeGridPlugin]}
plugins={[timeGridPlugin, daygridPlugin, interactionPlugin]}
plugins={[timeGridPlugin, daygridPlugin, interactionPlugin, resourceTimeGridPlugin]}
views={["dayGridMonth", "dayGridWeek", "dayGridDay"]}
slotMinTime={Partner_Debut_Journee}
slotMaxTime={Partner_Fin_Journee}

View File

@ -42,6 +42,8 @@ import { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
import { gridClasses } from '@mui/x-data-grid';
import Link from '@mui/material/Link';
import { PiDotsThree } from "react-icons/pi";
const DisplayPartnerUnite_Enseignement = (props) => {
const history = useHistory();
@ -52,11 +54,18 @@ const DisplayPartnerUnite_Enseignement = (props) => {
var date_today_90j = new Date();
date_today_90j.setDate(date_today_90j.getDate() + 90);
const [p_filtre1, setp_filtre1] = useState();
const [p_filtre1_value, setp_filtre1_value] = useState();
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_filtre3, setp_filtre3] = useState("");
const [p_filtre3_value, setp_filtre3_value] = useState();
const [p_filtre4, setp_filtre4] = useState("");
const [p_filtre4_value, setp_filtre4_value] = useState();
const [p_filtre2, setp_filtre2] = useState();
const [p_filtre2_value, setp_filtre2_value] = useState();
const [isLoading, setLoading] = useState();
@ -65,9 +74,9 @@ const DisplayPartnerUnite_Enseignement = (props) => {
const columns = [
{ field: '_id', headerName: '_id', hide: true },
{ field: 'id', headerName: 'id', hide: true },
{ field: 'code', headerName: 'Code', flex: 1, hide: false, editable: false },
{ field: 'titre', headerName: 'Titre', flex: 1, hide: false, editable: false },
{ field: 'duration_concat', headerName: 'Durée', flex: 1, hide: true, editable: false },
{ field: 'code', headerName: 'Code', flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'titre', headerName: 'Titre', flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'duration_concat', headerName: 'Durée', flex: 1, hide: false, editable: false, renderCell: (params) => <ExpandableCell_50 {...params} />, },
{ field: 'duration', headerName: 'Durée', flex: 1, hide: true, editable: false },
{ field: 'duration_unite', headerName: 'Unit.', flex: 1, hide: true, editable: false },
@ -133,6 +142,38 @@ const DisplayPartnerUnite_Enseignement = (props) => {
]
function ExpandableCell_50({ value }) {
const [expanded, setExpanded] = React.useState(false);
return (
<nav>
{value && <div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
{expanded ? value : String(value).slice(0, 50)}&nbsp;
{value.length > 50 && (
// eslint-disable-next-line jsx-a11y/anchor-is-valid
<Link
type="button"
component="button"
sx={{ fontSize: 'inherit' }}
onClick={() => setExpanded(!expanded)}
>
{expanded ? <nav> <PiDotsThree />Réduire</nav> : <nav> <PiDotsThree />Voir</nav>}
</Link>
)}
</div>}
{!value && <div style={{ paddingLeft: "5px", paddingRight: "15px", "display": "block", wordBreak: "break-all" }}>
&nbsp;
</div>
}
</nav>
);
}
function handleClick_delete(event, cellValues) {
Delete_Given_UE(cellValues.row._id);
@ -243,6 +284,95 @@ const DisplayPartnerUnite_Enseignement = (props) => {
})
}
const [Getall_Parter_Unite_Enseignement_with_Filter_api, setGetall_Parter_Unite_Enseignement_with_Filter_api] = useState();
const [Getall_Parter_Unite_Enseignement_with_Filter_message, setGetall_Parter_Unite_Enseignement_with_Filter_message] = useState();
const [Getall_Parter_Unite_Enseignement_with_Filter_result, setGetall_Parter_Unite_Enseignement_with_Filter_result] = useState([]);
function Getall_Parter_Unite_Enseignement_with_Filter(event) {
var form = new FormData();
// Recuperation des parametres
var filtre1 = p_filtre1;
var filtre2 = p_filtre2;
var filtre3 = p_filtre3;
var filtre4 = p_filtre4;
var filtre1_value = "";
var filtre2_value = "";
var filtre3_value = "";
var filtre4_value = "";
// Recuperation des valeurs de filtres
if (p_filtre1_value) {
filtre1_value = p_filtre1_value;
form.append(filtre1, filtre1_value);
}
if (p_filtre2_value) {
filtre2_value = p_filtre2_value;
form.append(filtre2, filtre2_value);
}
if (p_filtre3_value) {
filtre3_value = p_filtre3_value;
form.append(filtre3, p_filtre3_value);
}
if (p_filtre4_value) {
filtre4_value = p_filtre4_value;
form.append(filtre4, p_filtre4_value);
}
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_List_Unite_Enseignement_with_filter/";
axios.post(myurl, form).then(res => {
if (String(res.data.status) === String("true")) {
//console.log(" In Getall_Parter_Unite_Enseignement_with_Filter res.data.status = " + res.data.status);
//console.log(" In Getall_Parter_Unite_Enseignement_with_Filter res.data.message r_class = " + res.data.message);
setGetall_Parter_Unite_Enseignement_with_Filter_api("true");
setGetall_Parter_Unite_Enseignement_with_Filter_result(res.data.message);
setRows(res.data.message);
}
else {
setGetall_Parter_Unite_Enseignement_with_Filter_api("false");
setGetall_Parter_Unite_Enseignement_with_Filter_message(res.data.message);
alert(res.data.message);
}
}).catch((error) => {
console.warn('Not good man :( Getall_Parter_Unite_Enseignement_with_Filter = ', error);
setGetall_Parter_Unite_Enseignement_with_Filter_api("false");
alert(" Impossible de recuperer la liste des unités d'enseignement ");
//setmyApimyApiMessage("")
})
}
function clean_all_filters() {
setgridline_id('');
setp_filtre1("");
setp_filtre1_value("");
setp_filtre2("");
setp_filtre2_value("");
setp_filtre3("");
setp_filtre3_value("");
setp_filtre4("");
setp_filtre4_value("");
setSelectionModel([]);
Getall_Parter_Unite_Enseignement();
}
const [Get_Given_Unite_Enseignement_api, setGet_Given_Unite_Enseignement_api] = useState();
const [Get_Given_Unite_Enseignement_message, setGet_Given_Unite_Enseignement_message] = useState();
@ -321,6 +451,13 @@ const DisplayPartnerUnite_Enseignement = (props) => {
setfield_objectif("");
}
if (local_ue.methode_evaluation) {
setfield_suivi_eval(local_ue.methode_evaluation);
} else {
setfield_suivi_eval("");
}
if (local_ue.methode_pedagogique) {
setfield_methode_pedago(local_ue.methode_pedagogique);
} else {
@ -328,8 +465,6 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
if (local_ue.description) {
setfield_description(local_ue.description);
} else {
@ -602,8 +737,14 @@ const DisplayPartnerUnite_Enseignement = (props) => {
clean_fields();
alert(res.data.message);
if (document.getElementById('myRef_head')) {
var divh = document.getElementById('myRef_head').offsetTop;
window.scrollTo({
top: divh,
behavior: "smooth",
});
}
}
else {
setAdd_Update_UE_Data_api("false");
@ -626,6 +767,14 @@ const DisplayPartnerUnite_Enseignement = (props) => {
setdisplay_ue("0");
setue_data_edit_mode("");
setadd_one_ue("1");
if (document.getElementById('myRef')) {
var divh = document.getElementById('myRef').offsetTop;
window.scrollTo({
top: divh,
behavior: "smooth",
});
}
}
const [p_detail_code, setp_detail_code] = useState("");
@ -716,6 +865,14 @@ const DisplayPartnerUnite_Enseignement = (props) => {
setadd_one_ue("");
}
const New_Option_Filter = [
{ "id": "titre", "label": "Titre ", "value": "titre" },
{ "id": "code", "label": "Code", "value": "code" },
{ "id": "", "label": "", "value": "" },
{ "id": "1", "label": "", "value": "1" }, // Cette ligne pour couvrir l'ajout d'une ligne de filter. C'est fait expres.
]
return (
<div className="displayPartnerunite_enseignement">
{isLoading && <div className="loader-container">
@ -747,21 +904,30 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="titre1"> Utilisez les filtres !</div>
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter" >
<TextField
{New_Option_Filter && New_Option_Filter.length > 0 && <Autocomplete
disablePortal
name="filtre1"
label="Choisir un champ"
select
sx={{ m: 1, width: '100%' }}
value={p_filtre1}
onChange={(e) => {
setp_filtre1(e.target.value);
id="filtre1"
className="disabled_style"
value={New_Option_Filter.filter((data) => (data).value === String(p_filtre1))[0].label}
options={New_Option_Filter}
onChange={(event, value) => {
if (value && value.value) {
setp_filtre1(value.value);
}
}}
>
<MenuItem value="config_name" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Nom du point de configuration &nbsp;</MenuItem>
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>}
</TextField>
</div>
@ -810,8 +976,8 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<Tooltip className="tooltip_css" id="my-tooltip02" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip02" data-tooltip-html="Supprimer cette ligne de filtre">
&nbsp; <MdRemoveCircleOutline onClick={(e) => {
setp_filtre1();
setp_filtre1_value();
setp_filtre1("");
setp_filtre1_value("");
}}
/>
</a>
@ -820,15 +986,184 @@ const DisplayPartnerUnite_Enseignement = (props) => {
</div>
{p_filtre2 &&
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter">
{New_Option_Filter && New_Option_Filter.length > 0 && <Autocomplete
disablePortal
name="filtre2"
id="filtre2"
className="disabled_style"
value={New_Option_Filter.filter((data) => (data).value === String(p_filtre2))[0].label}
options={New_Option_Filter}
onChange={(event, value) => {
if (value && value.value) {
setp_filtre2(value.value);
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>}
</div>
<div className="div_row_droite texte_area_filter_value" style={{ "marginTop": "0.5rem" }}>
{String(p_filtre2).length > 2 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre2_value"
id="filtre2_value"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_filtre2_value}
onChange={(e) => setp_filtre2_value(e.target.value)}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<AiFillCloseCircle
style={{ 'cursor': "pointer", "color": "orangered" }}
onClick={(e) => {
setp_filtre2_value("");
}} />
</InputAdornment>
),
}}
/>}
</div>
{String(p_filtre2).length > 2 && <div className='filter_bton_add' >
<Tooltip className="tooltip_css" id="my-tooltip03" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip03" data-tooltip-html="Ajouter une nouvelle ligne de filtre">
&nbsp; <MdAddCircleOutline
onClick={(e) => {
setp_filtre3("1");
setp_filtre3_value("");
}}
/>
</a>
</div>}
{String(p_filtre2).length > 2 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip04" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip04" data-tooltip-html="Supprimer cette ligne de filtre">
&nbsp; <MdRemoveCircleOutline
onClick={(e) => {
setp_filtre2("");
setp_filtre2_value("");
}}
/>
</a>
</div>}
</div>
}
{p_filtre3 &&
<div className="div_row" style={{ "marginBottom": "5px" }}>
<div className="div_row_gauche texte_area_filter">
{New_Option_Filter && New_Option_Filter.length > 0 && <Autocomplete
disablePortal
name="filtre3"
id="filtre3"
className="disabled_style"
value={New_Option_Filter.filter((data) => (data).value === String(p_filtre3))[0].label}
options={New_Option_Filter}
onChange={(event, value) => {
if (value && value.value) {
setp_filtre3(value.value);
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>}
</div>
<div className="div_row_droite texte_area_filter_value" style={{ "marginTop": "0.5rem" }}>
{String(p_filtre3).length > 2 &&
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre3_value"
id="filtre3_value"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={p_filtre3_value}
onChange={(e) => setp_filtre3_value(e.target.value)}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<AiFillCloseCircle
style={{ 'cursor': "pointer", "color": "orangered" }}
onClick={(e) => {
setp_filtre3_value("");
}} />
</InputAdornment>
),
}}
/>}
</div>
{String(p_filtre2).length > 2 && <div className='filter_bton_add' >
<Tooltip className="tooltip_css" id="my-tooltip03" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip03" data-tooltip-html="Ajouter une nouvelle ligne de filtre">
&nbsp; <MdAddCircleOutline
onClick={(e) => {
setp_filtre4("1");
setp_filtre4_value("");
}}
/>
</a>
</div>}
{String(p_filtre3).length > 2 && <div className='filter_bton_add'>
<Tooltip className="tooltip_css" id="my-tooltip05" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip05" data-tooltip-html="Supprimer cette ligne de filtre">
&nbsp; <MdRemoveCircleOutline onClick={(e) => {
setp_filtre3("");
setp_filtre3_value("");
}} />
</a>
</div>}
</div>
}
<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_Parter_Invoice_With_Filter"}>Rechercher
<Button variant="contained" className="bton_enreg" onClick={Getall_Parter_Unite_Enseignement_with_Filter}>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={clean_all_filters}>Annuler
</Button>
</div>
@ -839,6 +1174,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
</div>
<div className="div_row">
<div className="session_data">
<div style={{ "border": "None" }}>
@ -980,7 +1316,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined" onClick={submenu_add_one_UE}
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout une UE &nbsp;
id='menu_import_participant' name='menu_import_participant'>Ajout 1 UE &nbsp;
<IoAddCircleOutline style={{ "fontSize": "x-large", "color": "green" }} />
</Button>
</div>
@ -1039,14 +1375,14 @@ const DisplayPartnerUnite_Enseignement = (props) => {
required
name="duree_01"
id="duree_01"
InputLabelProps={{
shrink: true,
}}
//disabled={true}
className="disabled_style"
value={p_detail_duration}
/>
</div>
@ -1064,7 +1400,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
//disabled={true}
className="disabled_style"
value={p_detail_duration_unite}
/>
</div>
@ -1125,7 +1461,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="training_text">
<div className="plus_produit_desabled">
<div className="titre_training_text"> Pré-requis * (max 1000 caractères) </div>
<div className="titre_training_text"> Pré-requis (max 1000 caractères) </div>
<Editor
name="prerequis"
id="prerequis"
@ -1164,7 +1500,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="training_text">
<div className="plus_produit_desabled">
<div className="titre_training_text"> Description * (max 1000 caractères) </div>
<div className="titre_training_text"> Description (max 1000 caractères) </div>
<Editor
name="description"
id="description"
@ -1199,7 +1535,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="training_text" >
<div className="plus_produit_desabled">
<div className="titre_training_text"> Objectif* (max 1000 caractères) </div>
<div className="titre_training_text"> Objectif (max 1000 caractères) </div>
<Editor
onInit={(evt, editor) => editorRef_objectif.current = editor}
initialValue={field_objectif}
@ -1338,13 +1674,13 @@ const DisplayPartnerUnite_Enseignement = (props) => {
}
{String(ue_data_edit_mode) !== "1" &&
<div className="div_row" style={{padding : "10px"}}>
<div className="div_row" style={{ padding: "10px" }}>
<div className="training_text">
<div className="plus_produit_desabled">
<div className="titre_training_text"> <b><u> Pré-requis :</u></b></div>
{parse(field_preprequis.replace(/(<([^>]+)>)/ig, '')) }
{parse(field_preprequis.replace(/(<([^>]+)>)/ig, ''))}
</div>
<br />
</div>
@ -1352,8 +1688,8 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="training_text">
<div className="plus_produit_desabled">
<div className="titre_training_text"> <b><u> Desscription :</u></b></div>
{parse(field_description.replace(/(<([^>]+)>)/ig, '')) }
{parse(field_description.replace(/(<([^>]+)>)/ig, ''))}
</div>
<br />
</div>
@ -1361,8 +1697,8 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="training_text">
<div className="plus_produit_desabled">
<div className="titre_training_text"> <b><u> Objectif : </u></b></div>
{parse(field_objectif.replace(/(<([^>]+)>)/ig, '')) }
{parse(field_objectif.replace(/(<([^>]+)>)/ig, ''))}
</div>
<br />
</div>
@ -1371,8 +1707,8 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="training_text">
<div className="plus_produit_desabled">
<div className="titre_training_text"> <b><u> Programme :</u></b></div>
{parse(field_programme.replace(/(<([^>]+)>)/ig, '')) }
{parse(field_programme.replace(/(<([^>]+)>)/ig, ''))}
</div>
<br />
@ -1381,8 +1717,9 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="training_text">
<div className="plus_produit_desabled">
<div className="titre_training_text"> <b><u> Suivi & Evaluation :</u></b></div>
{parse(field_suivi_eval.replace(/(<([^>]+)>)/ig, '')) }
{parse(field_suivi_eval.replace(/(<([^>]+)>)/ig, ''))}
</div>
<br />
</div>
@ -1391,8 +1728,8 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="training_text">
<div className="plus_produit_desabled">
<div className="titre_training_text"> <b><u> Méthode Pédagogique :</u></b></div>
{parse(field_methode_pedago.replace(/(<([^>]+)>)/ig, '')) }
{parse(field_methode_pedago.replace(/(<([^>]+)>)/ig, ''))}
</div>
<br />
</div>
@ -1531,7 +1868,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="training_text">
<div className="plus_produit_desabled">
<div className="titre_training_text"> Pré-requis * (max 1000 caractères) </div>
<div className="titre_training_text"> Pré-requis (max 1000 caractères) </div>
<Editor
name="prerequis"
id="prerequis"
@ -1570,7 +1907,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="training_text">
<div className="plus_produit_desabled">
<div className="titre_training_text"> Description * (max 1000 caractères) </div>
<div className="titre_training_text"> Description (max 1000 caractères) </div>
<Editor
name="description"
id="description"
@ -1605,7 +1942,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="training_text" >
<div className="plus_produit_desabled">
<div className="titre_training_text"> Objectif* (max 1000 caractères) </div>
<div className="titre_training_text"> Objectif (max 1000 caractères) </div>
<Editor
onInit={(evt, editor) => editorRef_objectif.current = editor}
initialValue={field_objectif}
@ -1748,7 +2085,7 @@ const DisplayPartnerUnite_Enseignement = (props) => {
<div className="div_row_gauche" style={{ "textAlign": 'left', 'marginLeft': '15px' }}>
<Button variant="contained" className="bton_enreg" onClick={Add_Update_UE_Data}>Enregistrer
<Button variant="contained" className="bton_enreg" onClick={Add_Update_UE_Data}>Enregistrer
</Button>
</div>

View File

@ -54,6 +54,9 @@ import FullCalendar, { formatDate } from "@fullcalendar/react";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import interactionPlugin from "@fullcalendar/interaction";
import resourceTimeGridPlugin from '@fullcalendar/resource-timegrid';
import resourceTimelinePlugin from '@fullcalendar/resource-timeline'
import {
ListItem,
@ -1033,6 +1036,36 @@ const Module_Agenda = (props) => {
{ "id": "1", "label": "Materiel", "value": "ressource_materielle" },
]
const events_test = [{
"id": 1,
"type": null,
"resourceIds": [21],
"title": "Meeting With John",
"start": "2024-05-04 09:00:00",
"end": "2024-05-04 11:20:00"
},
{
"id": 1,
"type": null,
"resourceIds": [22],
"title": "Meeting With ssss",
"start": "2024-05-04 09:30:00",
"end": "2024-05-04 14:20:00"
}
]
const resources_test = [
{
id: 21,
title: "User A"
},
{
id: 22,
title: "User B"
}
]
return (
<div className="module_agenda">
{isLoading && <div className="loader-container">
@ -1078,9 +1111,9 @@ const Module_Agenda = (props) => {
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps = {{...params.inputProps, style: { fontSize: 12, height:"1.4rem" }}}
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
/>
}
/>
{/*<TextField
@ -1252,21 +1285,21 @@ const Module_Agenda = (props) => {
{String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "" && p_detail_event_id && String(p_detail_event_id) !== "" &&
<DialogActions>
<div className="div_row" style={{ "textAlign": "center" }}>
<Button onClick={(e) => {
const response = window.confirm("Confirmez-vous la suppression de l'événement ?");
if (!response) {
return;
{String(props.write_access) === "1" && String(p_detail_sequence_session_id) === "" && p_detail_event_id && String(p_detail_event_id) !== "" &&
<DialogActions>
<div className="div_row" style={{ "textAlign": "center" }}>
<Button onClick={(e) => {
const response = window.confirm("Confirmez-vous la suppression de l'événement ?");
if (!response) {
return;
}
Delete_One_Agenda_Event();
}
Delete_One_Agenda_Event();
}
} className="bton_supprime_dialog">Supprimer l'événement</Button>
</div>
} className="bton_supprime_dialog">Supprimer l'événement</Button>
</div>
</DialogActions>}
</DialogActions>}
</Dialog>
@ -1312,9 +1345,9 @@ const Module_Agenda = (props) => {
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps = {{...params.inputProps, style: { fontSize: 12, height:"1.4rem" }}}
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
/>
}
/>
@ -1423,9 +1456,9 @@ const Module_Agenda = (props) => {
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps = {{...params.inputProps, style: { fontSize: 12, height:"1.4rem" }}}
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
/>
}
/>
@ -1493,7 +1526,7 @@ const Module_Agenda = (props) => {
}}
//eventContent={(info) => <EventItem info={info} />}
//plugins={[timeGridPlugin]}
plugins={[timeGridPlugin, daygridPlugin, interactionPlugin]}
plugins={[timeGridPlugin, daygridPlugin, interactionPlugin, resourceTimeGridPlugin]}
views={["dayGridMonth", "dayGridWeek", "dayGridDay"]}
slotMinTime={Partner_Debut_Journee}
slotMaxTime={Partner_Fin_Journee}
@ -1506,10 +1539,10 @@ const Module_Agenda = (props) => {
/>
</div>
</div>
)
}