src/EventListener/Declaration/GenerateDeclarationIndemnityOnDeclarationValidationListener.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\Declaration;
  3. use App\Entity\Declaration\Staff\DeclarationMonth;
  4. use App\Entity\Declaration\Staff\DeclarationTrimester;
  5. use App\Entity\Forecast\EstablishmentDiploma\Staff\ForecastStaff;
  6. use App\Entity\Forecast\Forecast;
  7. use App\Entity\Staff\StaffStatus;
  8. use App\Event\ValidationRequest\ValidationRequestValidateEvent;
  9. use App\Repository\DeclarationStaffRepository;
  10. use App\Repository\EstablishmentDiplomaStaffRepository;
  11. use App\Repository\ForecastOnEstablishmentDiplomaRepository;
  12. use App\Repository\ForecastRepository;
  13. use App\Service\Entity\Declaration\DeclarationIndemnityManager;
  14. class GenerateDeclarationIndemnityOnDeclarationValidationListener
  15. {
  16.     public function __construct(
  17.         private DeclarationIndemnityManager $manageDeclaration,
  18.         private DeclarationStaffRepository  $declarationStaffRepository,
  19.         private EstablishmentDiplomaStaffRepository $establishmentDiplomaStaffRepository,
  20.         private ForecastOnEstablishmentDiplomaRepository $forecastOnEstablishmentDiplomaRepository,
  21.     )
  22.     {
  23.     }
  24.     public function onDeclarationValidation(ValidationRequestValidateEvent $event)
  25.     {
  26.         $validationRequest $event->getValidationRequest();
  27.         $declaration $validationRequest->getDeclaration();
  28.         if ($declaration != null){
  29.             $establishmentDiploma $declaration->getEstablishmentDiploma();
  30.             if ($declaration instanceof DeclarationMonth) {
  31.                 $schoolYear $establishmentDiploma->getSchoolYear();
  32.                 $diploma $declaration->getEstablishmentDiploma()->getDiploma();
  33.                 $forecast $this->forecastOnEstablishmentDiplomaRepository->findBy(['establishmentDiploma' => $establishmentDiploma]);
  34.                 $titulaire StaffStatus::TITULAIRE;
  35.                 $contractRect StaffStatus::CONTRACTUEL_RECTORAT;
  36.                 $trimester $declaration->getMonth()->getTrimester();
  37.                 $monthId $declaration->getMonth()->getId();
  38.                 //On regarde si la déclaration est la dernière du trimestre
  39.                 $lastMonthOfTrimester $trimester->getLastMonth();
  40.                 $lastMonthOfTrimesterId $lastMonthOfTrimester->getId();
  41.                 foreach ($forecast as $forecastStaff){
  42.                     if ($forecastStaff instanceof ForecastStaff){
  43.                         $forecastStaffLines $forecastStaff->getForecastStaffLines();
  44.                         $statusArray = [];
  45.                         foreach ($forecastStaffLines as $forecastStaffLine){
  46.                             $staff $forecastStaffLine->getStaff();
  47.                             $status $staff->getStatus()->getId();
  48.                             array_push($statusArray$status);
  49.                         }
  50.                         if (in_array($titulaire$statusArray) || in_array($contractRect$statusArray)){
  51.                             return;
  52.                         }
  53.                         else{
  54.                             if ($lastMonthOfTrimesterId === $monthId){
  55.                                 $this->manageDeclaration->generateDeclarationFromDeclarationTrimester($trimester$establishmentDiploma);
  56.                             }
  57.                             return;
  58.                         }
  59.                     }
  60.                 }
  61.             }
  62.         }
  63.         if (
  64.             !empty($declaration) &&
  65.             $declaration instanceof DeclarationTrimester
  66.         ) {
  67.             $trimester $declaration->getTrimester();
  68.             if($this->declarationStaffRepository->allDeclarationOfTrimesterAreValidated($trimester$establishmentDiploma))
  69.             {
  70.                 $trimester $declaration->getTrimester();
  71.                 $establishmentDiploma $declaration->getEstablishmentDiploma();
  72.                 $this->manageDeclaration->generateDeclarationFromDeclarationTrimester($trimester$establishmentDiploma);
  73.             }
  74.         }
  75. //        elseif( $declaration instanceof DeclarationMonth ){
  76. //           return;
  77. //        }
  78.     }
  79. }