diff --git a/src/components/DisplayDetailClass_new_v2.js b/src/components/DisplayDetailClass_new_v2.js index 7f7ab7b..94f1221 100644 --- a/src/components/DisplayDetailClass_new_v2.js +++ b/src/components/DisplayDetailClass_new_v2.js @@ -129,6 +129,7 @@ const DisplayDetailClass_new_v2 = (props) => { async function funclocaltoken() { + if (action && String(action).toLocaleLowerCase() !== "inscription" && String(action).toLocaleLowerCase() !== "information") { @@ -173,11 +174,12 @@ const DisplayDetailClass_new_v2 = (props) => { } fetchData(); + GetCurrentClass_trainingsession(); - Display(); + Display(); GetAssociatedTraning(); - + funclocaltoken(); window.scrollTo({ top: 0, @@ -338,7 +340,7 @@ const DisplayDetailClass_new_v2 = (props) => { axios.post(myurl, form).then(res => { console.log(" In Display res.data.status = " + res.data.status); - //console.log(" In Display res.data.message = " + res.data.message); + console.log(" In Display res.data.message = " + res.data.message); if (String(res.data.status) === String("true")) { if (res.data.message.length > 0) { diff --git a/src/components/Facture.js b/src/components/Facture.js index d191742..b520a3d 100644 --- a/src/components/Facture.js +++ b/src/components/Facture.js @@ -24,6 +24,9 @@ import CheckOut from "./CheckOut"; import PaymentMethod from "./PaymentMethode"; import { IoAddCircleOutline } from "react-icons/io5"; import fileDownload from 'js-file-download' +import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif"; + + function Facture(props) { @@ -37,14 +40,15 @@ function Facture(props) { const [selectedpacks, setselectedpacks] = useState(""); const [currentpack, setcurrentpack] = useState(props.currentpack); + const [isLoading, setLoading] = useState(); const columns = [ { field: 'id', headerName: 'id', hide: true }, { field: 'date_facture', headerName: 'Date Facture', width: 150, flex: 1 }, - { field: 'num_facture', headerName: 'Num Facture', width: 200, flex: 1 }, - { field: 'client_nom', headerName: 'Client', width: 200, flex: 1, hide: true }, - { field: 'montant_ht', headerName: 'Montant HT €', width: 200, flex: 1 }, - { field: 'montant_ttc', headerName: 'Montant TTC €', width: 100, flex: 1 }, + { field: 'num_facture', headerName: 'Num Facture', width: 200, flex: 1 }, + { field: 'client_nom', headerName: 'Client', width: 200, flex: 1, hide: true }, + { field: 'montant_ht', headerName: 'Montant HT €', width: 200, flex: 1 }, + { field: 'montant_ttc', headerName: 'Montant TTC €', width: 100, flex: 1 }, { field: 'reduction', headerName: 'Discount', width: 150, flex: 1, hide: true }, { field: 'mode_payement', headerName: 'Mode paiement', width: 150, flex: 1 }, { field: 'date_payement', headerName: 'Date échéance', width: 150, flex: 1 }, @@ -71,6 +75,7 @@ function Facture(props) { function handleClick(event, cellValues) { + setLoading(true); var nom_facture = cellValues.row.num_facture + ".pdf"; //form.append("token","K3cw63eKokKSbV4spjQ48SUNnfy80yrXfA"); const stored_cookie = getCookie('tokenmysypart'); @@ -83,8 +88,15 @@ function Facture(props) { axios.get(url, { responseType: 'blob', },) .then((res) => { + fileDownload(res.data, nom_facture) - }) + setLoading(false); + }).catch((error) => { + setLoading(false); + console.error('Error:', error); + + + }); } @@ -115,10 +127,10 @@ function Facture(props) { .then((data) => data.json()) .then((data) => { //console.log('Success:', data['message'], "data['status'] = ", data['status']); - + if (String(data['status']) === String("false")) { - + //console.log("erreur rrrr:" + data['status']) setGetInvoices_api("false"); @@ -379,11 +391,11 @@ function Facture(props) { if (mylocaltraining.is_partner_admin_account) { setis_partner_admin_account(mylocaltraining.is_partner_admin_account); - }else{ - setis_partner_admin_account("0"); + } else { + setis_partner_admin_account("0"); } - + if (mylocaltraining.invoice_vat_num) { document.getElementsByName("vat_num")[0].value = mylocaltraining.invoice_vat_num; document.getElementsByName("vat_num")[0].disabled = true; @@ -479,7 +491,7 @@ function Facture(props) { window.scrollTo({ top: 0, behavior: "smooth", - }); + }); if (String(packs).toLowerCase() === String("decouverte")) { @@ -495,7 +507,7 @@ function Facture(props) { } } - if (String(periode) === String("Annuel")) { + if (String(periode) === String("Annuel")) { if (String(packs).toLowerCase() === String("standard")) { setpackprice("600"); } @@ -510,9 +522,9 @@ function Facture(props) { setgotocheckout("1"); setselectedpacks(packs); window.scrollTo({ - top: 0, - behavior: "smooth", - }); + top: 0, + behavior: "smooth", + }); return; } @@ -550,9 +562,9 @@ function Facture(props) { setgotocheckout("1"); setselectedpacks(packs); window.scrollTo({ - top: 0, - behavior: "smooth", - }); + top: 0, + behavior: "smooth", + }); } } @@ -564,6 +576,9 @@ function Facture(props) { const [packprice, setpackprice] = useState(); return (
+ {isLoading &&
+
+
} {String(gotocheckout) === String("1") &&
diff --git a/src/components/Inscription_Information.js b/src/components/Inscription_Information.js index e404dc0..c6d3251 100644 --- a/src/components/Inscription_Information.js +++ b/src/components/Inscription_Information.js @@ -1355,7 +1355,7 @@ function Inscription_Information(props) {
- {/* -- début champs specifiques **/} + {/* -- début champs specifiques ** /}

diff --git a/src/components/Module_Editique.js b/src/components/Module_Editique.js index ef0bd96..a4016e0 100644 --- a/src/components/Module_Editique.js +++ b/src/components/Module_Editique.js @@ -146,7 +146,7 @@ const Module_Editique = (props) => { //console.log(" In Invoice_Session_Formation res.data.message r_class = " + res.data.message); setInvoice_Session_Formation_api("true"); setInvoice_Session_Formation_result(res.data.message); - Getall_Editable_Document_By_Partner_By_Collection(); + Getall_Editable_Document_By_Partner_By_Collection(); props.GetListeInscrit(props.related_collection_recid, props.internal_url); alert(res.data.message); @@ -221,10 +221,10 @@ const Module_Editique = (props) => { form.append("related_collection", props.related_collection); form.append("related_collection_recid", props.related_collection_recid); - console.log(" Lancement de l'action server ...Action_Server_", api_name) + var myurl = process.env.REACT_APP_API_URL + "myclass/api/Action_Server_" + String(api_name) + "/"; - console.log(" myurl...", myurl) + return; setLoading(true); @@ -253,6 +253,11 @@ const Module_Editique = (props) => { }) } + var date_today_90j = new Date(); + date_today_90j.setDate(date_today_90j.getDate() + 90); + + const [is_session_invoiced, setis_session_invoiced] = useState("0"); + const [session_date_debut, setsession_date_debut] = useState(date_today_90j.toLocaleDateString('fr-FR')); useEffect(() => { @@ -738,6 +743,15 @@ const Module_Editique = (props) => { setselected_internal_url(mylocaltraining.class_internal_url); } + if (mylocaltraining.invoiced_statut) { + setis_session_invoiced(mylocaltraining.invoiced_statut); + } + + if (mylocaltraining.date_debut) { + setsession_date_debut(mylocaltraining.date_debut); + } + + } } else if (String(res.data.status) === String("Err_Connexion")) { @@ -1003,6 +1017,20 @@ const Module_Editique = (props) => { setDialog_FACTURATION_FORMATION_open(false); }; + + + const [MSG_INFO_TEXT, setMSG_INFO_TEXT] = React.useState(false); + + const [Dialog_MSG_INFO_open, setDialog_MSG_INFO_open] = React.useState(false); + const Dialog_MSG_INFO_handleClose = () => { + //alert(" Utiliser le bouton 'fermer' "); + //setOpen(false); + }; + + const Dialog_MSG_INFO_handleClose_buton = () => { + setDialog_MSG_INFO_open(false); + }; + return (
@@ -1065,6 +1093,46 @@ const Module_Editique = (props) => { + {/* Dialog pour gerer les MSG_INFO */} + + + MySy Information + + + + +
+ {MSG_INFO_TEXT} + +
+ +
+ + +
+ + +
+
+   + +
+ +
+ +
+
+ +
+ +
+ {/* FIN Dialog pour gerer les MSG_INFO */} + + {/* Dialog pour gerer les CONF_INSCRIPTION */} { return; } } - + Dialog_convention_handleClose_buton(); Send_Stagiaire_Conventions_By_Email(); @@ -1867,7 +1935,7 @@ const Module_Editique = (props) => { {String(selected_convention_type) === "pdf" && @@ -1956,6 +2024,7 @@ const Module_Editique = (props) => { Getall_Editable_Document_By_Partner_By_Collection_result.map((document) => (
+
{ @@ -1970,9 +2039,35 @@ const Module_Editique = (props) => { if (String(JSON.parse(document).courrier_template_ref_interne) === "CONVENTION_STAGIAIRE_ENTREPRISE" || String(JSON.parse(document).courrier_template_ref_interne) === "CONVENTION_STAGIAIRE_INDIVIDUELLE") { - Get_List_Stagiaire_Conventions(String(JSON.parse(document).courrier_template_ref_interne), String(JSON.parse(document).courrier_template_nom), String(JSON.parse(document).courrier_template_type_doc) - ); - setDialog_convention_open(true); + + // Verifier que la date de la session n'est pas passée + var date_eval = new Date(moment(session_date_debut, "DD/MM/YYYY")); + var diff = date_eval.getTime() - Date.now(); + + if (diff <= 0) { + setMSG_INFO_TEXT("Cette session a déjà commencé. Il n'est plus possible d'éditer une convention") + setDialog_MSG_INFO_open(true); + return; + } + + + + + if (String(is_session_invoiced) === "1") { + setMSG_INFO_TEXT("Cette session est en cours de facturation. Il n'est plus possible d'éditer une convention") + setDialog_MSG_INFO_open(true); + + } + else if (String(is_session_invoiced) === "2") { + setMSG_INFO_TEXT("Cette session a déjà été facturée. Il n'est plus possible d'éditer une convention") + setDialog_MSG_INFO_open(true); + + } else { + Get_List_Stagiaire_Conventions(String(JSON.parse(document).courrier_template_ref_interne), String(JSON.parse(document).courrier_template_nom), String(JSON.parse(document).courrier_template_type_doc) + ); + setDialog_convention_open(true); + + } } else if (String(JSON.parse(document).courrier_template_ref_interne) === "EMARGEMENT_FORMATION") { setDialog_EMARGEMENT_FORMATION_open(true); @@ -1984,9 +2079,34 @@ const Module_Editique = (props) => { else if (String(JSON.parse(document).courrier_template_ref_interne) === "CONVOCATION_STAGIAIRE") { - Get_List_Stagiaire_Convocations(String(JSON.parse(document).courrier_template_ref_interne), String(JSON.parse(document).courrier_template_nom), String(JSON.parse(document).courrier_template_type_doc) - ); - setDialog_CONVOCATION_STAGIAIRE_open(true); + // Verifier que la date de la session n'est pas passée + var date_eval = new Date(moment(session_date_debut, "DD/MM/YYYY")); + var diff = date_eval.getTime() - Date.now(); + + if (diff <= 0) { + setMSG_INFO_TEXT("Cette session a déjà commencé. Il n'est plus possible d'éditer une convocation") + setDialog_MSG_INFO_open(true); + return; + } + + + if (String(is_session_invoiced) === "1") { + setMSG_INFO_TEXT("Cette session est en cours de facturation. Il n'est plus possible d'éditer une convocation") + setDialog_MSG_INFO_open(true); + + + } + else if (String(is_session_invoiced) === "2") { + setMSG_INFO_TEXT("Cette session a déjà été facturée. Il n'est plus possible d'éditer une convocation") + setDialog_MSG_INFO_open(true); + + } else { + + Get_List_Stagiaire_Convocations(String(JSON.parse(document).courrier_template_ref_interne), String(JSON.parse(document).courrier_template_nom), String(JSON.parse(document).courrier_template_type_doc) + ); + + setDialog_CONVOCATION_STAGIAIRE_open(true); + } } else if (String(JSON.parse(document).courrier_template_ref_interne) === "CONF_INSCRIPTION") { @@ -1998,7 +2118,7 @@ const Module_Editique = (props) => { } else if (String(JSON.parse(document).courrier_template_ref_interne) === "FACTURATION_SESSION") { - + setDialog_FACTURATION_FORMATION_open(true); } diff --git a/src/components/ProduitsServices.js b/src/components/ProduitsServices.js index 61a0792..3fe8f96 100644 --- a/src/components/ProduitsServices.js +++ b/src/components/ProduitsServices.js @@ -143,7 +143,7 @@ function ProduitsServices() {
-
+ {/*
Periodicité  
+
*/}
-
  +
Produits & Services
+
+
+ + + +
-
- Produits & Services +
+ Gestion Administrative & Pédagogique
+
+ Gestion administrative + +
    +
  • Publication catalogue formations (intranet / API)
  • +
  • Gestion des Inscriptions (mise en attente, motif annulation, etc)
  • +
  • Gestion des Sessions (planifiée, à la demande)
  • +
  • Gestion avis participants
  • +
  • Gestion des employés et du matériel pédagogique
  • +
  • Émargement électronique
  • +
  • Gestion des agendas & réservation de matériel (salles, projecteurs, etc)
  • +
  • Personnalisation et versionning des documents (convention, convocation, ...)
  • +
  • Edition automatique des document liés à la formation (Convention, convocation, Programme…)
  • +
  • Gestion automatique et manuelle des séquences de formations
  • +
  • Gestion des absences
  • + + + +
+
+ +
+ Gestion relation client (CRM) +
+ +
+ Gestion relation client (CRM) + +
    +
  • Gestion clients & Contacts
  • +
  • Affectation et Suivi tâches
  • +
  • Affectation et Suivi tâches
  • +
  • Catalogue prix clients
  • +
  • Devis & Commandes (envoi électronique)
  • +
  • Facturation
  • + +
+
+ +
+ Hébergement de formations (LMS) +
+ + +
+ Intranet personnalisé + +
    +
  • Mise en place d’un site web (intranet) personnalisé.
  • + +
+
+
+ Plate-forme de E-learning personnalisée + +
    +
  • Nom de domaine personnalisé
  • +
  • Personnalisation de la charte graphique (couleurs & bannière)
  • + +
+ +
+ +
+ Système de E-learning + +
    +
  • Echange prof / apprenant (courriel interne)
  • +
  • Espace enseignant
  • +
  • Espace apprenant
  • +
  • Evaluation (note)
  • +
  • Gestion planning
  • +
  • Travaux dirigés & pratiques
  • +
  • Session live virtuelle
  • + +
+
+ + +
Moteur de Recherche
@@ -234,85 +320,56 @@ function ProduitsServices() {
-
- Gestion Administrative & Pédagogique -
-
- Gestion administrative - -
    -
  • Publication catalogue formations (intranet / API)
  • -
  • Gestion des Inscriptions (mise en attente, motif annulation, etc)
  • -
  • Gestion des Sessions (planifiée, à la demande)
  • -
  • Gestion avis participants
  • -
  • Gestion des employés et du matériel pédagogique
  • -
  • Émargement électronique
  • - - -
-
-
- Gestion relation client (CRM) - -
    -
  • Gestion clients
  • -
  • Affectation et Suivi tâches
  • -
  • Catalogue prix clients
  • -
  • Devis & Commandes (envoi électronique)
  • -
  • Facturation
  • - -
-
- -
- Hébergement de formations (LMS) -
- - -
- Intranet personnalisé - -
    -
  • Mise en place d’un site web (intranet) personnalisé.
  • - -
-
-
- Plate-forme de E-learning personnalisée - -
    -
  • Nom de domaine personnalisé
  • -
  • Personnalisation de la charte graphique (couleurs & bannière)
  • - -
- -
- -
- Système de E-learning - -
    -
  • Echange prof / apprenant (courriel interne)
  • -
  • Espace apprenant
  • -
  • Evaluation (note)
  • -
  • Gestion planning
  • -
  • Travaux dirigés & pratiques
  • -
  • Session live virtuelle
  • - -
-
- + +
-
Découverte
+
Indépendant

- Pour chaque Formation + + + +
+
+   +
+ + +
+ OK +
+ +
+   +
+ +
+ OK +
+ +
+   +
+ + +
+ KO +
+
+ OK +
+ +
+ OK +
+ +
 
@@ -323,7 +380,7 @@ function ProduitsServices() {
- OK + KO
KO @@ -337,37 +394,10 @@ function ProduitsServices() { KO
-
-   -
- - -
- KO -
-
- KO -
- -
-   -
- - -
- KO -
-
- KO -
- -
- KO -
- +
- Gratuit 15 jours + 150 HT €/mois
  @@ -390,30 +420,10 @@ function ProduitsServices() {
Standard

- Pour chaque Formation -
-
-   -
- -
- - OK -
- -
- KO -
-
- KO -
- -
- OK -
- -
- KO + + + +
@@ -422,10 +432,15 @@ function ProduitsServices() {
- OK + OK
+ +
+   +
+
- KO + OK
@@ -437,16 +452,43 @@ function ProduitsServices() { KO
- KO + OK
- KO + OK
+
+   +
+ +
+ + OK +
+ +
+ KO +
+
+ KO +
+ +
+ OK +
+ +
+ KO +
+ + + +
- 50 HT €/mois + 299 HT €/mois
@@ -468,10 +510,45 @@ function ProduitsServices() {
-
Gold
+
Gold

- Pour chaque Formation + + + + +
+ +
+   +
+ + +
+ OK +
+ +
+   +
+
+ OK +
+ +
+   +
+ + +
+ OK +
+
+ OK +
+ +
+ OK
  @@ -486,48 +563,23 @@ function ProduitsServices() { OK
- OK + OK
- OK + OK
- OK + OK
-
-   -
- - -
- OK -
-
- OK -
- -
-   -
- - -
- OK -
-
- OK -
- -
- OK -
+ +
- 90 € HT /mois + A partir de 599 € HT /mois
@@ -558,7 +610,7 @@ function ProduitsServices() {
- Vous souhaitez avoir des précisions, contactez nous.     {} + Vous souhaitez avoir des précisions, un Devis contactez nous.     {}
diff --git a/src/mysy_img/mysy_spin_loading.gif b/src/mysy_img/mysy_spin_loading.gif index 8e6d471..11225d7 100644 Binary files a/src/mysy_img/mysy_spin_loading.gif and b/src/mysy_img/mysy_spin_loading.gif differ diff --git a/src/mysy_img/mysy_spin_loading_old.gif b/src/mysy_img/mysy_spin_loading_old.gif new file mode 100644 index 0000000..8e6d471 Binary files /dev/null and b/src/mysy_img/mysy_spin_loading_old.gif differ diff --git a/src/mysy_img/mysy_spin_loading_old2.gif b/src/mysy_img/mysy_spin_loading_old2.gif new file mode 100644 index 0000000..673587d Binary files /dev/null and b/src/mysy_img/mysy_spin_loading_old2.gif differ diff --git a/src/styles/components/_abonnement.scss b/src/styles/components/_abonnement.scss index 588a0b4..62f3849 100644 --- a/src/styles/components/_abonnement.scss +++ b/src/styles/components/_abonnement.scss @@ -38,7 +38,7 @@ .mysy_spinner { border-radius: 5px; - border: 1px solid black; + //border: 1px solid black; opacity: 100%; } diff --git a/src/styles/components/_addclassmanual.scss b/src/styles/components/_addclassmanual.scss index ef8b328..e7cb3bc 100644 --- a/src/styles/components/_addclassmanual.scss +++ b/src/styles/components/_addclassmanual.scss @@ -27,7 +27,7 @@ .mysy_spinner { border-radius: 5px; - border: 1px solid black; + //border: 1px solid black; opacity: 100%; } diff --git a/src/styles/components/_checkout.scss b/src/styles/components/_checkout.scss index f39d5d8..fdfe9c6 100644 --- a/src/styles/components/_checkout.scss +++ b/src/styles/components/_checkout.scss @@ -26,7 +26,7 @@ .mysy_spinner { border-radius: 5px; - border: 1px solid black; + //border: 1px solid black; opacity: 100%; } diff --git a/src/styles/components/_displaypartnertrainingpagination.scss b/src/styles/components/_displaypartnertrainingpagination.scss index f44a026..1bf65d5 100644 --- a/src/styles/components/_displaypartnertrainingpagination.scss +++ b/src/styles/components/_displaypartnertrainingpagination.scss @@ -8,7 +8,7 @@ .mysy_spinner { border-radius: 5px; - border: 1px solid black; + //border: 1px solid black; opacity: 100%; } diff --git a/src/styles/components/_hebergementlms.scss b/src/styles/components/_hebergementlms.scss index f36b240..c7bd726 100644 --- a/src/styles/components/_hebergementlms.scss +++ b/src/styles/components/_hebergementlms.scss @@ -21,7 +21,7 @@ .mysy_spinner { border-radius: 5px; - border: 1px solid black; + //border: 1px solid black; opacity: 100%; } diff --git a/src/styles/components/_partner.scss b/src/styles/components/_partner.scss index 83c7107..63180db 100644 --- a/src/styles/components/_partner.scss +++ b/src/styles/components/_partner.scss @@ -27,7 +27,7 @@ .mysy_spinner { border-radius: 5px; - border: 1px solid black; + //border: 1px solid black; opacity: 100%; } diff --git a/src/styles/components/_produitsservices.scss b/src/styles/components/_produitsservices.scss index 56eae4c..67ec425 100644 --- a/src/styles/components/_produitsservices.scss +++ b/src/styles/components/_produitsservices.scss @@ -549,6 +549,10 @@ cursor: pointer; } + .block_vide_produit_service{ + height: 0.5rem; + } + } @@ -1091,7 +1095,7 @@ .height_gestion_admin { - height: 13rem !important; + height: 24rem !important; } .height_appel_offre { @@ -1135,6 +1139,10 @@ cursor: pointer; } + .block_vide_produit_service{ + height: 7rem; + } + } @media only screen and (min-width: 992px) and (max-width: 1199px) { @@ -1679,7 +1687,7 @@ .height_gestion_admin { - height: 11rem !important; + height: 22rem !important; } .height_appel_offre { @@ -1724,6 +1732,11 @@ color: white; cursor: pointer; } + + .block_vide_produit_service{ + height: 8rem; + } + } @media only screen and (min-width: 1200px) { @@ -1962,7 +1975,7 @@ .height_gestion_admin { - height: 11rem !important; + height: 18rem !important; } .height_appel_offre { @@ -1982,7 +1995,7 @@ } .height_gestion_crm { - height: 9rem !important; + height: 12rem !important; } @@ -2311,5 +2324,10 @@ cursor: pointer; } + .block_vide_produit_service{ + + } } + + // end media } \ No newline at end of file