06/12/2023 - 17h

recette2
cherif 2023-12-06 17:03:49 +01:00
parent fe07e8307c
commit 596185e0af
5 changed files with 734 additions and 135 deletions

View File

@ -6,7 +6,7 @@ import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
@ -27,6 +27,10 @@ import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import { HiOutlineDocumentDuplicate } from "react-icons/hi2";
import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io";
import { Fab } from "@material-ui/core";
import fileDownload from 'js-file-download'
import { AiTwotoneEdit, AiTwotoneSave } from "react-icons/ai";
const Config_Documents = (props) => {
const history = useHistory();
@ -72,9 +76,9 @@ const Config_Documents = (props) => {
setduplicate_doc_type();
setDialog_duplicate_doc_open(true);
setdocument_id_to_duplicate(cellValues.row._id);
}}>
<HiOutlineDocumentDuplicate /> Dupliquer
@ -238,8 +242,9 @@ const Config_Documents = (props) => {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_Partner_Document/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
//console.log(" In Delete_Partner_Document_Data res.data.status = " + res.data.status);
//console.log(" In Delete_Partner_Document_Data res.data.message r_class = " + res.data.message);
@ -276,7 +281,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.warn('Delete_Partner_Document_Data : Not good man :( mysearchtext = ' + error);
setDelete_Partner_Document_Data_api("false");
alert(" Impossible de supprimer le document");
@ -294,6 +299,11 @@ const Config_Documents = (props) => {
setdisplay_detail_document("1");
//submenu_detail_employe();
// Nettoyages des eventuelles pièces jointes
setGet_List_Of_All_PJ_result([]);
var line = JSON.parse(rowss[selected_row_id]);
//console.log("### line = ", line);
@ -305,6 +315,9 @@ const Config_Documents = (props) => {
//console.log(" ### line.ref_interne = ", line.ref_interne);
Get_Partner_Document_Data(document_id);
// Recuperation des éventuelles pièces jointes associées à ce document
Get_List_Of_All_PJ(document_id);
if (document.getElementById('myRef')) {
// myRef.current.scrollIntoView({ behavior: "smooth" });
var divh = document.getElementById('myRef').offsetTop;
@ -383,9 +396,9 @@ const Config_Documents = (props) => {
//console.log(" ## form = ", form);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Given_Partner_Document/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === "true") {
//console.log(" In Get_Partner_Document_Data res.data.status = " + res.data.status);
//console.log(" In Get_Partner_Document_Data res.data.message r_class = " + res.data.message);
@ -449,6 +462,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Partner_Document_Data = ', error);
setGet_Partner_Document_Data_api("false");
alert(" Impossible de recuperer les données du document");
@ -476,12 +490,13 @@ const Config_Documents = (props) => {
//console.log(" ## form = ", form);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Default_Partner_Document_By_Internal_Ref/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === "true") {
console.log(" In Get_Default_Original_Partner_Document_Data res.data.status = " + res.data.status);
console.log(" In Get_Default_Original_Partner_Document_Data res.data.message r_class = " + res.data.message);
//console.log(" In Get_Default_Original_Partner_Document_Data res.data.status = " + res.data.status);
//console.log(" In Get_Default_Original_Partner_Document_Data res.data.message r_class = " + res.data.message);
setGet_Default_Original_Partner_Document_Data_api("true");
setGet_Default_Original_Partner_Document_Data_result(res.data.message);
@ -549,6 +564,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Default_Original_Partner_Document_Data = ', error);
setGet_Default_Original_Partner_Document_Data_api("false");
alert(" Impossible de recuperer le modèle initial");
@ -575,12 +591,13 @@ const Config_Documents = (props) => {
//console.log(" ## form = ", form);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Given_DFAULT_Partner_Document/";
setLoading(true);
axios.post(myurl, form).then(res => {
if (String(res.data.status) === "true") {
console.log(" In Get_Default_Original_Partner_Document_Data_By_id res.data.status = " + res.data.status);
console.log(" In Get_Default_Original_Partner_Document_Data_By_id res.data.message r_class = " + res.data.message);
//console.log(" In Get_Default_Original_Partner_Document_Data_By_id res.data.status = " + res.data.status);
//console.log(" In Get_Default_Original_Partner_Document_Data_By_id res.data.message r_class = " + res.data.message);
setLoading(false);
setGet_Default_Original_Partner_Document_Data_By_id_api("true");
setGet_Default_Original_Partner_Document_Data_By_id_result(res.data.message);
@ -645,6 +662,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Default_Original_Partner_Document_Data_By_id = ', error);
setGet_Default_Original_Partner_Document_Data_By_id_api("false");
alert(" Impossible de recuperer le modèle initial");
@ -772,13 +790,13 @@ const Config_Documents = (props) => {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_All_Personnalisable_Collection_Fields/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
console.log(" In Get_Personnalisable_Collection_and_Fields res.data.status = " + res.data.status);
console.log(" In Get_Personnalisable_Collection_and_Fields res.data.message r_class = " + res.data.message);
//console.log(" In Get_Personnalisable_Collection_and_Fields res.data.status = " + res.data.status);
//console.log(" In Get_Personnalisable_Collection_and_Fields res.data.message r_class = " + res.data.message);
setGet_Personnalisable_Collection_and_Fields_api("true");
setGet_Personnalisable_Collection_and_Fields_result(res.data.message);
@ -791,6 +809,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Personnalisable_Collection_and_Fields = ', error);
setGet_Personnalisable_Collection_and_Fields_api("false");
alert(" Impossible de recuperer la liste des collection et champs personnalisables");
@ -806,11 +825,12 @@ const Config_Documents = (props) => {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
setLoading(true);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Personnalisable_Collection/";
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Get_Personnalisable_Collections res.data.status = " + res.data.status);
//console.log(" In Get_Personnalisable_Collections res.data.message r_class = " + res.data.message);
@ -826,6 +846,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Personnalisable_Collections = ', error);
setGet_Personnalisable_Collections_api("false");
alert(" Impossible de recuperer la liste des collection et champs personnalisables");
@ -916,14 +937,15 @@ const Config_Documents = (props) => {
form.append("contenu_doc", "");
}
console.log(" Add_one_Partner_Document affectation form == ", form);
//console.log(" Add_one_Partner_Document affectation form == ", form);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Add_Partner_Document/";
setLoading(true);
axios.post(myurl, form).then(res => {
console.log(" In Add_one_Partner_Document res.data.status = " + res.data.status);
console.log(" In Add_one_Partner_Document res.data.message r_class = " + res.data.message);
setLoading(false);
//console.log(" In Add_one_Partner_Document res.data.status = " + res.data.status);
//console.log(" In Add_one_Partner_Document res.data.message r_class = " + res.data.message);
if (String(res.data.status) === String("true")) {
setAdd_one_Partner_Document_api("true");
@ -943,7 +965,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.log('UpdateStagiaireData : Not good man :( Add_one_Partner_Document = ' + error);
setAdd_one_Partner_Document_api("false");
alert(" Impossible d'ajouter le nouveau document");
@ -967,9 +989,10 @@ const Config_Documents = (props) => {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Given_Personnalisable_Fields_By_template_ref_interne/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Get_Given_Personnalisable_Collection_and_Fields res.data.status = " + res.data.status);
//console.log(" In Get_Given_Personnalisable_Collection_and_Fields res.data.message r_class = " + res.data.message);
@ -985,6 +1008,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Given_Personnalisable_Collection_and_Fields = ', error);
setGet_Given_Personnalisable_Collection_and_Fields_api("false");
alert(" Impossible de recuperer la liste des collection et champs personnalisables de l'objet");
@ -1034,11 +1058,12 @@ const Config_Documents = (props) => {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Duplicate_Given_Partner_Document/";
setLoading(true);
axios.post(myurl, form).then(res => {
console.log(" In Duplicate_Partner_Document res.data.status = " + res.data.status);
console.log(" In Duplicate_Partner_Document res.data.message r_class = " + res.data.message);
//console.log(" In Duplicate_Partner_Document res.data.status = " + res.data.status);
//console.log(" In Duplicate_Partner_Document res.data.message r_class = " + res.data.message);
setLoading(false);
if (String(res.data.status) === String("true")) {
setDuplicate_Partner_Document_api("true");
setDuplicate_Partner_Document_result(res.data.message);
@ -1058,7 +1083,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.log('UpdateStagiaireData : Not good man :( Duplicate_Partner_Document = ' + error);
setDuplicate_Partner_Document_api("false");
alert(" Impossible de dupliquer le document");
@ -1142,11 +1167,12 @@ const Config_Documents = (props) => {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Update_Partner_Document/";
setLoading(true);
axios.post(myurl, form).then(res => {
//console.log(" In Update_one_Partner_Document res.data.status = " + res.data.status);
//console.log(" In Update_one_Partner_Document res.data.message r_class = " + res.data.message);
setLoading(false);
if (String(res.data.status) === String("true")) {
setUpdate_one_Partner_Document_api("true");
setUpdate_one_Partner_Document_result(res.data.message);
@ -1168,7 +1194,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.log('UpdateStagiaireData : Not good man :( Update_one_Partner_Document = ' + error);
setUpdate_one_Partner_Document_api("false");
alert(" Impossible de mettre à jour le document");
@ -1188,9 +1214,9 @@ const Config_Documents = (props) => {
form.append("token", stored_cookie);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_List_Partner_Document_no_filter/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Getall_Partner_Document_No_filter res.data.status = " + res.data.status);
//console.log(" In Getall_Partner_Document_No_filter res.data.message r_class = " + res.data.message);
@ -1205,6 +1231,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Getall_Partner_Document_No_filter = ', error);
setGetall_Partner_Document_No_filter_api("false");
alert(" Impossible de recuperer la liste des documents");
@ -1228,10 +1255,11 @@ const Config_Documents = (props) => {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Given_Personnalisable_Fields_By_courrier_template_id/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
console.log(" In Get_Given_Personnalisable_Fields_From_template_ID res.data.status = " + res.data.status);
console.log(" In Get_Given_Personnalisable_Fields_From_template_ID res.data.message r_class = " + res.data.message);
@ -1247,6 +1275,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Given_Personnalisable_Fields_From_template_ID = ', error);
setGet_Given_Personnalisable_Fields_From_template_ID_api("false");
alert(" Impossible de recuperer la liste des collection et champs personnalisables de l'objet");
@ -1277,8 +1306,10 @@ const Config_Documents = (props) => {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_List_Default_Partner_Document/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Get_List_Personnalisable_Default_Document res.data.status = " + res.data.status);
//console.log(" In Get_List_Personnalisable_Default_Document res.data.message r_class = " + res.data.message);
@ -1294,6 +1325,7 @@ const Config_Documents = (props) => {
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_List_Personnalisable_Default_Document = ', error);
setGet_List_Personnalisable_Default_Document_api("false");
alert(" Impossible de recuperer la liste des documents par default");
@ -1360,8 +1392,274 @@ const Config_Documents = (props) => {
const [duplicate_doc_type, setduplicate_doc_type] = React.useState();
// Gestion des pièces jointes
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", "courrier_template");
formData.append("object_owner_id", selected_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_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_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 [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", "courrier_template");
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();
const [isLoading, setLoading] = useState();
const [file_1_name, setfile_1_name] = useState();
const [file_2_name, setfile_2_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;
setfile_1_name(event.target.files[0]);
console.log("file_size = ", 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;
}
const formData = new FormData();
formData.append('File', fileUploaded);
//formData.append('token', 'K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA');
const stored_cookie = getCookie('tokenmysypart');
return;
};
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");
});
}
// end gestion pièces jointes
return (
<div className="config_document">
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
<Dialog
open={Dialog_1_open}
onClose={Dialog_1_handleClose}
@ -1888,10 +2186,10 @@ const Config_Documents = (props) => {
</div>
</div>
<div className="div_row" style={{ "border": "None" }}>
<div className="div_row_gauche" style={{ "border": "None" }}>
<Button variant="outlined" onClick={submenu_add_one_model_document}
className="detail_class_submenu bton_add_session"
id='menu_import_participant' name='menu_import_participant'>Ajout 1 modèle de Document &nbsp;
id='menu_import_participant' name='menu_import_participant'>Ajout 1 Document &nbsp;
<img src={add_plus} alt="ajout session" className="icon_plus" />
</Button>
</div>
@ -1964,11 +2262,160 @@ const Config_Documents = (props) => {
/>
</div>
{p_detail_type_doc && String(p_detail_type_doc).toLocaleLowerCase() === "email" && <div className="div_row_gauche texte_area_filter" >
Pièces Jointe <br />
<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>}
</div>
<div className="div_row_droite_1_tier" style={{ "textAlign": "left" }}>
{String(partner_document_data_edit_mode) === "1" &&
<div className="div_row" style={{ "fontSize": "12px" }}> Choisir un champ <br />
<div className="div_row" > Choisir un champ <br />
<TextField
name="champ_table"
id="champ_table"
@ -2124,7 +2571,7 @@ const Config_Documents = (props) => {
{String(display_detail_document) !== "1" && String(add_one_document) === "1" && <div className="div_row">
<h3> Personnaliser un nouveau document </h3>
<div className="div_row" style={{ "textAlign": "left" }}>
<div className="div_row"> Choisir le document à ajouter <br />
<div className="div_row_gauche"> Choisir le document à ajouter <br />
<TextField
name="champ_table"
id="champ_table"
@ -2223,7 +2670,7 @@ const Config_Documents = (props) => {
</div>
</div>
<div className="div_row_droite" style={{ "textAlign": "left" }}>
<div className="div_row_droite texte_area_filter" style={{ "textAlign": "left" }}>
<div className="div_row"> Choisir un champ <br />
<TextField
name="one_champ_table"

View File

@ -5,18 +5,17 @@ import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import add_plus from "../mysy_img/plus.png";
import excel_icone from "../mysy_img/excel_icone.png";
import participants from "../mysy_img/participants.png";
import fileDownload from 'js-file-download'
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
@ -26,7 +25,6 @@ import {
} from "react-icons/fc";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
@ -40,15 +38,15 @@ import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { Fab } from "@material-ui/core";
import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io";
import { AiTwotoneEdit, AiTwotoneSave } from "react-icons/ai";
import { AiTwotoneSave } from "react-icons/ai";
import Module_Absence from "./Module_Absence";
import { RiMoreFill } from "react-icons/ri";
import Switch from '@mui/material/Switch';
import { FcSearch } from "react-icons/fc";
import { useHistory } from "react-router-dom";
const DisplayPartnerStagiaires = (props) => {
const history = useHistory();
@ -3420,6 +3418,8 @@ const DisplayPartnerStagiaires = (props) => {
}
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();
@ -3434,7 +3434,7 @@ const DisplayPartnerStagiaires = (props) => {
setfile_1_name(event.target.files[0]);
console.log("file_size = ", file_size, " file_type = ", file_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");
@ -3453,37 +3453,61 @@ const DisplayPartnerStagiaires = (props) => {
return;
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Add_Update_SessionFormation_mass/",
{
method: 'POST',
body: formData,
}
)
.then((response) => response.json())
.then((result) => {
//console.log(" ## result['status'] = ", result['status'])
if (String(result['status']) === String("true")) {
//console.log('Success:', result['message']);
setsessions_file_change_1_result(result['message']);
setsessions_file_change_1_api("true");
//GetCurrentClass_trainingsession();
}
else {
setsessions_file_change_1_message(result['message']);
setsessions_file_change_1_api("false");
}
})
.catch((error) => {
console.error('Error:', error);
setsessions_file_change_1_api("false");
});
};
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();
@ -3498,7 +3522,7 @@ const DisplayPartnerStagiaires = (props) => {
setfile_2_name(event.target.files[0]);
console.log("file_size = ", file_size, " file_type = ", file_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");
@ -3517,34 +3541,7 @@ const DisplayPartnerStagiaires = (props) => {
return;
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Add_Update_SessionFormation_mass/",
{
method: 'POST',
body: formData,
}
)
.then((response) => response.json())
.then((result) => {
//console.log(" ## result['status'] = ", result['status'])
if (String(result['status']) === String("true")) {
//console.log('Success:', result['message']);
setsessions_file_change_2_result(result['message']);
setsessions_file_change_2_api("true");
//GetCurrentClass_trainingsession();
}
else {
setsessions_file_change_2_message(result['message']);
setsessions_file_change_2_api("false");
}
})
.catch((error) => {
console.error('Error:', error);
setsessions_file_change_2_api("false");
});
};
const [Record_All_PJ_api, setRecord_All_PJ_api] = useState();
@ -3559,7 +3556,7 @@ const DisplayPartnerStagiaires = (props) => {
}
if (file_1_name && file_1_name.name) {
console.log(" ### Traitement de : ", file_1_name.name);
//console.log(" ### Traitement de : ", file_1_name.name);
const formData = new FormData();
formData.append('File', file_1_name);
@ -3604,6 +3601,7 @@ const DisplayPartnerStagiaires = (props) => {
else {
setRecord_All_PJ_message(result['message']);
setRecord_All_PJ_api("false");
alert(result['message']);
}
})
@ -3611,13 +3609,11 @@ const DisplayPartnerStagiaires = (props) => {
setLoading(false);
console.error(' Record_All_PJ Error:', error);
setRecord_All_PJ_api("false");
alert(" Impossible d'ajouter la pièce jointe")
});
}
if (file_2_name && file_2_name.name) {
console.log(" ### Traitement de : ", file_2_name.name);
}
}
@ -3662,6 +3658,7 @@ const DisplayPartnerStagiaires = (props) => {
else {
setDelete_one_attached_document_message(result['message']);
setDelete_one_attached_document_api("false");
alert(result['message'])
}
})
@ -3676,6 +3673,12 @@ const DisplayPartnerStagiaires = (props) => {
}
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();
@ -4200,6 +4203,7 @@ const DisplayPartnerStagiaires = (props) => {
setactionmass_ftion_val();
setSelectionModel([]);
settab_convention_pieces_jointes_result([])
};
@ -4261,6 +4265,15 @@ const DisplayPartnerStagiaires = (props) => {
form.append("email_test", selected_convention_email_test);
form.append("email_production", selected_convention_email_destinataire_prod);
// pièce jointe
form.append("file_business_object", "");
var list_files = new FormData();
for (let i=0; i< tab_convention_pieces_jointes_result.length; i++){
form.append('File', tab_convention_pieces_jointes_result[i]);
}
//form.append("File", list_files);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Sent_Convention_Stagiaire_By_Email/";
@ -4327,7 +4340,7 @@ const DisplayPartnerStagiaires = (props) => {
var local_selected_id = liste_selected_inscription_id[i];
var url = process.env.REACT_APP_API_URL + "myclass/api/Download_Convention_Stagiaire_PDF/" + stored_cookie + "/" + local_selected_id + "/" + selected_convention_id;
@ -4368,32 +4381,53 @@ const DisplayPartnerStagiaires = (props) => {
form.append("email_test", selected_convention_email_test);
form.append("email_production", "");
// pièce jointe
form.append("file_business_object", "");
var list_files = new FormData();
for (let i=0; i< tab_convention_pieces_jointes_result.length; i++){
form.append('File', tab_convention_pieces_jointes_result[i]);
}
//form.append("File", list_files);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Sent_Convention_Stagiaire_By_Email/";
axios.post(myurl, form).then(res => {
if (String(res.data.status) === String("true")) {
//console.log(" In Send_Stagiaire_Conventions_By_Email_Test res.data.status = " + res.data.status);
//console.log(" In Send_Stagiaire_Conventions_By_Email_Test res.data.message r_class = " + res.data.message);
setSend_Stagiaire_Conventions_By_Email_Test_api("true");
setSend_Stagiaire_Conventions_By_Email_Test_result(res.data.message);
alert(res.data.message);
Dialog_convention_handleClose_buton()
setLoading(true);
fetch(
process.env.REACT_APP_API_URL + "myclass/api/Sent_Convention_Stagiaire_By_Email/",
{
method: 'POST',
body: form,
}
else {
)
.then((response) => response.json())
.then((result) => {
setLoading(false);
console.log(" In Send_Stagiaire_Conventions_By_Email_Test res.data.status = " + result['status']);
console.log(" In Send_Stagiaire_Conventions_By_Email_Test res.data.message r_class = " + result['message']);
if (String(result['status']) === String("true")) {
setSend_Stagiaire_Conventions_By_Email_Test_api("true");
setSend_Stagiaire_Conventions_By_Email_Test_result(result['message']);
alert(result['message']);
Dialog_convention_handleClose_buton()
}
else {
setSend_Stagiaire_Conventions_By_Email_Test_api("false");
setSend_Stagiaire_Conventions_By_Email_Test_message(result['message']);
alert(result['message']);
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Send_Stagiaire_Conventions_By_Email_Test = ', error);
setSend_Stagiaire_Conventions_By_Email_Test_api("false");
setSend_Stagiaire_Conventions_By_Email_Test_message(res.data.message);
alert(res.data.message);
}
}).catch((error) => {
console.warn('Not good man :( Send_Stagiaire_Conventions_By_Email_Test = ', error);
setSend_Stagiaire_Conventions_By_Email_Test_api("false");
alert("Impossible d'envoyer la convention par email");
//setmyApimyApiMessage("")
})
alert("Impossible d'envoyer l'email de test ");
//setmyApimyApiMessage("")
})
}
@ -4488,6 +4522,31 @@ const DisplayPartnerStagiaires = (props) => {
})
}
const [Get_Convention_List_Of_All_PJ_result, setGet_Convention_List_Of_All_PJ_result] = useState([]);
function Delete_Convention_Attached_Doc(event) {
var doc_to_del_name = event.target.id;
const myArray = tab_convention_pieces_jointes_result;
let new_myArray = myArray.filter(file => file.name !== String(doc_to_del_name) );
console.log( " new_myArray = ", new_myArray);
var new_tab = []
for (let i = 0; i < new_myArray.length; i++){
new_tab.push(new_myArray[i]);
}
settab_convention_pieces_jointes_result(new_tab);
}
return (
<div className="displaypartnerstagiaire">
{isLoading && <div className="loader-container">
@ -4827,6 +4886,7 @@ const DisplayPartnerStagiaires = (props) => {
setselected_convention_id(e.target.value);
var result2 = Get_List_Stagiaire_Conventions_result.filter((local_mymanager) => JSON.parse(local_mymanager)._id === String(e.target.value))
setselected_convention_type(JSON.parse(result2).type_doc);
settab_convention_pieces_jointes_result([]);
}
}
@ -4979,9 +5039,71 @@ const DisplayPartnerStagiaires = (props) => {
</div>
}
<div>
PIECES JOINTES EEEEE xxxx
</div>
{String(selected_convention_type) === "email" && <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 Convention a
</div>
<div className="div_row" style={{ "padding": "5px" }}>
<div style={{ "fontSize": "12px" }}>
<label htmlFor="upload_convention_file">
<input
style={{ display: "none" }}
id="upload_convention_file"
name="upload_convention_file"
type="file"
onChange={sessions_file_change_1_convention}
/>
<Fab
color="secondary"
size="small"
component="span"
aria-label="add"
variant="extended"
>
<IoMdAddCircle /> <nav style={{ "fontSize": "12px" }}> Ajouter un fichier </nav>
</Fab>
</label>
</div>
</div>
{tab_convention_pieces_jointes_result && <div className="div_row" style={{ "padding": "5px" }}>
<div className="div_row">
Liste des pièces jointes <br />
{<div className="div_row">
{tab_convention_pieces_jointes_result && tab_convention_pieces_jointes_result.map((val) => (
<div className="div_row_list_pj_convention" >
<nav style={{ "color": "green", "cursor": "pointer" }}
onClick={(e) => {
Delete_Convention_Attached_Doc(e);
}}
name={val.name} id={val.name}> Supprimer {val.name} </nav> <br />
</div>
))}
</div>}
</div>
</div>}
</div>
</div>}
</DialogContent>
@ -5000,7 +5122,7 @@ const DisplayPartnerStagiaires = (props) => {
Dialog_convention_handleClose_buton();
}
}}
className="bton_enreg_dialog">Envoyer</Button>}
className="bton_enreg_dialog">Envoyer mail</Button>}
{String(selected_convention_type) === "pdf" &&
<Button className="bton_enreg_dialog" onClick={(e) => {
Download_Stagiaire_Conventions_PDF();
@ -5028,7 +5150,7 @@ const DisplayPartnerStagiaires = (props) => {
if (!response) {
return;
}
Download_Stagiaire_Conventions_PDF_Masse();
Dialog_convention_handleClose_buton();
}}

View File

@ -1040,7 +1040,7 @@
border-radius: 1rem;
text-align: right;
}
.bton_suppr {
background: transparent;
@ -1905,6 +1905,7 @@
background: #c8cfd5;
color: black;
width: 30% !important;
margin-left: 10px;
}
.bton_import_excel {
@ -2189,10 +2190,13 @@
text-align: center;
}
.css-l4u8b9-MuiInputBase-root-MuiInput-root{
.css-l4u8b9-MuiInputBase-root-MuiInput-root {
text-align: left !important;
}
}
// end media

View File

@ -612,6 +612,12 @@
float: left;
}
.div_row_list_pj_convention {
width: 100%;
border-left: 3mm ridge rgba(211, 220, 50, .6);
float: left;
}
.block_en_mass {
width: 100%;
float: left;
@ -1229,6 +1235,12 @@
float: left;
}
.div_row_list_pj_convention {
width: 100%;
border-left: 3mm ridge rgba(211, 220, 50, .6);
float: left;
}
.block_en_mass {
width: 50%;
float: left;
@ -1769,6 +1781,12 @@
float: left;
}
.div_row_list_pj_convention {
width: 100%;
border-left: 3mm ridge rgba(211, 220, 50, .6);
float: left;
}
.block_en_mass {
width: 50%;
float: left;
@ -2396,6 +2414,13 @@
float: left;
}
.div_row_list_pj_convention {
width: 100%;
border-left: 3mm ridge rgba(211, 220, 50, .6);
float: left;
}
.block_en_mass {
width: 50%;
float: left;

View File

@ -2282,6 +2282,7 @@
float: left;
}
.block_en_mass {
width: 50%;
float: left;