2/04/24 - 20h30

recette2
cherif 2024-04-02 20:30:30 +02:00
parent e395de332f
commit 14a34145c7
10 changed files with 2739 additions and 1426 deletions

View File

@ -1,27 +1,24 @@
import React, { useRef, useState, useEffect } from "react";
import Box from '@mui/material/Box';
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import Button from '@mui/material/Button';
import axios from "axios";
import DeleteIcon from '@mui/icons-material/Delete';
import { getCookie, setCookie } from 'react-use-cookie';
import { Alert } from "@mui/material";
import { AiTwotoneEdit, AiTwotoneSave } from "react-icons/ai";
import profileimg from "../mysy_img/MYSY-profil-2.png";
import Abonnement from "./Abonnement";
import { ContentPasteSearchOutlined, PropaneSharp, ResetTvRounded } from "@mui/icons-material";
import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { AiTwotoneEdit, AiTwotoneSave } from "react-icons/ai";
import { useHistory } from "react-router-dom";
import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io";
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { RichTextEditor } from '@mantine/rte';
import { Editor } from '@tinymce/tinymce-react';
import { IoArrowUndoCircle } from "react-icons/io5";
import { GrUserAdmin, GrOrderedList } from "react-icons/gr";
import parse from 'html-react-parser';
import fileDownload from 'js-file-download'
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import Popup from 'reactjs-popup';
@ -29,6 +26,7 @@ import 'reactjs-popup/dist/index.css';
import GestionAdministrative from "./GestionAdministrative";
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import Autocomplete from '@mui/material/Autocomplete';
import { Fab } from "@material-ui/core";
const AddClassManual = (props) => {
const history = useHistory();
@ -470,8 +468,6 @@ const AddClassManual = (props) => {
setdatamodification("0");
window.scrollTo({
top: 0,
behavior: "smooth",
@ -489,7 +485,7 @@ const AddClassManual = (props) => {
const [field_suivi_eval, setfield_suivi_eval] = useState("");
const [field_prerequis, setfield_prerequis] = useState("");
const [field_pourqui, setfield_pourqui] = useState("");
const [field_mots_cle, setfield_mots_cle] = useState("");
@ -498,6 +494,8 @@ const AddClassManual = (props) => {
const [field_datelieu, setfield_datelieu] = useState("");
const [field_zone_diffusion, setfield_zone_diffusion] = useState("");
const [selected_class_id, setselected_class_id] = useState("");
function fillfield(event) {
setisupdateclass(true);
@ -536,9 +534,18 @@ const AddClassManual = (props) => {
if (mylocaltraining) {
setdisplayedinternalurl(mylocaltraining.internal_url);
if (mylocaltraining._id) {
setselected_class_id(mylocaltraining._id);
Get_List_Of_All_PJ(mylocaltraining._id);
}
document.getElementsByName("external_code")[0].value = mylocaltraining.external_code;
document.getElementsByName("title")[0].value = mylocaltraining.title;
if (mylocaltraining.objectif) {
//document.getElementsByName("objectif")[0].value = mylocaltraining.objectif;
//alert(" laaaaa ");
@ -1068,7 +1075,7 @@ const AddClassManual = (props) => {
formData.append('methode_pedagogique', methode_pedago);
formData.append('condition_handicape', handicap);
formData.append('suivi_eval', suivi_eval);
formData.append('suivi_eval', suivi_eval);
formData.append('prerequis', prerequis);
@ -1859,6 +1866,367 @@ const AddClassManual = (props) => {
const [p_class_level_label, setp_class_level_label] = useState("Aucune certification");
// -- Gestion pièces jointes
const [Download_one_attached_document_api, setDownload_one_attached_document_api] = useState();
const [Download_one_attached_document_result, setDownload_one_attached_document_result] = useState();
const [Download_one_attached_document_message, setDownload_one_attached_document_message] = useState();
const Download_one_attached_document = (event) => {
const stored_cookie = getCookie('tokenmysypart');
var nom_fiche_detaillee = "Fiche_Detaillee.pdf";
var token = stored_cookie;
var file_name = event.target.id;
var url = process.env.REACT_APP_API_URL + "myclass/api/Get_Stored_Downloaded_File/" + token + "/" + file_name;
setLoading(true);
axios.get(url, { responseType: 'blob', },)
.then((res) => {
setLoading(false);
fileDownload(res.data, nom_fiche_detaillee);
setDownload_one_attached_document_api("true");
}).catch((error) => {
setLoading(false);
console.error('Error:', error);
setDownload_one_attached_document_api("false");
});
}
const [tab_convention_pieces_jointes_result, settab_convention_pieces_jointes_result] = useState([]);
const [file_1_name, setfile_1_name] = useState();
const [sessions_file_change_1_api, setsessions_file_change_1_api] = useState();
const [sessions_file_change_1_result, setsessions_file_change_1_result] = useState();
const [sessions_file_change_1_message, setsessions_file_change_1_message] = useState();
const sessions_file_change_1 = event => {
const fileUploaded = event.target.files[0];
let file_size = event.target.files[0].size;
let file_type = event.target.files[0].type;
console.log("file_size 2 = ", file_size, " file_type = ", file_type);
if (file_size > 10000000) {
alert("Le fichier ne doit pas depasser un 1 Méga octets");
console.log("Le fichier ne doit pas depasser un 1 Méga octets");
return;
}
setfile_1_name(event.target.files[0]);
const formData = new FormData();
formData.append('File', fileUploaded);
//formData.append('token', 'K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA');
const stored_cookie = getCookie('tokenmysypart');
//formData.append("token", stored_cookie);
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);
return;
};
const [sessions_file_change_1_convention_api, setsessions_file_change_1_convention_api] = useState();
const [sessions_file_change_1_convention_result, setsessions_file_change_1_convention_result] = useState();
const [sessions_file_change_1_convention_message, setsessions_file_change_1_convention_message] = useState();
const sessions_file_change_1_convention = event => {
const fileUploaded = event.target.files[0];
let file_size = event.target.files[0].size;
let file_type = event.target.files[0].type;
if (file_type !== "application/pdf") {
alert("Le fichier n'est pas de type PDF");
return;
}
if (file_size > 10000000) {
alert("Le fichier ne doit pas depasser un 1 Méga octets");
console.log("Le fichier ne doit pas depasser un 1 Méga octets");
return;
}
//var new_node = {'name':event.target.files[0].name, 'type':event.target.files[0].type}
var new_tmp = [];
if (tab_convention_pieces_jointes_result && tab_convention_pieces_jointes_result.length > 0) {
tab_convention_pieces_jointes_result.map((x) => {
new_tmp.push(x);
});
}
new_tmp.push(event.target.files[0])
settab_convention_pieces_jointes_result(new_tmp);
console.log(" tab_convention_pieces_jointes_result = ", tab_convention_pieces_jointes_result)
return;
};
const [file_2_name, setfile_2_name] = useState();
const [sessions_file_change_2_api, setsessions_file_change_2_api] = useState();
const [sessions_file_change_2_result, setsessions_file_change_2_result] = useState();
const [sessions_file_change_2_message, setsessions_file_change_2_message] = useState();
const sessions_file_change_2 = event => {
const fileUploaded = event.target.files[0];
let file_size = event.target.files[0].size;
let file_type = event.target.files[0].type;
console.log("file_size 1 = ", file_size, " file_type = ", file_type);
if (file_size > 10000000) {
alert("Le fichier ne doit pas depasser un 1 Méga octets");
console.log("Le fichier ne doit pas depasser un 1 Méga octets");
return;
}
setfile_2_name(event.target.files[0]);
const formData = new FormData();
formData.append('File', fileUploaded);
//formData.append('token', 'K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA');
const stored_cookie = getCookie('tokenmysypart');
//formData.append("token", stored_cookie);
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);
return;
};
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();
function Record_All_PJ() {
if (!p_detail_one_file_to_download_type_name) {
alert(" Vous devez donner un nom à la pièce jointe");
return;
}
if (file_1_name && file_1_name.name) {
//console.log(" ### Traitement de : ", file_1_name.name);
const formData = new FormData();
formData.append('File', file_1_name);
//formData.append('token', 'K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA');
const stored_cookie = getCookie('tokenmysypart');
formData.append("token", stored_cookie);
formData.append("file_business_object", p_detail_one_file_to_download_type_name);
formData.append("file_name", file_1_name.name);
formData.append("status", "0");
formData.append("object_owner_collection", "myclass");
formData.append("object_owner_id", selected_class_id);
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);
setLoading(true);
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Store_User_Downloaded_File/",
{
method: 'POST',
body: formData,
}
)
.then((response) => response.json())
.then((result) => {
setLoading(false);
//console.log(" ## result['status'] = ", result['status'])
if (String(result['status']) === String("true")) {
//console.log('Success:', result['message']);
setRecord_All_PJ_result(result['message']);
setRecord_All_PJ_api("true");
Get_List_Of_All_PJ(selected_class_id);
setfile_1_name();
setp_detail_one_file_to_download_type_name();
//GetCurrentClass_trainingsession();
alert(" La pièce jointe " + file_1_name.name + " a été bien enregistrée")
}
else {
setRecord_All_PJ_message(result['message']);
setRecord_All_PJ_api("false");
alert(result['message']);
}
})
.catch((error) => {
setLoading(false);
console.error(' Record_All_PJ Error:', error);
setRecord_All_PJ_api("false");
alert(" Impossible d'ajouter la pièce jointe")
});
}
}
const [Delete_one_attached_document_api, setDelete_one_attached_document_api] = useState();
const [Delete_one_attached_document_result, setDelete_one_attached_document_result] = useState();
const [Delete_one_attached_document_message, setDelete_one_attached_document_message] = useState();
const Delete_one_attached_document = (event) => {
const stored_cookie = getCookie('tokenmysypart');
var formData = new FormData();
var nom_fiche_detaillee = "Fiche_Detaillee.pdf";
var file_name = event.target.id;
formData.append("token", stored_cookie);
formData.append("file_name", file_name);
var url = process.env.REACT_APP_API_URL + "myclass/api/Delete_Stored_Downloaded_File/";
setLoading(true);
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Delete_Stored_Downloaded_File/",
{
method: 'POST',
body: formData,
}
)
.then((response) => response.json())
.then((result) => {
setLoading(false);
//console.log(" ## result['status'] = ", result['status'])
if (String(result['status']) === String("true")) {
//console.log('Success:', result['message']);
setDelete_one_attached_document_result(result['message']);
setDelete_one_attached_document_api("true");
Get_List_Of_All_PJ(selected_class_id);
alert(result['message'])
}
else {
setDelete_one_attached_document_message(result['message']);
setDelete_one_attached_document_api("false");
alert(result['message'])
}
})
.catch((error) => {
setLoading(false);
console.error(' Record_All_PJ Error:', error);
setDelete_one_attached_document_api("false");
alert(" Impossible de supprimer le document")
});
}
const Delete_one_attached_document_convention = (event) => {
var file_name = event.target.id;
}
const [Get_List_Of_All_PJ_api, setGet_List_Of_All_PJ_api] = useState();
const [Get_List_Of_All_PJ_result, setGet_List_Of_All_PJ_result] = useState();
const [Get_List_Of_All_PJ_message, setGet_List_Of_All_PJ_message] = useState();
function Get_List_Of_All_PJ(local_employee_id) {
const formData = new FormData();
//formData.append('token', 'K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA');
const stored_cookie = getCookie('tokenmysypart');
formData.append("token", stored_cookie);
formData.append("object_owner_collection", "myclass");
formData.append("object_owner_id", local_employee_id);
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);
setLoading(true);
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Get_List_object_owner_collection_Stored_Files/",
{
method: 'POST',
body: formData,
}
)
.then((response) => response.json())
.then((result) => {
setLoading(false);
//console.log(" ## result['status'] = ", result['status'])
if (String(result['status']) === String("true")) {
//console.log('Message :', result['message']);
setGet_List_Of_All_PJ_result(result['message']);
setGet_List_Of_All_PJ_api("true");
}
else {
setGet_List_Of_All_PJ_message(result['message']);
setGet_List_Of_All_PJ_api("false");
}
})
.catch((error) => {
setLoading(false);
console.error(' Get_List_Of_All_PJ Error:', error);
setGet_List_Of_All_PJ_api("false");
});
}
function Delete_file_1_name() {
setfile_1_name();
}
function Delete_file_2_name() {
setfile_2_name();
}
const [p_detail_one_file_to_download_type_name, setp_detail_one_file_to_download_type_name] = useState();
// -- end gestion pièces jointes
return (
<div className="addclassmanual">
{isLoading && <div className="loader-container">
@ -2510,11 +2878,11 @@ const AddClassManual = (props) => {
/>
</div>
<div className="training_caract">
<div className="training_caract">
<Tooltip className="tooltip_css" id="tooltip_img_profil_01" />
<a data-tooltip-id="tooltip_img_profil_01" data-tooltip-html="L'image de profil de la formation. <br/>L'ordre de priorité d'affichage des images est : <br/>
<a data-tooltip-id="tooltip_img_profil_01" data-tooltip-html="L'image de profil de la formation. <br/>L'ordre de priorité d'affichage des images est : <br/>
1 - Image Bannière <br/>
2 - L'image carrée téléchargéeen bas de page <br/>
3 - L'image par defaut du métier dans le système
@ -2530,9 +2898,9 @@ const AddClassManual = (props) => {
disabled={false}
className="disabled_style"
/>
</a>
</div>
</a>
</div>
<div className="training_caract">
<TextField
@ -3186,7 +3554,7 @@ const AddClassManual = (props) => {
<Tooltip className="tooltip_css" id="tooltip_img_profil" />
<a data-tooltip-id="tooltip_img_profil" data-tooltip-html="L'image de profil de la formation. <br/>L'ordre de priorité d'affichage des images est : <br/>
<a data-tooltip-id="tooltip_img_profil" data-tooltip-html="L'image de profil de la formation. <br/>L'ordre de priorité d'affichage des images est : <br/>
1 - Image Bannière <br/>
2 - L'image carrée téléchargéeen bas de page <br/>
3 - L'image par defaut du métier dans le système
@ -3226,6 +3594,152 @@ const AddClassManual = (props) => {
</Box>
<div style={{ "marginRight":"10px"}}>
<div className="div_row" style={{ "border": "None" }}>
<hr className="hr_break" />
</div>
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Les pièces jointes </nav>
<div className="session_data" style={{ "padding": "5px", "marginRight":"10px"}}>
<br />
<div className="div_row" style={{ "padding": "5px", "border": "None" }}>
<div style={{ "fontSize": "12px" }}>
<label htmlFor="upload-photo">
<input
style={{ display: "none" }}
id="upload-photo"
name="upload-photo"
type="file"
onChange={sessions_file_change_1}
/>
<Fab
color="secondary"
size="small"
component="span"
aria-label="add"
variant="extended"
>
<IoMdAddCircle /> <nav style={{ "fontSize": "12px" }}> Ajouter un fichier </nav>
</Fab>
</label>
</div>
{file_1_name && file_1_name.name &&
<nav style={{ "fontSize": "12px" }}>
<div className="session_caract">Nom du fichier <br />
<TextField
name="file_to_download_type_name"
id="file_to_download_type_name"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style enable_style"
value={p_detail_one_file_to_download_type_name}
onChange={(e) => {
setp_detail_one_file_to_download_type_name(e.target.value);
}}
/>
</div>
<br />
<br />
Fichier : {file_1_name.name} <br /> <font style={{ "cursor": "pointer" }}
onClick={Delete_file_1_name}> Supprimer <IoIosRemoveCircleOutline /> </font>
</nav>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "true" && <div className="okUpdateData"> Pièce jointe enregistrée </div>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "false" && <div className="koUpdateData"> {Record_All_PJ_message} </div>}
</div>
{file_1_name && file_1_name.name && <div className="div_row" style={{ "padding": "5px", "border": "none" }}>
<div className="div_row_gauche" style={{ "padding": "5px", "border": "none" }}>
<Button variant="contained" onClick={Record_All_PJ}
startIcon={<AiTwotoneSave />} className="bton_enreg">ENREGISTRER LA PIECE</Button>
</div>
</div>}
{Get_List_Of_All_PJ_result && <div className="div_row" style={{ "padding": "5px", "border": "None" }}>
<div className="div_row" style={{ "padding": "5px", "border": "None" }}>
Liste des pièces jointes <br />
<div className="div_row" style={{ "padding": "5px", "border": "None" }}>
{Get_List_Of_All_PJ_result && Get_List_Of_All_PJ_result.map((val) => (
<div className="div_row_list_pj" >
<nav style={{ "color": "green", "cursor": "pointer" }} onClick={Download_one_attached_document} name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}> Télécharger &nbsp;<i> {(JSON.parse(val).file_business_object)}</i> </nav> <br />
<Popup
trigger={
<nav style={{ "color": "red", "cursor": "pointer" }} > Supprimer</nav>
}
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, la pièce jointe sera <i><font color="red"> définitivement supprimée</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
Delete_one_attached_document(event);
close();
}}
name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}
> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</div>
))}
</div>
</div>
</div>}
</div>
</div>
{String(datamodification) === String("1") && <div className="parter_div_filtrer_row">
<div className="koUpdateData" style={{ "color": "orange", "textAlign": "center" }}> /!\ Pensez à enregistrer les modifications</div>
</div>}

View File

@ -2454,6 +2454,7 @@ const Apprenant = (props) => {
const [display_detail_inscriptions, setdisplay_detail_inscriptions] = useState("");
const [display_detail_absence, setdisplay_detail_absence] = useState("");
const [display_detail_historique, setdisplay_detail_historique] = useState("");
const [display_detail_piece_joint, setdisplay_detail_piece_joint] = useState("");
async function submenu_add_one_inscription() {
@ -2475,6 +2476,7 @@ const Apprenant = (props) => {
setdisplay_detail_inscriptions("");
setdisplay_detail_absence("");
setdisplay_detail_historique("");
setdisplay_detail_piece_joint("");
@ -2500,6 +2502,7 @@ const Apprenant = (props) => {
setdisplay_detail_inscriptions("");
setdisplay_detail_absence("");
setdisplay_detail_historique("");
setdisplay_detail_piece_joint("");
}
@ -2514,6 +2517,7 @@ const Apprenant = (props) => {
setdisplay_detail_apprenant("");
setdisplay_detail_absence("");
setdisplay_detail_historique("");
setdisplay_detail_piece_joint("");
}
async function submenu_absence() {
@ -2526,6 +2530,7 @@ const Apprenant = (props) => {
setdisplay_detail_apprenant("");
setdisplay_detail_inscriptions("");
setdisplay_detail_historique("");
setdisplay_detail_piece_joint("");
}
@ -2537,6 +2542,20 @@ const Apprenant = (props) => {
setdisplay_detail_historique("1");
setadd_One_Apprenant("");
setdisplay_detail_apprenant("");
setdisplay_detail_inscriptions("");
setdisplay_detail_absence("");
setdisplay_detail_piece_joint("");
}
async function submenu_piece_jointe() {
setsubmenu("piece_jointe");
//await sleep(5);
setdisplay_detail_piece_joint("1")
setdisplay_detail_historique("");
setadd_One_Apprenant("");
setdisplay_detail_apprenant("");
setdisplay_detail_inscriptions("");
setdisplay_detail_absence("");
@ -4050,7 +4069,7 @@ const Apprenant = (props) => {
</div>
<div className="session_caract_Dialog" > <b> Nom </b>
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
@ -4612,73 +4631,13 @@ const Apprenant = (props) => {
fontWeight: 'light',
},
'& .cell--etape--projet': {
backgroundColor: '#E6F7C8',
color: '#1a3e72',
fontWeight: 'light',
},
'& .cell--etape--planification': {
backgroundColor: '#E6CEAA',
color: '#1a3e72',
fontWeight: 'light',
},
'& .cell--etape--planifie': {
backgroundColor: '#F4ECF7',
color: '#1a3e72',
fontWeight: 'light',
},
'& .cell--etape--termine': {
backgroundColor: '#D6EAF8',
color: '#1a3e72',
fontWeight: 'light',
},
'& .cell--etape--facture': {
backgroundColor: '#D5F5E3',
color: '#1a3e72',
fontWeight: 'light',
},
'& .cell--etape--annule': {
backgroundColor: '#566573',
color: '#1a3e72',
fontWeight: 'light',
},
'& .line--etape--projet': {
backgroundColor: 'yellow',
color: 'black',
},
'& .line--etape--planification': {
backgroundColor: 'red',
color: 'black',
},
'& .line--etape--planifie': {
backgroundColor: 'blue',
color: 'black',
},
'& .line--etape--termine': {
backgroundColor: 'orange',
color: 'black',
},
'& .line--etape--facture': {
backgroundColor: '#D5F5E3',
color: 'black',
},
'& .line--etape--annule': {
backgroundColor: '#566573',
color: 'white',
},
"& .MuiDataGrid-columnHeaders": {
backgroundColor: "#c8cfd5",
color: "black",
fontSize: 14
},
'& .line--statut--selected': {
backgroundColor: '#FBF2EF',
color: 'black',
},
'& .line--statut--pair': {
backgroundColor: 'rgba(235, 235, 235, .7)',
color: 'black',
@ -4687,6 +4646,10 @@ const Apprenant = (props) => {
backgroundColor: '#FFFFFF',
color: 'black',
},
'& .line--statut--selected': {
backgroundColor: '#FBF2EF',
color: 'black',
},
}}
>
@ -4776,33 +4739,9 @@ const Apprenant = (props) => {
}
//field === "etape"
if (params.field === "etape" && String(params.value) == "0") {
return 'cell--etape--projet';
}
if (params.field === "etape" && String(params.value) == "1") {
return 'cell--etape--planification';
}
if (params.field === "etape" && String(params.value) == "2") {
return 'cell--etape--planifie';
}
if (params.field === "etape" && String(params.value) == "3") {
return 'cell--etape--termine';
}
if (params.field === "etape" && String(params.value) == "4") {
return 'cell--etape--facture';
}
if (params.field === "etape" && String(params.value) == "-1") {
return 'cell--etape--annule';
}
// Pour la gestion de la couleur de zone double cliquée
if (String(params.row.id) === String(gridline_id)) {
return 'line--statut--selected';
}
else if (parseInt(String(params.row.id)) % 2 === 0) {
@ -4978,6 +4917,8 @@ const Apprenant = (props) => {
{((selected_apprenant_id && String(selected_apprenant_id).length > 2) || (String(add_One_Apprenant) === "1")) && <div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_apprenant} className="detail_class_submenu" id='detail_apprenant' name='detail_apprenant'>Détail Apprenant</Button>
<Button variant="outlined" onClick={submenu_inscriptions} className="detail_class_submenu" id='inscriptions' name='inscriptions'>Inscriptions </Button>
<Button variant="outlined" onClick={submenu_piece_jointe} className="detail_class_submenu" id='historique' name='historique'>Pièces Jointes </Button>
<Button variant="outlined" onClick={submenu_absence} className="detail_class_submenu" id='absences' name='absences'>Absences </Button>
<Button variant="outlined" onClick={submenu_historique} className="detail_class_submenu" id='historique' name='historique'>Historique </Button>
@ -5670,7 +5611,7 @@ const Apprenant = (props) => {
InputLabelProps={{
shrink: true,
}}
disabled={false}
disabled={false}
value={String(p_detail_tuteur1_civilite)[0].toUpperCase() + String(p_detail_tuteur1_civilite).slice(1)}
@ -5942,144 +5883,6 @@ const Apprenant = (props) => {
</div>
</div>
</div>
<div className="div_row" style={{ "border": "None" }}>
<hr className="hr_break" />
</div>
<div className="div_row" >
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600", "padding": "5px" }}> Pièces Jointes </nav>
<div className="div_row" style={{ "padding": "5px" }}>
<div style={{ "fontSize": "12px" }}>
<label htmlFor="upload-photo">
<input
style={{ display: "none" }}
id="upload-photo"
name="upload-photo"
type="file"
accept=".pdf"
onChange={apprenants_file_change_1}
/>
<Fab
color="secondary"
size="small"
component="span"
aria-label="add"
variant="extended"
>
<IoMdAddCircle /> <nav style={{ "fontSize": "12px" }}> Ajouter un fichier </nav>
</Fab>
</label>
</div>
{file_1_name && file_1_name.name &&
<nav style={{ "fontSize": "12px" }}>
<div className="session_caract">Nom du fichier <br />
<TextField
name="file_to_download_type_name"
id="file_to_download_type_name"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style enable_style"
value={p_detail_one_file_to_download_type_name}
onChange={(e) => {
setp_detail_one_file_to_download_type_name(e.target.value);
}}
/>
</div>
<br />
<br />
Fichier : {file_1_name.name} <br /> <font style={{ "cursor": "pointer" }}
onClick={Delete_file_1_name}> Supprimer <IoIosRemoveCircleOutline /> </font>
</nav>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "true" && <div className="okUpdateData"> Pièce jointe enregistrée </div>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "false" && <div className="koUpdateData"> {Record_All_PJ_message} </div>}
</div>
{file_1_name && file_1_name.name && <div className="div_row">
<div className="div_row_gauche">
<Button variant="contained" onClick={Record_All_PJ}
startIcon={<AiTwotoneSave />} className="bton_enreg">ENREGISTRER LA PIECE</Button>
</div>
</div>}
{Get_List_Of_All_PJ_result && <div className="div_row" style={{ "padding": "5px" }}>
<div className="div_row">
Liste des pièces jointes <br />
<div className="div_row">
{Get_List_Of_All_PJ_result && Get_List_Of_All_PJ_result.map((val) => (
<div className="div_row_list_pj" >
<nav style={{ "color": "green", "cursor": "pointer" }} onClick={Download_one_attached_document} name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}> Télécharger &nbsp;<i> {(JSON.parse(val).file_business_object)}</i> </nav> <br />
<Popup
trigger={
<nav style={{ "color": "red", "cursor": "pointer" }} > Supprimer</nav>
}
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, la pièce jointe sera <i><font color="red"> définitivement supprimée</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
Delete_one_attached_document(event);
close();
}}
name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}
> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</div>
))}
</div>
</div>
</div>}
</div>
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
@ -6393,6 +6196,147 @@ const Apprenant = (props) => {
</div>}
{String(display_detail_piece_joint) === "1" && String(add_One_Apprenant) !== "1" && selected_apprenant_id && <div className="div_row" style={{ "border": "None", "background": '#F8F9F9', "padding": '5px' }}>
<div className="div_row" >
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600", "padding": "5px" }}> Pièces Jointes </nav>
<div className="div_row" style={{ "padding": "5px" }}>
<div style={{ "fontSize": "12px" }}>
<label htmlFor="upload-photo">
<input
style={{ display: "none" }}
id="upload-photo"
name="upload-photo"
type="file"
accept=".pdf"
onChange={apprenants_file_change_1}
/>
<Fab
color="secondary"
size="small"
component="span"
aria-label="add"
variant="extended"
>
<IoMdAddCircle /> <nav style={{ "fontSize": "12px" }}> Ajouter un fichier </nav>
</Fab>
</label>
</div>
{file_1_name && file_1_name.name &&
<nav style={{ "fontSize": "12px" }}>
<div className="session_caract">Nom du fichier <br />
<TextField
name="file_to_download_type_name"
id="file_to_download_type_name"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style enable_style"
value={p_detail_one_file_to_download_type_name}
onChange={(e) => {
setp_detail_one_file_to_download_type_name(e.target.value);
}}
/>
</div>
<br />
<br />
Fichier : {file_1_name.name} <br /> <font style={{ "cursor": "pointer" }}
onClick={Delete_file_1_name}> Supprimer <IoIosRemoveCircleOutline /> </font>
</nav>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "true" && <div className="okUpdateData"> Pièce jointe enregistrée </div>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "false" && <div className="koUpdateData"> {Record_All_PJ_message} </div>}
</div>
{file_1_name && file_1_name.name && <div className="div_row">
<div className="div_row_gauche">
<Button variant="contained" onClick={Record_All_PJ}
startIcon={<AiTwotoneSave />} className="bton_enreg">ENREGISTRER LA PIECE</Button>
</div>
</div>}
{Get_List_Of_All_PJ_result && <div className="div_row" style={{ "padding": "5px" }}>
<div className="div_row">
Liste des pièces jointes <br />
<div className="div_row">
{Get_List_Of_All_PJ_result && Get_List_Of_All_PJ_result.map((val) => (
<div className="div_row_list_pj" >
<nav style={{ "color": "green", "cursor": "pointer" }} onClick={Download_one_attached_document} name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}> Télécharger &nbsp;<i> {(JSON.parse(val).file_business_object)}</i> </nav> <br />
<Popup
trigger={
<nav style={{ "color": "red", "cursor": "pointer" }} > Supprimer</nav>
}
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, la pièce jointe sera <i><font color="red"> définitivement supprimée</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
Delete_one_attached_document(event);
close();
}}
name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}
> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</div>
))}
</div>
</div>
</div>}
</div>
</div>}
</div >
);
}

View File

@ -954,6 +954,8 @@ const DisplayPartnerSession = (props) => {
setselected_sequence_id(cellValues.row._id);
setdisplay_detail_sequence("1");
Get_List_Of_All_PJ_For_Session(cellValues.row._id);
if (document.getElementById('myRef_seq_ressource')) {
var divh = document.getElementById('myRef_seq_ressource').offsetTop;
window.scrollTo({
@ -1923,7 +1925,7 @@ const DisplayPartnerSession = (props) => {
if (document.getElementById("attestation")) {
document.getElementById("attestation").style.backgroundColor = "#d8edfc";
document.getElementById("attestation").style.color = "black";
document.getElementById("attestation").style.fontWeight = "black";
document.getElementById("attestation").style.fontWeight = "normal";
}
if (document.getElementById("inscrit")) {
@ -1943,6 +1945,12 @@ const DisplayPartnerSession = (props) => {
document.getElementById("evaluation").style.color = "black";
document.getElementById("evaluation").style.fontWeight = "normal";
}
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#d8edfc";
document.getElementById("piece_jointe").style.color = "black";
document.getElementById("piece_jointe").style.fontWeight = "normal";
}
}
function submenu_inscrit() {
@ -2001,7 +2009,13 @@ const DisplayPartnerSession = (props) => {
if (document.getElementById("attestation")) {
document.getElementById("attestation").style.backgroundColor = "#d8edfc";
document.getElementById("attestation").style.color = "black";
document.getElementById("attestation").style.fontWeight = "black";
document.getElementById("attestation").style.fontWeight = "normal";
}
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#d8edfc";
document.getElementById("piece_jointe").style.color = "black";
document.getElementById("piece_jointe").style.fontWeight = "normal";
}
}
@ -2024,7 +2038,7 @@ const DisplayPartnerSession = (props) => {
if (document.getElementById("attestation")) {
document.getElementById("attestation").style.backgroundColor = "#d8edfc";
document.getElementById("attestation").style.color = "black";
document.getElementById("attestation").style.fontWeight = "black";
document.getElementById("attestation").style.fontWeight = "normal";
}
if (document.getElementById("editique")) {
document.getElementById("editique").style.backgroundColor = "#d8edfc";
@ -2067,6 +2081,13 @@ const DisplayPartnerSession = (props) => {
document.getElementById("evaluation").style.color = "black";
document.getElementById("evaluation").style.fontWeight = "normal";
}
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#d8edfc";
document.getElementById("piece_jointe").style.color = "black";
document.getElementById("piece_jointe").style.fontWeight = "normal";
}
}
async function submenu_sequence_session() {
@ -2131,6 +2152,13 @@ const DisplayPartnerSession = (props) => {
document.getElementById("emargement").style.color = "black";
document.getElementById("emargement").style.fontWeight = "normal";
}
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#d8edfc";
document.getElementById("piece_jointe").style.color = "black";
document.getElementById("piece_jointe").style.fontWeight = "normal";
}
}
@ -2195,30 +2223,43 @@ const DisplayPartnerSession = (props) => {
if (document.getElementById("attestation")) {
document.getElementById("attestation").style.backgroundColor = "#d8edfc";
document.getElementById("attestation").style.color = "black";
document.getElementById("attestation").style.fontWeight = "black";
document.getElementById("attestation").style.fontWeight = "normal";
}
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#d8edfc";
document.getElementById("piece_jointe").style.color = "black";
document.getElementById("piece_jointe").style.fontWeight = "normal";
}
}
async function submenu_historique() {
setsubmenu("historique");
async function submenu_piece_jointe() {
setsubmenu("piece_jointe");
// await sleep(5);
if (!edit_session_form) {
desableSessionFields();
}
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#104277";
document.getElementById("piece_jointe").style.color = "white";
document.getElementById("piece_jointe").style.fontWeight = "bold";
}
if (document.getElementById("historique")) {
document.getElementById("historique").style.backgroundColor = "#104277";
document.getElementById("historique").style.color = "white";
document.getElementById("historique").style.fontWeight = "bold";
document.getElementById("historique").style.backgroundColor = "#d8edfc";
document.getElementById("historique").style.color = "black";
document.getElementById("historique").style.fontWeight = "normal";
}
if (document.getElementById("attestation")) {
document.getElementById("attestation").style.backgroundColor = "#d8edfc";
document.getElementById("attestation").style.color = "black";
document.getElementById("attestation").style.fontWeight = "black";
document.getElementById("attestation").style.fontWeight = "normal";
}
if (document.getElementById("evaluation")) {
@ -2272,6 +2313,85 @@ const DisplayPartnerSession = (props) => {
}
}
async function submenu_historique() {
setsubmenu("historique");
// await sleep(5);
if (!edit_session_form) {
desableSessionFields();
}
if (document.getElementById("historique")) {
document.getElementById("historique").style.backgroundColor = "#104277";
document.getElementById("historique").style.color = "white";
document.getElementById("historique").style.fontWeight = "bold";
}
if (document.getElementById("attestation")) {
document.getElementById("attestation").style.backgroundColor = "#d8edfc";
document.getElementById("attestation").style.color = "black";
document.getElementById("attestation").style.fontWeight = "normal";
}
if (document.getElementById("evaluation")) {
document.getElementById("evaluation").style.backgroundColor = "#d8edfc";
document.getElementById("evaluation").style.color = "black";
document.getElementById("evaluation").style.fontWeight = "normal";
}
if (document.getElementById("editique")) {
document.getElementById("editique").style.backgroundColor = "#d8edfc";
document.getElementById("editique").style.color = "black";
document.getElementById("editique").style.fontWeight = "normal";
}
if (document.getElementById("emargement")) {
document.getElementById("emargement").style.backgroundColor = "#d8edfc";
document.getElementById("emargement").style.color = "black";
document.getElementById("emargement").style.fontWeight = "normal";
}
if (document.getElementById("sequence_session")) {
document.getElementById("sequence_session").style.backgroundColor = "#d8edfc";
document.getElementById("sequence_session").style.color = "black";
document.getElementById("sequence_session").style.fontWeight = "normal";
}
if (document.getElementById("detail_session")) {
document.getElementById("detail_session").style.backgroundColor = "#d8edfc";
document.getElementById("detail_session").style.color = "black";
document.getElementById("detail_session").style.fontWeight = "normal";
}
if (document.getElementById("inscrit")) {
document.getElementById("inscrit").style.backgroundColor = "#d8edfc";
document.getElementById("inscrit").style.color = "black";
document.getElementById("inscrit").style.fontWeight = "normal";
}
if (document.getElementById("preinscrit")) {
document.getElementById("preinscrit").style.backgroundColor = "#d8edfc";
document.getElementById("preinscrit").style.color = "black";
document.getElementById("preinscrit").style.fontWeight = "normal";
}
if (document.getElementById("emargement")) {
document.getElementById("emargement").style.backgroundColor = "#d8edfc";
document.getElementById("emargement").style.color = "black";
document.getElementById("emargement").style.fontWeight = "normal";
}
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#d8edfc";
document.getElementById("piece_jointe").style.color = "black";
document.getElementById("piece_jointe").style.fontWeight = "normal";
}
}
function submenu_editique() {
setsubmenu("editique");
@ -2292,7 +2412,7 @@ const DisplayPartnerSession = (props) => {
if (document.getElementById("attestation")) {
document.getElementById("attestation").style.backgroundColor = "#d8edfc";
document.getElementById("attestation").style.color = "black";
document.getElementById("attestation").style.fontWeight = "black";
document.getElementById("attestation").style.fontWeight = "normal";
}
if (document.getElementById("evaluation")) {
@ -2330,8 +2450,15 @@ const DisplayPartnerSession = (props) => {
document.getElementById("emargement").style.color = "black";
document.getElementById("emargement").style.fontWeight = "normal";
}
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#d8edfc";
document.getElementById("piece_jointe").style.color = "black";
document.getElementById("piece_jointe").style.fontWeight = "normal";
}
}
async function submenu_evaluation() {
setsubmenu("evaluation");
@ -2397,6 +2524,12 @@ const DisplayPartnerSession = (props) => {
document.getElementById("historique").style.fontWeight = "normal";
}
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#d8edfc";
document.getElementById("piece_jointe").style.color = "black";
document.getElementById("piece_jointe").style.fontWeight = "normal";
}
GetListeEvaluation(selected_session_id);
}
@ -2467,6 +2600,12 @@ const DisplayPartnerSession = (props) => {
document.getElementById("historique").style.fontWeight = "normal";
}
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#d8edfc";
document.getElementById("piece_jointe").style.color = "black";
document.getElementById("piece_jointe").style.fontWeight = "normal";
}
GetListeEvaluation(selected_session_id);
}
@ -7378,10 +7517,83 @@ const DisplayPartnerSession = (props) => {
}
const [Record_All_PJ_For_Session_api, setRecord_All_PJ_For_Session_api] = useState();
const [Record_All_PJ_For_Session_result, setRecord_All_PJ_For_Session_result] = useState();
const [Record_All_PJ_For_Session_message, setRecord_All_PJ_For_Session_message] = useState();
function Record_All_PJ_For_Session() {
if (!p_detail_one_file_to_download_type_name) {
alert(" Vous devez donner un nom à la pièce jointe");
return;
}
if (file_1_name && file_1_name.name) {
console.log(" ### Traitement de : ", file_1_name.name);
const formData = new FormData();
formData.append('File', file_1_name);
//formData.append('token', 'K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA');
const stored_cookie = getCookie('tokenmysypart');
formData.append("token", stored_cookie);
formData.append("file_business_object", p_detail_one_file_to_download_type_name);
formData.append("file_name", file_1_name.name);
formData.append("status", "0");
formData.append("object_owner_collection", "session_formation");
formData.append("object_owner_id", selected_session_id);
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);
setLoading(true);
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Store_User_Downloaded_File/",
{
method: 'POST',
body: formData,
}
)
.then((response) => response.json())
.then((result) => {
setLoading(false);
//console.log(" ## result['status'] = ", result['status'])
if (String(result['status']) === String("true")) {
//console.log('Success:', result['message']);
setRecord_All_PJ_For_Session_result(result['message']);
setRecord_All_PJ_For_Session_api("true");
Get_List_Of_All_PJ_For_Session(selected_session_id);
setfile_1_name();
setp_detail_one_file_to_download_type_name();
//GetCurrentClass_trainingsession();
alert(" La pièce jointe " + file_1_name.name + " a été bien enregistrée")
}
else {
setRecord_All_PJ_For_Session_message(result['message']);
setRecord_All_PJ_For_Session_api("false");
}
})
.catch((error) => {
setLoading(false);
console.error(' Record_All_PJ_For_Session Error:', error);
setRecord_All_PJ_For_Session_api("false");
});
}
if (file_2_name && file_2_name.name) {
//console.log(" ### Traitement de : ", file_2_name.name);
}
}
const [Delete_one_attached_document_api, setDelete_one_attached_document_api] = useState();
const [Delete_one_attached_document_result, setDelete_one_attached_document_result] = useState();
const [Delete_one_attached_document_message, setDelete_one_attached_document_message] = useState();
const Delete_one_attached_document = (event) => {
const stored_cookie = getCookie('tokenmysypart');
@ -7430,6 +7642,60 @@ const DisplayPartnerSession = (props) => {
});
}
const [Delete_one_attached_document_For_Session_api, setDelete_one_attached_document_For_Session_api] = useState();
const [Delete_one_attached_document_For_Session_result, setDelete_one_attached_document_For_Session_result] = useState();
const [Delete_one_attached_document_For_Session_message, setDelete_one_attached_document_For_Session_message] = useState();
const Delete_one_attached_document_For_Session = (event) => {
const stored_cookie = getCookie('tokenmysypart');
var formData = new FormData();
var nom_fiche_detaillee = "Fiche_Detaillee.pdf";
var file_name = event.target.id;
formData.append("token", stored_cookie);
formData.append("file_name", file_name);
var url = process.env.REACT_APP_API_URL + "myclass/api/Delete_Stored_Downloaded_File/";
setLoading(true);
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Delete_Stored_Downloaded_File/",
{
method: 'POST',
body: formData,
}
)
.then((response) => response.json())
.then((result) => {
setLoading(false);
//console.log(" ## result['status'] = ", result['status'])
if (String(result['status']) === String("true")) {
//console.log('Success:', result['message']);
setDelete_one_attached_document_For_Session_result(result['message']);
setDelete_one_attached_document_For_Session_api("true");
Get_List_Of_All_PJ_For_Session(selected_session_id);
alert(result['message'])
}
else {
setDelete_one_attached_document_For_Session_message(result['message']);
setDelete_one_attached_document_For_Session_api("false");
}
})
.catch((error) => {
setLoading(false);
console.error(' Record_All_PJ Error:', error);
setDelete_one_attached_document_For_Session_api("false");
alert(" Impossible de supprimer le document")
});
}
const [Get_List_Of_All_PJ_api, setGet_List_Of_All_PJ_api] = useState();
@ -7484,6 +7750,9 @@ const DisplayPartnerSession = (props) => {
const [Get_Class_Data_api, setGet_Class_Data_api] = useState();
const [Get_Class_Data_message, setGet_Class_Data_message] = useState();
const [Get_Class_Data_result, setGet_Class_Data_result] = useState();
@ -7553,6 +7822,62 @@ const DisplayPartnerSession = (props) => {
// -- end gestion pièces jointes
// -- Additif pour gestion pièce jointes de session
const [Get_List_Of_All_PJ_For_Session_api, setGet_List_Of_All_PJ_For_Session_api] = useState();
const [Get_List_Of_All_PJ_For_Session_result, setGet_List_Of_All_PJ_For_Session_result] = useState();
const [Get_List_Of_All_PJ_For_Session_message, setGet_List_Of_All_PJ_For_Session_message] = useState();
function Get_List_Of_All_PJ_For_Session(local_session_id) {
const formData = new FormData();
//formData.append('token', 'K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA');
const stored_cookie = getCookie('tokenmysypart');
formData.append("token", stored_cookie);
formData.append("object_owner_collection", "session_formation");
formData.append("object_owner_id", local_session_id);
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Get_List_object_owner_collection_Stored_Files/",
{
method: 'POST',
body: formData,
}
)
.then((response) => response.json())
.then((result) => {
//console.log(" ## result['status'] = ", result['status'])
if (String(result['status']) === String("true")) {
//console.log('Message :', result['message']);
setGet_List_Of_All_PJ_For_Session_result(result['message']);
setGet_List_Of_All_PJ_For_Session_api("true");
}
else {
setGet_List_Of_All_PJ_For_Session_message(result['message']);
setGet_List_Of_All_PJ_For_Session_api("false");
}
})
.catch((error) => {
console.error(' Get_List_Of_All_PJ_For_Session Error:', error);
setGet_List_Of_All_PJ_For_Session_api("false");
});
}
// -- fin additif
// Action en mass
const [actionmass_ftion_val, setactionmass_ftion_val] = useState();
@ -7952,6 +8277,8 @@ const DisplayPartnerSession = (props) => {
handleClick_edit_session_From_Line(session_selected_row_id);
Getall_Sequence_Of_Session(selected_session_id);
Get_List_Of_All_PJ_For_Session(selected_session_id);
}
const [p_detail_sequence_title, setp_detail_sequence_title] = useState();
@ -9927,7 +10254,7 @@ const DisplayPartnerSession = (props) => {
<DialogTitle>MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "15rem" }}>
<div className="session_caract_Dialog" > Choisir un modèle d'émargement
@ -9981,7 +10308,7 @@ const DisplayPartnerSession = (props) => {
<div className="div_row">
<div className="div_row_gauche">
{selected_emargement_id && <Button className="bton_enreg_dialog" onClick={(e) => {
{selected_emargement_id && <Button className="bton_enreg_dialog" onClick={(e) => {
DownloadListEmargement();
Dialog_EMARGEMENT_handleClose_buton();
}}
@ -11565,7 +11892,10 @@ const DisplayPartnerSession = (props) => {
<Button variant="outlined" onClick={submenu_emargement} className="detail_class_submenu" id='emargement' name='emargement'>Emargement </Button>
<Button variant="outlined" onClick={submenu_evaluation} className="detail_class_submenu" id='menu_eval' name='menu_eval'>Les avis</Button>
<Button variant="outlined" onClick={submenu_attestation} className="detail_class_submenu" id='menu_eval' name='menu_eval'>Attestation</Button>
<Button variant="outlined" onClick={submenu_piece_jointe} className="detail_class_submenu" id='piece_jointe' name='contrat'>Pièces Jointes </Button>
<Button variant="outlined" onClick={submenu_historique} className="detail_class_submenu" id='historique' name='historique'>Historique </Button>
</div>}
@ -17088,6 +17418,154 @@ const DisplayPartnerSession = (props) => {
</div>}
{String(submenu) === String("piece_jointe") && <div style={{ "border": "None" }}>
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Les pièces jointes </nav>
<div className="session_data">
<br />
<div className="div_row">
<div className="div_row" style={{ "padding": "5px" }}>
<div style={{ "fontSize": "12px" }}>
<label htmlFor="upload-photo">
<input
style={{ display: "none" }}
id="upload-photo"
name="upload-photo"
type="file"
onChange={sessions_file_change_1}
/>
<Fab
color="secondary"
size="small"
component="span"
aria-label="add"
variant="extended"
>
<IoMdAddCircle /> <nav style={{ "fontSize": "12px" }}> Ajouter un fichier </nav>
</Fab>
</label>
</div>
{file_1_name && file_1_name.name &&
<nav style={{ "fontSize": "12px" }}>
<div className="session_caract">Nom du fichier <br />
<TextField
name="file_to_download_type_name"
id="file_to_download_type_name"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style enable_style"
value={p_detail_one_file_to_download_type_name}
onChange={(e) => {
setp_detail_one_file_to_download_type_name(e.target.value);
}}
/>
</div>
<br />
<br />
Fichier : {file_1_name.name} <br /> <font style={{ "cursor": "pointer" }}
onClick={Delete_file_1_name}> Supprimer <IoIosRemoveCircleOutline /> </font>
</nav>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "true" && <div className="okUpdateData"> Pièce jointe enregistrée </div>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "false" && <div className="koUpdateData"> {Record_All_PJ_message} </div>}
</div>
{file_1_name && file_1_name.name && <div className="div_row">
<div className="div_row_gauche">
<Button variant="contained" onClick={Record_All_PJ_For_Session}
startIcon={<AiTwotoneSave />} className="bton_enreg">ENREGISTRER LA PIECE</Button>
</div>
</div>}
{Get_List_Of_All_PJ_For_Session_result && <div className="div_row" style={{ "padding": "5px" }}>
<div className="div_row">
Liste des pièces jointes <br />
<div className="div_row">
{Get_List_Of_All_PJ_For_Session_result && Get_List_Of_All_PJ_For_Session_result.map((val) => (
<div className="div_row_list_pj" >
<nav style={{ "color": "green", "cursor": "pointer" }} onClick={Download_one_attached_document} name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}> Télécharger &nbsp;<i> {(JSON.parse(val).file_business_object)}</i> </nav> <br />
<Popup
trigger={
<nav style={{ "color": "red", "cursor": "pointer" }} > Supprimer</nav>
}
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, la pièce jointe sera <i><font color="red"> définitivement supprimée</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
Delete_one_attached_document_For_Session(event);
close();
}}
name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}
> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</div>
))}
</div>
</div>
</div>}
</div>
<div className="div_row" style={{ "border": "None" }}>
&nbsp;
</div>
</div>
</div>}
</div>

View File

@ -2234,25 +2234,53 @@ const DisplayPartnerStagiaires = (props) => {
setdisplay_detail_stagiaire("1");
setaddOneParticipant();
/*if (!edit_session_form) {
desableSessionFields();
}
if (document.getElementById("detail_session")) {
document.getElementById("detail_session").style.backgroundColor = "#104277";
document.getElementById("detail_session").style.color = "white";
}
if (document.getElementById("inscrit")) {
document.getElementById("inscrit").style.backgroundColor = "#d8edfc";
document.getElementById("inscrit").style.color = "black";
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#d8edfc";
document.getElementById("piece_jointe").style.color = "black";
}
if (document.getElementById("preinscrit")) {
document.getElementById("preinscrit").style.backgroundColor = "#d8edfc";
document.getElementById("preinscrit").style.color = "black";
/* if (document.getElementById("preinscrit")) {
document.getElementById("preinscrit").style.backgroundColor = "#d8edfc";
document.getElementById("preinscrit").style.color = "black";
}
*/
}
async function submenu_piece_jointe() {
setsubmenu("piece_jointe");
await sleep(5);
setdisplay_detail_stagiaire("");
setaddOneParticipant();
if (document.getElementById("piece_jointe")) {
document.getElementById("piece_jointe").style.backgroundColor = "#104277";
document.getElementById("piece_jointe").style.color = "white";
}
*/
if (document.getElementById("detail_session")) {
document.getElementById("detail_session").style.backgroundColor = "#d8edfc";
document.getElementById("detail_session").style.color = "black";
}
/* if (document.getElementById("preinscrit")) {
document.getElementById("preinscrit").style.backgroundColor = "#d8edfc";
document.getElementById("preinscrit").style.color = "black";
}
*/
}
@ -7204,6 +7232,10 @@ const DisplayPartnerStagiaires = (props) => {
{((selected_id && String(selected_id).length > 2) || (String(addOneParticipant) === "1")) && <div className="div_row">
<Button variant="outlined" ref={myRef} onClick={submenu_detail_stagaire} className="detail_class_submenu" id='detail_session' name='detail_session'>Détail Participant</Button>
<Button variant="outlined" onClick={submenu_piece_jointe} className="detail_class_submenu" id='piece_jointe' name='piece_jointe'>Pièces Jointes </Button>
{/* <Button variant="outlined" onClick={submenu_sessions} className="detail_class_submenu" id='preinscrit' name='preinscrit'>Détail Session </Button>
<Button variant="outlined" onClick={submenu_absence} className="detail_class_submenu" id='absence' name='absence'>Absence </Button> */}
{String(addOneParticipant) !== "1" && <Button variant="outlined" onClick={submenu_historique} className="detail_class_submenu" id='historique' name='historique'>Historique </Button>}
@ -8986,151 +9018,7 @@ const DisplayPartnerStagiaires = (props) => {
</div>
</div>
</div>
<div>
<div className="div_row" style={{ "border": "None" }}>
<hr className="hr_break" />
</div>
<div className="div_row" style={{ "border": "None", "fontSize": "22px", "fontWeight": "600", "padding": "5px" }}>
Pièces jointes
</div>
<div className="div_row" style={{ "padding": "5px" }}>
<div style={{ "fontSize": "12px" }}>
<label htmlFor="upload-photo">
<input
style={{ display: "none" }}
id="upload-photo"
name="upload-photo"
type="file"
onChange={sessions_file_change_1}
/>
<Fab
color="secondary"
size="small"
component="span"
aria-label="add"
variant="extended"
>
<IoMdAddCircle /> <nav style={{ "fontSize": "12px" }}> Ajouter un fichier </nav>
</Fab>
</label>
</div>
{file_1_name && file_1_name.name &&
<nav style={{ "fontSize": "12px" }}>
<div className="session_caract">Nom du fichier <br />
<TextField
name="file_to_download_type_name"
id="file_to_download_type_name"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style enable_style"
value={p_detail_one_file_to_download_type_name}
onChange={(e) => {
setp_detail_one_file_to_download_type_name(e.target.value);
}}
/>
</div>
<br />
<br />
Fichier : {file_1_name.name} <br /> <font style={{ "cursor": "pointer" }}
onClick={Delete_file_1_name}> Supprimer <IoIosRemoveCircleOutline /> </font>
</nav>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "true" && <div className="okUpdateData"> Pièce jointe enregistrée </div>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "false" && <div className="koUpdateData"> {Record_All_PJ_message} </div>}
</div>
{file_1_name && file_1_name.name && <div className="div_row">
<div className="div_row_gauche">
<Button variant="contained" onClick={Record_All_PJ}
startIcon={<AiTwotoneSave />} className="bton_enreg">ENREGISTRER LA PIECE</Button>
</div>
</div>}
{Get_List_Of_All_PJ_result && <div className="div_row" style={{ "padding": "5px" }}>
<div className="div_row">
Liste des pièces jointes <br />
<div className="div_row">
{Get_List_Of_All_PJ_result && Get_List_Of_All_PJ_result.map((val) => (
<div className="div_row_list_pj" >
<nav style={{ "color": "green", "cursor": "pointer" }} onClick={Download_one_attached_document} name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}> Télécharger &nbsp;<i> {(JSON.parse(val).file_business_object)}</i> </nav> <br />
<Popup
trigger={
<nav style={{ "color": "red", "cursor": "pointer" }} > Supprimer</nav>
}
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, la pièce jointe sera <i><font color="red"> définitivement supprimée</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
Delete_one_attached_document(event);
close();
}}
name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}
> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</div>
))}
</div>
</div>
</div>}
</div>
{is_lms_class_code && <div>
<div className="div_row" style={{ "border": "None" }}>
@ -9388,6 +9276,154 @@ const DisplayPartnerStagiaires = (props) => {
{String(submenu) === "piece_jointe" && String(addOneParticipant) !== "1" && <div className="div_row" style={{ "border": "None", "background": '#F8F9F9', "padding": '5px' }}>
<div>
<div className="div_row" style={{ "border": "None" }}>
<hr className="hr_break" />
</div>
<div className="div_row" style={{ "border": "None", "fontSize": "22px", "fontWeight": "600", "padding": "5px" }}>
Pièces jointes
</div>
<div className="div_row" style={{ "padding": "5px" }}>
<div style={{ "fontSize": "12px" }}>
<label htmlFor="upload-photo">
<input
style={{ display: "none" }}
id="upload-photo"
name="upload-photo"
type="file"
onChange={sessions_file_change_1}
/>
<Fab
color="secondary"
size="small"
component="span"
aria-label="add"
variant="extended"
>
<IoMdAddCircle /> <nav style={{ "fontSize": "12px" }}> Ajouter un fichier </nav>
</Fab>
</label>
</div>
{file_1_name && file_1_name.name &&
<nav style={{ "fontSize": "12px" }}>
<div className="session_caract">Nom du fichier <br />
<TextField
name="file_to_download_type_name"
id="file_to_download_type_name"
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style enable_style"
value={p_detail_one_file_to_download_type_name}
onChange={(e) => {
setp_detail_one_file_to_download_type_name(e.target.value);
}}
/>
</div>
<br />
<br />
Fichier : {file_1_name.name} <br /> <font style={{ "cursor": "pointer" }}
onClick={Delete_file_1_name}> Supprimer <IoIosRemoveCircleOutline /> </font>
</nav>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "true" && <div className="okUpdateData"> Pièce jointe enregistrée </div>}
{Record_All_PJ_api && String(Record_All_PJ_api) === "false" && <div className="koUpdateData"> {Record_All_PJ_message} </div>}
</div>
{file_1_name && file_1_name.name && <div className="div_row">
<div className="div_row_gauche">
<Button variant="contained" onClick={Record_All_PJ}
startIcon={<AiTwotoneSave />} className="bton_enreg">ENREGISTRER LA PIECE</Button>
</div>
</div>}
{Get_List_Of_All_PJ_result && <div className="div_row" style={{ "padding": "5px" }}>
<div className="div_row">
Liste des pièces jointes <br />
<div className="div_row">
{Get_List_Of_All_PJ_result && Get_List_Of_All_PJ_result.map((val) => (
<div className="div_row_list_pj" >
<nav style={{ "color": "green", "cursor": "pointer" }} onClick={Download_one_attached_document} name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}> Télécharger &nbsp;<i> {(JSON.parse(val).file_business_object)}</i> </nav> <br />
<Popup
trigger={
<nav style={{ "color": "red", "cursor": "pointer" }} > Supprimer</nav>
}
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, la pièce jointe sera <i><font color="red"> définitivement supprimée</font></i>. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
Delete_one_attached_document(event);
close();
}}
name={(JSON.parse(val).file_name)} id={(JSON.parse(val).file_name)}
> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
//console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</div>
))}
</div>
</div>
</div>}
</div>
</div>}
{String(submenu) === "historique" && String(display_detail_historique) === "1" && String(addOneParticipant) !== "1" && <div className="div_row" style={{ "border": "None", "background": '#F8F9F9', "padding": '5px' }}>

View File

@ -3308,15 +3308,15 @@ const Employes = (props) => {
const New_Option_Civilite = [
{
value: 'M',
value: 'm',
label: 'M',
},
{
value: 'Mme',
value: 'mme',
label: 'Mme',
},
{
value: 'Neutre',
value: 'neutre',
label: 'Neutre',
},
];
@ -7749,8 +7749,6 @@ const Employes = (props) => {
<Button variant="outlined" onClick={submenu_affectation} className="detail_class_submenu" id='affectation' name='affectation'>Affectation </Button>
<Button variant="outlined" onClick={submenu_contrat} className="detail_class_submenu" id='affectation' name='contrat'>Contrat </Button>
</div>
<nav style={{ "border": "None", "fontSize": "22px", "fontWeight": "600" }}> Ajouter un Employé </nav>
@ -9359,10 +9357,14 @@ const Employes = (props) => {
setDialog_1_open_competence(true);
}}
className="detail_activite" style={{ "background": "#DDF9D4" }}>
<nav className="detail_header" recid={competence.niveau}> {competence.competence} : {competence.note} </nav>
{competence.competence && String(competence.competence).length > 99 && <nav className="detail_header" style={{ "fontWeight": "600", "fontSize": '12px' }} recid={competence.niveau}>
{String(competence.competence).substring(0, 98)} ... </nav>}
{competence.competence && String(competence.competence).length <= 99 && <nav className="detail_header" style={{ "fontWeight": "600", "fontSize": '12px' }} recid={competence.niveau}>
{competence.competence} </nav>}
<nav recid={competence.niveau} >
<br />
{competence.niveau}<br />
{parseFloat(String(competence.note)) && <Rating
name="dialog_opport_prio"
@ -9372,6 +9374,8 @@ const Employes = (props) => {
precision={0.5}
value={String(competence.note)}
/>}
<br />
<i>({competence.niveau}) </i><br />
</nav>
</nav>
@ -9387,6 +9391,7 @@ const Employes = (props) => {
<div className="div_row_gauche div_row_gauche_etendu" style={{ "textAlign": "left", "paddingLeft": "5px" }}>
<Button variant="outlined" onClick={(event) => {
Get_List_Competence_Type();
setDialog_1_open_competence(true);
}}
className="detail_class_submenu bton_add_session"

File diff suppressed because it is too large Load Diff

View File

@ -371,6 +371,15 @@
font-size: small;
padding-left: 5px;
}
.div_row_list_pj {
width: 100%;
border-left: 3mm ridge rgba(211, 220, 50, .6);
float: left;
}
}
@media only screen and (min-width: 601px) and (max-width: 991px) {
@ -789,6 +798,12 @@
}
.div_row_list_pj {
width: 50%;
border-left: 3mm ridge rgba(211, 220, 50, .6);
float: left;
}
}
@media only screen and (min-width: 992px) and (max-width: 1199px) {
@ -1207,6 +1222,12 @@
}
.div_row_list_pj {
width: 30%;
border-left: 3mm ridge rgba(211, 220, 50, .6);
float: left;
}
}
@media only screen and (min-width: 1200px) {
@ -1641,6 +1662,12 @@
padding: 0px !important;
}
.div_row_list_pj {
width: 30%;
border-left: 3mm ridge rgba(211, 220, 50, .6);
float: left;
}
// - end media
}

