Commit 117b9fd1 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

EM => POM dans les services du module EP

parent daf5b712
Loading
Loading
Loading
Loading
+11 −42
Original line number Diff line number Diff line
@@ -6,23 +6,21 @@ use Application\Entity\Db\Agent;
use Application\Service\Agent\AgentServiceAwareTrait;
use DateInterval;
use DateTime;
use Doctrine\ORM\Exception\NotSupported;
use Doctrine\ORM\Exception\ORMException;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\ORM\QueryBuilder;
use DoctrineModule\Persistence\ProvidesObjectManager;
use EntretienProfessionnel\Entity\Db\Campagne;
use EntretienProfessionnel\Entity\Db\EntretienProfessionnel;
use EntretienProfessionnel\Provider\Etat\EntretienProfessionnelEtats;
use EntretienProfessionnel\Provider\Parametre\EntretienProfessionnelParametres;
use Laminas\Mvc\Controller\AbstractActionController;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenEtat\Service\EtatType\EtatTypeServiceAwareTrait;
use UnicaenParametre\Service\Parametre\ParametreServiceAwareTrait;

class CampagneService
{
    use EntityManagerAwareTrait;
    use ProvidesObjectManager;
    use AgentServiceAwareTrait;
    use EtatTypeServiceAwareTrait;
    use ParametreServiceAwareTrait;
@@ -31,55 +29,35 @@ class CampagneService

    public function create(Campagne $campagne): Campagne
    {
        try {
            $this->getEntityManager()->persist($campagne);
            $this->getEntityManager()->flush($campagne);
        } catch (ORMException $e) {
            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
        }
        $this->getObjectManager()->persist($campagne);
        $this->getObjectManager()->flush($campagne);
        return $campagne;
    }

    public function update(Campagne $campagne): Campagne
    {
        try {
            $this->getEntityManager()->flush($campagne);
        } catch (ORMException $e) {
            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
        }
        $this->getObjectManager()->flush($campagne);
        return $campagne;
    }

    public function historise(Campagne $campagne): Campagne
    {
        try {
        $campagne->historiser();
            $this->getEntityManager()->flush($campagne);
        } catch (ORMException $e) {
            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
        }
        $this->getObjectManager()->flush($campagne);
        return $campagne;
    }

    public function restore(Campagne $campagne): Campagne
    {
        try {
        $campagne->dehistoriser();
            $this->getEntityManager()->flush($campagne);
        } catch (ORMException $e) {
            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
        }
        $this->getObjectManager()->flush($campagne);
        return $campagne;
    }

    public function delete(Campagne $campagne): Campagne
    {
        try {
            $this->getEntityManager()->remove($campagne);
            $this->getEntityManager()->flush($campagne);
        } catch (ORMException $e) {
            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
        }
        $this->getObjectManager()->remove($campagne);
        $this->getObjectManager()->flush($campagne);
        return $campagne;
    }

@@ -87,15 +65,10 @@ class CampagneService

