<?php
namespace App\EventListener\Declaration;
use App\Entity\Declaration\Staff\DeclarationMonth;
use App\Entity\Declaration\Staff\DeclarationTrimester;
use App\Entity\Forecast\EstablishmentDiploma\Staff\ForecastStaff;
use App\Entity\Forecast\Forecast;
use App\Entity\Staff\StaffStatus;
use App\Event\ValidationRequest\ValidationRequestValidateEvent;
use App\Repository\DeclarationStaffRepository;
use App\Repository\EstablishmentDiplomaStaffRepository;
use App\Repository\ForecastOnEstablishmentDiplomaRepository;
use App\Repository\ForecastRepository;
use App\Service\Entity\Declaration\DeclarationIndemnityManager;
class GenerateDeclarationIndemnityOnDeclarationValidationListener
{
public function __construct(
private DeclarationIndemnityManager $manageDeclaration,
private DeclarationStaffRepository $declarationStaffRepository,
private EstablishmentDiplomaStaffRepository $establishmentDiplomaStaffRepository,
private ForecastOnEstablishmentDiplomaRepository $forecastOnEstablishmentDiplomaRepository,
)
{
}
public function onDeclarationValidation(ValidationRequestValidateEvent $event)
{
$validationRequest = $event->getValidationRequest();
$declaration = $validationRequest->getDeclaration();
if ($declaration != null){
$establishmentDiploma = $declaration->getEstablishmentDiploma();
if ($declaration instanceof DeclarationMonth) {
$schoolYear = $establishmentDiploma->getSchoolYear();
$diploma = $declaration->getEstablishmentDiploma()->getDiploma();
$forecast = $this->forecastOnEstablishmentDiplomaRepository->findBy(['establishmentDiploma' => $establishmentDiploma]);
$titulaire = StaffStatus::TITULAIRE;
$contractRect = StaffStatus::CONTRACTUEL_RECTORAT;
$trimester = $declaration->getMonth()->getTrimester();
$monthId = $declaration->getMonth()->getId();
//On regarde si la déclaration est la dernière du trimestre
$lastMonthOfTrimester = $trimester->getLastMonth();
$lastMonthOfTrimesterId = $lastMonthOfTrimester->getId();
foreach ($forecast as $forecastStaff){
if ($forecastStaff instanceof ForecastStaff){
$forecastStaffLines = $forecastStaff->getForecastStaffLines();
$statusArray = [];
foreach ($forecastStaffLines as $forecastStaffLine){
$staff = $forecastStaffLine->getStaff();
$status = $staff->getStatus()->getId();
array_push($statusArray, $status);
}
if (in_array($titulaire, $statusArray) || in_array($contractRect, $statusArray)){
return;
}
else{
if ($lastMonthOfTrimesterId === $monthId){
$this->manageDeclaration->generateDeclarationFromDeclarationTrimester($trimester, $establishmentDiploma);
}
return;
}
}
}
}
}
if (
!empty($declaration) &&
$declaration instanceof DeclarationTrimester
) {
$trimester = $declaration->getTrimester();
if($this->declarationStaffRepository->allDeclarationOfTrimesterAreValidated($trimester, $establishmentDiploma))
{
$trimester = $declaration->getTrimester();
$establishmentDiploma = $declaration->getEstablishmentDiploma();
$this->manageDeclaration->generateDeclarationFromDeclarationTrimester($trimester, $establishmentDiploma);
}
}
// elseif( $declaration instanceof DeclarationMonth ){
// return;
// }
}
}