src/Controller/Rh/RhPaySlipController.php line 254

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Rh;
  3. use Knp\Snappy\Pdf;
  4. use App\Entity\User;
  5. use App\Entity\RhPaySlip;
  6. use App\Form\Rh\RhPaySlipType;
  7. use App\Entity\RhSalaryPaySlip;
  8. use App\Entity\RhPaySlipTaxableItem;
  9. use App\Entity\RhPaySlipRetainedItem;
  10. use App\Service\SalaryContractManage;
  11. use App\Entity\RhPaySlipNonTaxableItem;
  12. use App\Repository\RhPaySlipRepository;
  13. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  14. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  15. use App\Repository\RhTaxableItemRepository;
  16. use Knp\Component\Pager\PaginatorInterface;
  17. use App\Repository\RhRetainedItemRepository;
  18. use App\Repository\RhSalaryPaySlipRepository;
  19. use App\Repository\SalaryBandScaleRepository;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use App\Repository\RhSalaryContractRepository;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Doctrine\Common\Collections\ArrayCollection;
  25. use App\Repository\TaxReductionSheduleRepository;
  26. use App\Repository\RhSalaryCreditShedulRepository;
  27. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  28. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  29. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  30. /**
  31.  * @Route("/rh/paySlip")
  32.  */
  33. class RhPaySlipController extends AbstractController
  34. {
  35.     public const LABEL_RATE_NOT_PERMANANT 'RIBNC';
  36.     /**
  37.      * @Route("/index", name="rh_pay_slip_index", methods={"GET"})
  38.      */
  39.     public function index(Request $requestPaginatorInterface $paginatorRhPaySlipRepository $rhPaySlipRepository): Response
  40.     {
  41.         $establishment $this->getUser()->getEstablishment();
  42.         $rh_pay_slips $paginator->paginate(
  43.             $rhPaySlipRepository->createQueryBuilder('entity')
  44.             ->andWhere('entity.establishment = :establishment')
  45.             ->setParameter('establishment'$establishment)
  46.             ->orderBy('entity.id''desc')
  47.             ->getQuery(),
  48.             $request->query->getInt('page'1),
  49.             1000
  50.         );
  51.         return $this->render('rh/rh_pay_slip/index.html.twig', [
  52.             'rh_pay_slips' => $rh_pay_slips,
  53.         ]);
  54.     }
  55.     /**
  56.      * @Route("/new", name="rh_pay_slip_new", methods={"GET","POST"})
  57.      */
  58.     public function new(Request $request): Response
  59.     {
  60.         $establishment $this->getUser()->getEstablishment();
  61.         $rhPaySlip = new RhPaySlip();
  62.         $form $this->createForm(RhPaySlipType::class, $rhPaySlip);
  63.         $form->handleRequest($request);
  64.         if ($form->isSubmitted() && $form->isValid()) {
  65.             $entityManager $this->getDoctrine()->getManager();
  66.             $rhPaySlip->setEstablishment($establishment);
  67.             $rhPaySlip->setCode(str_replace(' ''-'$rhPaySlip->getLabel()." ".$establishment->getId()));
  68.             $rhPaySlip->setDay($rhPaySlip->getDateEnd()->format('Y-m-d'));
  69.             $rhPaySlip->setMonth($rhPaySlip->getDateEnd()->format('Y-m'));
  70.             $rhPaySlip->setYear($rhPaySlip->getDateEnd()->format('Y'));
  71.             $entityManager->persist($rhPaySlip);
  72.             try {
  73.                 $entityManager->flush();
  74.                 $this->addFlash('success'"Enrégistrement effectué.");
  75.             } catch (\Throwable $th) {
  76.                 $this->addFlash('warning'"Enrégistrement non effectué.");
  77.                 $this->addFlash('info'$th->getMessage());
  78.                 return $this->redirectToRoute('rh_pay_slip_new');
  79.             }
  80.             return $this->redirectToRoute('rh_pay_slip_index', [], Response::HTTP_SEE_OTHER);
  81.         }
  82.         return $this->renderForm('rh/rh_pay_slip/new.html.twig', [
  83.             'rh_pay_slip' => $rhPaySlip,
  84.             'form' => $form,
  85.         ]);
  86.     }
  87.     /**
  88.      * @Route("/{id}/show", name="rh_pay_slip_show", methods={"GET"})
  89.      */
  90.     public function show(RhPaySlip $rhPaySlipRhSalaryPaySlipRepository $rhSalaryPaySlipRepositoryTaxReductionSheduleRepository $taxReductionSheduleRepositorySalaryBandScaleRepository $salaryBandScaleRepository): Response
  91.     {
  92.         /**@var User $user */
  93.         $user $this->getUser();
  94.         $establishment $user->getEstablishment();
  95.         $schoolYear $user->getSchoolYear();
  96.         foreach ($rhPaySlip->getRhSalaryPaySlips() as $key => $salaryPaySlip) {
  97.             if (!$salaryPaySlip->getIsValidated()) {
  98.                 $salaryPaySlip->setGrossTotal(0);
  99.                 $salaryPaySlip->setTaxGross(0);
  100.                 $salaryPaySlip->setSocialGross(0);
  101.                 $salaryPaySlip->setPatronalWithholdingTax(0);
  102.                 $salaryPaySlip->setWithholdingTax(0);
  103.                 $salaryPaySlip->setOthersRetained(0);
  104.                 $salaryPaySlip->setGrossTaxable(0);
  105.                 foreach ($salaryPaySlip->getRhPaySlipTaxableItems() as $key => $taxableItem) {
  106.                     $paySlipTaxableItem SalaryContractManage::setPaySlipTaxableItem($salaryPaySlip->getRhSalaryContract(), $taxableItemnull);
  107.                     $salaryPaySlip->setGrossTaxable($salaryPaySlip->getGrossTaxable() + $paySlipTaxableItem->getProfit());
  108.                     
  109.                     $salaryPaySlip->setGrossTotal($salaryPaySlip->getGrossTotal() + $paySlipTaxableItem->getProfit());
  110.                     $salaryPaySlip->setTaxGross($salaryPaySlip->getTaxGross() + $paySlipTaxableItem->getProfit());
  111.                     $salaryPaySlip->setSocialGross($salaryPaySlip->getSocialGross() + $paySlipTaxableItem->getProfit());
  112.                 }
  113.     
  114.                 foreach ($salaryPaySlip->getRhPaySlipNonTaxableItems() as $key => $nonTaxableItem) {
  115.                     $nonTaxableItem SalaryContractManage::setPaySlipNonTaxableItem($salaryPaySlip->getRhSalaryContract(), $nonTaxableItemnull);
  116.                     /* le transport n'est pas inclus dans le brut social */
  117.                     if (!str_contains($nonTaxableItem->getLabel(), 'TRANSPORT')) {
  118.                         $salaryPaySlip->setSocialGross($salaryPaySlip->getSocialGross() + $nonTaxableItem->getProfit());
  119.                     }
  120.                     $salaryPaySlip->setGrossTotal($salaryPaySlip->getGrossTotal() + $nonTaxableItem->getProfit());
  121.                 }
  122.     
  123.                 foreach ($salaryPaySlip->getRhPaySlipRetainedItems() as $key => $retainedItem) {
  124.                     if ($retainedItem->getComputeMethod() == 'ITS') {
  125.                         $retainedItem SalaryContractManage::setITS($salaryPaySlip->getRhSalaryContract(), $salaryPaySlip$retainedItemnull$taxReductionSheduleRepository$salaryBandScaleRepository);
  126.                     }else {
  127.                         $retainedItem SalaryContractManage::setPaySlipRetainedItem($salaryPaySlip->getRhSalaryContract(), $salaryPaySlip$retainedItemnull);
  128.                     }
  129.     
  130.                     if ($retainedItem->getPart() == 'SALARIALE') {
  131.                         $salaryPaySlip->setWithholdingTax($salaryPaySlip->getWithholdingTax() + $retainedItem->getProfit());
  132.                     }else {
  133.                         $salaryPaySlip->setPatronalWithholdingTax($salaryPaySlip->getPatronalWithholdingTax() + $retainedItem->getProfit());
  134.                     }
  135.                 }
  136.                 $salaryPaySlip->setNetSalary($salaryPaySlip->getGrossTotal() - ($salaryPaySlip->getWithholdingTax() + $salaryPaySlip->getOthersRetained()));
  137.                 try {
  138.                     $this->getDoctrine()->getManager()->flush();
  139.                 } catch (\Throwable $th) {
  140.                     //$this->addFlash('warning', $this->getParameter('sm.entity_updating_error_message'));
  141.                 }
  142.             }
  143.         }
  144.         $banks $rhSalaryPaySlipRepository->createQueryBuilder('entity')
  145.         ->andWhere('entity.establishment = :establishment')
  146.         ->setParameter('establishment'$establishment)
  147.         ->andWhere('entity.rhPaySlip = :rhPaySlip')
  148.         ->setParameter('rhPaySlip'$rhPaySlip)
  149.         ->innerJoin('entity.rhSalary''rhSalary')
  150.         ->addSelect('rhSalary')
  151.         /* ->andWhere('rhSalary.bank_name = :bank_name')
  152.         ->setParameter('bank_name', $request->get('bankName')) */
  153.         
  154.         ->groupBy('rhSalary.bank_name')
  155.         ->orderBy('rhSalary.last_name''ASC')
  156.         ->getQuery()
  157.         ->getResult();
  158.         return $this->render('rh/rh_pay_slip/show.html.twig', [
  159.             'banks' => $banks,
  160.             'rh_pay_slip' => $rhPaySlip,
  161.         ]);
  162.     }
  163.     /**
  164.      * @Route("/{id}/edit", name="rh_pay_slip_edit", methods={"GET","POST"})
  165.      */
  166.     public function edit(Request $requestRhPaySlip $rhPaySlip): Response
  167.     {
  168.         $form $this->createForm(RhPaySlipType::class, $rhPaySlip);
  169.         $form->handleRequest($request);
  170.         if ($form->isSubmitted() && $form->isValid()) {
  171.             $rhPaySlip->setDay($rhPaySlip->getDateEnd()->format('Y-m-d'));
  172.             $rhPaySlip->setMonth($rhPaySlip->getDateEnd()->format('Y-m'));
  173.             $rhPaySlip->setYear($rhPaySlip->getDateEnd()->format('Y'));
  174.             try {
  175.                 $this->getDoctrine()->getManager()->flush();
  176.                 $this->addFlash('success'"Modification effectuée.");
  177.             } catch (\Throwable $th) {
  178.                 $this->addFlash('warning'"Modification non effectuée.");
  179.             }
  180.             return $this->redirectToRoute('rh_pay_slip_index', [], Response::HTTP_SEE_OTHER);
  181.         }
  182.         return $this->renderForm('rh/rh_pay_slip/edit.html.twig', [
  183.             'rh_pay_slip' => $rhPaySlip,
  184.             'form' => $form,
  185.         ]);
  186.     }
  187.     /**
  188.      * @Route("/delete-selection", name="rh_pay_slips_selected_delete", methods={"GET"})
  189.      */
  190.     public function deleteSelected(Request $requestRhPaySlipRepository $entityRepository): Response
  191.     {
  192.         $list $request->get('entities');
  193.         $entityManager $this->getDoctrine()->getManager();
  194.         $errors 0;
  195.         $success 0;
  196.         foreach ($list as $key => $id) {
  197.             $entity $entityRepository->findOneBy(['id' => intval($id)], []);
  198.             if ($entity != null) {
  199.                 if (count($entity->getRhSalaryPaySlips()) <= 0) {
  200.                     $entityManager->remove($entity);
  201.                     $success $success 1;
  202.                 }else {
  203.                     $errors $errors 1;
  204.                 }
  205.             }
  206.         }
  207.         try {
  208.             $entityManager->flush();
  209.             if ($success 0) {
  210.                 $this->addFlash('success'"Suppression effectuée.");
  211.             }
  212.             if ($errors 0) {
  213.                 $this->addFlash('warning'$errors." ligne(s) ne peuvent être supprimés pour l'instant car elles sont liées à d'autres entités.");
  214.             }
  215.             return $this->json(['code' => 200'message' => "Suppression effectuée."], 200);
  216.         } catch (\Throwable $th) {
  217.             //$th->getMessage()
  218.         }
  219.         
  220.         $this->addFlash('warning'"Suppression non effectuée.");
  221.         return $this->json(['code' => 500'message' => "Suppression non effectuée."], 200);
  222.     }
  223.     /**
  224.      * @Route("/{id}/regenerateSalaryPaySlip", name="rh_pay_slip_regenerate_salary_pay_slip", methods={"GET"})
  225.      */
  226.     public function OnRegenerateSalaryPaySlipClicked(RhPaySlip $paySlipRhTaxableItemRepository $taxableItemRepositoryRhRetainedItemRepository $retainedItemRepositoryRhSalaryPaySlipRepository $salaryPaySlipRepositoryRhSalaryContractRepository $rhSalaryContractRepositoryRhSalaryCreditShedulRepository $rhSalaryCreditShedulRepositoryTaxReductionSheduleRepository $taxReductionSheduleRepositorySalaryBandScaleRepository $salaryBandScaleRepository): Response
  227.     {
  228.         $establishment $this->getUser()->getEstablishment();
  229.         $entityManager $this->getDoctrine()->getManager();
  230.         $rhSalaryContracts $rhSalaryContractRepository->createQueryBuilder('entity')
  231.         ->innerJoin('entity.rhSalary''rhSalary')
  232.         ->addSelect('rhSalary')
  233.         ->andWhere('entity.is_closed = :is_closed')
  234.         ->setParameter('is_closed'0)
  235.         ->andWhere('entity.establishment = :establishment')
  236.         ->setParameter('establishment'$establishment)
  237.         ->andWhere('rhSalary.is_permanent = :is_permanent')
  238.         ->setParameter('is_permanent'$paySlip->getIsForPermanent())
  239.         ->orderBy('entity.id''DESC')
  240.         ->getQuery()
  241.         ->getResult();
  242.         //dd($rhSalaryContracts);
  243.         foreach ($rhSalaryContracts as $key => $salaryContract) {
  244.             if ($salaryContract->getStartDate() < $paySlip->getDateEnd() && ($salaryContract->getEndDate() == null || $salaryContract->getEndDate() > $paySlip->getDateStart())) {
  245.                 if (null == $salaryPaySlipRepository->findOneBy(['rhPaySlip' => $paySlip'rhSalaryContract' => $salaryContract], [])) {
  246.                     //if ($salaryContract->getRhSalary()->getIsPermanent() == $paySlip->getIsForPermanent()) {
  247.                         $salaryPaySlip = new RhSalaryPaySlip();
  248.                         $salaryPaySlip->setRhPaySlip($paySlip);
  249.                         $salaryPaySlip->setRhSalary($salaryContract->getRhSalary());
  250.                         $salaryPaySlip->setLabel($paySlip->getLabel());
  251.                         $salaryPaySlip->setCode($paySlip->getLabel()."-".$salaryContract->getId());
  252.                         $salaryPaySlip->setDay($paySlip->getCreatedAt()->format('Y-m-d'));
  253.                         $salaryPaySlip->setMonth($paySlip->getCreatedAt()->format('Y-m'));
  254.                         $salaryPaySlip->setYear($paySlip->getCreatedAt()->format('Y'));
  255.                         $salaryPaySlip->setEstablishment($paySlip->getEstablishment());
  256.                         $salaryPaySlip->setHourlyRate($salaryContract->getHourlyRate());
  257.                         $salaryPaySlip->setNumberHourPerformed($salaryContract->getHoursWorked());
  258.                         if (!$salaryContract->getRhSalary()->getIsPermanent()) {
  259.                             $salaryPaySlip->setNumberHourPerformed($salaryContract->getWorkingTime($paySlip->getDateStart(), $paySlip->getDateEnd()));
  260.                         }
  261.                         
  262.                         $salaryPaySlip->setRhSalaryContract($salaryContract);
  263.                         $salaryPaySlip->setBaseSalary($salaryPaySlip->getHourlyRate() * $salaryPaySlip->getNumberHourPerformed());
  264.                         $salaryPaySlip->setDay($paySlip->getDateEnd()->format('Y-m-s'));
  265.                         $salaryPaySlip->setMonth($paySlip->getDateEnd()->format('Y-m'));
  266.                         $salaryPaySlip->setYear($paySlip->getDateEnd()->format('Y'));
  267.                         if ($salaryContract->getRhSalary()->getIsPermanent()) {
  268.                             foreach ($taxableItemRepository->findBy([], ['num' => 'ASC']) as $key => $taxableItem) {
  269.                                 $paySlipTaxableItem = new RhPaySlipTaxableItem();
  270.                                 $paySlipTaxableItem->setComputeMethod($taxableItem->getComputeMethod());
  271.                                 $paySlipTaxableItem->setLabel($taxableItem->getLabel());
  272.                                 $paySlipTaxableItem->setCode($taxableItem->getLabel());
  273.                                 $paySlipTaxableItem->setNum($taxableItem->getNum());
  274.                                 $paySlipTaxableItem->setRhSalaryPaySlip($salaryPaySlip);
  275.                                 if (null != $salaryPaySlip->getHourlyRate()) {
  276.                                     $paySlipTaxableItem->setBased($salaryPaySlip->getHourlyRate());
  277.                                 }else {
  278.                                     $paySlipTaxableItem->setBased(0);
  279.                                 }
  280.                                 
  281.                                 if (null != $salaryPaySlip->getNumberHourPerformed()) {
  282.                                     $paySlipTaxableItem->setRate($salaryPaySlip->getNumberHourPerformed());
  283.                                 }else {
  284.                                     $paySlipTaxableItem->setRate(1);
  285.                                 }
  286.                                 $paySlipTaxableItem SalaryContractManage::setPaySlipTaxableItem($salaryContract$paySlipTaxableItem$taxableItem);
  287.                                 
  288.                                 $salaryPaySlip->setGrossTotal($salaryPaySlip->getGrossTotal() + $paySlipTaxableItem->getProfit());
  289.                                 $salaryPaySlip->setTaxGross($salaryPaySlip->getTaxGross() + $paySlipTaxableItem->getProfit());
  290.                                 $salaryPaySlip->setSocialGross($salaryPaySlip->getSocialGross() + $paySlipTaxableItem->getProfit());
  291.                                 $paySlipTaxableItem->setDay($paySlip->getDateEnd()->format('Y-m-s'));
  292.                                 $paySlipTaxableItem->setMonth($paySlip->getDateEnd()->format('Y-m'));
  293.                                 $paySlipTaxableItem->setYear($paySlip->getDateEnd()->format('Y'));
  294.                                 $paySlipTaxableItem->setEstablishment($paySlip->getEstablishment());
  295.                                 
  296.                                 $entityManager->persist($paySlipTaxableItem);
  297.                             }
  298.                         }else {
  299.                             foreach ($taxableItemRepository->findBy([], ['num' => 'ASC']) as $key => $taxableItem) {
  300.                                 if ($taxableItem->getComputeMethod() != 'PRIME ANCIENNETE') {
  301.                                     $paySlipTaxableItem = new RhPaySlipTaxableItem();
  302.                                     $paySlipTaxableItem->setComputeMethod($taxableItem->getComputeMethod());
  303.                                     $paySlipTaxableItem->setLabel($taxableItem->getLabel());
  304.                                     $paySlipTaxableItem->setCode($taxableItem->getLabel());
  305.                                     $paySlipTaxableItem->setNum($taxableItem->getNum());
  306.                                     $paySlipTaxableItem->setRhSalaryPaySlip($salaryPaySlip);
  307.                                     if (null != $salaryPaySlip->getHourlyRate()) {
  308.                                         $paySlipTaxableItem->setBased($salaryPaySlip->getHourlyRate());
  309.                                     }else {
  310.                                         $paySlipTaxableItem->setBased(0);
  311.                                     }
  312.                                     
  313.                                     if (null != $salaryPaySlip->getNumberHourPerformed()) {
  314.                                         $paySlipTaxableItem->setRate($salaryPaySlip->getNumberHourPerformed());
  315.                                     }else {
  316.                                         $paySlipTaxableItem->setRate(1);
  317.                                     }
  318.                                     $paySlipTaxableItem SalaryContractManage::setPaySlipTaxableItem($salaryContract$paySlipTaxableItem$taxableItem);
  319.                                     
  320.                                     $salaryPaySlip->setGrossTotal($salaryPaySlip->getGrossTotal() + $paySlipTaxableItem->getProfit());
  321.                                     $salaryPaySlip->setTaxGross($salaryPaySlip->getTaxGross() + $paySlipTaxableItem->getProfit());
  322.                                     $salaryPaySlip->setSocialGross($salaryPaySlip->getSocialGross() + $paySlipTaxableItem->getProfit());
  323.                                     $paySlipTaxableItem->setDay($paySlip->getDateEnd()->format('Y-m-s'));
  324.                                     $paySlipTaxableItem->setMonth($paySlip->getDateEnd()->format('Y-m'));
  325.                                     $paySlipTaxableItem->setYear($paySlip->getDateEnd()->format('Y'));
  326.                                     $paySlipTaxableItem->setEstablishment($paySlip->getEstablishment());
  327.                                     
  328.                                     $entityManager->persist($paySlipTaxableItem);
  329.                                 }
  330.                             }
  331.                         }
  332.                         foreach ($salaryContract->getRhSalaryContractItems([], ['num' => 'ASC']) as $key => $salaryContractItem) {
  333.                             if ($salaryContractItem->getType() == 'IMPOSABLE') {
  334.                                 $paySlipTaxableItem = new RhPaySlipTaxableItem();
  335.                                 $paySlipTaxableItem->setComputeMethod('DEFAUT');
  336.                                 $paySlipTaxableItem->setLabel($salaryContractItem->getLabel());
  337.                                 $paySlipTaxableItem->setCode($salaryContractItem->getLabel());
  338.                                 $paySlipTaxableItem->setNum($salaryContractItem->getNum());
  339.                                 $paySlipTaxableItem->setRhSalaryPaySlip($salaryPaySlip);
  340.                                 $paySlipTaxableItem->setRate(1);
  341.                                 $paySlipTaxableItem->setBased($salaryContractItem->getBased());
  342.                                 $paySlipTaxableItem SalaryContractManage::setPaySlipTaxableItem($salaryContract$paySlipTaxableItemnull);
  343.                                 
  344.                                 $salaryPaySlip->setGrossTotal($salaryPaySlip->getGrossTotal() + $paySlipTaxableItem->getProfit());
  345.                                 $salaryPaySlip->setTaxGross($salaryPaySlip->getTaxGross() + $paySlipTaxableItem->getProfit());
  346.                                 $salaryPaySlip->setSocialGross($salaryPaySlip->getSocialGross() + $paySlipTaxableItem->getProfit());
  347.                                 $paySlipTaxableItem->setDay($paySlip->getDateEnd()->format('Y-m-s'));
  348.                                 $paySlipTaxableItem->setMonth($paySlip->getDateEnd()->format('Y-m'));
  349.                                 $paySlipTaxableItem->setYear($paySlip->getDateEnd()->format('Y'));
  350.                                 $paySlipTaxableItem->setEstablishment($paySlip->getEstablishment());
  351.                                 
  352.                                 $entityManager->persist($paySlipTaxableItem);
  353.                             }else {
  354.                                 if ($salaryContractItem->getBased() > $salaryContractItem->getAmountLimit()) {
  355.                                     $paySlipTaxableItem = new RhPaySlipTaxableItem();
  356.                                     $paySlipTaxableItem->setComputeMethod('DEFAUT');
  357.                                     $paySlipTaxableItem->setLabel($salaryContractItem->getLabel()." imposable");
  358.                                     $paySlipTaxableItem->setCode($salaryContractItem->getLabel()." imposable");
  359.                                     $paySlipTaxableItem->setNum($salaryContractItem->getNum());
  360.                                     $paySlipTaxableItem->setRhSalaryPaySlip($salaryPaySlip);
  361.                                     $paySlipTaxableItem->setRate(1);
  362.                                     $paySlipTaxableItem->setBased($salaryContractItem->getBased() - $salaryContractItem->getAmountLimit());
  363.                                     $paySlipTaxableItem SalaryContractManage::setPaySlipTaxableItem($salaryContract$paySlipTaxableItemnull);
  364.                                     
  365.                                     $salaryPaySlip->setGrossTotal($salaryPaySlip->getGrossTotal() + $paySlipTaxableItem->getProfit());
  366.                                     $salaryPaySlip->setTaxGross($salaryPaySlip->getTaxGross() + $paySlipTaxableItem->getProfit());
  367.                                     $salaryPaySlip->setSocialGross($salaryPaySlip->getSocialGross() + $paySlipTaxableItem->getProfit());
  368.                                     $paySlipTaxableItem->setDay($paySlip->getDateEnd()->format('Y-m-s'));
  369.                                     $paySlipTaxableItem->setMonth($paySlip->getDateEnd()->format('Y-m'));
  370.                                     $paySlipTaxableItem->setYear($paySlip->getDateEnd()->format('Y'));
  371.                                     $paySlipTaxableItem->setEstablishment($paySlip->getEstablishment());
  372.                                     $entityManager->persist($paySlipTaxableItem);
  373.                                 }
  374.                                 $paySlipNonTaxableItem = new RhPaySlipNonTaxableItem();
  375.                                 $paySlipNonTaxableItem->setComputeMethod('DEFAUT');
  376.                                 $paySlipNonTaxableItem->setLabel($salaryContractItem->getLabel());
  377.                                 $paySlipNonTaxableItem->setCode($salaryContractItem->getLabel());
  378.                                 $paySlipNonTaxableItem->setNum($salaryContractItem->getNum());
  379.                                 $paySlipNonTaxableItem->setRhSalaryPaySlip($salaryPaySlip);
  380.                                 $paySlipNonTaxableItem->setRate(1);
  381.                                 $paySlipNonTaxableItem->setBased($salaryContractItem->getAmountLimit());
  382.                                 $paySlipNonTaxableItem SalaryContractManage::setPaySlipNonTaxableItem($salaryContract$paySlipNonTaxableItem$salaryContractItem);
  383.                                 
  384.                                 $salaryPaySlip->setGrossTotal($salaryPaySlip->getGrossTotal() + $paySlipNonTaxableItem->getProfit());
  385.                                 /* le transport n'est pas inclus dans le brut social */
  386.                                 if (!str_contains($salaryContractItem->getLabel(), 'TRANSPORT')) {
  387.                                     $salaryPaySlip->setSocialGross($salaryPaySlip->getSocialGross() + $paySlipNonTaxableItem->getProfit());
  388.                                 }
  389.                                 $paySlipNonTaxableItem->setDay($paySlip->getDateEnd()->format('Y-m-s'));
  390.                                 $paySlipNonTaxableItem->setMonth($paySlip->getDateEnd()->format('Y-m'));
  391.                                 $paySlipNonTaxableItem->setYear($paySlip->getDateEnd()->format('Y'));
  392.                                 $paySlipNonTaxableItem->setEstablishment($paySlip->getEstablishment());
  393.                                 
  394.                                 $entityManager->persist($paySlipNonTaxableItem);
  395.                             }
  396.                         }
  397.                         if ($salaryContract->getRhSalary()->getIsPermanent()) {
  398.                             foreach ($retainedItemRepository->findBy([], ['num' => 'ASC']) as $key => $retainedItem) {
  399.                                 if ($retainedItem->getComputeMethod() != self::LABEL_RATE_NOT_PERMANANT) {
  400.                                     $paySlipRetainedItem = new RhPaySlipRetainedItem();
  401.                                     $paySlipRetainedItem->setType($retainedItem->getType());
  402.                                     $paySlipRetainedItem->setPart($retainedItem->getPart());
  403.                                     $paySlipRetainedItem->setComputeMethod($retainedItem->getComputeMethod());
  404.                                     $paySlipRetainedItem->setLabel($retainedItem->getLabel());
  405.                                     $paySlipRetainedItem->setCode($retainedItem->getLabel());
  406.                                     $paySlipRetainedItem->setNum($retainedItem->getNum());
  407.                                     $paySlipRetainedItem->setRhSalaryPaySlip($salaryPaySlip);
  408.                                     if ($retainedItem->getComputeMethod() == 'ITS') {
  409.                                         $paySlipRetainedItem SalaryContractManage::setITS($salaryContract$salaryPaySlip$paySlipRetainedItem$retainedItem$taxReductionSheduleRepository$salaryBandScaleRepository);
  410.                                     }else {
  411.                                         $paySlipRetainedItem SalaryContractManage::setPaySlipRetainedItem($salaryContract$salaryPaySlip$paySlipRetainedItem$retainedItem);
  412.                                     }
  413.                                     
  414.                                     if ($retainedItem->getPart() == 'SALARIALE') {
  415.                                         $salaryPaySlip->setWithholdingTax($salaryPaySlip->getWithholdingTax() + $paySlipRetainedItem->getProfit());
  416.                                     }else {
  417.                                         $salaryPaySlip->setPatronalWithholdingTax($salaryPaySlip->getPatronalWithholdingTax() + $paySlipRetainedItem->getProfit());
  418.                                     }
  419.                                     
  420.                                     $paySlipRetainedItem->setDay($paySlip->getDateEnd()->format('Y-m-s'));
  421.                                     $paySlipRetainedItem->setMonth($paySlip->getDateEnd()->format('Y-m'));
  422.                                     $paySlipRetainedItem->setYear($paySlip->getDateEnd()->format('Y'));
  423.                                     $paySlipRetainedItem->setEstablishment($paySlip->getEstablishment());
  424.                                     
  425.                                     $entityManager->persist($paySlipRetainedItem);
  426.                                 }
  427.                             }
  428.                         }else {
  429.                             foreach ($retainedItemRepository->findBy([], ['num' => 'ASC']) as $key => $retainedItem) {
  430.                                 if ($retainedItem->getComputeMethod() == self::LABEL_RATE_NOT_PERMANANT) {
  431.                                     $paySlipRetainedItem = new RhPaySlipRetainedItem();
  432.                                     $paySlipRetainedItem->setType($retainedItem->getType());
  433.                                     $paySlipRetainedItem->setPart($retainedItem->getPart());
  434.                                     $paySlipRetainedItem->setComputeMethod($retainedItem->getComputeMethod());
  435.                                     $paySlipRetainedItem->setLabel($retainedItem->getLabel());
  436.                                     $paySlipRetainedItem->setCode($retainedItem->getLabel());
  437.                                     $paySlipRetainedItem->setNum($retainedItem->getNum());
  438.                                     $paySlipRetainedItem->setRhSalaryPaySlip($salaryPaySlip);
  439.                                     if ($retainedItem->getComputeMethod() == 'ITS') {
  440.                                         $paySlipRetainedItem SalaryContractManage::setITS($salaryContract$salaryPaySlip$paySlipRetainedItem$retainedItem$taxReductionSheduleRepository$salaryBandScaleRepository);
  441.                                     }else {
  442.                                         $paySlipRetainedItem SalaryContractManage::setPaySlipRetainedItem($salaryContract$salaryPaySlip$paySlipRetainedItem$retainedItem);
  443.                                     }
  444.                                     
  445.                                     if ($retainedItem->getPart() == 'SALARIALE') {
  446.                                         $salaryPaySlip->setWithholdingTax($salaryPaySlip->getWithholdingTax() + $paySlipRetainedItem->getProfit());
  447.                                     }else {
  448.                                         $salaryPaySlip->setPatronalWithholdingTax($salaryPaySlip->getPatronalWithholdingTax() + $paySlipRetainedItem->getProfit());
  449.                                     }
  450.                                     
  451.                                     $paySlipRetainedItem->setDay($paySlip->getDateEnd()->format('Y-m-s'));
  452.                                     $paySlipRetainedItem->setMonth($paySlip->getDateEnd()->format('Y-m'));
  453.                                     $paySlipRetainedItem->setYear($paySlip->getDateEnd()->format('Y'));
  454.                                     $paySlipRetainedItem->setEstablishment($paySlip->getEstablishment());
  455.                                     
  456.                                     $entityManager->persist($paySlipRetainedItem);
  457.                                 }
  458.                             }
  459.                         }
  460.                         $rhSalaryCreditSheduls $rhSalaryCreditShedulRepository->createQueryBuilder('entity')
  461.                         ->innerJoin('entity.rhSalaryCredit''rhSalaryCredit')
  462.                         ->addSelect('rhSalaryCredit')
  463.                         ->andWhere('entity.date_due BETWEEN :dateStart AND :dateEnd')
  464.                         ->setParameter('dateStart'$paySlip->getDateStart())
  465.                         ->setParameter('dateEnd'$paySlip->getDateEnd())
  466.                         ->andWhere('rhSalaryCredit.rhSalary = :rhSalary')
  467.                         ->setParameter('rhSalary'$salaryContract->getRhSalary())
  468.                         ->getQuery()
  469.                         ->getResult();
  470.                         foreach ($rhSalaryCreditSheduls as $key => $rhSalaryCreditShedul) {
  471.                             if ($rhSalaryCreditShedul->amountRestToPaid() > 0) {
  472.                                 $paySlipRetainedItem = new RhPaySlipRetainedItem();
  473.                                 $paySlipRetainedItem->setType('AUTRES');
  474.                                 $paySlipRetainedItem->setPart('SALARIALE');
  475.                                 $paySlipRetainedItem->setComputeMethod("DEFAUT");
  476.                                 $paySlipRetainedItem->setLabel('Retenue Echéancié Prêt du '.$rhSalaryCreditShedul->getDateDue()->format('d/m/Y'));
  477.                                 $paySlipRetainedItem->setCode("EP-".$rhSalaryCreditShedul->getId().'-du-'.$rhSalaryCreditShedul->getDateDue()->format('d-m-Y'));
  478.                                 $paySlipRetainedItem->setNum('99');
  479.                                 $paySlipRetainedItem->setRhSalaryPaySlip($salaryPaySlip);
  480.                                 $paySlipRetainedItem->setRate(1);
  481.                                 $paySlipRetainedItem->setBased($rhSalaryCreditShedul->amountRestToPaid());
  482.                                 $paySlipRetainedItem->setProfit($rhSalaryCreditShedul->amountRestToPaid());
  483.                                 $paySlipRetainedItem SalaryContractManage::setPaySlipRetainedItem($salaryContract$salaryPaySlip$paySlipRetainedItemnull); 
  484.                                 $salaryPaySlip->setWithholdingTax($salaryPaySlip->getWithholdingTax() + $paySlipRetainedItem->getProfit());
  485.                                 
  486.                                 $paySlipRetainedItem->setRhSalaryCreditShedul($rhSalaryCreditShedul);
  487.                                 $paySlipRetainedItem->setDay($paySlip->getDateEnd()->format('Y-m-s'));
  488.                                 $paySlipRetainedItem->setMonth($paySlip->getDateEnd()->format('Y-m'));
  489.                                 $paySlipRetainedItem->setYear($paySlip->getDateEnd()->format('Y'));
  490.                                 $paySlipRetainedItem->setEstablishment($paySlip->getEstablishment());
  491.                                 
  492.                                 $entityManager->persist($paySlipRetainedItem);
  493.                             }
  494.                         }
  495.                         $salaryPaySlip->setCode('PAIE-'.$salaryContract->getId().$paySlip->getId());
  496.                         $salaryPaySlip->setNetSalary($salaryPaySlip->getGrossTotal() - ($salaryPaySlip->getWithholdingTax() + $salaryPaySlip->getOthersRetained()));
  497.                         $entityManager->persist($salaryPaySlip);
  498.                     //}
  499.                 }
  500.             }
  501.         }
  502.         try {
  503.             $entityManager->flush();
  504.             $this->addFlash('info'"les ligne(s) ont été générées avec succès.");
  505.         } catch (\Throwable $th) {
  506.             //$th->getMessage()
  507.             $this->addFlash('info'$th->getMessage());
  508.         }
  509.         return $this->redirectToRoute('rh_pay_slip_show', [
  510.             'id' => $paySlip->getId()
  511.         ]);
  512.     }
  513.     /**
  514.      * @Route("/print/{id}", name="rh_pay_slip_print", methods={"GET"})
  515.      */
  516.     public function print(Request $requestPdf $knpSnappyPdfRhPaySlip $paySlipRhSalaryPaySlipRepository $salaryPaySlipRepository)
  517.     {
  518.         $establishment $this->getUser()->getEstablishment();
  519.         $setting $establishment;
  520.         $salaryPaySlips $salaryPaySlipRepository->createQueryBuilder('entity')
  521.         ->andWhere('entity.establishment = :establishment')
  522.         ->setParameter('establishment'$setting)
  523.         ->andWhere('entity.rhPaySlip = :rhPaySlip')
  524.         ->setParameter('rhPaySlip'$paySlip)
  525.         ->innerJoin('entity.rhSalary''rhSalary')
  526.         ->addSelect('rhSalary')
  527.         /* ->andWhere('rhSalary.bank_name = :bank_name')
  528.         ->setParameter('bank_name', $request->get('bankName')) */
  529.         
  530.         ->orderBy('rhSalary.last_name''ASC')
  531.         ->getQuery()
  532.         ->getResult();
  533.         $paySlipLines = new ArrayCollection();
  534.         $netToPay 0;
  535.         foreach ($salaryPaySlips as $key => $salaryPaySlip) {
  536.             if (strlen($request->get('bankName')) > 0) {
  537.                 if ($salaryPaySlip->getRhSalary()->getBankName() == $request->get('bankName')) {
  538.                     $paySlipLines->add(
  539.                         [
  540.                             'fullName' => $salaryPaySlip->getRhSalary()->getName(),
  541.                             'bankName' => $salaryPaySlip->getRhSalary()->getBankName(),
  542.                             'bankCode' => $salaryPaySlip->getRhSalary()->getBankCode(),
  543.                             'bankCounterCode' => $salaryPaySlip->getRhSalary()->getCounterCode(),
  544.                             'job' => $salaryPaySlip->getRhSalaryContract()->getService(),
  545.                             'bankAccountNumber' => $salaryPaySlip->getRhSalary()->getBankAccountNumber(),
  546.                             'finetAccountNumber' => $salaryPaySlip->getRhSalary()->getFinetAccountNumber(),
  547.                             'netToPay' => $salaryPaySlip->getNetSalary(),
  548.                             'taxGross' => $salaryPaySlip->getTaxGross(),
  549.                             'pTransport' => $salaryPaySlip->getPTransport()
  550.                         ]
  551.                     );
  552.                     $netToPay $netToPay $salaryPaySlip->getNetSalary();
  553.                 }
  554.             }else {
  555.                 $paySlipLines->add(
  556.                     [
  557.                         'fullName' => $salaryPaySlip->getRhSalary()->getName(),
  558.                         'bankName' => $salaryPaySlip->getRhSalary()->getBankName(),
  559.                         'bankCode' => $salaryPaySlip->getRhSalary()->getBankCode(),
  560.                         'bankCounterCode' => $salaryPaySlip->getRhSalary()->getCounterCode(),
  561.                         'job' => $salaryPaySlip->getRhSalaryContract()->getService(),
  562.                         'bankAccountNumber' => $salaryPaySlip->getRhSalary()->getBankAccountNumber(),
  563.                         'finetAccountNumber' => $salaryPaySlip->getRhSalary()->getFinetAccountNumber(),
  564.                         'netToPay' => $salaryPaySlip->getNetSalary(),
  565.                         'taxGross' => $salaryPaySlip->getTaxGross(),
  566.                         'pTransport' => $salaryPaySlip->getPTransport()
  567.                     ]
  568.                 );
  569.                 $netToPay $netToPay $salaryPaySlip->getNetSalary();
  570.             }
  571.         }
  572.         $iterator $paySlipLines->getIterator();
  573.         $iterator->uasort(function ($first$second) {
  574.             if ($first === $second) {
  575.                 return 0;
  576.             }
  577.             return $first['fullName'] < $second['fullName'] ? -1;
  578.         });
  579.         $paySlipLines = new ArrayCollection(iterator_to_array($iterator));
  580.         $html $this->renderView('rh/rh_pay_slip/print/order.html.twig', [
  581.             'paySlip' => $paySlip,
  582.             'paySlipLines' => $paySlipLines,
  583.             'netToPay' => $netToPay,
  584.             'bankName' => $request->get('bankName'),
  585.             'setting' => $setting,
  586.         ]);
  587.         $file_name "OV_".$paySlip->getId().".pdf";
  588.         $footer $this->renderView('print/footer.html.twig', ['setting' => $establishment]);
  589.         $header $this->renderView('print/header.html.twig', ['setting' => $establishment]);
  590.         $options = [
  591.             'orientation' => 'Portrait',
  592.             'header-html' => $header
  593.             //'footer-html' => $footer
  594.         ];
  595.         $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/payslips/' $file_name$optionstrue);
  596.         return $this->redirectToRoute('preview', [
  597.             'file' => $file_name,
  598.             'dir' => 'payslips',
  599.         ]);
  600.     }
  601.     /**
  602.      * @Route("/export/{id}", name="rh_pay_slip_export", methods={"GET"})
  603.      */
  604.     public function export(RhPaySlip $paySlip)
  605.     {
  606.         $setting $this->getUser()->getEstablishment();
  607.         $paySlipInCompanyBankLines = new ArrayCollection();
  608.         foreach ($paySlip->getRhSalaryPaySlips() as $key => $salaryPaySlip) {
  609.             //if ($salaryPaySlip->getRhSalary()->getBankCode() == $setting->getBankCode()) {
  610.                 $paySlipInCompanyBankLines->add(
  611.                     [
  612.                         'companyName' => $setting->getName(),
  613.                         'fullName' => $salaryPaySlip->getRhSalary()->getName(),
  614.                         'counter' => $salaryPaySlip->getRhSalary()->getCounterCode(),
  615.                         'bankAccountNumber' => $salaryPaySlip->getRhSalary()->getBankAccountNumber(),
  616.                         'finetAccountNumber' => $salaryPaySlip->getRhSalary()->getFinetAccountNumber(),
  617.                         'netToPaid' => number_format($salaryPaySlip->getNetSalary(), 0','''),
  618.                         'label' => $paySlip->getLabel(),
  619.                         'bank' => $salaryPaySlip->getRhSalary()->getBankCode()
  620.                     ]
  621.                 );
  622.             //}
  623.         }
  624.         $iterator $paySlipInCompanyBankLines->getIterator();
  625.         $iterator->uasort(function ($first$second) {
  626.             if ($first === $second) {
  627.                 return 0;
  628.             }
  629.             return $first['bankAccountNumber'] < $second['bankAccountNumber'] ? -1;
  630.         });
  631.         $paySlipInCompanyBankLines = new ArrayCollection(iterator_to_array($iterator));
  632.         $spreadsheet = new Spreadsheet();
  633.         $sheet $spreadsheet->getActiveSheet();
  634.         $sheet->setCellValue('A1''ETABLISSEMENT');
  635.         $sheet->setCellValue('B1''NOM ET PRENOMS');
  636.         $sheet->setCellValue('C1''GUICHE');
  637.         $sheet->setCellValue('D1''N° COMPTE BANCAIRE');
  638.         $sheet->setCellValue('E1''N° FINCARTE');
  639.         $sheet->setCellValue('F1''MONTANT');
  640.         $sheet->setCellValue('G1''LIBELLE');
  641.         $sheet->setCellValue('H1''BANQUE');
  642.         $index 2;
  643.         $loopIndex 1;
  644.         foreach ($paySlipInCompanyBankLines as $key => $paySlipInCompanyBankLine) {
  645.             $sheet->setCellValue('A' $index$paySlipInCompanyBankLine['companyName']);
  646.             $sheet->setCellValue('B' $index$paySlipInCompanyBankLine['fullName']);
  647.             $sheet->setCellValue('C' $index$paySlipInCompanyBankLine['counter']);
  648.             $sheet->setCellValue('D' $index$paySlipInCompanyBankLine['bankAccountNumber']);
  649.             $sheet->setCellValue('E' $index$paySlipInCompanyBankLine['finetAccountNumber']);
  650.             $sheet->setCellValue('F' $index$paySlipInCompanyBankLine['netToPaid']);
  651.             $sheet->setCellValue('G' $index$paySlipInCompanyBankLine['label']);
  652.             $sheet->setCellValue('H' $index$paySlipInCompanyBankLine['bank']);
  653.             $index $index 1;
  654.             $loopIndex $loopIndex 1;
  655.         }
  656.         $sheet->setCellValue('A' $index'');
  657.         $sheet->setCellValue('B' $index'');
  658.         $sheet->setCellValue('C' $index'');
  659.         $sheet->setCellValue('D' $index'');
  660.         $sheet->setCellValue('E' $index'');
  661.         $sheet->setCellValue('F' $index'');
  662.         $sheet->setCellValue('G' $index'');
  663.         $sheet->setCellValue('H' $index'');
  664.         $index $index 1;
  665.         $loopIndex $loopIndex 1;
  666.         
  667.         $sheet->setTitle('OV-' $paySlip->getId());
  668.         $writer = new Xlsx($spreadsheet);
  669.         // Create a Temporary file in the system
  670.         $fileName 'OV-' $paySlip->getLabel() . '.xlsx';
  671.         $temp_file tempnam(sys_get_temp_dir(), $fileName);
  672.         $writer->save($temp_file);
  673.         // Return the excel file as an attachment
  674.         return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  675.     }
  676.     /**
  677.      * @Route("/validated/{id}", name="rh_pay_slip_validated", methods={"GET"})
  678.      */
  679.     public function validated(RhPaySlip $paySlip): Response
  680.     {
  681.         $entityManager $this->getDoctrine()->getManager();
  682.         foreach ($paySlip->getRhSalaryPaySlips() as $key => $salaryPaySlip) {
  683.             $salaryPaySlip->setIsValidated(true);
  684.         }
  685.         $paySlip->setIsValidated(true);
  686.         try {
  687.             $entityManager->flush();
  688.             return $this->json(['code' => 200'message' => "Validation effectuée"], 200);
  689.         } catch (\Throwable $th) {
  690.             $this->addFlash('warning'$th->getMessage());
  691.         }
  692.         
  693.         $this->addFlash('warning'"Validation non effectuée.");
  694.         return $this->json(['code' => 500'message' => "Validation non effectuée."], 200);
  695.     }
  696.     /**
  697.      * @Route("/cancel/{id}", name="rh_pay_slip_cancel", methods={"GET"})
  698.      */
  699.     public function cancel(RhPaySlip $paySlip): Response
  700.     {
  701.         $entityManager $this->getDoctrine()->getManager();
  702.         foreach ($paySlip->getRhSalaryPaySlips() as $key => $salaryPaySlip) {
  703.             $salaryPaySlip->setIsValidated(false);
  704.         }
  705.         $paySlip->setIsValidated(false);
  706.         try {
  707.             $entityManager->flush();
  708.             return $this->json(['code' => 200'message' => "Annulation effectuée"], 200);
  709.         } catch (\Throwable $th) {
  710.             $this->addFlash('warning'$th->getMessage());
  711.         }
  712.         
  713.         $this->addFlash('warning'"Annulation non effectuée.");
  714.         return $this->json(['code' => 500'message' => "Annulation non effectuée."], 200);
  715.     }
  716.     /**
  717.      * @Route("/paysheet/{id}/print", name="rh_pay_slip_paysheet_print", methods={"GET"})
  718.      */
  719.     public function paysheet_print(Pdf $knpSnappyPdfRhPaySlip $paySlipRhSalaryPaySlipRepository $rhSalaryPaySlipRepository)
  720.     {
  721.         /**@var User $user */
  722.         $user $this->getUser();
  723.         $establishment $user->getEstablishment();
  724.         $setting $establishment;
  725.         $rhSalaryPaySlips $rhSalaryPaySlipRepository->createQueryBuilder('entity')
  726.         ->innerJoin('entity.rhSalary''rhSalary')
  727.         ->addSelect('rhSalary')
  728.         ->andWhere('entity.rhPaySlip = :rhPaySlip')
  729.         ->setParameter('rhPaySlip'$paySlip)
  730.         ->andWhere('entity.establishment = :establishment')
  731.         ->setParameter('establishment'$establishment)
  732.         ->orderBy('rhSalary.last_name''ASC')
  733.         ->getQuery()
  734.         ->getResult();
  735.         $html $this->renderView('rh/rh_pay_slip/print/paysheet.html.twig', [
  736.             'paySlip' => $paySlip,
  737.             'rhSalaryPaySlips' => $rhSalaryPaySlips,
  738.             'setting' => $setting,
  739.         ]);
  740.         $footer $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
  741.         $header $this->renderView('print/header.html.twig', ['setting' => $setting,]);
  742.         $options = [
  743.             'orientation' => 'Landscape'
  744.             //'header-html' => $header
  745.             //'footer-html' => $footer
  746.         ];
  747.         $file_name "LIVRE_PAIE_".$paySlip->getId().".pdf";
  748.         try {
  749.             $knpSnappyPdf->generateFromHtml($html$this->getParameter('app.app_directory').'/downloads/payslips/' $file_name$optionstrue);
  750.         } catch (\Throwable $th) {
  751.             $this->addFlash('info'"Effectué");
  752.         }
  753.         return $this->redirectToRoute('preview', [
  754.             'file' => $file_name,
  755.             'dir' => 'payslips',
  756.         ]);
  757.     }
  758.     /**
  759.      * @Route("/cnps-declaration/export/{id}", name="rh_pay_slip_cnps_declaration_export", methods={"GET"})
  760.      */
  761.     public function cnps_declaration_expor(RhPaySlip $paySlipRhSalaryPaySlipRepository $rhSalaryPaySlipRepository)
  762.     {
  763.         /**@var User $user */
  764.         $user $this->getUser();
  765.         $establishment $user->getEstablishment();
  766.         $setting $establishment;
  767.         $spreadsheet = new Spreadsheet();
  768.         $sheet $spreadsheet->getActiveSheet();
  769.         $sheet->setCellValue('A1''NUMERO CNPS');
  770.         $sheet->setCellValue('B1''NOM');
  771.         $sheet->setCellValue('C1''PRENOMS');
  772.         $sheet->setCellValue('D1''ANNEE DE NAISSANCE');
  773.         $sheet->setCellValue('E1''DATE D\'EMBAUCHE');
  774.         $sheet->setCellValue('F1''DATE DE DEPART');
  775.         $sheet->setCellValue('G1''TYPE SALARIE M: Mensuel J : Journalier H: Horaire');
  776.         $sheet->setCellValue('H1''DUREE TRAVAILLEE');
  777.         $sheet->setCellValue('I1''SALAIRE BRUT');
  778.         $index 2;
  779.         $loopIndex 1;
  780.         $tax_gross 0;
  781.         $rhSalaryPaySlips $rhSalaryPaySlipRepository->createQueryBuilder('entity')
  782.         ->innerJoin('entity.rhSalary''rhSalary')
  783.         ->addSelect('rhSalary')
  784.         ->andWhere('rhSalary.is_declared = :is_declared')
  785.         ->setParameter('is_declared'1)
  786.         ->andWhere('entity.rhPaySlip = :rhPaySlip')
  787.         ->setParameter('rhPaySlip'$paySlip)
  788.         ->orderBy('rhSalary.social_number''DESC')
  789.         ->getQuery()
  790.         ->getResult();
  791.         foreach ($rhSalaryPaySlips as $key => $salaryPaySlip) {
  792.             if ($salaryPaySlip->getRhSalary()->getIsDeclared()) {
  793.                 $sheet->setCellValue('A' $index' '.$salaryPaySlip->getRhSalary()->getSocialNumber());
  794.                 $sheet->setCellValue('B' $index$salaryPaySlip->getRhSalary()->getLastName());
  795.                 $sheet->setCellValue('C' $index$salaryPaySlip->getRhSalary()->getFirstName());
  796.                 $sheet->setCellValue('D' $index$salaryPaySlip->getRhSalary()->getBirthDay() ? $salaryPaySlip->getRhSalary()->getBirthDay()->format('Y') : '');
  797.                 $sheet->setCellValue('E' $index$salaryPaySlip->getRhSalaryContract()->getStartDate() ? $salaryPaySlip->getRhSalaryContract()->getStartDate()->format('d/m/Y') : '');
  798.                 $sheet->setCellValue('F' $index$salaryPaySlip->getRhSalaryContract()->getEndDate() ? $salaryPaySlip->getRhSalaryContract()->getEndDate()->format('d/m/Y') : '');
  799.                 $sheet->setCellValue('G' $index'M');
  800.                 $sheet->setCellValue('H' $index'1');
  801.                 $sheet->setCellValue('I' $index$salaryPaySlip->getSocialGross());
  802.                 $index += 1;
  803.                 $loopIndex +=  1;
  804.                 $tax_gross += $salaryPaySlip->getSocialGross();
  805.             }
  806.         }
  807.         
  808.         
  809.         $sheet->setCellValue('A' $index'');
  810.         $sheet->setCellValue('B' $index'');
  811.         $sheet->setCellValue('C' $index'');
  812.         $sheet->setCellValue('D' $index'');
  813.         $sheet->setCellValue('E' $index'');
  814.         $sheet->setCellValue('F' $index'');
  815.         $sheet->setCellValue('G' $index'');
  816.         $sheet->setCellValue('H' $index'');
  817.         $sheet->setCellValue('I' $index$tax_gross);
  818.         $index $index 1;
  819.         $loopIndex $loopIndex 1;
  820.         
  821.         $sheet->setTitle('DECL_CNPS' $paySlip->getId());
  822.         $writer = new Xlsx($spreadsheet);
  823.         // Create a Temporary file in the system
  824.         $fileName 'DECL_CNPS_' $paySlip->getLabel() . '_' str_replace(' ''_'$setting->getEstablishmentGroup()->getName()) . '.xlsx';
  825.         $temp_file tempnam(sys_get_temp_dir(), $fileName);
  826.         $writer->save($temp_file);
  827.         // Return the excel file as an attachment
  828.         return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  829.     }
  830. }