From 81ffa22e21fd6de8fda3f687f5bb4e1ebf643bdd Mon Sep 17 00:00:00 2001
From: Jean-Philippe Metivier <jean-philippe.metivier@unicaen.fr>
Date: Mon, 18 Feb 2019 15:21:43 +0100
Subject: [PATCH] Correction mineure et ajout de fonction de recherche

---
 .../Octopus.Entity.Db.Individu.dcm.xml        |  3 +++
 .../Service/Individu/IndividuService.php      | 25 ++++++++++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/Octopus/Entity/Db/Mapping/Octopus.Entity.Db.Individu.dcm.xml b/src/Octopus/Entity/Db/Mapping/Octopus.Entity.Db.Individu.dcm.xml
index 5527459..ca001cd 100644
--- a/src/Octopus/Entity/Db/Mapping/Octopus.Entity.Db.Individu.dcm.xml
+++ b/src/Octopus/Entity/Db/Mapping/Octopus.Entity.Db.Individu.dcm.xml
@@ -24,6 +24,9 @@
         <field name="cCommuneNaissance"    type="string"   length="5"        column="C_COMMUNE_NAISSANCE"      nullable="false"/>
         <field name="cDeptNaissance"       type="string"   length="3"        column="C_DEPT_NAISSANCE"         nullable="false"/>
         <field name="cPaysNaissance"       type="string"   length="3"        column="C_PAYS_NAISSANCE"         nullable="false"/>
+        <!--<many-to-one target-entity="Octopus\Entity\Db\Pays" field="cPaysNaissance">-->
+            <!--<join-column name="C_PAYS_NAISSANCE" referenced-column-name="CODE_PAYS" />-->
+        <!--</many-to-one>-->
         <field name="cPaysNationalite"     type="string"   length="3"        column="C_PAYS_NATIONALITE"       nullable="false"/>
         <field name="telPersonnelle"       type="string"   length="20"       column="TEL_PERSO"                nullable="false"/>
         <field name="emailPersonnelle"     type="string"   length="255"      column="EMAIL_PERSO"              nullable="false"/>
diff --git a/src/Octopus/Service/Individu/IndividuService.php b/src/Octopus/Service/Individu/IndividuService.php
index 13f84a0..077d647 100644
--- a/src/Octopus/Service/Individu/IndividuService.php
+++ b/src/Octopus/Service/Individu/IndividuService.php
@@ -4,6 +4,7 @@ namespace Octopus\Service\Individu;
 
 use Doctrine\ORM\NonUniqueResultException;
 use Octopus\Entity\Db\Individu;
+use Octopus\Entity\Db\Source;
 use UnicaenApp\Exception\RuntimeException;
 use UnicaenApp\Service\EntityManagerAwareTrait;
 
@@ -54,7 +55,7 @@ class IndividuService {
     public function getIndividusByTerm($term, $sourceCode = null)
     {
         $qb = $this->getEntityManager()->getRepository(Individu::class)->createQueryBuilder('individu')
-            ->addSelect('source')->join('individu.source', 'source')
+            ->addSelect('source')->join('individu.cSource', 'source')
             ->andWhere('individu.nomUsage LIKE :search')
             ->setParameter('search', '%'.$term.'%')
             ->orderBy('individu.nomUsage, individu.prenom')
@@ -68,4 +69,26 @@ class IndividuService {
         $result = $qb->getQuery()->getResult();
         return $result;
     }
+
+    /**
+     * @param integer $numeroEtudiant
+     * @return Individu
+     */
+    public function getEtudiantByNumero($numeroEtudiant)
+    {
+        $qb = $this->getEntityManager()->getRepository(Individu::class)->createQueryBuilder('individu')
+            ->addSelect('source')->join('individu.cSource', 'source')
+            ->andWhere('individu.cEtu = :numero')
+            ->andWhere('source.cSource = :sourceCode')
+            ->setParameter('numero', $numeroEtudiant)
+            ->setParameter('sourceCode', Source::SOURCE_APOGEE)
+            ;
+
+        try {
+            $result = $qb->getQuery()->getOneOrNullResult();
+        } catch (NonUniqueResultException $e) {
+            throw new RuntimeException("Plusieurs étudiants partagent le même numéro étudiant [".$numeroEtudiant."].",$e);
+        }
+        return $result;
+    }
 }
\ No newline at end of file
-- 
GitLab