From 9d803fae27d8e61d1292c6052ae1e897c142ff72 Mon Sep 17 00:00:00 2001
From: Jean-Philippe Metivier <jean-philippe.metivier@unicaen.fr>
Date: Thu, 14 Mar 2019 14:17:47 +0100
Subject: [PATCH] =?UTF-8?q?Changement=20dans=20la=20recherche=20d'=C3=A9tu?=
 =?UTF-8?q?diant?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/Octopus/Entity/Db/Individu.php            |  7 ++++-
 src/Octopus/Entity/Db/StructureType.php       | 22 +++++++--------
 .../Service/Individu/IndividuService.php      | 26 +++++++++++++++++-
 .../Service/Structure/StructureService.php    | 27 +++++++++++++++++--
 4 files changed, 67 insertions(+), 15 deletions(-)

diff --git a/src/Octopus/Entity/Db/Individu.php b/src/Octopus/Entity/Db/Individu.php
index c378e7e..e8fcfd3 100644
--- a/src/Octopus/Entity/Db/Individu.php
+++ b/src/Octopus/Entity/Db/Individu.php
@@ -223,7 +223,12 @@ class Individu {
 
     public function __toString()
     {
-        $texte  = $this->getPrenom(). " " . $this->getNomUsage();
+        $texte  = $this->getPrenom();
+        if ($this->getNomUsage()) $texte .= " " . $this->getNomUsage();
+        if ($this->getNomUsage() != $this->getNomFamille()) {
+            if ($this->getNomUsage()) $texte .= "-"; else $texte .= " ";
+            $texte .= $this->getNomFamille();
+        }
         return $texte;
     }
 
diff --git a/src/Octopus/Entity/Db/StructureType.php b/src/Octopus/Entity/Db/StructureType.php
index 13c6a9c..d5b30a9 100644
--- a/src/Octopus/Entity/Db/StructureType.php
+++ b/src/Octopus/Entity/Db/StructureType.php
@@ -4,17 +4,17 @@ namespace Octopus\Entity\Db;
 
 class StructureType {
 
-    const TYPE_ANTN = 'Antenne';
-    const TYPE_BIBL	= 'Bibliothèque';
-    const TYPE_COMP	= 'Composante';
-    const TYPE_DEPT	= 'Département';
-    const TYPE_ED	= 'École doctorale';
-    const TYPE_ETAB	= 'Établissement';
-    const TYPE_FICT	= 'Structure fictive';
-    const TYPE_SCEN	= 'Service central';
-    const TYPE_SCOM	= 'Service commun';
-    const TYPE_SREC	= 'Structure de recherche';
-    const TYPE_SSAD	= 'Sous-structure administrative';
+    const TYPE_ANTN = 'ANTN';
+    const TYPE_BIBL	= 'BIBL';
+    const TYPE_COMP	= 'COMP';
+    const TYPE_DEPT	= 'DEPT';
+    const TYPE_ED	= 'ED';
+    const TYPE_ETAB	= 'ETAB';
+    const TYPE_FICT	= 'FICT';
+    const TYPE_SCEN	= 'SCEN';
+    const TYPE_SCOM	= 'SCOM';
+    const TYPE_SREC	= 'SREC';
+    const TYPE_SSAD	= 'SSAD';
 
     /** @var integer */
     private $id;
diff --git a/src/Octopus/Service/Individu/IndividuService.php b/src/Octopus/Service/Individu/IndividuService.php
index 077d647..b8c414a 100644
--- a/src/Octopus/Service/Individu/IndividuService.php
+++ b/src/Octopus/Service/Individu/IndividuService.php
@@ -56,7 +56,7 @@ class IndividuService {
     {
         $qb = $this->getEntityManager()->getRepository(Individu::class)->createQueryBuilder('individu')
             ->addSelect('source')->join('individu.cSource', 'source')
-            ->andWhere('individu.nomUsage LIKE :search')
+            ->andWhere('individu.nomUsage LIKE :search OR individu.nomFamille LIKE :search')
             ->setParameter('search', '%'.$term.'%')
             ->orderBy('individu.nomUsage, individu.prenom')
         ;
@@ -70,6 +70,30 @@ class IndividuService {
         return $result;
     }
 
+    /**
+     * @param string $term
+     * @return Individu[]
+     */
+    public function getEtudiantsByTerm($term, $sourceCode = null)
+    {
+        $qb = $this->getEntityManager()->getRepository(Individu::class)->createQueryBuilder('individu')
+            ->join('individu.affectations', 'affectation')
+            ->andWhere('LOWER(CONCAT(individu.nomUsage, \' \' , individu.prenom, \' \', individu.nomUsage, \' \')) 
+                     OR LOWER(CONCAT(individu.nomFamille, \' \' , individu.prenom, \' \', individu.nomFamille, \' \'))
+                     OR individu.cEtu LIKE :term
+                    ')
+            ->andWhere('affectation.type = :type')
+            ->setParameter('search', '%'.strtolower($term).'%')
+            ->setParameter('term', $term.'%')
+            ->setParameter('type', 5)
+            ->orderBy('individu.nomUsage, individu.prenom')
+        ;
+
+
+        $result = $qb->getQuery()->getResult();
+        return $result;
+    }
+
     /**
      * @param integer $numeroEtudiant
      * @return Individu
diff --git a/src/Octopus/Service/Structure/StructureService.php b/src/Octopus/Service/Structure/StructureService.php
index 6c8bb61..684770d 100644
--- a/src/Octopus/Service/Structure/StructureService.php
+++ b/src/Octopus/Service/Structure/StructureService.php
@@ -46,6 +46,25 @@ class StructureService {
         return $result;
     }
 
+    /**
+     * @param string $code
+     * @return StructureType
+     */
+    public function getStructureTypeByCode($code)
+    {
+        $qb = $this->getEntityManager()->getRepository(StructureType::class)->createQueryBuilder('type')
+            ->andWhere('type.code  :code')
+            ->setParameter('code', $code)
+        ;
+
+        try {
+            $result = $qb->getQuery()->getOneOrNullResult();
+        } catch (NonUniqueResultException $e) {
+            throw new RuntimeException("Plusieurs StructureType partagent le même code [".$code."].");
+        }
+        return $result;
+    }
+
     /**
      * @param string $term
      * @return StructureType[]
@@ -130,10 +149,14 @@ class StructureService {
      */
     public function getStructuresByType($type, $order = null)
     {
-        $qb = $this->getEntityManager()->getRepository(Structure::class)->createQueryBuilder('type')
+        /** @var StructureType $structureType */
+        $structureType = $this->getStructureTypeByCode($type);
+        var_dump($structureType);
+
+        $qb = $this->getEntityManager()->getRepository(Structure::class)->createQueryBuilder('structure')
             ->addSelect('type')->join('structure.type', 'type')
             ->andWhere('type.code = :type')
-            ->setParameter('type', $type)
+            ->setParameter('type', $structureType->getId())
         ;
 
         if ($order) $qb = $qb->orderBy('type.'.$order);
-- 
GitLab