From de91f4b79b4d4b85c8f8dc99bacb6a4c2ae22679 Mon Sep 17 00:00:00 2001 From: cherif Date: Sun, 22 Oct 2023 18:36:36 +0200 Subject: [PATCH] 22/10/2023 - 18h00 --- src/components/Employes.js | 243 ++++++++++++++++++++++++++++- src/components/Partner_Commande.js | 31 ++-- src/components/TestUrl_new.js | 191 +++++++++++++++++++++-- 3 files changed, 436 insertions(+), 29 deletions(-) diff --git a/src/components/Employes.js b/src/components/Employes.js index 4529977..2cce498 100644 --- a/src/components/Employes.js +++ b/src/components/Employes.js @@ -555,6 +555,7 @@ const Employes = (props) => { Get_List_RH_Profils(); Get_Employee_Related_Target_Collection_Data(); + Get_Partner_Object_Specific_Fields("ressource_humaine"); window.scrollTo({ top: 0, @@ -716,6 +717,7 @@ const Employes = (props) => { const [employee_data_changed, setemployee_data_changed] = useState(""); const [employee_data_edit_mode, setemployee_data_edit_mode] = useState(""); + const [GetAttendee_api, setGetAttendee_api] = useState(); const [GetAttendee_message, setGetAttendee_message] = useState(); const [GetAttendee_result, setGetAttendee_result] = useState(); @@ -852,6 +854,41 @@ const Employes = (props) => { setp_detail_resp_hierarchie_prenom(""); } + /* + * Update 22/10/2023 : + Gestion des champs spécifiques. ils commencent tous par 'my_' + */ + + + for (let i = 0; i < rows_champs_specifics.length; i++) { + + var field_name = JSON.parse(rows_champs_specifics[i]).field_name; + + if (mylocal_employe.hasOwnProperty(field_name)) { + var local_valeur = mylocal_employe[String(field_name)] + + if (document.getElementById(String(field_name))) + document.getElementById(String(field_name)).value = local_valeur; + + var new_val = { 'field_name': field_name, 'field_value': local_valeur } + var johnIndex = findIndexByProperty(spec_field_updated_values, 'field_name', field_name); + + if (johnIndex > -1) { + spec_field_updated_values[johnIndex] = new_val; + + } else { + spec_field_updated_values.push(new_val); + } + + } else { + + } + } + + setspec_field_updated_values_hooks(spec_field_updated_values); + /* + * end Update 22/10/2023 : + */ @@ -1328,6 +1365,16 @@ const Employes = (props) => { document.getElementsByName("detail_resp_hierarchie_id")[0].style.backgroundColor = "#ECEFF1"; } + // Pour les champs spécifiques + for (let i = 0; i < rows_champs_specifics.length; i++) { + + var field_name = JSON.parse(rows_champs_specifics[i]).field_name; + if (document.getElementsByName(String(field_name))[0]) { + document.getElementsByName(String(field_name))[0].disabled = true; + document.getElementsByName(String(field_name))[0].style.backgroundColor = "#ECEFF1"; + } + } + } function Enable_Employee_DetailFields() { @@ -1392,7 +1439,15 @@ const Employes = (props) => { document.getElementsByName("detail_resp_hierarchie_id")[0].disabled = false; document.getElementsByName("detail_resp_hierarchie_id")[0].style.backgroundColor = "#FFFFFF"; + // Pour les champs spécifiques + for (let i = 0; i < rows_champs_specifics.length; i++) { + var field_name = JSON.parse(rows_champs_specifics[i]).field_name; + if (document.getElementsByName(String(field_name))[0]) { + document.getElementsByName(String(field_name))[0].disabled = false; + document.getElementsByName(String(field_name))[0].style.backgroundColor = "#FFFFFF"; + } + } } @@ -1512,7 +1567,15 @@ const Employes = (props) => { form.append("_id", selected_id); - //console.log(" form == ", form); + + /* + Update du 22/10/2023 - Gestion des champs spécifiques ajoutés par le partenaire + */ + for (let i = 0; i < spec_field_updated_values_hooks.length; i++) { + form.append(String(spec_field_updated_values_hooks[i].field_name), String(spec_field_updated_values_hooks[i].field_value)); + } + + var myurl = process.env.REACT_APP_API_URL + "myclass/api/Update_Ressource_Humaine/"; @@ -2888,9 +2951,6 @@ const Employes = (props) => { local_read = true; - - - if (JSON.parse(x).module_name === module_nom && module_acces === "read") { return '{"_id": "' + local_id + '", "module_name": "' + module_nom + '", "valide": "1", "locked": "0", "id": "' + localid + '", "read": ' + new_value + ', "write": ' + local_write + '}'; } @@ -3327,7 +3387,7 @@ const Employes = (props) => { //console.log(" ## result['status'] = ", result['status']) if (String(result['status']) === String("true")) { - console.log('Message :', result['message']); + //console.log('Message :', result['message']); setGet_List_Of_All_PJ_result(result['message']); setGet_List_Of_All_PJ_api("true"); @@ -3359,6 +3419,142 @@ const Employes = (props) => { // -- end gestion pièces jointes + + // Gestion champs specifiques + + /* + *** ALGORITHME + 1 - Récuperer la liste des champs specifiques de la collection concernée - Array : list_nom_champs_spec + 2 - Récupérer les caracteristiques de champs champs spécifique : "id, nom, label, type valeur, etc" + - avec un champ 'value' à vide. Mettre dans le tableau JSON, 'spec_champs_valeur' + + 3 - Créer une nouvelle table qui permettra de gerer les hook : const [rows_champs_specifics, setrows_champs_specifics] = useState([]); + 4 - Afficher en html les elements 'rows_champs_specifics' + 5 - Gerer la modification avec la fonction 'change_champs_spec_handle' + 6 - On recuperer les valeur lors du click d'enregistrement. + + */ + + + const list_nom_champs_spec = [] + const [spec_champs_valeur, setspec_champs_valeur] = useState([]); + + //const spec_champs_valeur = "" + + const [Get_Partner_Object_Specific_Fields_api, setGet_Partner_Object_Specific_Fields_api] = useState(); + const [Get_Partner_Object_Specific_Fields_message, setGet_Partner_Object_Specific_Fields_message] = useState(); + const [Get_Partner_Object_Specific_Fields_result, setGet_Partner_Object_Specific_Fields_result] = useState(); + function Get_Partner_Object_Specific_Fields(local_collection_obj_metier) { + + var form = new FormData(); + const stored_cookie = getCookie('tokenmysypart'); + form.append("token", stored_cookie); + form.append("object_name", local_collection_obj_metier); + + var myurl = process.env.REACT_APP_API_URL + "myclass/api/get_list_specific_field_partner_by_object/"; + + axios.post(myurl, form).then(res => { + + if (String(res.data.status) === String("true")) { + //console.log(" In Get_Partner_Object_Specific_Fields res.data.status = " + res.data.status); + //console.log(" In Get_Partner_Object_Specific_Fields res.data.message r_class = " + res.data.message); + + setGet_Partner_Object_Specific_Fields_api("true"); + setGet_Partner_Object_Specific_Fields_result(res.data.message); + + + setrows_champs_specifics(res.data.message); + + + } + else { + setGet_Partner_Object_Specific_Fields_api("false"); + setGet_Partner_Object_Specific_Fields_message(res.data.message); + alert(res.data.message) + } + + }).catch((error) => { + console.warn('Not good man :( Get_Partner_Object_Specific_Fields = ', error); + setGet_Partner_Object_Specific_Fields_api("false"); + alert(" Impossible de recuperer la liste des collection et champs personnalisables"); + //setmyApimyApiMessage("") + }) + } + + + + + + + const [rows_champs_specifics, setrows_champs_specifics] = useState([]); + const [display_champs_specifics, setdisplay_champs_specifics] = useState("0"); + + function afficher_champs_spec() { + + setdisplay_champs_specifics("1"); + //setrows_champs_specifics(spec_champs_valeur); + + } + + function findIndexByProperty(data, key, value) { + for (var i = 0; i < data.length; i++) { + + if (data[i][key] == value) { + return i; + } + } + return -1; + } + + + function findValueByProperty(data, key, value) { + for (var i = 0; i < data.length; i++) { + if (data[i][key] == value) { + + var tmp_val = JSON.parse(data[i]); + + return tmp_val.field_value + + } + } + return ""; + } + + + const spec_field_updated_values = [] + const [spec_field_updated_values_hooks, setspec_field_updated_values_hooks] = useState([]); + + + function change_champs_spec_handle() { + + for (let i = 0; i < rows_champs_specifics.length; i++) { + + var field_name = JSON.parse(rows_champs_specifics[i]).field_name; + + if (document.getElementsByName(String(field_name))[0]) { + + var field_value = document.getElementsByName(String(field_name))[0].value; + var new_val = { 'field_name': field_name, 'field_value': field_value } + + var johnIndex = findIndexByProperty(spec_field_updated_values, 'field_name', field_name); + if (johnIndex > -1) { + spec_field_updated_values[johnIndex] = new_val; + + } else { + spec_field_updated_values.push(new_val); + } + } + + } + + //setrows_champs_specifics(spec_champs_valeur); + + console.log(" OUTT spec_field_updated_values = ", spec_field_updated_values); + setspec_field_updated_values_hooks(spec_field_updated_values) + } + // -- end champs specifiques + + return (
{
} +
+
+
+
Vos champs spécifiques
+ + {rows_champs_specifics && + rows_champs_specifics.map((champ_spec) => ( + +
{JSON.parse(champ_spec).field_label}
+
+ { + change_champs_spec_handle(e.target.value); + setEmployee_data_changed("1"); + }} + //onChange={change_champs_spec_handle} + + + /> +
+ ))} + +
+ +
+

diff --git a/src/components/Partner_Commande.js b/src/components/Partner_Commande.js index 5de4721..32ae349 100644 --- a/src/components/Partner_Commande.js +++ b/src/components/Partner_Commande.js @@ -39,6 +39,7 @@ 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 { Global } from "recharts"; const Partner_Commande = (props) => { @@ -525,6 +526,7 @@ const Partner_Commande = (props) => { } + useEffect(() => { Get_List_Partner_Clients(); @@ -1190,7 +1192,7 @@ const Partner_Commande = (props) => { if (mylocalclient) { - if (mylocalclient.email){ + if (mylocalclient.email) { setp_detail_header_email_client(mylocalclient.email); //console.log(" ### mylocalclient.email = ", mylocalclient.email); } @@ -2024,31 +2026,31 @@ const Partner_Commande = (props) => { // Controle des champs obligatoires - if( !p_add_line_item || String(p_add_line_item).length < 2){ + if (!p_add_line_item || String(p_add_line_item).length < 2) { alert(" Vous devez choisir un article "); return; } console.log(" ### p_add_line_item = ", p_add_line_item); - if (!p_add_line_item_qty || parseFloat(String(p_add_line_item_qty)) <= 0){ + if (!p_add_line_item_qty || parseFloat(String(p_add_line_item_qty)) <= 0) { alert(" La quantité choisie est incorrecte "); return; } - if (!p_add_line_item_price || parseFloat(String(p_add_line_item_price)) < 0){ + if (!p_add_line_item_price || parseFloat(String(p_add_line_item_price)) < 0) { alert(" Le prix unitaire est incorrecte "); return; } - if( String(p_add_line_item_type_reduction) === "percent" && - ( parseFloat(String(p_add_line_item_reduction_value)) < 0 || parseFloat(String(p_add_line_item_reduction_value)) > 100 ) ){ + if (String(p_add_line_item_type_reduction) === "percent" && + (parseFloat(String(p_add_line_item_reduction_value)) < 0 || parseFloat(String(p_add_line_item_reduction_value)) > 100)) { alert(" Pour une reduction de type 'pourcentage', la valeur doit être comprise entre 0 et 100 "); return; } - if( String(p_add_line_item_type_reduction) === "fixe" && - ( parseFloat(String(p_add_line_item_reduction_value)) < 0 || parseFloat(String(p_add_line_item_reduction_value)) > parseFloat(String(p_add_line_item_price)) ) ){ + if (String(p_add_line_item_type_reduction) === "fixe" && + (parseFloat(String(p_add_line_item_reduction_value)) < 0 || parseFloat(String(p_add_line_item_reduction_value)) > parseFloat(String(p_add_line_item_price)))) { alert(" Pour une reduction de type 'fixe', la valeur ne doit pas excéder le prix unitaire de l'article "); return; } @@ -2094,7 +2096,7 @@ const Partner_Commande = (props) => { const Update_Dialog_Detail_Article_open = () => { Add_Update_One_Order_Line_Data(); - + }; @@ -2184,12 +2186,12 @@ const Partner_Commande = (props) => { - if( !p_add_cmd_header_client_id || String(p_add_cmd_header_client_id).length < 2 ){ + if (!p_add_cmd_header_client_id || String(p_add_cmd_header_client_id).length < 2) { alert(" Vous devez choisir un client"); return; } //console.log("### form = ", form); - + var myurl = "" @@ -2813,6 +2815,8 @@ const Partner_Commande = (props) => { const [isLoading, setLoading] = useState(); + + return (
@@ -2820,6 +2824,7 @@ const Partner_Commande = (props) => {
} + { {String(p_detail_header_statut_label).toLowerCase() !== "facturé" &&
Article {
Client { useEffect(() => { Get_Personnalisable_Collections(); Get_Personnalisable_Collection_and_Fields(); + Get_Partner_Object_Specific_Fields("ressource_humaine"); }, []) @@ -290,6 +292,137 @@ const TestUrl_New = (props) => { ); }; + + // Gestion champs specifiques + + /* + *** ALGORITHME + 1 - Récuperer la liste des champs specifiques de la collection concernée - Array : list_nom_champs_spec + 2 - Récupérer les caracteristiques de champs champs spécifique : "id, nom, label, type valeur, etc" + - avec un champ 'value' à vide. Mettre dans le tableau JSON, 'spec_champs_valeur' + + 3 - Créer une nouvelle table qui permettra de gerer les hook : const [rows_champs_specifics, setrows_champs_specifics] = useState([]); + 4 - Afficher en html les elements 'rows_champs_specifics' + 5 - Gerer la modification avec la fonction 'change_champs_spec_handle' + 6 - On recuperer les valeur lors du click d'enregistrement. + + */ + + + const list_nom_champs_spec = [] + const [spec_champs_valeur, setspec_champs_valeur] = useState([]); + + //const spec_champs_valeur = "" + + const [Get_Partner_Object_Specific_Fields_api, setGet_Partner_Object_Specific_Fields_api] = useState(); + const [Get_Partner_Object_Specific_Fields_message, setGet_Partner_Object_Specific_Fields_message] = useState(); + const [Get_Partner_Object_Specific_Fields_result, setGet_Partner_Object_Specific_Fields_result] = useState(); + function Get_Partner_Object_Specific_Fields(local_collection_obj_metier) { + + var form = new FormData(); + const stored_cookie = getCookie('tokenmysypart'); + form.append("token", stored_cookie); + form.append("object_name", local_collection_obj_metier); + + var myurl = process.env.REACT_APP_API_URL + "myclass/api/get_list_specific_field_partner_by_object/"; + + axios.post(myurl, form).then(res => { + + if (String(res.data.status) === String("true")) { + console.log(" In Get_Partner_Object_Specific_Fields res.data.status = " + res.data.status); + console.log(" In Get_Partner_Object_Specific_Fields res.data.message r_class = " + res.data.message); + + setGet_Partner_Object_Specific_Fields_api("true"); + setGet_Partner_Object_Specific_Fields_result(res.data.message); + + + setrows_champs_specifics(res.data.message); + + + } + else { + setGet_Partner_Object_Specific_Fields_api("false"); + setGet_Partner_Object_Specific_Fields_message(res.data.message); + alert(res.data.message) + } + + }).catch((error) => { + console.warn('Not good man :( Get_Partner_Object_Specific_Fields = ', error); + setGet_Partner_Object_Specific_Fields_api("false"); + alert(" Impossible de recuperer la liste des collection et champs personnalisables"); + //setmyApimyApiMessage("") + }) + } + + + + + + + const [rows_champs_specifics, setrows_champs_specifics] = useState([]); + const [display_champs_specifics, setdisplay_champs_specifics] = useState("0"); + + function afficher_champs_spec() { + + setdisplay_champs_specifics("1"); + //setrows_champs_specifics(spec_champs_valeur); + + } + + function findIndexByProperty(data, key, value) { + for (var i = 0; i < data.length; i++) { + if (data[i][key] == value) { + return i; + } + } + return -1; + } + + + function findValueByProperty(data, key, value) { + for (var i = 0; i < data.length; i++) { + if (data[i][key] == value) { + + var tmp_val = JSON.parse(data[i]); + + return tmp_val.field_value + + } + } + return ""; + } + + + const spec_field_updated_values = [] + + function change_champs_spec_handle() { + + for (let i = 0; i < rows_champs_specifics.length; i++) { + + var field_name = JSON.parse(rows_champs_specifics[i]).field_name; + + if (document.getElementsByName(String(field_name))[0]) { + + var field_value = document.getElementsByName(String(field_name))[0].value; + var new_val = { 'field_name': field_name, 'field_value': field_value } + + var johnIndex = findIndexByProperty(spec_field_updated_values, 'field_name', field_name); + if (johnIndex > -1) { + spec_field_updated_values[johnIndex] = new_val; + + } else { + spec_field_updated_values.push(new_val); + } + } + + } + + //setrows_champs_specifics(spec_champs_valeur); + + console.log(" OUTT spec_field_updated_values = ", spec_field_updated_values); + } + // -- end champs specifiques + return (
@@ -304,16 +437,53 @@ const TestUrl_New = (props) => {

Page de test * testurl_new

parametres courseid = {courseid}, tabid = {tabid}
- {/*
- -
*/} -
+ + + +
+ + {rows_champs_specifics && + rows_champs_specifics.map((champ_spec) => ( +
{JSON.parse(champ_spec).field_label}
+
+ +
+ ))} + +
+ + + + + {rows_champs_specifics && + rows_champs_specifics.map((champ_spec) => ( +
'{champ_spec.field_value}'
+ ))} + +
+ +
{ value={p_document_name} onChange={(e) => { setp_document_name(e.target.value); - }} > Convocation