recette2
cherif 2024-07-26 14:30:17 +02:00
parent 5f7abfa1a1
commit 67f3cbb535
6 changed files with 3244 additions and 46 deletions

View File

@ -1527,28 +1527,7 @@ const Module_Editique = (props) => {
}
/>
{/*<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 } }}
name="event_dialog_type_convention"
id="event_dialog_type_convention"
select
fullWidth
value={selected_convention_type}
onChange={(e) => {
setselected_convention_type(e.target.value);
Get_List_Stagiaire_Convocations(action_server_ref_interne_doc, action_server_nom_doc,
String(e.target.value), Dialog_1_message);
}
}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Email &nbsp;</MenuItem>
<MenuItem value="pdf" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >PDF &nbsp;</MenuItem>
</TextField>*/}
</div>

View File

@ -0,0 +1,488 @@
import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import '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';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint } from "react-icons/fc";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box';
import { Typography, LinearProgress, sliderClasses } from '@mui/material';
import styled from 'styled-components';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
//import FullCalendar from "@fullcalendar/react";
import daygridPlugin from "@fullcalendar/daygrid";
//import interactionPlugin from "@fullcalendar/interaction";
//import timeGridPlugin from "@fullcalendar/timegrid";
import allLocales from '@fullcalendar/core/locales-all'
import { RepeatOnRounded } from "@mui/icons-material";
import { alignPropType } from "react-bootstrap/esm/types";
import ToggleSwitch from "./ToggleSwitch";
import ToggleSwitch_v2_mysy from "./ToggleSwitch_v2_mysy";
import ToggleSwitch_v3_mysy from "./ToggleSwitch_v3_mysy";
import Autocomplete from '@mui/material/Autocomplete';
import FullCalendar, { formatDate } from "@fullcalendar/react";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import interactionPlugin from "@fullcalendar/interaction";
import { FcSearch } from "react-icons/fc";
import { Fab } from "@material-ui/core";
import {
ListItem,
ListItemText,
useTheme,
} from "@mui/material";
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import ChevronRightIcon from '@mui/icons-material/ChevronRight';
import { TreeView } from '@mui/x-tree-view/TreeView';
import { TreeItem } from '@mui/x-tree-view/TreeItem';
import { IoMdAddCircle, IoIosRemoveCircleOutline } from "react-icons/io";
import { FcViewDetails, FcDisapprove, FcInfo } from "react-icons/fc";
import { convertNwSeToNeSw } from "google-map-react";
const Module_Email_Management = (props) => {
const myconntected_employee_id = props.conntected_employee_id;
const [selected_employee_id, setselected_employee_id] = useState(props.conntected_employee_id);
const history = useHistory();
const [isLoading, setLoading] = useState();
const [Dialog_1_message, setDialog_1_message] = React.useState(false);
const [Dialog_1_open, setDialog_1_open] = React.useState(false);
function Dialog_1_handle_change_participant_session(message) {
setDialog_1_message(message);
setDialog_1_open(true);
}
const Dialog_1_handleClose = () => {
//alert(" Utiliser le bouton 'fermer' ");
//setOpen(false);
};
const Dialog_1_handleClose_buton = () => {
setDialog_1_open(false);
};
const [field_suivi_eval, setfield_suivi_eval] = useState("");
const editorRef_suivi_eval = useRef(null);
const [editorRef_suivi_eval_limite, seteditorRef_suivi_eval_limite] = useState(2000);
const [editor_tochange, seteditor_tochange] = useState("");
function editor_keyup() {
seteditor_tochange("1");
}
const [datamodification, setdatamodification] = useState("0");
function DataUpdated() {
setdatamodification("1");
}
const [p_detail_cible, setp_detail_cible] = useState("");
const [p_detail_contenu_doc, setp_detail_contenu_doc] = useState("");
const [p_detail_nom, setp_detail_nom] = useState("");
const [p_detail_ref_interne, setp_detail_ref_interne] = useState("");
const [p_detail_sujet, setp_detail_sujet] = useState("");
const [p_detail_type_doc, setp_detail_type_doc] = useState("");
const [p_detail_duplicate, setp_detail_duplicate] = useState("");
const [p_detail_joint_pdf, setp_detail_joint_pdf] = useState(false);
const [p_detail_default_version, setp_detail_default_version] = useState(false);
const [p_detail_edition_par_client, setp_detail_edition_par_client] = useState(false);
const [p_one_detail_cible, setp_one_detail_cible] = useState("");
const [p_one_detail_contenu_doc, setp_one_detail_contenu_doc] = useState("");
const [p_one_detail_nom, setp_one_detail_nom] = useState("");
const [p_one_detail_ref_interne, setp_one_detail_ref_interne] = useState("");
const [p_one_detail_sujet, setp_one_detail_sujet] = useState("");
const [p_one_detail_type_doc, setp_one_detail_type_doc] = useState("");
const [p_one_detail_duplicate, setp_one_detail_duplicate] = useState("");
const [p_one_detail_edit_by_client, setp_one_detail_edit_by_client] = useState("");
const [p_one_detail_courrier_template_type_document_ref_interne, setp_one_detail_courrier_template_type_document_ref_interne] = useState("");
const [original_courrier_template_id, setoriginal_courrier_template_id] = React.useState("");
const [field_corp_mail, set_field_corp_mail] = useState("");
const [field_corp_mail_initial_value, set_field_corp_mail_initial_value] = useState("");
const [one_field_corp_mail, setone_field_corp_mail] = useState("");
const [one_field_corp_mail_initial_value, setone_field_corp_mail_initial_value] = useState("");
const one_editorRef_programme = useRef(null);
const [one_editorRef_programme_limite, setone_editorRef_programme_limite] = useState(1000);
const [field_programme, setfield_programme] = useState("");
const [field_programme_initial_value, setfield_programme_initial_value] = useState("");
const [one_field_programme, setone_field_programme] = useState("");
const [one_field_programme_initial_value, setone_field_programme_initial_value] = useState("");
const [New_Get_Partner_List_SendEmail_Document_result, setNew_Get_Partner_List_SendEmail_Document_result] = useState([]);
const [Get_Partner_List_SendEmail_Document_api, setGet_Partner_List_SendEmail_Document_api] = useState();
const [Get_Partner_List_SendEmail_Document_message, setGet_Partner_List_SendEmail_Document_message] = useState();
const [Get_Partner_List_SendEmail_Document_result, setGet_Partner_List_SendEmail_Document_result] = useState();
function Get_Partner_List_SendEmail_Document(ref_interne_document) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("ref_interne", ref_interne_document);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_List_Partner_Document_with_filter/";
setLoading(true);
axios.post(myurl, form).then(res => {
//console.log(" In Get_Partner_List_SendEmail_Document res.data.status = " + res.data.status);
//console.log(" In Get_Partner_List_SendEmail_Document res.data.message r_class = " + res.data.message);
setLoading(false);
if (String(res.data.status) === String("true")) {
setGet_Partner_List_SendEmail_Document_api("true");
setGet_Partner_List_SendEmail_Document_result(res.data.message);
var new_data2 = [];
const new_data = res.data.message.map((x) => {
//---
var localid = JSON.parse(x).id;
var local_id = JSON.parse(x)._id;
var local_ref_interne = JSON.parse(x).ref_interne;
var local_nom = JSON.parse(x).nom;
var local_sujet = JSON.parse(x).sujet;
var local_type_doc = JSON.parse(x).type_doc;
var local_cible = JSON.parse(x).cible;
var local_joint_pdf = JSON.parse(x).joint_pdf;
//---
var node = {
"_id": local_id,
"id": localid,
"label": local_nom,
"ref_interne": local_ref_interne,
"nom": local_nom,
"sujet": local_sujet,
"type_doc": local_type_doc,
"cible": local_cible,
"joint_pdf": local_joint_pdf,
};
new_data2.push(node);
console.log(" ## node = ", node)
});
if (new_data2.length > 0)
setNew_Get_Partner_List_SendEmail_Document_result(new_data2);
}
else {
setGet_Partner_List_SendEmail_Document_api("false");
setGet_Partner_List_SendEmail_Document_message(res.data.message);
alert(res.data.message);
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Partner_List_SendEmail_Document = ', error);
setGet_Partner_List_SendEmail_Document_api("false");
alert("Impossible de récupérer les modèles de convocations");
//setmyApimyApiMessage("")
})
}
const [Get_Given_Partner_Document_Data_By_id_api, setGet_Given_Partner_Document_Data_By_id_api] = useState();
const [Get_Given_Partner_Document_Data_By_id_message, setGet_Given_Partner_Document_Data_By_id_message] = useState();
const [Get_Given_Partner_Document_Data_By_id_result, setGet_Given_Partner_Document_Data_By_id_result] = useState();
function Get_Given_Partner_Document_Data_By_id(local_id) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("_id", local_id);
//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 => {
if (String(res.data.status) === "true") {
//console.log(" In Get_Given_Partner_Document_Data_By_id res.data.status = " + res.data.status);
console.log(" In Get_Given_Partner_Document_Data_By_id res.data.message r_class = " + res.data.message);
setLoading(false);
setGet_Given_Partner_Document_Data_By_id_api("true");
setGet_Given_Partner_Document_Data_By_id_result(res.data.message);
if (res.data.message.length > 0) {
var mylocal_document = JSON.parse(res.data.message);
if (mylocal_document._id)
setoriginal_courrier_template_id(mylocal_document._id);
if (mylocal_document.nom)
setp_one_detail_nom(mylocal_document.nom);
if (mylocal_document.type_doc)
setp_one_detail_type_doc(mylocal_document.type_doc);
if (mylocal_document.cible)
setp_one_detail_cible(mylocal_document.cible);
if (mylocal_document.ref_interne) {
setp_one_detail_ref_interne(mylocal_document.ref_interne);
}
if (mylocal_document.courrier_template_type_document_ref_interne) {
setp_one_detail_courrier_template_type_document_ref_interne(mylocal_document.courrier_template_type_document_ref_interne);
} else {
setp_one_detail_courrier_template_type_document_ref_interne("");
}
if (mylocal_document.sujet) {
setp_one_detail_sujet(mylocal_document.sujet);
}
setp_detail_joint_pdf(false)
if (mylocal_document.joint_pdf) {
if (String(mylocal_document.joint_pdf) === "1")
setp_detail_joint_pdf(true)
}
if (mylocal_document.duplicate) {
setp_one_detail_duplicate(mylocal_document.duplicate);
}
else {
setp_one_detail_duplicate("0");
}
if (mylocal_document.edit_by_client) {
setp_one_detail_edit_by_client(mylocal_document.edit_by_client);
}
else {
setp_one_detail_edit_by_client("0");
}
setfield_programme("");
if (mylocal_document.contenu_doc) {
setone_field_programme(String(mylocal_document.contenu_doc));
setone_field_programme_initial_value(String(mylocal_document.contenu_doc));
}
set_field_corp_mail("");
if (mylocal_document.corps_mail) {
setone_field_corp_mail(String(mylocal_document.corps_mail));
setone_field_corp_mail_initial_value(String(mylocal_document.corps_mail));
}
if (document.getElementById('myRef')) {
//myRef.current.scrollIntoView({ behavior: "smooth" });
var divh = document.getElementById('myRef').offsetTop;
window.scrollTo({
top: divh,
behavior: "smooth",
});
}
} else {
alert(" Aucun document recuperé");
}
} else if (String(res.data.status) === String("Err_Connexion")) {
alert('Erreur: ' + res.data.message);
history.push("/Connexion");
}
else {
setGet_Given_Partner_Document_Data_By_id_api("false");
setGet_Given_Partner_Document_Data_By_id_message(res.data.message);
alert(res.data.message);
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Get_Given_Partner_Document_Data_By_id = ', error);
setGet_Given_Partner_Document_Data_By_id_api("false");
alert(" Impossible de recuperer le modèle initial");
//setmyApimyApiMessage("")
})
}
useEffect(() => {
Get_Partner_List_SendEmail_Document("SENDEMAIL_MODELE");
}, [])
return (
<div className="module_email_management">
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
<h3> Module gestion email </h3>
<form onSubmit={"sendEmail"}>
<div>
<div className="session_caract_Dialog" > Choisir un modèle de courrier
{New_Get_Partner_List_SendEmail_Document_result && <Autocomplete
disablePortal
id="competence_nom"
name="competence_nom"
fullWidth
options={New_Get_Partner_List_SendEmail_Document_result}
onChange={(event, value) => {
if (value && value._id) {
Get_Given_Partner_Document_Data_By_id(value._id);
// setselected_statistic_question_id(value.question_id);
} else {
// setselected_statistic_question_id("");
}
}}
renderInput={(params) => <TextField {...params} label="" placeholder="Choisir une option"
inputProps={{ ...params.inputProps, style: { fontSize: 12, height: "1.4rem" } }}
/>
}
/>}
</div>
<div className="session_caract_Dialog">
<div className="div_row_gauche_dialog_session" style={{ "textAlign": 'left', height: '2.5rem', paddingTop: '10px' }}>
Email
</div>
<div className="div_row_droite_dialog_session" style={{ "textAlign": 'right' }}>
<input type="email" name="user_email" style={{ "textAlign": 'left', width: "100%", height: '2.5rem' }} />
</div>
</div>
<div className="session_caract_Dialog">
<div className="div_row_gauche_dialog_session" style={{ "textAlign": 'left' }}>
Corps Email
</div>
</div>
<div className="session_caract_Dialog" style={{ "textAlign": 'left', "width": '100%', "border": "1px solid" }}>
<div style={{ "textAlign": 'left', "width": '100%' }}>
<Editor
onInit={(evt, editor) => editorRef_suivi_eval.current = editor}
initialValue={field_programme}
onKeyUp={editor_keyup}
onEditorChange={(newValue, editor) => {
if (String(editor_tochange) === "1") {
//alert(" change");
DataUpdated();
seteditor_tochange("");
}
}}
init={{
resize: false,
height: 300,
menubar: false,
plugins: [
'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview',
'anchor', 'searchreplace', 'visualblocks', 'code', 'fullscreen',
'insertdatetime', 'media', 'table', 'code', 'help', 'wordcount'
],
toolbar: 'undo redo | blocks | ' +
'bold italic forecolor | alignleft aligncenter ' +
'alignright alignjustify | bullist numlist outdent indent | ' +
'removeformat | help',
content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:14px }'
}}
/>
</div>
</div>
<input type="submit" value="Send" />
</div>
</form>
</div>
)
}
export default Module_Email_Management;

