src/Controller/Salarie/GestionSalarieController.php line 90

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Salarie;
  3. use Mpdf\Mpdf;
  4. use App\Entity\Lrib;
  5. use App\Entity\nuts;
  6. use App\Entity\PPiece;
  7. use App\Entity\Diplome;
  8. use App\Entity\Pbareme;
  9. use App\Entity\Periode;
  10. use App\Entity\VMatrix;
  11. use App\Entity\PDossier;
  12. use App\Entity\Pemploye;
  13. use App\Entity\LContract;
  14. use App\Entity\Pfonction;
  15. use App\Entity\Prubrique;
  16. use App\Entity\Tbulletin;
  17. use App\Entity\PBaremeCimr;
  18. use App\Entity\TbulletinLg;
  19. use App\Entity\LelementFixe;
  20. use App\Entity\PbaremeBrute;
  21. use App\Entity\PdureeContract;
  22. use App\Entity\PnatureContract;
  23. use App\Entity\LdossierContract;
  24. use App\Controller\ApiController;
  25. use App\Entity\PNaturesalarieCab;
  26. use App\Entity\LmatriculationCoti;
  27. use App\Service\CalculPaieService;
  28. use App\Entity\PsituationFamiliale;
  29. use Doctrine\Persistence\ManagerRegistry;
  30. use Symfony\Component\HttpFoundation\Request;
  31. use Symfony\Component\HttpFoundation\Response;
  32. use Symfony\Component\Routing\Annotation\Route;
  33. use Symfony\Component\HttpFoundation\JsonResponse;
  34. use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;
  35. use Symfony\Component\Finder\Exception\AccessDeniedException;
  36. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  37. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  38. #[Route('/salarie/salarie')]
  39. class GestionSalarieController extends AbstractController
  40. {
  41.     private $em;
  42.     private $api;
  43.     private $calculPaieService;
  44.     public function __construct(ManagerRegistry $doctrineApiController $apiCalculPaieService $calculPaieService)
  45.     {
  46.         $this->em $doctrine->getManager();
  47.         $this->api $api;
  48.         $this->calculPaieService $calculPaieService;
  49.     }
  50.     #[Route('/'name'app_salarie_salarie'options: ['expose' => true])]
  51.     public function index(Request $request): Response
  52.     {
  53.         $operations $this->api->check($this->getUser(), 'app_salarie_salarie'$this->em$request);
  54.         if (!is_array($operations)) {
  55.             return $this->redirectToRoute('app_site');
  56.         } elseif (count($operations) == 0) {
  57.             return $this->render('includes/404.html.twig');
  58.         }
  59.         $natureSalarieCabs $this->em->getRepository(PNaturesalarieCab::class)->findAll();
  60.         $situationFamiliales $this->em->getRepository(PsituationFamiliale::class)->findAll();
  61.         $fonctions $this->em->getRepository(Pfonction::class)->findAll();
  62.         $pemployes $this->em->getRepository(Pemploye::class)->findAll();
  63.         $naturecontract $this->em->getRepository(PnatureContract::class)->findBy(['active' => true]);
  64.         // dd($naturecontract);:
  65.         $pbaremes $this->em->getRepository(Pbareme::class)->findAll();
  66.         $contract $this->em->getRepository(LContract::class)->findBy(['active' => 1]);
  67.         $dossiers $this->em->getRepository(PDossier::class)->findBy(['active' => true]);
  68.         $dossiersReafectation $this->em->getRepository(PDossier::class)->findBy(['active' => true'groupement' => 'FCZ']);
  69.         return $this->render('salarie/gestion_salarie/index.html.twig', [
  70.             'operations' => $operations,
  71.             'natureSalarieCabs' => $natureSalarieCabs,
  72.             'situationFamiliales' => $situationFamiliales,
  73.             'fonctions' => $fonctions,
  74.             'pemployes' => $pemployes,
  75.             'contracts' => $contract,
  76.             'naturecontract' => $naturecontract,
  77.             'dossiers' => $dossiers,
  78.             'dossiersReafectation' => $dossiersReafectation,
  79.             'baremes' => $pbaremes
  80.         ]);
  81.     }
  82.     #[Route('/app_salarie_salarie_list'name'app_salarie_salarie_list'options: ['expose' => true])]
  83.     public function app_salarie_salarie_list(Request $request): Response
  84.     {
  85.         $draw $request->query->get('draw');
  86.         $start $request->query->get('start') ?? 0;
  87.         $length $request->query->get('length') ?? 10;
  88.         $search $request->query->all('search')["value"];
  89.         $orderColumnIndex $request->query->all('order')[0]['column'];
  90.         $orderColumn $request->query->all("columns")[$orderColumnIndex]['name'];
  91.         $orderDir $request->query->all('order')[0]['dir'] ?? 'asc';
  92.         $dossier $request->getSession()->get('dossier');
  93.         // dd($dossier);
  94.         $queryBuilder $this->em->createQueryBuilder()
  95.             ->select('p.id as employe_id, n.designation as nature, c.code as contract,p.cin, p.nom as nom, c.id as matricule , p.prenom')
  96.             ->from(Pemploye::class, 'p')
  97.             ->innerJoin('p.contracts''c')
  98.             ->innerJoin('c.ldossierContracts''ldossierContract')
  99.             ->innerJoin('c.pnatureContract''n')
  100.             ->Where('c.active = 1')
  101.             ->andWhere('ldossierContract.active = 1')
  102.             ->andWhere('ldossierContract.dossier_id = :dossier')
  103.             ->setParameter('dossier'$dossier);
  104.         if (!empty($search)) {
  105.             $queryBuilder->andWhere('(n.designation LIKE :search OR p.cin LIKE :search OR c.code LIKE :search OR c.id LIKE :search OR p.matricule LIKE :search OR  p.nom LIKE :search OR p.prenom LIKE :search)')
  106.                 ->setParameter('search'"%$search%");
  107.         }
  108.         if (!empty($orderColumn)) {
  109.             $queryBuilder->orderBy("$orderColumn"$orderDir);
  110.         }
  111.         $filteredRecords count($queryBuilder->getQuery()->getResult());
  112.         // Paginate results
  113.         $queryBuilder->setFirstResult($start)
  114.             ->setMaxResults($length);
  115.         $results $queryBuilder->getQuery()->getResult();
  116.         // dd($results);
  117.         $totalRecords $this->em->createQueryBuilder()
  118.             ->select('COUNT(p.id)')
  119.             ->from(Pemploye::class, 'p')
  120.             ->innerJoin('p.contracts''c')
  121.             ->innerJoin('c.ldossierContracts''ldossierContract')
  122.             ->innerJoin('c.pnatureContract''n')
  123.             ->Where('c.active = 1')
  124.             ->andWhere('ldossierContract.active = 1')
  125.             ->andWhere('ldossierContract.dossier_id = :dossier')
  126.             ->setParameter('dossier'$dossier)
  127.             ->getQuery()
  128.             ->getSingleScalarResult();
  129.         return new JsonResponse([
  130.             'draw' => $draw,
  131.             'recordsTotal' => $totalRecords,
  132.             'recordsFiltered' => $filteredRecords,
  133.             'data' => $results,
  134.         ]);
  135.     }
  136.     #[Route('/salarienoactive'name'app_salarie_salarie_noactive'options: ['expose' => true])]
  137.     public function salarienoactive(Request $request): Response
  138.     {
  139.         $operations $this->api->check($this->getUser(), 'app_salarie_salarie'$this->em$request);
  140.         if (!$operations) {
  141.             return new AccessDeniedException();
  142.         }
  143.         $natureSalarieCabs $this->em->getRepository(PNaturesalarieCab::class)->findAll();
  144.         $situationFamiliales $this->em->getRepository(PsituationFamiliale::class)->findAll();
  145.         $fonctions $this->em->getRepository(Pfonction::class)->findAll();
  146.         $pemployes $this->em->getRepository(Pemploye::class)->findBy(['active' => 0]);
  147.         $naturecontract $this->em->getRepository(PnatureContract::class)->findAll();
  148.         $pbaremes $this->em->getRepository(Pbareme::class)->findAll();
  149.         $contract $this->em->getRepository(LContract::class)->findBy(['active' => 1]);
  150.         return $this->render('salarie/gestion_salarie/index.html.twig', [
  151.             'operations' => $operations,
  152.             'natureSalarieCabs' => $natureSalarieCabs,
  153.             'situationFamiliales' => $situationFamiliales,
  154.             'fonctions' => $fonctions,
  155.             'pemployes' => $pemployes,
  156.             'contracts' => $contract,
  157.             'naturecontract' => $naturecontract,
  158.             'baremes' => $pbaremes,
  159.         ]);
  160.     }
  161.     #[Route('/new'name'app_salarie_salarie_new'options: ['expose' => true])]
  162.     public function new(Request $requestUserPasswordHasherInterface $userPasswordHasher): Response
  163.     {
  164.         // dd($request);
  165.         $employe $this->em->getRepository(Pemploye::class)->findOneBy(['cin' => trim($request->get('cin')), 'active' => true]);
  166.         if ($employe) {
  167.             return new JsonResponse('Employe déja exist !'500);
  168.         }
  169.         if ($request->get('sexe') == 0) {
  170.             return new JsonResponse('Veuillez choisir le sexe de l\'employé !'500);
  171.         }
  172.         $employe = new Pemploye();
  173.         $employe->setNom($request->get('nom'));
  174.         $employe->setPrenom($request->get('prenom'));
  175.         $employe->setDateNaissance(new \DateTime($request->get('date_naissance')));
  176.         $employe->setLieuNaissance($request->get('lieu_naissance'));
  177.         $employe->setCin(trim($request->get('cin')));
  178.         $employe->setSexe($request->get('sexe'));
  179.         $employe->setNombreJourConge((float)$request->get('nbr_jour_conge'));
  180.         $employe->setRoles([]);
  181.         $employe->setSituationFamilialeId(
  182.             $this->em->getRepository(PsituationFamiliale::class)->find($request->get('situation_familiale'))
  183.         );
  184.         $employe->setPassword($userPasswordHasher->hashPassword(
  185.             $employe,
  186.             '0123456789'
  187.         ));
  188.         $employe->setIsFirstLogin(true);
  189.         if($request->get('nombre_enfant')) {
  190.             $employe->setNombreEnfants($request->get('nombre_enfant'));
  191.         }
  192.         $employe->setAdresse1($request->get('adresse_1'));
  193.         if ($request->get('adresse_2')) {
  194.             $employe->setAdresse2($request->get('adresse_2'));
  195.         }
  196.         $employe->setNationalite($request->get('nationalite'));
  197.         $employe->setSexe($request->get('sexe'));
  198.         $employe->setCodePostal($request->get('code_postal'));
  199.         if ($request->get('code_postal')) {
  200.             $employe->setCodePostal($request->get('code_postal'));
  201.         }
  202.         $employe->setVille($request->get('ville'));
  203.         $employe->setPays($request->get('pays'));
  204.         $employe->setTel1($request->get('telephone_1'));
  205.         if ($request->get('telephone_2')) {
  206.             $employe->setTel2($request->get('telephone_2'));
  207.         }
  208.         if ($request->get('email')) {
  209.             $employe->setEmail($request->get('email'));
  210.         }
  211.         $employe->setActive(0);
  212.         $this->em->persist($employe);
  213.         $this->em->flush();
  214.         $employe_id $employe->getId();
  215.         $Diplomes json_decode($request->get('diplomes'));
  216.         $diplome $this->em->getRepository(Diplome::class)->add_diplome(
  217.             $Diplomes,
  218.             $employe_id
  219.         );
  220.         return new JsonResponse($employe_id);
  221.     }
  222.     #[Route('/update_emp'name'app_salarie_salarie_update'options: ['expose' => true])]
  223.     public function update_emp(Request $request): Response
  224.     {
  225.         // dd($request->get('diplomes'));
  226.         $employe $this->em->getRepository(Pemploye::class)->update_employe($request);
  227.         $employe_id $employe->getId();
  228.         $Diplomes json_decode($request->get('diplomes'));
  229.         $diplome $this->em->getRepository(Diplome::class)->add_diplome(
  230.             $Diplomes,
  231.             $employe_id
  232.         );
  233.         return new JsonResponse($employe_id);
  234.     }
  235.     #[Route('/contract'name'app_salarie_contract'options: ['expose' => true])]
  236.     public function contract(Request $request): Response
  237.     {
  238.         // dd($request);
  239.         if (
  240.             $request->get('nature_contrat') == "" or $request->get('duree_contrat') == "" or $request->get('bareme') == "" or $request->get('fonction') == "0"
  241.             or $request->get('affectation') == "" or $request->get('date_contrat') == "" or $request->get('date_fin') == "" or $request->get('affectation') == ""
  242.         ) {
  243.             return new JsonResponse('Veuillez remplir tous les champs!'500);
  244.         }
  245.         $employe $this->em->getRepository(Pemploye::class)->find($request->get('employe_id'));
  246.         $natureContrat $this->em->getRepository(PnatureContract::class)->find($request->get('nature_contrat'));
  247.         $dossier $this->em->getRepository(PDossier::class)->find($request->get('affectation'));
  248.         $contract $this->em->getRepository(LContract::class)->findOneBy(['employe' => $employe'dossier' => $dossier'pnatureContract' => $natureContrat'active' => true]);
  249.         // dd($contract);
  250.         if ($contract) {
  251.             return new JsonResponse('Vous avez une contrat active!'500);
  252.         }
  253.         $piece $this->em->getRepository(PPiece::class)->find(8); // 
  254.         $contract = new LContract();
  255.         $contract->setUserCreated($this->getUser());
  256.         $contract->setEmploye($employe);
  257.         $contract->setPnatureContract($natureContrat);
  258.         $contract->setBareme(
  259.             $this->em->getRepository(Pbareme::class)->find($request->get('bareme'))
  260.         );
  261.         $contract->setDateDebut(new \DateTime($request->get('date_contrat')));
  262.         $contract->setDateAnciennte(new \DateTime($request->get('date_contrat')));
  263.         $contract->setDossier($dossier);
  264.         $contract->setDureeContract(
  265.             $this->em->getRepository(PdureeContract::class)->find($request->get('duree_contrat'))
  266.         );
  267.         $contract->setPiece($piece);
  268.         $contract->setfonction(
  269.             $this->em->getRepository(Pfonction::class)->find($request->get('fonction'))
  270.         );
  271.         $contract->setActive(1);
  272.         $contract->setPriseEnCharge($employe->getNombreEnfants());
  273.         $contract->setSalaireaffecte($request->get('salaire_affecte'));
  274.         $contract->setCreated(new \DateTime());
  275.         if ($request->get('salaire_grille')) {
  276.             $contract->setSalairegrille($request->get('salaire_grille'));
  277.         }
  278.         if ($request->get('date_fin')) {
  279.             $contract->setDateFin(new \DateTime($request->get('date_fin')));
  280.         }
  281.         $employe->setActive(1);
  282.         $this->em->persist($contract);
  283.         // $this->em->flush();
  284.         $rubrique_ppc $this->em->getRepository(Prubrique::class)->find(16);
  285.         $rubrique_rpc $this->em->getRepository(Prubrique::class)->find(37);
  286.         $dossierContract $this->em->getRepository(LdossierContract::class)->findOneBy(['contract_id' => $contract'active' => true]);
  287.         // dd($Lcontract);
  288.         if ($dossierContract) {
  289.             $dossierContract->setDossierId($contract->getDossier());
  290.         } else {
  291.             $dossierContract = new LdossierContract();
  292.             $dossierContract->setDossierId($contract->getDossier());
  293.             $dossierContract->setContractId($contract);
  294.             $dossierContract->setUserCreated($this->getUser());
  295.             $dossierContract->setCreated(new \DateTime());
  296.             $this->em->persist($dossierContract);
  297.             // $this->em->flush();
  298.         }
  299.         if ($request->get('ppc')) {
  300.             $ppc = (int)$request->get('ppc');
  301.             if ($ppc != 0) {
  302.                 $elementFixe = new LelementFixe();
  303.                 $elementFixe->setContract($contract);
  304.                 $elementFixe->setRubrique($rubrique_ppc);
  305.                 $elementFixe->setSens(1);
  306.                 $elementFixe->setMontant($request->get('ppc'));
  307.                 $this->em->persist($elementFixe);
  308.             }
  309.         }
  310.         if ($request->get('rpc')) {
  311.             $rpc = (int)$request->get('rpc');
  312.             if ($rpc != 0) {
  313.                 $elementFixe = new LelementFixe();
  314.                 $elementFixe->setContract($contract);
  315.                 $elementFixe->setRubrique($rubrique_rpc);
  316.                 $elementFixe->setSens(-1);
  317.                 $elementFixe->setMontant($request->get('rpc'));
  318.                 $this->em->persist($elementFixe);
  319.             }
  320.         }
  321.         $this->em->flush();
  322.         return new JsonResponse($contract->getId());
  323.     }
  324.     #[Route('/update_contract'name'app_salarie_contract_update'options: ['expose' => true])]
  325.     public function update_contract(Request $request): Response
  326.     {
  327.         // dd($request->get('contract_id'));
  328.         $contract $this->em->getRepository(LContract::class)->update_contract_full($request);
  329.         return new JsonResponse($contract);
  330.     }
  331.     #[Route('/cnss'name'app_salarie_cnss'options: ['expose' => true])]
  332.     public function cnss(Request $request): Response
  333.     {
  334.         // dd($request);
  335.         $contract $this->em->getRepository(LContract::class)->find($request->get('contract_id'));
  336.         if ($request->get('rib') != "") {
  337.             if (preg_match('/^[0-9\s]+$/'$request->get('rib')) && strlen(trim($request->get('rib'))) < 24) {
  338.                 return new JsonResponse('RIB incorrect'500);
  339.             }
  340.             $Lrib $this->em->getRepository(Lrib::class)->findOneBy(['contact_id' => $contract'active' => true'code' => $request->get('rib')]);
  341.             if (!$Lrib) {
  342.                 $checkRibAlreadyExist $this->em->getRepository(Lrib::class)->findOneBy(['active' => true'code' => $request->get('rib')]);
  343.                 if($checkRibAlreadyExist && $checkRibAlreadyExist->getContactId()->getEmploye()->getCin() != $contract->getEmploye()->getCin()) {
  344.                     return new JsonResponse('Rib déja lié à une autre personne! ('.$checkRibAlreadyExist->getContactId()->getEmploye()->getCin().')'500);
  345.                 }
  346.                 $Lrib = new Lrib();
  347.                 $Lrib->setContactId($contract );
  348.                 $Lrib->setCode($request->get('rib'));
  349.                 $Lrib->setDesignation('-');
  350.                 $Lrib->setSwift($request->get('swift'));
  351.                 $Lrib->setBanque($request->get('banque'));
  352.                 $this->em->persist($Lrib);
  353.             }
  354.         }
  355.         // cnss
  356.         if ($request->get('cnss') && trim($request->get('cnss')) != "") {
  357.             $contract->setCnss($request->get('cnss'));
  358.             $contract->setDateCnss(new \DateTime($request->get('date_declaration_cnss')));
  359.         } else {
  360.             $contract->setCnss('CNSS00000');
  361.             $contract->setDateCnss(new \DateTime());
  362.         }
  363.         // cimr
  364.         if ($request->get('cimr') && trim($request->get('cimr')) != "") {
  365.             $contract->setCimr($request->get('cimr'));
  366.             $contract->setDateCimr(new \DateTime($request->get('date_declaration_cimr')));
  367.         } else {
  368.             $contract->setCimr('CIMR0000');
  369.             $contract->setDateCimr(new \DateTime());
  370.         }
  371.         $this->em->flush();
  372.         return new JsonResponse('ok');
  373.     }
  374.     #[Route('/update_cnss'name'app_salarie_cnss_update'options: ['expose' => true])]
  375.     public function update_cnss(Request $request): Response
  376.     {
  377.         $contract $this->em->getRepository(LContract::class)->find($request->get('contract_id'));
  378.         if ($request->get('rib') && trim($request->get('rib')) != "") {
  379.             if (preg_match('/^[0-9\s]+$/'$request->get('rib')) && strlen(trim($request->get('rib'))) < 24) {
  380.                 return new JsonResponse('RIB incorrect'500);
  381.             }
  382.             $oldRib $this->em->getRepository(Lrib::class)->findOneBy(['contact_id' => $contract'active' => true]);
  383.             $checkRibAlreadyExist $this->em->getRepository(Lrib::class)->findOneBy(['active' => true'code' => $request->get('rib')]);
  384.             if($checkRibAlreadyExist && $checkRibAlreadyExist->getContactId()->getEmploye()->getCin() != $contract->getEmploye()->getCin()) {
  385.                 return new JsonResponse('Rib déja lié à une autre personne! ('.$checkRibAlreadyExist->getContactId()->getId().')'500,[] , JSON_UNESCAPED_UNICODE);
  386.             }
  387.             if (!$oldRib) {
  388.                 $Lrib = new Lrib();
  389.                 $Lrib->setContactId($contract);
  390.                 $Lrib->setCode($request->get('rib'));
  391.                 $Lrib->setDesignation('-');
  392.                 $Lrib->setSwift($request->get('swift'));
  393.                 $Lrib->setBanque($request->get('banque'));
  394.                 $this->em->persist($Lrib);
  395.             } elseif ($oldRib && $oldRib->getCode() != $request->get('rib')) {
  396.                 $oldRib->setActive(false);
  397.                 $Lrib = new Lrib();
  398.                 $Lrib->setContactId(
  399.                     $this->em->getRepository(LContract::class)->find($request->get('contract_id'))
  400.                 );
  401.                 $Lrib->setCode($request->get('rib'));
  402.                 $Lrib->setDesignation('-');
  403.                 $Lrib->setSwift($request->get('swift'));
  404.                 $Lrib->setBanque($request->get('banque'));
  405.                 $this->em->persist($Lrib);
  406.             } elseif ($oldRib) {
  407.                 $oldRib->setSwift($request->get('swift'));
  408.                 $oldRib->setBanque($request->get('banque'));
  409.             }
  410.         }
  411.         if ($request->get('cnss') && trim($request->get('cnss')) != ""  && trim($request->get('cnss')) != $contract->getCnss()) {
  412.             $contract->setCnss($request->get('cnss'));
  413.             $contract->setDateCnss(new \DateTime($request->get('date_declaration_cnss')));
  414.         }
  415.         // cimr
  416.         if ($request->get('cimr') && trim($request->get('cimr')) != "" && trim($request->get('cimr')) != $contract->getCimr()) {
  417.             $contract->setCimr($request->get('cimr'));
  418.             $contract->setDateCimr(new \DateTime($request->get('date_declaration_cimr')));
  419.         }
  420.         $this->em->flush();
  421.         return new JsonResponse('ok');
  422.     }
  423.     #[Route('/plusinfo'name'app_salarie_plusinfo'options: ['expose' => true])]
  424.     public function plusinfo(Request $request): Response
  425.     {
  426.         $LmatriculationCoti $this->em->getRepository(Pemploye::class)->add_plusinfo($request);
  427.         return new JsonResponse('ok');
  428.     }
  429.     #[Route('/contractaff'name'app_salarie_contractaff'options: ['expose' => true])]
  430.     public function contractaff(Request $request): Response
  431.     {
  432.         $operations $this->api->check($this->getUser(), 'app_salarie_salarie'$this->em$request);
  433.         $employe $request->get('employe_id');
  434.         $queryBuilder $this->em->createQueryBuilder()
  435.             // n.designation')
  436.             ->select('contract.id as id, p.id as employe, contract.code, p.nom as nom, p.matricule as matricule ,
  437.          p.prenom,n.Abreviation,t.designation as type,n.designation')
  438.             // ->select('contract.id as id, contract.code, p.nom as nom, p.matricule as matricule , p.prenom, n.type')
  439.             ->from(LContract::class, 'contract')
  440.             ->innerJoin('contract.employe''p')
  441.             ->innerJoin('contract.pnatureContract''n')
  442.             ->innerJoin('n.type''t')
  443.             ->Where('contract.active = 1')
  444.             ->andWhere('contract.employe = :employe')
  445.             ->setParameter('employe'$employe);
  446.         $results $queryBuilder->getQuery()->getResult();
  447.         // dd($results);
  448.         $data =  $this->render('salarie/gestion_salarie/modals/contract_detail.html.twig', [
  449.             'contracts' => $results'operations' => $operations'employe' => $employe
  450.         ])->getContent();
  451.         return new JsonResponse($data);
  452.     }
  453.     #[Route('/contractinfo'name'app_salarie_contractinfo'options: ['expose' => true])]
  454.     public function contractinfo(Request $request): Response
  455.     {
  456.         $contract_id $request->get('contract_id');
  457.         $queryBuilder $this->em->createQueryBuilder()
  458.             ->select("contract.id as id,p.id as employeid,n.id as pnatureid,
  459.                 p.nom, p.adresse2, p.tel2,p.nationalite, p.ville,p.pays, p.email, p.prenom, p.adresse1, p.tel1, p.date_naissance, p.nombre_enfants,p.lieu_naissance, p.nbr_pris_en_charge,p.cin, p.sexe,situation_familiale.id as situation_familiale_id,
  460.                   n.Abreviation,n.designation,contract.date_fin,contract.date_debut,f.id as fonctionid,f.Designation as fonction,
  461.                   contract.Salaireaffecte,d.Designation as dure,d.id as iddure,b.id as bareme,ds.id as dossier, ds.abreviation as dossierAbrev
  462.                   ,contract.Salairegrille,contract.PPC,contract.RPC,b.Profil")
  463.             ->from(LContract::class, 'contract')
  464.             ->innerJoin('contract.employe''p')
  465.             ->innerJoin('contract.pnatureContract''n')
  466.             ->LEFTJoin('contract.fonction''f')
  467.             ->LEFTJoin('p.situation_familiale_id''situation_familiale')
  468.             ->LEFTJoin('contract.dureeContract''d')
  469.             ->LEFTJoin('contract.bareme''b')
  470.             ->LEFTJoin('contract.dossier''ds')
  471.             ->Where('contract.active = 1')
  472.             ->andWhere('contract.id = :contractid')
  473.             ->setParameter('contractid'$contract_id);
  474.         $results $queryBuilder->getQuery()->getResult();
  475.         // dd($results);
  476.         return new JsonResponse($results);
  477.     }
  478.     #[Route('/app_salarie_update_save'name'app_salarie_update_save'options: ['expose' => true])]
  479.     public function app_salarie_update_save(Request $request): Response
  480.     {
  481.         // dd($request);
  482.         $contract $this->em->getRepository(LContract::class)->find($request->get('contract_id'));
  483.         if($contract) {
  484.             $employe $contract->getEmploye();
  485.             $employe->setNom($request->get('nom'));
  486.             $employe->setPrenom($request->get('prenom'));
  487.             $employe->setDateNaissance(new \DateTime($request->get('date_naissance')));
  488.             $employe->setLieuNaissance($request->get('lieu_naissance'));
  489.             $employe->setSexe($request->get('sexe'));
  490.             if($request->get('situation_familiale')) {
  491.                 $employe->setSituationFamilialeId(
  492.                     $this->em->getRepository(PsituationFamiliale::class)->find($request->get('situation_familiale'))
  493.                 );
  494.             }
  495.             $employe->setAdresse1($request->get('adresse_1'));
  496.             if ($request->get('adresse_2')) {
  497.                 $employe->setAdresse2($request->get('adresse_2'));
  498.             }
  499.             if($request->get('nombre_enfant')) {
  500.                 $employe->setNombreEnfants($request->get('nombre_enfant'));
  501.             }
  502.             $employe->setNationalite($request->get('nationalite'));
  503.             $employe->setSexe($request->get('sexe'));
  504.     
  505.             $employe->setVille($request->get('ville'));
  506.             $employe->setPays($request->get('pays'));
  507.     
  508.             if ($request->get('telephone_2')) {
  509.                 $employe->setTel2($request->get('telephone_2'));
  510.             }
  511.             if ($request->get('telephone_1')) {
  512.                 $employe->setTel1($request->get('telephone_1'));
  513.             }
  514.             if ($request->get('email')) {
  515.                 $employe->setEmail($request->get('email'));
  516.             }
  517.             $employe->setUpdated(new \DateTime());
  518.             $employe->setUserUpdated($this->getUser());
  519.     
  520.             $this->em->flush();
  521.         }
  522.         return new JsonResponse(1);
  523.     }
  524.     #[Route('/updatecontract'name'app_salarie_updatecontract'options: ['expose' => true])]
  525.     public function updatecontract(Request $request): Response
  526.     {
  527.         $updatecontract $this->em->getRepository(LContract::class)->update_contract($request);
  528.         return new JsonResponse($updatecontract);
  529.     }
  530.     #[Route('/getmatricule'name'app_salarie_get_cnss_cimr'options: ['expose' => true])]
  531.     public function getmatricule(Request $request): Response
  532.     {
  533.         // dd($request);
  534.         $contract $this->em->getRepository(LContract::class)->find($request->get('contract_id'));
  535.         if($request->get('newfonction')){
  536.             $contract->setFonction(
  537.                 $this->em->getRepository(Pfonction::class)->find($request->get('newfonction'))
  538.             );
  539.             $contract->setUpdated(new \DateTime());
  540.             $contract->setUserUpdated($this->getUser());
  541.             $this->em->flush();
  542.         }
  543.         $rib $this->em->getRepository(Lrib::class)->findOneBy(['contact_id' => $contract'active' => true]);
  544.         return new JsonResponse([
  545.             'rib' => $rib $rib->getCode() : '',
  546.             'swift' => $rib $rib->getSwift() : '',
  547.             'banque' => $rib $rib->getBanque() : '',
  548.             'cimr' => $contract->getCimr(),
  549.             'datecimr' => $contract->getDateCimr() ? $contract->getDateCimr()->format("Y-m-d") : null,
  550.             'datecnss' => $contract->getDateCnss() ? $contract->getDateCnss()->format("Y-m-d") : null,
  551.             'cnss' => $contract->getCnss(),
  552.         ]);
  553.     }
  554.     #[Route('/updatecotis'name'app_salarie_updatecotis'options: ['expose' => true])]
  555.     public function updatecotis(Request $request): Response
  556.     {
  557.         // dd($request->get('date_cnssup'));
  558.         $updatecontract $this->em->getRepository(LmatriculationCoti::class)->update_cnss_cimr($request);
  559.         return new JsonResponse($updatecontract);
  560.     }
  561.     #[Route('/desactiver_cnt'name'app_salarie_desactiver'options: ['expose' => true])]
  562.     public function desactiver_cnt(Request $request): Response
  563.     {
  564.         $Lcontract $this->em->getRepository(LContract::class)->find($request->get('contract'));
  565.        
  566.         $this->disableContract($Lcontract$request->get('date'), $request->get('motif'));
  567.         // $contract_id = $request->get('contract_id');
  568.         // $contract = $this->em->getRepository(LContract::class)->find($contract_id);
  569.         return new JsonResponse('Bien enregistrer');
  570.     }
  571.     public function disableContract($Lcontract$date$motif) :void {
  572.         $employe $Lcontract->getEmploye();
  573.         $Lcontract->setActive(0);
  574.         $Lcontract->setDateSortie(new \DateTime($date));
  575.         $Lcontract->setMotifSortie($motif);
  576.         $Lcontract->setUserDesactiver($this->getUser());
  577.         $Lcontract->setDateDesactiver(new \DateTime());
  578.         $dossierContract $this->em->getRepository(LdossierContract::class)->findBy(['contract_id' => $Lcontract'active' => true]);
  579.         foreach ($dossierContract as $key => $dc) {
  580.             $dc->setActive(false);
  581.         }
  582.         // $LmatriculationCoti = $this->em->getRepository(Lrib::class)->desactivate_rib($request);
  583.         // $rib = $this->em->getRepository(Lrib::class)->findBy(['contact_id' => $Lcontract]);
  584.         // foreach ($rib as $key => $r) {
  585.         //     $r->setActive(false);
  586.         // }
  587.         $LmatriculationCoti $this->em->getRepository(LmatriculationCoti::class)->findBy(['contract_id' => $Lcontract]);
  588.         foreach ($LmatriculationCoti as $key => $r) {
  589.             $r->setActive(false);
  590.         }
  591.         $this->em->flush();
  592.         
  593.         if(count($employe->getActiveContracts()) == 0) {
  594.             $employe->setActive(false);
  595.         }
  596.         
  597.         $this->em->flush();
  598.     }
  599.     #[Route('/reaffectation'name'app_salarie_reaffectation'options: ['expose' => true])]
  600.     public function app_salarie_reaffectation(Request $request): Response
  601.     {
  602.         $dossierReaffectation $request->get('nouvelle_affectation');
  603.         $dossierReaffectation $this->em->getRepository(PDossier::class)->find($dossierReaffectation);
  604.         $contract $this->em->getRepository(LContract::class)->find($request->get('contract'));
  605.         if ($contract->getDossier()->getId() == $dossierReaffectation->getId()) {
  606.             return new JsonResponse('Contrat déja exist dans cette affecation !'500);
  607.         } else if (in_array($contract->getDossier()->getId(), [1739,40])) {
  608.             return new JsonResponse('Vous ne pouvez pas changer l\'affectation!'500);
  609.         }
  610.         $ldossierContrat $this->em->getRepository(LdossierContract::class)->findOneBy(['contract_id' => $contract'active' => true]);
  611.         if ($ldossierContrat) {
  612.             $ldossierContrat->setActive(false);
  613.             $ldossierContrat->setDateReaffectation(new \DateTime());
  614.             $ldossierContrat->setUserReaffectation($this->getUser());
  615.         }
  616.         $ldossierContrat = new LdossierContract();
  617.         $ldossierContrat->setContractId($contract);
  618.         $ldossierContrat->setDossierId($dossierReaffectation);
  619.         $ldossierContrat->setCreated(new \DateTime());
  620.         $ldossierContrat->setDateReaffectation(new \DateTime());
  621.         $ldossierContrat->setUserCreated($this->getUser());
  622.         $ldossierContrat->setUserReaffectation($this->getUser());
  623.         $this->em->persist($ldossierContrat);
  624.         $contract->setDossier($dossierReaffectation);
  625.         $this->em->flush();
  626.         // $contract_id = $request->get('contract_id');
  627.         // $contract = $this->em->getRepository(LContract::class)->find($contract_id);
  628.         return new JsonResponse('Bien enregistrer');
  629.     }
  630.     #[Route('/app_salarie_import_sortant'name'app_salarie_import_sortant'options: ['expose' => true])]
  631.     public function app_salarie_import_sortant(Request $request): Response
  632.     {
  633.         // $dossier = $this->em->getRepository(PDossier::class)->find($request->get('dossier'));
  634.         $reader = new Reader();
  635.         $spreadsheet $reader->load($request->files->get('file'));
  636.         $worksheet $spreadsheet->getActiveSheet();
  637.         $spreadSheetArys $worksheet->toArray();
  638.         unset($spreadSheetArys[0]);
  639.         $array = [];
  640.         // dd($spreadSheetArys);
  641.         $count 0;
  642.         foreach ($spreadSheetArys as $key => $sheet) {
  643.             $count++;
  644.             $contract $this->em->getRepository(LContract::class)->findOneBy(['id' => $sheet[0]]);
  645.             // $contract = $this->em->getRepository(LContract::class)->findOneBy(['id' => $sheet[0],'active' => true]);
  646.             if(!$contract) {
  647.                 return new JsonResponse('Contrat introuvable à la ligne '.($key 1).' !'500);                
  648.             } 
  649.             if(strtolower($contract->getEmploye()->getCin()) != strtolower($sheet[3])) {
  650.                 return new JsonResponse('le contrat n\'appartient pas à ce cin '.($key 1).' !'500);
  651.             }
  652.             
  653.             array_push($array, [
  654.                 'id' => $count,
  655.                 'nom' => $contract->getEmploye()->getNom(),
  656.                 'prenom' => $contract->getEmploye()->getPrenom(),
  657.                 'cin' => $contract->getEmploye()->getCin(),
  658.                 'contract_id' => $contract->getId(),
  659.                 'dossier' => $contract->getDossier()->getAbreviation(),
  660.                 'motif' => $sheet[5],
  661.                 'dateSortie' => $sheet[4],
  662.             ]);
  663.         }
  664.         return new JsonResponse($array);
  665.     }
  666.     #[Route('/app_salarie_import_sortant_save'name'app_salarie_import_sortant_save'options: ['expose' => true])]
  667.     public function app_salarie_import_sortant_save(Request $request): Response
  668.     {
  669.         $sortants json_decode($request->get('sortants'));
  670.         foreach ($sortants as $key => $sortant) {
  671.             $Lcontract $this->em->getRepository(LContract::class)->find($sortant->contract_id);
  672.             $this->disableContract($Lcontract$sortant->dateSortie$sortant->motif);
  673.         }
  674.         return new JsonResponse('Bien enregistrer');
  675.        
  676.     }
  677.     #[Route('/app_salarie_imprimer_attestation_salaire/{contract}/{credit}'name'app_salarie_imprimer_attestation_salaire'options: ['expose' => true])]
  678.     public function app_salarie_imprimer_attestation_salaire(Request $requestLContract $contract$credit): Response
  679.     {
  680.         $html="<div  style='text-align:justify; line-height:2.8; margin-left: 10px; margin-right: 10px;'>
  681.             <p>".$this->getParagraphAttestationSalaire($contract)[0]."
  682.                 <br/>
  683.                 <br/>
  684.                 ".$this->getCredit($credit)."
  685.             </p>
  686.             <br/>"
  687.         ;
  688.         if(in_array($contract->getDossier()->getAbreviation(), ['ISAA''IMIN']) ) {
  689.             $html .= "<p style='text-align: left;margin-top:30px; margin-right: 60px; font-weight: bold' >".$this->getParagraphAttestationSalaire($contract)[1]."</p>
  690.             </div>";
  691.         } else {
  692.             $html .= "<p style='text-align: left;margin-top:80px; margin-right: 60px; font-weight: bold' >".$this->getParagraphAttestationSalaire($contract)[1]."</p>
  693.             </div>";
  694.         }
  695.         $html $this->render("salarie/gestion_salarie/pdfs/attestation.html.twig", [
  696.             "titre" => "ATTESTATION DE SALAIRE",
  697.             "contract" => $contract,
  698.             "html" => $html,
  699.             'ref' => 'DRH-ATS-' $contract->getId() . '_' $this->calculPaieService->getPeriode()->getCode()
  700.         ])->getContent();
  701.         $mpdf = new Mpdf([
  702.             'mode' => 'utf-8',
  703.             'margin_left' => 25,
  704.             'margin_right' => 25
  705.         ]);
  706.         $mpdf->SetTitle('Attestation Salaire');
  707.         $mpdf->WriteHTML($html);
  708.         $mpdf->Output("Attestation Salaire " $contract->getEmploye()->getPrenom() . " " $contract->getEmploye()->getNom() . ".pdf""I");
  709.         die;
  710.     }
  711.     #[Route('/app_salarie_imprimer_attestation_travail/{contract}/{credit}'name'app_salarie_imprimer_attestation_travail'options: ['expose' => true])]
  712.     public function app_salarie_imprimer_attestation_travail(Request $requestLContract $contract$credit): Response
  713.     {
  714.         $html "<div  style='text-align:justify; line-height:2.8; margin-left: 10px; margin-right: 10px;'>
  715.             <p>" $this->getParagraphAttestationTravail($contract)[0] . "
  716.                 <br/>
  717.                 <br/>
  718.                 " $this->getCredit($credit) . "
  719.             </p>
  720.             <br/>
  721.             <p style='text-align: left;margin-top:80px; margin-right: 60px; font-weight: bold' >" $this->getParagraphAttestationTravail($contract)[1] . "</p>
  722.         </div>";
  723.         $html $this->render("salarie/gestion_salarie/pdfs/attestation.html.twig", [
  724.             "titre" => "ATTESTATION DE TRAVAIL",
  725.             "contract" => $contract,
  726.             "html" => $html,
  727.             'ref' => 'DRH-ATT-' $contract->getId() . '_' $this->calculPaieService->getPeriode()->getCode()
  728.         ])->getContent();
  729.         $mpdf = new Mpdf([
  730.             'mode' => 'utf-8',
  731.             'margin_left' => 25,
  732.             'margin_right' => 25
  733.         ]);
  734.         $mpdf->SetTitle('Attestation Travail');
  735.         // $mpdf->SetHTMLFooter(
  736.         //     $this->render("planification/pdfs/footer.html.twig")->getContent()
  737.         // );
  738.         $mpdf->WriteHTML($html);
  739.         $mpdf->Output("Attestation Travail " $contract->getEmploye()->getPrenom() . " " $contract->getEmploye()->getNom() . ".pdf""I");
  740.         die;
  741.     }
  742.     public function getCredit($credit)
  743.     {
  744.         switch ($credit) {
  745.             case 1:
  746.                 $result "Cette attestation est délivrée à l’intéressé(e) pour des raisons administratives et <b style='font-weight: bold'>ne peut nullement servir à la contractualisation d'un emprunt</b>.";
  747.                 break;
  748.             case 2:
  749.                 $result "Ce document est délivré à la demande de l’interesse(e) uniquement pour contracter un crédit de logement.";
  750.                 break;
  751.             case 3:
  752.                 $result "Cette attestation est délivré(e) à l’interesse(e) pour servir et valoir ce que de droit.";
  753.                 break;
  754.         }
  755.         return $result;
  756.     }
  757.     public function getParagraphAttestationTravail($contract)
  758.     {
  759.         if ($contract->getEmploye()->getSexe() == 'M') {
  760.             $nomPrenom 'M. ' $contract->getEmploye()->getPrenom() . ' ' $contract->getEmploye()->getNom();
  761.         } elseif ($contract->getEmploye()->getSexe() == 'F') {
  762.             $nomPrenom 'Mme ' $contract->getEmploye()->getPrenom() . ' ' $contract->getEmploye()->getNom();
  763.         } else {
  764.             $nomPrenom $contract->getEmploye()->getPrenom() . ' ' $contract->getEmploye()->getNom();
  765.         }
  766.         switch ($contract->getDossier()->getAbreviation()) {
  767.             case 'SLMG':
  768.                 $paragraph "Nous soussignés,<b style='font-weight: bold'> " $contract->getDossier()->getDesignation() . ",</b> csis au : 5 Rue Hussein 1er, Rabat, attestons par la présente que <b style='font-weight: bold'> " $nomPrenom " </b> titulaire de la CNI n° <b style='font-weight: bold'> " $contract->getEmploye()->getCin() . " </b>, est employée au sein de notre établissement en qualité de(d') <b style='font-weight: bold'> " $contract->getFonction()->getDesignation() . " </b> auprès de (du) <b style='font-weight: bold'>" $contract->getDossier()->getDesignation() . "</b>, et ce depuis le <b style='font-weight: bold'> " date_format($contract->getDateAnciennete(), 'd/m/Y') . ".</b>";
  769.                 $dossier=$this->em->getRepository(PDossier::class)->findOneBy(['abreviation'=>'SFCZ'])->getDesignation();
  770.                 break;
  771.             case 'PGRO':
  772.                 $paragraph "<p >Nous soussignés,<b style='font-weight: bold'> " $contract->getDossier()->getDesignation() . ",</b> , société à responsabilité limitée, au capital social 1.000.000 dirhams, immatriculée au registre de commerce de rabat sous n°136363, sise à : Avenue Allal El Fassi, Madinat Al Irfane, Hay Riad, Rabat, attestons par la présente que  <b style='font-weight: bold'> " $nomPrenom " </b> titulaire de la CNI n° <b style='font-weight: bold'> " $contract->getEmploye()->getCin() . " </b>, est employé(e) au sein de notre établissement depuis le <b style='font-weight: bold'> " date_format($contract->getDateAnciennete(), 'd/m/Y') . ".</b>
  773.             <br/>
  774.             <b style='font-weight: bold'> " $nomPrenom " occupe actuellement le poste de « " $contract->getFonction()->getDesignation() . " ». </b> ";
  775.                 $dossier $contract->getDossier()->getDesignation();
  776.                 break;
  777.             case 'PSMS':
  778.                 $paragraph "<p >Nous soussignés,<b style='font-weight: bold'> " $contract->getDossier()->getDesignation() . ",</b> , société à responsabilité limitée, au capital social 1.000.000 dirhams, immatriculée au registre de commerce de rabat sous n°136363, sise à : Avenue Allal El Fassi, Madinat Al Irfane, Hay Riad, Rabat, attestons par la présente que  <b style='font-weight: bold'> " $nomPrenom " </b> titulaire de la CNI n° <b style='font-weight: bold'> " $contract->getEmploye()->getCin() . " </b>, est employé(e) au sein de notre établissement depuis le <b style='font-weight: bold'> " date_format($contract->getDateAnciennete(), 'd/m/Y') . ".</b>
  779.             <br/>
  780.             <b style='font-weight: bold'> " $nomPrenom " occupe actuellement le poste de « " $contract->getFonction()->getDesignation() . " ». </b> ";
  781.                 $dossier $contract->getDossier()->getDesignation();
  782.                 break;
  783.             case 'ISAA':
  784.                 $paragraph "<p >Nous soussignés,<b style='font-weight: bold'> " $contract->getDossier()->getDesignation() . ",</b>société à responsabilité limitée, au capital social 1.000.000 dirhams, immatriculée au registre de commerce de rabat sous n°148587, sise à : 23,Rue Amrou Bennaceur Zemmouri Agdal-Riad 10000 Rabat, attestons par la présente que  <b style='font-weight: bold'> " $nomPrenom " </b>
  785.             titulaire de la CNI n° <b style='font-weight: bold'> " $contract->getEmploye()->getCin() . " </b>, est employé(e) au sein de notre établissement depuis le <b style='font-weight: bold'> " date_format($contract->getDateAnciennete(), 'd/m/Y') . " .</b>
  786.             <br/>
  787.             <b style='font-weight: bold'> " $nomPrenom " occupe actuellement le poste de « " $contract->getFonction()->getDesignation() . " ». </b> ";
  788.                 $dossier $contract->getDossier()->getDesignation();
  789.                 break;
  790.             default:
  791.                 $paragraph "Nous soussignés,<b style='font-weight: bold'> la Fondation Cheikh Zaid Ibn Soltan,</b> créée par Dahir portant loi <b style='font-weight: bold'> n°1-93-228 du 22 rabii I 1414 </b>(10 septembre 1993), sise au: Avenue Allal El Fassi, Madinat Al Irfane, Hay Riad Rabat, attestons par la présente que <b style='font-weight: bold'> " $nomPrenom " </b> titulaire de la CNI n° <b style='font-weight: bold'> " $contract->getEmploye()->getCin() . ($contract->getCnss() ? "</b>, immatriculé(e) à la CNSS sous le N° <b style='font-weight: bold'> " $contract->getCnss() : "") ."</b>
  792.                  , est employé(e) au sein de notre établissement auprès de <b style='font-weight: bold'>«" $contract->getDossier()->getDesignation() . "»</b>, et ce depuis le <b style='font-weight: bold'> " date_format($contract->getDateAnciennete(), 'd/m/Y') . ".</b>
  793.                 
  794.             <br/>
  795.             <b style='font-weight: bold'> " $nomPrenom "</b> occupe actuellement le poste de <b style='font-weight: bold'>« " $contract->getFonction()->getDesignation() . " ». </b>";
  796.                 $dossier $this->em->getRepository(PDossier::class)->findOneBy(['abreviation' => 'SFCZ'])->getDesignation();
  797.                 break;
  798.         }
  799.         $result '';
  800.         return [$paragraph$dossier];
  801.     }
  802.     public function getParagraphAttestationSalaire($contract)
  803.     {
  804.         if ($contract->getEmploye()->getSexe() == 'M') {
  805.             $nomPrenom 'M. ' $contract->getEmploye()->getPrenom() . ' ' $contract->getEmploye()->getNom();
  806.         } elseif ($contract->getEmploye()->getSexe() == 'F') {
  807.             $nomPrenom 'Mme ' $contract->getEmploye()->getPrenom() . ' ' $contract->getEmploye()->getNom();
  808.         } else {
  809.             $nomPrenom $contract->getEmploye()->getPrenom() . ' ' $contract->getEmploye()->getNom();
  810.         }
  811.         $date = new \DateTime('now');
  812.         $previousMonth=$date->modify('-1 month')->format('mY');
  813.         $previousPeriode $this->em->getRepository(Periode::class)->findOneBy(['code' => $previousMonth]);
  814.         // dd($previousPeriode);
  815.         $salairetheo $this->em->createQueryBuilder()
  816.             ->select('contractTheorique.montant')
  817.             ->from(Tbulletin::class, 'b')
  818.             ->innerJoin('b.contract''contract')
  819.             ->innerJoin('b.contractNetTheoriques''contractTheorique')
  820.             ->where('contract = :contractId')
  821.             ->andWhere('b.periode = :periode')
  822.             ->setParameter('contractId'$contract)
  823.             ->setParameter('periode'$previousPeriode)
  824.             ->getQuery()
  825.             ->getOneOrNullResult();
  826.         $salaire $salairetheo['montant'];
  827.         // dd($salaire);
  828.         $obj = new nuts($salaire"MAD");
  829.         $text $obj->convert("fr-FR");
  830.         $salaire number_format($salaire2','' ');
  831.         switch ($contract->getDossier()->getAbreviation()) {
  832.             case 'SLMG':
  833.                 $paragraph "Nous soussignés,<b style='font-weight: bold'>  " $contract->getDossier()->getDesignation() . ",</b> sis au : 5 Rue Hussein 1er, Rabat attestons par la présente que <b style='font-weight: bold'> " $nomPrenom " </b> titulaire de la CNI n° <b style='font-weight: bold'> " $contract->getEmploye()->getCin() . " </b>, perçoit un salaire mensuel de <b style='font-weight: bold'>" $salaire "  dhs</b> (" $text ").";
  834.                 $dossier=$this->em->getRepository(PDossier::class)->findOneBy(['abreviation'=>'SFCZ'])->getDesignation();
  835.                 break;
  836.             case 'PGRO':
  837.                 $paragraph "Nous soussignés,<b style='font-weight: bold'>  " $contract->getDossier()->getDesignation() . ",</b> société à responsabilité limitée, au capital social 1.000.000 dirhams, immatriculée au registre de commerce de rabat sous n°136363, sise à : Avenue Allal El Fassi, Madinat Al Irfane, Hay Riad, Rabat, attestons par la présente que  <b style='font-weight: bold'> " $nomPrenom " </b> titulaire de la CNI n° <b style='font-weight: bold'> " $contract->getEmploye()->getCin() . " </b>, perçoit un salaire mensuel net de <b style='font-weight: bold'>" $salaire "  dhs</b> (" $text ").";
  838.                 $dossier $contract->getDossier()->getDesignation();
  839.                 break;
  840.             case 'PSMS':
  841.                 $paragraph "Nous soussignés,<b style='font-weight: bold'>  " $contract->getDossier()->getDesignation() . ",</b> société à responsabilité limitée, au capital social 1.000.000 dirhams, immatriculée au registre de commerce de rabat sous n°148835, sise à : 04 Rue Nopalea,lot 4 secteur 17,bloc I, Hay Riad, Rabat, attestons par la présente que <b style='font-weight: bold'> " $nomPrenom " </b> titulaire de la CNI n° <b style='font-weight: bold'> " $contract->getEmploye()->getCin() . " </b>, perçoit un salaire mensuel de <b style='font-weight: bold'>" $salaire "  dhs</b> (" $text ").";
  842.                 $dossier $contract->getDossier()->getDesignation();
  843.                 break;
  844.             case 'ISAA':
  845.                 $paragraph "Nous soussignés,<b style='font-weight: bold'>  " $contract->getDossier()->getDesignation() . ",</b> société à responsabilité limitée, au capital social 1.000.000 dirhams, immatriculée au registre de commerce de rabat sous n°148587, sise à : 23,Rue Amrou Bennaceur Zemmouri Agdal-Riad 10000 Rabat, attestons par la présente que  <b style='font-weight: bold'> " $nomPrenom " </b> titulaire de la CNI n° <b style='font-weight: bold'> " $contract->getEmploye()->getCin() . " </b>, perçoit un salaire mensuel de <b style='font-weight: bold'>" $salaire "  dhs</b> (" $text "). ";
  846.                 $dossier $contract->getDossier()->getDesignation();
  847.                 break;
  848.             default:
  849.                 $paragraph "Nous soussignés,<b style='font-weight: bold'> la Fondation Cheikh Zaid Ibn Soltan,</b> créée par Dahir portant loi <b style='font-weight: bold'> n°1-93-228  du 22 rabii I 1414 </b>(10 septembre 1993), sise à : Avenue Allal El Fassi, Madinat Al Irfane, Hay Riad Rabat, attestons par la présente que <b style='font-weight: bold'> " $nomPrenom " </b> titulaire de la CNI n° <b style='font-weight: bold'> " $contract->getEmploye()->getCin() . " </b>, perçoit un salaire mensuel net de <b style='font-weight: bold'> " $salaire "  dhs</b> (" $text "). ";
  850.                 $dossier $this->em->getRepository(PDossier::class)->findOneBy(['abreviation' => 'SFCZ'])->getDesignation();
  851.                 break;
  852.         }
  853.         return [$paragraph$dossier];
  854.     }
  855.     public function CalculNetTheorique($contract)
  856.     {
  857.         $rubriqueSalaireBase $this->em->getRepository(Prubrique::class)->find(1);
  858.         $baremeBruteSalaireDeBase $this->em->getRepository(PbaremeBrute::class)->findOneBy(['bareme' => $contract->getBareme(), 'rubrique' => $rubriqueSalaireBase]);
  859.         $salaireBaseTheorique round(26 $baremeBruteSalaireDeBase->getTauxPs(), 2);
  860.         $salaire $salaireBaseTheorique;
  861.         $sommeCotisation 0;
  862.         $sommeCotisationTheorique 0;
  863.         $irNet 0;
  864.         $irNetTheorique 0;
  865.         $salaireBrute 0;
  866.         $sommePrelevement 0;
  867.         // $salaireBruteImposable = $salaireBrute = $salaireBase;
  868.         $salaireImposableTheorique 0;
  869.         $salaireNetImposable 0;
  870.         $salaireNetImposableTheorique 0;
  871.         // calculPrime
  872.         $primes $this->em->getRepository(PbaremeBrute::class)->findBy(['type' => 'prime''bareme' => $contract->getBareme()]);
  873.         $countPrime 0;
  874.         foreach ($primes as $prime) {
  875.             $countPrime++;
  876.             $salaire += round($prime->getMontant(), 2);
  877.         }
  878.         // dd($primes);
  879.         if ($contract->getPnatureContract()->getType()->getId() == 1) {
  880.             // calculAnciennete();
  881.             $vmatirxAnciennte $this->em->getRepository(VMatrix::class)->getNombreAnneeAnciennte($contract->getDateAnciennete());
  882.             if ($vmatirxAnciennte) {
  883.                 $salaire += round($salaireBaseTheorique * ($vmatirxAnciennte->getTaux() / 100), 2);
  884.                 $salaireImposableTheorique round($salaireBaseTheorique + ($salaireBaseTheorique * ($vmatirxAnciennte->getTaux() / 100)), 2);
  885.             }
  886.             // calculCotisationCnss();
  887.             $cotisationscnss $this->em->getRepository(VMatrix::class)->findBy(['type' => ['cnss']]);
  888.             $count 0;
  889.             foreach ($cotisationscnss as $cotisation) {
  890.                 $count++;
  891.                 if ($cotisation->getPlafond() > && $salaireImposableTheorique $cotisation->getPlafond()) {
  892.                     $sommeCotisationTheorique += round(($cotisation->getPlafond() * ($cotisation->getTaux() / 100)), 2);
  893.                 } else {
  894.                     $sommeCotisationTheorique += round(($salaireImposableTheorique * ($cotisation->getTaux() / 100)), 2);
  895.                 }
  896.             }
  897.             // calculCotisationCimr();
  898.             $cotisationscimr $this->em->getRepository(PBaremeCimr::class)->findBy(['type' => ['cimr'], 'bareme' => $contract->getBareme()]);
  899.             foreach ($cotisationscimr as $cotisation) {
  900.                 $sommeCotisationTheorique += round($salaireImposableTheorique * ($cotisation->getTaux() / 100), 2);
  901.             }
  902.         }
  903.         dd($sommeCotisationTheorique,$salaireImposableTheorique);
  904.         //calculPrelevementIr();
  905.         $pourcentage $contract->getPnatureContract()->getTauxIr() / 100;
  906.         if (!$pourcentage) {
  907.             $salaireNetImposableTheorique $salaireImposableTheorique - ($sommeCotisationTheorique + ($salaireImposableTheorique 0.2));
  908.             $cotisationTheorique $this->em->getRepository(VMatrix::class)->getTauxIr($salaireNetImposableTheorique);
  909.             if ($cotisationTheorique) {
  910.                 $irBruteTheorique round(($salaireNetImposableTheorique * ($cotisationTheorique->getTaux() / 100)) - $cotisationTheorique->getPlafond(), 2);
  911.                 $irNetTheorique round($irBruteTheorique - ($contract->getPriseEnCharge() * $cotisationTheorique->getTauxACharge()), 2);
  912.                 if ($irNetTheorique 0) {
  913.                     $irNetTheorique 0;
  914.                 }
  915.             }
  916.         } else {
  917.             $irNetTheorique round($salaire $pourcentage2);
  918.             if ($irNetTheorique 0) {
  919.                 $irNetTheorique 0;
  920.             }
  921.         }
  922.         // calculElementFixe();
  923.         foreach ($contract->getActiveElementFixes() as $key => $elementFixe) {
  924.             if ($elementFixe->getSens() == 1) {
  925.                 $salaire += round($elementFixe->getMontant(), 2);
  926.             } else {
  927.                 $salaire -= round($elementFixe->getMontant(), 2);
  928.             }
  929.         }
  930.         // dd($contract->getActiveElementFixes());
  931.         // calculElementEcheance();
  932.         // !!! $elementEcheances = $this->em->getRepository(LElementEcheance::class)->findBy(['contract' => $this->contract, 'periode' => $this->periode, 'active' => true]);
  933.         $salaire -= ($sommeCotisationTheorique $irNetTheorique);
  934.         $salaire round($salaire2);
  935.         return $salaire;
  936.     }
  937. }