    public function createQueryBuilder(): QueryBuilder
    {
        try {
            $qb = $this->getEntityManager()->getRepository(Campagne::class)->createQueryBuilder('campagne')
        $qb = $this->getObjectManager()->getRepository(Campagne::class)->createQueryBuilder('campagne')
            ->addSelect('precede')->leftJoin('campagne.precede', 'precede')
            ->addSelect('entretien')->leftJoin('campagne.entretiens', 'entretien');
//            $qb = EntretienProfessionnel::decorateWithEtats($qb, "entretien");
        } catch (NotSupported $e) {
            throw new RuntimeException("Un problème est survenu lors de la création du QueryBuilder de [" . Campagne::class . "]", 0, $e);
        }

        return $qb;
    }

@@ -173,13 +146,9 @@ class CampagneService
     */
    public function getEntretiensByCampagneAndEtats(Campagne $campagne, array $etats): array
    {
        try {
            $qb = $this->getEntityManager()->getRepository(EntretienProfessionnel::class)->createQueryBuilder('entretien')
        $qb = $this->getObjectManager()->getRepository(EntretienProfessionnel::class)->createQueryBuilder('entretien')
            ->andWhere('entretien.campagne in (:campagne)')->setParameter('campagne', $campagne)
            ->andWhere('entretien.histoDestruction IS NULL');
        } catch (NotSupported $e) {
            throw new RuntimeException("Un probleme est sruvenu lors de la création du QueryBuilder",0,$e);
        }
        $qb = EntretienProfessionnel::decorateWithEtats($qb, 'entretien', $etats);
        $result = $qb->getQuery()->getResult();

+2 −1
Original line number Diff line number Diff line
@@ -2,7 +2,8 @@

namespace EntretienProfessionnel\Service\Campagne;

trait CampagneServiceAwareTrait {
trait CampagneServiceAwareTrait
{

    private CampagneService $campagneService;

+3 −2
Original line number Diff line number Diff line
@@ -10,7 +10,8 @@ use Psr\Container\NotFoundExceptionInterface;
use UnicaenEtat\Service\EtatType\EtatTypeService;
use UnicaenParametre\Service\Parametre\ParametreService;

class CampagneServiceFactory {
class CampagneServiceFactory
{

    /**
     * @param ContainerInterface $container
@@ -32,7 +33,7 @@ class CampagneServiceFactory {
        $parametreService = $container->get(ParametreService::class);

        $service = new CampagneService();
        $service->setEntityManager($entityManager);
        $service->setObjectManager($entityManager);
        $service->setAgentService($agentService);
        $service->setEtatTypeService($etatTypeService);
        $service->setParametreService($parametreService);
+14 −45
Original line number Diff line number Diff line
@@ -6,10 +6,9 @@ use Application\Entity\Db\Agent;
use Application\Entity\Db\AgentAffectation;
use Application\Service\Agent\AgentServiceAwareTrait;
use Application\Service\Configuration\ConfigurationServiceAwareTrait;
use Doctrine\ORM\Exception\NotSupported;
use Doctrine\ORM\Exception\ORMException;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\ORM\QueryBuilder;
use DoctrineModule\Persistence\ProvidesObjectManager;
use EntretienProfessionnel\Entity\Db\Campagne;
use EntretienProfessionnel\Entity\Db\EntretienProfessionnel;
use Exception;
@@ -18,7 +17,6 @@ use Ramsey\Uuid\Uuid;
use Structure\Entity\Db\Structure;
use Structure\Service\Structure\StructureServiceAwareTrait;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenAutoform\Service\Formulaire\FormulaireInstanceServiceAwareTrait;
use UnicaenEtat\Entity\Db\EtatType;
use UnicaenParametre\Service\Parametre\ParametreServiceAwareTrait;
@@ -28,7 +26,7 @@ use UnicaenValidation\Service\ValidationType\ValidationTypeServiceAwareTrait;
class EntretienProfessionnelService
{
    use AgentServiceAwareTrait;
    use EntityManagerAwareTrait;
    use ProvidesObjectManager;
    use ConfigurationServiceAwareTrait;
    use FormulaireInstanceServiceAwareTrait;
    use ParametreServiceAwareTrait;
@@ -42,56 +40,36 @@ class EntretienProfessionnelService

    public function create(EntretienProfessionnel $entretien): EntretienProfessionnel
    {
        try {
            $this->getEntityManager()->persist($entretien);
            $this->getEntityManager()->flush($entretien);
        } catch (ORMException $e) {
            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
        }
        $this->getObjectManager()->persist($entretien);
        $this->getObjectManager()->flush($entretien);
        $this->generateToken($entretien);
        return $entretien;
    }

    public function update(EntretienProfessionnel $entretien): EntretienProfessionnel
    {
        try {
            $this->getEntityManager()->flush($entretien);
        } catch (ORMException $e) {
            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
        }
        $this->getObjectManager()->flush($entretien);
        return $entretien;
    }

    public function historise(EntretienProfessionnel $entretien): EntretienProfessionnel
    {
        try {
        $entretien->historiser();
            $this->getEntityManager()->flush($entretien);
        } catch (ORMException $e) {
            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
        }
        $this->getObjectManager()->flush($entretien);
        return $entretien;
    }

    public function restore(EntretienProfessionnel $entretien): EntretienProfessionnel
    {
        try {
        $entretien->dehistoriser();
            $this->getEntityManager()->flush($entretien);
        } catch (ORMException $e) {
            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
        }
        $this->getObjectManager()->flush($entretien);
        return $entretien;
    }

    public function delete(EntretienProfessionnel $entretien): EntretienProfessionnel
    {
        try {
            $this->getEntityManager()->remove($entretien);
            $this->getEntityManager()->flush($entretien);
        } catch (ORMException $e) {
            throw new RuntimeException("Un problème est survenue lors de l'enregistrement en BD.", $e);
        }
        $this->getObjectManager()->remove($entretien);
        $this->getObjectManager()->flush($entretien);
        return $entretien;
    }

@@ -99,8 +77,7 @@ class EntretienProfessionnelService

    public function createQueryBuilder(bool $withAffectation = true): QueryBuilder
    {
        try {
            $qb = $this->getEntityManager()->getRepository(EntretienProfessionnel::class)->createQueryBuilder('entretien')
        $qb = $this->getObjectManager()->getRepository(EntretienProfessionnel::class)->createQueryBuilder('entretien')
            ->addSelect('agent')->leftjoin('entretien.agent', 'agent')
            ->addSelect('fichesa')->leftjoin('agent.fiches', 'fichesa')
            ->addSelect('affectation')->leftjoin('agent.affectations', 'affectation')
@@ -110,9 +87,6 @@ class EntretienProfessionnelService
            ->addSelect('campagne')->leftjoin('entretien.campagne', 'campagne')
            ->addSelect('validation')->leftjoin('entretien.validations', 'validation')
            ->addSelect('vtype')->leftjoin('validation.type', 'vtype');
        } catch (NotSupported $e) {
            throw new RuntimeException("Un problème est survenu lors de la création du QueryBuilder de [" . EntretienProfessionnel::class . "]", 0, $e);
        }

        $qb = EntretienProfessionnel::decorateWithEtats($qb, 'entretien'); //todo remettre
        if ($withAffectation) $qb = AgentAffectation::decorateWithActif($qb, 'affectation');
@@ -320,8 +294,7 @@ class EntretienProfessionnelService
    public function getEntretiensProfessionnelsByResponsableAndCampagne(Agent $responsable, ?Campagne $campagne = null, bool $histo = false, bool $withAffectation = true): array
    {
        $qb = $this->createQueryBuilder($withAffectation)
            ->andWhere('entretien.responsable = :responsable')->setParameter('responsable', $responsable)
        ;
            ->andWhere('entretien.responsable = :responsable')->setParameter('responsable', $responsable);
        if (!$histo) $qb = $qb->andWhere('entretien.histoDestruction IS NULL');
        if ($campagne != null) $qb = $qb->andWhere('entretien.campagne = :campagne')->setParameter('campagne', $campagne);

@@ -402,16 +375,12 @@ class EntretienProfessionnelService
     */
    public function getEntretiensProfessionnelsWithFiltre(array $params): array
    {
        try {
            $qb = $this->getEntityManager()->getRepository(EntretienProfessionnel::class)->createQueryBuilder('entretien')
        $qb = $this->getObjectManager()->getRepository(EntretienProfessionnel::class)->createQueryBuilder('entretien')
            ->join('entretien.agent', 'agent')->addSelect('agent')
            ->join('entretien.responsable', 'responsable')->addSelect('responsable')
            ->join('entretien.campagne', 'campagne')->addSelect('campagne')
            ->join('entretien.etats', 'etat')->addSelect('etat')
            ->join('etat.type', 'etype')->addSelect('etype');
        } catch (NotSupported $e) {
            throw new RuntimeException("Un problème est survnu lors de la création du QueryBuilder [" . EntretienProfessionnel::class . "]", 0, $e);
        }

        if ($params['campagne'] !== null and $params['campagne'] !== "") {
            $qb = $qb->andWhere('campagne.id = :campagne')->setParameter('campagne', $params['campagne']);
@@ -440,8 +409,7 @@ class EntretienProfessionnelService

        $result = $qb->getQuery()->getResult();

        if (isset($params['structure-filtre']) and $params['structure-filtre']['id'] !== "")
        {
        if (isset($params['structure-filtre']) and $params['structure-filtre']['id'] !== "") {
            $structure = $this->getStructureService()->getStructure($params['structure-filtre']['id']);
            // NOTE Changement provoqué par la gestion des structures "mères"
            $entretiens = [];
@@ -492,6 +460,7 @@ class EntretienProfessionnelService
        if ($histo === false) $qb = $qb->andWhere('entretien.histoDestruction IS NULL');

        $result = $qb->getQuery()->getResult();
        $dictionnaire = [];
        foreach ($result as $entretien) {
            $dictionnaire[$entretien->getAgent()->getId()] = $entretien;
        }
+3 −13
Original line number Diff line number Diff line
@@ -2,28 +2,18 @@

namespace EntretienProfessionnel\Service\EntretienProfessionnel;

trait EntretienProfessionnelServiceAwareTrait {

    /** @var EntretienProfessionnelService $entretienProfessionnelService */
    private $entretienProfessionnelService;
trait EntretienProfessionnelServiceAwareTrait
{
    private EntretienProfessionnelService $entretienProfessionnelService;

    /**
     * @return EntretienProfessionnelService
     */
    public function getEntretienProfessionnelService(): EntretienProfessionnelService
    {
        return $this->entretienProfessionnelService;
    }

    /**
     * @param EntretienProfessionnelService $entretienProfessionnelService
     * @return EntretienProfessionnelService
     */
    public function setEntretienProfessionnelService(EntretienProfessionnelService $entretienProfessionnelService): EntretienProfessionnelService
    {
        $this->entretienProfessionnelService = $entretienProfessionnelService;
        return $this->entretienProfessionnelService;
    }


}
 No newline at end of file
Loading