src/Controller/Tresorerie/BordereauController.php line 66

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Tresorerie;
  3. use Mpdf\Mpdf;
  4. use App\Entity\Cab;
  5. use App\Entity\Det;
  6. use App\Entity\Periode;
  7. use App\Entity\PStatut;
  8. use App\Entity\PDossier;
  9. use App\Entity\Tbulletin;
  10. use App\Entity\PBordereau;
  11. use App\Entity\NaturePiece;
  12. use App\Entity\CabBordereau;
  13. use App\Entity\UaTechniqueDet;
  14. use App\Controller\ApiController;
  15. use App\Entity\JournalBulletinLg;
  16. use App\Entity\JournalPaieDossier;
  17. use App\Service\CalculPaieService;
  18. use App\Entity\SyntheseRemunarationCab;
  19. use App\Entity\SyntheseRemunarationDet;
  20. use Doctrine\Persistence\ManagerRegistry;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Component\HttpFoundation\JsonResponse;
  25. use Symfony\Component\HttpFoundation\RequestStack;
  26. use Symfony\Contracts\HttpClient\HttpClientInterface;
  27. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  28. #[Route('/tresorerie/bordereau')]
  29. class BordereauController extends AbstractController
  30. {
  31.     private $em;
  32.     private $client;
  33.     private $api;
  34.     private $calculPaieService
  35.     private $requestStack
  36.     public function __construct(ManagerRegistry $doctrineRequestStack $requestStackCalculPaieService $calculPaieServiceApiController $apiHttpClientInterface $client)
  37.     {
  38.         $this->em $doctrine->getManager();
  39.         $this->api $api;
  40.         $this->client $client;
  41.         $this->calculPaieService $calculPaieService;
  42.         $this->requestStack $requestStack;
  43.     }
  44.     #[Route('/'name'app_tresorerie_bordereau')]
  45.     public function index(Request $request): Response
  46.     {
  47.         // dd('amine');
  48.         $operations $this->api->check($this->getUser(), 'app_tresorerie_bordereau'$this->em$request);
  49.         if (!is_array($operations)) {
  50.             return $this->redirectToRoute('app_site');
  51.         } elseif (count($operations) == 0) {
  52.             return $this->render('includes/404.html.twig');
  53.         }
  54.         return $this->render('tresorerie/bordereau/index.html.twig', [
  55.             'operations' => $operations,
  56.             'periode' => $this->calculPaieService->getPeriode()
  57.         ]);
  58.     }
  59.     #[Route('/app_tresorerie_bordereau_list/{periode}'name'app_tresorerie_bordereau_list'options: ['expose' => true])]
  60.     public function app_tresorerie_bordereau_list(Request $request$periode): Response
  61.     {
  62.         $date = new \DateTime($periode);
  63.         $periode $this->calculPaieService->getPeriode($date->format('mY'));
  64.         $draw $request->query->get('draw');
  65.         $start $request->query->get('start') ?? 0;
  66.         $length $request->query->get('length') ?? 10;
  67.         $dossier $request->getSession()->get('dossier');
  68.         $search $request->query->all('search')["value"];
  69.         $orderColumnIndex $request->query->all('order')[0]['column'];
  70.         $orderColumn $request->query->all("columns")[$orderColumnIndex]['name'];
  71.         $orderDir $request->query->all('order')[0]['dir'] ?? 'asc';
  72.         $queryBuilder $this->em->createQueryBuilder()
  73.             ->select('b.id, d.designation as dossier_designation,paiementEntity.designation as paiement, deviseEntity.designation as devise, p.abreviation as periode, b.code, b.created, b.type, natureContract.designation, s.designation as statut , s.icon')
  74.             ->from(PBordereau::class, 'b')
  75.             ->innerJoin('b.statut''s')
  76.             ->innerJoin('b.periode''p')
  77.             ->innerJoin('b.dossier''d')
  78.             ->innerJoin('b.devise''deviseEntity')
  79.             ->innerJoin('b.paiement''paiementEntity')
  80.             ->leftJoin('b.natureContract''natureContract')
  81.             ->where('b.active = 1')
  82.             ->andWhere('b.periode = :periode')
  83.             ->setParameter('periode'$periode);
  84.         if (!empty($search)) {
  85.             $queryBuilder->andWhere('(paiementEntity.designation LIKE :search OR deviseEntity.designation LIKE :search OR b.id LIKE :search OR p.abreviation LIKE :search OR d.designation LIKE :search OR b.code LIKE :search OR b.type LIKE :search OR natureContract.designation LIKE :search OR s.designation LIKE :search)')
  86.                 ->setParameter('search'"%$search%");
  87.         }
  88.         if (!empty($orderColumn)) {
  89.             $queryBuilder->orderBy("$orderColumn"$orderDir);
  90.         }
  91.         if ($dossier->getId() != 47) { // DRH
  92.             $queryBuilder->andWhere('d.id = :dossier')
  93.                 ->setParameter('dossier'$dossier);
  94.         }
  95.         $filteredRecords count($queryBuilder->getQuery()->getResult());
  96.         // Paginate results
  97.         $queryBuilder->setFirstResult($start)
  98.             ->setMaxResults($length)
  99.             ->orderBy('b.id''DESC');
  100.         $results $queryBuilder->getQuery()->getResult();
  101.         foreach ($results as $key => $b) {
  102.             // dd('amine');
  103.             // if($contract['id'] == 1301) {
  104.             //     dd($this->em->getRepository(PArretTravailLg::class)->getNombreJoursArret($contract['id'], $periode));
  105.             // }
  106.             $bordereau $this->em->getRepository(PBordereau::class)->find($b['id']);
  107.             $results[$key]['DT_RowId'] = $b['id'];
  108.             $results[$key]['montant'] =  $this->api->getBordereauPrixTotal($bordereau);
  109.         }
  110.         $totalRecords $this->em->createQueryBuilder()
  111.             ->select('COUNT(b.id)')
  112.             ->from(PBordereau::class, 'b')
  113.             ->innerJoin('b.dossier''d')
  114.             ->where('b.active = 1')
  115.             ->andWhere('b.periode = :periode')
  116.             ->setParameter('periode'$periode);
  117.         if ($dossier->getId() != 47) { // DRH
  118.             $totalRecords->andWhere('d.id = :dossier')
  119.                 ->setParameter('dossier'$dossier);
  120.         }
  121.         $totalRecords $totalRecords->getQuery()
  122.             ->getSingleScalarResult();
  123.         return new JsonResponse([
  124.             'draw' => $draw,
  125.             'recordsTotal' => $totalRecords,
  126.             'recordsFiltered' => $filteredRecords,
  127.             'data' => $results,
  128.         ]);
  129.     }
  130.     #[Route('/app_tresorerie_bordereau_valider'name'app_tresorerie_bordereau_valider'options: ['expose' => true])]
  131.     public function app_tresorerie_bordereau_valider(Request $request): Response
  132.     {
  133.         $bordereauIds json_decode($request->get('bordereauIds'));
  134.         // dd($bordereauIds);
  135.         foreach ($bordereauIds as $key => $bordereauId) {
  136.             $bordereau $this->em->getRepository(PBordereau::class)->find($bordereauId);
  137.             if ($bordereau->getStatut()->getId() == 2) { // pret
  138.                 if ($bordereau->getType() == 'operationregularisation') {
  139.                     $bordereau->setStatut(
  140.                         $this->em->getRepository(PStatut::class)->find(3)
  141.                     );
  142.                 } else {
  143.                     $charges $this->em->getRepository(JournalBulletinLg::class)->getSumMontant($bordereau);
  144.                     if ($charges) {
  145.                         if (number_format($charges['montant'], 2) != 0) {
  146.                             $bordereau->setStatut(
  147.                                 $this->em->getRepository(PStatut::class)->find(5)
  148.                             );
  149.                         } else {
  150.                             $bordereau->setStatut(
  151.                                 $this->em->getRepository(PStatut::class)->find(3)
  152.                             );
  153.                         }
  154.                     }
  155.                 }
  156.             }
  157.         }
  158.         $this->em->flush();
  159.         return new JsonResponse("Bien enregistrer");
  160.     }
  161.     #[Route('/app_tresorerie_bordereau_valider_periode'name'app_tresorerie_bordereau_valider_periode'options: ['expose' => true])]
  162.     public function app_tresorerie_bordereau_valider_periode(Request $request): Response
  163.     {
  164.         $periode $request->get('periode');
  165.         $bordereauxProbeleme $this->em->getRepository(PBordereau::class)->findBy(['periode' => $periode'active' => 1'statut' => $this->em->getRepository(PStatut::class)->find(5)]);
  166.         if(count($bordereauxProbeleme) > 0) {
  167.             return new JsonResponse('Vous aves des bordereaux Ã  probleme !'500, [], JSON_UNESCAPED_UNICODE);
  168.         }
  169.         $date = new \DateTime($periode);
  170.         $periode $this->calculPaieService->getPeriode($date->format('mY'));
  171.         if($periode->IsValider()) {
  172.             return new JsonResponse('Periode est valider !'500, [], JSON_UNESCAPED_UNICODE);
  173.         }
  174.         $statut $this->em->getRepository(PStatut::class)->find(2); // pret
  175.         $bordereaux $this->em->getRepository(PBordereau::class)->findBy(['periode' => $periode'active' => true'statut' => $statut]);
  176.         foreach ($bordereaux as $key => $bordereau) {
  177.             if ($bordereau->getType() == 'operationregularisation') {
  178.                 $bordereau->setStatut(
  179.                     $this->em->getRepository(PStatut::class)->find(3)
  180.                 );
  181.             } else {
  182.                 $charges $this->em->getRepository(JournalBulletinLg::class)->getSumMontant($bordereau);
  183.                 if($charges) {
  184.                     if(number_format($charges['montant'], 2) != 0) {
  185.                         $bordereau->setStatut(
  186.                             $this->em->getRepository(PStatut::class)->find(5)
  187.                         );
  188.                     } else {
  189.                         $bordereau->setStatut(
  190.                             $this->em->getRepository(PStatut::class)->find(3)
  191.                         );
  192.                     }
  193.                 }
  194.             }
  195.         }
  196.         $periode->setIsValider(true);
  197.         $this->generateSynthese($periode);
  198.         $this->em->flush();
  199.         return new JsonResponse("Bien enregistrer");
  200.     }
  201.     #[Route('/app_tresorerie_bordereau_periode_check/{periode}'name'app_tresorerie_bordereau_periode_check'options: ['expose' => true])]
  202.     public function app_tresorerie_bordereau_periode_check($periode): Response
  203.     {
  204.         $date = new \DateTime($periode);
  205.         $periode $this->calculPaieService->getPeriode($date->format('mY'));
  206.         return new JsonResponse(['valider' => $periode->isValider(),'integrer' => $periode->isIntegrer()]);
  207.     }
  208.     #[Route('/app_tresorerie_bordereau_journal'name'app_tresorerie_bordereau_journal'options: ['expose' => true])]
  209.     public function app_tresorerie_bordereau_journal(Request $request): Response
  210.     {
  211.         $bordereauIds json_decode($request->get('bordereauIds'));
  212.         $array = [];
  213.         foreach ($bordereauIds as $key => $bordereauId) {
  214.             $bordereau $this->em->getRepository(PBordereau::class)->find($bordereauId);
  215.             if ($bordereau->getStatut()->getId() == 1) {  // en cours
  216.                 array_push($array$bordereau->getId());
  217.             }
  218.         }
  219.         $request->request->add(['bordoreauIds' => json_encode($array)]);
  220.         return new JsonResponse("Bien enregistrer");
  221.     }
  222.     #[Route('/app_tresorerie_bordereau_devalider'name'app_tresorerie_bordereau_devalider'options: ['expose' => true])]
  223.     public function app_tresorerie_bordereau_devalider(Request $request): Response
  224.     {
  225.         $bordereauIds json_decode($request->get('bordereauIds'));
  226.         // dd($bordereauIds);
  227.         foreach ($bordereauIds as $key => $bordereauId) {
  228.             $bordereau $this->em->getRepository(PBordereau::class)->find($bordereauId);
  229.             if ($bordereau->getStatut()->getId() == 3) {  // valider
  230.                 $bordereau->setStatut(
  231.                     $this->em->getRepository(PStatut::class)->find(2)
  232.                 );
  233.             }
  234.         }
  235.         $this->em->flush();
  236.         return new JsonResponse("Bien enregistrer");
  237.     }
  238.     #[Route('/app_tresorerie_bordereau_desactiver'name'app_tresorerie_bordereau_desactiver'options: ['expose' => true])]
  239.     public function app_tresorerie_bordereau_desactiver(Request $request): Response
  240.     {
  241.         $motif $request->get('motif');
  242.         $bordereauIds json_decode($request->get('bordereauIdsDesactiver'));
  243.         // dd($bordereauIds);
  244.         foreach ($bordereauIds as $key => $bordereauId) {
  245.             $bordereau $this->em->getRepository(PBordereau::class)->find($bordereauId);
  246.             if (in_array($bordereau->getStatut()->getId(), [12])) {
  247.                 foreach ($bordereau->getActiveBulletins() as $key => $bulletin) {
  248.                     foreach ($bulletin->getBulletinLgs() as $key => $bulletinLg) {
  249.                         $bulletinLg->setActive(false);
  250.                     }
  251.                     foreach ($bulletin->getJournalBulletinLgs() as $key => $JournalBulletinLg) {
  252.                         $JournalBulletinLg->setActive(false);
  253.                     }
  254.                     $bulletin->setMotifAnnulation($motif);
  255.                     $bulletin->setUserAnnulation($this->getUser());
  256.                     $bulletin->setActive(false);
  257.                 }
  258.                 $bordereau->setMotifAnnulation($motif);
  259.                 $bordereau->setUserAnnulation($this->getUser());
  260.                 $bordereau->setActive(false);
  261.             }
  262.         }
  263.         $this->em->flush();
  264.         return new JsonResponse("Bien enregistrer");
  265.     }
  266.     #[Route('/app_tresorerie_bordereau_verification'name'app_tresorerie_bordereau_verification'options: ['expose' => true])]
  267.     public function app_tresorerie_bordereau_verification(Request $request): Response
  268.     {
  269.         $bordereauIds json_decode($request->get('uniqueBordereaux'));
  270.         foreach ($bordereauIds as $key => $bordereauId) {
  271.             $bordereau $this->em->getRepository(PBordereau::class)->find($bordereauId);
  272.             $charge $this->em->getRepository(JournalBulletinLg::class)->getSumMontant($bordereau);
  273.             if (number_format($charge2) == 0) {
  274.                 $bordereau->setStatut(
  275.                     $this->em->getRepository(PStatut::class)->find(2)
  276.                 );
  277.             } else {
  278.                 $bordereau->setStatut(
  279.                     $this->em->getRepository(PStatut::class)->find(5)
  280.                 );
  281.             }
  282.             $bordereau->setStatut(
  283.                 $this->em->getRepository(PStatut::class)->find(2)
  284.             );
  285.         }
  286.         $this->em->flush();
  287.         return new JsonResponse("Bien enregistrer");
  288.     }
  289.     #[Route('/app_tresorerie_bordereau_integre/{isExtraction}'name'app_tresorerie_bordereau_integre'options: ['expose' => true])]
  290.     public function app_tresorerie_bordereau_integre(Request $request$isExtraction): Response
  291.     {
  292.         $checkIfDuplicatedRib "select count(*) , contact_id_id from lrib where active = 1
  293.         group by contact_id_id
  294.         having count(*) > 1";
  295.         $stmt $this->em->getConnection()->prepare($checkIfDuplicatedRib);
  296.         $newstmt $stmt->executeQuery();
  297.         $result $newstmt->fetchAll();
  298.         if (count($result) > 0) {
  299.             return new JsonResponse('Vous avez des RIBS en double, contacter l\'administrateur!'500);
  300.         }
  301.         $bordereaux $this->em->getRepository(PBordereau::class)->findBy([
  302.             'statut' => $this->em->getRepository(PStatut::class)->find(3),
  303.             'active' => true,
  304.             'type' => ['paie''honoraire''indeminite''rémunérationavance''stc' 'paiementautrui']
  305.         ]);
  306.         $bordereauxRegularisation $this->em->getRepository(PBordereau::class)->findBy([
  307.             'statut' => $this->em->getRepository(PStatut::class)->find(3),
  308.             'active' => true,
  309.             'type' => ['operationregularisation']
  310.         ]);
  311.       
  312.         // $bordereauxStcs = $this->em->getRepository(PBordereau::class)->findBy([
  313.         //     'statut' => $this->em->getRepository(PStatut::class)->find(3),
  314.         //     'active' => true,
  315.         //     'type' => ['stc']
  316.         // ]);
  317.       
  318.         if (count($bordereaux) == && count($bordereauxRegularisation) == 0) {
  319.             return new JsonResponse('Rien Ã  intégrer'500);
  320.         }
  321.         if (count($result) > 0) {
  322.             return new JsonResponse('Vous avez des ribs en double, veuillez contacter l\'administrateur !'500);
  323.         }
  324.         $groupements $this->em->getRepository(PDossier::class)->getGroupement();
  325.         $dossierRh $this->em->getRepository(PDossier::class)->find(47);
  326.         // dd($bordereauxIndiminites);
  327.         $cabs $this->generateCabs($groupements$bordereaux$bordereauxRegularisation$dossierRh);
  328.         // dd($cabs);
  329.         if (count($cabs) == 0) {
  330.             return new JsonResponse('Rien Ã  intégrer'500);
  331.         }
  332.         if ($isExtraction == 1) {
  333.             $cabs $this->toArray($cabs);
  334.             return new JsonResponse($cabs);
  335.         }
  336.         // check info personnels
  337.         foreach ($cabs as $key => $cab) {
  338.             if ($cab['devise'] != "MAD") {
  339.                 foreach ($cab['details'] as $key => $detail) {
  340.                     if (array_key_exists('personnels'$detail)) {
  341.                         foreach ($detail['personnels'] as $key => $personnel) {
  342.                             if (
  343.                                 $personnel['swift'] == "" or is_null($personnel['swift']) or
  344.                                 $personnel['banque'] == "" or is_null($personnel['banque']) or
  345.                                 $personnel['adresse'] == "" or is_null($personnel['adresse']) or
  346.                                 $personnel['rib'] == "" or is_null($personnel['rib'])
  347.                             ) {
  348.                                 return new JsonResponse('Vous avez un manque des donnés banquaire dans le contrat (' $personnel['observation'] . ')'500);
  349.                             }
  350.                         }
  351.                     } 
  352.                 }
  353.             } else {
  354.                 foreach ($cab['details'] as $key => $detail) {
  355.                     if ($cab['paiement'] == "Virement" and array_key_exists('personnels'$detail)) {
  356.                         foreach ($detail['personnels'] as $key => $personnel) {
  357.                             if (
  358.                                 $personnel['rib'] == "" or is_null($personnel['rib'])
  359.                             ) {
  360.                                 return new JsonResponse('Vous avez un manque de RIB dans le contrat (' $personnel['observation'] . ')'500);
  361.                             }
  362.                         }
  363.                     }
  364.                 }
  365.             }
  366.         }
  367.         // end check
  368.         $this->insertCabsAndMakeChanges($cabs$bordereaux$bordereauxRegularisation);
  369.         $this->em->flush();
  370.         return new JsonResponse("Bien enregistrer");
  371.     }
  372.     #[Route('/app_tresorerie_bordereau_integre_periode/{isExtraction}/{periode}'name'app_tresorerie_bordereau_integre_periode'options: ['expose' => true])]
  373.     public function app_tresorerie_bordereau_integre_periode(Request $request$isExtraction$periode): Response
  374.     {
  375.         $periode $request->get('periode');
  376.         $date = new \DateTime($periode);
  377.         $periode $this->calculPaieService->getPeriode($date->format('mY'));
  378.         if($periode->isIntegrer()) {
  379.             return new JsonResponse('Periode est déja integrer!'500);
  380.         }
  381.         $checkIfDuplicatedRib "select count(*) , contact_id_id from lrib where active = 1
  382.         group by contact_id_id
  383.         having count(*) > 1";
  384.         $stmt $this->em->getConnection()->prepare($checkIfDuplicatedRib);
  385.         $newstmt $stmt->executeQuery();
  386.         $result $newstmt->fetchAll();
  387.         if (count($result) > 0) {
  388.             return new JsonResponse('Vous avez des RIBS en double, contacter l\'administrateur!'500);
  389.         }
  390.         $bordereaux $this->em->getRepository(PBordereau::class)->findBy([
  391.             'statut' => $this->em->getRepository(PStatut::class)->find(3),
  392.             'active' => true,
  393.             'periode' => $periode,
  394.             'type' => ['paie''honoraire''indeminite''rémunérationavance''stc''paiementautrui']
  395.         ]);
  396.         $bordereauxRegularisation $this->em->getRepository(PBordereau::class)->findBy([
  397.             'statut' => $this->em->getRepository(PStatut::class)->find(3),
  398.             'active' => true,
  399.             'periode' => $periode,
  400.             'type' => ['operationregularisation']
  401.         ]);
  402.       
  403.       
  404.         if (count($bordereaux) == && count($bordereauxRegularisation) == ) {
  405.             return new JsonResponse('Rien Ã  intégrer'500);
  406.         }
  407.         if (count($result) > 0) {
  408.             return new JsonResponse('Vous avez des ribs en double, veuillez contacter l\'administrateur !'500);
  409.         }
  410.         $groupements $this->em->getRepository(PDossier::class)->getGroupement();
  411.         $dossierRh $this->em->getRepository(PDossier::class)->find(47);
  412.         // dd($bordereauxIndiminites);
  413.         $cabs $this->generateCabs($groupements$bordereaux$bordereauxRegularisation$dossierRh);
  414.         if (count($cabs) == 0) {
  415.             return new JsonResponse('Rien Ã  intégrer'500);
  416.         }
  417.         if ($isExtraction == 1) {
  418.             $cabs $this->toArray($cabs);
  419.             return new JsonResponse($cabs);
  420.         }
  421.         // check info personnels
  422.         foreach ($cabs as $key => $cab) {
  423.             if ($cab['devise'] != "MAD") {
  424.                 foreach ($cab['details'] as $key => $detail) {
  425.                     if (array_key_exists('personnels'$detail)) {
  426.                         foreach ($detail['personnels'] as $key => $personnel) {
  427.                             if (
  428.                                 $personnel['swift'] == "" or is_null($personnel['swift']) or
  429.                                 $personnel['banque'] == "" or is_null($personnel['banque']) or
  430.                                 $personnel['adresse'] == "" or is_null($personnel['adresse']) or
  431.                                 $personnel['rib'] == "" or is_null($personnel['rib'])
  432.                             ) {
  433.                                 return new JsonResponse('Vous avez un manque des donnés banquaire dans le contrat (' $personnel['observation'] . ')'500);
  434.                             }
  435.                         }
  436.                     }
  437.                 }
  438.             } else {
  439.                 foreach ($cab['details'] as $key => $detail) {
  440.                     if ($cab['paiement'] == "Virement" and array_key_exists('personnels'$detail)) {
  441.                         foreach ($detail['personnels'] as $key => $personnel) {
  442.                             if (
  443.                                 $personnel['rib'] == "" or is_null($personnel['rib'])
  444.                             ) {
  445.                                 return new JsonResponse('Vous avez un manque de RIB dans le contrat (' $personnel['observation'] . ')'500);
  446.                             }
  447.                         }
  448.                     }
  449.                 }
  450.             }
  451.         }
  452.   
  453.         // end check
  454.         $this->insertCabsAndMakeChanges($cabs$bordereaux$bordereauxRegularisation );
  455.         $periode->setIsIntegrer(true);
  456.         $this->em->flush();
  457.         return new JsonResponse("Bien enregistrer");
  458.     }
  459.     public function generateCabs($groupements$bordereaux$bordereauxRegularisation$dossierRh) {
  460.         $cabs = [];
  461.         // dd($bordereauxRegularisation);
  462.         foreach ($groupements as $key => $groupement) {
  463.             $journals $this->em->getRepository(JournalBulletinLg::class)->getCab($bordereaux$groupement['groupement'], $dossierRh);
  464.             foreach ($journals as $key => $journal) {
  465.                 array_push($cabs$journal);
  466.             }
  467.             if (count($bordereauxRegularisation) > 0) {
  468.                 $journalsOperation $this->em->getRepository(JournalBulletinLg::class)->getCabOperation($bordereauxRegularisation$groupement['groupement'], $dossierRh);
  469.                 foreach ($journalsOperation as $key => $journal) {
  470.                     array_push($cabs$journal);
  471.                 }
  472.             }
  473.           
  474.             if ($groupement['groupement'] == 'FCZ') {
  475.                 $journalRegularisations $this->em->getRepository(JournalBulletinLg::class)->getCabRegularisations($bordereaux$groupement['groupement'], $dossierRh);
  476.          
  477.                 foreach ($journalRegularisations as $key => $journal) {
  478.                     array_push($cabs$journal);
  479.                 }
  480.             }
  481.         }
  482.         return $cabs;
  483.     }
  484.     public function insertCabsAndMakeChanges($cabs$bordereaux$bordereauxRegularisation) {
  485.         $date = new \DateTime('now');
  486.         $hashKey $this->generateRandomPassword();
  487.         $date $date->format('d') . '_' $date->format('m') . '_' $date->format('Y') . '_' $date->format('H') . '_' $date->format('i') . '_' $date->format('s') . '(' $hashKey ')';
  488.         foreach ($cabs as $key => $cab) {
  489.             $uniqueId $cab['groupement'] . '_' $cab['observation_operation'] . '_' $date;
  490.             $cabEntity $this->insertIntoCabs($cab$uniqueId);
  491.             foreach ($bordereaux as $key => $bordereau) {
  492.                 if ((($bordereau->getDossier()->getGroupement() == $cab['groupement'] && !array_key_exists('type_piece'$cab)) or ($bordereau->getDossier()->getDossierUgouvId() == $cab['id_site'] && array_key_exists('type_piece'$cab) && $cab['type_piece'] == 'regul')) &&
  493.                     $bordereau->getPeriode()->getId() == $cab['periode_id'] &&
  494.                     $bordereau->getPaiement()->getDesignation() == $cab['paiement'] &&
  495.                     $bordereau->getDevise()->getDesignation() == $cab['devise'] &&
  496.                     ($bordereau->getType() == $cab['type_bordereau'] or $bordereau->getType() . '_regularisation' == $cab['type_bordereau']) &&
  497.                     $bordereau->getNatureContract()->getId() == $cab['natureContract_id']
  498.                 ) {
  499.                     $cabbordereau = new CabBordereau();
  500.                     $cabbordereau->setCab($cabEntity);
  501.                     $cabbordereau->setBordereau($bordereau);
  502.                     $this->em->persist($cabbordereau);
  503.                 }
  504.             }
  505.             foreach ($bordereauxRegularisation as $key => $bordereau) {
  506.                 // if ((($bordereau->getDossier()->getGroupement() == $cab['groupement'] && !array_key_exists('type_piece', $cab)) or ($bordereau->getDossier()->getDossierUgouvId() == $cab['id_site'] && array_key_exists('type_piece', $cab) && $cab['type_piece'] == 'regul')) &&
  507.                 //     $bordereau->getPeriode()->getId() == $cab['periode_id'] &&
  508.                 //     $bordereau->getPaiement()->getDesignation() == $cab['paiement'] &&
  509.                 //     $bordereau->getDevise()->getDesignation() == $cab['devise'] &&
  510.                 //     ($bordereau->getType() == $cab['type_bordereau'] or $bordereau->getType() . '_regularisation' == $cab['type_bordereau']) &&
  511.                 //     $bordereau->getNatureContract()->getId() == $cab['natureContract_id']
  512.                 // ) {
  513.                     // $cabbordereau = new CabBordereau();
  514.                     // $cabbordereau->setCab($cabEntity);
  515.                     // $cabbordereau->setBordereau($bordereau);
  516.                     // $this->em->persist($cabbordereau);
  517.                 // }
  518.                 if($bordereau->getId() == $cab['bordereau_id']) {
  519.                     $cabbordereau = new CabBordereau();
  520.                     $cabbordereau->setCab($cabEntity);
  521.                     $cabbordereau->setBordereau($bordereau);
  522.                     $this->em->persist($cabbordereau);
  523.                 }
  524.             }
  525.            
  526.         }
  527.         foreach ($bordereaux as $key => $bordereau) {
  528.             $bordereau->setStatut(
  529.                 $this->em->getRepository(PStatut::class)->find(4)
  530.             );
  531.             $bordereau->setDateIntegration(new \DateTime());
  532.             $bordereau->setUserIntegration($this->getUser());
  533.             $bordereau->setUniqueId($date);
  534.         }
  535.         foreach ($bordereauxRegularisation as $key => $bordereau) {
  536.             $bordereau->setStatut(
  537.                 $this->em->getRepository(PStatut::class)->find(4)
  538.             );
  539.             $bordereau->setDateIntegration(new \DateTime());
  540.             $bordereau->setUserIntegration($this->getUser());
  541.             $bordereau->setUniqueId($date);
  542.         }
  543.        
  544.     }
  545.     public function insertIntoCabs($data$uniqueId)
  546.     {
  547.         $montantInitial 0;
  548.         $naturePiece $this->em->getRepository(NaturePiece::class)->find($data['naturePiece']);
  549.         // $cab = $this->em->getRepository(Cab::class)->findOneBy(['naturePiece' => $naturePiece, 'designiationPiece' => 'FACTURE '.$data['type_bordereau'], 'descriptionPiece' => $data['type_bordereau'],  'autreInformation' => $data['observation_cab'], 'idSite' => $data['id_site']]);
  550.         // if($cab) {
  551.         //     foreach ($cab->getDets() as $key => $det) {
  552.         //         foreach ($det->getDets() as $key => $detTechnique) {
  553.         //             $this->em->remove($detTechnique);
  554.         //         }
  555.         //         $this->em->remove($det);
  556.         //     }
  557.         // } else {
  558.         $cab = new Cab();
  559.         $cab->setTypePiece(4);
  560.         $cab->setAutreInformation($data['observation_cab']);
  561.         if (array_key_exists('type_piece'$data) && $data['type_piece'] == 'regul') {
  562.             $cab->setTypePaiement('virement');
  563.         } else {
  564.             $cab->setTypePaiement(strtolower($data['paiement']));
  565.         }
  566.         $cab->setIdSite($data['id_site']);
  567.         $cab->setDescriptionSite($data['id_site']);
  568.         $cab->setDescriptionPiece($data['type_bordereau']);
  569.         if (array_key_exists('type_piece'$data) && $data['type_piece'] == 'regul') {
  570.             $cab->setDevise('mad');
  571.         } else {
  572.             $cab->setDevise($data['devise']);
  573.         }
  574.         $cab->setDesigniationPiece('FACTURE ' $data['type_bordereau']);
  575.         // $cab->setDescriptionGrptOps($data['type_bordereau']);
  576.         $cab->setDateOperation(new \DateTime('now'));
  577.         $cab->setDateCreationPiece(new \DateTime('now'));
  578.         $cab->setDateInterf(new \DateTime('now'));
  579.         $cab->setUniqueId($uniqueId);
  580.         $cab->setNaturePiece($naturePiece);
  581.         if ($data['partenaireId'] == null) {
  582.             $cab->setIdTierPiece($data['partenaireNatureContractId']);
  583.         } else {
  584.             $cab->setIdTierPiece($data['partenaireId']);
  585.         }
  586.         $this->em->persist($cab);
  587.         // }
  588.         foreach ($data['details'] as $key => $detail) {
  589.             $det = new Det();
  590.             $det->setCab($cab);
  591.             $det->setRassembleurId($detail['article']);
  592.             $det->setDescriptionRassembleur($detail['codeComptable'] . '_' $detail['rubrique_designation'] . ' : ' $detail['observation_operation'] . '(' $detail['rubrique_code'] . ')');
  593.             $det->setMontantInitialRassembleur($detail['montant']);
  594.             $det->setMontantMad($detail['montant_mad']);
  595.             $det->setQuantiteRassembleur($detail['qte']);
  596.             $det->setCompteComptable($detail['codeComptable']);
  597.             if (array_key_exists('sens'$detail)) {
  598.                 $det->setSens($detail['sens']);
  599.             }
  600.             if (array_key_exists('qte'$detail) && $detail['qte'] == "1") {
  601.                 $montantInitial += (float)$detail['montant'];
  602.             }
  603.             $this->em->persist($det);
  604.             if (array_key_exists('personnels'$detail)) {
  605.                 foreach ($detail['personnels'] as $key => $personnel) {
  606.                     $detTechnique = new UaTechniqueDet();
  607.                     $detTechnique->setDet($det);
  608.                     $detTechnique->setQuantite(1);
  609.                     $detTechnique->setSwift($personnel['swift']);
  610.                     $detTechnique->setBanque($personnel['banque']);
  611.                     $detTechnique->setAdresse($personnel['adresse']);
  612.                     $detTechnique->setPrixUnitaire($personnel['montant']);
  613.                     $detTechnique->setObservation($personnel['observation']);
  614.                     if ($data['paiement'] == "Virement") {
  615.                         $detTechnique->setArticle($personnel['nom'] . ' ' $personnel['prenom'] . '/' $personnel['rib']);
  616.                     } else {
  617.                         $detTechnique->setArticle($personnel['nom'] . ' ' $personnel['prenom']);
  618.                     }
  619.                     $this->em->persist($detTechnique);
  620.                 }
  621.             }
  622.         }
  623.         $cab->setMontantInitial(round($montantInitial2));
  624.         return $cab;
  625.     }
  626.     public function toArray($cabs)
  627.     {
  628.         $array = [];
  629.         foreach ($cabs as $key => $data) {
  630.             foreach ($data['details'] as $key => $detail) {
  631.                 if (array_key_exists('personnels'$detail) && count($detail['personnels']) > 0) {
  632.                     foreach ($detail['personnels'] as $key => $personnel) {
  633.                         array_push($array, [
  634.                             'observation_cab' => $data['observation_cab'],
  635.                             'observation_det' => $detail['observation_det'],
  636.                             'id_site' => $data['id_site'],
  637.                             'type_bordereau' => $data['type_bordereau'],
  638.                             'devise' => $data['devise'],
  639.                             'type_bordereau' => $data['type_bordereau'],
  640.                             'tier_piece' => $data['partenaireId'] == null $data['partenaireNatureContractId'] : $data['partenaireId'],
  641.                             'article' => $detail['article'],
  642.                             'desicription_rassembleur' => $detail['codeComptable'] . '_' $detail['rubrique_designation'] . ' : ' $detail['observation_operation'] . '(' $detail['rubrique_code'] . ')',
  643.                             'montant_mad' => $detail['montant_mad'],
  644.                             'qte' => $detail['qte'],
  645.                             'codeComptable' => $detail['codeComptable'],
  646.                             'swift' => $personnel['swift'],
  647.                             'banque' => $personnel['banque'],
  648.                             'adresse' => $personnel['adresse'],
  649.                             'montant' => $personnel['montant'],
  650.                             'observation' => $personnel['observation'],
  651.                             'article' => $personnel['nom'] . ' ' $personnel['prenom'] . '/' $personnel['rib']
  652.                         ]);
  653.                     }
  654.                 } else {
  655.                     array_push($array, [
  656.                         'observation_cab' => $data['observation_cab'],
  657.                         'observation_det' => $detail['observation_det'],
  658.                         'id_site' => $data['id_site'],
  659.                         'type_bordereau' => $data['type_bordereau'],
  660.                         'devise' => $data['devise'],
  661.                         'type_bordereau' => $data['type_bordereau'],
  662.                         'tier_piece' => $data['partenaireId'] == null $data['partenaireNatureContractId'] : $data['partenaireId'],
  663.                         'article' => $detail['article'],
  664.                         'desicription_rassembleur' => $detail['codeComptable'] . '_' $detail['rubrique_designation'] . ' : ' $detail['observation_operation'] . '(' $detail['rubrique_code'] . ')',
  665.                         'montant_mad' => $detail['montant_mad'],
  666.                         'qte' => $detail['qte'],
  667.                         'codeComptable' => $detail['codeComptable'],
  668.                         'swift' => '',
  669.                         'banque' => '',
  670.                         'adresse' => '',
  671.                         'montant' => '',
  672.                         'observation' => '',
  673.                         'article' => ''
  674.                     ]);
  675.                 }
  676.             }
  677.         }
  678.         return $array;
  679.     }
  680.     #[Route('/app_tresorerie_bordereau_imprimer/{bordereau}'name'app_tresorerie_bordereau_imprimer'options: ['expose' => true])]
  681.     public function app_tresorerie_bordereau_imprimer(PBordereau $bordereau): Response
  682.     {
  683.         $html $this->render("tresorerie/bordereau/pdf/bordereau.html.twig", [
  684.             'bordereau' => $bordereau,
  685.             'total' => $this->api->getBordereauPrixTotal($bordereau)
  686.         ])->getContent();
  687.         $mpdf = new Mpdf([
  688.             'mode' => 'utf-8',
  689.             'margin_left' => '5',
  690.             'margin_right' => '5',
  691.         ]);
  692.         $mpdf->SetTitle($bordereau->getType());
  693.         $mpdf->WriteHTML($html);
  694.         $mpdf->Output($bordereau->getType() . "_" $bordereau->getCode() . ".pdf""I");
  695.     }
  696.     #[Route('/app_tresorerie_bordereau_detail/{code}'name'app_tresorerie_bordereau_detail'options: ['expose' => true])]
  697.     public function app_tresorerie_bordereau_detail($code): Response
  698.     {
  699.         $bordereau $this->em->getRepository(PBordereau::class)->findOneBy(['code' => $code]);
  700.         $html $this->renderView('tresorerie/bordereau/includes/bordereau_detail.html.twig', ['bordereau' => $bordereau]);
  701.         return new JsonResponse($html);
  702.     }
  703.     public function montantBrute($deniedRubriqueTbulletin $bulletin)
  704.     {
  705.         // dd($bulletinLg);
  706.         $bulletinLg =  $this->em->createQueryBuilder('b')
  707.             ->select('CASE WHEN devise.id = 1 THEN bulletinLgs.montant  ELSE bulletinLgs.montantDevise END as montant')
  708.             ->from(Tbulletin::class, 'b')
  709.             ->innerJoin('b.bulletinLgs''bulletinLgs')
  710.             ->innerJoin('bulletinLgs.rubrique''rubrique')
  711.             ->innerJoin('b.bordereau''bordereau')
  712.             ->innerJoin('bordereau.devise''devise')
  713.             ->andWhere('rubrique.id NOT IN (:deniedRubrique)'// 5 is net a paye
  714.             ->andWhere('b.id = :bulletin')
  715.             ->andWhere('bulletinLgs.active = 1')
  716.             ->setParameter('bulletin'$bulletin)
  717.             ->setParameter('deniedRubrique'$deniedRubrique)
  718.             ->getQuery()
  719.             ->getOneOrNullResult();
  720.         if ($bulletinLg) {
  721.             return new Response($bulletinLg['montant']);
  722.         }
  723.         return new Response(0);
  724.     }
  725.     public function montant($rubriqueTbulletin $bulletin)
  726.     {
  727.         // dd($rubrique);
  728.         $bulletinLg =  $this->em->createQueryBuilder('b')
  729.             ->select('CASE WHEN devise.id = 1 THEN bulletinLgs.montant  ELSE bulletinLgs.montantDevise END as montant')
  730.             ->from(Tbulletin::class, 'b')
  731.             ->innerJoin('b.bulletinLgs''bulletinLgs')
  732.             ->innerJoin('bulletinLgs.rubrique''rubrique')
  733.             ->innerJoin('b.bordereau''bordereau')
  734.             ->innerJoin('bordereau.devise''devise')
  735.             ->andWhere('rubrique.id IN (:rubrique)'// 5 is net a paye
  736.             ->andWhere('b.id = :bulletin')
  737.             ->andWhere('bulletinLgs.active = 1')
  738.             ->setParameter('bulletin'$bulletin->getId())
  739.             ->setParameter('rubrique'$rubrique)
  740.             ->getQuery()
  741.             ->getOneOrNullResult();
  742.         // dd($bulletin);
  743.         if ($bulletinLg) {
  744.             return new Response($bulletinLg['montant']);
  745.         }
  746.         return new Response(0);
  747.     }
  748.     public function montantOperationRegularisation(Tbulletin $bulletin)
  749.     {
  750.         // dd($rubrique);
  751.         $bulletinLg =  $this->em->createQueryBuilder('b')
  752.             ->select('b.id , sum(bulletinLgs.montant) as montant')
  753.             ->from(Tbulletin::class, 'b')
  754.             ->innerJoin('b.bulletinLgs''bulletinLgs')
  755.             ->innerJoin('bulletinLgs.rubrique''rubrique')
  756.             ->innerJoin('b.bordereau''bordereau')
  757.             ->andWhere('b.id = :bulletin')
  758.             ->andWhere('bulletinLgs.active = 1')
  759.             ->setParameter('bulletin'$bulletin->getId())
  760.             ->groupBy('b.id')
  761.             ->getQuery()
  762.             ->getOneOrNullResult();
  763.         if ($bulletinLg) {
  764.             return new Response($bulletinLg['montant']);
  765.         }
  766.         return new Response(0);
  767.     }
  768.     public function montantMad($rubriqueTbulletin $bulletin)
  769.     {
  770.         // dd($rubrique);
  771.         $bulletinLg =  $this->em->createQueryBuilder('b')
  772.             ->select('bulletinLgs.montant')
  773.             ->from(Tbulletin::class, 'b')
  774.             ->innerJoin('b.bulletinLgs''bulletinLgs')
  775.             ->innerJoin('bulletinLgs.rubrique''rubrique')
  776.             ->innerJoin('b.bordereau''bordereau')
  777.             ->innerJoin('bordereau.devise''devise')
  778.             ->andWhere('rubrique.id IN (:rubrique)'// 5 is net a paye
  779.             ->andWhere('b.id = :bulletin')
  780.             ->andWhere('bulletinLgs.active = 1')
  781.             ->setParameter('bulletin'$bulletin->getId())
  782.             ->setParameter('rubrique'$rubrique)
  783.             ->getQuery()
  784.             ->getOneOrNullResult();
  785.         // dd($bulletin);
  786.         if ($bulletinLg) {
  787.             return new Response($bulletinLg['montant']);
  788.         }
  789.         return new Response(0);
  790.     }
  791.     function generateRandomPassword($length 8)
  792.     {
  793.         $characters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  794.         $password '';
  795.         // Generate a random password using the specified length
  796.         for ($i 0$i $length$i++) {
  797.             $password .= $characters[random_int(0strlen($characters) - 1)];
  798.         }
  799.         return $password;
  800.     }
  801.     #[Route('/app_tresorerie_bordereau_synthese/{periodeEntity}'name'app_tresorerie_bordereau_synthese'options: ['expose' => true])]
  802.     function generateSynthese(Periode $periodeEntity)
  803.     {
  804.         $periode $periodeEntity->getId();
  805.         $request "SELECT pdossier.groupement, tbulletin.id as bulletin, 'SalaireBruteImposable' as element, sum(tbulletin_lg.montant) as montant
  806.             FROM tbulletin_lg
  807.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  808.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  809.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id           
  810.             INNER JOIN pdossier on tbulletin.dossier_id = pdossier.id
  811.             where   tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.imposable = 1 and pbordereau.active = 1
  812.             group by tbulletin.code 
  813.             UNION
  814.             SELECT pdossier.groupement, tbulletin.id as bulletin, 'SalaireBrute' as element, sum(tbulletin_lg.montant) as montant
  815.             FROM tbulletin_lg
  816.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id    
  817.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  818.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id           
  819.             INNER JOIN pdossier on tbulletin.dossier_id = pdossier.id
  820.             where    tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and ((prubrique.id in (1, 4, 6, 7,8,9) or prubrique.fixe = 1) or prubrique.indeminite = 1 or prubrique.honoraire = 1) and pbordereau.active = 1
  821.             group by tbulletin.code 
  822.             UNION
  823.             SELECT pdossier.groupement, tbulletin.id as bulletin, 'TotalPrimesNonImposable' as element, sum(tbulletin_lg.montant) as montant
  824.             FROM tbulletin_lg
  825.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  826.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id      
  827.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id           
  828.             INNER JOIN pdossier on tbulletin.dossier_id = pdossier.id
  829.             where   tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and (prubrique.type = 'prime') and pbordereau.active = 1
  830.             group by tbulletin.code 
  831.             UNION
  832.             SELECT pdossier.groupement, tbulletin.id as bulletin, 'TotalPrelevement' as element, sum(tbulletin_lg.montant) as montant
  833.             FROM tbulletin_lg
  834.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  835.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id      
  836.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id           
  837.             INNER JOIN pdossier on tbulletin.dossier_id = pdossier.id
  838.             where   tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and (prubrique.type = 'prelevement') and pbordereau.active = 1
  839.             group by tbulletin.code 
  840.             UNION
  841.             SELECT pdossier.groupement, tbulletin.id as bulletin, 'CnssPs' as element, sum(tbulletin_lg.montant) as montant
  842.             FROM tbulletin_lg
  843.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  844.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id      
  845.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id           
  846.             INNER JOIN pdossier on tbulletin.dossier_id = pdossier.id
  847.             where   tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.id in (50, 47, 53) and pbordereau.active = 1
  848.             group by tbulletin.code 
  849.             UNION
  850.             SELECT pdossier.groupement, tbulletin.id as bulletin, 'CimrPs' as element, sum(tbulletin_lg.montant) as montant
  851.             FROM tbulletin_lg
  852.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  853.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  854.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id           
  855.             INNER JOIN pdossier on tbulletin.dossier_id = pdossier.id
  856.             where    tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.id in (48) and pbordereau.active = 1
  857.             group by tbulletin.code 
  858.             UNION
  859.             SELECT pdossier.groupement, tbulletin.id as bulletin, 'CnssPp' as element, sum(tbulletin_lg.montant) as montant
  860.             FROM tbulletin_lg
  861.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  862.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  863.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id           
  864.             INNER JOIN pdossier on tbulletin.dossier_id = pdossier.id
  865.             where   tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.id in (51, 52, 54, 55, 56, 58) and pbordereau.active = 1
  866.             group by tbulletin.code 
  867.             UNION
  868.             SELECT pdossier.groupement, tbulletin.id as bulletin, 'CimrPp' as element, sum(tbulletin_lg.montant) as montant
  869.             FROM tbulletin_lg
  870.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id     
  871.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  872.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id           
  873.             INNER JOIN pdossier on tbulletin.dossier_id = pdossier.id
  874.             where   tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.id in (57) and pbordereau.active = 1
  875.             group by tbulletin.code 
  876.             UNION
  877.             SELECT pdossier.groupement, tbulletin.id as bulletin, 'Ir' as element, sum(tbulletin_lg.montant) as montant
  878.             FROM tbulletin_lg
  879.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  880.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  881.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id           
  882.             INNER JOIN pdossier on tbulletin.dossier_id = pdossier.id
  883.             where   tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.id in (43) and pbordereau.active = 1
  884.             group by tbulletin.code 
  885.             UNION
  886.             SELECT pdossier.groupement, tbulletin.id as bulletin, 'NetFinal' as element, sum(tbulletin_lg.montant) as montant
  887.             FROM tbulletin_lg
  888.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  889.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  890.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id           
  891.             INNER JOIN pdossier on tbulletin.dossier_id = pdossier.id
  892.             where    tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and (prubrique.id in (5, 68)) and pbordereau.active = 1
  893.             group by tbulletin.code 
  894.             UNION
  895.             SELECT pdossier.groupement, tbulletin.id as bulletin, 'NetTheorique' as element, contract_net_theorique.montant
  896.             FROM tbulletin_lg
  897.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  898.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  899.             INNER JOIN contract_net_theorique on contract_net_theorique.bulletin_id = tbulletin.id
  900.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id           
  901.             INNER JOIN pdossier on tbulletin.dossier_id = pdossier.id
  902.             where    tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and (prubrique.id in (5, 68)) and pbordereau.active = 1
  903.             group by tbulletin.code 
  904.             "
  905.         ;
  906.         $connection $this->em->getConnection();
  907.         $stmt $connection->prepare($request);
  908.         $newstmt $stmt->executeQuery();
  909.         $result $newstmt->fetchAll();
  910.         usort($result, function($a$b) {
  911.             return $a['bulletin'] - $b['bulletin'];
  912.         });
  913.        
  914.         // dd($result);
  915.         $cabs $this->geenrateCabsSynthese($periodeEntity);
  916.         // dd($cabs['FCZ'], $result[0]);
  917.         $id 0;
  918.         // dd('amine');
  919.         foreach ($result as $key => $row) {
  920.             if($row['bulletin'] != $id) {
  921.                 $id $row['bulletin'];
  922.                 $bulletin $this->em->getRepository(Tbulletin::class)->find($row['bulletin']);
  923.                 $syntheseDet $this->em->getRepository(SyntheseRemunarationDet::class)->findOneBy(['bulletin' => $bulletin]);
  924.                 if(!$syntheseDet) {
  925.                     $syntheseDet = new SyntheseRemunarationDet();
  926.                     $syntheseDet->setBulletin($bulletin);
  927.                     $syntheseDet->setCab($cabs[$row['groupement']]);
  928.                     $this->em->persist($syntheseDet);
  929.                 }
  930.             }
  931.             $setter 'set'.$row['element'];
  932.             $getter 'get'.$row['element'];
  933.             $syntheseDet->$setter($row['montant']);
  934.             $cabs[$row['groupement']]->$setter($cabs[$row['groupement']]->$getter() + $row['montant']);
  935.           
  936.         }
  937.         $this->em->flush();
  938.         
  939.         $request $this->requestStack->getCurrentRequest();
  940.         if ($request->isMethod('GET')) {
  941.             return new JsonResponse('ok');
  942.         } else  {
  943.             return 'ok';
  944.         }
  945.     }
  946.     function geenrateCabsSynthese($periodeEntity)
  947.     {
  948.         $syntheseCabFcz $this->em->getRepository(SyntheseRemunarationCab::class)->findOneBy(['periode' => $periodeEntity'groupement' => 'FCZ']);
  949.         if($syntheseCabFcz) {
  950.             $syntheseCabFcz->setSalaireBrute(0);
  951.             $syntheseCabFcz->setSalaireBruteImposable(0);
  952.             $syntheseCabFcz->setCnssPp(0);
  953.             $syntheseCabFcz->setCnssPs(0);
  954.             $syntheseCabFcz->setCimrPp(0);
  955.             $syntheseCabFcz->setCimrPs(0);
  956.             $syntheseCabFcz->setIr(0);
  957.             $syntheseCabFcz->setTotalPrelevement(0);
  958.             $syntheseCabFcz->setTotalPrimesNonImposable(0);
  959.             $syntheseCabFcz->setNetFinal(0);
  960.             $syntheseCabFcz->setNetTheorique(0);
  961.         } else {
  962.             $syntheseCabFcz = new SyntheseRemunarationCab();
  963.             $syntheseCabFcz->setPeriode($periodeEntity);
  964.             $syntheseCabFcz->setGroupement('FCZ');
  965.             $this->em->persist($syntheseCabFcz);
  966.         }
  967.         $syntheseCabRga $this->em->getRepository(SyntheseRemunarationCab::class)->findOneBy(['periode' => $periodeEntity'groupement' => 'RGA']);
  968.         if($syntheseCabRga) {
  969.             $syntheseCabRga->setSalaireBrute(0);
  970.             $syntheseCabRga->setSalaireBruteImposable(0);
  971.             $syntheseCabRga->setCnssPp(0);
  972.             $syntheseCabRga->setCnssPs(0);
  973.             $syntheseCabRga->setCimrPp(0);
  974.             $syntheseCabRga->setCimrPs(0);
  975.             $syntheseCabRga->setIr(0);
  976.             $syntheseCabRga->setTotalPrelevement(0);
  977.             $syntheseCabRga->setTotalPrimesNonImposable(0);
  978.             $syntheseCabRga->setNetFinal(0);
  979.             $syntheseCabRga->setNetTheorique(0);
  980.         } else {
  981.             $syntheseCabRga = new SyntheseRemunarationCab();
  982.             $syntheseCabRga->setPeriode($periodeEntity);
  983.             $syntheseCabRga->setGroupement('RGA');
  984.             $this->em->persist($syntheseCabRga);
  985.         }
  986.         $syntheseCabSss $this->em->getRepository(SyntheseRemunarationCab::class)->findOneBy(['periode' => $periodeEntity'groupement' => 'SSS']);
  987.         if($syntheseCabSss) {
  988.             $syntheseCabSss->setSalaireBrute(0);
  989.             $syntheseCabSss->setSalaireBruteImposable(0);
  990.             $syntheseCabSss->setCnssPp(0);
  991.             $syntheseCabSss->setCnssPs(0);
  992.             $syntheseCabSss->setCimrPp(0);
  993.             $syntheseCabSss->setCimrPs(0);
  994.             $syntheseCabSss->setIr(0);
  995.             $syntheseCabSss->setTotalPrelevement(0);
  996.             $syntheseCabSss->setTotalPrimesNonImposable(0);
  997.             $syntheseCabSss->setNetFinal(0);
  998.             $syntheseCabSss->setNetTheorique(0);
  999.         } else {
  1000.             $syntheseCabSss = new SyntheseRemunarationCab();
  1001.             $syntheseCabSss->setPeriode($periodeEntity);
  1002.             $syntheseCabSss->setGroupement('SSS');
  1003.             $this->em->persist($syntheseCabSss);
  1004.         }
  1005.         $syntheseCabSst $this->em->getRepository(SyntheseRemunarationCab::class)->findOneBy(['periode' => $periodeEntity'groupement' => 'SST']);
  1006.         if($syntheseCabSst) {
  1007.             $syntheseCabSst->setSalaireBrute(0);
  1008.             $syntheseCabSst->setSalaireBruteImposable(0);
  1009.             $syntheseCabSst->setCnssPp(0);
  1010.             $syntheseCabSst->setCnssPs(0);
  1011.             $syntheseCabSst->setCimrPp(0);
  1012.             $syntheseCabSst->setCimrPs(0);
  1013.             $syntheseCabSst->setIr(0);
  1014.             $syntheseCabSst->setTotalPrelevement(0);
  1015.             $syntheseCabSst->setTotalPrimesNonImposable(0);
  1016.             $syntheseCabSst->setNetFinal(0);
  1017.             $syntheseCabSst->setNetTheorique(0);
  1018.         } else {
  1019.             $syntheseCabSst = new SyntheseRemunarationCab();
  1020.             $syntheseCabSst->setPeriode($periodeEntity);
  1021.             $syntheseCabSst->setGroupement('SST');
  1022.             $this->em->persist($syntheseCabSst);
  1023.         }
  1024.         return [
  1025.             'SST' => $syntheseCabSst,
  1026.             'SSS' => $syntheseCabSss,
  1027.             'FCZ' => $syntheseCabFcz,
  1028.             'RGA' => $syntheseCabRga,
  1029.         ];
  1030.     }
  1031. }