src/DataProvider/ApprovisionnementDataProvider.php line 214

Open in your IDE?
  1. <?php
  2.     namespace App\DataProvider;
  3.     use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
  4.     use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryResultCollectionExtensionInterface;
  5.     use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGenerator;
  6.     use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
  7.     use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
  8.     use App\Entity\PointDeVente;
  9.     use App\Entity\Approvisionnement;
  10.     use App\Entity\Entite;
  11.     use Doctrine\ORM\QueryBuilder;
  12.     use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  13.     use Knp\Snappy\Pdf;
  14.     //use Doctrine\Common\Persistence\ManagerRegistry; v4
  15.     use Doctrine\Persistence\ManagerRegistry//v5
  16.     use Symfony\Component\DependencyInjection\ContainerInterface;
  17.     use Symfony\Component\HttpFoundation\Request;
  18.     use App\Utils\Constantes;
  19.     use App\Utils\JWTEncoder;
  20.     use Symfony\Component\HttpFoundation\Response;
  21.     use Symfony\Component\HttpFoundation\StreamedResponse;
  22.     use Twig\Environment;
  23.     use App\Exception\CustomException;
  24. /**
  25.      * Class AgenceApproDataProvider
  26.      *
  27.      * @package App\AgenceApproDataProvider
  28.      */
  29.     class ApprovisionnementDataProvider implements CollectionDataProviderInterfaceRestrictedDataProviderInterface
  30.     {
  31.         /**
  32.          * @var RequestStack
  33.          */
  34.         private $requestStack;
  35.         /**
  36.          * @var ManagerRegistry
  37.          */
  38.         private $doctrine;
  39.         private $knpSnappy;
  40.         private $templating;
  41.         /**
  42.          * @var QueryCollectionExtensionInterface[]|iterable
  43.          */
  44.         private $collectionExtensions;
  45.         private $codeEntite;
  46.         
  47.         private $jwtFactory;
  48.         
  49.         private $request;
  50.         private $apiData;
  51.         /**
  52.          * AgenceApproDataProvider constructor.
  53.          *
  54.          * @param RequestStack      $requestStack
  55.          * @param ManagerRegistry $doctrine
  56.          * @param iterable          $collectionExtensions
  57.          */
  58.         public function __construct(ManagerRegistry $doctrineiterable $collectionExtensionsPdf $knpSnappyContainerInterface $containerEnvironment $twig)
  59.         {
  60.             $this->request Request::createFromGlobals();
  61.             $this->doctrine $doctrine;
  62.             $this->knpSnappy $knpSnappy;
  63.             // $this->templating = $container->get('templating');
  64.             $this->templating $twig;
  65.             $this->collectionExtensions $collectionExtensions;
  66.             $this->jwtFactory JWTEncoder::getInstance();
  67.             $apiKey $this->request->headers->get(Constantes::AUTH_TOKEN);
  68.             $this->apiData $this->jwtFactory->decode($apiKey);
  69.         }
  70.         /**
  71.          * @param string      $resourceClass
  72.          * @param string|null $operationName
  73.          * @param array       $context
  74.          *
  75.          * @return bool
  76.          */
  77.         public function supports(string $resourceClassstring $operationName null, array $context = []): bool
  78.         {
  79.             // return (Approvisionnement::class === $resourceClass && ($operationName == 'get' || $operationName == 'pdf_export' || $operationName == 'csv_export' || $operationName == 'approvisionnement_banque'));
  80.             return (Approvisionnement::class === $resourceClass);
  81.         }
  82.         public function getCollection(string $resourceClassstring $operationName null, array $context = [])
  83.         {
  84.             $manager $this->doctrine->getManagerForClass($resourceClass);
  85.             $repository $manager->getRepository($resourceClass);
  86.             $entiteManager $this->doctrine->getManagerForClass(Entite::class);
  87.             $entiteRepository $entiteManager->getRepository(Entite::class);
  88.             /** @var QueryBuilder $queryBuilder */
  89.             $queryBuilder $repository->createQueryBuilder('p');
  90.             $queryNameGenerator = new QueryNameGenerator();
  91.             
  92.             $codeEntite $this->apiData[Constantes::CODE_CLIENT];
  93.             $codeAgence $this->apiData[Constantes::CODE_POINT_DE_VENTE];
  94.             $codeDistributeur $this->apiData[Constantes::CODE_DISTRIBUTEUR];
  95.             $codeSociete $this->apiData["codeSociete"];
  96.             if (empty($this->apiData[Constantes::CODE_CLIENT]) || !empty($this->apiData[Constantes::CODE_CAISSE])) {
  97.                 throw new CustomException("Accès non autorisé");
  98.             }
  99.             
  100.             // if ($operationName == 'approvisionnement_banque') {
  101.             if (str_contains($operationName'banque')) {
  102.                 $context["filters"]["entite.fournisseur"] = "1";
  103.             } elseif ($codeEntite != "BGDIGIT") {
  104.                 $context["filters"]["entite.fournisseur"] = "0";
  105.             }
  106.             if (str_contains($operationName'operateur')) {
  107.                 $queryBuilder->andwhere('p.operateur IS NOT NULL');
  108.             }
  109.             $nomAgence "";
  110.             $distributeur '';
  111.             $nomAgence "";
  112.             $entite "";
  113.             $bureau "";
  114.             
  115.             $codeEntite = !empty($codeSociete) ? $codeSociete $codeEntite;
  116.             if ($codeEntite != Constantes::BG_ENTITE || !empty($codeSociete)) {
  117.                 $context["filters"]["entite.codeEntite"] = $codeEntite;
  118.             } 
  119.             
  120.             
  121.             $dateFin ''$dateDebut "";
  122.             if(isset($context["filters"]["dateCreation"])){
  123.                 $dateCreation $context["filters"]["dateCreation"];
  124.                 $dateFin = isset($dateCreation["before"]) ? $dateCreation["before"] : "";
  125.                 $dateFin = isset($dateCreation["strictly_before"]) ? $dateCreation["strictly_before"] : "";
  126.                 $dateDebut = isset($dateCreation["after"]) ? $dateCreation["after"] : "";
  127.                 $dateDebut = isset($dateCreation["strictly_after"]) ? $dateCreation["strictly_after"] : "";
  128.             }
  129.             $forExport str_contains($operationName'pdf') || str_contains($operationName'csv');
  130.             if ($forExport) {
  131.                 $datetxt "au "date('d-m-Y');
  132.                 if(!empty($dateDebut) && !empty($dateFin)){
  133.                     $datetxt 'Du ' $dateDebut ' au ' $dateFin;
  134.                 } elseif(!empty($dateDebut) ){
  135.                     $datetxt 'Du ' $dateDebut ' au ' date('d-m-Y');
  136.                 } elseif(!empty($dateFin)) {
  137.                     $datetxt "Jusqu 'au " $dateFin ;
  138.                 }
  139.                 $queryBuilder->orderBy('p.id''DESC');
  140.                 $result $queryBuilder->getQuery()->getResult();
  141.                 // Dans le cas ou on cherche à exporter en PDF
  142.                 if (str_contains($operationName'pdf')) {
  143.                     $nombre count($result);
  144.                     $montant 0;
  145.                     foreach ( $result as $app) {
  146.                         $montant += intval($app->getMontant());
  147.                     }
  148.                     return new PdfResponse(
  149.                         $this->knpSnappy->getOutputFromHtml($this->templating->render(
  150.                             'print/appros.html.twig',
  151.                             ["appros" => $result'nombre' => $nombre,  'datetxt' => $datetxt'montant' => $montant ]
  152.                         ), array(
  153.                             'orientation'=>'Landscape',
  154.                             'encoding' =>  'utf-8',
  155.                             'footer-right'=>'Page [page]/[toPage]''header-line'=>false,'footer-line' =>true,)),
  156.                         'approvisionnement-pdf-export.pdf'
  157.                     );
  158.                 }elseif (str_contains($operationName'csv')) {
  159.                     $response = new StreamedResponse();
  160.                     $response->setCallback(function () use($result$entite$nomAgence$datetxt$distributeur) {
  161.                         $fp fopen('php://output''w');
  162.                         if($entite) {
  163.                             fputcsv($fp, [
  164.                                 $entite->getNom(),
  165.                                 '','','','','','','','','',
  166.                             ]);
  167.                         }
  168.                         if(!empty($nomAgence)) {
  169.                             fputcsv($fp, [
  170.                                 $nomAgence,
  171.                                 '','','','','','','','','',
  172.                             ]);
  173.                         }
  174.                         if($distributeur) {
  175.                             fputcsv($fp, [
  176.                                 $distributeur->getNom(),
  177.                                 'Approvisionements ' .$datetxt,'','','','','','','','',
  178.                             ]);
  179.                         }
  180.                         fputcsv($fp, [
  181.                             'Date de création',
  182.                             'Entités',
  183.                             'Montant XOF',
  184.                             'Statut',
  185.                             'Date de validation',
  186.                         ]);
  187.                         
  188.                         /** @var Transaction $transaction */
  189.                         foreach ($result as $appro) {
  190.                             fputcsv($fp, [
  191.                                 $appro->getDateCreation()->format('d-m-Y H:i:s'),
  192.                                 $appro->getEntite()->getRaisonSociale(),
  193.                                 $appro->getMontant(),
  194.                                 $appro->getStatus() == "En attente de validation" $appro->getStatus() == "Approuvée" "Rejetée",
  195.                                 !empty($appro->getDateValidation()) ? $appro->getDateValidation()->format('d-m-Y H:i:s') : "",
  196.                                 
  197.                             ]);
  198.                             
  199.                         }
  200.                         fclose($fp);
  201.                     });
  202.                     // die;
  203.                     $response->setStatusCode(200);
  204.                     $response->headers->set('Content-Type''text/csv; charset=utf-8');
  205.                     $response->headers->set('Content-Disposition''attachment; filename="export-approvisionnement-pos.csv"');
  206.                     return $response;
  207.                 }
  208.             }
  209.             if ( $operationName == "stat_approvisionnement" || $operationName == "stat_approvisionnement_entite"  || $operationName == "stat_approvisionnement_banque" ) {
  210.                 if ($operationName == "stat_approvisionnement" ){
  211.                     $queryBuilder->andwhere('p.operateur IS NOT NULL');
  212.                 } elseif ($operationName == "stat_approvisionnement_banque" ){
  213.                     $context["filters"]["entite.fournisseur"] = "1";
  214.                 } 
  215.                 $sqlAgregate "count(DISTINCT p.id) as nombre,  COALESCE(sum(p.montant), 0 ) as total";
  216.                 $queryBuilder->select($sqlAgregate);
  217.             }
  218.             foreach ($this->collectionExtensions as $extension) {
  219.                 $extension->applyToCollection($queryBuilder$queryNameGenerator$resourceClass$operationName$context);
  220.                 if ($extension instanceof QueryResultCollectionExtensionInterface && $extension->supportsResult($resourceClass$operationName$context)) {
  221.                     return $extension->getResult($queryBuilder$resourceClass$operationName$context);
  222.                 }
  223.             }
  224.             return $queryBuilder->getQuery()->getResult();
  225.             //return $result;
  226.         }
  227.     }