View File

@ -75,15 +75,15 @@ const Recherche_new_v2 = () => {
const [myApiResponse, setmyApiResponse] = useState("false");
const [displayAllClasses, setdisplayAllClasses] = useState("0");
const [showelement, setshowelement] = useState("init");
const [country_code, setcountry_code] = useState("");
const [country_name, setcountry_name] = useState("");
const [city, setcity] = useState("");
const [postal, setpostal] = useState("");
const [latitude, setlatitude] = useState("");
const [longitude, setlongitude] = useState("");
const [IPv4, setIPv4] = useState("");
const [state, setstate] = useState("");
const [userIp, setuserIp] = useState("");
const [country_code, setcountry_code] = useState("FR");
const [country_name, setcountry_name] = useState("France");
const [city, setcity] = useState("Paris");
const [postal, setpostal] = useState("75001");
const [latitude, setlatitude] = useState("48.861000061035156");
const [longitude, setlongitude] = useState("2.3380000591278076");
const [IPv4, setIPv4] = useState("172.71.122.128");
const [state, setstate] = useState("France");
const [userIp, setuserIp] = useState("172.71.122.128");
const [currentPage, setCurrentPage] = useState(1);
const [currentPage2, setCurrentPage2] = useState(1);
const [fin, setfin] = useState(0);
@ -944,21 +944,21 @@ const Recherche_new_v2 = () => {
useEffect(() => {
var ip = "";
async function fetchData() {
const result = await axios('https://geolocation-db.com/json/',);
// const result = await axios('https://geolocation-db.com/json/',);
setuserIp(result.data.IPv4);
setcountry_code(result.data.country_code);
setcountry_name(result.data.country_name);
setcity(result.data.city);
setpostal(result.data.postal);
setlatitude(result.data.latitude);
setlongitude(result.data.longitude);
setIPv4(result.data.IPv4);
setstate(result.data.state);
setuserIp(result.data.IPv4);
/* setuserIp("172.71.122.128");
setcountry_code("FR");
setcountry_name("France");
setcity("Paris");
setpostal("75001");
setlatitude("48.861000061035156");
setlongitude("2.3380000591278076");
setIPv4("172.71.122.128");
setstate("France");*/
let windowWidth = window.innerWidth;
@ -989,6 +989,8 @@ const Recherche_new_v2 = () => {
}
}
fetchData();
async function loadSuggestedWord() {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Suggested_Word/";

View File

@ -38,6 +38,7 @@ import Typography from '@mui/material/Typography';
import Menu from '@mui/material/Menu';
import Module_Editique from "./Module_Editique";
import Module_Attestation_Formation from "./Module_Attestation_Formation";
import Module_Email_Management from "./Module_Email_Management";
import ReactDOM from 'react-dom';
@ -597,6 +598,21 @@ const TestUrl_New = (props) => {
const [pad_signature_img, setpad_signature_img] = React.useState("");
const [Dialog_1_message, setDialog_1_message] = React.useState(false);
const [Dialog_1_open, setDialog_1_open] = React.useState(false);
function Dialog_1_handle_change_participant_session(message) {
setDialog_1_message(message);
setDialog_1_open(true);
}
const Dialog_1_handleClose = () => {
setDialog_1_open(false);
}
return (
<div className="testurl_new">
<Helmet>
@ -637,6 +653,44 @@ const TestUrl_New = (props) => {
</Dialog>
{ /********* Dialog email */}
<Dialog
open={Dialog_1_open}
onClose={Dialog_1_handleClose}
className="module_agenda"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogContent className="DialogContent_width" style={{ "minHeight": "50rem", "width":'30rem ! important', "borderRadius":"10px"}}>
<DialogContentText>
{Dialog_1_message}
</DialogContentText>
<Module_Email_Management />
</DialogContent>
<DialogActions>
<div className="div_row">
<div className="div_row_gauche">
<Button onClick={"Update_One_Agenda_Event"} className="bton_enreg_dialog">Mettre à jour</Button>
</div>
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Button onClick={Dialog_1_handleClose} className="bton_annule_dialog" >Fermer</Button>
</div>
</div>
</DialogActions>
</Dialog>
{ /********* Dialog email */}
<div className="div_mobile">
@ -663,6 +717,22 @@ const TestUrl_New = (props) => {
<div style={{ cursor: 'pointer', border: "1px solid" }}>I can now be moved around!</div>
</Draggable>
<div>
<h3>
Gestion du module Module_Email_Management
</h3>
<button onClick={(e) => {
setDialog_1_open(true);
}}>Envoie email</button>
</div>
<Editor
onInit={(evt, editor) => editorRef_description.current = editor}

File diff suppressed because it is too large Load Diff

View File

@ -118,3 +118,4 @@
@import "./components/moduleselectionapprenants";
@import "./components/emarge_qr_code";
@import "./components/partner_product_service";
@import "./components/module_email_management";