src/Controller/CongeDroitAnnuelController.php line 232

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\RefAffectationCalendrier;
  4. use JMS\Serializer\SerializationContext;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use App\Entity\Conge;
  10. use App\Entity\CongeDroitAnnuel;
  11. use App\Entity\CongeType;
  12. use App\Entity\Utilisateur;
  13. use App\Entity\UtilisateurInformation;
  14. use App\Entity\Workflow;
  15. use App\Form\CongeDroitAnnuelType;
  16. use Doctrine\Persistence\ManagerRegistry;
  17. use App\Services\AccessRule;
  18. use JMS\Serializer\SerializerInterface;
  19. use App\Entity\RefAffectation;
  20. use App\Entity\DemandeReport;
  21. class CongeDroitAnnuelController extends AbstractController
  22. {
  23.     private $doctrine;
  24.     private $accessRule;
  25.     private $serializer;
  26.     final public const ERROR_VALIDATION_FORM 'Erreur lors de la validation du formulaire';
  27.     final public const ERROR_OCCURED 'Une erreur est survenue';
  28.     final public const ERROR_ALREADY_EXISTS 'Conge droit annuel déjà existant';
  29.     final public const ERROR_ACTION_FORBIDDEN 'Action non autorisée';
  30.     public function __construct(ManagerRegistry $doctrineAccessRule $accessRuleSerializerInterface $serializer)
  31.     {
  32.         $this->doctrine $doctrine;
  33.         $this->accessRule $accessRule;
  34.         $this->serializer $serializer;
  35.     }
  36.     #[Route(path'/api/conges-annuel/{id}'name'ctsweb_get_conges-annuel'methods: ['GET'], requirements: ['id' => '\d+'])]
  37.     public function detail(CongeDroitAnnuel $congeDroit): JsonResponse
  38.     {
  39.         $congeDroit $this->serialize($congeDroit);
  40.         return new JsonResponse(
  41.             $congeDroit,
  42.             JsonResponse::HTTP_OK,
  43.             [],
  44.             true
  45.         );
  46.     }
  47.     /**
  48.      * @return JsonResponse
  49.      */
  50.     #[Route(path'/api/conges-annuel'name'ctsweb_create_conges-annuel'methods: ['POST'])]
  51.     public function create(Request $request)
  52.     {
  53.         $congeAnnuel = new CongeDroitAnnuel();
  54.         $form $this->handleRequest($request$congeAnnuel'create');
  55.         $entityManager $this->doctrine->getManager();
  56.         $utilisateur $congeAnnuel->getUtilisateur();
  57.         $utilisateurInformation $entityManager
  58.             ->getRepository(UtilisateurInformation::class)
  59.             ->findOneBy(["idUtilisateur" => $utilisateur]);
  60.         $Idaffectation $utilisateurInformation->getIdAffectation()->getIdAffectation();
  61.         $today = (new \DateTime());
  62.         $year $today->format("Y");
  63.         $getRefCalendrier =  $entityManager
  64.             ->getRepository(RefAffectationCalendrier::class)
  65.             ->getRefCalendrier($Idaffectation);
  66.         $congeScolaire $getRefCalendrier['calendrierScolaire'];
  67.         $dateBasculeCongeSolaire $getRefCalendrier['dateBascule'];
  68.         $yearBascule $getRefCalendrier['yearBascule'];
  69.         if ($dateBasculeCongeSolaire != null) {
  70.             if (intval($congeAnnuel->getAnnee()) >= intval($yearBascule)) {
  71.                 $typeCalendrier = ($congeScolaire) ? 's' 'c';
  72.             } else {
  73.                 $typeCalendrier = ($congeScolaire) ? 'c' 's';
  74.             }
  75.         } else {
  76.             $typeCalendrier = ($congeScolaire) ? 's' 'c';
  77.         }
  78.         if ((true === $congeScolaire) && ($dateBasculeCongeSolaire $today) && ($today < new \DateTime("$year-09-01"))) {
  79.             $congeAnnuel->setAnnee($congeAnnuel->getAnnee() - 1);
  80.         }
  81.         if ($form->isSubmitted()) {
  82.             $entityManager $this->doctrine->getManager();
  83.             $accessRuleService $this->getServiceAccessRule();
  84.             if (!$accessRuleService->hasRightWithoutCheckAffectation($congeAnnuel->getUtilisateur(), $this->getUser())) {
  85.                 return new JsonResponse(''JsonResponse::HTTP_FORBIDDEN);
  86.             }
  87.             $congeAnnuelEntity $entityManager
  88.                 ->getRepository(CongeDroitAnnuel::class)
  89.                 ->findOneBy([
  90.                     'annee' => $congeAnnuel->getAnnee(),
  91.                     'utilisateur' => $congeAnnuel->getUtilisateur(),
  92.                     'congeType' => $congeAnnuel->getCongeType(),
  93.                     'archive' => false
  94.                 ]);
  95.             if ($congeAnnuelEntity) {
  96.                 return new JsonResponse(
  97.                     [
  98.                         'success' => false,
  99.                         'info' => self::ERROR_ALREADY_EXISTS
  100.                     ],
  101.                     JsonResponse::HTTP_BAD_REQUEST
  102.                 );
  103.             }
  104.             $congeAnnuel->setArchive(false);
  105.             $congeAnnuel->setTypeCalendrier($typeCalendrier);
  106.             $entityManager->persist($congeAnnuel);
  107.             $entityManager->flush();
  108.             return new JsonResponse(
  109.                 [
  110.                     'success' => true
  111.                 ],
  112.                 JsonResponse::HTTP_CREATED
  113.             );
  114.         } else {
  115.             $result = [
  116.                 'success' => false,
  117.                 'data' => self::ERROR_VALIDATION_FORM,
  118.                 'error' => (string) $form->getErrors(truefalse)
  119.             ];
  120.         }
  121.         return new JsonResponse($resultJsonResponse::HTTP_BAD_REQUEST);
  122.     }
  123.     /**
  124.      * @return JsonResponse
  125.      */
  126.     #[Route(path'/api/conges-annuel/{id}'name'ctsweb_update_conges-annuel'methods: ['POST'], requirements: ['id' => '\d+'])]
  127.     public function update(
  128.         Request $request,
  129.         CongeDroitAnnuel $congeAnnuel
  130.     ) {
  131.         $accessRuleService $this->getServiceAccessRule();
  132.         if (!$accessRuleService->hasRightWithoutCheckAffectation($congeAnnuel->getUtilisateur(), $this->getUser())) {
  133.             return new JsonResponse(''JsonResponse::HTTP_FORBIDDEN);
  134.         }
  135.         $label 'update-ca';
  136.         if ($congeAnnuel->getCongeType()->getCode() !== CongeType::CAN) {
  137.             $label 'update-others';
  138.         }
  139.         $form $this->handleRequest($request$congeAnnuel$label);
  140.         if ($form->isSubmitted() && $form->isValid()) {
  141.             $entityManager $this->doctrine->getManager();
  142.             $entityManager->flush();
  143.             $result = ['success' => true];
  144.         } else {
  145.             $result = [
  146.                 'success' => false,
  147.                 'data' => self::ERROR_VALIDATION_FORM,
  148.                 'error' => (string) $form->getErrors(truefalse)
  149.             ];
  150.         }
  151.         return new JsonResponse($resultJsonResponse::HTTP_OK);
  152.     }
  153.     /**
  154.      * @param CongeDroitAnnuel $id
  155.      */
  156.     #[Route(path'/api/conges-annuel/delete/{id}/{utilisateur}'name'ctsweb_remove_conges-annuel'methods: ['POST'], requirements: ['id' => '\d+''utilisateur' => '\d+'])]
  157.     public function delete(
  158.         CongeDroitAnnuel $congeDroitAnnuel,
  159.         Utilisateur $utilisateur
  160.     ): JsonResponse {
  161.         if ($congeDroitAnnuel->getUtilisateur() !== $utilisateur) {
  162.             return new JsonResponse(
  163.                 ['info' => self::ERROR_ACTION_FORBIDDEN],
  164.                 JsonResponse::HTTP_FORBIDDEN
  165.             );
  166.         }
  167.         $this->doctrine->getManager()->remove($congeDroitAnnuel);
  168.         $this->doctrine->getManager()->flush();
  169.         return new JsonResponse(''JsonResponse::HTTP_NO_CONTENT);
  170.     }
  171.     #[Route(path'/api/conges-annuel/search/{user}/{year}/{type}'name'ctsweb_get_conges-annuel-by-year-type-user'methods: ['GET'], requirements: ['user' => '\d+''year' => '\d+'])]
  172.     public function searchByUserAndUserAndType(
  173.         Utilisateur $user,
  174.         int $year,
  175.         string $type
  176.     ): JsonResponse {
  177.         $congeAnnuel $this
  178.             ->doctrine
  179.             ->getRepository(CongeDroitAnnuel::class)
  180.             ->searchByUserAndUserAndType($user$year$type);
  181.         return new JsonResponse(
  182.             $this->serialize($congeAnnuel),
  183.             JsonResponse::HTTP_OK,
  184.             [],
  185.             true
  186.         );
  187.     }
  188.     /**
  189.      * @return JsonResponse
  190.      */
  191.     #[Route(path'/api/conges-annuel/list/{conge}'name'ctsweb_list_conges-annuel_by_conge'methods: ['GET'], requirements: ['conge' => '\d+'])]
  192.     public function listByDayOff(Conge $conge)
  193.     {
  194.         $congeTypes $this->doctrine
  195.             ->getRepository(CongeType::class)
  196.             ->findBy(['code' => ['RTT''CAN''RAA''CET']], ['id' => 'ASC']);
  197.         $utilisateurInformation $this->getUser();
  198.         $affectation $utilisateurInformation->getIdAffectation()->getIdAffectation();
  199.         $entityManager $this->doctrine->getManager();
  200.         $getRefCalendrier =  $entityManager
  201.             ->getRepository(RefAffectationCalendrier::class)
  202.             ->getRefCalendrier($affectation);
  203.         $congeScolaire $getRefCalendrier['calendrierScolaire'];
  204.         $dateBascule  $getRefCalendrier['dateBascule'];
  205.         $today = (new \DateTime());
  206.         $currentYear $today->format("Y");
  207.         $dateCalendrierScolaire = new \DateTime("$currentYear-09-01");
  208.         if (true === $congeScolaire) {
  209.             if ($conge->getDateDebut() < $dateCalendrierScolaire && $today $dateCalendrierScolaire) {
  210.                 $year $conge->getDateDebut()->format("Y");
  211.             } elseif ($conge->getDateDebut() < $dateCalendrierScolaire && $today $dateCalendrierScolaire) {
  212.                 $year $conge->getDateDebut()->format("Y") - 1;
  213.             } elseif ($conge->getDateDebut() > $dateCalendrierScolaire && $today $dateCalendrierScolaire) {
  214.                 $year $conge->getDateDebut()->format("Y") + 1;
  215.             } else {
  216.                 $year $conge->getDateDebut()->format("Y");
  217.             }
  218.         } else {
  219.             $year $conge->getDateDebut()->format("Y");
  220.         }
  221.         foreach ($congeTypes as $congeType) {
  222.             $congeType $this->setTotal($conge->getUtilisateur(), $congeType$year$conge->getDateDebut(), $congeScolaire);
  223.             if ($congeType === $conge->getCongeType()) {
  224.                 $congeType->setNouveauSolde($congeType->getSolde() - $conge->getNbJour());
  225.             } else {
  226.                 $congeType->setNouveauSolde($congeType->getSolde());
  227.             }
  228.             if ((($dateBascule != null) && ($dateBascule $today)) || ($dateBascule == null)) {
  229.                 $congeType->setCalendrierScolaire($congeScolaire);
  230.             } else {
  231.                 $congeType->setCalendrierScolaire(!$congeScolaire);
  232.             }
  233.         }
  234.         return new JsonResponse(
  235.             $this->serialize($congeTypes),
  236.             JsonResponse::HTTP_OK,
  237.             [],
  238.             true
  239.         );
  240.     }
  241.     //#[Route(path: '/api/conges-annuel/list/{conge}', name: 'ctsweb_list_conges-annuel_by_conge')]
  242.     public function getAnneeExportAction(Request $request)
  243.     {
  244.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  245.         $request->request->replace(is_array($data) ? $data : []);
  246.         $params $request->request->all();
  247.     }
  248.     /**
  249.      * @return JsonResponse
  250.      */
  251.     #[Route(path'/api/conges-annuel/recap/{utilisateur}/{year}'name'ctsweb_list_conges-annuel_by_user_year'methods: ['GET'], requirements: ['utilisateur' => '\d+''year' => '\d+'])]
  252.     public function recap(
  253.         Utilisateur $utilisateur,
  254.         int $year
  255.     ) {
  256.         $entityManager $this->doctrine->getManager();
  257.         $utilisateurInformation $entityManager
  258.             ->getRepository(UtilisateurInformation::class)
  259.             ->findOneBy(["idUtilisateur" => $utilisateur]);
  260.         $affectation $utilisateurInformation->getIdAffectation()->getIdAffectation();
  261.         $entityManager $this->doctrine->getManager();
  262.         $affectionEntity $entityManager
  263.             ->getRepository(RefAffectation::class)
  264.             ->findOneBy(["idAffectation" => $affectation]);
  265.         $getRefCalendrier =  $entityManager
  266.             ->getRepository(RefAffectationCalendrier::class)
  267.             ->getRefCalendrier($affectation);
  268.         $congeScolaire $getRefCalendrier['calendrierScolaire'];
  269.         $congeTypes $this->doctrine
  270.             ->getRepository(CongeType::class)
  271.             ->findBy(['code' => ['RTT''CAN''CET']], ['id' => 'ASC']);
  272.         foreach ($congeTypes as $congeType) {
  273.             $congeType $this->setTotal($utilisateur$congeType$year, new \DateTime("$year-12-31"), $congeScolaire);
  274.         }
  275.         return new JsonResponse(
  276.             $this->serialize($congeTypes),
  277.             JsonResponse::HTTP_OK,
  278.             [],
  279.             true
  280.         );
  281.     }
  282.     /**
  283.      * @param Utilisateur $user
  284.      * @param $year
  285.      * @return JsonResponse
  286.      */
  287.     #[Route(path'/api/conges-annuel/listing/{utilisateur}/{year}'name'ctsweb_list_conges-annuel'methods: ['GET'], requirements: ['utilisateur' => '\d+''year' => '\d+'])]
  288.     public function listByYearAndUser(Utilisateur $utilisateur$year)
  289.     {
  290.         // détecter affectation et conge scolaire
  291.         $entityManager $this->doctrine->getManager();
  292.         $utilisateurInformation $entityManager
  293.             ->getRepository(UtilisateurInformation::class)
  294.             ->findOneBy(["idUtilisateur" => $utilisateur]);
  295.         $Idaffectation $utilisateurInformation->getIdAffectation()->getIdAffectation();
  296.         $affectation $entityManager
  297.             ->getRepository(RefAffectation::class)
  298.             ->findOneBy(["idAffectation" => $Idaffectation]);
  299.         // $congeScolaire = $affectation->getCalendrierScolaire();
  300.         // $dateBascule = $affectation->getDateBascule();
  301.         $today = new \DateTime();
  302.         $currentYear $today->format("Y");
  303.         $getRefCalendrier =  $entityManager
  304.             ->getRepository(RefAffectationCalendrier::class)
  305.             ->getRefCalendrier($Idaffectation);
  306.         $congeScolaire $getRefCalendrier['calendrierAffectation'];
  307.         $dateBascule $getRefCalendrier['dateBascule'];
  308.         if ($congeScolaire) {
  309.             if ((null != $dateBascule) && ($today >= $dateBascule)) {
  310.                 if ($today < new \DateTime($currentYear '-09-01')) {
  311.                     $congeAnnuel $this->doctrine
  312.                         ->getRepository(CongeDroitAnnuel::class)
  313.                         ->findBy([
  314.                             'utilisateur' => $utilisateur,
  315.                             'annee' => $year 1,
  316.                             'archive' => false,
  317.                             'congeType' => [1234]
  318.                         ], ['congeType' => 'ASC']);
  319.                     $congeCet $this->doctrine
  320.                         ->getRepository(CongeDroitAnnuel::class)
  321.                         ->findBy([
  322.                             'utilisateur' => $utilisateur,
  323.                             'annee' => $year 1,
  324.                             'archive' => false,
  325.                             'congeType' => 5
  326.                         ], ['congeType' => 'ASC']);
  327.                     $congeAnnuel array_merge($congeAnnuel$congeCet);
  328.                 } else {
  329.                     $year $year;
  330.                     $congeAnnuel $this->doctrine
  331.                         ->getRepository(CongeDroitAnnuel::class)
  332.                         ->findBy([
  333.                             'utilisateur' => $utilisateur,
  334.                             'annee' => $year,
  335.                             'archive' => false
  336.                         ], ['congeType' => 'ASC']);
  337.                 }
  338.             } else {
  339.                 $congeAnnuel $this->doctrine
  340.                     ->getRepository(CongeDroitAnnuel::class)
  341.                     ->findBy([
  342.                         'utilisateur' => $utilisateur,
  343.                         'annee' => $year,
  344.                         'archive' => false
  345.                     ], ['congeType' => 'ASC']);
  346.             }
  347.         } else {
  348.             $congeAnnuel $this->doctrine
  349.                 ->getRepository(CongeDroitAnnuel::class)
  350.                 ->findBy([
  351.                     'utilisateur' => $utilisateur,
  352.                     'annee' => $year,
  353.                     'archive' => false
  354.                 ], ['congeType' => 'ASC']);
  355.         }
  356.         return new JsonResponse(
  357.             $this->serialize($congeAnnuel),
  358.             JsonResponse::HTTP_OK,
  359.             [],
  360.             true
  361.         );
  362.     }
  363.     /**
  364.      * @return JsonResponse
  365.      */
  366.     #[Route(path'/api/conges-droits-annees/{id}'name'ctsweb_conges-annuel-annees'methods: ['GET'], requirements: ['id' => '\d+'])]
  367.     public function getAnnees(
  368.         int $id
  369.     ) {
  370.         $entityManager $this->doctrine->getManager();
  371.         $congesDroitsAnnees $entityManager
  372.             ->getRepository(CongeDroitAnnuel::class)
  373.             ->findAndOrderBy($id);
  374.         $utilisateurInformation $entityManager
  375.             ->getRepository(UtilisateurInformation::class)
  376.             ->findOneBy(["idUtilisateur" => $id]);
  377.         $affectation $utilisateurInformation->getIdAffectation();
  378.         $refcalendrier =  $entityManager
  379.             ->getRepository(RefAffectationCalendrier::class)
  380.             ->findAllByRefAffectation($affectation->getIdAffectation());
  381.         $getRefCalendrier =  $entityManager
  382.             ->getRepository(RefAffectationCalendrier::class)
  383.             ->getRefCalendrier($affectation->getIdAffectation());
  384.         $congeScolaireAffectation $getRefCalendrier['calendrierScolaire'];
  385.         $dateBascule  $getRefCalendrier['dateBascule'];
  386.         $today = new \DateTime();
  387.         $today $today->format('Y-m-d');
  388.         $congesDroitsAnnees $this->manageYears(
  389.             $id,
  390.             $congeScolaireAffectation,
  391.             $dateBascule,
  392.             $today,
  393.             $congesDroitsAnnees,
  394.             $refcalendrier
  395.         );
  396.         return new JsonResponse(
  397.             $this->serialize($congesDroitsAnnees),
  398.             JsonResponse::HTTP_OK,
  399.             [],
  400.             true
  401.         );
  402.     }
  403.     public  function createYearLabels($records$id)
  404.     {
  405.         // Récupérer toutes les dates de bascule dans un tableau
  406.         $basculeDates array_column($records'date_bascule');
  407.         // Trier les dates de bascule par ordre croissant
  408.         sort($basculeDates);
  409.         // Obtenir l'année actuelle
  410.         $currentYear $this->anneeMax($basculeDates);
  411.         $currentYears date('Y');
  412.         $aujourdhui = new \DateTime();
  413.         $currentDay $aujourdhui->format('Y-m-d');
  414.         // Créer un tableau pour stocker les libellés
  415.         $yearLabels = array();
  416.         if (empty($currentYear)) {
  417.             for ($year 2021$year <= $currentYears$year++) {
  418.                 $archive = ($year == 2021) ? 0;
  419.                 $type_calendrier 'c';
  420.                 $yearLabels[] = array('libelle' => $year'annee' => $year'archive' => $archive'url' => "api/conges-droits-annees-export/" $id "/" $year "/" $type_calendrier "/" $archive'type_calendrier' => $type_calendrier'year_url' => $year);
  421.             }
  422.         } else {    
  423.               // Vérifier si l'année 2021 doit être incluse
  424.             for ($year 2021$year <=  $currentYears$year++) {
  425.                 $archive = ($year == 2021) ? 0;
  426.                 if (in_array($year '-01-01'$basculeDates) || $year == 2021) {
  427.                     $type_calendrier 'c';
  428.                     $yearLabels[] = array('libelle' => $year'annee' => $year'archive' => $archive'url' => "api/conges-droits-annees-export/" $id "/" $year "/" $type_calendrier "/" $archive'type_calendrier' => $type_calendrier'year_url' => $year);
  429.                 } else {
  430.                     $label $year;
  431.                     $nextYear $year 1;
  432.                     $prevYear $year 1;
  433.                     if (in_array($year '-09-01'$basculeDates)) {
  434.                         $type_calendrier 'c';
  435.                         $yearLabels[] = array('libelle' => $label'annee' => $year'archive' => $archive'url' => "api/conges-droits-annees-export/" $id "/" $prevYear "/" $type_calendrier "/" $archive'type_calendrier' => $type_calendrier'year_url' => $prevYear);
  436.                         $label .= '/' $nextYear;
  437.                         // }
  438.                         $type_calendrier 's';
  439.                         $yearLabels[] = array('libelle' => $label'annee' => $year'archive' => $archive'url' => "api/conges-droits-annees-export/" $id "/" $year "/" $type_calendrier "/" $archive'type_calendrier' => $type_calendrier'year_url' => $year);
  440.                     }
  441.                     elseif(($currentDay $year '-09-01')){
  442.                         $label .= '/' $nextYear;
  443.                         $type_calendrier 's';
  444.                         $yearLabels[] = array('libelle' => $label'annee' => $year'archive' => $archive'url' => "api/conges-droits-annees-export/" $id "/" $year "/" $type_calendrier "/" $archive'type_calendrier' => $type_calendrier'year_url' => $year);
  445.          
  446.                     }
  447.                   
  448.                 }
  449.             }
  450.         }
  451.         if (!empty($basculeDates)) {
  452.             $maxDate max($basculeDates);
  453.             $currentYear $this->anneeMax($maxDate);
  454.             if ($aujourdhui >= new \DateTime('first day of September') && ($this->isSeptemberFirst($maxDate))) {
  455.                 for ($year =  $currentYear 1$year <=  date('Y'); $year++) {
  456.                     $archive = ($year == 2021) ? 0;
  457.                     $label $year;
  458.                     $nextYear $year 1;
  459.                     $type_calendrier 's';
  460.                     $label .= '/' $nextYear;
  461.                     $yearLabels[] = array('libelle' => $label'annee' => $year'archive' => $archive'url' => "api/conges-droits-annees-export/" $id "/" $year "/" $type_calendrier "/" $archive'type_calendrier' => $type_calendrier'year_url' => $year);
  462.                 }
  463.             }
  464.             // else {
  465.             //     $archive = ($year == 2021) ? 1 : 0;
  466.             //     for ($year =  $currentYear; $year <=  date('Y'); $year++) {
  467.             //         $label = $year;
  468.             //         $type_calendrier = 'c';
  469.             //         $yearLabels[] = array('libelle' => $label, 'annee' => $year, 'archive' => $archive, 'url' => "api/conges-droits-annees-export/" . $id . "/" . $year . "/" . $type_calendrier . "/" . $archive,'type_calendrier'=>$type_calendrier);
  470.             //     }
  471.             // }
  472.         }
  473.         return $yearLabels;
  474.     }
  475.     function isSeptemberFirst($date)
  476.     {
  477.         $dateToCheck '09-01';
  478.         $formattedDate date('m-d'strtotime($date));
  479.         return ($formattedDate === $dateToCheck);
  480.     }
  481.     public  function anneeMax($dates)
  482.     {
  483.         $maxYear null;
  484.         foreach ((array) $dates as $date) {
  485.             $year intval(substr($date04));
  486.             if ($maxYear === null || $year $maxYear) {
  487.                 $maxYear $year;
  488.             }
  489.         }
  490.         return $maxYear;
  491.     }
  492.     public function manageYears(
  493.         $id,
  494.         $congeScolaire,
  495.         $dateBascule,
  496.         $today,
  497.         $congesDroitsAnnees,
  498.         $refcalendrier
  499.     ) {
  500.         $todays = new \DateTime();
  501.         $currentYear $todays->format('Y');
  502.         $delete false;
  503.         foreach ($congesDroitsAnnees as $key => $congesDroitsAnnee) {
  504.             if ($today $currentYear '-09-01'  && (true == $congeScolaire) &&  $congesDroitsAnnee['annee'] == $currentYear) {
  505.                 unset($congesDroitsAnnees[$key]);
  506.             }
  507.             if ($congesDroitsAnnee['annee'] == 2021 && (false == $congeScolaire)) {
  508.                 if ($delete) {
  509.                     unset($congesDroitsAnnees[$key]);
  510.                 }
  511.                 $delete true;
  512.             }
  513.         }
  514.         return $this->createYearLabels($refcalendrier$id);
  515.     }
  516.     #[Route(path'/api/conges-droits-annees-affectation/{idAff}'name'ctsweb_conges-annuel-annees-affectation'methods: ['GET'], requirements: ['id' => '\d+'])]
  517.     public function getAnneesAffectation(
  518.         int $idAff
  519.     ) {
  520.         $entityManager $this->doctrine->getManager();
  521.         if ($idAff != 1) {
  522.             $usersByAffectation $entityManager
  523.                 ->getRepository(UtilisateurInformation::class)
  524.                 ->findBy(["idAffectation" => $idAff]);
  525.         } else {
  526.             $usersByAffectation $entityManager
  527.                 ->getRepository(UtilisateurInformation::class)
  528.                 ->findAll();
  529.         }
  530.         $i 0;
  531.         $output = [];
  532.         $affectation $entityManager
  533.             ->getRepository(RefAffectation::class)
  534.             ->findOneBy(["idAffectation" => 1]);
  535.         foreach ($usersByAffectation as $userByAffectation) {
  536.             $id $userByAffectation->getIdUtilisateur();
  537.             $congesDroitsAnnees $entityManager
  538.                 ->getRepository(CongeDroitAnnuel::class)
  539.                 ->findAndOrderBy($id);
  540.             $utilisateurInformation $entityManager
  541.                 ->getRepository(UtilisateurInformation::class)
  542.                 ->findOneBy(["idUtilisateur" => $id]);
  543.             /** Fix Err 500 prod sur $utilisateurInformation null bouton syntheses archivées**/
  544.             if (null !== $utilisateurInformation) {
  545.                 if (null != $utilisateurInformation->getIdAffectation()) {
  546.                     $affectation $utilisateurInformation->getIdAffectation();
  547.                 }
  548.             }
  549.             $refcalendrier =  $entityManager
  550.                 ->getRepository(RefAffectationCalendrier::class)
  551.                 ->findAllByRefAffectation($affectation->getIdAffectation());
  552.             $tableaubascule $entityManager
  553.                 ->getRepository(RefAffectationCalendrier::class)
  554.                 ->getClosestDates($refcalendrier);
  555.             if (isset($tableaubascule) &&  !empty($tableaubascule)) {
  556.                 $congeScolaire  $tableaubascule[0]['calendrier_scolaire'];
  557.                 $dateBascule $tableaubascule[0]['date_bascule'];
  558.             } else {
  559.                 $congeScolaire  false;
  560.                 $dateBascule null;
  561.             }
  562.             $today = new \DateTime();
  563.             $today $today->format('Y-m-d');
  564.             $congesDroitsAnneesAffectation[$i] = $this->manageYears(
  565.                 $id,
  566.                 $congeScolaire,
  567.                 $dateBascule,
  568.                 $today,
  569.                 $congesDroitsAnnees,
  570.                 $refcalendrier
  571.             );
  572.             foreach ($congesDroitsAnneesAffectation[$i] as $congesDroitsAnneesAffectationArr) {
  573.                 unset($congesDroitsAnneesAffectationArr["url"]);
  574.                 $congesDroitsAnneesAffectation["id_user"] = $id;
  575.                 $congesDroitsAnneesAffectation[$i][] = $congesDroitsAnneesAffectationArr;
  576.                 $output[] = $congesDroitsAnneesAffectationArr;
  577.             }
  578.             $i++;
  579.         }
  580.         $output array_unique($outputSORT_REGULAR);
  581.         if ($idAff != 1) {
  582.             $valsort array_column($output'libelle');
  583.             foreach ($output as $key => $congesDroitsAnneesAffectationItem) {
  584.                 if (!empty($congesDroitsAnneesAffectationItem)) {
  585.                     $archive = ($congesDroitsAnneesAffectationItem['archive']) ? 0;
  586.                     $congesDroitsAnneesAffectationItem['url'] = "api/export/conges/" $idAff "/" $congesDroitsAnneesAffectationItem['year_url'] . "/" $congesDroitsAnneesAffectationItem['type_calendrier'] . "/" $archive;
  587.                     $output[$key] = $congesDroitsAnneesAffectationItem;
  588.                 } else {
  589.                     unset($output[$key]);
  590.                 }
  591.             }
  592.             array_multisort($valsortSORT_ASC$output);
  593.         } else {
  594.             $valsort array_column($output'annee');
  595.             foreach ($output as $key => $congesDroitsAnneesAffectationItem) {
  596.                 if (!empty($congesDroitsAnneesAffectationItem)) {
  597.                     $congesDroitsAnneesAffectationItem["archive"] = 2;
  598.                     $congesDroitsAnneesAffectationItem["type_calendrier"] = "all";
  599.                     $congesDroitsAnneesAffectationItem["libelle"] = $congesDroitsAnneesAffectationItem["annee"];
  600.                     $congesDroitsAnneesAffectationItem['url'] = "api/export/conges/" $idAff "/" $congesDroitsAnneesAffectationItem['year_url'] . "/" $congesDroitsAnneesAffectationItem['type_calendrier'] . "/" $congesDroitsAnneesAffectationItem["archive"];
  601.                     $output[$key] = $congesDroitsAnneesAffectationItem;
  602.                 } else {
  603.                     unset($output[$key]);
  604.                 }
  605.             }
  606.             array_multisort($valsortSORT_ASC$output);
  607.             $output $this->getTableauParAnneeSansDoublon($output);
  608.         }
  609.         $output array_unique($outputSORT_REGULAR);
  610.         $return = [];
  611.         foreach ($output as $key => $value) {
  612.             $return[] = $value;
  613.         }
  614.         return new JsonResponse(
  615.             $this->serialize($return),
  616.             JsonResponse::HTTP_OK,
  617.             [],
  618.             true
  619.         );
  620.     }
  621.     public function getTableauParAnneeSansDoublon($tableau)
  622.     {
  623.         $result = array();
  624.         $anneesTraitees = array();
  625.         foreach ($tableau as $element) {
  626.             $annee $element['url'];
  627.             if (!in_array($annee$anneesTraitees)) {
  628.                 $result[] = $element;
  629.                 $anneesTraitees[] = $annee;
  630.             }
  631.         }
  632.         return $result;
  633.     }
  634.     /**
  635.      * @return JsonResponse
  636.      */
  637.     #[Route(path'/api/conges-droits-saisie-annee/{id}/{n}'name'ctsweb_conges-saisie-annees'methods: ['GET'], requirements: ['id' => '\d+'])]
  638.     public function getAnneeSaisie(
  639.         int $id,
  640.         int $n
  641.     ) {
  642.         $congesDroitsAnnees = [];
  643.         $entityManager $this->doctrine->getManager();
  644.         $utilisateurInformation $entityManager
  645.             ->getRepository(UtilisateurInformation::class)
  646.             ->findOneBy(["idUtilisateur" => $id]);
  647.         $affectation $utilisateurInformation->getIdAffectation();
  648.         // $congeScolaire = $affectation->getCalendrierScolaire();
  649.         // $dateBascule = $affectation->getDateBascule();
  650.         // if (null !== $dateBascule) {
  651.         //     $dateBascule = $dateBascule->format('Y-m-d');
  652.         // }
  653.         $Idaffectation $utilisateurInformation->getIdAffectation()->getIdAffectation();
  654.         $today = new \DateTime();
  655.         $currentYear $today->format('Y');
  656.         $getRefCalendrier =  $entityManager
  657.             ->getRepository(RefAffectationCalendrier::class)
  658.             ->getRefCalendrier($Idaffectation);
  659.         $congeScolaire $getRefCalendrier['calendrierAffectation'];
  660.         $dateBascule $getRefCalendrier['dateBascule'];
  661.         if ($n == 0) {
  662.             $year $currentYear 1;
  663.             $currentDay $today;
  664.         } else {
  665.             $year $currentYear;
  666.             $currentDay $today;
  667.         }
  668.         $currentDay $currentDay->format('Y-m-d');
  669.         $nextYear $year 1;
  670.         $lastYear $year 1;
  671.         if ((true == $congeScolaire) && (null != $dateBascule) && ($currentDay >= $dateBascule)) {
  672.             if ($n == 1) {
  673.                 $date = new \DateTime('first day of September');
  674.                 if ($currentDay $date->format('Y-m-d')) {
  675.                     $congesDroitsAnnees['libelle'] =  $lastYear "/" .  $year;
  676.                 } else {
  677.                     $congesDroitsAnnees['libelle'] =  $year  "/" .  $nextYear;
  678.                 }
  679.             } else {
  680.                 $dateB = new \DateTime('first day of September');
  681.                 $formattedDate $dateB->format('Y-m-d');
  682.                 if ($dateBascule $formattedDate &&  ($currentDay $dateB->format('Y-m-d')) ){
  683.                     $congesDroitsAnnees['libelle'] =  $year  "/" .  $nextYear;
  684.                 }
  685.                 elseif($currentDay $dateB->format('Y-m-d')){
  686.                         $congesDroitsAnnees['libelle'] = $lastYear "/" .  $year;
  687.                 } else {
  688.                     $congesDroitsAnnees['libelle'] = strval($year);
  689.                    
  690.                 }
  691.             }
  692.             $congesDroitsAnnees['id'] = $id;
  693.         } elseif ((true == $congeScolaire) && (null != $dateBascule) && ($currentDay $dateBascule)) {
  694.             $congesDroitsAnnees['libelle'] = strval($year);
  695.         } elseif ((false == $congeScolaire) && (null != $dateBascule) && ($currentDay <= $dateBascule)) {
  696.             $congesDroitsAnnees['libelle'] =   $lastYear "/" $year;
  697.         } else {
  698.             $congesDroitsAnnees['libelle'] = strval($year);
  699.         }
  700.         $congesDroitsAnnees['id'] = $id;
  701.         return new JsonResponse(
  702.             $this->serialize($congesDroitsAnnees),
  703.             JsonResponse::HTTP_OK,
  704.             [],
  705.             true
  706.         );
  707.     }
  708.     /**
  709.      * @return JsonResponse
  710.      */
  711.     #[Route(path'/api/conges-annuel/recapitulatif/{conge}'name'ctsweb_manager_recap_conges-annuel'methods: ['GET'], requirements: ['conge' => '\d+'])]
  712.     public function managerRecap(Conge $conge)
  713.     {
  714.         $entityManager $this->doctrine->getManager();
  715.         $utilisateur $conge->getUtilisateur();
  716.         $utilisateurInformation $entityManager
  717.             ->getRepository(UtilisateurInformation::class)
  718.             ->findOneBy(["idUtilisateur" => $utilisateur]);
  719.         $Idaffectation $utilisateurInformation->getIdAffectation()->getIdAffectation();
  720.         $affectation $entityManager
  721.             ->getRepository(RefAffectation::class)
  722.             ->findOneBy(["idAffectation" => $Idaffectation]);
  723.         // $congeScolaire = $affectation->getCalendrierScolaire();
  724.         $getRefCalendrier =  $entityManager
  725.             ->getRepository(RefAffectationCalendrier::class)
  726.             ->getRefCalendrier($Idaffectation);
  727.         $congeScolaire  $getRefCalendrier['calendrierScolaire'];
  728.         $recapitulatif $entityManager
  729.             ->getRepository(Conge::class)
  730.             ->getRecapitulatif($conge$congeScolaire);
  731. // var_dump($recapitulatif);
  732.         $managerRecap $this->manage($recapitulatif);
  733.         // var_dump($managerRecap);
  734.         // die();
  735.         return new JsonResponse(
  736.             $this->serialize($managerRecap),
  737.             JsonResponse::HTTP_OK,
  738.             [],
  739.             true
  740.         );
  741.     }
  742.     /**
  743.      * 
  744.      * @return JsonResponse
  745.      */
  746.     public function majDaysOffAction()
  747.     {
  748.         $entityManager $this->doctrine->getManager();
  749.         $listAffectations $entityManager->getRepository(RefAffectation::class)->findAll();
  750.         $array = [];
  751.         foreach ($listAffectations as $affectation) {
  752.             $today = new \DateTime('now');
  753.             $year $today->format('Y');
  754.             $today $today->format('Y-m-d');
  755.             if (null != $affectation->getDateBascule()) {
  756.                 $date_format $affectation->getDateBascule()->format('Y-m-d');
  757.             } else {
  758.                 $date_format $affectation->getDateBascule();
  759.             }
  760.             $array[] = $date_format " - " $today;
  761.             if ($today == $date_format) {
  762.                 $listCTSByAffectation $entityManager->getRepository(UtilisateurInformation::class)->findBy(
  763.                     ['idAffectation' => $affectation->getIdAffectation()]
  764.                 );
  765.                 foreach ($listCTSByAffectation as $CTSByAffectation) {
  766.                     $entityManager->getRepository(CongeDroitAnnuel::class)->resetByAffectation(
  767.                         $CTSByAffectation->getIdAffectation(),
  768.                         $year,
  769.                         [1234]
  770.                     );
  771.                 }
  772.             }
  773.         }
  774.         return new JsonResponse(
  775.             $this->serialize([$array]),
  776.             JsonResponse::HTTP_OK,
  777.             [],
  778.             true
  779.         );
  780.     }
  781.     /**
  782.      * 
  783.      * @return JsonResponse
  784.      */
  785.     public function majDaysOff2Action()
  786.     {
  787.         $entityManager $this->doctrine->getManager();
  788.         $listAffectations $entityManager->getRepository(RefAffectation::class)->findAll();
  789.         $array = [];
  790.         foreach ($listAffectations as $affectation) {
  791.             $today = new \DateTime('now');
  792.             $year $today->format('Y');
  793.             $today $today->format('Y-m-d');
  794.             if (null != $affectation->getDateBascule()) {
  795.                 $date_format $affectation->getDateBascule()->format('Y-m-d');
  796.             } else {
  797.                 $date_format $affectation->getDateBascule();
  798.             }
  799.             $array[] = $date_format " - " $today;
  800.             if ($today == $date_format) {
  801.                 $array[] = "Coucou";
  802.                 $listCTSByAffectation $entityManager->getRepository(UtilisateurInformation::class)->findBy(
  803.                     ['idAffectation' => $affectation->getIdAffectation()]
  804.                 );
  805.                 foreach ($listCTSByAffectation as $CTSByAffectation) {
  806.                     $entityManager->getRepository(CongeDroitAnnuel::class)->resetByAffectation2(
  807.                         $CTSByAffectation->getIdAffectation(),
  808.                         $year,
  809.                         [1234]
  810.                     );
  811.                 }
  812.             }
  813.         }
  814.         return new JsonResponse(
  815.             $this->serialize([$array]),
  816.             JsonResponse::HTTP_OK,
  817.             [],
  818.             true
  819.         );
  820.     }
  821.     /**
  822.      * @param string $validatonGroup
  823.      * @return \Symfony\Component\Form\FormInterface
  824.      */
  825.     private function handleRequest(
  826.         Request $request,
  827.         CongeDroitAnnuel $congeDroitAnnuel,
  828.         string $label
  829.     ) {
  830.         $data json_decode($request->getContent(), true512JSON_THROW_ON_ERROR);
  831.         $request->request->replace(is_array($data) ? $data : []);
  832.         $form $this->createForm(
  833.             CongeDroitAnnuelType::class,
  834.             $congeDroitAnnuel,
  835.             [
  836.                 'label' => $label
  837.             ]
  838.         );
  839.         $form->handleRequest($request);
  840.         return $form;
  841.     }
  842.     /**
  843.      * @param array $states
  844.      * @return mixed
  845.      */
  846.     private function serialize($item)
  847.     {
  848.         $data = ["items" => $item];
  849.         $context = new SerializationContext();
  850.         $context->setSerializeNull(true);
  851.         return $this->serializer->serialize($data'json'$context);
  852.     }
  853.     private function setTotal(
  854.         Utilisateur $utilisateur,
  855.         CongeType $congeType,
  856.         int $year,
  857.         $date_conge_actuel,
  858.         bool $calendrierScolaire
  859.     ) {
  860.         $byUserAndTypeAndStatus $this->doctrine
  861.             ->getRepository(Conge::class)
  862.             ->findDayOffByTypeAndSatatusAndUser(
  863.                 $utilisateur,
  864.                 $congeType,
  865.                 [Workflow::CO_ACCEPTEDWorkflow::CO_SIGN],
  866.                 $date_conge_actuel,
  867.                 $year,
  868.                 $calendrierScolaire
  869.             );
  870.         $congeAnnuelByType $this
  871.             ->doctrine
  872.             ->getRepository(CongeDroitAnnuel::class)
  873.             ->findOneBy([
  874.                 'utilisateur' => $utilisateur,
  875.                 'annee' => $year,
  876.                 'congeType' => $congeType
  877.             ]);
  878.         if ($congeType->getCode() == 'RTT') {
  879.             $nbJourTotal = ($congeAnnuelByType)
  880.                 ? (float) $congeAnnuelByType->getNbJourTotal()
  881.                 : 0;
  882.             $total $nbJourTotal $byUserAndTypeAndStatus;
  883.             $congeType->setNbJourTotal($nbJourTotal);
  884.             $congeType->setSolde($total);
  885.         } else {
  886.             if ($calendrierScolaire) {
  887.                 $byUserAndTypeAndStatusLastYear $this->doctrine
  888.                     ->getRepository(Conge::class)
  889.                     ->findDayOffByTypeAndSatatusAndUser(
  890.                         $utilisateur,
  891.                         $congeType,
  892.                         [Workflow::CO_ACCEPTEDWorkflow::CO_SIGN],
  893.                         $date_conge_actuel,
  894.                         $year,
  895.                         $calendrierScolaire
  896.                     );
  897.             } else {
  898.                 $byUserAndTypeAndStatusLastYear 0;
  899.             }
  900.             $congeAnnuelByTypeLastYear $this
  901.                 ->doctrine
  902.                 ->getRepository(CongeDroitAnnuel::class)
  903.                 ->findOneBy([
  904.                     'utilisateur' => $utilisateur,
  905.                     'annee' => $year 1,
  906.                     'congeType' => $congeType
  907.                 ]);
  908.             $ReportcongeAnnuel $this
  909.                 ->doctrine
  910.                 ->getRepository(CongeDroitAnnuel::class)
  911.                 ->findOneBy([
  912.                     'utilisateur' => $utilisateur,
  913.                     'annee' => $year 1,
  914.                     'congeType' => 4
  915.                 ]);
  916.             $nbJourReportY = ($ReportcongeAnnuel)
  917.                 ? (float) $ReportcongeAnnuel->getNbJourTotal()
  918.                 : 0;
  919.             $nbJourTotalY = ($congeAnnuelByType)
  920.                 ? (float) $congeAnnuelByType->getNbJourTotal()
  921.                 : 0;
  922.             $nbJourTotalLastY = ($congeAnnuelByTypeLastYear)
  923.                 ? (float) $congeAnnuelByTypeLastYear->getNbJourTotal()
  924.                 : 0;
  925.             $nbJourTotalFracY = ($congeAnnuelByType)
  926.                 ? (float) $congeAnnuelByType->getNbJourFractionnement()
  927.                 : 0;
  928.             $nbJourTotalLastYFrac = ($congeAnnuelByTypeLastYear)
  929.                 ? (float) $congeAnnuelByTypeLastYear->getNbJourFractionnement()
  930.                 : 0;
  931.             $nbJourTotal $nbJourTotalY $nbJourTotalFracY $nbJourReportY;
  932.             $total = ($calendrierScolaire) ? $nbJourTotal $byUserAndTypeAndStatus $nbJourTotal $byUserAndTypeAndStatus $byUserAndTypeAndStatusLastYear;
  933.             $congeType->setNbJourTotal($nbJourTotal);
  934.             $congeType->setSolde($total);
  935.         }
  936.         return $congeType;
  937.     }
  938.     /**
  939.      * @return array
  940.      */
  941.     private function manage(array $recapitulatif)
  942.     {
  943.         $soldeAfterLastYear null;
  944.         $soldeAfterCan null;
  945.         $soldeAfterCet null;
  946.         $soldeAfterRtt null;
  947.         $soldeAfterRaa null;
  948.         $soldeAfterFractionnement null;
  949.         $soldeBeforeRtt $recapitulatif['totalRtt'] - $recapitulatif['givenRtt'];
  950.         $soldeBeforeCet $recapitulatif['totalCet'] - $recapitulatif['givenCet'];
  951.         $soldeBeforeCan $recapitulatif['totalCan'] - $recapitulatif['givenCa'];
  952.         $soldeBeforeRaa $recapitulatif['totalReport']- $recapitulatif['givenRaa'];
  953.         //   $soldeLastYear = $recapitulatif['totalReport'];
  954.         $soldeLastYear 0;
  955.         $total =
  956.             // $soldeLastYear +
  957.             $recapitulatif['totalCan'] +
  958.             $recapitulatif['totalFrac'];
  959.         $totalBefore =
  960.             // $soldeLastYear +
  961.             $soldeBeforeCan +
  962.             $recapitulatif['totalFrac'];
  963.         if (CongeType::CAN === $recapitulatif['code']) {
  964.             $soldeAfterRtt $soldeBeforeRtt;
  965.             $soldeAfterCet $soldeBeforeCet;
  966.             $soldeAfterRaa $soldeBeforeRaa;
  967.             if ($soldeLastYear <= && $recapitulatif['totalFrac'] <= 0) {
  968.                 $soldeAfterLastYear $soldeLastYear;
  969.                 $soldeAfterFractionnement $recapitulatif['totalFrac'];
  970.                 $soldeAfterCan $soldeBeforeCan $recapitulatif['nbJour'];
  971.             } else if ($soldeLastYear >= $recapitulatif['nbJour']) {
  972.                 $soldeAfterLastYear $soldeLastYear $recapitulatif['nbJour'];
  973.                 $soldeAfterFractionnement $recapitulatif['totalFrac'];
  974.                 $soldeAfterCan $soldeBeforeCan;
  975.             } else if ($soldeLastYear $recapitulatif['nbJour']) {
  976.                 $soldeAfterLastYear 0;
  977.                 $leave $recapitulatif['nbJour'] - $soldeLastYear;
  978.                 if ($recapitulatif['totalFrac'] >= $leave) {
  979.                     $soldeAfterFractionnement $recapitulatif['totalFrac'] - $leave;
  980.                     $soldeAfterCan $soldeBeforeCan;
  981.                 } else {
  982.                     $soldeAfterFractionnement 0;
  983.                     $soldeAfterCan $soldeBeforeCan - ($leave $recapitulatif['totalFrac']);
  984.                 }
  985.             }
  986.         } elseif (CongeType::RTT === $recapitulatif['code']) {
  987.             $soldeAfterLastYear $soldeLastYear;
  988.             $soldeAfterRtt $soldeBeforeRtt $recapitulatif['nbJour'];
  989.             $soldeAfterFractionnement $recapitulatif['totalFrac'];
  990.             $soldeAfterCan $soldeBeforeCan;
  991.             $soldeAfterCet $soldeBeforeCet;
  992.             $soldeAfterRaa $soldeBeforeRaa;
  993.         } elseif (CongeType::CET === $recapitulatif['code']) {
  994.             $soldeAfterLastYear $soldeLastYear;
  995.             $soldeAfterCet $soldeBeforeCet $recapitulatif['nbJour'];
  996.             $soldeAfterFractionnement $recapitulatif['totalFrac'];
  997.             $soldeAfterCan $soldeBeforeCan;
  998.             $soldeAfterRtt $soldeBeforeRtt;
  999.             $soldeAfterRaa $soldeBeforeRaa;
  1000.             
  1001.         } elseif (CongeType::RAA === $recapitulatif['code']) {
  1002.             $soldeAfterLastYear $soldeLastYear;
  1003.             $soldeAfterRaa $soldeBeforeRaa $recapitulatif['nbJour'];
  1004.             $soldeAfterFractionnement $recapitulatif['totalFrac'];
  1005.             $soldeAfterCan $soldeBeforeCan;
  1006.             $soldeAfterRtt $soldeBeforeRtt;
  1007.             $soldeAfterCet $soldeBeforeCet;
  1008.         } else {
  1009.             $soldeAfterLastYear $soldeLastYear;
  1010.             $soldeAfterRtt $soldeBeforeRtt;
  1011.             $soldeAfterFractionnement $recapitulatif['totalFrac'];
  1012.             $soldeAfterCan $soldeBeforeCan;
  1013.             $soldeAfterRaa $soldeBeforeRaa;
  1014.             $soldeAfterCet $soldeBeforeCet;
  1015.         }
  1016.         // $totalAfter = /*$soldeAfterRtt +*/ $soldeAfterLastYear + $soldeAfterCan + $soldeAfterFractionnement;
  1017.         $totalAfter /*$soldeAfterRtt + $soldeAfterLastYear + */ $soldeAfterCan $soldeAfterFractionnement $recapitulatif['givenRAANextYear'];
  1018.         return
  1019.             [
  1020.                 [
  1021.                     'libelle' => 'RTT',
  1022.                     'annuel' => (float) $recapitulatif['totalRtt'],
  1023.                     'before' => $soldeBeforeRtt,
  1024.                     'after' => $soldeAfterRtt
  1025.                 ],
  1026.                 [
  1027.                     'libelle' => 'CET',
  1028.                     'annuel' => (float) $recapitulatif['totalCet'],
  1029.                     'before' => $soldeBeforeCet,
  1030.                     'after' => $soldeAfterCet,
  1031.                 ],
  1032.                 [
  1033.                     'libelle' => 'Report année antérieure',
  1034.                     'annuel' => (float) $recapitulatif['totalReport'],
  1035.                     'before' => $soldeBeforeRaa,
  1036.                     //'after' => $soldeBeforeRaa,
  1037.                     'after' => $soldeAfterRaa
  1038.                 ],
  1039.                 [
  1040.                     'libelle' => 'Année en cours',
  1041.                     'annuel' => (float) $recapitulatif['totalCan'],
  1042.                     'before' => null,
  1043.                     'after' => null
  1044.                 ],
  1045.                 [
  1046.                     'libelle' => 'Jours de fractionnement*',
  1047.                     'annuel' => (float) $recapitulatif['totalFrac'],
  1048.                     'before' => null,
  1049.                     'after' => null
  1050.                 ],
  1051.                 [
  1052.                     'libelle' => 'Total congés annuels',
  1053.                     'annuel' => (float) $total,
  1054.                     'before' => (float) $totalBefore,
  1055.                     'after' => (float) $totalAfter
  1056.                 ],
  1057.                 isset($recapitulatif['calendrier_scolaire']) ? ["calendrier_scolaire" => $recapitulatif['calendrier_scolaire']] : []
  1058.             ];
  1059.     }
  1060.     /**
  1061.      * @return object
  1062.      */
  1063.     private function getServiceAccessRule()
  1064.     {
  1065.         return $this->accessRule;
  1066.     }
  1067. }