View File

@ -1262,7 +1262,7 @@
margin-top: 11rem;
}
.div_row_list_pj {
width: 50%;
border-left: 3mm ridge rgba(211, 220, 50, .6);

View File

@ -2062,10 +2062,13 @@
margin-bottom: 1rem !important;
list-style-type: none !important;
border: none !important;
font-size: 13px;
font-size: 12px;
text-align: left;
}
.rs-dropdown-menu {
width: 100% !important;
box-shadow: none !important;

View File

@ -107,7 +107,7 @@
border: 1px solid #9cf;
color: #3b3e40;
font-family: "verdana", "Quicksand", "Signika", sans-serif;
font-size: small;
font-size: x-small;
letter-spacing: 0.1rem;
font-weight: normal;
width: 100%;
@ -658,12 +658,12 @@
margin-right: 1rem;
padding: 0.3rem;
margin-bottom: 0.5rem;
width: 11rem;
min-width: 15rem;
text-align: center;
border: 1px solid #9cf;
color: #3b3e40;
font-family: "verdana", "Quicksand", "Signika", sans-serif;
font-size: small;
font-size: x-small;
letter-spacing: 0.1rem;
font-weight: normal;
}
@ -1255,12 +1255,12 @@
margin-right: 1rem;
padding: 0.3rem;
margin-bottom: 0.5rem;
width: 11rem;
min-width: 15rem;
text-align: center;
border: 1px solid #9cf;
color: #3b3e40;
font-family: "verdana", "Quicksand", "Signika", sans-serif;
font-size: small;
font-size: x-small;
letter-spacing: 0.1rem;
font-weight: normal;
}
@ -1732,12 +1732,12 @@
margin-right: 1rem;
padding: 0.3rem;
margin-bottom: 0.5rem;
min-width: 12rem;
min-width: 15rem;
text-align: center;
border: 1px solid #9cf;
color: #3b3e40;
font-family: "verdana", "Quicksand", "Signika", sans-serif;
font-size: small;
font-size: x-small;
letter-spacing: 0.1rem;
font-weight: normal;
}