src/Controller/PdfController.php line 154

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Contrat;
  4. use App\Entity\Document;
  5. use App\Entity\Projet;
  6. use App\Entity\Societe;
  7. use App\Entity\Tiers;
  8. use App\Model\NoteDeFrais\NDF;
  9. use App\Service\Pdf;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Doctrine\Persistence\ManagerRegistry;
  15. use Doctrine\Persistence\ObjectManager;
  16. class PdfController extends AbstractController
  17. {
  18.     private ?ObjectManager $em null;
  19.     private ?string $prefixSociete null;
  20.     /**
  21.      * Stockage des informations de la société pour affichage sur entête document
  22.      * @var object|mixed|null
  23.      */
  24.     private ?object $dataSociete null;
  25.     public function __construct(RequestStack $requestStackManagerRegistry $doctrine)
  26.     {
  27.         $request $requestStack->getCurrentRequest();
  28.         //TODO: page erreur subdomain
  29.         if(null===$request->getSession()->get('societe')) return $this->render('misc/404.html.twig');
  30.         // on récupère le sous-domaine stocké en session pour pointer vers le bon entity manager
  31.         $subdomain $request->getSession()->get('societe')->getBase();
  32.         $this->em $doctrine->getManager($subdomain);
  33.         $this->prefixSociete $request->getSession()->get('societe')->getPrefix();
  34.         if(null!==$this->prefixSociete$this->prefixSociete strtoupper($this->prefixSociete);
  35.         $jsonString $request->getSession()->get('societe')->getData();
  36.         if(null!==$jsonString) {
  37.             $this->dataSociete json_decode($jsonString);
  38.             $this->dataSociete->lib_societe $request->getSession()->get('societe')->getLibSociete();
  39.             $this->dataSociete->logo_path $request->getSession()->get('societe')->getLogoPath();
  40.         }
  41.     }
  42.     /**
  43.      * @Route("/pdf/facture/{id}", methods={"GET"}, name="pdf_document")
  44.      */
  45.     public function getDocumenntPdf($idRequest $requestPdf $pdf)
  46.     {
  47.         // définir le type de document
  48.         $documentRepository $this->em->getRepository(Document::class);
  49.         /** @var Document $document */
  50.         $document $documentRepository->find($id);
  51.         $lang $request->query->get('lang','');
  52.         if(!empty($lang)) {
  53.             $type $document->getTypeDocument();
  54.             $document->setTypeDocument(
  55.                 str_replace(['FACTURE','AVOIR'], ['INVOICE','CREDIT NOTE'], $type)
  56.             );
  57.             $lang .= '/';
  58.         }
  59.         $template $this->renderView('pdf/'.$lang.'facture.html.twig', [
  60.             'societe' => $this->dataSociete,
  61.             'document' => $document,
  62.         ]);
  63.         $pdf->create($this->dataSociete);
  64.         return $pdf->generatePdf($template$document->getNumPiece() );
  65.     }
  66.     /**
  67.      * @Route("/pdf/contrat/{id}", methods={"GET"}, name="pdf_contrat")
  68.      */
  69.     public function getContratPdf($idRequest $requestPdf $pdf)
  70.     {
  71.         $contratRepository $this->em->getRepository(Contrat::class);
  72.         /** @var Contrat $contrat */
  73.         $contrat $contratRepository->find($id);
  74.         if(null!==$contrat->getSalarie()->getInfoSalarie()) {
  75.             $webPath $this->getParameter('kernel.project_dir');
  76.             $contrat->getSalarie()->getInfoSalarie()->initEncryptionKey($webPath)->decryptContent(); // déchiffrage des données info_salariés
  77.         }
  78.         $projetRepository $this->em->getRepository(Projet::class);
  79.         /** @var Projet $projet */
  80.         $projet $projetRepository->find$contrat->getIdProjet() );
  81.         $lang $request->query->get('lang','');
  82.         if(!empty($lang)) $lang.= '/';
  83.         $template $this->renderView('pdf/'.$lang.'contrat.html.twig', [
  84.             'societe' => $this->dataSociete,
  85.             'projet' => $projet,
  86.             'contrat' => $contrat,
  87.             'only_first_page' => false,
  88.         ]);
  89.         $pdf->create($this->dataSociete);
  90.         return $pdf->generatePdf($template$contrat->getId(), true);
  91.     }
  92.     /**
  93.      * @Route("pdf/contrat-mensuel/{date}", methods={"GET"}, name="pdf_contrat_mensuel")
  94.      */
  95.     public function getContratMensuelPdf($dateRequest $requestPdf $pdf)
  96.     {
  97.         $date explode('-'$date);
  98.         if(2!==count($date)) die('Erreur dans la date. Format correct : aaaa-mm');
  99.         $annee $date[0];
  100.         $mois $date[1];
  101.         $contratRepository $this->em->getRepository(Contrat::class);
  102.         $contratList $contratRepository->findBy([
  103.             'annee' => $annee,
  104.             'mois' => intval($mois),
  105.         ]);
  106.         if(empty($contratList)) die('Aucun contrat sur ce mois : '$mois .'-'$annee);
  107.         $lang $request->query->get('lang','');
  108.         if(!empty($lang)) $lang.= '/';
  109.         $webPath $this->getParameter('kernel.project_dir');
  110.         $projetRepository $this->em->getRepository(Projet::class);
  111.         $pdf->create($this->dataSociete);
  112.         /** @var Contrat $contrat */
  113.         foreach ($contratList as $contrat){
  114.             if(null!==$contrat->getSalarie()->getInfoSalarie())
  115.                 $contrat->getSalarie()->getInfoSalarie()->initEncryptionKey($webPath)->decryptContent();
  116.             /** @var Projet $projet */
  117.             $projet $projetRepository->find$contrat->getIdProjet() );
  118.             $template $this->renderView('pdf/'.$lang.'contrat.html.twig', [
  119.                 'societe' => $this->dataSociete,
  120.                 'projet' => $projet,
  121.                 'contrat' => $contrat,
  122.                 'only_first_page' => true,
  123.             ]);
  124.             $pdf->writeHTML($template);
  125.         }
  126.         $nomFichier 'Contrats-'$annee .'-'$mois;
  127.         return $pdf->generatePdf(''$nomFichiertrue);
  128.     }
  129.     /**
  130.      * @Route("pdf/ndf", methods={"GET"}, name="pdf_ndf")
  131.      */
  132.     public function getNdfPdf(Request $requestPdf $pdf)
  133.     {
  134.         $filtre $request->query->all();
  135.         $format '';
  136.         if(isset($filtre['id_document'])) $format 'by-id';
  137.         if(!empty($filtre['id_projet']) && !empty($filtre['id_salarie']) && !empty($filtre['date_ndf'])) $format 'by-projet-salarie-mois';
  138.         if(empty($filtre['id_projet']) && empty($filtre['id_salarie']) && !empty($filtre['date_ndf'])) $format 'by-mois';
  139.         if(!empty($filtre['id_projet']) && empty($filtre['id_salarie']) && empty($filtre['date_ndf'])) $format 'by-projet';
  140.         if(empty($filtre['id_projet']) && !empty($filtre['id_salarie']) && !empty($filtre['date_ndf'])) $format 'by-salarie-mois';
  141.         if(!empty($filtre['date_ndf']) && preg_match('/&lang=en_GB/'$filtre['date_ndf'])) {
  142.             $filtre['date_ndf'] = preg_replace('/&lang=en_GB/'''$filtre['date_ndf']);
  143.             $request->query->set('lang','en_GB');
  144.         }
  145.         $documentRepository $this->em->getRepository(Document::class);
  146.         /** @var Document $document */
  147.         $docList $documentRepository->findByFilter($filtre);
  148.         $ndf = new NDF($docList[0]->getProjet(), new Societe(), new Tiers(), 0);
  149.         $lang $request->query->get('lang','');
  150.         if(!empty($lang)) $lang.= '/';
  151.         $template $this->renderView('pdf/'.$lang.'ndf.html.twig', [
  152.             'societe' => $this->dataSociete,
  153.             'format_ndf' => $format,
  154.             'document_list' => $docList,
  155.             'type_list' => $ndf->getTypeList(),
  156.             'periode' => $filtre['date_ndf'] ?? '',
  157.             'projet' => $docList[0]->getProjet()->getNumProd() ?? '',
  158.         ]);
  159.         $pdf->create($this->dataSociete,'L');
  160.         $name 'NDF-';
  161.         switch ($format) {
  162.             case 'by-id':
  163.             case 'by-projet-salarie-mois':
  164.                 $name.= urlencode($docList[0]->getSalarie()->getNomTiers()) .'-'urlencode($docList[0]->getSalarie()->getPrenomTiers()) .'-'$docList[0]->getProjet()->getNumProd();
  165.                 break;
  166.             case 'by-salarie-mois':
  167.                 $name.= urlencode($docList[0]->getSalarie()->getNomTiers()) .'-'urlencode($docList[0]->getSalarie()->getPrenomTiers()) .'-'$filtre['date_ndf'];
  168.                 break;
  169.             case 'by-projet':
  170.                 $name.= $docList[0]->getProjet()->getNumProd();
  171.                 break;
  172.             case 'by-mois':
  173.                 $name.= $filtre['date_ndf'];
  174.                 break;
  175.         }
  176.         return $pdf->generatePdf($template$name);
  177.     }
  178. }