Commit f1a119ea authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Module Soutenance : modif de la qualité par défaut des membres lors de la...

Module Soutenance : modif de la qualité par défaut des membres lors de la création automatique de la proposition (lors du 1er accès à la page Proposition).
parent 752e9dca
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ Journal des modifications

8.5.0
-----
- Module Soutenance : modif de la qualité par défaut des membres lors de la création automatique de la proposition (lors du 1er accès à la page Proposition).
- [FIX] Requête de recherche de thèses par acteur : les acteurs historisés n'étaient pas écartés.

8.4.0
+1 −1
Changes for module/Soutenance/src/Soutenance/Entity/Qualite.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ class Qualite implements HistoriqueAwareInterface
{
    use HistoriqueAwareTrait;

    const ID_INCONNUE = 0;
    const ID_QUALITE_PAR_DEFAUT = 1;

    /** @var int */
    private $id;
+4 −4
Changes for module/Soutenance/src/Soutenance/Service/Membre/MembreService.php: 4 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -227,6 +227,7 @@ class MembreService {
    }

    /** FACADE ********************************************************************************************************/

    /**
     * @param Proposition $proposition
     * @param Acteur $acteur
@@ -234,16 +235,15 @@ class MembreService {
     */
    public function createMembre(Proposition $proposition, Acteur $acteur) : Membre
    {
        //Qualité par défaut
        $inconnue = $this->getQualiteService()->getQualite(Qualite::ID_INCONNUE);
        $qualite = $this->qualiteService->getQualiteByLibelle($acteur->getQualite()) ?:
            $this->qualiteService->getQualiteParDefaut();

        $membre = new Membre();
        $membre->setProposition($proposition);
        $membre->setPrenom($acteur->getIndividu()->getPrenom());
        $membre->setNom($acteur->getIndividu()->getNomUsuel());
        $membre->setGenre(($acteur->getIndividu()->estUneFemme())?"F":"H");
        $qualite = $this->getQualiteService()->getQualiteByLibelle($acteur->getQualite());
        $membre->setQualite(($qualite !== null)?$qualite:$inconnue);
        $membre->setQualite($qualite);
        $membre->setEtablissement(($acteur->getEtablissement())?$acteur->getEtablissement()->getStructure()->getLibelle():"Etablissement inconnu");
        $membre->setRole(Membre::MEMBRE_JURY);
        $membre->setExterieur("non");
+25 −15
Changes for module/Soutenance/src/Soutenance/Service/Qualite/QualiteService.php: 25 added lines, 15 removed lines.
Original line number Diff line number Diff line
@@ -2,7 +2,9 @@

namespace Soutenance\Service\Qualite;

use Application\Service\BaseService;
use Application\Service\UserContextServiceAwareTrait;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\ORM\ORMException;
use Doctrine\ORM\QueryBuilder;
@@ -10,13 +12,20 @@ use Soutenance\Entity\Qualite;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Service\EntityManagerAwareTrait;
use Laminas\Mvc\Controller\AbstractActionController;
use Webmozart\Assert\Assert;

class QualiteService {
class QualiteService extends BaseService
{
    use EntityManagerAwareTrait;
    use UserContextServiceAwareTrait;

    /** GESTION DES ENTITES *******************************************************************************************/

    public function getRepository(): EntityRepository
    {
        return $this->getEntityManager()->getRepository(Qualite::class);
    }

    /**
     * @param Qualite $qualite
     * @return Qualite
@@ -102,7 +111,7 @@ class QualiteService {
     */
    public function createQueryBuilder() : QueryBuilder
    {
        $qb = $this->getEntityManager()->getRepository(Qualite::class)->createQueryBuilder("qualite")
        $qb = $this->getRepository()->createQueryBuilder("qualite")
            ->addSelect('libelleSupplementaire')->leftJoin('qualite.libellesSupplementaires', 'libelleSupplementaire');

        return $qb;
@@ -135,21 +144,22 @@ class QualiteService {
    }

    /**
     * @param int|null $id
     * @return Qualite|null
     * Recherche une qualié par son id.
     */
    public function getQualite(?int $id) : ?Qualite
    public function getQualite(int $id): ?Qualite
    {
        $qb = $this->createQueryBuilder()
            ->andWhere("qualite.id = :id")
            ->setParameter("id", $id);

        try {
            $result = $qb->getQuery()->getOneOrNullResult();
        } catch (NonUniqueResultException $e) {
            throw new RuntimeException("Plusieurs qualité partagent le même identifiant !");
        return $this->getRepository()->find($id);
    }
        return $result;

    /**
     * Retourne la qualié par défaut.
     */
    public function getQualiteParDefaut(): Qualite
    {
        $qualite = $this->getRepository()->find(Qualite::ID_QUALITE_PAR_DEFAUT);
        Assert::notNull($qualite, "Anomalie : aucune qualité par défaut n'a été trouvée !");

        return $qualite;
    }

    /**
@@ -181,7 +191,7 @@ class QualiteService {
     */
    public function findAllQualites() : array
    {
        $qb = $this->getEntityManager()->getRepository(Qualite::class)->createQueryBuilder('qualite')
        $qb = $this->getRepository()->createQueryBuilder('qualite')
            ->orderBy('qualite.rang, qualite.libelle');
        return $qb->getQuery()->getResult();
    }