24/12/2024 - 22h

recette2
cherif 2024-12-24 22:18:19 +01:00
parent 6916a25595
commit 232cbd53e9
35 changed files with 15130 additions and 109 deletions

65
package-lock.json generated
View File

@ -91,6 +91,7 @@
"react": "^18.2.0",
"react-apexcharts": "^1.4.0",
"react-app-rewired": "^2.2.1",
"react-audio-player": "^0.17.0",
"react-audio-voice-recorder": "^2.2.0",
"react-big-calendar": "^1.8.4",
"react-bootstrap": "^2.1.2",
@ -134,7 +135,7 @@
"react-paginate": "^8.1.1",
"react-pdf": "^7.7.1",
"react-pick-color": "^2.0.0",
"react-player": "^2.10.0",
"react-player": "^2.16.0",
"react-pro-sidebar": "^1.1.0",
"react-range": "^1.8.12",
"react-rating-stars-component": "^2.2.0",
@ -175,6 +176,7 @@
"swr": "^1.2.1",
"tinymce": "^7.1.2",
"use-global-state": "^0.1.2",
"use-sound": "^4.0.3",
"victory": "^36.6.6",
"video-react": "^0.15.0",
"web-vitals": "^2.1.4",
@ -16268,6 +16270,11 @@
"node": ">= 6.0.0"
}
},
"node_modules/howler": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/howler/-/howler-2.2.4.tgz",
"integrity": "sha512-iARIBPgcQrwtEr+tALF+rapJ8qSc+Set2GJQl7xT1MQzWaVkFebdJhR3alVlSiUf5U7nAANKuj3aWpwerocD5w=="
},
"node_modules/hpack.js": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
@ -26076,6 +26083,18 @@
"semver": "bin/semver"
}
},
"node_modules/react-audio-player": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/react-audio-player/-/react-audio-player-0.17.0.tgz",
"integrity": "sha512-aCZgusPxA9HK7rLZcTdhTbBH9l6do9vn3NorgoDZRxRxJlOy9uZWzPaKjd7QdcuP2vXpxGA/61JMnnOEY7NXeA==",
"dependencies": {
"prop-types": "^15.7.2"
},
"peerDependencies": {
"react": ">=16",
"react-dom": ">=16"
}
},
"node_modules/react-audio-visualize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/react-audio-visualize/-/react-audio-visualize-1.2.0.tgz",
@ -27363,9 +27382,9 @@
}
},
"node_modules/react-player": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/react-player/-/react-player-2.11.0.tgz",
"integrity": "sha512-fIrwpuXOBXdEg1FiyV9isKevZOaaIsAAtZy5fcjkQK9Nhmk1I2NXzY/hkPos8V0zb/ZX416LFy8gv7l/1k3a5w==",
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/react-player/-/react-player-2.16.0.tgz",
"integrity": "sha512-mAIPHfioD7yxO0GNYVFD1303QFtI3lyyQZLY229UEAp/a10cSW+hPcakg0Keq8uWJxT2OiT/4Gt+Lc9bD6bJmQ==",
"dependencies": {
"deepmerge": "^4.0.0",
"load-script": "^1.0.0",
@ -33031,6 +33050,17 @@
}
}
},
"node_modules/use-sound": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/use-sound/-/use-sound-4.0.3.tgz",
"integrity": "sha512-L205pEUFIrLsGYsCUKHQVCt0ajs//YQOFbEQeNwaWaqQj3y3st4SuR+rvpMHLmv8hgTcfUFlvMQawZNI3OE18w==",
"dependencies": {
"howler": "^2.1.3"
},
"peerDependencies": {
"react": ">=16.8"
}
},
"node_modules/use-sync-external-store": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
@ -47129,6 +47159,11 @@
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
"integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ=="
},
"howler": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/howler/-/howler-2.2.4.tgz",
"integrity": "sha512-iARIBPgcQrwtEr+tALF+rapJ8qSc+Set2GJQl7xT1MQzWaVkFebdJhR3alVlSiUf5U7nAANKuj3aWpwerocD5w=="
},
"hpack.js": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
@ -54524,6 +54559,14 @@
}
}
},
"react-audio-player": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/react-audio-player/-/react-audio-player-0.17.0.tgz",
"integrity": "sha512-aCZgusPxA9HK7rLZcTdhTbBH9l6do9vn3NorgoDZRxRxJlOy9uZWzPaKjd7QdcuP2vXpxGA/61JMnnOEY7NXeA==",
"requires": {
"prop-types": "^15.7.2"
}
},
"react-audio-visualize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/react-audio-visualize/-/react-audio-visualize-1.2.0.tgz",
@ -55446,9 +55489,9 @@
}
},
"react-player": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/react-player/-/react-player-2.11.0.tgz",
"integrity": "sha512-fIrwpuXOBXdEg1FiyV9isKevZOaaIsAAtZy5fcjkQK9Nhmk1I2NXzY/hkPos8V0zb/ZX416LFy8gv7l/1k3a5w==",
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/react-player/-/react-player-2.16.0.tgz",
"integrity": "sha512-mAIPHfioD7yxO0GNYVFD1303QFtI3lyyQZLY229UEAp/a10cSW+hPcakg0Keq8uWJxT2OiT/4Gt+Lc9bD6bJmQ==",
"requires": {
"deepmerge": "^4.0.0",
"load-script": "^1.0.0",
@ -59833,6 +59876,14 @@
"use-isomorphic-layout-effect": "^1.1.1"
}
},
"use-sound": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/use-sound/-/use-sound-4.0.3.tgz",
"integrity": "sha512-L205pEUFIrLsGYsCUKHQVCt0ajs//YQOFbEQeNwaWaqQj3y3st4SuR+rvpMHLmv8hgTcfUFlvMQawZNI3OE18w==",
"requires": {
"howler": "^2.1.3"
}
},
"use-sync-external-store": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",

