فهرست منبع

v8-4757 : suppression de la mise a jour dans ES des notes si la note max change.
Ajout de la possibilité de mettre un filtre SQL en disabled

Vincent 2 سال پیش
والد
کامیت
f7578906d2

+ 0 - 1
config/packages/messenger.yaml

@@ -12,7 +12,6 @@ framework:
         routing:
             # Route your messages to the transports
             'App\Message\Command\MailerCommand': async
-            'App\Message\Command\Parameters\AverageChange': async
             'App\Message\Command\Export': async
             'App\Message\Command\Typo3\Typo3UpdateCommand': async
             'App\Message\Command\Typo3\Typo3DeleteCommand': async

+ 6 - 1
src/Filter/Doctrine/TimeConstraint/AbstractTimeFilter.php

@@ -18,6 +18,7 @@ use Symfony\Contracts\Service\Attribute\Required;
  */
 abstract class AbstractTimeFilter extends SQLFilter
 {
+    protected bool $disabled = false;
     protected ?int $accessId = null;
     protected ?TimeConstraintInterface $timeConstraint = null;
 
@@ -41,6 +42,10 @@ abstract class AbstractTimeFilter extends SQLFilter
      */
     protected static ?string $annotationEndField = null;
 
+    public function setDisabled(bool $disabled): void {
+        $this->disabled = $disabled;
+    }
+
     public function setAccessId(int $accessId): void {
         $this->accessId = $accessId;
     }
@@ -95,7 +100,7 @@ abstract class AbstractTimeFilter extends SQLFilter
         }
 
         $constraintAnnotation = $targetEntity->getReflectionClass()->getAttributes(static::$constraintAnnotation)[0] ?? null;
