From d3ed6ddd1d2f6ad94d5dfc2449d24b6a085e899b Mon Sep 17 00:00:00 2001 From: KONE SOREL Date: Wed, 18 Mar 2026 10:45:33 +0000 Subject: [PATCH] fd --- .../ControleurAjaxprestatairesreseau.php | 30 ++- Js/fonctions.js | 41 +++ Modele/Reseausoins.php | 29 ++- Vue/Ajaxprestatairesreseau/index.php | 238 ++++++++++-------- .../rechercheraffectes.php | 13 + .../rechercherdispos.php | 15 ++ Vue/Prestatairesreseau/index.php | 57 ++--- 7 files changed, 261 insertions(+), 162 deletions(-) create mode 100644 Vue/Ajaxprestatairesreseau/rechercheraffectes.php create mode 100644 Vue/Ajaxprestatairesreseau/rechercherdispos.php diff --git a/Controleur/ControleurAjaxprestatairesreseau.php b/Controleur/ControleurAjaxprestatairesreseau.php index 65976b5f..621ab8cf 100755 --- a/Controleur/ControleurAjaxprestatairesreseau.php +++ b/Controleur/ControleurAjaxprestatairesreseau.php @@ -70,13 +70,33 @@ class ControleurAjaxprestatairesreseau extends Controleurrequete $this->executerAction("index"); } - public function rechercher() { - $query = $this->requete->getParametreFormulaire("query"); + public function rechercherdispos() + { + // Récupération sécurisée du paramètre de recherche + $query = $this->requete->getParametreFormulaire("query"); + $codeReseau = $_SESSION['codeReseau']; + + // Appel au modèle mis à jour + $resultats = $this->reseausoins->rechercherPrestatairesDisponibles($codeReseau, $query); + + // On génère la vue Ajax partielle (contenant uniquement les ) + $this->genererVueAjax(array( + 'prestatairesdispo' => $resultats, + 'isSearch' => true // Flag utile pour la vue si besoin + )); + } + + public function rechercheraffectes() { + $query = $this->requete->getParametreFormulaire("query"); $codeReseau = $_SESSION['codeReseau']; + $codeSociete = $_SESSION['codeSociete']; - $resultats = $this->reseau->rechercherPrestatairesDispo($codeReseau, $query); + // Nouvelle méthode dans le modèle pour chercher UNIQUEMENT dans ce qui est déjà affecté + $resultats = $this->reseausoins->rechercherPrestatairesAffectes($codeReseau, $query); - // On génère une vue partielle qui ne contient que les - $this->genererVueAjax(array('resultats' => $resultats)); + $this->genererVueAjax(array( + 'prestatairesreseau' => $resultats, + 'isSearch' => true // Flag utile pour la vue si besoin + )); } } \ No newline at end of file diff --git a/Js/fonctions.js b/Js/fonctions.js index 7cfc08a2..a0564149 100755 --- a/Js/fonctions.js +++ b/Js/fonctions.js @@ -92359,3 +92359,44 @@ function actualiser_garantie_produit() { }); } +let timerDispo, timerAffect; + +/** + * Recherche Serveur Multi-critères + * @param {string} target - 'dispo' ou 'affect' + */ +function rechercheServeur(target) { + // 1. Récupération des critères selon la colonne + let nom = $("#search_nom_" + target).val(); + let ville = $("#search_ville_" + target).val(); + let type = $("#search_type_" + target).val(); + let query = (nom + " " + ville + " " + type).trim(); + + // 2. Sécurité : On ne lance rien si c'est trop court (sauf si vide pour réinitialiser) + if (query.length > 0 && query.length < 3) return; + + // 3. Gestion du Timer (Debounce) + let timer = (target === 'dispo') ? timerDispo : timerAffect; + clearTimeout(timer); + + let currentTimer = setTimeout(function() { + let action = (target === 'dispo') ? 'rechercherdispos' : 'rechercheraffectes'; + + $.ajax({ + url: $("#racineWeb").val() + "Ajaxprestatairesreseau/" + action + "/", + type: 'post', + data: { query: query }, + beforeSend: function() { + $("#count_" + target).html(''); + }, + success: function(data) { + $("#tab_" + target + " tbody").html(data); + $("#count_" + target).text($("#tab_" + target + " tbody tr").length); + } + }); + }, 400); + + // Mise à jour de la référence du timer + if (target === 'dispo') timerDispo = currentTimer; + else timerAffect = currentTimer; +} \ No newline at end of file diff --git a/Modele/Reseausoins.php b/Modele/Reseausoins.php index 54ee681c..0632b947 100755 --- a/Modele/Reseausoins.php +++ b/Modele/Reseausoins.php @@ -374,16 +374,33 @@ class Reseausoins extends Modele } /** - * Recherche les prestataires non affectés avec un filtre textuel (Serveur-side) + * Recherche les prestataires disponibles via procédure stockée */ - public function rechercherPrestatairesDispo($codeReseau, $query) { - - $query = contruireParamLike($query); + public function rechercherPrestatairesDisponibles($codeReseau, $query) { + // Utilisation de la fonction helper pour formater le LIKE (%query%) + $queryParam = contruireParamLike($query); $codeSociete = $_SESSION['codeSociete']; - $sql = "CALL sp_rechercher_prestataires_dispo(?, ?, ?)"; // Sécurité pour ne pas saturer le DOM + // Appel de la procédure stockée optimisée + $sql = "CALL sp_rechercher_prestataires_dispo(?, ?, ?)"; - $resultat = $this->executerRequete($sql, array($codeSociete, $codeReseau, $query)); + $resultat = $this->executerRequete($sql, array($codeSociete, $codeReseau, $queryParam)); + + return $resultat->fetchAll(PDO::FETCH_ASSOC); + } + + /** + * Recherche les prestataires affectés via procédure stockée + */ + public function rechercherPrestatairesAffectes($codeReseau, $query) { + // Utilisation de la fonction helper pour formater le LIKE (%query%) + $queryParam = contruireParamLike($query); + $codeSociete = $_SESSION['codeSociete']; + + // Appel de la procédure stockée optimisée + $sql = "CALL sp_rechercher_prestataires_affectes(?, ?, ?)"; + + $resultat = $this->executerRequete($sql, array($codeSociete, $codeReseau, $queryParam)); return $resultat->fetchAll(PDO::FETCH_ASSOC); } diff --git a/Vue/Ajaxprestatairesreseau/index.php b/Vue/Ajaxprestatairesreseau/index.php index 62928636..ee9d6368 100755 --- a/Vue/Ajaxprestatairesreseau/index.php +++ b/Vue/Ajaxprestatairesreseau/index.php @@ -4,117 +4,139 @@ $nomReseau = $this->nettoyer($reseau['libelle']); ?> + + +
+
+
+
+
+
+ +
+ + + +
- - -
-
- - - - - - - - - - -
- -
- -
- - - - - - - - - - - - - - +
+
+
+ " onkeyup="rechercheServeur('dispo')"> +
+
+ " onkeyup="rechercheServeur('dispo')"> +
+
+ +
+
+
- - - - - - - - - - - -
=>
- -
nettoyer($v['libelle']) ?>nettoyer($v['typeprestataire']) ?>nettoyer($v['localite']) ?> - -
+ +
+ +
+
+ + + + + + + + + + + + + + + +
+
nettoyer($v['libelle']) ?>
+
+ nettoyer($v['localite']) ?> | + nettoyer($v['typeprestataire']) ?> +
+
+ +
+
+
+
-
- - - - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - -
<=
- -
- - nettoyer($v['libelle']) ?>nettoyer($v['localite']) ?>
+
+
+
+
+
+ +
+ + + +
+ +
+
+
+ " onkeyup="rechercheServeur('affect');"> +
+
+ " onkeyup="rechercheServeur('affect');"> +
+
+ +
+
+
+ + +
+ +
+
+ + + + + + + + + + + + + + + + + +
+ + nettoyer($v['libelle']) ?> + nettoyer($v['localite']) ?> + nettoyer($v['typeprestataire']) ?> +
+
+
+
\ No newline at end of file diff --git a/Vue/Ajaxprestatairesreseau/rechercheraffectes.php b/Vue/Ajaxprestatairesreseau/rechercheraffectes.php new file mode 100644 index 00000000..4c14c037 --- /dev/null +++ b/Vue/Ajaxprestatairesreseau/rechercheraffectes.php @@ -0,0 +1,13 @@ + + + + + + + nettoyer($v['libelle']) ?> + nettoyer($v['localite']) ?> nettoyer($v['typeprestataire']) ?> + + + \ No newline at end of file diff --git a/Vue/Ajaxprestatairesreseau/rechercherdispos.php b/Vue/Ajaxprestatairesreseau/rechercherdispos.php new file mode 100644 index 00000000..0e50a9f1 --- /dev/null +++ b/Vue/Ajaxprestatairesreseau/rechercherdispos.php @@ -0,0 +1,15 @@ + + + + +
nettoyer($v['libelle']) ?>
+
nettoyer($v['localite']) ?> | nettoyer($v['typeprestataire']) ?>
+ + + + + + + \ No newline at end of file diff --git a/Vue/Prestatairesreseau/index.php b/Vue/Prestatairesreseau/index.php index 67433e21..ad42ca15 100755 --- a/Vue/Prestatairesreseau/index.php +++ b/Vue/Prestatairesreseau/index.php @@ -1,18 +1,22 @@ titre = "INTER SANTE - Affectation Prestataires"; $codeReseau = $this->nettoyer($reseau['codeReseau']); $idReseau = $this->nettoyer($reseau['id']); $nomReseau = $this->nettoyer($reseau['libelle']); // Extraction unique des types pour les selects (Optionnel) - $typesDispo = array_unique(array_column($prestatairesdispo, 'typeprestataire')); + $typesDispo = est_anglophone() + ? array_unique(array_column($prestatairesdispo, 'typeprestataireEng')) + : array_unique(array_column($prestatairesdispo, 'typeprestataire')); sort($typesDispo); - $typesAffect = array_unique(array_column($prestatairesreseau, 'typeprestataire')); + + $typesAffect = est_anglophone() + ? array_unique(array_column($prestatairesreseau, 'typeprestataireEng')) + : array_unique(array_column($prestatairesreseau, 'typeprestataire')); sort($typesAffect); ?>
-
+
@@ -54,13 +58,13 @@
- " onkeyup="multiFilter('tab_dispo', 'count_dispo')"> + " onkeyup="rechercheServeur('dispo')">
- " onkeyup="multiFilter('tab_dispo', 'count_dispo')"> + " onkeyup="rechercheServeur('dispo')">
- @@ -121,13 +125,13 @@
- " onkeyup="multiFilter('tab_affect', 'count_affect')"> + " onkeyup="rechercheServeur('affect');">
- " onkeyup="multiFilter('tab_affect', 'count_affect')"> + " onkeyup="rechercheServeur('affect');">
- @@ -174,39 +178,6 @@
-