src/Controller/FundRequestController.php line 193

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Service;
  4. use App\Entity\FundRequest;
  5. use App\Form\FundRequestType;
  6. use App\Entity\FundRequestItem;
  7. use App\Entity\RequestValidation;
  8. use App\Form\FundRequestItemType;
  9. use PhpParser\Node\Stmt\TryCatch;
  10. use Symfony\Component\Mime\Email;
  11. use App\Entity\FundRequestAnnotation;
  12. use App\Entity\FundRequestAttachment;
  13. use App\Form\FundRequestActivityType;
  14. use App\Entity\FundRequestDisbursement;
  15. use App\Entity\Station;
  16. use App\Form\FundRequestAnnotationType;
  17. use App\Form\FundRequestAttachmentType;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use App\Form\FundRequestDisbursementType;
  20. use App\Form\SearchFundRequestRegisterFinType;
  21. use App\Form\SearchFundRequestRegisterType;
  22. use App\Repository\ServiceRepository;
  23. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Component\String\Slugger\SluggerInterface;
  28. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  29. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  30. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  31. use Symfony\Component\Mailer\MailerInterface;
  32. class FundRequestController extends AbstractController
  33. {
  34.     #[Route('/fund-request-add'name'fund_request_add')]
  35.     public function add(Request $requestEntityManagerInterface $emMailerInterface $mailer): Response
  36.     {
  37.         $fundRequest = new FundRequest();
  38.         $fundRequestForm $this->createForm(FundRequestType::class, $fundRequest);
  39.         $services = [];
  40.         $user $this->getUser();
  41.         if ($user->getUserRole() == "ADMIN") {
  42.             $services $em->getRepository(Service::class)->findAll();
  43.         } else {
  44.             $iSViewAllServData UtilsController::getIsAccess("view_all_serv_data"$this->getUser()->getId(), $em);
  45.             if ($iSViewAllServData == true) {
  46.                 $services $em->getRepository(Service::class)->findAll();
  47.             } else {
  48.                 $services $em->getRepository(Service::class)->findBy([
  49.                     'id' => $user->getService()->getId(),
  50.                 ]);
  51.             }
  52.         }
  53.         $fundRequestForm->add(
  54.             'service',
  55.             ChoiceType::class,
  56.             [
  57.                 'label' => "Service demandeur",
  58.                 'required' => true,
  59.                 'multiple' => false,
  60.                 'expanded' => false,
  61.                 'placeholder' => 'Sélectionner...',
  62.                 'choices' => $services,
  63.                 'choice_label' => 'label',
  64.                 'choice_value' => 'id',
  65.                 'attr' => [
  66.                     //'class' => 'js-choice',
  67.                     'class' => 'chosen-select',
  68.                 ],
  69.             ]
  70.         );
  71.         $fundRequestForm->handleRequest($request);
  72.         if ($fundRequestForm->isSubmitted() && $fundRequestForm->isValid()) {
  73.             $user $this->getUser();
  74.             $fundRequest->setIsDeleted(false);
  75.             $fundRequest->setNumber("DF-" ucfirst(uniqid()));
  76.             $fundRequest->setStatus(0);
  77.             $fundRequest->setUserCreate($user);
  78.             $fundRequest->setDateCreate(new \DateTime());
  79.             $fundRequest->setIsRejected(false);
  80.             $em->persist($fundRequest);
  81.             $em->flush();
  82.             try {
  83.                 //code...send mail 
  84.                 $email = (new Email())
  85.                     ->from('email@cilumarket.com')
  86.                     ->to($user->getEmail())
  87.                     //->to( 'steventshas@gmail.com' )
  88.                     ->subject('création de la demande de fonds')
  89.                     ->text('Votre demande a été crée avec succès!')
  90.                     ->html('<p>Nous informons que votre demande a été créée avec succès</p>');
  91.                 $mailer->send($email);
  92.                 $this->addFlash('message''le message a été envoyé');
  93.             } catch (\Throwable $th) {
  94.                 //throw $th;
  95.             }
  96.             $this->addFlash('success_message''Demande de fonds initiée avec succès !');
  97.             return $this->redirectToRoute('fund_request_view', [
  98.                 'fund_request_id' => $fundRequest->getId(),
  99.             ]);
  100.         }
  101.         return $this->render('fund_request/add.html.twig', [
  102.             'fundRequestForm' => $fundRequestForm->createView(),
  103.         ]);
  104.     }
  105.     #[Route('/fund-request-update/{fund_request_id}'name'fund_request_update')]
  106.     public function update(Request $requestEntityManagerInterface $em): Response
  107.     {
  108.         $user $this->getUser();
  109.         $fundRequest $em->getRepository(FundRequest::class)->findOneBy([
  110.             'id' => $request->get('fund_request_id')
  111.         ]);
  112.         if (is_null($fundRequest)) {
  113.             $this->addFlash('warning_message'"Aucune donnée trouvée avec l'id fourni!");
  114.             return $this->redirectToRoute('fund_request_register');
  115.         }
  116.         if ($fundRequest->getUserCreate()->getId() != $user->getId()) {
  117.             $this->addFlash('warning_message'"Impossible de modifier une demande que vous n'avez pas initiée");
  118.             return $this->redirectToRoute('fund_request_register');
  119.         }
  120.         $fundRequestForm $this->createForm(FundRequestType::class, $fundRequest);
  121.         $services = [];
  122.         if ($user->getUserRole() == "ADMIN") {
  123.             $services $em->getRepository(Service::class)->findAll();
  124.         } else {
  125.             $iSViewAllServData UtilsController::getIsAccess("view_all_serv_data"$this->getUser()->getId(), $em);
  126.             if ($iSViewAllServData == true) {
  127.                 $services $em->getRepository(Service::class)->findAll();
  128.             } else {
  129.                 $services $em->getRepository(Service::class)->findBy([
  130.                     'id' => $user->getService()->getId(),
  131.                 ]);
  132.             }
  133.         }
  134.         $fundRequestForm->add(
  135.             'service',
  136.             ChoiceType::class,
  137.             [
  138.                 'label' => "Service demandeur",
  139.                 'required' => true,
  140.                 'multiple' => false,
  141.                 'expanded' => false,
  142.                 'placeholder' => 'Sélectionner...',
  143.                 'choices' => $services,
  144.                 'choice_label' => 'label',
  145.                 'choice_value' => 'id',
  146.                 'attr' => [
  147.                     //'class' => 'js-choice',
  148.                 ],
  149.             ]
  150.         );
  151.         $fundRequestForm->handleRequest($request);
  152.         if ($fundRequestForm->isSubmitted() && $fundRequestForm->isValid()) {
  153.             $fundRequest->setDateUpdate(new \DateTime());
  154.             $fundRequest->setUserUpdate($this->getUser());
  155.             $em->persist($fundRequest);
  156.             $em->flush();
  157.             $this->addFlash('success_message''Modification effectuée avec succès !');
  158.             return $this->redirectToRoute('fund_request_view', [
  159.                 'fund_request_id' => $fundRequest->getId(),
  160.             ]);
  161.         }
  162.         return $this->render('fund_request/add.html.twig', [
  163.             'fundRequestForm' => $fundRequestForm->createView(),
  164.         ]);
  165.     }
  166.     #[Route('/fund-request-view/{fund_request_id}'name'fund_request_view')]
  167.     public function view(Request $requestEntityManagerInterface $emSluggerInterface $slugger): Response
  168.     {
  169.         $fundRequest $em->getRepository(FundRequest::class)->findOneBy([
  170.             'id' => $request->get('fund_request_id')
  171.         ]);
  172.         if (is_null($fundRequest)) {
  173.             $this->addFlash('warning_message'"Aucune donnée trouvée avec l'id fourni!");
  174.             return $this->redirectToRoute('fund_request_register');
  175.         }
  176.         $items $em->getRepository(FundRequestItem::class)->findBy([
  177.             'fundRequest' => $fundRequest->getId(),
  178.             'isDeleted' => false,
  179.         ]);
  180.         $item = new FundRequestItem();
  181.         $itemForm $this->createForm(FundRequestItemType::class, $item);
  182.         $itemForm->handleRequest($request);
  183.         if ($itemForm->isSubmitted() && $itemForm->isValid()) {
  184.             $item->setDateCreate(new \DateTime());
  185.             $item->setUserCreate($this->getUser());
  186.             $item->setFundRequest($fundRequest);
  187.             $item->setIsDeleted(false);
  188.             $stationId $itemForm->get('station')->getData();
  189.             $station $em->getRepository(Station::class)->findOneBy([
  190.                 'id' => $stationId,
  191.             ]);
  192.             if (!is_null($station)) {
  193.                 $item->setStation($station);
  194.             }
  195.             $em->persist($item);
  196.             $em->flush();
  197.             $items $em->getRepository(FundRequestItem::class)->findBy([
  198.                 'fundRequest' => $fundRequest->getId(),
  199.                 'isDeleted' => false,
  200.             ]);
  201.             if (!is_null($items) && count($items) > 0) {
  202.                 $rate UtilsController::getRate($em);
  203.                 if ($rate == 0) {
  204.                 }
  205.                 $totalAmount 0;
  206.                 foreach ($items as $i) {
  207.                     if ($i->getCurrency()->getId() == 1) {
  208.                         $totalAmount $totalAmount + ($i->getAmount() / $rate);
  209.                     } else {
  210.                         $totalAmount $totalAmount $i->getAmount();
  211.                     }
  212.                 }
  213.                 $fundRequest->setTotalAmount($totalAmount);
  214.                 $em->persist($fundRequest);
  215.                 $em->flush();
  216.             }
  217.             $this->addFlash('success_message'"L'ajout du détail effectué avec succès !");
  218.             return $this->redirectToRoute('fund_request_view', [
  219.                 'fund_request_id' => $fundRequest->getId(),
  220.             ]);
  221.         }
  222.         //Gestion des annotations -----------------------------------------------------
  223.         $annotations $em->getRepository(FundRequestAnnotation::class)->findBy([
  224.             'fundRequest' => $fundRequest->getId(),
  225.             'isDeleted' => false,
  226.         ]);
  227.         $annotation = new FundRequestAnnotation();
  228.         $annotationForm $this->createForm(FundRequestAnnotationType::class, $annotation);
  229.         $annotationForm->handleRequest($request);
  230.         if ($annotationForm->isSubmitted() && $annotationForm->isValid()) {
  231.             $annotation->setDateCreate(new \DateTime());
  232.             $annotation->setUserCreate($this->getUser());
  233.             $annotation->setFundRequest($fundRequest);
  234.             $annotation->setIsDeleted(false);
  235.             $em->persist($annotation);
  236.             $em->flush();
  237.             $this->addFlash('success_message'"Observation ajoutée avec succès !");
  238.             return $this->redirectToRoute('fund_request_view', [
  239.                 'fund_request_id' => $fundRequest->getId(),
  240.             ]);
  241.         }
  242.         //Fin gestion des annotations ----------------------------------------------------
  243.         //Gestion des pièces jointes -----------------------------------------------------
  244.         $attachments $em->getRepository(FundRequestAttachment::class)->findBy([
  245.             'fundRequest' => $fundRequest->getId(),
  246.             'isDeleted' => false,
  247.         ], ['dateCreate' => 'DESC']);
  248.         $attachment = new FundRequestAttachment();
  249.         $attachmentForm $this->createForm(FundRequestAttachmentType::class, $attachment);
  250.         $attachmentForm->handleRequest($request);
  251.         if ($attachmentForm->isSubmitted() && $attachmentForm->isValid()) {
  252.             $attachmentFile $attachmentForm->get('attachment')->getData();
  253.             if ($attachmentFile) {
  254.                 $originalFilename pathinfo($attachmentFile->getClientOriginalName(), PATHINFO_FILENAME);
  255.                 $safeFilename $slugger->slug($originalFilename);
  256.                 $newFilename $fundRequest->getId() . '-' uniqid() . '.' $attachmentFile->guessExtension();
  257.             }
  258.             try {
  259.                 $attachmentFile->move(
  260.                     $this->getParameter('attachement_directory'),
  261.                     $newFilename
  262.                 );
  263.             } catch (FileException $e) {
  264.                 $this->addFlash('warning_message'"Erreur : " $e->getMessage());
  265.                 return $this->redirectToRoute('fund_request_view', [
  266.                     'fund_request_id' => $fundRequest->getId(),
  267.                 ]);
  268.             }
  269.             $user $this->getUser();
  270.             $attachment->setAttachmentFilename($newFilename);
  271.             $attachment->setIsDeleted(false);
  272.             $attachment->setUserCreate($user);
  273.             $attachment->setFundRequest($fundRequest);
  274.             $attachment->setDateCreate(new \DateTime());
  275.             $em->persist($attachment);
  276.             $em->flush();
  277.             $this->addFlash('success_message'"Pièce jointe ajoutée avec succès !");
  278.             return $this->redirectToRoute('fund_request_view', [
  279.                 'fund_request_id' => $fundRequest->getId(),
  280.             ]);
  281.         }
  282.         //Fin gestion des pièces jointes ----------------------------------------------------
  283.         //Validation data
  284.         // $sceValidation = $em->getRepository(RequestValidation::class)->findOneBy([
  285.         //     'category' => 'FRSCE',
  286.         //     'requestId' => 'FR-' . $fundRequest->getId(),
  287.         //     'isDeleted' => false
  288.         // ]);
  289.         $scmValidation $em->getRepository(RequestValidation::class)->findOneBy([
  290.             'category' => 'FRSCM',
  291.             'requestId' => 'FR-' $fundRequest->getId(),
  292.             'isDeleted' => false
  293.         ]);
  294.         $cgValidation $em->getRepository(RequestValidation::class)->findOneBy([
  295.             'category' => 'FRCG',
  296.             'requestId' => 'FR-' $fundRequest->getId(),
  297.             'isDeleted' => false
  298.         ]);
  299.         $dgValidation $em->getRepository(RequestValidation::class)->findOneBy([
  300.             'category' => 'FRDG',
  301.             'requestId' => 'FR-' $fundRequest->getId(),
  302.             'isDeleted' => false
  303.         ]);
  304.         //Les droits d'accèss
  305.         $iSAccessVldFundReqCg UtilsController::getIsAccess("vld_fund_req_cg"$this->getUser()->getId(), $em);
  306.         $iSAccessVldFundReqDg UtilsController::getIsAccess("vld_fund_req_dg"$this->getUser()->getId(), $em);
  307.         $iSAccessVldFundReqScm UtilsController::getIsAccess("vld_fund_req_scm"$this->getUser()->getId(), $em);
  308.         $totalAmountUsd 0;
  309.         $totalAmountCdf 0;
  310.         $rate UtilsController::getRate($em);
  311.         $totalAmountCdf =  $fundRequest->getTotalAmount() * $rate;
  312.         $totalAmountUsd $fundRequest->getTotalAmount();
  313.         //Montant décaissé
  314.         $totalDisbursementCdf =  $fundRequest->getTotalAmountDisbursed() * $rate;
  315.         $totalDisbursementUsd $fundRequest->getTotalAmountDisbursed();
  316.         return $this->render('fund_request/view.html.twig', [
  317.             'fundRequest' => $fundRequest,
  318.             'items' => $items,
  319.             'annotations' => $annotations,
  320.             'attachments' => $attachments,
  321.             //'sceValidation' => $sceValidation,
  322.             'scmValidation' => $scmValidation,
  323.             'cgValidation' => $cgValidation,
  324.             'dgValidation' => $dgValidation,
  325.             'totalDisbursementUsd' => $totalDisbursementUsd,
  326.             'totalDisbursementCdf' => $totalDisbursementCdf,
  327.             'iSAccessVldFundReqCg' => $iSAccessVldFundReqCg,
  328.             'iSAccessVldFundReqDg' => $iSAccessVldFundReqDg,
  329.             'iSAccessVldFundReqScm' => $iSAccessVldFundReqScm,
  330.             'totalAmountUsd' => $totalAmountUsd,
  331.             'totalAmountCdf' => $totalAmountCdf,
  332.             'itemForm' => $itemForm->createView(),
  333.             'annotationForm' => $annotationForm->createView(),
  334.             'attachmentForm' => $attachmentForm->createView(),
  335.         ]);
  336.     }
  337.     #[Route('/fin/fund-request-view/{fund_request_id}'name'fin_fund_request_view')]
  338.     public function viewFin(Request $requestEntityManagerInterface $em): Response
  339.     {
  340.         $fundRequest $em->getRepository(FundRequest::class)->findOneBy([
  341.             'id' => $request->get('fund_request_id')
  342.         ]);
  343.         if (is_null($fundRequest)) {
  344.             $this->addFlash('warning_message'"Aucune donnée trouvée avec l'id fourni!");
  345.             return $this->redirectToRoute('fund_request_register');
  346.         }
  347.         $items $em->getRepository(FundRequestItem::class)->findBy([
  348.             'fundRequest' => $fundRequest->getId(),
  349.             'isDeleted' => false,
  350.         ]);
  351.         $disbursements $em->getRepository(FundRequestDisbursement::class)->findBy([
  352.             'fundRequest' => $fundRequest->getId(),
  353.             'isDeleted' => false,
  354.         ]);
  355.         $attachments $em->getRepository(FundRequestAttachment::class)->findBy([
  356.             'fundRequest' => $fundRequest->getId(),
  357.             'isDeleted' => false,
  358.         ], ['dateCreate' => 'DESC']);
  359.         $annotations $em->getRepository(FundRequestAnnotation::class)->findBy([
  360.             'fundRequest' => $fundRequest->getId(),
  361.             'isDeleted' => false,
  362.         ]);
  363.         $disbursement = new FundRequestDisbursement();
  364.         $disbursementForm $this->createForm(FundRequestDisbursementType::class, $disbursement);
  365.         $disbursementForm->handleRequest($request);
  366.         if ($disbursementForm->isSubmitted() && $disbursementForm->isValid()) {
  367.             $disbursement->setDateCreate(new \DateTime());
  368.             $disbursement->setUserCreate($this->getUser());
  369.             $disbursement->setFundRequest($fundRequest);
  370.             $disbursement->setIsDeleted(false);
  371.             $em->persist($disbursement);
  372.             $em->flush();
  373.             $disbursementTots $em->getRepository(FundRequestDisbursement::class)->findBy([
  374.                 'fundRequest' => $fundRequest->getId(),
  375.                 'isDeleted' => false,
  376.             ]);
  377.             if (!is_null($disbursementTots) && count($disbursementTots) > 0) {
  378.                 $rate UtilsController::getRate($em);
  379.                 if ($rate == 0) {
  380.                 }
  381.                 $totaldisbursement 0;
  382.                 foreach ($disbursementTots as $i) {
  383.                     if ($i->getCurrency()->getId() == 1) {
  384.                         $totaldisbursement $totaldisbursement + ($i->getAmount() / $rate);
  385.                     } else {
  386.                         $totaldisbursement $totaldisbursement $i->getAmount();
  387.                     }
  388.                 }
  389.                 $fundRequest->setTotalAmountDisbursed($totaldisbursement);
  390.                 $em->persist($fundRequest);
  391.                 $em->flush();
  392.             }
  393.             $this->addFlash('success_message'"Enregistrement effectué avec succès !");
  394.             return $this->redirectToRoute('fin_fund_request_view', [
  395.                 'fund_request_id' => $fundRequest->getId(),
  396.             ]);
  397.         }
  398.         $rate UtilsController::getRate($em);
  399.         //Montant demandé
  400.         $totalAmountCdf =  $fundRequest->getTotalAmount() * $rate;
  401.         $totalAmountUsd $fundRequest->getTotalAmount();
  402.         //Montant décaissé
  403.         $totalDisbursementCdf =  $fundRequest->getTotalAmountDisbursed() * $rate;
  404.         $totalDisbursementUsd $fundRequest->getTotalAmountDisbursed();
  405.         return $this->render('fund_request/view_fin.html.twig', [
  406.             'fundRequest' => $fundRequest,
  407.             'items' => $items,
  408.             'totalAmountUsd' => $totalAmountUsd,
  409.             'totalAmountCdf' => $totalAmountCdf,
  410.             'totalDisbursementUsd' => $totalDisbursementUsd,
  411.             'totalDisbursementCdf' => $totalDisbursementCdf,
  412.             'disbursementForm' => $disbursementForm->createView(),
  413.             'disbursements' => $disbursements,
  414.             'attachments' => $attachments,
  415.             'annotations' => $annotations,
  416.         ]);
  417.     }
  418.     #[Route('/fund-request-confirm/{fund_request_id}'name'fund_request_confirm')]
  419.     public function confirmRequest(Request $requestEntityManagerInterface $em): Response
  420.     {
  421.         $fundRequest $em->getRepository(FundRequest::class)->findOneBy([
  422.             'id' => $request->get('fund_request_id')
  423.         ]);
  424.         if (is_null($fundRequest)) {
  425.             $this->addFlash('warning_message'"Aucune donnée trouvée avec l'id fourni!");
  426.             return $this->redirectToRoute('fund_request_register');
  427.         }
  428.         $user $this->getUser();
  429.         if ($fundRequest->getUserCreate()->getId() != $user->getId()) {
  430.             $this->addFlash('danger_message'"Vous n'êtes pas l'initiateur de cette demande, impossible de la confirmer");
  431.             return $this->redirectToRoute('fund_request_register');
  432.         }
  433.         $fundRequest->setDateUpdate(new \DateTime());
  434.         $fundRequest->setUserUpdate($this->getUser());
  435.         $fundRequest->setStatus(1);
  436.         $em->persist($fundRequest);
  437.         $em->flush();
  438.         $this->addFlash('success_message'"Demande confirmée avec succès !");
  439.         return $this->redirectToRoute('fund_request_view', [
  440.             'fund_request_id' => $fundRequest->getId(),
  441.         ]);
  442.     }
  443.     #[Route('/fund-request-register'name'fund_request_register')]
  444.     public function list(Request $request,EntityManagerInterface $em): Response
  445.     {
  446.         $user $this->getUser();
  447.         $serviceId "";
  448.         $userId "";
  449.         $startDate "";
  450.         $endDate "";
  451.         $like "";
  452.         $limit "500";
  453.         $showService false;
  454.         $iSViewAllServData UtilsController::getIsAccess("view_all_serv_data"$this->getUser()->getId(), $em);
  455.         if ($user->getUserRole() != "ADMIN" && $iSViewAllServData != true) {
  456.             $serviceId $user->getService()->getId();
  457.         }
  458.         $fundRequests = [];
  459.         $searchForm $this->createForm(SearchFundRequestRegisterType::class);
  460.         if ($user->getUserRole() == "ADMIN" || $iSViewAllServData == true) {
  461.             $searchForm
  462.             ->add('service'EntityType::class, [
  463.                 'label' => false,
  464.                 'required' => false,
  465.                 'placeholder' => "Sélectionner...",
  466.                 'class' => Service::class,
  467.                 'choice_label' => function (Service $a) {
  468.                     return $a->getLabel();
  469.                 },
  470.                 'query_builder' => function (ServiceRepository $r) {
  471.                     return $r->findByNoDeleted();
  472.                 },
  473.                 'attr' => [
  474.                     'class' => 'chosen-select',
  475.                 ],
  476.                 'multiple' => false,
  477.             ]);
  478.             $showService true;
  479.         }
  480.         $searchForm->handleRequest($request);
  481.         if ($searchForm->isSubmitted() && $searchForm->isValid()) {
  482.             $criterias $searchForm->getData();
  483.             $sDate $criterias['startDate'];
  484.             $eDate $criterias['endDate'];
  485.             $like $criterias['like'];
  486.             $limit "";
  487.             
  488.             if ($user->getUserRole() == "ADMIN" || $iSViewAllServData == true) {
  489.                 $service $criterias['service'];
  490.             }
  491.             if(!is_null($service)){
  492.                 $serviceId $service->getId();
  493.             }
  494.             if(!is_null($sDate)){
  495.                 $startDate $sDate->format('Y-m-d'). " 00:00:00";
  496.             }
  497.             if(!is_null($sDate)){
  498.                 $endDate $eDate->format('Y-m-d'). " 23:59:59";
  499.             }
  500.         } 
  501.         $fundRequests $em->getRepository(FundRequest::class)->findByCriteria($like,$serviceId,$startDate,$endDate,$userId,$limit);
  502.         $totalAmountFundRequests 0;
  503.         if (!is_null($fundRequests) && count($fundRequests) > 0) {
  504.             foreach ($fundRequests as $e) {
  505.                 $totalAmountFundRequests $totalAmountFundRequests $e->getTotalAmount();
  506.             }
  507.         }
  508.         return $this->render('fund_request/register.html.twig', [
  509.             'fundRequests' => $fundRequests,
  510.             'searchForm' => $searchForm->createView(),
  511.             'showService' => $showService,
  512.             'totalAmountFundRequests' => $totalAmountFundRequests,
  513.         ]);
  514.     }
  515.     #[Route('/fund-request-my'name'fund_request_my')]
  516.     public function myRequest(Request $request,EntityManagerInterface $em): Response
  517.     {
  518.         $user $this->getUser();
  519.         $userId $user->getId();
  520.         $startDate "";
  521.         $endDate "";
  522.         $like "";
  523.         $showService false;
  524.         $fundRequests = [];
  525.         $searchForm $this->createForm(SearchFundRequestRegisterType::class);
  526.         $searchForm->handleRequest($request);
  527.         if ($searchForm->isSubmitted() && $searchForm->isValid()) {
  528.             $criterias $searchForm->getData();
  529.             $sDate $criterias['startDate'];
  530.             $eDate $criterias['endDate'];
  531.             $like $criterias['like'];
  532.             if(!is_null($sDate)){
  533.                 $startDate $sDate->format('Y-m-d'). " 00:00:00";
  534.             }
  535.             if(!is_null($sDate)){
  536.                 $endDate $eDate->format('Y-m-d'). " 23:59:59";
  537.             }
  538.         } 
  539.         $fundRequests $em->getRepository(FundRequest::class)->findByCriteria($like,"",$startDate,$endDate,$userId,"");
  540.         $totalAmountFundRequests 0;
  541.         if (!is_null($fundRequests) && count($fundRequests) > 0) {
  542.             foreach ($fundRequests as $e) {
  543.                 $totalAmountFundRequests $totalAmountFundRequests $e->getTotalAmount();
  544.             }
  545.         }
  546.         return $this->render('fund_request/register.html.twig', [
  547.             'fundRequests' => $fundRequests,
  548.             'searchForm' => $searchForm->createView(),
  549.             'showService' => $showService,
  550.             'totalAmountFundRequests' => $totalAmountFundRequests,
  551.         ]);
  552.     }
  553.     #[Route('/fund-request-validation'name'fund_request_validation')]
  554.     public function validation(Request $requestEntityManagerInterface $emMailerInterface $mailer): Response
  555.     {
  556.         $status 'ok';
  557.         $message "succuss";
  558.         $dataSend $request->request->all();
  559.         if (is_null($dataSend)) {
  560.             $status 'ko';
  561.             $message "data_empty";
  562.         }
  563.         //Récupération de la demande
  564.         $requestId '';
  565.         if (isset($dataSend['requestId'])) {
  566.             $requestId $dataSend['requestId'];
  567.         }
  568.         $fundRequest $em->getRepository(FundRequest::class)->findOneBy([
  569.             'id' => $requestId,
  570.             'isDeleted' => false
  571.         ]);
  572.         if (is_null($fundRequest)) {
  573.             $status 'ko';
  574.             $message "fund_request_not_exist";
  575.             return $this->json(['status' => $status'message' => $message'data' => '']);
  576.         }
  577.         //Récupération du commentaire
  578.         $comment '';
  579.         if (isset($dataSend['comment'])) {
  580.             $comment $dataSend['comment'];
  581.         }
  582.         //Récupération de l'avis
  583.         $isValide '';
  584.         if (isset($dataSend['isValide'])) {
  585.             $isValide $dataSend['isValide'];
  586.         }
  587.         //Récupération du type de validation
  588.         $category '';
  589.         if (isset($dataSend['category'])) {
  590.             $category $dataSend['category'];
  591.         }
  592.         $validation = new RequestValidation();
  593.         $validation->setDateValidation(new \DateTime());
  594.         $validation->setUserValidator($this->getUser());
  595.         $validation->setIsValidated($isValide);
  596.         $validation->setIsDeleted(false);
  597.         $validation->setCategory($category);
  598.         $validation->setComment($comment);
  599.         $validation->setrequestId('FR-' $fundRequest->getId());
  600.         if ($isValide == 0) {
  601.             $fundRequest->setIsRejected(true);
  602.         }
  603.         switch ($category) {
  604.             case "FRSCE":
  605.                 $fundRequest->setStatus(2);
  606.                 break;
  607.             case "FRSCM":
  608.                 $fundRequest->setStatus(3);
  609.                 break;
  610.             case "FRCG":
  611.                 $fundRequest->setStatus(4);
  612.                 break;
  613.             case "FRDG":
  614.                 $fundRequest->setStatus(5);
  615.                 $fundRequest->setDateApproved(new \DateTime());
  616.                 break;
  617.         }
  618.         $em->persist($validation);
  619.         $em->persist($fundRequest);
  620.         $em->flush();
  621.         try {
  622.             //code...
  623.             $email = (new Email())
  624.                 ->from('email@cilumarket.com')
  625.                 ->to($user->getEmail())
  626.                 //->to( 'steventshas@gmail.com' )
  627.                 ->subject('Validation de votre demande')
  628.                 ->text('La demande de fonds a été validée avec succès!')
  629.                 ->html('<p>Nous informons que votre demande a été validée</p>');
  630.             $mailer->send($email);
  631.             $this->addFlash('message''le message a été envoyé');
  632.         } catch (\Throwable $th) {
  633.             //throw $th;
  634.         }
  635.         $this->addFlash('success_message'"L'enregistrement de la validation est effectué avec succès");
  636.         return $this->json(['status' => $status'message' => $message'data' => '']);
  637.     }
  638.     #[Route('/fin/fund-request-register'name'fin_fund_request_register')]
  639.     public function listApproved(Request $request,EntityManagerInterface $em): Response
  640.     {
  641.         $fundRequests = [];
  642.         $searchForm $this->createForm(SearchFundRequestRegisterFinType::class);
  643.         
  644.         $searchForm->handleRequest($request);
  645.         if ($searchForm->isSubmitted() && $searchForm->isValid()) {
  646.             $criterias $searchForm->getData();
  647.             $startDate $criterias['startDate'];
  648.             $endDate $criterias['endDate'];
  649.             $fundRequests $em->getRepository(FundRequest::class)->
  650.             findByApprovedAndPeriodApproved($startDate->format('Y-m-d'). " 00:00:00",$endDate->format('Y-m-d'). " 23:59:59");
  651.         } else {
  652.             $fundRequests $em->getRepository(FundRequest::class)->findByApproved();
  653.         }
  654.         $totalAmountFundRequests 0;
  655.         $totalAmountDisbursementFundRequests 0;
  656.         if (!is_null($fundRequests) && count($fundRequests) > 0) {
  657.             foreach ($fundRequests as $e) {
  658.                 $totalAmountFundRequests $totalAmountFundRequests $e->getTotalAmount();
  659.                 $totalAmountDisbursementFundRequests $totalAmountDisbursementFundRequests $e->getTotalAmountDisbursed();
  660.             }
  661.         }
  662.         $restDisbursement $totalAmountFundRequests $totalAmountDisbursementFundRequests;
  663.         return $this->render('fund_request/register_fin.html.twig', [
  664.             'fundRequests' => $fundRequests,
  665.             'totalAmountFundRequests' => $totalAmountFundRequests,
  666.             'restDisbursement' => $restDisbursement,
  667.             'totalAmountDisbursementFundRequests' => $totalAmountDisbursementFundRequests,
  668.             'searchForm' => $searchForm->createView(),
  669.         ]);
  670.     }
  671.     #[Route('/fund-request-delete-item/{item_id}'name'fund_request_delete_item')]
  672.     public function deleteItem(Request $requestEntityManagerInterface $em): Response
  673.     {
  674.         $item $em->getRepository(FundRequestItem::class)->findOneBy([
  675.             'id' => $request->get('item_id')
  676.         ]);
  677.         if (is_null($item)) {
  678.             $this->addFlash('warning_message'"Aucune donnée trouvée avec l'id fourni!");
  679.             return $this->redirectToRoute('fund_request_register');
  680.         }
  681.         $item->setIsDeleted(true);
  682.         $em->persist($item);
  683.         $em->flush();
  684.         $fundRequest =  $item->getFundRequest();
  685.         $items $em->getRepository(FundRequestItem::class)->findBy([
  686.             'fundRequest' => $fundRequest->getId(),
  687.             'isDeleted' => false,
  688.         ]);
  689.         if (!is_null($items) && count($items) > 0) {
  690.             $rate UtilsController::getRate($em);
  691.             if ($rate == 0) {
  692.             }
  693.             $totalAmount 0;
  694.             foreach ($items as $i) {
  695.                 if ($i->getCurrency()->getId() == 1) {
  696.                     $totalAmount $totalAmount + ($i->getAmount() / $rate);
  697.                 } else {
  698.                     $totalAmount $totalAmount $i->getAmount();
  699.                 }
  700.             }
  701.             $fundRequest->setTotalAmount($totalAmount);
  702.             $em->persist($fundRequest);
  703.             $em->flush();
  704.         }
  705.         $this->addFlash('success_message'"Suppression du détail effectuée avec succès !");
  706.         return $this->redirectToRoute('fund_request_view', [
  707.             'fund_request_id' => $item->getFundRequest()->getId(),
  708.         ]);
  709.     }
  710.     #[Route('/fund-request-delete/{fund_request_id}'name'fund_request_delete')]
  711.     public function deleteRequest(Request $requestEntityManagerInterface $em): Response
  712.     {
  713.         $fundRequest $em->getRepository(FundRequest::class)->findOneBy([
  714.             'id' => $request->get('fund_request_id')
  715.         ]);
  716.         if (is_null($fundRequest)) {
  717.             $this->addFlash('warning_message'"Aucune donnée trouvée avec l'id fourni!");
  718.             return $this->redirectToRoute('fund_request_register');
  719.         }
  720.         $user $this->getUser();
  721.         if ($fundRequest->getUserCreate()->getId() != $user->getId()) {
  722.             $this->addFlash('danger_message'"Vous n'êtes pas l'initiateur de cette demande, impossible de la confirmer");
  723.             return $this->redirectToRoute('fund_request_register');
  724.         }
  725.         $fundRequest->setDateUpdate(new \DateTime());
  726.         $fundRequest->setUserUpdate($this->getUser());
  727.         $fundRequest->setIsdeleted(true);
  728.         $em->persist($fundRequest);
  729.         $em->flush();
  730.         $this->addFlash('success_message'"Demande supprimer avec succès !");
  731.         return $this->redirectToRoute('fund_request_view', [
  732.             'fund_request_id' => $fundRequest->getId(),
  733.         ]);
  734.     }
  735. }