src/Controller/Mouvement/PretsController.php line 98

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\PDossier;
  7. use App\Entity\PPiece;
  8. use App\Entity\PPrelevement;
  9. use App\Entity\PPrelevementLg;
  10. use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;
  11. use App\Service\CalculPaieService;
  12. use Doctrine\Persistence\ManagerRegistry;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. #[Route('/mouvement/prets')]
  19. class PretsController extends AbstractController
  20. {
  21.     private $em;
  22.     private $calculPaieService;
  23.     private $api;
  24.     public function __construct(ManagerRegistry $doctrineCalculPaieService $calculPaieServiceApiController $api)
  25.     {
  26.         $this->em $doctrine->getManager();
  27.         $this->calculPaieService $calculPaieService;
  28.         $this->api $api;
  29.         
  30.     }
  31.     
  32.     #[Route('/'name'app_mouvement_prets')]
  33.     public function index(Request $request): Response
  34.     {
  35.         $dossier $request->getSession()->get('dossier');
  36.         $operations $this->api->check($this->getUser(), 'app_mouvement_prets'$this->em$request);
  37.         if(!is_array($operations)) {
  38.             return $this->redirectToRoute('app_site');  
  39.         }elseif(count($operations) == 0) {
  40.             return $this->render('includes/404.html.twig');
  41.         }
  42.         $contracts $this->em->getRepository(LContract::class)->findContractAndRib($dossier);
  43.         $elements $this->em->getRepository(Prubrique::class)->findBy(['prets' => true'active' => true]);
  44.         return $this->render('mouvement/prets/index.html.twig', [
  45.             'operations' => $operations,
  46.             'elements' => $elements,
  47.             'contracts' => $contracts,
  48.         ]);
  49.     }
  50.     #[Route('/app_mouvement_prets_ajouter'name'app_mouvement_prets_ajouter'options: ['expose' => true])]
  51.     public function app_mouvement_prets_ajouter(Request $request): Response
  52.     {
  53.         // dd($request);
  54.         $dossier $this->em->getRepository(PDossier::class)->find($request->getSession()->get('dossier'));
  55.         $prets json_decode($request->get('prets'));
  56.             
  57.         $prelevement = new PPrelevement();
  58.         $prelevement->setDossier($dossier);
  59.         $prelevement->setMotif($request->get('motif'));
  60.         $prelevement->setPiece(
  61.             $this->em->getRepository(PPiece::class)->find(7)
  62.         );
  63.         $prelevement->setRubrique(
  64.             $this->em->getRepository(Prubrique::class)->find($request->get('element'))
  65.         );
  66.         $prelevement->setContract(
  67.             $this->em->getRepository(LContract::class)->find($request->get('contract'))
  68.         );
  69.         $prelevement->setUserCreated($this->getUser());
  70.         $prelevement->setMontant($request->get('montantpret'));
  71.         $prelevement->setMontantEcheance($request->get('montantecheance'));
  72.         $prelevement->setDateDebut(new \DateTime($request->get('periode').'-01'));
  73.         $prelevement->setNombreMois(count($prets));
  74.         $this->em->persist($prelevement);
  75.         foreach ($prets as $key => $pret) {
  76.             $prelevementDet = new PPrelevementLg();
  77.             $prelevementDet->setPeriode(
  78.                 $this->calculPaieService->getPeriode($pret->periode)
  79.             );
  80.             $prelevementDet->setMontant($pret->montant);
  81.             $prelevementDet->setPrelevement($prelevement);
  82.             $this->em->persist($prelevementDet);
  83.         }
  84.         $this->em->flush();
  85.         return new JsonResponse('Bien enregister!');
  86.     }
  87.     #[Route('/app_mouvement_prets_list'name'app_mouvement_prets_list'options: ['expose' => true])]
  88.     public function app_mouvement_prets_list(Request $request): Response
  89.     {
  90.        
  91.         $draw $request->query->get('draw');
  92.         $start $request->query->get('start') ?? 0;
  93.         $length $request->query->get('length') ?? 10;
  94.         $search $request->query->all('search')["value"];
  95.         $orderColumnIndex $request->query->all('order')[0]['column'];
  96.         $orderColumn $request->query->all("columns")[$orderColumnIndex]['name'];
  97.         $orderDir $request->query->all('order')[0]['dir'] ?? 'asc';
  98.         $dossier $request->getSession()->get('dossier');
  99.         $queryBuilder $this->em->createQueryBuilder()
  100.         ->select('p.id, p.active, c.id as contract_id, p.code as code, p.created as created,emp.nom, emp.prenom, r.designation as rubrique, p.montant, p.nombreMois, p.motif')
  101.         ->from(PPrelevement::class, 'p')
  102.         ->innerJoin('p.contract''c')
  103.         ->innerJoin('p.rubrique''r')
  104.         ->innerJoin('c.employe''emp')
  105.         ->innerJoin('p.dossier''d')
  106.         // ->andWhere('p.active = 1')
  107.         ->andWhere('d = :dossier')
  108.         ->setParameter('dossier'$dossier)
  109.         ;
  110.         // $results = $queryBuilder->getQuery()->getResult();
  111.         // dd($results);
  112.         // Apply search query
  113.         // dd($queryBuilder);
  114.         if (!empty($search)) {
  115.             $queryBuilder->andWhere('(p.code LIKE :search OR emp.nom LIKE :search OR emp.prenom LIKE :search OR r.designation LIKE :search OR p.motif LIKE :search)')
  116.                 ->setParameter('search'"%$search%");
  117.         }
  118.         if (!empty($orderColumn)) {
  119.             $queryBuilder->orderBy("$orderColumn"$orderDir);
  120.         }
  121.         $filteredRecords count($queryBuilder->getQuery()->getResult());
  122.         // Paginate results
  123.         $queryBuilder->setFirstResult($start)
  124.             ->setMaxResults($length);
  125.         $results $queryBuilder->getQuery()->getResult();
  126.         // dd($results);
  127.         // foreach ($results as $key => $prelevement) {
  128.         //     $results[$key]['DT_RowId'] = $prelevement['id'];
  129.         //     $results[$key]['validate'] = count($);
  130.         //     $results[$key]['salaire'] = $this->em->getRepository(LContract::class)->getNetAPaye($periode, $contract['id']);
  131.         //     $results[$key]['problemes'] = $this->em->getRepository(Probleme::class)->checkIfTheresProblemes($periode, $contract['id']);
  132.         // }
  133.         
  134.         // dd($results);
  135.         $totalRecords $this->em->createQueryBuilder()
  136.         ->select('COUNT(b.id)')
  137.         ->from(PPrelevement::class, 'b')
  138.         // ->andWhere('b.active = 1')
  139.         ->andWhere('b.dossier = :dossier')
  140.         ->setParameter('dossier'$dossier)
  141.         ->getQuery()
  142.         ->getSingleScalarResult();
  143.         return new JsonResponse([
  144.             'draw' => $draw,
  145.             'recordsTotal' => $totalRecords,
  146.             'recordsFiltered' => $filteredRecords,
  147.             'data' => $results,
  148.         ]);
  149.     }
  150.     #[Route('/app_mouvement_prets_detail/{prelevement}'name'app_mouvement_prets_detail'options: ['expose' => true])]
  151.     public function app_mouvement_prets_detail(PPrelevement $prelevement): Response
  152.     {
  153.         
  154.         $html $this->renderView('mouvement/prets/includes/details.html.twig', [
  155.             'prelevement' => $prelevement
  156.         ]);
  157.         return new JsonResponse($html);
  158.     }
  159.     #[Route('/app_mouvement_prets_ajouter_all'name'app_mouvement_prets_ajouter_all'options: ['expose' => true])]
  160.     public function app_mouvement_prets_ajouter_all(Request $request): Response
  161.     {
  162.         
  163.         $reader = new Reader();
  164.         $spreadsheet $reader->load($request->files->get('file'));
  165.         $worksheet $spreadsheet->getActiveSheet();
  166.         $spreadSheetArys $worksheet->toArray();
  167.         unset($spreadSheetArys[0]);
  168.         $count 0;
  169.         // dd($spreadSheetArys);
  170.         $now = new \DateTime();
  171.         foreach ($spreadSheetArys as $key => $sheet) {
  172.             $contract $this->em->getRepository(LContract::class)->findOneBy(['id' => $sheet[0], 'active' => true]);
  173.             $montantpret $total round($sheet[3], 2);
  174.             $montantecheance round($sheet[4], 2);
  175.             $dateDebut = new \DateTime($sheet[1]);
  176.             if($dateDebut $now->modify('first day of this month')) {
  177.                 return new JsonResponse('Date debut erroné à la ligne '.($key).' !'500);
  178.             }
  179.             $element $this->em->getRepository(Prubrique::class)->findOneBy(['id' => $sheet[2], 'prets' => true]);
  180.             if(!$contract) {
  181.                 return new JsonResponse('Contrat introuvable à la ligne '.($key).' !'500);
  182.             }    
  183.             if(!$element) {
  184.                 return new JsonResponse('Element introuvable à la ligne '.($key).' !'500);
  185.             }    
  186.             $months $montantpret $montantecheance;
  187.             if ($months != floor(abs($months))) {
  188.                 $months floor(abs($months)) + 1;
  189.             }
  190.             $prelevement = new PPrelevement();
  191.             $prelevement->setDossier($contract->getDossier());
  192.             $prelevement->setMotif($sheet[5]);
  193.             $prelevement->setPiece(
  194.                 $this->em->getRepository(PPiece::class)->find(7)
  195.             );
  196.             $prelevement->setRubrique($element);
  197.             $prelevement->setContract($contract);
  198.             $prelevement->setUserCreated($this->getUser());
  199.             $prelevement->setMontant($montantpret);
  200.             $prelevement->setMontantEcheance($montantecheance);
  201.             $prelevement->setDateDebut($dateDebut);
  202.             $prelevement->setNombreMois($months);
  203.             $this->em->persist($prelevement);
  204.             // dd($months);
  205.             for ($i=0$i $months$i++) { 
  206.                 $newDate = clone $dateDebut;
  207.                 $newDate $newDate->add(new \DateInterval('P' $i 'M'));
  208.                 // dump($newDate, $i);
  209.                 if($total <= $montantecheance) {
  210.                     $prelevementDet = new PPrelevementLg();
  211.                     $prelevementDet->setPeriode(
  212.                         $this->calculPaieService->getPeriode($newDate->format('mY'))
  213.                     );
  214.                     $prelevementDet->setMontant($total);
  215.                     $prelevementDet->setPrelevement($prelevement);
  216.                     $this->em->persist($prelevementDet);
  217.                     // prets.push({'montant': total, 'periode' : (newDate.getMonth() + 1).toString().padStart(2, '0')+''+newDate.getFullYear()});
  218.                 } else {
  219.                     $total $total $montantecheance;
  220.                     $prelevementDet = new PPrelevementLg();
  221.                     $prelevementDet->setPeriode(
  222.                         $this->calculPaieService->getPeriode($newDate->format('mY'))
  223.                     );
  224.                     $prelevementDet->setMontant($montantecheance);
  225.                     $prelevementDet->setPrelevement($prelevement);
  226.                     $this->em->persist($prelevementDet);
  227.                     // prets.push({'montant': montantecheance, 'periode' : (newDate.getMonth() + 1).toString().padStart(2, '0') +''+newDate.getFullYear()});
  228.                 }
  229.             }
  230.            
  231.             // die;
  232.             
  233.         }
  234.         $this->em->flush();
  235.         return new JsonResponse('Bien enregister!'); 
  236.     }
  237.     #[Route('/app_mouvement_prets_disable'name'app_mouvement_prets_disable'options: ['expose' => true])]
  238.     public function app_mouvement_prets_disable(Request $request)
  239.     {
  240.         // dd($request);
  241.         $motif $request->get('motif');
  242.         $pretIds json_decode($request->get('pretIds'));
  243.         foreach ($pretIds as $key => $pretId) {
  244.             $pret $this->em->getRepository(PPrelevement::class)->find($pretId);
  245.             $pret->setMotif($motif);
  246.             $pret->setActive(false);
  247.           
  248.         }
  249.         $this->em->flush();
  250.         return new JsonResponse("Bien Enregistrer");
  251.     }
  252. }