src/Controller/Mouvement/ElementfixeController.php line 85

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Mouvement;
  3. use App\Entity\LContract;
  4. use App\Entity\Prubrique;
  5. use App\Controller\ApiController;
  6. use App\Entity\LelementFixe;
  7. use App\Service\CalculPaieService;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. #[Route('/mouvement/fixe')]
  15. class ElementfixeController extends AbstractController
  16. {
  17.     private $em;
  18.     private $api;
  19.     private $calculPaieService;
  20.     public function __construct(ManagerRegistry $doctrineCalculPaieService $calculPaieServiceApiController $api)
  21.     {
  22.         $this->em $doctrine->getManager();
  23.         $this->calculPaieService $calculPaieService;
  24.         $this->api $api;
  25.         
  26.     }
  27.     #[Route('/'name'app_mouvement_fixe')]
  28.     public function index(Request $request): Response
  29.     {
  30.         $dossier $request->getSession()->get('dossier');
  31.         $operations $this->api->check($this->getUser(), 'app_mouvement_fixe'$this->em$request);
  32.         if(!is_array($operations)) {
  33.             return $this->redirectToRoute('app_site');  
  34.         }elseif(count($operations) == 0) {
  35.             return $this->render('includes/404.html.twig');
  36.         }
  37.         $contracts $this->em->getRepository(LContract::class)->findBy(['dossier' => $dossier'active' => true]);
  38.         $elements $this->em->getRepository(Prubrique::class)->findBy(['sens' => [1, -1], 'fixe' => true'active' => true]);
  39.         
  40.         return $this->render('mouvement/elementfixe/index.html.twig', [
  41.             'elements' => $elements,
  42.             'contracts' => $contracts,
  43.             'operations' => $operations,
  44.         ]);
  45.     }
  46.     #[Route('/app_mouvement_fixe_insert'name'app_mouvement_fixe_insert'options:['expose' => true])]
  47.     public function app_mouvement_fixe_insert(Request $request): Response
  48.     {
  49.         $fixes json_decode($request->get('fixes'));
  50.         foreach ($fixes as $key => $fixe) {
  51.             $contract $this->em->getRepository(LContract::class)->find($fixe->employe->contract_id);
  52.             $rubrique $this->em->getRepository(Prubrique::class)->find($fixe->element->id);
  53.             $elementFixe $this->em->getRepository(LelementFixe::class)->findOneBy(['contract' => $contract'rubrique' => $rubrique'active' => true]);
  54.             if($elementFixe) {
  55.                 return new JsonResponse('Cette combinaison existait déjà'500);
  56.             }
  57.             $elementFixe = new LelementFixe();
  58.             $elementFixe->setContract($contract);
  59.             $elementFixe->setRubrique($rubrique);
  60.             $elementFixe->setUserCreated($this->getUser());
  61.             $elementFixe->setSens($fixe->sens);
  62.             $elementFixe->setMontant($fixe->montant);
  63.             $this->em->persist($elementFixe);
  64.         }
  65.         $this->em->flush();
  66.         return new JsonResponse('Bien enregistrer');
  67.     }
  68.     #[Route('/app_mouvement_fixe_statut/{element}/{statut}'name'app_mouvement_fixe_statut'options:['expose' => true])]
  69.     public function app_mouvement_fixe_statut(LelementFixe $element$statut): Response
  70.     {
  71.         $element->setActive($statut == false true);
  72.         $this->em->flush();
  73.         return new JsonResponse('Bien enregistrer');
  74.     }
  75.     #[Route('/app_mouvement_fixe_list'name'app_mouvement_fixe_list'options: ['expose' => true])]
  76.     public function app_mouvement_fixe_list(Request $request): Response
  77.     {
  78.        
  79.         $draw $request->query->get('draw');
  80.         $start $request->query->get('start') ?? 0;
  81.         $length $request->query->get('length') ?? 10;
  82.         $search $request->query->all('search')["value"];
  83.         $orderColumnIndex $request->query->all('order')[0]['column'];
  84.         $orderColumn $request->query->all("columns")[$orderColumnIndex]['name'];
  85.         $orderDir $request->query->all('order')[0]['dir'] ?? 'asc';
  86.         $dossier $request->getSession()->get('dossier');
  87.         $queryBuilder $this->em->createQueryBuilder()
  88.         ->select('p.id, c.id as contract_id, p.created as created,emp.nom, emp.prenom, r.designation as rubrique, p.montant, p.sens, p.active')
  89.         ->from(LelementFixe::class, 'p')
  90.         ->innerJoin('p.contract''c')
  91.         ->innerJoin('p.rubrique''r')
  92.         ->innerJoin('c.employe''emp')
  93.         ->innerJoin('c.dossier''d')
  94.         ->andWhere('d = :dossier')
  95.         ->andWhere('p.active = 1')
  96.         ->setParameter('dossier'$dossier)
  97.         ;
  98.       
  99.         if (!empty($search)) {
  100.             $queryBuilder->andWhere('(p.id LIKE :search OR emp.nom LIKE :search OR emp.prenom LIKE :search OR r.designation LIKE :search)')
  101.                 ->setParameter('search'"%$search%");
  102.         }
  103.         if (!empty($orderColumn)) {
  104.             $queryBuilder->orderBy("$orderColumn"$orderDir);
  105.         }
  106.         $filteredRecords count($queryBuilder->getQuery()->getResult());
  107.         // Paginate results
  108.         $queryBuilder->setFirstResult($start)
  109.             ->setMaxResults($length);
  110.         $results $queryBuilder->getQuery()->getResult();
  111.        
  112.         
  113.         $totalRecords $this->em->createQueryBuilder()
  114.         ->select('COUNT(b.id)')
  115.         ->from(LelementFixe::class, 'b')
  116.         ->innerJoin('b.contract''c')
  117.         ->innerJoin('c.dossier''d')
  118.         ->andWhere('d = :dossier')
  119.         ->andWhere('b.active = 1')
  120.         ->setParameter('dossier'$dossier)
  121.         ->getQuery()
  122.         ->getSingleScalarResult();
  123.         return new JsonResponse([
  124.             'draw' => $draw,
  125.             'recordsTotal' => $totalRecords,
  126.             'recordsFiltered' => $filteredRecords,
  127.             'data' => $results,
  128.         ]);
  129.     }
  130. }