Commit 0dc298a9 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

- Ajout d'un repository pour les types d'activité

- La récupération de la correspondance des Type de contrat PCRU "remonte" l'arbre des types Oscar jusqu'à trouver un type valide (sinon, retourne "Aucun")
parent 18c21c59
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ use Doctrine\ORM\Mapping as ORM;
 * Class ActivityType
 * @package Oscar\Entity
 * @ORM\Entity
 * @ORM\Entity(repositoryClass="Oscar\Entity\ActivityTypeRepository")
 */
class ActivityType implements ITrackable
{
+26 −0
Original line number Diff line number Diff line
<?php

namespace Oscar\Entity;

use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query;

class ActivityTypeRepository extends EntityRepository
{
    /**
     * Retourne une "chaîne" des types (du plus proche au plus lointain, incluant ROOT)
     * @param ActivityType $activityType
     * @return int|mixed|string
     */
    public function getChainFromActivityType( ActivityType $activityType )
    {
        $query = $this->createQueryBuilder('at')
            ->where('at.lft < :lft AND at.rgt > :rgt')
            ->orderBy('at.lft', 'DESC');

        return $query->getQuery()->setParameters([
            'lft' => $activityType->getLft(),
            'rgt' => $activityType->getRgt()
        ])->getResult();
    }
}
 No newline at end of file
+31 −3
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
namespace Oscar\Entity;


use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NoResultException;
use Oscar\Connector\IConnectedRepository;
@@ -47,12 +48,17 @@ class PcruTypeContractRepository extends EntityRepository
        return $out;
    }


    public function getPcruContractLabelByActivityType( ActivityType $activityType ): ?PcruTypeContract
    /**
     * Retourne l'intitulé PCRU pour le type d'activité donnée.
     *
     * @param ActivityType $activityType
     * @return string|null
     * @throws \Doctrine\ORM\NonUniqueResultException
     */
    public function getPcruContractByActivityType( ActivityType $activityType ): ?PcruTypeContract
    {
        try {
            $query = $this->createQueryBuilder('ptc')
                ->select('ptc.label label')
                ->where('ptc.activityType = :activityType')
                ->setParameter('activityType', $activityType)
                ->getQuery();
@@ -63,4 +69,26 @@ class PcruTypeContractRepository extends EntityRepository
            return null;
        }
    }

    /**
     * Retourne l'intitulé PCRU pour le type d'activité donnée (en parsant l'arbre des types).
     *
     * @param ActivityType $activityType
     * @return string|null
     * @throws \Doctrine\ORM\NonUniqueResultException
     */
    public function getPcruContractForActivityTypeChained( ActivityType $activityType) : ?PcruTypeContract
    {
        $labelPcru = $this->getPcruContractByActivityType($activityType);
        if( $labelPcru == null ){
            $typeChain = $this->getEntityManager()->getRepository(ActivityType::class)->getChainFromActivityType($activityType);
            foreach ($typeChain as $type) {
                $type = $this->getPcruContractByActivityType($type);
                if( $type ){
                    return $type;
                }
            }
        }
        return null;
    }
}
 No newline at end of file
+2 −2
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ class ActivityPcruInfoFromActivityFactory
        $pcruContractTypeRepository = $this->entityManager->getRepository(PcruTypeContract::class);

        /** @var string $pcruContract */
        $pcruContract = $pcruContractTypeRepository->getPcruContractLabelByActivityType($activity->getActivityType());
        $pcruType = $pcruContractTypeRepository->getPcruContractForActivityTypeChained($activity->getActivityType());

        $activityPcruInfos->setActivity($activity)
            ->setDocumentPath($documentSigned)
@@ -109,7 +109,7 @@ class ActivityPcruInfoFromActivityFactory
            ->setSourceFinancement($activity->getPcruSourceFinancementStr())
            ->setResponsableScientifique($responsable)
            ->setCodeUniteLabintel($codeUniteLabintel)
            ->setTypeContrat($pcruContract)
            ->setTypeContrat($pcruType)
            ->setObjet($activity->getLabel())
            ->setAcronyme($activity->getAcronym())
            ->setMontantTotal($activity->getAmount())