src/Service/CumulMensuelService.php line 94

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\CumulMensuel;
  4. use App\Entity\Personnel;
  5. use App\Entity\Typedeprime;
  6. use App\Repository\CumulMensuelRepository;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. class CumulMensuelService
  9. {
  10.     private EntityManagerInterface $em;
  11.     private CumulMensuelRepository $cumulRepo;
  12.     public function __construct(EntityManagerInterface $emCumulMensuelRepository $cumulRepo)
  13.     {
  14.         $this->em $em;
  15.         $this->cumulRepo $cumulRepo;
  16.     }
  17.     public function cumulerHeuresEtAvance(Personnel $personnelfloat $nbHeurefloat $avance 0.0): void
  18.     {
  19.         $mois = (new \DateTimeImmutable('first day of this month'))->setTime(00);
  20.         $cumul $this->cumulRepo->findOneBy([
  21.             'personnel' => $personnel,
  22.             'mois' => $mois,
  23.         ]);
  24.         if (!$cumul) {
  25.             $cumul = new CumulMensuel();
  26.             $cumul->setPersonnel($personnel);
  27.             $cumul->setMois($mois);
  28.             $cumul->setHeuresCumulees('0');
  29.             $cumul->setAvanceCumulee('0');
  30.         }
  31.         $heures floatval($cumul->getHeuresCumulees()) + $nbHeure;
  32.         $avance floatval($cumul->getAvanceCumulee()) + $avance;
  33.         $cumul->setHeuresCumulees((string) $heures);
  34.         $cumul->setAvanceCumulee((string) $avance);
  35.         $this->em->persist($cumul);
  36.         // Le flush se fait dans le contrôleur après toutes les persistance
  37.     }
  38.     // CumulMensuelService.php
  39.     public function cumulerAvanceEtPrime(Personnel $personnelfloat $avance 0.0float $prime  0.0, ?Typedeprime $typePrime null): void {
  40.         $mois = (new \DateTimeImmutable('first day of this month'))->setTime(00);
  41.         $cumul $this->cumulRepo->findOneBy([
  42.             'personnel' => $personnel,
  43.             'mois' => $mois,
  44.         ]);
  45.         if (!$cumul) {
  46.             $cumul = new CumulMensuel();
  47.             $cumul->setPersonnel($personnel)
  48.                 ->setMois($mois)
  49.                 ->setHeuresCumulees('0')
  50.                 ->setAvanceCumulee('0')
  51.                 ->setPrime('0')
  52.                 ->setTypedeprime(null);
  53.         }
  54.         // 1) Cumuler l’avance
  55.         if ($avance 0) {
  56.             $avanceTot floatval($cumul->getAvanceCumulee()) + $avance;
  57. //            $cumul->setAvanceCumulee((string)$avanceTot);
  58.             $cumul->setAvanceCumulee((string)$avance);
  59.         }
  60.         // 2) Cumuler la prime
  61.         if ($prime 0) {
  62.          //   $primeTot = $cumul->getPrime() + $prime;
  63.             $cumul->setPrime((string)$prime);
  64.             // 3) Enregistrer le dernier type de prime
  65.             if ($typePrime !== null) {
  66.                 $cumul->setTypedeprime($typePrime);
  67.             }
  68.         }
  69.         $this->em->persist($cumul);
  70.         // flush() sera effectué dans le contrôleur
  71.     }
  72.     public function cumulerAvanceEtPrimePourMois(Personnel $personnelfloat $avance 0.0float $prime  0.0, ?Typedeprime $typePrime null\DateTimeImmutable $moisDebut): void {
  73.         // si aucun $mois passé, on reprend le mois courant
  74.         if (null === $moisDebut) {
  75.             $moisDebut = (new \DateTimeImmutable('first day of this month'))->setTime(00);
  76.         }
  77.         $cumul $this->cumulRepo->findOneBy([
  78.             'personnel' => $personnel,
  79.             'mois' => $moisDebut,
  80.         ]);
  81.         if (!$cumul) {
  82.             $cumul = new CumulMensuel();
  83.             $cumul->setPersonnel($personnel)
  84.                 ->setMois($moisDebut)
  85.                 ->setHeuresCumulees('0')
  86.                 ->setAvanceCumulee('0')
  87.                 ->setPrime('0')
  88.                 ->setTypedeprime(null);
  89.         }
  90.         // 1) Cumuler l’avance
  91.         if ($avance 0) {
  92.             $avanceTot floatval($cumul->getAvanceCumulee()) + $avance;
  93. //            $cumul->setAvanceCumulee((string)$avanceTot);
  94.             $cumul->setAvanceCumulee((string)$avance);
  95.         }
  96.         // 2) Cumuler la prime
  97.         if ($prime 0) {
  98.             //   $primeTot = $cumul->getPrime() + $prime;
  99.             $cumul->setPrime((string)$prime);
  100.             // 3) Enregistrer le dernier type de prime
  101.             if ($typePrime !== null) {
  102.                 $cumul->setTypedeprime($typePrime);
  103.             }
  104.         }
  105.         $this->em->persist($cumul);
  106.         // flush() sera effectué dans le contrôleur
  107.     }
  108.     /**
  109.      * Met à jour le cumul en soustrayant les anciennes heures et en ajoutant les nouvelles
  110.      */
  111.     public function updateCumulHeures(Personnel $personnelfloat $oldNbHeurefloat $newNbHeure): void
  112.     {
  113.         $mois = (new \DateTimeImmutable('first day of this month'))->setTime(00);
  114.         $cumul $this->cumulRepo->findOneBy([
  115.             'personnel' => $personnel,
  116.             'mois' => $mois,
  117.         ]);
  118.         if ($cumul) {
  119.             // Soustraire les anciennes heures et ajouter les nouvelles
  120.             $currentHeures floatval($cumul->getHeuresCumulees());
  121.             $updatedHeures $currentHeures $oldNbHeure $newNbHeure;
  122.             $cumul->setHeuresCumulees((string) max(0$updatedHeures)); // Éviter les valeurs négatives
  123.             $this->em->persist($cumul);
  124.         } else {
  125.             // Si aucun cumul n'existe, créer un nouveau avec les nouvelles heures
  126.             $this->cumulerHeuresEtAvance($personnel$newNbHeure);
  127.         }
  128.     }
  129. }