View File

@ -86,6 +86,7 @@
"react": "^18.2.0",
"react-apexcharts": "^1.4.0",
"react-app-rewired": "^2.2.1",
"react-audio-player": "^0.17.0",
"react-audio-voice-recorder": "^2.2.0",
"react-big-calendar": "^1.8.4",
"react-bootstrap": "^2.1.2",
@ -129,7 +130,7 @@
"react-paginate": "^8.1.1",
"react-pdf": "^7.7.1",
"react-pick-color": "^2.0.0",
"react-player": "^2.10.0",
"react-player": "^2.16.0",
"react-pro-sidebar": "^1.1.0",
"react-range": "^1.8.12",
"react-rating-stars-component": "^2.2.0",
@ -170,6 +171,7 @@
"swr": "^1.2.1",
"tinymce": "^7.1.2",
"use-global-state": "^0.1.2",
"use-sound": "^4.0.3",
"victory": "^36.6.6",
"video-react": "^0.15.0",
"web-vitals": "^2.1.4",

BIN
public/audi_grrr.mp3 Normal file

Binary file not shown.

BIN
public/audio.mp3 Normal file

Binary file not shown.

View File

@ -128,4 +128,19 @@
<priority>1.0000</priority>
</url>
<url>
<loc>https://www.mysy-training.com/Display-Detail-Article/comment-rendre-vos-formations-eligibles-au-cpf-grace-a-mysy-training--23f</loc>
<lastmod>2024-12-12T11:35:41+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0000</priority>
</url>
<url>
<loc>https://www.mysy-training.com/Display-Detail-Article/optimisation-qualiopi---simplifiez-votre-audit-avec-un-logiciel-adapte-aux-centres-de-formation-910</loc>
<lastmod>2024-12-15T11:35:41+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0000</priority>
</url>
</urlset>

View File