-        if (!$constraintAnnotation) {
+        if (!$constraintAnnotation || $this->disabled) {
             return '';
         }
 

+ 0 - 18
src/Message/Command/Parameters/AverageChange.php

@@ -1,18 +0,0 @@
-<?php
-declare(strict_types=1);
-
-namespace App\Message\Command\Parameters;
-
-/**
- * Classe AverageChange qui contiendras le message pour AverageChange
- */
-class AverageChange
-{
-    public function __construct(private int $parametersId)
-    { }
-
-    public function getParametersId(): int{
-        // Todo: penser à ajouter cette commande à la section routing du fichier config/packages/messenger.yaml
-        return $this->parametersId;
-    }
-}

+ 0 - 36
src/Message/Handler/Parameters/AverageChangeHandler.php

@@ -1,36 +0,0 @@
-<?php
-declare(strict_types=1);
-
-namespace App\Message\Handler\Parameters;
-
-use App\Message\Command\Parameters\AverageChange;
-use App\Repository\Education\EducationNotationRepository;
-use App\Repository\Organization\ParametersRepository;
-use App\Service\Elasticsearch\EducationNotationUpdater;
-use Symfony\Component\Messenger\Attribute\AsMessageHandler;
-
-/**
- * Classe AverageChangeHandler qui traite les messages AverageChange
- */
-#[AsMessageHandler(priority: 1)]
-class AverageChangeHandler
-{
-    public function __construct(
-        private EducationNotationUpdater $educationNotationUpdater,
-        private EducationNotationRepository $educationNotationRepository,
-        private ParametersRepository $parametersRepository
-    ) {}
-
-    /**
-     * Fonction permettant de remettre à jour les notes dans elasticsearch par rapport à la note maximale changée
-     * @param AverageChange $averageChange
-     */
-    public function __invoke(AverageChange $averageChange): void
-    {
-        $parameter = $this->parametersRepository->find($averageChange->getParametersId());
-        if($parameter){
-            $educationNotations = $this->educationNotationRepository->findAllEducationNotation($parameter->getOrganization());
-            $this->educationNotationUpdater->update($educationNotations);
-        }
-    }
-}

+ 13 - 5
src/Repository/Access/AccessRepository.php

@@ -7,6 +7,7 @@ use App\DQL\DateConditions;
 use App\Entity\Access\Access;
 use App\Entity\Organization\Organization;
 use App\Enum\Access\FunctionEnum;
+use App\Filter\Doctrine\TimeConstraint\DatetimeFilter;
 use DateTime;
 use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
 use Doctrine\Persistence\ManagerRegistry;
@@ -111,7 +112,9 @@ class AccessRepository extends ServiceEntityRepository implements UserLoaderInte
      */
     public function hasGotFunctionAtThisDate(Access $access, FunctionEnum $function, \DateTime $date): bool
     {
-        $this->_em->getFilters()->disable('date_time_filter');
+        /** @var DatetimeFilter $filter */
+        $filter = $this->_em->getFilters()->getFilter('date_time_filter');
+        $filter->setDisabled(true);
 
         $qb = $this->createQueryBuilder('access');
         $qb
@@ -126,7 +129,7 @@ class AccessRepository extends ServiceEntityRepository implements UserLoaderInte
 
         $result = count($qb->getQuery()->getResult()) > 0;
 
-        $this->_em->getFilters()->enable('date_time_filter');
+        $filter->setDisabled(false);
 
         return $result;
     }
@@ -144,7 +147,9 @@ class AccessRepository extends ServiceEntityRepository implements UserLoaderInte
         if ($date === null)
             $date = new DateTime();
 
-        $this->_em->getFilters()->disable('date_time_filter');
+        /** @var DatetimeFilter $filter */
+        $filter = $this->_em->getFilters()->getFilter('date_time_filter');
+        $filter->setDisabled(true);
 
         $qb = $this->createQueryBuilder('access');
         $qb
@@ -156,9 +161,12 @@ class AccessRepository extends ServiceEntityRepository implements UserLoaderInte
             ->setParameter('mission', $function)
         ;
         DateConditions::addDateInPeriodCondition($qb, 'organization_function', $date->format('Y-m-d'));
-        $this->_em->getFilters()->enable('date_time_filter');
 
-        return $qb->getQuery()->getResult();
+        $result = $qb->getQuery()->getResult();
+
+        $filter->setDisabled(false);
+
+        return $result;
     }
 
     /**

+ 5 - 2
src/Repository/Booking/CourseRepository.php

@@ -5,6 +5,7 @@ namespace App\Repository\Booking;
 
 use App\Entity\Booking\Course;
 use App\Entity\Organization\Organization;
+use App\Filter\Doctrine\TimeConstraint\AbstractTimeFilter;
 use DateTimeInterface;
 use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
 use Doctrine\Persistence\ManagerRegistry;
@@ -25,7 +26,9 @@ class CourseRepository extends ServiceEntityRepository
      */
     public function getCoursesToFrom(Organization $organization, DateTimeInterface $start, DateTimeInterface $end): array
     {
-        $this->_em->getFilters()->disable('activity_year_filter');
+        /** @var AbstractTimeFilter $filter */
+        $filter = $this->_em->getFilters()->getFilter('activity_year_filter');
+        $filter->setDisabled(true);
 
         $queryBuilder = $this->createQueryBuilder('course');
 
@@ -41,7 +44,7 @@ class CourseRepository extends ServiceEntityRepository
 
         $results = $queryBuilder->getQuery()->getResult();
 
-        $this->_em->getFilters()->enable('activity_year_filter');
+        $filter->setDisabled(false);
 
         return $results;
     }

+ 6 - 2
src/Repository/Education/EducationNotationRepository.php

@@ -5,6 +5,7 @@ namespace App\Repository\Education;
 
 use App\Entity\Education\EducationNotation;
 use App\Entity\Organization\Organization;
+use App\Filter\Doctrine\TimeConstraint\ActivityYearFilter;
 use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
 use Doctrine\Persistence\ManagerRegistry;
 
