src/Controller/Reporting/ExtractionController.php line 1820

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Reporting;
  3. use Mpdf\Mpdf;
  4. use App\Entity\Cab;
  5. use App\Entity\Lrib;
  6. use App\Entity\Type;
  7. use App\Entity\PPiece;
  8. use App\Entity\Periode;
  9. use App\Entity\PDossier;
  10. use App\Entity\TCnssA00;
  11. use App\Entity\TCnssB00;
  12. use App\Entity\LContract;
  13. use App\Entity\Prubrique;
  14. use App\Entity\PtypeCoti;
  15. use App\Entity\Tbulletin;
  16. use App\Entity\PBaremeCimr;
  17. use App\Entity\TbulletinLg;
  18. use App\Entity\UsOperation;
  19. use App\Entity\PPrelevement;
  20. use App\Entity\PArretTravailLg;
  21. use App\Entity\PnatureContract;
  22. use App\Controller\ApiController;
  23. use App\Entity\LmatriculationCoti;
  24. use App\Service\CalculPaieService;
  25. use Doctrine\Persistence\ManagerRegistry;
  26. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  27. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  28. use Symfony\Component\HttpFoundation\Request;
  29. use Symfony\Component\HttpFoundation\Response;
  30. use Symfony\Component\Routing\Annotation\Route;
  31. use Symfony\Component\HttpFoundation\JsonResponse;
  32. use Symfony\Contracts\HttpClient\HttpClientInterface;
  33. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  34. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  35. #[Route('/reporting/extraction')]
  36. class ExtractionController extends AbstractController
  37. {
  38.     private $em;
  39.     private $calculPaieService;
  40.     private $api;
  41.     public function __construct(ManagerRegistry $doctrineCalculPaieService $calculPaieServiceApiController $api)
  42.     {
  43.         $this->em $doctrine->getManager();
  44.         $this->api $api;
  45.         $this->calculPaieService $calculPaieService;
  46.     }
  47.     #[Route('/'name'app_reporting_extraction'options: ['expose' => true])]
  48.     public function index(Request $request): Response
  49.     {
  50.         $operations $this->api->check($this->getUser(), 'app_reporting_extraction'$this->em$request);
  51.         if (!is_array($operations)) {
  52.             return $this->redirectToRoute('app_site');
  53.         } elseif (count($operations) == 0) {
  54.             return $this->render('includes/404.html.twig');
  55.         }
  56.         $groupements=$this->em->createQueryBuilder()
  57.                          ->select('DISTINCT dossier.groupement')
  58.                          ->from(PDossier::class, 'dossier')
  59.                          ->Where('dossier.active = 1')
  60.                          ->getQuery()
  61.                          ->getResult();
  62.         $dossiers $this->em->getRepository(PDossier::class)->findBy(['active' => true]);
  63.         $natures $this->em->getRepository(PnatureContract::class)->findAll();
  64.         $prets $this->em->getRepository(Prubrique::class)->findBy(['active' => true'prets' => 1]);
  65.         return $this->render('reporting/extraction/index.html.twig', [
  66.             'controller_name' => 'ExtractionController',
  67.             'groupements'=>$groupements,
  68.             'dossiers' => $dossiers,
  69.             'natures' => $natures,
  70.             'prets' => $prets
  71.         ]);
  72.     }
  73.     #[Route('/app_reporting_extraction_list'name'app_reporting_extraction_list'options: ['expose' => true])]
  74.     public function app_reporting_extraction_list(Request $request): Response
  75.     {
  76.         $draw $request->query->get('draw');
  77.         $start $request->query->get('start') ?? 0;
  78.         $length $request->query->get('length') ?? 10;
  79.         $search $request->query->all('search')["value"];
  80.         $orderColumnIndex $request->query->all('order')[0]['column'];
  81.         $orderColumn $request->query->all("columns")[$orderColumnIndex]['name'];
  82.         $orderDir $request->query->all('order')[0]['dir'] ?? 'asc';
  83.         $queryBuilder $this->em->createQueryBuilder()
  84.             ->select('o.icon, o.designation, o.idTag')
  85.             ->from(UsOperation::class, 'o')
  86.             ->innerJoin('o.sousModule''m')
  87.             ->Where('o.align = :align')
  88.             ->andWhere('m.id = 16')
  89.             ->andWhere('o.active = 1')
  90.             ->setParameter('align''1');
  91.         if (!empty($search)) {
  92.             $queryBuilder->andWhere('(o.designation LIKE :search OR o.icon LIKE :search OR o.idTag LIKE :search)')
  93.                 ->setParameter('search'"%$search%");
  94.         }
  95.         if (!empty($orderColumn)) {
  96.             $queryBuilder->orderBy("$orderColumn"$orderDir);
  97.         }
  98.         $filteredRecords count($queryBuilder->getQuery()->getResult());
  99.         // Paginate results
  100.         $queryBuilder->setFirstResult($start)
  101.             ->setMaxResults($length);
  102.         $results $queryBuilder->getQuery()->getResult();
  103.         // dd($results);
  104.         $data = [];
  105.         foreach ($results as $key => $operation) {
  106.             $array = [];
  107.             $array[] = $operation['icon'];
  108.             $array[] = '<a href="#" id="' $operation['idTag'] . '">' $operation['designation'] . '</a>';
  109.             $data[] = $array;
  110.         }
  111.         // dd($results);
  112.         $totalRecords $this->em->createQueryBuilder()
  113.             ->select('COUNT(d.id)')
  114.             ->from(UsOperation::class, 'd')
  115.             ->innerJoin('d.sousModule''m')
  116.             ->Where('d.align = :align')
  117.             ->andWhere('m.id = 16')
  118.             ->setParameter('align''1')
  119.             ->getQuery()
  120.             ->getSingleScalarResult();
  121.         return new JsonResponse([
  122.             'draw' => $draw,
  123.             'recordsTotal' => $totalRecords,
  124.             'recordsFiltered' => $filteredRecords,
  125.             'data' => $data,
  126.         ]);
  127.     }
  128.     #[Route('/app_reporting_extraction_employe_active'name'app_reporting_extraction_employe_active'options: ['expose' => true])]
  129.     public function app_reporting_extraction_employe_active(Request $request): Response
  130.     {
  131.         $queryBuilder $this->em->createQueryBuilder()
  132.             ->select('affectationDossier.groupement, affectationDossier.id as id_dossier, fcy.id as fcy_id, fcy.fcy0, fcy.fcy0Libelle,affectationDossier.das,affectationDossier.abreviation, affectationDossier.designation as dossier_designation,employe.id as id_employe, contract.id as id_contrat, employe.nom, employe.prenom, employe.cin, employe.sexe, employe.adresse1,
  133.          date_format(employe.date_naissance, \'%d/%m/%Y\') as date_naissance, pnatureContract.id as id_nature_contrat, pnatureContract.designation as nature_contrat,type.designation as type_nature_contrat, dureeContract.Designation as duree_contrat, bareme.id as id_bareme, bareme.bareme as bareme_number, bareme.Profil, baremeType.designation as bareme_type, contract.priseEnCharge as pers_en_charge, employe.nombre_enfants as nbr_enfants,employe.tel1,
  134.          date_format(contract.date_debut, \'%d/%m/%Y\') as date_debut, date_format(contract.date_fin, \'%d/%m/%Y\') as date_fin, date_format(contract.dateAnciennete, \'%d/%m/%Y\') as date_anciennete, f.Designation as fonction,lribs.code as rib, lribs.swift, lribs.banque, contract.cnss as cnss, contract.cimr as cimr, CASE WHEN ldossierContract.active = 1 THEN \'affectation actuelle\'  ELSE \'ancien site\' END as affectation_statut, date_format(ldossierContract.created, \'%d/%m/%Y\') as debut_affectation
  135.          ')
  136.             ->from(PDossier::class, 'dossier')
  137.             ->innerJoin('dossier.contracts''contract')
  138.             ->innerJoin('contract.ldossierContracts''ldossierContract')
  139.             ->innerJoin('contract.employe''employe')
  140.             ->innerJoin('contract.pnatureContract''pnatureContract')
  141.             ->innerJoin('contract.bareme''bareme')
  142.             ->innerJoin('bareme.baremeType''baremeType')
  143.             ->innerJoin('pnatureContract.type''type')
  144.             ->innerJoin('ldossierContract.dossier_id''affectationDossier')
  145.             ->leftJoin('contract.fonction''f')
  146.             ->leftJoin('contract.dureeContract''dureeContract')
  147.             ->leftJoin('affectationDossier.fcy''fcy')
  148.             // ->leftJoin('employe.diplomes', 'diplomes')
  149.             ->leftJoin('contract.lribs''lribs''WITH''lribs.active = 1')
  150.             ->Where('contract.active = 1')
  151.             ->orderBy('dossier.id''desc')
  152.             ->getQuery()
  153.             ->getResult();
  154.         return new JsonResponse($queryBuilder);
  155.     }
  156.     #[Route('/app_reporting_extraction_employe_entrant/{periode}'name'app_reporting_extraction_employe_entrant'options: ['expose' => true])]
  157.     public function app_reporting_extraction_employe_entrant($periode): Response
  158.     {
  159.         $dateDebut = new \DateTime($periode);
  160.         $dateFin = new \DateTime($periode);
  161.         $dateDebut->modify('first day of this month');
  162.         $dateFin->modify('last day of this month');
  163.         $queryBuilder $this->em->createQueryBuilder()
  164.             ->select('affectationDossier.groupement, affectationDossier.id as id_dossier, affectationDossier.designation as dossier_designation,employe.id as id_employe, contract.id as id_contrat, employe.nom, employe.prenom,employe.sexe, employe.cin, employe.adresse1,
  165.          date_format(employe.date_naissance, \'%d/%m/%Y\') as date_naissance, pnatureContract.id as id_nature_contrat, pnatureContract.designation as nature_contrat,type.designation as type_nature_contrat, bareme.id as id_bareme, bareme.bareme as bareme_number, bareme.Profil, baremeType.designation as bareme_type, contract.priseEnCharge as pers_en_charge, employe.nombre_enfants as nbr_enfants,employe.tel1,
  166.          date_format(contract.date_debut, \'%d/%m/%Y\') as date_debut, date_format(contract.date_fin, \'%d/%m/%Y\') as date_fin, date_format(contract.dateAnciennete, \'%d/%m/%Y\') as date_anciennete,lribs.code as rib, contract.cnss as cnss, contract.cimr as cimr, CASE WHEN ldossierContract.active = 1 THEN \'affectation actuelle\'  ELSE \'ancien site\' END as affectation_statut, date_format(ldossierContract.created, \'%d/%m/%Y\') as debut_affectation ')
  167.             ->from(PDossier::class, 'dossier')
  168.             ->innerJoin('dossier.contracts''contract')
  169.             ->innerJoin('contract.ldossierContracts''ldossierContract')
  170.             ->innerJoin('contract.employe''employe')
  171.             ->innerJoin('contract.pnatureContract''pnatureContract')
  172.             ->innerJoin('contract.bareme''bareme')
  173.             ->innerJoin('bareme.baremeType''baremeType')
  174.             ->innerJoin('pnatureContract.type''type')
  175.             ->innerJoin('ldossierContract.dossier_id''affectationDossier')
  176.             ->leftJoin('contract.lribs''lribs''WITH''lribs.active = 1')
  177.             // ->leftJoin('contract.lmatriculationCotis', 'lmatriculationCotisCnss', 'WITH', 'lmatriculationCotisCnss.type_id = 1')
  178.             // ->leftJoin('contract.lmatriculationCotis', 'lmatriculationCotisCimr', 'WITH', 'lmatriculationCotisCimr.type_id = 2')
  179.             // ->leftJoin('ldossierContract.dossier_id', 'affectationDossier')
  180.             ->Where('contract.date_debut >= :date_debut')
  181.             ->andWhere('contract.date_debut <= :date_fin')
  182.             // ->andWhere('dossier.id = 20')
  183.             ->setParameter('date_debut'$dateDebut)
  184.             ->setParameter('date_fin'$dateFin)
  185.             ->orderBy('dossier.id''desc')
  186.             ->getQuery()
  187.             ->getResult();
  188.         return new JsonResponse($queryBuilder);
  189.     }
  190.     #[Route('/app_reporting_extraction_employe_sortant/{periode}'name'app_reporting_extraction_employe_sortant'options: ['expose' => true])]
  191.     public function app_reporting_extraction_employe_sortant($periode): Response
  192.     {
  193.         $dateDebut = new \DateTime($periode);
  194.         $dateFin = new \DateTime($periode);
  195.         $dateDebut->modify('first day of this month');
  196.         $dateFin->modify('last day of this month');
  197.         $queryBuilder $this->em->createQueryBuilder()
  198.             ->select('affectationDossier.groupement, affectationDossier.id as id_dossier, affectationDossier.designation as dossier_designation,employe.id as id_employe, contract.id as id_contrat, employe.nom, employe.prenom,employe.sexe, employe.cin, employe.adresse1,
  199.          date_format(employe.date_naissance, \'%d/%m/%Y\') as date_naissance, pnatureContract.id as id_nature_contrat, pnatureContract.designation as nature_contrat,type.designation as type_nature_contrat, bareme.id as id_bareme, bareme.bareme as bareme_number, bareme.Profil, baremeType.designation as bareme_type, contract.priseEnCharge as pers_en_charge, employe.nombre_enfants as nbr_enfants,employe.tel1,
  200.          date_format(contract.date_debut, \'%d/%m/%Y\') as date_debut, date_format(contract.date_fin, \'%d/%m/%Y\') as date_fin, date_format(contract.dateAnciennete, \'%d/%m/%Y\') as date_anciennete,lribs.code as rib, contract.cnss as cnss, contract.cimr as cimr, CASE WHEN ldossierContract.active = 1 THEN \'affectation actuelle\'  ELSE \'ancien site\' END as affectation_statut, date_format(ldossierContract.created, \'%d/%m/%Y\') as debut_affectation, date_format(contract.date_sortie, \'%d/%m/%Y\') as date_sortie, contract.motif_sortie ')
  201.             ->from(PDossier::class, 'dossier')
  202.             ->innerJoin('dossier.contracts''contract')
  203.             ->innerJoin('contract.ldossierContracts''ldossierContract')
  204.             ->innerJoin('contract.employe''employe')
  205.             ->innerJoin('contract.pnatureContract''pnatureContract')
  206.             ->innerJoin('contract.bareme''bareme')
  207.             ->innerJoin('bareme.baremeType''baremeType')
  208.             ->innerJoin('pnatureContract.type''type')
  209.             ->innerJoin('ldossierContract.dossier_id''affectationDossier')
  210.             ->leftJoin('contract.lribs''lribs''WITH''lribs.active = 1')
  211.             // ->leftJoin('contract.lmatriculationCotis', 'lmatriculationCotisCnss', 'WITH', 'lmatriculationCotisCnss.type_id = 1')
  212.             // ->leftJoin('contract.lmatriculationCotis', 'lmatriculationCotisCimr', 'WITH', 'lmatriculationCotisCimr.type_id = 2')
  213.             // ->leftJoin('ldossierContract.dossier_id', 'affectationDossier')
  214.             ->Where('contract.date_sortie >= :date_debut')
  215.             ->andWhere('contract.date_sortie <= :date_fin')
  216.             // ->andWhere('dossier.id = 20')
  217.             ->setParameter('date_debut'$dateDebut)
  218.             ->setParameter('date_fin'$dateFin)
  219.             ->orderBy('dossier.id''desc')
  220.             ->getQuery()
  221.             ->getResult();
  222.         return new JsonResponse($queryBuilder);
  223.     }
  224.     #[Route('/app_reporting_extraction_bulletin_paie/{periode}'name'app_reporting_extraction_bulletin_paie'options: ['expose' => true])]
  225.     public function app_reporting_extraction_bulletin_paie(Request $request$periode): Response
  226.     {
  227.         $date = new \DateTime($periode);
  228.         $periode $this->calculPaieService->getPeriode($date->format('mY'));
  229.         // $queryBuilder = $this->em->createQueryBuilder()
  230.         // ->select('affectationDossier.id as id_dossier, affectationDossier.designation as dossier_designation,employe.id as id_employe, contract.id as id_contrat, employe.nom, employe.prenom, employe.cin, employe.adresse1,
  231.         //  date_format(employe.date_naissance, \'%d/%m/%Y\') as date_naissance, pnatureContract.id as id_nature_contrat, pnatureContract.designation as nature_contrat,type.designation as type_nature_contrat, contract.priseEnCharge as pers_en_charge, employe.nombre_enfants as nbr_enfants,employe.tel1,
  232.         //  date_format(contract.date_debut, \'%d/%m/%Y\') as date_debut, date_format(contract.date_fin, \'%d/%m/%Y\') as date_fin, date_format(contract.dateAnciennete, \'%d/%m/%Y\') as date_anciennete,lribs.code as rib, lmatriculationCotisCnss.code as cnss, lmatriculationCotisCimr.code as cimr, CASE WHEN ldossierContract.active = 1 THEN \'affectation actuelle\'  ELSE \'ancien site\' END as affectation_statut, date_format(ldossierContract.created, \'%d/%m/%Y\') as debut_affectation ')
  233.         // ->from(PDossier::class, 'dossier')
  234.         // ->innerJoin('dossier.contracts', 'contract')
  235.         // ->innerJoin('contract.ldossierContracts', 'ldossierContract')
  236.         // ->innerJoin('contract.employe', 'employe')
  237.         // ->innerJoin('contract.pnatureContract', 'pnatureContract')
  238.         // ->innerJoin('pnatureContract.type', 'type')
  239.         // ->innerJoin('ldossierContract.dossier_id', 'affectationDossier')
  240.         // ->leftJoin('contract.lribs', 'lribs', 'WITH', 'lribs.active = 1')
  241.         // ->leftJoin('contract.lmatriculationCotis', 'lmatriculationCotisCnss', 'WITH', 'lmatriculationCotisCnss.type_id = 1')
  242.         // ->leftJoin('contract.lmatriculationCotis', 'lmatriculationCotisCimr', 'WITH', 'lmatriculationCotisCimr.type_id = 2')
  243.         // // ->leftJoin('ldossierContract.dossier_id', 'affectationDossier')
  244.         // ->Where('contract.active = 1')
  245.         // // ->andWhere('dossier.id = 20')
  246.         // ->orderBy('dossier.id', 'desc')
  247.         // ->getQuery()
  248.         // ->getResult()
  249.         // ;
  250.         $spreadsheet = new Spreadsheet();
  251.         $sheet $spreadsheet->getActiveSheet();
  252.         $sheet->setCellValue('A1''Id Dossier');
  253.         $sheet->setCellValue('B1''Dossier');
  254.         $sheet->setCellValue('C1''Id Contrat');
  255.         $sheet->setCellValue('D1''Nom');
  256.         $sheet->setCellValue('E1''Prenom');
  257.         $sheet->setCellValue('F1''Cin');
  258.         $sheet->setCellValue('G1''Rib');
  259.         $sheet->setCellValue('H1''Bulletin');
  260.         $sheet->setCellValue('I1''nbrjours');
  261.         $sheet->setCellValue('J1''netpaye');
  262.         $sheet->setCellValue('K1''type');
  263.         $sheet->setCellValue('L1''type bareme');
  264.         $bulletins $this->em->getRepository(Tbulletin::class)->findBy(['active' => true'periode' => $periode]);
  265.         $i 2;
  266.         foreach ($bulletins as $key => $bulletin) {
  267.             $contract $bulletin->getContract();
  268.             $sheet->setCellValue('A' $i$contract $contract->getDossier()->getId() : '');
  269.             $sheet->setCellValue('B' $i$contract $contract->getDossier()->getAbreviation() : '');
  270.             $sheet->setCellValue('C' $i$contract $contract->getId() : '');
  271.             $sheet->setCellValue('D' $i$contract $contract->getEmploye()->getNom() : '');
  272.             $sheet->setCellValue('E' $i$contract $contract->getEmploye()->getPrenom() : '');
  273.             $sheet->setCellValue('F' $i$contract $contract->getEmploye()->getCin() : '');
  274.             if ($contract) {
  275.                 $rib $this->em->getRepository(Lrib::class)->findOneBy(['contact_id' => $contract'active' => true]);
  276.                 $nbr 26 $this->em->getRepository(PArretTravailLg::class)->getNombreJoursArret($contract->getId(), $periode);
  277.                 $sheet->setCellValue('G' $i$rib $rib->getCode() : '');
  278.             } else {
  279.                 $rib '-';
  280.                 $sheet->setCellValue('G' $i'');
  281.                 $nbr '-';
  282.             }
  283.             $sheet->setCellValue('H' $i$bulletin->getCode());
  284.             $sheet->setCellValue('I' $i$nbr);
  285.             $sheet->setCellValue('J' $i,  $this->em->getRepository(Tbulletin::class)->getNetAPaye($bulletin->getId()));
  286.             $sheet->setCellValue('K' $i$bulletin->getPPiece()->getDesignation());
  287.             $sheet->setCellValue('L' $i$contract $contract->getBareme()->getBaremeType()->getDesignation() : '');
  288.             $i++;
  289.         }
  290.         $writer = new Xlsx($spreadsheet);
  291.         $fileName 'bulletin_paies_' $periode->getCode() . '.xlsx';
  292.         $temp_file tempnam(sys_get_temp_dir(), $fileName);
  293.         $writer->save($temp_file);
  294.         return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  295.     }
  296.     #[Route('/app_reporting_extraction_charge_social/{periode}'name'app_reporting_extraction_charge_social'options: ['expose' => true])]
  297.     public function app_reporting_extraction_charge_social(Request $request$periode): Response
  298.     {
  299.         $connection $this->em->getConnection();
  300.         $date = new \DateTime($periode);
  301.         $periode $this->calculPaieService->getPeriode($date->format('mY'));
  302.         $periode $periode->getId();
  303.         // $request = "SELECT pdossier.id as id_dossier, pdossier.abreviation, pdossier.groupement, pdossier.designation as dossier, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  304.         //     pemploye.cin,tbulletin.id as bulletin_id, tbulletin.code as bulletin, ppiece.designation as type_bulletin, prubrique.designation as element, tbulletin_lg.montant, tbulletin_lg.sens,
  305.         //     pnature_contract.designation as nature_contrat, pbareme_type.designation as type_bareme, pbordereau.code as bordereau, pstatut.designation as statut
  306.         //     FROM tbulletin_lg
  307.         //     INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  308.         //     INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  309.         //     INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  310.         //     INNER JOIN pnature_contract on pnature_contract.id = lcontract.pnature_contract_id
  311.         //     INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  312.         //     INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  313.         //     INNER JOIN pdossier on pdossier.id = lcontract.dossier_id
  314.         //     INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  315.         //     INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  316.         //     INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  317.         //     INNER JOIN pstatut on pstatut.id = pbordereau.statut_id
  318.         //     where  tbulletin.periode_id = $periode and pbordereau.active = 1  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.id in (50, 47, 53, 51, 52, 54, 55, 56, 58, 48, 57, 43)";
  319.         // $stmt = $connection->prepare($request);
  320.         // $newstmt = $stmt->executeQuery();   
  321.         // $result = $newstmt->fetchAll();
  322.         // $bulletinValues = array_map(function ($item) {
  323.         //     return $item['bulletin_id'];
  324.         // }, $result);
  325.         // $bulletinValues = array_unique($bulletinValues);
  326.         // $bulletinValues = implode(', ', $bulletinValues);
  327.         // // dd($bulletinValues);
  328.         // $requestSecond = "SELECT pdossier.id as id_dossier, pdossier.abreviation, pdossier.groupement, pdossier.designation as dossier, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  329.         //     pemploye.cin, tbulletin.id as bulletin_id, tbulletin.code as bulletin, ppiece.designation as type_bulletin, 'rémunération brute imposable' as element, sum(tbulletin_lg.montant) as montant, '1' as sens,
  330.         //     pnature_contract.designation as nature_contrat, pbareme_type.designation as type_bareme, pbordereau.code as bordereau, pstatut.designation as statut
  331.         //     FROM tbulletin_lg
  332.         //     INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  333.         //     INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  334.         //     INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  335.         //     INNER JOIN pnature_contract on pnature_contract.id = lcontract.pnature_contract_id
  336.         //     INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  337.         //     INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  338.         //     INNER JOIN pdossier on pdossier.id = lcontract.dossier_id
  339.         //     INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  340.         //     INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  341.         //     INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  342.         //     INNER JOIN pstatut on pstatut.id = pbordereau.statut_id
  343.         //     where tbulletin.periode_id = $periode and pbordereau.active = 1 and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.imposable = 1 and tbulletin.id in ($bulletinValues)
  344.         //     group by tbulletin.code 
  345.         //     UNION
  346.         //     SELECT pdossier.id as id_dossier, pdossier.abreviation, pdossier.groupement, pdossier.designation as dossier, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  347.         //     pemploye.cin,tbulletin.id as bulletin_id, tbulletin.code as bulletin, ppiece.designation as type_bulletin, 'rémunération brute' as element, sum(tbulletin_lg.montant) as montant, '1' as sens,
  348.         //     pnature_contract.designation as nature_contrat, pbareme_type.designation as type_bareme, pbordereau.code as bordereau, pstatut.designation as statut
  349.         //     FROM tbulletin_lg
  350.         //     INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  351.         //     INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  352.         //     INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  353.         //     INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  354.         //     INNER JOIN pnature_contract on pnature_contract.id = lcontract.pnature_contract_id
  355.         //     INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  356.         //     INNER JOIN pdossier on pdossier.id = lcontract.dossier_id
  357.         //     INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  358.         //     INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  359.         //     INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  360.         //     INNER JOIN pstatut on pstatut.id = pbordereau.statut_id
  361.         //     where  tbulletin.periode_id = $periode and pbordereau.active = 1  and tbulletin.active = 1 and tbulletin_lg.active = 1 and (prubrique.id in (1, 4, 6, 7,8,9) or prubrique.fixe = 1) and tbulletin.id in ($bulletinValues)
  362.         //     group by tbulletin.code 
  363.         //     UNION
  364.         //     SELECT pdossier.id as id_dossier, pdossier.abreviation, pdossier.groupement, pdossier.designation as dossier, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  365.         //     pemploye.cin,tbulletin.id as bulletin_id, tbulletin.code as bulletin, ppiece.designation as type_bulletin, prubrique.designation as element, tbulletin_lg.montant, tbulletin_lg.sens as sens,
  366.         //     pnature_contract.designation as nature_contrat, pbareme_type.designation as type_bareme, pbordereau.code as bordereau, pstatut.designation as statut
  367.         //     FROM tbulletin_lg
  368.         //     INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  369.         //     INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  370.         //     INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  371.         //     INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  372.         //     INNER JOIN pnature_contract on pnature_contract.id = lcontract.pnature_contract_id
  373.         //     INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  374.         //     INNER JOIN pdossier on pdossier.id = lcontract.dossier_id
  375.         //     INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  376.         //     INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  377.         //     INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  378.         //     INNER JOIN pstatut on pstatut.id = pbordereau.statut_id
  379.         //     where  tbulletin.periode_id = $periode and pbordereau.active = 1  and tbulletin.active = 1 and tbulletin_lg.active = 1 and  (prubrique.prets = 1 or prubrique.id in (5, 65)) and tbulletin.id in ($bulletinValues)
  380.         //     group by tbulletin.code 
  381.         //     "
  382.         // ;
  383.         $request "SELECT pdossier.id as id_dossier, pdossier.abreviation, pdossier.groupement, pdossier.designation as dossier, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  384.             pemploye.cin, tbulletin.code as bulletin, ppiece.designation as type_bulletin,prubrique.code as 'element_code', prubrique.designation as element, tbulletin_lg.montant, tbulletin_lg.sens,
  385.             pnature_contract.designation as nature_contrat, pbareme_type.designation as type_bareme, pbordereau.code as bordereau,  pbordereau.observation, pstatut.designation as statut
  386.             
  387.             FROM tbulletin_lg
  388.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  389.             INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  390.             INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  391.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  392.             INNER JOIN pnature_contract on pnature_contract.id = pbordereau.nature_contract_id
  393.             INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  394.             INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  395.             INNER JOIN pdossier on pdossier.id = tbulletin.dossier_id
  396.             INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  397.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  398.             INNER JOIN pstatut on pstatut.id = pbordereau.statut_id
  399.             where tbulletin.periode_id = $periode and pbordereau.active = 1  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.id in (50, 47, 53, 51, 52, 54, 55, 56, 58, 48, 57, 43, 5, 68)
  400.             UNION
  401.             SELECT pdossier.id as id_dossier, pdossier.abreviation, pdossier.groupement, pdossier.designation as dossier, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  402.             pemploye.cin, tbulletin.code as bulletin, ppiece.designation as type_bulletin, null as 'element_code', 'rémunération brute imposable' as element, sum(tbulletin_lg.montant) as montant, '1' as sens,
  403.             pnature_contract.designation as nature_contrat, pbareme_type.designation as type_bareme, pbordereau.code as bordereau, pbordereau.observation, pstatut.designation as statut
  404.             
  405.             FROM tbulletin_lg
  406.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  407.             INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  408.             INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  409.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  410.             INNER JOIN pnature_contract on pnature_contract.id = pbordereau.nature_contract_id
  411.             INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  412.             INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  413.             INNER JOIN pdossier on pdossier.id = tbulletin.dossier_id
  414.             INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  415.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  416.             INNER JOIN pstatut on pstatut.id = pbordereau.statut_id
  417.             where tbulletin.periode_id = $periode and pbordereau.active = 1  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.imposable = 1
  418.             group by tbulletin.code 
  419.             UNION
  420.             SELECT pdossier.id as id_dossier, pdossier.abreviation, pdossier.groupement, pdossier.designation as dossier, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  421.             pemploye.cin, tbulletin.code as bulletin, ppiece.designation as type_bulletin,
  422.             CASE WHEN prubrique.honoraire = 1 THEN prubrique.designation WHEN prubrique.indeminite = 1 THEN prubrique.code ELSE null END as element_code,
  423.             CASE WHEN prubrique.honoraire = 1 THEN prubrique.designation WHEN prubrique.indeminite = 1 THEN prubrique.designation ELSE 'rémunération brute' END as element, sum(tbulletin_lg.montant) as montant, '1' as sens,
  424.             pnature_contract.designation as nature_contrat, pbareme_type.designation as type_bareme, pbordereau.code as bordereau, pbordereau.observation, pstatut.designation as statut
  425.             
  426.             FROM tbulletin_lg
  427.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  428.             INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  429.             INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  430.             INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  431.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  432.             INNER JOIN pnature_contract on pnature_contract.id = pbordereau.nature_contract_id
  433.             INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  434.             INNER JOIN pdossier on pdossier.id = tbulletin.dossier_id
  435.             INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  436.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  437.             INNER JOIN pstatut on pstatut.id = pbordereau.statut_id
  438.             where tbulletin.periode_id = $periode and pbordereau.active = 1  and tbulletin.active = 1 and tbulletin_lg.active = 1 
  439.             and (
  440.                     ((prubrique.id in (1,2, 4, 6, 7,8,9)  or prubrique.fixe = 1 ) and pbordereau.type = 'paie') or 
  441.                     (prubrique.honoraire = 1 and pbordereau.type = 'honoraire') or
  442.                     prubrique.indeminite = 1
  443.             )
  444.             group by tbulletin.code 
  445.             UNION
  446.             SELECT pdossier.id as id_dossier, pdossier.abreviation, pdossier.groupement, pdossier.designation as dossier, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  447.             pemploye.cin,tbulletin.code as bulletin, ppiece.designation as type_bulletin,prubrique.code as element_code, prubrique.designation as element, sum(tbulletin_lg.montant) as montant, tbulletin_lg.sens as sens,
  448.             pnature_contract.designation as nature_contrat, pbareme_type.designation as type_bareme, pbordereau.code as bordereau, pbordereau.observation, pstatut.designation as statut
  449.             FROM tbulletin_lg
  450.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  451.             INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  452.             INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  453.             INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  454.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  455.             INNER JOIN pnature_contract on pnature_contract.id = pbordereau.nature_contract_id
  456.             INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  457.             INNER JOIN pdossier on pdossier.id = tbulletin.dossier_id
  458.             INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  459.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  460.             INNER JOIN pstatut on pstatut.id = pbordereau.statut_id
  461.             where  tbulletin.periode_id = $periode and pbordereau.active = 1  and tbulletin.active = 1 and tbulletin_lg.active = 1 and  prubrique.prets = 1
  462.             group by tbulletin.code, prubrique.designation;
  463.             ";
  464.         $stmt $connection->prepare($request);
  465.         $newstmt $stmt->executeQuery();
  466.         $resultSecond $newstmt->fetchAll();
  467.         // dd($resultSecond[0]);
  468.         // $result = array_merge($resultSecond, $result);
  469.         return new JsonResponse($resultSecond);
  470.         // $spreadsheet = new Spreadsheet();
  471.         // $sheet = $spreadsheet->getActiveSheet();
  472.         // $sheet->setCellValue('A1', 'Id Dossier');
  473.         // $sheet->setCellValue('B1', 'Dossier');
  474.         // $sheet->setCellValue('C1', 'Id Contrat');
  475.         // $sheet->setCellValue('D1', 'Nom');
  476.         // $sheet->setCellValue('E1', 'Prenom');
  477.         // $sheet->setCellValue('F1', 'Cin');
  478.         // $sheet->setCellValue('G1', 'Bulletin'); 
  479.         // $sheet->setCellValue('H1', 'Element'); 
  480.         // $sheet->setCellValue('I1', 'Montant'); 
  481.         // $sheet->setCellValue('J1', 'Sens'); 
  482.         // $cotisations = [50, 47, 53, 51, 52, 54, 55, 56, 58, 48, 57, 43];
  483.         // $rubriques = $this->em->getRepository(Prubrique::class)->findBy(['id' => $cotisations]);
  484.         // $bulletins = $this->em->getRepository(Tbulletin::class)->findBy(['active' => true, 'periode'=> $periode, 'piece' => $this->em->getRepository(PPiece::class)->find(1)]);
  485.         // $bulletinLgs = $this->em->getRepository(TbulletinLg::class)->findBy(['bulletin' => $bulletins, 'rubrique' => $rubriques, 'active' => true]);
  486.         // // dd($bulletinLgs);
  487.         // $i = 2;
  488.         // foreach ($bulletinLgs as $key => $bulletinLg) {
  489.         //     $bulletin = $bulletinLg->getBulletin();
  490.         //     $sheet->setCellValue('A'.$i, $bulletin->getContract()->getDossier()->getId());
  491.         //     $sheet->setCellValue('B'.$i, $bulletin->getContract()->getDossier()->getAbreviation());
  492.         //     $sheet->setCellValue('C'.$i, $bulletin->getContract()->getId());
  493.         //     $sheet->setCellValue('D'.$i, $bulletin->getContract()->getEmploye()->getNom());
  494.         //     $sheet->setCellValue('E'.$i, $bulletin->getContract()->getEmploye()->getPrenom());
  495.         //     $sheet->setCellValue('F'.$i, $bulletin->getContract()->getEmploye()->getCin());
  496.         //     $sheet->setCellValue('G'.$i, $bulletin->getCode()); 
  497.         //     $sheet->setCellValue('H'.$i, $bulletinLg->getRubrique()->getDesignation()); 
  498.         //     $sheet->setCellValue('I'.$i, $bulletinLg->getMontant());
  499.         //     $sheet->setCellValue('J'.$i, $bulletinLg->getSens());
  500.         //     $i++;
  501.         // }
  502.         // $writer = new Xlsx($spreadsheet);
  503.         // $fileName = 'charge_sociale_'.$periode->getCode().'.xlsx';
  504.         // $temp_file = tempnam(sys_get_temp_dir(), $fileName);
  505.         // $writer->save($temp_file);
  506.         // return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
  507.     }
  508.     #[Route('/app_reporting_extraction_masse_salariale/{periode}'name'app_reporting_extraction_masse_salariale'options: ['expose' => true])]
  509.     public function app_reporting_extraction_masse_salariale(Request $request$periode): Response
  510.     {
  511.         $connection $this->em->getConnection();
  512.         $date = new \DateTime($periode);
  513.         $periode $this->calculPaieService->getPeriode($date->format('mY'));
  514.         $periode $periode->getId();
  515.         $request "SELECT pdossier.id as id_dossier, pdossier.designation as dossier, pfcy.id as id_fcy, pfcy.fcy0, pfcy.fcy0_libelle,pemploye.id as employe_id, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  516.             pnature_contract.designation as nature_contrat, pemploye.cin, tbulletin.code as bulletin,prubrique.designation as element, tbulletin_lg.montant, tbulletin_lg.montant_devise, tbulletin_lg.sens,
  517.             ppiece.designation as type, pbareme_type.designation as type_bareme, pfonction.designation as fonction, lcontract.date_anciennete , tbulletin_lg.id,pbordereau.id as id_bordereau, pbordereau.code as bordereau, pbordereau.observation as bordereau_observation,ppaiement.designation as paiement, pbordereau.date_integration
  518.             
  519.             FROM tbulletin_lg
  520.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  521.             INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  522.             INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  523.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  524.             INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  525.             INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  526.             INNER JOIN pdossier on pdossier.id = pbordereau.dossier_id
  527.             INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  528.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  529.             INNER JOIN ppaiement on ppaiement.id = pbordereau.paiement_id
  530.             LEFT JOIN pfonction on pfonction.id = lcontract.fonction_id
  531.             LEFT JOIN pnature_contract on pnature_contract.id = pbordereau.nature_contract_id
  532.             LEFT JOIN pfcy on pfcy.id = pdossier.fcy_id
  533.             where  tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and pbordereau.active = 1
  534.             UNION
  535.             SELECT pdossier.id as id_dossier, pdossier.designation as dossier, pfcy.id as id_fcy, pfcy.fcy0, pfcy.fcy0_libelle, pemploye.id as employe_id, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  536.             pnature_contract.designation as nature_contrat, pemploye.cin, tbulletin.code as bulletin, 'rémunération brute imposable' as element, sum(tbulletin_lg.montant) as montant, sum(tbulletin_lg.montant_devise) as montant_devise, '1' as sens,
  537.             ppiece.designation as type, pbareme_type.designation as type_bareme, pfonction.designation as fonction, lcontract.date_anciennete , tbulletin_lg.id,pbordereau.id as id_bordereau, pbordereau.code as bordereau, pbordereau.observation as bordereau_observation,ppaiement.designation as paiement, pbordereau.date_integration
  538.             
  539.             FROM tbulletin_lg
  540.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  541.             INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  542.             INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  543.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  544.             INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  545.             INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  546.             INNER JOIN pdossier on pdossier.id = pbordereau.dossier_id
  547.             INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  548.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  549.             INNER JOIN ppaiement on ppaiement.id = pbordereau.paiement_id
  550.             LEFT JOIN pfonction on pfonction.id = lcontract.fonction_id
  551.             LEFT JOIN pnature_contract on pnature_contract.id = pbordereau.nature_contract_id
  552.             LEFT JOIN pfcy on pfcy.id = pdossier.fcy_id
  553.             where  tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.imposable = 1 and pbordereau.active = 1
  554.             group by tbulletin.code 
  555.             UNION
  556.             SELECT pdossier.id as id_dossier, pdossier.designation as dossier, pfcy.id as id_fcy, pfcy.fcy0, pfcy.fcy0_libelle,pemploye.id as employe_id, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  557.             pnature_contract.designation as nature_contrat,pemploye.cin, tbulletin.code as bulletin, 'rémunération brute' as element, sum(tbulletin_lg.montant) as montant, sum(tbulletin_lg.montant_devise) as montant_devise, '1' as sens,
  558.             ppiece.designation as type, pbareme_type.designation as type_bareme, pfonction.designation as fonction, lcontract.date_anciennete , tbulletin_lg.id,pbordereau.id as id_bordereau, pbordereau.code as bordereau, pbordereau.observation as bordereau_observation,ppaiement.designation as paiement, pbordereau.date_integration
  559.             
  560.             FROM tbulletin_lg
  561.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  562.             INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  563.             INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  564.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  565.             INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  566.             INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  567.             INNER JOIN pdossier on pdossier.id = pbordereau.dossier_id
  568.             INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  569.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  570.             INNER JOIN ppaiement on ppaiement.id = pbordereau.paiement_id
  571.             LEFT JOIN pfonction on pfonction.id = lcontract.fonction_id
  572.             LEFT JOIN pnature_contract on pnature_contract.id = pbordereau.nature_contract_id
  573.             LEFT JOIN pfcy on pfcy.id = pdossier.fcy_id
  574.             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) and pbordereau.active = 1
  575.             group by tbulletin.code 
  576.             UNION
  577.             SELECT pdossier.id as id_dossier, pdossier.designation as dossier, pfcy.id as id_fcy, pfcy.fcy0, pfcy.fcy0_libelle,pemploye.id as employe_id, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  578.             pnature_contract.designation as nature_contrat,pemploye.cin, tbulletin.code as bulletin, 'cotisation PS' as element, sum(tbulletin_lg.montant) as montant, sum(tbulletin_lg.montant_devise) as montant_devise, '1' as sens,
  579.             ppiece.designation as type, pbareme_type.designation as type_bareme, pfonction.designation as fonction, lcontract.date_anciennete , tbulletin_lg.id,pbordereau.id as id_bordereau, pbordereau.code as bordereau, pbordereau.observation as bordereau_observation,ppaiement.designation as paiement, pbordereau.date_integration
  580.             
  581.             FROM tbulletin_lg
  582.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  583.             INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  584.             INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  585.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  586.             INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  587.             INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  588.             INNER JOIN pdossier on pdossier.id = pbordereau.dossier_id
  589.             INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  590.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  591.             INNER JOIN ppaiement on ppaiement.id = pbordereau.paiement_id
  592.             LEFT JOIN pfonction on pfonction.id = lcontract.fonction_id
  593.             LEFT JOIN pnature_contract on pnature_contract.id = pbordereau.nature_contract_id
  594.             LEFT JOIN pfcy on pfcy.id = pdossier.fcy_id
  595.             where  tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.id in (50, 47, 53, 48) and pbordereau.active = 1
  596.             group by tbulletin.code 
  597.             UNION
  598.             SELECT pdossier.id as id_dossier, pdossier.designation as dossier, pfcy.id as id_fcy, pfcy.fcy0, pfcy.fcy0_libelle,pemploye.id as employe_id, lcontract.id as id_contract, pemploye.nom, pemploye.prenom,
  599.             pnature_contract.designation as nature_contrat,pemploye.cin, tbulletin.code as bulletin, 'cotisation PP' as element, sum(tbulletin_lg.montant) as montant, sum(tbulletin_lg.montant_devise) as montant_devise, '1' as sens,
  600.             ppiece.designation as type, pbareme_type.designation as type_bareme, pfonction.designation as fonction, lcontract.date_anciennete , tbulletin_lg.id,pbordereau.id as id_bordereau, pbordereau.code as bordereau, pbordereau.observation as bordereau_observation,ppaiement.designation as paiement, pbordereau.date_integration
  601.             
  602.             FROM tbulletin_lg
  603.             INNER JOIN tbulletin on tbulletin.id = tbulletin_lg.bulletin_id
  604.             INNER JOIN ppiece on ppiece.id = tbulletin.piece_id
  605.             INNER JOIN lcontract on lcontract.id = tbulletin.contract_id
  606.             INNER JOIN pbordereau on pbordereau.id = tbulletin.bordereau_id
  607.             INNER JOIN pbareme on lcontract.bareme_id = pbareme.id
  608.             INNER JOIN pbareme_type on pbareme.bareme_type_id = pbareme_type.id
  609.             INNER JOIN pdossier on pdossier.id = pbordereau.dossier_id
  610.             INNER JOIN pemploye on pemploye.id = lcontract.employe_id
  611.             INNER JOIN prubrique on prubrique.id = tbulletin_lg.rubrique_id
  612.             INNER JOIN ppaiement on ppaiement.id = pbordereau.paiement_id
  613.             LEFT JOIN pfonction on pfonction.id = lcontract.fonction_id
  614.             LEFT JOIN pnature_contract on pnature_contract.id = pbordereau.nature_contract_id
  615.             LEFT JOIN pfcy on pfcy.id = pdossier.fcy_id
  616.             where  tbulletin.periode_id = $periode  and tbulletin.active = 1 and tbulletin_lg.active = 1 and prubrique.id in (51, 52, 54, 55, 56, 58, 57) and pbordereau.active = 1
  617.             group by tbulletin.code 
  618.         ";
  619.         $stmt $connection->prepare($request);
  620.         $newstmt $stmt->executeQuery();
  621.         $result $newstmt->fetchAll();
  622.         return new JsonResponse($result);
  623.         // $spreadsheet = new Spreadsheet();
  624.         // $sheet = $spreadsheet->getActiveSheet();
  625.         // $sheet->setCellValue('A1', 'Id Dossier');
  626.         // $sheet->setCellValue('B1', 'Dossier');
  627.         // $sheet->setCellValue('C1', 'Id Contrat');
  628.         // $sheet->setCellValue('D1', 'Nom');
  629.         // $sheet->setCellValue('E1', 'Prenom');
  630.         // $sheet->setCellValue('F1', 'Cin');
  631.         // $sheet->setCellValue('G1', 'Bulletin'); 
  632.         // $sheet->setCellValue('H1', 'Element'); 
  633.         // $sheet->setCellValue('I1', 'Montant'); 
  634.         // $sheet->setCellValue('J1', 'Sens'); 
  635.         // $sheet->setCellValue('K1', 'type'); 
  636.         // $sheet->setCellValue('L1', 'type bareme'); 
  637.         // $bulletins = $this->em->getRepository(Tbulletin::class)->findBy(['active' => true, 'periode'=> $periode]);
  638.         // // dd($bulletinLgs);
  639.         // $i = 2;
  640.         // foreach ($bulletins as $key => $bulletin) {
  641.         //     $montantBruteImposable = $this->em->createQueryBuilder()
  642.         //         ->select('sum(TbulletinLg.montant) as montant')
  643.         //         ->from(TbulletinLg::class, 'TbulletinLg')
  644.         //         ->innerJoin('TbulletinLg.bulletin', 'bulletin')
  645.         //         ->innerJoin('TbulletinLg.rubrique', 'rubrique')
  646.         //         ->andWhere('rubrique.imposable = 1')
  647.         //         ->andWhere('TbulletinLg.active = 1')
  648.         //         ->andWhere('bulletin.id = :bulletin')
  649.         //         ->setParameter('bulletin', $bulletin)
  650.         //         ->getQuery()
  651.         //         ->getOneOrNullResult()
  652.         //     ;
  653.         //     $montantBrute = $this->em->createQueryBuilder()
  654.         //         ->select('sum(TbulletinLg.montant) as montant')
  655.         //         ->from(TbulletinLg::class, 'TbulletinLg')
  656.         //         ->innerJoin('TbulletinLg.bulletin', 'bulletin')
  657.         //         ->innerJoin('TbulletinLg.rubrique', 'rubrique')
  658.         //         ->andWhere('rubrique.id in (1, 4, 6, 7,8,9) or rubrique.fixe = 1')
  659.         //         ->andWhere('TbulletinLg.active = 1')
  660.         //         ->andWhere('bulletin.id = :bulletin')
  661.         //         ->setParameter('bulletin', $bulletin)
  662.         //         ->getQuery()
  663.         //         ->getOneOrNullResult()
  664.         //     ;
  665.         //     $cotisationsPS = [50, 47, 53, 48];
  666.         //     $cotisationsPP = [51, 52, 54, 55, 56, 58, 57];
  667.         //     $montantCotisationcotisationsPS = $this->em->createQueryBuilder()
  668.         //         ->select('sum(TbulletinLg.montant) as montant')
  669.         //         ->from(TbulletinLg::class, 'TbulletinLg')
  670.         //         ->innerJoin('TbulletinLg.bulletin', 'bulletin')
  671.         //         ->innerJoin('TbulletinLg.rubrique', 'rubrique')
  672.         //         ->andWhere('rubrique.id in (:cotisations)')
  673.         //         ->andWhere('TbulletinLg.active = 1')
  674.         //         ->andWhere('bulletin.id = :bulletin')
  675.         //         ->setParameter('bulletin', $bulletin)
  676.         //         ->setParameter('cotisations', $cotisationsPS)
  677.         //         ->getQuery()
  678.         //         ->getOneOrNullResult()
  679.         //     ;
  680.         //     $montantCotisationcotisationsPP = $this->em->createQueryBuilder()
  681.         //         ->select('sum(TbulletinLg.montant) as montant')
  682.         //         ->from(TbulletinLg::class, 'TbulletinLg')
  683.         //         ->innerJoin('TbulletinLg.bulletin', 'bulletin')
  684.         //         ->innerJoin('TbulletinLg.rubrique', 'rubrique')
  685.         //         ->andWhere('rubrique.id in (:cotisations)')
  686.         //         ->andWhere('TbulletinLg.active = 1')
  687.         //         ->andWhere('bulletin.id = :bulletin')
  688.         //         ->setParameter('bulletin', $bulletin)
  689.         //         ->setParameter('cotisations', $cotisationsPP)
  690.         //         ->getQuery()
  691.         //         ->getOneOrNullResult()
  692.         //     ;
  693.         //     $bulletinLgs = $this->em->getRepository(TbulletinLg::class)->findBy(['bulletin' => $bulletin, 'active' => true]);
  694.         //     foreach ($bulletinLgs as $key => $bulletinLg) {
  695.         //         $sheet->setCellValue('A'.$i, $bulletin->getContract()->getDossier()->getId());
  696.         //         $sheet->setCellValue('B'.$i, $bulletin->getContract()->getDossier()->getAbreviation());
  697.         //         $sheet->setCellValue('C'.$i, $bulletin->getContract()->getId());
  698.         //         $sheet->setCellValue('D'.$i, $bulletin->getContract()->getEmploye()->getNom());
  699.         //         $sheet->setCellValue('E'.$i, $bulletin->getContract()->getEmploye()->getPrenom());
  700.         //         $sheet->setCellValue('F'.$i, $bulletin->getContract()->getEmploye()->getCin());
  701.         //         $sheet->setCellValue('G'.$i, $bulletin->getCode()); 
  702.         //         $sheet->setCellValue('H'.$i, $bulletinLg->getRubrique()->getDesignation()); 
  703.         //         $sheet->setCellValue('I'.$i, $bulletinLg->getMontant());
  704.         //         $sheet->setCellValue('J'.$i, $bulletinLg->getSens());
  705.         //         $sheet->setCellValue('K'.$i, $bulletin->getPPiece()->getDesignation());
  706.         //         $sheet->setCellValue('L'.$i, $bulletin->getContract()->getBareme()->getBaremeType()->getDesignation());
  707.         //         $i++;
  708.         //     }
  709.         //     if($montantCotisationcotisationsPS) {
  710.         //         $sheet->setCellValue('A'.$i, $bulletin->getContract()->getDossier()->getId());
  711.         //         $sheet->setCellValue('B'.$i, $bulletin->getContract()->getDossier()->getAbreviation());
  712.         //         $sheet->setCellValue('C'.$i, $bulletin->getContract()->getId());
  713.         //         $sheet->setCellValue('D'.$i, $bulletin->getContract()->getEmploye()->getNom());
  714.         //         $sheet->setCellValue('E'.$i, $bulletin->getContract()->getEmploye()->getPrenom());
  715.         //         $sheet->setCellValue('F'.$i, $bulletin->getContract()->getEmploye()->getCin());
  716.         //         $sheet->setCellValue('G'.$i, $bulletin->getCode()); 
  717.         //         $sheet->setCellValue('H'.$i, 'Cotisation PS'); 
  718.         //         $sheet->setCellValue('I'.$i, $montantCotisationcotisationsPS['montant']);
  719.         //         $sheet->setCellValue('J'.$i, '-1');
  720.         //         $sheet->setCellValue('K'.$i, $bulletin->getPPiece()->getDesignation());
  721.         //         $sheet->setCellValue('L'.$i, $bulletin->getContract()->getBareme()->getBaremeType()->getDesignation());
  722.         //         $i++;
  723.         //     }
  724.         //     if($montantCotisationcotisationsPP) {
  725.         //         $sheet->setCellValue('A'.$i, $bulletin->getContract()->getDossier()->getId());
  726.         //         $sheet->setCellValue('B'.$i, $bulletin->getContract()->getDossier()->getAbreviation());
  727.         //         $sheet->setCellValue('C'.$i, $bulletin->getContract()->getId());
  728.         //         $sheet->setCellValue('D'.$i, $bulletin->getContract()->getEmploye()->getNom());
  729.         //         $sheet->setCellValue('E'.$i, $bulletin->getContract()->getEmploye()->getPrenom());
  730.         //         $sheet->setCellValue('F'.$i, $bulletin->getContract()->getEmploye()->getCin());
  731.         //         $sheet->setCellValue('G'.$i, $bulletin->getCode()); 
  732.         //         $sheet->setCellValue('H'.$i, 'Cotisation PP'); 
  733.         //         $sheet->setCellValue('I'.$i, $montantCotisationcotisationsPP['montant']);
  734.         //         $sheet->setCellValue('J'.$i, '-1');
  735.         //         $sheet->setCellValue('K'.$i, $bulletin->getPPiece()->getDesignation());
  736.         //         $sheet->setCellValue('L'.$i, $bulletin->getContract()->getBareme()->getBaremeType()->getDesignation());
  737.         //         $i++;
  738.         //     }
  739.         //     if($montantBrute) {
  740.         //         $sheet->setCellValue('A'.$i, $bulletin->getContract()->getDossier()->getId());
  741.         //         $sheet->setCellValue('B'.$i, $bulletin->getContract()->getDossier()->getAbreviation());
  742.         //         $sheet->setCellValue('C'.$i, $bulletin->getContract()->getId());
  743.         //         $sheet->setCellValue('D'.$i, $bulletin->getContract()->getEmploye()->getNom());
  744.         //         $sheet->setCellValue('E'.$i, $bulletin->getContract()->getEmploye()->getPrenom());
  745.         //         $sheet->setCellValue('F'.$i, $bulletin->getContract()->getEmploye()->getCin());
  746.         //         $sheet->setCellValue('G'.$i, $bulletin->getCode()); 
  747.         //         $sheet->setCellValue('H'.$i, 'rémunération brute'); 
  748.         //         $sheet->setCellValue('I'.$i, $montantBrute['montant']);
  749.         //         $sheet->setCellValue('J'.$i, '1');
  750.         //         $sheet->setCellValue('K'.$i, $bulletin->getPPiece()->getDesignation());
  751.         //         $sheet->setCellValue('L'.$i, $bulletin->getContract()->getBareme()->getBaremeType()->getDesignation());
  752.         //         $i++;
  753.         //     }
  754.         //     if($montantBruteImposable) {
  755.         //         $sheet->setCellValue('A'.$i, $bulletin->getContract()->getDossier()->getId());
  756.         //         $sheet->setCellValue('B'.$i, $bulletin->getContract()->getDossier()->getAbreviation());
  757.         //         $sheet->setCellValue('C'.$i, $bulletin->getContract()->getId());
  758.         //         $sheet->setCellValue('D'.$i, $bulletin->getContract()->getEmploye()->getNom());
  759.         //         $sheet->setCellValue('E'.$i, $bulletin->getContract()->getEmploye()->getPrenom());
  760.         //         $sheet->setCellValue('F'.$i, $bulletin->getContract()->getEmploye()->getCin());
  761.         //         $sheet->setCellValue('G'.$i, $bulletin->getCode()); 
  762.         //         $sheet->setCellValue('H'.$i, 'rémunération brute imposable'); 
  763.         //         $sheet->setCellValue('I'.$i, $montantBruteImposable['montant']);
  764.         //         $sheet->setCellValue('J'.$i, '1');
  765.         //         $sheet->setCellValue('K'.$i, $bulletin->getPPiece()->getDesignation());
  766.         //         $sheet->setCellValue('L'.$i, $bulletin->getContract()->getBareme()->getBaremeType()->getDesignation());
  767.         //         $i++;
  768.         //     }
  769.         // }
  770.         // $writer = new Xlsx($spreadsheet);
  771.         // $fileName = 'masse_salariale_'.$periode->getCode().'.xlsx';
  772.         // $temp_file = tempnam(sys_get_temp_dir(), $fileName);
  773.         // $writer->save($temp_file);
  774.         // return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
  775.     }
  776.     #[Route('/app_reporting_extraction_prelevement'name'app_reporting_extraction_prelevement'options: ['expose' => true])]
  777.     public function app_reporting_extraction_prelevement(Request $request): Response
  778.     {
  779.         $spreadsheet = new Spreadsheet();
  780.         $sheet $spreadsheet->getActiveSheet();
  781.         $sheet->setCellValue('A1''Id Dossier');
  782.         $sheet->setCellValue('B1''Dossier');
  783.         $sheet->setCellValue('C1''Id Contrat');
  784.         $sheet->setCellValue('D1''Nom');
  785.         $sheet->setCellValue('E1''Prenom');
  786.         $sheet->setCellValue('F1''Cin');
  787.         $sheet->setCellValue('G1''Prelevement');
  788.         $sheet->setCellValue('H1''Element');
  789.         $sheet->setCellValue('I1''nombre de mois');
  790.         $sheet->setCellValue('J1''Montant');
  791.         $sheet->setCellValue('K1''Montant echeance');
  792.         $sheet->setCellValue('L1''Periode');
  793.         $sheet->setCellValue('M1''active');
  794.         $sheet->setCellValue('N1''Montant');
  795.         $sheet->setCellValue('O1''Bulletin');
  796.         // $cotisations = [50, 47, 53, 51, 52, 54, 55, 56, 58, 48, 57, 43];
  797.         // $rubriques = $this->em->getRepository(Prubrique::class)->findBy(['id' => $cotisations]);
  798.         $prelevements $this->em->getRepository(PPrelevement::class)->findBy(['active' => true]);
  799.         // dd($bulletinLgs);
  800.         $i 2;
  801.         foreach ($prelevements as $key => $prelevement) {
  802.             foreach ($prelevement->getPrelevementLgs() as $key => $prelevementLg) {
  803.                 $bulletin $prelevementLg->getBulletin();
  804.                 $sheet->setCellValue('A' $i$prelevement->getContract()->getDossier()->getId());
  805.                 $sheet->setCellValue('B' $i$prelevement->getContract()->getDossier()->getAbreviation());
  806.                 $sheet->setCellValue('C' $i$prelevement->getContract()->getId());
  807.                 $sheet->setCellValue('D' $i$prelevement->getContract()->getEmploye()->getNom());
  808.                 $sheet->setCellValue('E' $i$prelevement->getContract()->getEmploye()->getPrenom());
  809.                 $sheet->setCellValue('F' $i$prelevement->getContract()->getEmploye()->getCin());
  810.                 $sheet->setCellValue('G' $i$prelevement->getCode());
  811.                 $sheet->setCellValue('H' $i$prelevement->getRubrique()->getDesignation());
  812.                 $sheet->setCellValue('I' $i$prelevement->getNombreMois());
  813.                 $sheet->setCellValue('J' $i$prelevement->getMontant());
  814.                 $sheet->setCellValue('K' $i$prelevement->getMontantEcheance());
  815.                 $sheet->setCellValue('L' $i$prelevementLg->getPeriode()->getCode());
  816.                 $sheet->setCellValue('M' $i$prelevementLg->isActive());
  817.                 $sheet->setCellValue('N' $i$prelevementLg->getMontant());
  818.                 $sheet->setCellValue('O' $i$prelevementLg->getBulletin() ? $prelevementLg->getBulletin()->getCode() : '');
  819.                 $i++;
  820.             }
  821.         }
  822.         $writer = new Xlsx($spreadsheet);
  823.         $fileName 'prelevements.xlsx';
  824.         $temp_file tempnam(sys_get_temp_dir(), $fileName);
  825.         $writer->save($temp_file);
  826.         return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  827.     }
  828.     #[Route('/app_reporting_extraction_cnss_b04/{periode}'name'app_reporting_extraction_cnss_b04'options: ['expose' => true])]
  829.     public function app_reporting_extraction_cnss_b04(Request $request$periode): Response
  830.     {
  831.         $periode str_replace('-'''$periode);
  832.         $spreadsheet = new Spreadsheet();
  833.         $sheet $spreadsheet->getActiveSheet();
  834.         $sheet->setCellValue('A1''Cin');
  835.         $sheet->setCellValue('B1''Id Contrat');
  836.         $sheet->setCellValue('C1''type_enreg');
  837.         $sheet->setCellValue('D1''num_affilie');
  838.         $sheet->setCellValue('E1''periode');
  839.         $sheet->setCellValue('F1''num_assure');
  840.         $sheet->setCellValue('G1''nom_prenom');
  841.         $sheet->setCellValue('H1''num_cin');
  842.         $sheet->setCellValue('I1''nbr_jours');
  843.         $sheet->setCellValue('J1''sal_reel');
  844.         $sheet->setCellValue('K1''sal_plaf');
  845.         $sheet->setCellValue('L1''s_ctr');
  846.         $sheet->setCellValue('M1''filler');
  847.         $sheet->setCellValue('N1''site');
  848.         $sheet->setCellValue('O1''montant reel');
  849.         $sheet->setCellValue('P1''montant plaf');
  850.         // $cotisations = [50, 47, 53, 51, 52, 54, 55, 56, 58, 48, 57, 43];
  851.         // $rubriques = $this->em->getRepository(Prubrique::class)->findBy(['id' => $cotisations]);
  852.         $tcnss00s $this->em->getRepository(TCnssA00::class)->findBy(['active' => true'periode' => $periode]);
  853.         $tcnssb00s $this->em->getRepository(TCnssB00::class)->findBy(['cnssa00' => $tcnss00s]);
  854.         // dd($tcnssb00s);
  855.         $i 2;
  856.         foreach ($tcnssb00s as $key => $tcnssb00) {
  857.             foreach ($tcnssb00->getTCnssB04s() as $key => $tcnssB04) {
  858.                 $sheet->setCellValue('A' $i$tcnssB04->getContract() ? $tcnssB04->getContract()->getEmploye()->getCin() : '');
  859.                 $sheet->setCellValue('B' $i$tcnssB04->getContract() ? $tcnssB04->getContract()->getId() : '');
  860.                 $sheet->setCellValue('C' $i$tcnssB04->getTypeEnreg());
  861.                 $sheet->setCellValue('D' $i$tcnssB04->getNumAffilie());
  862.                 $sheet->setCellValue('E' $i$tcnssB04->getPeriode());
  863.                 $sheet->setCellValue('F' $i$tcnssB04->getNumAssure());
  864.                 $sheet->setCellValue('G' $i$tcnssB04->getNomPrenom());
  865.                 $sheet->setCellValue('H' $i$tcnssB04->getNumCin());
  866.                 $sheet->setCellValue('I' $i$tcnssB04->getNbrJours());
  867.                 $sheet->setCellValue('J' $i$tcnssB04->getSalReel());
  868.                 $sheet->setCellValue('K' $i$tcnssB04->getSalPlaf());
  869.                 $sheet->setCellValue('L' $i$tcnssB04->getSCtr());
  870.                 $sheet->setCellValue('M' $i$tcnssB04->getFiller());
  871.                 $sheet->setCellValue('N' $i$tcnssB04->getSite());
  872.                 $sheet->setCellValue('O' $i$tcnssB04->getMontantReel());
  873.                 $sheet->setCellValue('P' $i$tcnssB04->getMontantPlaf());
  874.                 $i++;
  875.             }
  876.         }
  877.         $writer = new Xlsx($spreadsheet);
  878.         $fileName 'cnssb04_' $periode '.xlsx';
  879.         $temp_file tempnam(sys_get_temp_dir(), $fileName);
  880.         $writer->save($temp_file);
  881.         return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  882.     }
  883.     #[Route('/app_reporting_extraction_cnss_b02/{periode}'name'app_reporting_extraction_cnss_b02'options: ['expose' => true])]
  884.     public function app_reporting_extraction_cnss_b02(Request $request$periode): Response
  885.     {
  886.         $periode str_replace('-'''$periode);
  887.         $spreadsheet = new Spreadsheet();
  888.         $sheet $spreadsheet->getActiveSheet();
  889.         $sheet->setCellValue('A1''Cin');
  890.         $sheet->setCellValue('B1''Id Contrat');
  891.         $sheet->setCellValue('C1''type_enreg');
  892.         $sheet->setCellValue('D1''num_affilie');
  893.         $sheet->setCellValue('E1''periode');
  894.         $sheet->setCellValue('F1''num_assure');
  895.         $sheet->setCellValue('G1''nom_prenom');
  896.         $sheet->setCellValue('H1''enfants');
  897.         $sheet->setCellValue('I1''af_apayer');
  898.         $sheet->setCellValue('J1''af_adeduire');
  899.         $sheet->setCellValue('K1''af_net_apayer');
  900.         $sheet->setCellValue('L1''af_areverser');
  901.         $sheet->setCellValue('M1''n_jours_declares');
  902.         $sheet->setCellValue('N1''n_salaire_reel');
  903.         $sheet->setCellValue('O1''n_salaire_plaf');
  904.         $sheet->setCellValue('P1''l_situation');
  905.         $sheet->setCellValue('Q1''l_situation_num');
  906.         $sheet->setCellValue('R1''s_ctr');
  907.         $sheet->setCellValue('S1''filler');
  908.         $sheet->setCellValue('T1''site');
  909.         $sheet->setCellValue('U1''statut');
  910.         $sheet->setCellValue('V1''montant reel');
  911.         $sheet->setCellValue('W1''montant plaf');
  912.         // $cotisations = [50, 47, 53, 51, 52, 54, 55, 56, 58, 48, 57, 43];
  913.         // $rubriques = $this->em->getRepository(Prubrique::class)->findBy(['id' => $cotisations]);
  914.         $tcnss00s $this->em->getRepository(TCnssA00::class)->findBy(['active' => true'periode' => $periode]);
  915.         $tcnssb00s $this->em->getRepository(TCnssB00::class)->findBy(['cnssa00' => $tcnss00s]);
  916.         // dd($tcnssb00s);
  917.         $i 2;
  918.         foreach ($tcnssb00s as $key => $tcnssb00) {
  919.             foreach ($tcnssb00->getTCnssB02s() as $key => $tcnssB02) {
  920.                 $sheet->setCellValue('A' $i$tcnssB02->getContract() ? $tcnssB02->getContract()->getEmploye()->getCin() : '');
  921.                 $sheet->setCellValue('B' $i$tcnssB02->getContract() ? $tcnssB02->getContract()->getId() : '');
  922.                 $sheet->setCellValue('C' $i$tcnssB02->getTypeEnreg());
  923.                 $sheet->setCellValue('D' $i$tcnssB02->getNumAffilie());
  924.                 $sheet->setCellValue('E' $i$tcnssB02->getPeriode());
  925.                 $sheet->setCellValue('F' $i$tcnssB02->getNumAssure());
  926.                 $sheet->setCellValue('G' $i$tcnssB02->getNomPrenom());
  927.                 $sheet->setCellValue('H' $i$tcnssB02->getEnfants());
  928.                 $sheet->setCellValue('I' $i$tcnssB02->getAfApayer());
  929.                 $sheet->setCellValue('J' $i$tcnssB02->getAfAdeduire());
  930.                 $sheet->setCellValue('K' $i$tcnssB02->getAfNetApayer());
  931.                 $sheet->setCellValue('L' $i$tcnssB02->getAfAreverser());
  932.                 $sheet->setCellValue('M' $i$tcnssB02->getNJoursDeclares());
  933.                 $sheet->setCellValue('N' $i$tcnssB02->getNSalaireReel());
  934.                 $sheet->setCellValue('O' $i$tcnssB02->getNSalairePlaf());
  935.                 $sheet->setCellValue('P' $i$tcnssB02->getLSituation());
  936.                 $sheet->setCellValue('Q' $i$tcnssB02->getLSituationNum());
  937.                 $sheet->setCellValue('R' $i$tcnssB02->getSCtr());
  938.                 $sheet->setCellValue('S' $i$tcnssB02->getFiller());
  939.                 $sheet->setCellValue('T' $i$tcnssB02->getSite());
  940.                 $sheet->setCellValue('U' $i$tcnssB02->getStatut());
  941.                 $sheet->setCellValue('V' $i$tcnssB02->getMontantReel());
  942.                 $sheet->setCellValue('W' $i$tcnssB02->getMontantPlaf());
  943.                 $i++;
  944.             }
  945.         }
  946.         $writer = new Xlsx($spreadsheet);
  947.         $fileName 'cnssb02_' $periode '.xlsx';
  948.         $temp_file tempnam(sys_get_temp_dir(), $fileName);
  949.         $writer->save($temp_file);
  950.         return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  951.     }
  952.     #[Route('/app_reporting_extraction_input'name'app_reporting_extraction_input'options: ['expose' => true])]
  953.     public function app_reporting_extraction_input(Request $requestHttpClientInterface $client): Response
  954.     {
  955.         try {
  956.             $response $client->request('GET'"http://52.213.254.104/api/rh/cab/extraction", [
  957.                 'verify_peer' => false,
  958.                 'verify_host' => false,
  959.                 'timeout' => 30
  960.             ]);        
  961.             if($response->getStatusCode() === 200) {
  962.                 $result $response->toArray();
  963.                 return new JsonResponse($result);
  964.             }
  965.             throw new \Exception($response->getContent(false));
  966.         } catch (\Throwable $th) {
  967.             return new JsonResponse($th->getMessage(), 500);
  968.         }
  969.        
  970.     }
  971.     
  972.     #[Route('/app_reporting_extraction_etat_paie_cnss/{periode}/{dossier}'name'app_reporting_extraction_etat_paie_cnss'options: ['expose' => true])]
  973.     public function app_reporting_extraction_etat_paie_cnss($periodePDossier $dossier): Response
  974.     {
  975.         $date = new \DateTime($periode);
  976.         $periode $this->em->getRepository(periode::class)->findBy(['code' => $date->format('mY')]);
  977.         $bulletins $this->em->createQueryBuilder()
  978.             ->select('b')
  979.             ->from(Tbulletin::class, 'b')
  980.             ->innerJoin('b.contract''contract')
  981.             ->innerJoin('contract.pnatureContract''natureType')
  982.             ->innerJoin('natureType.type''type')
  983.             ->where('b.active = 1 ')
  984.             ->andWhere('b.piece = 1')
  985.             ->andWhere('type.id = 1')
  986.             ->andWhere('b.periode = :periode')
  987.             ->andWhere('b.dossier = :dossier')
  988.             ->setParameter('dossier'$dossier)
  989.             ->setParameter('periode'$periode)
  990.             ->getQuery()
  991.             ->getResult();
  992.         // dd($bulletins);
  993.         $results = [];
  994.         foreach ($bulletins as $bulletin) {
  995.             $result['bulletin_id'] = $bulletin->getId();
  996.             $result['periode'] = $bulletin->getPeriode()->getCode();
  997.             $result['contract_id'] = $bulletin->getContract()->getId();
  998.             $result['employe'] =  $bulletin->getContract()->getEmploye()->getNom() . ' ' $bulletin->getContract()->getEmploye()->getPrenom();
  999.             $bulletinLgs $this->em->getRepository(TbulletinLg::class)->findBy(['bulletin' => $bulletin'active' => true'rubrique' => [12475051525354555658]]);
  1000.             $result['details']['salaireImpo']=  0;
  1001.             $result['details']['cnssPS']=  0;
  1002.             $result['details']['cnssPP']=  0;
  1003.             foreach ($bulletinLgs as  $bulletinLg) {
  1004.                 $rubrique $bulletinLg->getRubrique()->getId();
  1005. //                 if (!isset($result['details'])) {
  1006. //                     $result['details'] = [
  1007. //                         'salaireImpo' => 0,
  1008. //                         'cnssPS' => 0,
  1009. //                         'cnssPP' => 0,
  1010. //                     ];
  1011. //                 }
  1012.                 if ($rubrique === || $rubrique === 2) {
  1013.                     $result['details']['salaireImpo'] += $bulletinLg->getMontant();
  1014.                 } elseif ($rubrique === 47 || $rubrique === 53) {
  1015.                     $result['details']['cnssPS'] += $bulletinLg->getMontant();
  1016.                     $totalCnss $bulletinLg->getMontant();
  1017.                 } elseif ($rubrique === 56 || $rubrique === 58) {
  1018.                     $result['details']['cnssPP'] += $bulletinLg->getMontant();
  1019.                     $totalCnss $bulletinLg->getMontant();
  1020.                 } else {
  1021.                     $result['details']['fraisCnss_' $rubrique] = $bulletinLg->getMontant();
  1022.                 }
  1023.             }
  1024.             if ($result['details']['salaireImpo'] > 6000) {
  1025.                 $result['details']['salaireImpoPlafond'] = 6000;
  1026.             } else {
  1027.                 $result['details']['salaireImpoPlafond'] = $result['details']['salaireImpo'];
  1028.             }
  1029.             array_push($results$result);
  1030.         }
  1031.         // dd($results);
  1032.         // dd($bulletinLgs);
  1033.         $html $this->render("reporting/extraction/pdf/cnss.html.twig", [
  1034.             'periode' => $periode,
  1035.             'dossier' => $dossier,
  1036.             'date' => $date,
  1037.             'results' => $results
  1038.         ])->getContent();
  1039.         $mpdf = new Mpdf([
  1040.             'mode' => 'utf-8',
  1041.             'margin_left' => '5',
  1042.             'margin_right' => '5',
  1043.             'format' => 'A4-L',
  1044.             'margin_header' => 5,
  1045.             'margin_top' => 5,
  1046.         ]);
  1047.         $mpdf->SetHTMLFooter("<footer class='center'>
  1048.                                 <table width='100%'>
  1049.                                   <tr>
  1050.                                       <td width='33%' style='text-align: center;'>page {PAGENO} sur {nbpg}</td>
  1051.                                       <td width='33%' style='text-align: center;'>" date("d/m/y") . "</td>
  1052.                                   </tr>
  1053.                                 </table>
  1054.                               </footer>");
  1055.         $mpdf->SetTitle('CNSS');
  1056.         $mpdf->WriteHTML($html);
  1057.         $mpdf->Output("CNSS_" $dossier->getAbreviation() . "_" $date->format('mY') . ".pdf""I");
  1058.     }
  1059.     #[Route('/app_reporting_extraction_etat_paie_cimr/{periode}/{dossier}'name'app_reporting_extraction_etat_paie_cimr'options: ['expose' => true])]
  1060.     public function app_reporting_extraction_etat_paie_cimr($periodePDossier $dossier): Response
  1061.     {
  1062.         $date = new \DateTime($periode);
  1063.         $periode $this->em->getRepository(periode::class)->findBy(['code' => $date->format('mY')]);
  1064.         $bulletins $this->em->createQueryBuilder()
  1065.             ->select('b')
  1066.             ->from(Tbulletin::class, 'b')
  1067.             ->innerJoin('b.contract''contract')
  1068.             ->innerJoin('contract.pnatureContract''natureType')
  1069.             ->innerJoin('natureType.type''type')
  1070.             ->where('b.active = 1 ')
  1071.             ->andWhere('b.piece = 1')
  1072.             ->andWhere('type.id = 1')
  1073.             ->andWhere('b.periode = :periode')
  1074.             ->andWhere('b.dossier = :dossier')
  1075.             ->setParameter('dossier'$dossier)
  1076.             ->setParameter('periode'$periode)
  1077.             ->getQuery()
  1078.             ->getResult();
  1079.         // dd($bulletins);
  1080.         $results = [];
  1081.         foreach ($bulletins as $bulletin) {
  1082.             $result['bulletin_id'] = $bulletin->getId();
  1083.             $result['periode'] = $bulletin->getPeriode()->getCode();
  1084.             $result['contract_id'] = $bulletin->getContract()->getId();
  1085.             $result['employe'] =  $bulletin->getContract()->getEmploye()->getNom() . ' ' $bulletin->getContract()->getEmploye()->getPrenom();
  1086.             $bulletinLgs $this->em->getRepository(TbulletinLg::class)->findBy(['bulletin' => $bulletin'active' => true'rubrique' => [124857]]);
  1087.             $totalCimr 0;
  1088.             $result['details']['salaireImpo']=  0;
  1089.             foreach ($bulletinLgs as  $bulletinLg) {
  1090.                 $rubrique $bulletinLg->getRubrique()->getId();
  1091. //                 if (!isset($result['details'])) {
  1092. //                     $result['details'] = [
  1093. //                         'salaireImpo' => 0
  1094. //                     ];
  1095. //                 }
  1096.                 if ($rubrique === || $rubrique === 2) {
  1097.                     $result['details']['salaireImpo'] += $bulletinLg->getMontant();
  1098.                 } else {
  1099.                     $result['details']['fraisCimr_' $rubrique] = $bulletinLg->getMontant();
  1100.                     $bareme $this->em->getRepository(PBaremeCimr::class)->findOneBy(['rubrique' => $rubrique'bareme' => $bulletin->getContract()->getBareme()->getId()]);
  1101.                     $result['details']['taux_' $rubrique] = $bareme->getTaux();
  1102.                     $totalCimr += $bulletinLg->getMontant();
  1103.                 }
  1104.             }
  1105.             $result['details']['totalCimr'] = $totalCimr;
  1106.             array_push($results$result);
  1107.         }
  1108.         // dd($results);
  1109.         $html $this->render("reporting/extraction/pdf/cimr.html.twig", [
  1110.             'periode' => $periode,
  1111.             'dossier' => $dossier,
  1112.             'date' => $date,
  1113.             'results' => $results
  1114.         ])->getContent();
  1115.         $mpdf = new Mpdf([
  1116.             'mode' => 'utf-8',
  1117.             'margin_left' => '5',
  1118.             'margin_right' => '5',
  1119.             'format' => 'A4-L',
  1120.             'margin_header' => 5,
  1121.             'margin_top' => 5,
  1122.         ]);
  1123.         $mpdf->SetHTMLFooter("<footer class='center'>
  1124.                                   <table width='100%'>
  1125.                                     <tr>
  1126.                                         <td width='33%' style='text-align: center;'>page {PAGENO} sur {nbpg}</td>
  1127.                                         <td width='33%' style='text-align: center;'>" date("d/m/y") . "</td>
  1128.                                     </tr>
  1129.                                   </table>
  1130.                               </footer>");
  1131.         $mpdf->SetTitle('CIMR');
  1132.         $mpdf->WriteHTML($html);
  1133.         $mpdf->Output("CIMR_" $dossier->getAbreviation() . "_" $date->format('mY') . ".pdf""I");
  1134.     }
  1135.     #[Route('/app_reporting_extraction_etat_paie_ir/{periode}/{dossier}/{natureType}'name'app_reporting_extraction_etat_paie_ir'options: ['expose' => true])]
  1136.     public function app_reporting_extraction_etat_paie_ir($periodePDossier $dossierPnatureContract $natureType): Response
  1137.     {
  1138.         $date = new \DateTime($periode);
  1139.         $periode $this->em->getRepository(periode::class)->findBy(['code' => $date->format('mY')]);
  1140.         $bulletins $this->em->createQueryBuilder()
  1141.             ->select('b')
  1142.             ->from(Tbulletin::class, 'b')
  1143.             ->innerJoin('b.contract''contract')
  1144.             // ->innerJoin('contract.pnatureContract', 'natureType')
  1145.             // ->innerJoin('natureType.type', 'type')
  1146.             ->where('b.active = 1 ')
  1147.             ->andWhere('b.piece = 1')
  1148.             ->andWhere('contract.pnatureContract = :natureType')
  1149.             // ->andWhere('type.id = 1')
  1150.             ->andWhere('b.periode = :periode')
  1151.             ->andWhere('b.dossier = :dossier')
  1152.             ->setParameter('dossier'$dossier)
  1153.             ->setParameter('periode'$periode)
  1154.             ->setParameter('natureType'$natureType)
  1155.             ->getQuery()
  1156.             ->getResult();
  1157.         // dd($bulletins);
  1158.         $results = [];
  1159.         foreach ($bulletins as $bulletin) {
  1160.             $result['bulletin_id'] = $bulletin->getId();
  1161.             $result['periode'] = $bulletin->getPeriode()->getCode();
  1162.             $result['contract_id'] = $bulletin->getContract()->getId();
  1163.             $result['employe'] =  $bulletin->getContract()->getEmploye()->getNom() . ' ' $bulletin->getContract()->getEmploye()->getPrenom();
  1164.             if ($natureType->getType()->getId() === 1) {
  1165.                 $bulletinLgs $this->em->getRepository(TbulletinLg::class)->findBy(['bulletin' => $bulletin'active' => true'rubrique' => [1243]]);
  1166.                 foreach ($bulletinLgs as  $bulletinLg) {
  1167.                     $rubrique $bulletinLg->getRubrique()->getId();
  1168.                     if (!isset($result['details'])) {
  1169.                         $result['details'] = [
  1170.                             'salaireImpo' => 0
  1171.                         ];
  1172.                     }
  1173.                     if ($rubrique === || $rubrique === 2) {
  1174.                         $result['details']['salaireImpo'] += $bulletinLg->getMontant();
  1175.                     } else {
  1176.                         $result['details']['ir_' $rubrique] = $bulletinLg->getMontant();
  1177.                     }
  1178.                     $result['details']['fraisProf'] = $result['details']['salaireImpo'] * 0.2;
  1179.                     $montantCotisationTotale $this->em->createQueryBuilder()
  1180.                         ->select('sum(TbulletinLg.montant) as montant')
  1181.                         ->from(TbulletinLg::class, 'TbulletinLg')
  1182.                         ->innerJoin('TbulletinLg.bulletin''bulletin')
  1183.                         ->innerJoin('TbulletinLg.rubrique''rubrique')
  1184.                         ->andWhere('rubrique.id  in(50, 47, 53, 48)')
  1185.                         ->andWhere('TbulletinLg.active = 1')
  1186.                         ->andWhere('bulletin.id = :bulletin')
  1187.                         ->setParameter('bulletin'$bulletin)
  1188.                         ->getQuery()
  1189.                         ->getOneOrNullResult();
  1190.                     $result['details']['salaireNetImpo'] = $result['details']['salaireImpo'] - ($montantCotisationTotale['montant'] + ($result['details']['fraisProf']));
  1191.                 }
  1192.             } else {
  1193.                 $bulletinLgs $this->em->getRepository(TbulletinLg::class)->findBy(['bulletin' => $bulletin'active' => true'rubrique' => [656843]]);
  1194.                 foreach ($bulletinLgs as  $bulletinLg) {
  1195.                     $rubrique $bulletinLg->getRubrique()->getId();
  1196.                     $result['details']['ir_' $rubrique] = $bulletinLg->getMontant();
  1197.                 }
  1198.                 $prelevement $this->em->createQueryBuilder()
  1199.                     ->select('sum(TbulletinLg.montant) as montant')
  1200.                     ->from(TbulletinLg::class, 'TbulletinLg')
  1201.                     ->innerJoin('TbulletinLg.bulletin''bulletin')
  1202.                     ->innerJoin('TbulletinLg.rubrique''rubrique')
  1203.                     ->andWhere('rubrique.prets = 1')
  1204.                     ->andWhere('TbulletinLg.active = 1')
  1205.                     ->andWhere('bulletin.id = :bulletin')
  1206.                     ->setParameter('bulletin'$bulletin)
  1207.                     ->getQuery()
  1208.                     ->getOneOrNullResult();
  1209.                 if (!($prelevement['montant'])) {
  1210.                     // dd('h');
  1211.                     $result['details']['prets'] = 0;
  1212.                 } else {
  1213.                     $result['details']['prets'] = $prelevement['montant'];
  1214.                 }
  1215.             }
  1216.             array_push($results$result);
  1217.         }
  1218.         // dd($results);
  1219.         $html $this->render("reporting/extraction/pdf/ir.html.twig", [
  1220.             'periode' => $periode,
  1221.             'dossier' => $dossier,
  1222.             'date' => $date,
  1223.             'results' => $results,
  1224.             'nature' => $natureType
  1225.         ])->getContent();
  1226.         $mpdf = new Mpdf([
  1227.             'mode' => 'utf-8',
  1228.             'margin_left' => '5',
  1229.             'margin_right' => '5',
  1230.             'format' => 'A4-L',
  1231.             'margin_header' => 5,
  1232.             'margin_top' => 5,
  1233.         ]);
  1234.         $mpdf->SetHTMLFooter("<footer class='center'>
  1235.                                    <table width='100%'>
  1236.                                      <tr>
  1237.                                          <td width='33%' style='text-align: center;'>page {PAGENO} sur {nbpg}</td>
  1238.                                          <td width='33%' style='text-align: center;'>" date("d/m/y") . "</td>
  1239.                                      </tr>
  1240.                                    </table>
  1241.                                </footer>");
  1242.         $mpdf->SetTitle('IR');
  1243.         $mpdf->WriteHTML($html);
  1244.         $mpdf->Output("IR_" $dossier->getAbreviation() . "_" $natureType->getDesignation() . "_" $date->format('mY') . ".pdf""I");
  1245.     }
  1246.     #[Route('/pdf_etat_recapitulatif/{periode}/{dossier}/{natureType}'name'app_extraction_recapitulatif_pdf'options: ['expose' => true])]
  1247.     public function pdf_honoraire(Request $request,$periode,PDossier $dossier,PnatureContract $natureType): Response
  1248.     {
  1249.         // dd($natureType);
  1250.         $date = new \DateTime($periode);
  1251.         $periode $this->em->getRepository(periode::class)->findBy(['code' => $date->format('mY')]);
  1252.         $queryBuilder $this->em->createQueryBuilder()
  1253.         ->select('sum(bl.montant) as Montant,r.id as rubrique,r.designation as element,
  1254.         p.date,d.abreviation as dossier,
  1255.         CASE WHEN r.id in (37,33, 37, 38,39,77,78,79,80,84,85) THEN 4 ELSE SUBSTRING(pc.compteComptable, 1, 1) END as compteComptable,
  1256.         r.code,r.designation')
  1257.             ->from(Tbulletin::class, 'tb')
  1258.             ->innerJoin('tb.bulletinLgs''bl')
  1259.             ->innerJoin('tb.piece''piece')
  1260.             ->innerJoin('tb.bordereau''b')
  1261.             ->innerJoin('b.natureContract''n')
  1262.             ->innerJoin('bl.rubrique''r')
  1263.             ->innerJoin('tb.periode''p')
  1264.             ->innerJoin('tb.dossier''d')
  1265.             ->innerJoin('r.compteComptables''pc')
  1266.             ->where('n.id =:natureType')
  1267.             ->andWhere('pc.natureContract = :natureType')
  1268.             ->andWhere('tb.periode = :periode')
  1269.             ->andWhere('tb.dossier = :dossier')
  1270.             ->andWhere('bl.montant != 0')
  1271.             ->andWhere('tb.active = 1')
  1272.             ->andWhere('piece.id = 1')
  1273.             ->andWhere('bl.active = 1')
  1274.             ->andWhere('r.id NOT IN (51, 52, 54, 55, 56, 57, 58)')
  1275.             ->setParameter('dossier'$dossier)
  1276.             ->setParameter('periode'$periode)
  1277.             ->setParameter('natureType'$natureType)
  1278.             ->groupBy('r.id')
  1279.             ->orderBy('compteComptable''DESC');
  1280.         $results $queryBuilder->getQuery()->getResult();
  1281.         //  dd($results);
  1282.         // $date = $results[0]['date'];
  1283.         $date->modify('last day of this month'); //30-09-2023
  1284.         $html $this->render("reporting/extraction/pdf/recapitulatif.html.twig", [
  1285.             'results' => $results'date' => $date'dossier' => $dossier
  1286.         ])->getContent();
  1287.         $mpdf = new Mpdf([
  1288.             'mode' => 'utf-8',
  1289.             'margin_left' => '5',
  1290.             'margin_right' => '5',
  1291.         ]);
  1292.         $mpdf->SetTitle('Etat_RECAPITULATIF');
  1293.         // $mpdf->SetHTMLFooter(
  1294.         //     $this->render("planification/pdfs/footer.html.twig")->getContent()
  1295.         // );
  1296.         $mpdf->WriteHTML($html);
  1297.         $mpdf->Output("Etat_RECAPITULATIF"$dossier->getAbreviation() . "_" $date->format('mY') . "_" $natureType->getDesignation().".pdf""I");
  1298.     }
  1299.     #[Route('/app_reporting_extraction_etat_pret/{periode}/{dossier}/{rubrique}'name'app_reporting_extraction_etat_pret'options: ['expose' => true])]
  1300.     public function app_reporting_extraction_etat_pret($periodePDossier $dossierPrubrique $rubrique): Response
  1301.     {
  1302.         $date = new \DateTime($periode);
  1303.         $periode $this->em->getRepository(periode::class)->findOneBy(['code' => $date->format('mY')]);
  1304.         //  dd($periode,$rubrique,$dossier);
  1305.         $bulletinLgs $this->em->createQueryBuilder()
  1306.             ->select('lg')
  1307.             ->from(TbulletinLg::class, 'lg')
  1308.             ->innerJoin('lg.bulletin''b')
  1309.             ->where('lg.active = 1')
  1310.             ->andWhere('lg.rubrique = :rubrique ')
  1311.             ->andWhere('b.active = 1 ')
  1312.             ->andWhere('b.piece = 1')
  1313.             ->andWhere('b.periode = :periode')
  1314.             ->andWhere('b.dossier = :dossier')
  1315.             ->setParameter('dossier'$dossier)
  1316.             ->setParameter('periode'$periode)
  1317.             ->setParameter('rubrique'$rubrique)
  1318.             ->getQuery()
  1319.             ->getResult();
  1320.         //  dd($bulletinLgs[0]->getBulletin()->getContract()->getEmploye()->getNom());
  1321.         $html $this->render("reporting/extraction/pdf/pret.html.twig", [
  1322.             'periode' => $periode,
  1323.             'dossier' => $dossier,
  1324.             'date' => $date,
  1325.             'rubrique' => $rubrique,
  1326.             'bulletinLgs' => $bulletinLgs
  1327.         ])->getContent();
  1328.         $mpdf = new Mpdf([
  1329.             'mode' => 'utf-8',
  1330.             'margin_left' => '5',
  1331.             'margin_right' => '5',
  1332.             'format' => 'A4',
  1333.             'margin_header' => 5,
  1334.             'margin_top' => 5,
  1335.         ]);
  1336.         $mpdf->SetHTMLFooter("<footer class='center'>
  1337.                                 <table width='100%'>
  1338.                                   <tr>
  1339.                                       <td width='33%' style='text-align: center;'>page {PAGENO} sur {nbpg}</td>
  1340.                                       <td width='33%' style='text-align: center;'>" date("d/m/y") . "</td>
  1341.                                   </tr>
  1342.                                 </table>
  1343.                               </footer>");
  1344.         $mpdf->SetTitle('pret');
  1345.         $mpdf->WriteHTML($html);
  1346.         $mpdf->Output("pret_" $dossier->getAbreviation() . "_" $date->format('mY') . "_" $rubrique->getDesignation() . ".pdf""I");
  1347.     }
  1348.     #[Route('/app_reporting_extraction_synthese_paie/{periode}/{groupement}/{devise}'name'app_reporting_extraction_synthese_paie'options: ['expose' => true])]
  1349.     public function app_reporting_extraction_synthese_paie($periode,$groupement,$devise): Response
  1350.     {   
  1351.         $date = new \DateTime($periode);
  1352.         $previousMonth=$date->modify('-1 month')->format('mY');
  1353.         $date = new \DateTime($periode);
  1354.         $currentMonth=$date->format('mY');
  1355.         $dossier=$this->em->getRepository(pdossier::class)->findOneBy(['groupement' => $groupement]);
  1356.         // dd($date,$previousMonth,$currentMonth,$devise);
  1357.         
  1358.         $currentperiode $this->em->getRepository(periode::class)->findOneBy(['code' => $currentMonth]);
  1359.         $previousPeriode $this->em->getRepository(periode::class)->findOneBy(['code' => $previousMonth]);
  1360.         $periode $this->em->getRepository(periode::class)->findBy(['code' => [$previousMonth,$currentMonth]]);
  1361.         
  1362.         // dd($periode);
  1363.         if($groupement=='FCZ'){
  1364.             $designationGrp='FONDATION CHEIKH ZAID';
  1365.         }elseif ($groupement=='RGA'){
  1366.             $designationGrp='AFRIC-MED REPARTITEUR GROSSISTE';
  1367.         }elseif ($groupement=='SSS'){
  1368.             $designationGrp='SOCIETE AFRICAINE DES SERVICES DE LA SANTE - METIERS';
  1369.         }
  1370.         elseif ($groupement=='SST'){
  1371.             $designationGrp='SOCIETE AFRICAINE DES SERVICES DE LA SANTE - TRAVAUX';
  1372.         } 
  1373.         $details['groupement']=$groupement;
  1374.         $details['designationGrp']=$designationGrp;
  1375.         $details['date']=$date;
  1376.         $details['periode']=$periode;
  1377.         $details['dossier']=$dossier;
  1378.         $paieEffectif=$paieMontant=$indeminiteEffectif=$indeminiteMontant=$honoraireEffectif=$honoraireMontant=$stcEffectif=$stcMontant=$totalM1Effectif=$totalM1Montant=$totalMEffectif=$totalMMontant=0;
  1379.         $natureContracts =  $this->em->createQueryBuilder()
  1380.             ->select('distinct  natureContract.id,natureContract.designation as nature_contract,d.groupement')
  1381.             ->from(TbulletinLg::class, 'lg')
  1382.             ->innerJoin('lg.bulletin''b')
  1383.             ->innerJoin('b.dossier''d')
  1384.             ->innerJoin('b.bordereau''bordereau')
  1385.             ->innerJoin('bordereau.natureContract''natureContract')
  1386.             ->innerJoin('b.periode''periode')
  1387.             ->where('lg.active = 1')
  1388.             ->andWhere('b.active = 1')
  1389.             ->andWhere('bordereau.active = 1 ')
  1390.             ->andWhere('lg.rubrique in (5,68) ')
  1391.             ->andWhere('b.periode in( :periode)')
  1392.             ->andWhere('d.groupement = :groupement')
  1393.             ->setParameter('groupement'$groupement)
  1394.             ->setParameter('periode'$periode);
  1395.             $natureContracts $this->applyDeviseFilter($natureContracts$devise)
  1396.                                 ->orderBy('natureContract.id''ASC')
  1397.                                 ->getQuery()
  1398.                                 ->getResult();
  1399.         foreach ($natureContracts as $key => $natureContract) {
  1400.             $results[$key]['natureContrat']=$natureContract['nature_contract'];
  1401.             
  1402.             $totalEffectif=0;
  1403.             $totalMontant=0;
  1404.             $paie=$this->em->createQueryBuilder()
  1405.             ->select('count(contract.id) as effectif,sum(lg.montant) as montant')
  1406.             ->from(TbulletinLg::class, 'lg')
  1407.             ->innerJoin('lg.bulletin''b')
  1408.             ->innerJoin('b.dossier''d')
  1409.             ->innerJoin('b.piece''piece')
  1410.             ->innerJoin('b.contract''contract')
  1411.             ->innerJoin('b.bordereau''bordereau')
  1412.             ->innerJoin('bordereau.natureContract''natureContract')
  1413.             ->innerJoin('b.periode''periode')
  1414.             ->where('lg.active = 1')
  1415.             ->andWhere('b.active = 1')
  1416.             ->andWhere('bordereau.active = 1 ')
  1417.             ->andWhere('lg.rubrique in (5,68) ')
  1418.             ->andWhere('b.piece = 1')
  1419.             ->andWhere('b.periode in( :periode)')
  1420.             ->andWhere('d.groupement = :groupement')
  1421.             ->andWhere('natureContract.id =:natureContract')
  1422.             ->setParameter('groupement'$groupement)
  1423.             ->setParameter('natureContract'$natureContract['id'])
  1424.             ->setParameter('periode'$currentperiode);
  1425.             
  1426.             $paie $this->applyDeviseFilter($paie$devise)
  1427.                    ->getQuery()
  1428.                    ->getOneOrNullResult();
  1429.             $totalEffectif+=$results[$key]['effectifPaie']=$paie['effectif'];
  1430.             $totalMontant+=$results[$key]['montantPaie']=$paie['montant'];
  1431.             $paieEffectif+=$paie['effectif'];
  1432.             $paieMontant+=$paie['montant'];
  1433.             $indeminite=$this->em->createQueryBuilder()
  1434.             ->select('count(contract.id) as effectif,sum(lg.montant) as montant')
  1435.             ->from(TbulletinLg::class, 'lg')
  1436.             ->innerJoin('lg.bulletin''b')
  1437.             ->innerJoin('b.dossier''d')
  1438.             ->innerJoin('b.piece''piece')
  1439.             ->innerJoin('b.contract''contract')
  1440.             ->innerJoin('b.bordereau''bordereau')
  1441.             ->innerJoin('bordereau.natureContract''natureContract')
  1442.             ->innerJoin('b.periode''periode')
  1443.             ->where('lg.active = 1')
  1444.             ->andWhere('b.active = 1')
  1445.             ->andWhere('bordereau.active = 1 ')
  1446.             ->andWhere('lg.rubrique in (5,68) ')
  1447.             ->andWhere('b.piece = 3')
  1448.             ->andWhere('b.periode in( :periode)')
  1449.             ->andWhere('d.groupement = :groupement')
  1450.             ->andWhere('natureContract.id =:natureContract')
  1451.             ->setParameter('groupement'$groupement)
  1452.             ->setParameter('natureContract'$natureContract['id'])
  1453.             ->setParameter('periode'$currentperiode);
  1454.             $indeminite $this->applyDeviseFilter($indeminite$devise)
  1455.                    ->getQuery()
  1456.                    ->getOneOrNullResult();
  1457.             $totalEffectif+=$results[$key]['effectifIndeminite']=$indeminite['effectif'];
  1458.             $totalMontant+=$results[$key]['montantIndeminite']=$indeminite['montant'];
  1459.             $indeminiteEffectif+=$indeminite['effectif'];
  1460.             $indeminiteMontant+=$indeminite['montant'];
  1461.             $honoraire=$this->em->createQueryBuilder()
  1462.             ->select('count(contract.id) as effectif,sum(lg.montant) as montant')
  1463.             ->from(TbulletinLg::class, 'lg')
  1464.             ->innerJoin('lg.bulletin''b')
  1465.             ->innerJoin('b.dossier''d')
  1466.             ->innerJoin('b.piece''piece')
  1467.             ->innerJoin('b.contract''contract')
  1468.             ->innerJoin('b.bordereau''bordereau')
  1469.             ->innerJoin('bordereau.natureContract''natureContract')
  1470.             ->innerJoin('b.periode''periode')
  1471.             ->where('lg.active = 1')
  1472.             ->andWhere('b.active = 1')
  1473.             ->andWhere('bordereau.active = 1 ')
  1474.             ->andWhere('lg.rubrique in (5,68) ')
  1475.             ->andWhere('b.piece = 2')
  1476.             ->andWhere('b.periode in( :periode)')
  1477.             ->andWhere('d.groupement = :groupement')
  1478.             ->andWhere('natureContract.id =:natureContract')
  1479.             ->setParameter('groupement'$groupement)
  1480.             ->setParameter('natureContract'$natureContract['id'])
  1481.             ->setParameter('periode'$currentperiode);
  1482.             $honoraire $this->applyDeviseFilter($honoraire$devise)
  1483.                    ->getQuery()
  1484.                    ->getOneOrNullResult();
  1485.             $totalEffectif+=$results[$key]['effectifHonoraire']=$honoraire['effectif'];
  1486.             $totalMontant+=$results[$key]['montantHonoraire']=$honoraire['montant'];
  1487.             $honoraireEffectif+=$honoraire['effectif'];
  1488.             $honoraireMontant+=$honoraire['montant'];
  1489.             $stc=$this->em->createQueryBuilder()
  1490.             ->select('count(contract.id) as effectif,sum(lg.montant) as montant')
  1491.             ->from(TbulletinLg::class, 'lg')
  1492.             ->innerJoin('lg.bulletin''b')
  1493.             ->innerJoin('b.dossier''d')
  1494.             ->innerJoin('b.piece''piece')
  1495.             ->innerJoin('b.contract''contract')
  1496.             ->innerJoin('b.bordereau''bordereau')
  1497.             ->innerJoin('bordereau.natureContract''natureContract')
  1498.             ->innerJoin('b.periode''periode')
  1499.             ->where('lg.active = 1')
  1500.             ->andWhere('b.active = 1')
  1501.             ->andWhere('bordereau.active = 1 ')
  1502.             ->andWhere('lg.rubrique in (5,68) ')
  1503.             ->andWhere('b.piece = 13')
  1504.             ->andWhere('b.periode in( :periode)')
  1505.             ->andWhere('d.groupement = :groupement')
  1506.             ->andWhere('natureContract.id =:natureContract')
  1507.             ->setParameter('groupement'$groupement)
  1508.             ->setParameter('natureContract'$natureContract['id'])
  1509.             ->setParameter('periode'$currentperiode);
  1510.             $stc $this->applyDeviseFilter($stc$devise)
  1511.                    ->getQuery()
  1512.                    ->getOneOrNullResult();
  1513.             $totalEffectif+=$results[$key]['effectifStc']=$stc['effectif'];
  1514.             $totalMontant+=$results[$key]['montantStc']=$stc['montant'];
  1515.             $stcEffectif+=$stc['effectif'];
  1516.             $stcMontant+=$stc['montant'];
  1517.             $totalM1 $this->em->createQueryBuilder()
  1518.             ->select('count(contract.id) as effectif,sum(lg.montant) as montant')
  1519.             ->from(TbulletinLg::class, 'lg')
  1520.             ->innerJoin('lg.bulletin''b')
  1521.             ->innerJoin('b.dossier''d')
  1522.             ->innerJoin('b.piece''piece')
  1523.             ->innerJoin('b.contract''contract')
  1524.             ->innerJoin('b.bordereau''bordereau')
  1525.             ->innerJoin('bordereau.natureContract''natureContract')
  1526.             ->innerJoin('b.periode''periode')
  1527.             ->where('lg.active = 1')
  1528.             ->andWhere('b.active = 1')
  1529.             ->andWhere('bordereau.active = 1 ')
  1530.             ->andWhere('lg.rubrique in (5,68) ')
  1531.             ->andWhere('b.periode in( :periode)')
  1532.             ->andWhere('d.groupement = :groupement')
  1533.             ->andWhere('natureContract.id =:natureContract')
  1534.             ->setParameter('groupement'$groupement)
  1535.             ->setParameter('periode'$previousPeriode)
  1536.             ->setParameter('natureContract'$natureContract['id']);
  1537.             $totalM1 $this->applyDeviseFilter($totalM1$devise)
  1538.                    ->getQuery()
  1539.                    ->getOneOrNullResult();
  1540.             $results[$key]['effectifTotalM1']=$totalM1['effectif'];
  1541.             $results[$key]['montantTotalM1']=$totalM1['montant'];
  1542.             
  1543.             $totalM1Effectif+=$totalM1['effectif'];
  1544.             $totalM1Montant+=$totalM1['montant'];
  1545.             $results[$key]['totalEffectif']=$totalEffectif;
  1546.             $results[$key]['totalMontant']=$totalMontant;
  1547.             $totalMEffectif+=$totalEffectif;
  1548.             $totalMMontant+=$totalMontant;
  1549.             // dd($results,$totalM1,$stc,$groupement);
  1550.         }
  1551.                 
  1552.         $total['effectifPaie']=$paieEffectif;
  1553.         $total['montantPaie']=$paieMontant;
  1554.         $total['effectifIndeminite']=$indeminiteEffectif;
  1555.         $total['montantIndeminite']=$indeminiteMontant;
  1556.         $total['effectifHonoraire']=$honoraireEffectif;
  1557.         $total['montantHonoraire']=$honoraireMontant;
  1558.         $total['effectifStc']=$stcEffectif;
  1559.         $total['montantStc']=$stcMontant;
  1560.         $total['effectifM1']=$totalM1Effectif;
  1561.         $total['montantM1']=$totalM1Montant;
  1562.         $total['effectifMois']=$totalMEffectif;
  1563.         $total['montantMois']=$totalMMontant;
  1564.         // dd($results);
  1565.         
  1566.         $html $this->render("reporting/extraction/pdf/synthese_paie.html.twig", [
  1567.             'results'=>$results,
  1568.             'details'=>$details,
  1569.             'total'=>$total
  1570.         ])->getContent();
  1571.         $mpdf = new Mpdf([
  1572.             'mode' => 'utf-8',
  1573.             'margin_left' => '5',
  1574.             'margin_right' => '5',
  1575.             'format' => 'A4-L',
  1576.             'margin_header' => 5,
  1577.             'margin_top' => 10,
  1578.         ]);
  1579.         $mpdf->SetHTMLFooter("<footer class='center'>
  1580.                                 <table width='100%'>
  1581.                                   <tr>
  1582.                                       <td width='33%' style='text-align: center;'>page {PAGENO} de {nbpg}</td>
  1583.                                   </tr>
  1584.                                 </table>
  1585.                               </footer>");
  1586.         $mpdf->SetTitle('synthese paie');
  1587.         $mpdf->WriteHTML($html);
  1588.         $mpdf->Output("Synthèse Paie " $groupement " " $date->format('F Y') .".pdf""I");
  1589.     }
  1590.     private function applyDeviseFilter($queryBuilder$devise)
  1591.     {
  1592.         if (strtoupper($devise) == 'MAD') {
  1593.             $queryBuilder->andWhere('natureContract.id not in (15,16,17)')
  1594.                          ->andWhere('bordereau.devise = 1');
  1595.         } else {
  1596.             $queryBuilder->andWhere('bordereau.devise != 1');
  1597.         }
  1598.     
  1599.         return $queryBuilder;
  1600.     }
  1601.     #[Route('/app_reporting_amine_test'name'app_reporting_amine_test'options: ['expose' => true])]
  1602.     public function app_reporting_amine_test(): Response
  1603.     {
  1604.         return new JsonResponse('amine');
  1605.     }
  1606. }