@ -91,8 +91,6 @@ function Abonnement(props) {
var num_facture = cellValues.row.num_facture;
var url = process.env.REACT_APP_API_URL + "myclass/api/GetCustomerInvoice/" + stored_cookie + "/" + num_facture;
axios.get(url, { responseType: 'blob', },)
.then((res) => {
fileDownload(res.data, nom_facture)

View File

@ -20,6 +20,10 @@ import UpgradeToPro from "./UpgradeToPro"
import Profil_Objectif from "./ProfilObjectif";
import { useLocation } from "react-router-dom";
import Intranet_Factures_Client from "./Intranet_Factures_Client";
import Intranet_Tous_Documents from "./Intranet_Tous_Documents";
import Modules_Mes_Documents from "./Modules_Mes_Documents";
function Account() {
const [menu, setmenu] = useState("affichage");
const [cookie, setCookie, removeCookie] = useCookies(['tokenmysych']);
@ -42,10 +46,13 @@ function Account() {
const apiUrl = process.env.REACT_APP_API_URL;
const formData = new FormData();
//alert("stored_user = "+stored_user);
const location = useLocation();
useEffect(() => {
var list_menu = ["affichage", "recherche", "upgradecompte", "profil_objectif", "mes_factures", "mes_documents"]
getImage();
if (typeof (stored_user) === "undefined" || String(stored_user) === '') {
@ -85,7 +92,7 @@ function Account() {
const [isimage, setisimage] = useState();
function getImage(e) {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/getRecodedImage/";
var myurl = process.env.REACT_APP_API_URL + "myclass/api/getRecodedImage/";
var form = new FormData();
form.append("token", stored_user);
form.append("type", "user");
@ -149,12 +156,40 @@ function Account() {
setmenu("recherche");
};
const displayProfil_Objectif = () => {
setmenu("profil_objectif");
};
const displayProfil_Facture = () => {
setmenu("mes_factures");
};
const displayProfil_Devis = () => {
setmenu("mes_devis");
};
const displayProfil_Convention = () => {
setmenu("mes_conventions");
};
const displayProfil_Convocation = () => {
setmenu("mes_convocations");
};
const displayProfil_Apprenant = () => {
setmenu("mes_apprenants");
};
const displayProfil_Tout_Documents = () => {
setmenu("tout_documents");
};
const displayProfil_Modules_Mes_Documents = () => {
setmenu("modules_mes_documents");
};
const upgradetopro = () => {
setmenu("upgradecompte");
@ -164,6 +199,9 @@ function Account() {
setmenu("affichage");
};
const [connected_user_data, setconnected_user_data] = useState();
function GetUserNameFromToken(event) {
var form = new FormData();
@ -179,8 +217,11 @@ function Account() {
setusername(JSON.parse(res.data.message).email);
if (JSON.parse(res.data.message).migrated &&
String(JSON.parse(res.data.message).migrated) === String("1")) {
setmigratedaccount(String(JSON.parse(res.data.message).migrated));
setmigratedaccount(String(JSON.parse(res.data.message).migrated));
}
setconnected_user_data(JSON.parse(res.data.message));
//setmyApiResponse("true");
//setResult(res.data.message)
//setmyApimyApiMessage("OK")
@ -268,6 +309,7 @@ function Account() {
const [isSelected, setIsSelected] = useState(false);
const [isnewimage, setisnewimage] = useState();
const changeHandler = (event) => {
let file_size = event.target.files[0].size;
@ -318,8 +360,8 @@ function Account() {
<link rel="canonical" href={window.location.href} />
</Helmet>
<h1 style={{ fontSize: '0.1px', opacity:'0' }}>Éditeur Français de logiciels pour organisme de formation. Avec solutions de E-Learning, gestion administrative et gestion relation client nous accompagnons les organismes de formation à réaliser laudit QUALIOPI en toute sérénité. Nous sommes les moins cher du marché. Nous vous accompagnons automatiser vos process : inscription, évaluation, émargement (qr-code), Check-list QUALIOPI, Personnalisation et édition documents,
Gestion formateurs, Catalogue formations personnalisé </h1>
<h1 style={{ fontSize: '0.1px', opacity: '0' }}>Éditeur Français de logiciels pour organisme de formation. Avec solutions de E-Learning, gestion administrative et gestion relation client nous accompagnons les organismes de formation à réaliser laudit QUALIOPI en toute sérénité. Nous sommes les moins cher du marché. Nous vous accompagnons automatiser vos process : inscription, évaluation, émargement (qr-code), Check-list QUALIOPI, Personnalisation et édition documents,
Gestion formateurs, Catalogue formations personnalisé </h1>
<Header />
@ -345,29 +387,54 @@ function Account() {
<div className="nom_prenom"> {username && <b> {username} </b>}
{!username && <b> xxxx </b>} </div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayPersoInfo}> INFORMATIONS PERSONNELLES</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Objectif}> PROFILS & OBJECTIFS</div>
<hr className="my_hr" />
{/*<div className="sousmenu" onClick={displayHistory}> HISTORIQUE RECHERCHE</div>
<hr className="my_hr" />
<div className="sousmenu"> HISTORIQUE CONNEXION</div>
<hr className="my_hr" />
<div className="sousmenu"> MES MESSAGES </div>
{String(migratedaccount) !== String("1") && <div>
<hr className="my_hr" />
<div className="sousmenu" style={{ "color": "#81BC3A" }} onClick={upgradetopro}> PASSER AU COMPTE PRO</div>
</div>}
{/** Menu pour un utilisateur de type 'user'. Exemple, l'intranet du client d'un client */}
{connected_user_data && connected_user_data.type &&
String(connected_user_data.type) === "user" &&
<div>
<div className="sousmenu" onClick={displayPersoInfo}> INFORMATIONS PERSONNELLES</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={"displayProfil_Facture"}> CATALOGUE</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Apprenant}> APPRENANTS</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Convention}> CONVENTIONS </div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Convocation}> CONVOCATION </div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Devis}> DEVIS</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Facture}> FACTURES</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Tout_Documents}> MES DOCUMENTS</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Modules_Mes_Documents}> MODULE TOUS DOCUMENTS</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={deletemyaccount}> SUPPRIMER MON COMPTE</div>
<hr className="my_hr" />
</div>}
{/** Menu pour un utilisateur NON type 'user' exemple un apprenant */}
{connected_user_data && connected_user_data.type &&
String(connected_user_data.type) !== "user" &&
<div>
<div className="sousmenu" onClick={displayPersoInfo}> INFORMATIONS PERSONNELLES</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Objectif}> PROFILS & OBJECTIFS</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={"displayProfil_Objectif"}> MES DOCUMENTS</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Modules_Mes_Documents}> MODULE TOUS DOCUMENTS</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={displayProfil_Facture}> MES FACTURES</div>
<hr className="my_hr" />
<div className="sousmenu" onClick={deletemyaccount}> SUPPRIMER MON COMPTE</div>
<hr className="my_hr" />
</div>}
<hr className="my_hr" />*/}
<div className="sousmenu" onClick={deletemyaccount}> SUPPRIMER MON COMPTE</div>
<hr className="my_hr" />
</div>
<div className="div_droite">
<div className="div_droite" style={{ border: 'none' }}>
{String(myApiResponse) === String("true") && <div className="okUpdateData">
{result}
@ -385,6 +452,27 @@ function Account() {
{String(menu) === String("profil_objectif") && <Profil_Objectif />}
{String(menu) === String("mes_factures") && connected_user_data && connected_user_data.partner_owner_recid &&
connected_user_data.partner_client_id &&
<Intranet_Factures_Client partner_client_id={connected_user_data.partner_client_id}
partner_owner_recid={connected_user_data.partner_owner_recid}
/>}
{String(menu) === String("tout_documents") && connected_user_data && connected_user_data.partner_owner_recid &&
connected_user_data.partner_client_id &&
<Intranet_Tous_Documents partner_client_id={connected_user_data.partner_client_id}
partner_owner_recid={connected_user_data.partner_owner_recid}
/>}
{String(menu) === String("modules_mes_documents") && connected_user_data && connected_user_data.partner_owner_recid &&
connected_user_data.partner_client_id &&
<Modules_Mes_Documents partner_client_id={connected_user_data.partner_client_id}
partner_owner_recid={connected_user_data.partner_owner_recid}
/>}
{String(menu) === String("mes_documents") && <Profil_Objectif />}
</div>
</div>

View File

@ -3022,6 +3022,7 @@ const AddClassManual = (props) => {
formData.append("status", "0");
formData.append("object_owner_collection", "myclass");
formData.append("object_owner_id", selected_class_id);
formData.append("type_document", "");
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);
@ -3131,7 +3132,7 @@ const AddClassManual = (props) => {
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();
@ -3824,7 +3825,7 @@ const AddClassManual = (props) => {
DataUpdated();
}
const [Dialog_mysy_ia_open, setDialog_mysy_ia_open] = React.useState(false);
return (
<div className="addclassmanual">

View File

@ -32,9 +32,67 @@ import { IoCloseCircleOutline } from "react-icons/io5";
import AttachFileIcon from '@mui/icons-material/AttachFile';
import Radio from '@mui/material/Radio';
import { FcOpenedFolder } from "react-icons/fc";
import { MdManageAccounts } from "react-icons/md";
import { FcInfo } from "react-icons/fc";
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 { IconButton } from '@material-ui/core';
import CancelPresentationIcon from '@mui/icons-material/CancelPresentation';
import { makeStyles } from "@material-ui/core/styles";
import Paper from '@material-ui/core/Paper';
import Draggable from 'react-draggable';
import Visibility from '@mui/icons-material/Visibility';
import VisibilityOff from '@mui/icons-material/VisibilityOff';
import { LiaDharmachakraSolid } from "react-icons/lia";
import WarningAmberIcon from '@mui/icons-material/WarningAmber';
import BlockIcon from '@mui/icons-material/Block';
import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';
function PaperComponent(props) {
return (
<Draggable
handle="#draggable-dialog-title"
cancel={'[class*="MuiDialogContent-root"]'}
>
<Paper {...props} />
</Draggable>
);
}
const useStyles = makeStyles((theme) => ({
dialog: {
position: 'absolute',
// left: 10,
top: 400
},
paper: {
overflowY: 'unset',
},
customizedButton: {
position: 'absolute',
left: '98%',
top: '-3%',
backgroundColor: 'lightgray',
color: 'gray',
},
}));
const AddParnerClient = (props) => {
const classes = useStyles();
const history = useHistory();
const [submenu, setsubmenu] = useState("");
@ -52,6 +110,8 @@ const AddParnerClient = (props) => {
const [p_client_email, setclient_email] = useState("");
const [p_client_nom, setclient_nom] = useState("");
const [p_client_intranet_account_id, setp_client_intranet_account_id] = useState("0");
const [p_client_type_id, setp_client_type_id] = useState("");
const [p_client_type_label, setp_client_type_label] = useState("");
@ -220,7 +280,7 @@ const AddParnerClient = (props) => {
inactive_active_menu_header("submenu_contact");
}
async function submenu_activite() {
setsubmenu("submenu_activite");
@ -617,6 +677,12 @@ const AddParnerClient = (props) => {
}
if (mylocalclient.intranet_account_id) {
setp_client_intranet_account_id(mylocalclient.intranet_account_id);
} else {
setp_client_intranet_account_id("0");
}
if (mylocalclient.raison_sociale) {
setclient_raison_sociale(mylocalclient.raison_sociale);
} else {
@ -2696,6 +2762,7 @@ const AddParnerClient = (props) => {
formData.append("status", "0");
formData.append("object_owner_collection", "partner_client");
formData.append("object_owner_id", props.client_id);
formData.append("type_document", "");
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);
@ -2996,9 +3063,261 @@ const AddParnerClient = (props) => {
})
}
const [Dialog_mysy_intranet_account_open, setDialog_mysy_intranet_account_open] = React.useState(false);
const Dialog_mysy_intranet_account_handleClose = () => {
setDialog_mysy_intranet_account_open(false)
};
const [p_new_login, setp_new_login] = React.useState("");
const [p_new_pwd, setp_new_pwd] = React.useState("");
const [p_conf_new_login, setp_conf_new_login] = React.useState("");
const [p_detail_user_login_locked, setp_detail_user_login_locked] = useState("");
const [p_detail_user_login, setp_detail_user_login] = useState("");
function Generate_Pwd() {
var randomstring = Math.random().toString(36).slice(-8);
setp_new_pwd(randomstring);
setp_conf_new_login(randomstring);
}
const [currentpawdvisible, setcurrentpawdvisible] = useState(false);
const handleClickShowPassword = () => {
if (currentpawdvisible == false) {
document.getElementsByName("new_pwd")[0].type = "text";
document.getElementsByName("conf_new_login")[0].type = "text";
setcurrentpawdvisible(true);
}
else if (currentpawdvisible == true) {
document.getElementsByName("new_pwd")[0].type = "password";
document.getElementsByName("conf_new_login")[0].type = "password";
setcurrentpawdvisible(false);
}
};
const [Add_Update_Client_Intranet_Login_Pass_Data_api, setAdd_Update_Client_Intranet_Login_Pass_Data_api] = useState();
const [Add_Update_Client_Intranet_Login_Pass_Data_message, setAdd_Update_Client_Intranet_Login_Pass_Data_message] = useState();
const [Add_Update_Client_Intranet_Login_Pass_Data_result, setAdd_Update_Client_Intranet_Login_Pass_Data_result] = useState();
function Add_Update_Client_Intranet_Login_Pass_Data() {
var form = new FormData();
//form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA");
// Controle sur les champs
if (p_new_pwd.trim() == "") {
alert(" Vous devez saisir un mot de passe");
return;
}
if (p_conf_new_login.trim() == "") {
alert(" Vous devez confirmer le mot de passe");
return;
}
/*var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!p_new_login.match(validRegex)) {
alert("L'adresse email est invalide.");
return;
}*/
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("partner_client_id", props.client_id);
form.append("default_pwd", p_new_pwd);
// form.append("ressource_humaine_id", selected_id);
//console.log(" form == ", form);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Create_Partner_Client_Intranet_Account/";
if (p_client_intranet_account_id && String(p_client_intranet_account_id).length > 3) {
// Il s'agit d'une mise à jour de mot de passe
myurl = process.env.REACT_APP_API_URL + "myclass/api/Update_Pwd_Partner_Client_Intranet_Account/";
console.log(" ### mise à jour INTRANET ");
} else {
console.log(" ### creation INTRANET ");
}
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
//console.log(" In Add_Update_Client_Intranet_Login_Pass_Data res.data.status = " + res.data.status);
//console.log(" In Add_Update_Client_Intranet_Login_Pass_Data res.data.message r_class = " + res.data.message);
if (String(res.data.status) === String("true")) {
setAdd_Update_Client_Intranet_Login_Pass_Data_api("true");
setAdd_Update_Client_Intranet_Login_Pass_Data_result(res.data.message);
//setp_detail_user_login(p_new_login);
Dialog_mysy_intranet_account_handleClose();
alert(res.data.message);
setp_new_login('');
setp_new_pwd('');
setp_conf_new_login('');
}
else {
setAdd_Update_Client_Intranet_Login_Pass_Data_api("false");
setAdd_Update_Client_Intranet_Login_Pass_Data_message(res.data.message);
alert(res.data.message);
}
}).catch((error) => {
setLoading(false);
console.warn('UpdateStagiaireData : Not good man :( Add_Update_Client_Intranet_Login_Pass_Data = ' + error);
setAdd_Update_Client_Intranet_Login_Pass_Data_api("false");
alert(" Impossible de créer ou mettre à jour le compte intranet ");
})
}
return (
<div className="add_partner_client">
{/*** GESTION Compte Intranet */}
<Dialog
open={Dialog_mysy_intranet_account_open}
className="displaypartnersession"
static
onClose={() => null}
PaperProps={{
className: classes.paper, // Apply the paper style
style: {
overflowY: 'unset',
position: 'absolute',
top: '10rem',
margin: "2px",
},
}}
hideBackdrop={true}
disableScrollLock
classes={{
paper: classes.dialog
}}
PaperComponent={PaperComponent}
aria-labelledby="draggable-dialog-title"
>
<DialogTitle style={{ cursor: 'move' }} id="draggable-dialog-title"> Gestion compte intranet </DialogTitle>
<DialogContent className="DialogContent_width" >
<div className="session_caract_Dialog" > Login
<TextField
autoFocus
margin="dense"
id="new_login"
disabled
//label="Prix Unitaire"
fullWidth
//variant="standard"
value={p_client_email}
/>
</div>
<div className="session_caract_Dialog" > Mot de passe
<TextField
autoFocus
margin="dense"
id="new_pwd"
name="new_pwd"
type="password"
//label="Prix Unitaire"
fullWidth
//variant="standard"
value={p_new_pwd}
onChange={(e) => {
setp_new_pwd(e.target.value);
}
}
/>
<nav className="show_pwd_div" onClick={handleClickShowPassword}>
{currentpawdvisible ? <Visibility /> : <VisibilityOff />}
</nav>
</div>
<div className="session_caract_Dialog" > Confirmer Mot de passe
<TextField
autoFocus
margin="dense"
id="conf_new_login"
name="conf_new_login"
type="password"
//label="Prix Unitaire"
fullWidth
//variant="standard"
value={p_conf_new_login}
onChange={(e) => {
setp_conf_new_login(e.target.value);
}
}
/>
<Button onClick={Generate_Pwd} className="bton_enreg_dialog" style={{ "width": "100%", "margin": "0px", "background": "orange" }}>Générer automatiquement un mot de passe &nbsp; <LiaDharmachakraSolid style={{ "fontSize": "medium" }} /> </Button>
</div>
</DialogContent>
<DialogActions>
<IconButton
autoFocus
onClick={Dialog_mysy_intranet_account_handleClose}
color="primary"
className={classes.customizedButton}
>
<CancelPresentationIcon />
</IconButton>
<div className="div_row">
<div className="div_row_gauche">
&nbsp;
</div>
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Tooltip className="tooltip_css" id="my-tooltip04" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip04" data-tooltip-html="L'utilisateur sera notifié par email. Il recevra le login et le nouveau mot de passe.">
{p_client_intranet_account_id && String(p_client_intranet_account_id).length > 3 &&
<Button onClick={Add_Update_Client_Intranet_Login_Pass_Data} className="bton_enreg_dialog">Mettre à jour &nbsp;<FcInfo /></Button>}
{!p_client_intranet_account_id || String(p_client_intranet_account_id).length <= 3 &&
<Button onClick={Add_Update_Client_Intranet_Login_Pass_Data} className="bton_enreg_dialog">Création Compte Intranet &nbsp;<FcInfo /></Button>}
</a>
</div>
</div>
</DialogActions>
</Dialog>
{/*** FIN GESTION Compte Intranet */}
{String(props.new_customer) === "1" && <div className="div_row" style={{ "paddingRight": "5px" }}>
<div className="div_row">
<Button variant="outlined" onClick={submenu_donnee_client} className="detail_submenu client_menu" id='submenu_donnee_client' name='submenu_donnee_client'>Données Principales</Button>
@ -3470,7 +3789,7 @@ const AddParnerClient = (props) => {
</Button>
{/*<Button variant="outlined" onClick={submenu_activite} className="detail_submenu client_menu" id='submenu_activite' name='submenu_activite'>Activité</Button>*/}
<Button variant="outlined" onClick={submenu_piece_jointe} className="detail_submenu client_menu" id='submenu_piece_jointe' name='submenu_piece_jointe'>Pièces Jointes</Button>
<Button variant="outlined" className="detail_submenu client_menu" id='submenu_factures' name='submenu_factures'
onClick={(event) => {
inactive_active_menu_header("submenu_factures");
@ -3506,7 +3825,7 @@ const AddParnerClient = (props) => {
{String(submenu).trim() === "submenu_donnee_client" && <div className="training_data" onChange={DataUpdated}>
<div className="session_caract" >
&nbsp; <br /><br />
&nbsp; <br />
<nav style={{ "paddingLeft": "10px" }}>
<Radio
checked={p_client_is_company === '1'}
@ -3551,6 +3870,21 @@ const AddParnerClient = (props) => {
/> &nbsp; P. Public
</nav>
<Tooltip className="tooltip_css" id="tooltip_intranet_account" style={{ "fontSize": "10px" }} />
<a data-tooltip-id="tooltip_intranet_account" data-tooltip-html="Création & Gestion compte intranet">
<nav onClick={(e) => {
setDialog_mysy_intranet_account_open(true);
}}
>
Compte Intranet <FcInfo /> &nbsp; <MdManageAccounts style={{ fontSize: '20px' }} /> &nbsp;
{p_client_intranet_account_id && String(p_client_intranet_account_id).length > 3 && <CheckCircleOutlineIcon style={{ color: 'green' }} />}
{!p_client_intranet_account_id || String(p_client_intranet_account_id).length <= 3 && <BlockIcon style={{ color: 'orangered' }} />}
<br /></nav>
</a>
</div>
<div className="session_caract"> Raison sociale <br />
@ -4654,8 +4988,8 @@ const AddParnerClient = (props) => {
{String(submenu).trim() === "submenu_activite" && <div className="training_data">
<PartnerClientActivite email={p_client_email} conntected_employee_id={props.conntected_employee_id}
related_collection={"partner_client"} />
<PartnerClientActivite email={p_client_email} conntected_employee_id={props.conntected_employee_id}
related_collection={"partner_client"} />
</div>}
{String(submenu).trim() === "submenu_piece_jointe" && <div className="training_data">

View File

@ -958,7 +958,7 @@ const Apprenant = (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);
@ -971,6 +971,7 @@ const Apprenant = (props) => {
formData.append("status", "0");
formData.append("object_owner_collection", "apprenant");
formData.append("object_owner_id", selected_apprenant_id);
formData.append("type_document", "");
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);

View File

@ -1873,6 +1873,7 @@ const Config_Documents_Super_Admin = (props) => {
formData.append("status", "0");
formData.append("object_owner_collection", "courrier_template");
formData.append("object_owner_id", selected_id);
formData.append("type_document", "");
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);

View File

@ -7387,7 +7387,7 @@ const DisplayPartnerSession = (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);
@ -7400,6 +7400,7 @@ const DisplayPartnerSession = (props) => {
formData.append("status", "0");
formData.append("object_owner_collection", "inscription");
formData.append("object_owner_id", selected_inscription_id);
formData.append("type_document", "");
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);
@ -7461,7 +7462,7 @@ const DisplayPartnerSession = (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);
@ -7474,6 +7475,7 @@ const DisplayPartnerSession = (props) => {
formData.append("status", "0");
formData.append("object_owner_collection", "session_formation");
formData.append("object_owner_id", selected_session_id);
formData.append("type_document", "");
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);

View File

@ -5124,6 +5124,7 @@ const DisplayPartnerStagiaires = (props) => {
formData.append("status", "0");
formData.append("object_owner_collection", "inscription");
formData.append("object_owner_id", selected_id);
formData.append("type_document", "");
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);

View File

@ -4753,6 +4753,7 @@ const Employes = (props) => {
formData.append("status", "0");
formData.append("object_owner_collection", "ressource_humaine");
formData.append("object_owner_id", selected_id);
formData.append("type_document", "");
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);
@ -7153,8 +7154,6 @@ const Employes = (props) => {
open={Dialog_1_open_create_update_login_pwd_update}
onClose={Dialog_1_handleClose_buton_create_update_login_pwd_update}
className="employes"
>
<DialogTitle>MySy Information</DialogTitle>
@ -7249,8 +7248,6 @@ const Employes = (props) => {
</DialogContent>
<DialogActions>
<div className="div_row">
<div className="div_row_gauche">
<Tooltip className="tooltip_css" id="my-tooltip04" style={{ "fontSize": "12px" }} />
@ -7265,8 +7262,6 @@ const Employes = (props) => {
</div>
</DialogActions>
</Dialog>

View File

@ -5803,6 +5803,7 @@ Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenair
formData.append("status", "0");
formData.append("object_owner_collection", "inscription");
formData.append("object_owner_id", selected_id);
formData.append("type_document", "");
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);

View File

@ -1029,6 +1029,7 @@ const Groupe_Apprenant = (props) => {
formData.append("status", "0");
formData.append("object_owner_collection", "groupe_inscription");
formData.append("object_owner_id", selected_id);
formData.append("type_document", "");
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);

View File

@ -133,10 +133,17 @@ const Header = () => {
function user_logout_confirmation() {
/* si c'est une connexion partner qui est active */
if (typeof (stored_user) != "undefined") {
setCookie("tokenmysych", "");
if (typeof (stored_user) != "undefined") {
const stored_cookie = getCookie('tokenmysych');
var acces_right_token_name = stored_cookie + "_uar";
setpartCookie("tokenmysych", "", { path: '/' });
setpartCookie(acces_right_token_name, "", { path: '/' });
removeCookie(acces_right_token_name, { path: '/' });
}
history.push("/recherche-formation");
history.push("/");
}
function user_logout() {
@ -542,7 +549,7 @@ const Header = () => {
<DialogTitle>MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<DialogContentText>
Confirmez la deconnexion
Confirmez la deconnexion
</DialogContentText>
</DialogContent>
@ -550,7 +557,15 @@ const Header = () => {
<DialogActions>
<div className="div_row">
<div className="div_row_gauche">
<Button onClick={part_logout_confirmation} className="bton_enreg_dialog">Deconnexion</Button>
<Button
onClick={(e) => {
part_logout_confirmation();
user_logout_confirmation();
}}
className="bton_enreg_dialog">Deconnexion</Button>
</div>
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Button onClick={Dialog_1_handleClose_buton} className="bton_annule_dialog" >Annuler</Button>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -2321,6 +2321,7 @@ const Notes_Evaluation = (props) => {
formData.append("status", "0");
formData.append("object_owner_collection", "note_evaluation");
formData.append("object_owner_id", selected_id);
formData.append("type_document", "");
//formData.append("class_internal_url", internal_url);
//console.log("token = " + stored_cookie);

View File

@ -70,7 +70,7 @@ function PartnerSignIn() {
function Logout_User() {
confirmAlert({
title: 'Deconnexion utilisateur ?',
message: 'Confirmez la deconnexion utilisateur',
message: 'Confirmez la deconnexion utilisateur zzz',
buttons: [
{
label: 'Oui',

View File

@ -657,7 +657,7 @@ const Partner_Client = (props) => {
{String(JSON.parse(Get_List_Partner_Clients_result[gridline_id]).is_company) === "1" && <nav> <FcOrganization /> Société </nav>}
{String(JSON.parse(Get_List_Partner_Clients_result[gridline_id]).is_company) === "0" && <nav> <FcBusinessman /> Particulier </nav>}
{String(JSON.parse(Get_List_Partner_Clients_result[gridline_id]).is_company) === "2" && <nav> <FcDepartment /> P. Public </nav>}
{String(JSON.parse(Get_List_Partner_Clients_result[gridline_id]).is_company) === "2" && <nav> <FcDepartment /> P. Public 4</nav>}
{String(JSON.parse(Get_List_Partner_Clients_result[gridline_id]).is_company) !== "0" &&
String(JSON.parse(Get_List_Partner_Clients_result[gridline_id]).is_company) !== "1" &&
String(JSON.parse(Get_List_Partner_Clients_result[gridline_id]).is_company) !== "2" &&

View File

@ -60,7 +60,7 @@ import {
GridPreferencePanelsValue,
} from '@mui/x-data-grid';
//import { utils, writeFileXLSX } from "xlsx";
import { ContextMenu, ContextMenuTrigger } from "react-contextmenu";
import zIndex from "@material-ui/core/styles/zIndex";

View File

@ -18,7 +18,7 @@ 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 DialogTitle from '@mui/material/DialogTitle';
import img_2 from "../mysy_img/lms.png";
import img_3_old from "../mysy_img/3.jpg";
import mysy_crm from "../mysy_img/mysy_crm.png";

View File

@ -8,16 +8,11 @@ import { Helmet } from "react-helmet";
import { useCookies } from "react-cookie";
import { confirmAlert } from 'react-confirm-alert'; // Import
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import bannerimg2 from "../mysy_img/MYSY-LOGO-BLUE.png";
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import axios from "axios";
import axios from "axios";
import { useParams } from 'react-router-dom'
import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png";
import Footer from "./Fotter";
import MenuItem from "@material-ui/core/MenuItem";
import Button2 from "@material-ui/core/Button";
import Menu from "@material-ui/core/Menu";
import Header from "./Header";
import { useLocation } from "react-router-dom";
import Visibility from '@mui/icons-material/Visibility';
@ -112,8 +107,6 @@ function SignIn() {
url_login = process.env.REACT_APP_API_URL + "myclass/api/partner_login/";
setmenucompte("partner");
partner_connexion = "partner";
}
else if (String(menucompte) === "user") {
url_login = process.env.REACT_APP_API_URL + "myclass/api/login/";
@ -122,6 +115,8 @@ function SignIn() {
}
// console.log( " ### full url_login = ", url_login)
// Gestion des Cookies
const stored_partner = cookie_part.tokenmysypart;
const stored_user = cookie.tokenmysych;
@ -503,9 +498,7 @@ function SignIn() {
<Input type="email" placeholder="Email" name="email" />
</FormGroup>
<FormGroup>
&nbsp;
</FormGroup>
<div style={{height:'10px'}}> &nbsp; </div>
<FormGroup>
@ -514,7 +507,7 @@ function SignIn() {
<Label>Votre mot de passe </Label>
</div>
<div className="show_pwd_div" onClick={handleClickShowPassword}>
{currentpawdvisible ? <Visibility /> : <VisibilityOff />}
{currentpawdvisible ? <Visibility style={{fontSize:'15px'}}/> : <VisibilityOff style={{fontSize:'15px'}}/>}
</div>
</div>

View File

@ -39,7 +39,8 @@ 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 ReactPlayer from "react-player";
import ReactAudioPlayer from 'react-audio-player';
import Paper from '@material-ui/core/Paper';
import { makeStyles } from '@material-ui/core/styles';
@ -70,7 +71,7 @@ import { ContextMenu, ContextMenuTrigger } from "react-contextmenu";
import * as XLSX from 'xlsx';
//import SpeechRecognition, { useSpeechRecognition } from 'react-speech-recognition';
import useSound from 'use-sound';
const useStyles = makeStyles((theme) => ({
paper: {
@ -454,6 +455,7 @@ const TestUrl_New = (props) => {
Get_Personnalisable_Collection_and_Fields();
Get_Partner_Object_Specific_Fields("ressource_humaine");
}, [])
@ -886,7 +888,6 @@ const TestUrl_New = (props) => {
document.body.appendChild(audio);
setblob_recorded_file(audio.attributes.src.nodeValue);
};
@ -915,14 +916,70 @@ const TestUrl_New = (props) => {
})
.catch((error) => {
console.error('Error - send_audi_blob:');
// setisimgSelected(true);
// setisimgSelected(true);
});
};
const [audi_file, setaudi_file] = React.useState("");
const audioRef = useRef(null);
function Get_and_launch_audio_file() {
var filedetail = "audio.mp3"
var url = process.env.REACT_APP_API_URL + "myclass/api/send_mysy_openai_to_voice_file/";
var fileName = "cherifffff.mp3";
axios.get(url, { responseType: 'blob', },)
.then((res) => {
fileDownload(res.data, filedetail);
const url = window.URL.createObjectURL(new Blob([res]));
const link = document.createElement("a");
link.href = url;
link.download = fileName || "downloaded-file";
document.body.appendChild(link);
console.log(" ### link = ", link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
})
}
const [blob_recorded_file, setblob_recorded_file] = React.useState("");
const [playbackRate, setPlaybackRate] = React.useState(0.75);
const [play] = useSound('audio.mp3',
{ playbackRate });
const handleClick_play = async () => {
console.log(" iiiiiiiiiiii ");
// var path = "blob:http://localhost:3009/5b14dae1-d402-47cd-b71b-fa3938563265";
// var path = "audio.mp3";
let path = require("./audio.mp3").default;
const audio = new Audio(path);
const audioPromise = audio.play();
if (audioPromise !== undefined) {
audioPromise
.then(() => {
// autoplay started
console.log("works");
})
.catch((err) => {
// catch dom exception
console.info(err);
});
}
};
return (
<div className="testurl_new">
@ -1130,33 +1187,32 @@ const TestUrl_New = (props) => {
<button onClick={recorderControls.stopRecording}>Stop recording</button>
<br />
file = {blob_recorded_file} <br/>
<button onClick={send_audi_blob}> envoyer fichier</button>
</div>
<h2> manip datagrid </h2>
<div style={{ height: 300, width: '100%' }}>
<DataGrid
{...data}
localeText={{
toolbarExportCSV: "Export CSV(;)",
}}
loading={loading}
components={{
Toolbar: CustomToolbar
}}
componentsProps={{
toolbar: { data_colums: data.columns }
}}
columnVisibilityModel={columnVisibilityModel}
onColumnVisibilityModelChange={(newModel) => {
setColumnVisibilityModel(newModel);
}}
file = {blob_recorded_file} <br />
<button onClick={send_audi_blob}> envoyer fichier</button><br />
<button onClick={Get_and_launch_audio_file}> recuperer un fichier audio yy</button><br />
<audio ref={audioRef} controls >
<source src="blob:audio.mp3" type="audio/mp3" />
Your browser does not support the audio element.
</audio>
aaa
<ReactAudioPlayer
src="blob:audio.mp3"
autoPlay={true}
controls
/> bb
<ReactAudioPlayer
src={"blob:audio.mp3"}
controls
preload="none"
/>
</div>
</div> <br />
<button onClick={handleClick_play}>Boop!</button>;

Binary file not shown.

BIN
src/components/audio.mp3 Normal file

Binary file not shown.

View File

@ -108,7 +108,7 @@
.sousmenu {
font-family: "verdana", "Quicksand", "Signika", sans-serif;
font-size: small;
text-align: center;
text-align: left;
margin-bottom: 0.8rem;
color: #0c0101;
cursor: pointer;
@ -387,7 +387,7 @@
.sousmenu {
font-family: "verdana", "Quicksand", "Signika", sans-serif;
font-size: 0.75rem;
text-align: center;
text-align: left;
margin-bottom: 0.8rem;
color: #c0c0c0;
cursor: pointer;
@ -693,7 +693,7 @@
.sousmenu {
font-family: "verdana", "Quicksand", "Signika", sans-serif;
font-size: 0.8rem;
text-align: center;
text-align: left;
margin-bottom: 0.8rem;
color: #c0c0c0;
cursor: pointer;
@ -1001,7 +1001,7 @@
.sousmenu {
font-family: "verdana", "Quicksand", "Signika", sans-serif;
font-size: 0.75rem;
text-align: center;
text-align: left;
margin-bottom: 0.8rem;
color: #c0c0c0;
cursor: pointer;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1887,7 +1887,7 @@
input {
width: 100%;
height: 3rem;
height: 2.5rem;
border-radius: 5rem;
margin: 0 auto;
border: auto;

View File

@ -133,4 +133,7 @@
@import "./components/quisommesnous_v4";
@import "./components/fonctionnalite_v1";
@import "./components/addarticleavis";
@import "./components/moduleia";
@import "./components/moduleia";
@import "./components/intranet_factures_client";
@import "./components/intranet_tous_documents";
@import "./components/modules_mes_documents";