@@ -21,7 +22,9 @@ class EducationNotationRepository extends ServiceEntityRepository
      * @return array|int|mixed|string
      */
     public function findAllEducationNotation(Organization $organization){
-        $this->_em->getFilters()->disable('activity_year_filter');
+        /** @var ActivityYearFilter $filter */
+        $filter = $this->_em->getFilters()->getFilter('activity_year_filter');
+        $filter->setDisabled(true);
 
         $queryBuilder = $this->createQueryBuilder('education_notation');
         $queryBuilder
@@ -36,7 +39,8 @@ class EducationNotationRepository extends ServiceEntityRepository
         $query = $queryBuilder->getQuery();
         $results = $query->getResult();
 
-        $this->_em->getFilters()->enable('activity_year_filter');
+        $filter->setDisabled(false);
+
         return $results;
     }
 }

+ 0 - 12
src/Service/OnChange/Organization/OnParametersChange.php

@@ -8,7 +8,6 @@ use App\Entity\Booking\Course;
 use App\Entity\Education\EducationNotationConfig;
 use App\Entity\Organization\Parameters;
 use App\Enum\Education\AdvancedEducationNotationTypeEnum;
-use App\Message\Command\Parameters\AverageChange;
 use App\Message\Command\Typo3\Typo3DeleteCommand;
 use App\Message\Command\Typo3\Typo3UndeleteCommand;
 use App\Message\Command\Typo3\Typo3UpdateCommand;
@@ -16,7 +15,6 @@ use App\Repository\Booking\CourseRepository;
 use App\Service\Network\Utils as NetworkUtils;
 use App\Service\OnChange\OnChangeContext;
 use App\Service\OnChange\OnChangeDefault;
-use App\Test\Service\OnChange\Organization\OnParametersChangeTest;
 use App\Service\Organization\Utils as OrganizationUtils;
 use Symfony\Component\Messenger\MessageBusInterface;
 
@@ -77,16 +75,6 @@ class OnParametersChange extends OnChangeDefault
      */
     public function onChange($parameters, OnChangeContext $context): void
     {
-        // La note maximale du suivi pédagogique change
-        if(
-            $context->previousData() &&
-            $context->previousData()->getAverage() !== $parameters->getAverage()
-        ){
-            $this->messageBus->dispatch(
-                new AverageChange($parameters->getId())
-            );
-        }
-
         // Le customDomain a été modifié, on met à jour le site typo3 (s'il est actif)
         if(
             $context->previousData() &&

+ 0 - 35
tests/Unit/Service/OnChange/Organization/OnParametersChangeTest.php

@@ -194,41 +194,6 @@ class OnParametersChangeTest extends TestCase
         $onParametersChange->onChange($parameters, $context);
     }
 
-    /**
-     * @see OnParametersChange::onChange()
-     */
-    public function testOnChangeAverageChanged(): void
-    {
-        $onParametersChange = $this
-            ->getMockBuilder(OnParametersChange::class)
-            ->setConstructorArgs([$this->courseRepository, $this->networkUtils, $this->organizationUtils, $this->messageBus])
-            ->setMethodsExcept(['onChange'])
-            ->getMock();
-
-        $this->messageBus
-            ->expects(self::once())
-            ->method('dispatch')
-            ->with(self::isInstanceOf(AverageChange::class))
-            ->willReturn(new Envelope(new AverageChange(1)));
-
-        $previousParameters = $this->getMockBuilder(Parameters::class)->getMock();
-        $previousParameters->method('getId')->willReturn(1);
-        $previousParameters->expects(self::once())->method('getAverage')->willReturn(20);
-        $previousParameters->method('getDesactivateOpentalentSiteWeb')->willReturn(false);
-        $previousParameters->method('getCustomDomain')->willReturn(null);
-
-        $context = $this->getMockBuilder(OnChangeContext::class)->disableOriginalConstructor()->getMock();
-        $context->method('previousData')->willReturn($previousParameters);
-
-        $parameters = $this->getMockBuilder(Parameters::class)->getMock();
-        $parameters->method('getId')->willReturn(1);
-        $parameters->method('getDesactivateOpentalentSiteWeb')->willReturn(false);
-        $parameters->method('getCustomDomain')->willReturn(null);
-        $parameters->expects(self::once())->method('getAverage')->willReturn(30);
-
-        $onParametersChange->onChange($parameters, $context);
-    }
-
     /**
      * @see OnParametersChange::onChange()
      */