src/DataProvider/MouvementAgenceDataProvider.php line 236

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\MouvementAgence;
  10.     use App\Entity\Entite;
  11.     //use Doctrine\Common\Persistence\ManagerRegistry; v4
  12.     use Doctrine\Persistence\ManagerRegistry//v5
  13.     use Doctrine\ORM\QueryBuilder;
  14.     use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  15.     use Knp\Snappy\Pdf;
  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 MouvementCaisseDataProvider
  26.      *
  27.      * @package App\MouvementCaisseDataProvider
  28.      */
  29.     class MouvementAgenceDataProvider 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 $twig;
  64.             $this->collectionExtensions $collectionExtensions;
  65.             $this->jwtFactory JWTEncoder::getInstance();
  66.             $apiKey $this->request->headers->get(Constantes::AUTH_TOKEN);
  67.             $this->apiData $this->jwtFactory->decode($apiKey);
  68.         }
  69.         /**
  70.          * @param string      $resourceClass
  71.          * @param string|null $operationName
  72.          * @param array       $context
  73.          *
  74.          * @return bool
  75.          */
  76.         public function supports(string $resourceClassstring $operationName null, array $context = []): bool
  77.         {
  78.             return (MouvementAgence::class === $resourceClass && ($operationName == 'get' || $operationName == 'pdf_export' || $operationName == 'csv_export'));
  79.         }
  80.         public function getCollection(string $resourceClassstring $operationName null, array $context = [])
  81.         {
  82.             $manager $this->doctrine->getManagerForClass($resourceClass);
  83.             $repository $manager->getRepository($resourceClass);
  84.             $entiteManager $this->doctrine->getManagerForClass(Entite::class);
  85.             $entiteRepository $entiteManager->getRepository(Entite::class);
  86.             /** @var QueryBuilder $queryBuilder */
  87.             $queryBuilder $repository->createQueryBuilder('p');
  88.             $queryNameGenerator = new QueryNameGenerator();
  89.             
  90.             if (!isset($this->apiData[Constantes::CODE_CLIENT])) {
  91.                 throw new CustomException("Accès non autorisé");
  92.             }
  93.             $codeEntite $this->apiData[Constantes::CODE_CLIENT];
  94.             $codeAgence $this->apiData[Constantes::CODE_POINT_DE_VENTE];
  95.             $codeDistributeur $this->apiData[Constantes::CODE_DISTRIBUTEUR];
  96.             $codeCaisse $this->apiData[Constantes::CODE_CAISSE];
  97.             $nomAgence "";
  98.             $distributeur '';
  99.             $nomAgence "";
  100.             $entite "";
  101.             $bureau "";
  102.             
  103.             
  104.             if ($codeEntite != Constantes::BG_ENTITE) {
  105.                 $context["filters"]["debiteur.codeEntite"] = $codeEntite;
  106.                 $entite $entiteRepository->findOneBy(["code" => $codeEntite]);
  107.             } 
  108.             
  109.             // $queryBuilder->andwhere('p.status !=:status')
  110.             // ->setParameter('status', 2);
  111.             if (!empty($codeCaisse)) {
  112.                 //$context["filters"]["debiteur.code"] = $codeCaisse;
  113.             }elseif(!empty($codeAgence) && ($codeAgence != $codeDistributeur)) {
  114.                 //$context["filters"]["debiteur.code"] = $codeAgence;    
  115.                 $queryBuilder->join('p.debiteur''db');
  116.                 $queryBuilder->leftjoin('p.crediteur''cr');            
  117.                 $queryBuilder->andWhere('cr.code = :codeAgence');
  118.                 $queryBuilder->setParameter('codeAgence'$codeAgence);
  119.                 $queryBuilder->orWhere('db.code = :codeAgenceDeb');
  120.                 $queryBuilder->setParameter('codeAgenceDeb'$codeAgence);
  121.                 //$context["filters"]["crediteur.code"] = $codeAgence;
  122.                 $nomAgence $this->apiData["bureau"]; 
  123.             } elseif(!empty($codeAgence) && ($codeAgence == $codeDistributeur)) {
  124.                 $context["filters"]["debiteur.codeDistributeur"] = $codeDistributeur;
  125.             }
  126.             if(!empty($codeDistributeur)) {
  127.                 $distributeur $repository->findOneBy(["codeDistributeur" => $codeDistributeur"isDistributeur" => 1]);
  128.             }
  129.             
  130.             // $queryBuilder->andWhere('p.codeDistributeur IS NULL');
  131.             
  132.             foreach ($this->collectionExtensions as $extension) {
  133.                 $extension->applyToCollection($queryBuilder$queryNameGenerator$resourceClass$operationName$context);
  134.                 if ($extension instanceof QueryResultCollectionExtensionInterface && $extension->supportsResult($resourceClass$operationName$context)) {
  135.                     return $extension->getResult($queryBuilder$resourceClass$operationName$context);
  136.                 }
  137.             }
  138.             $dateFin ''$dateDebut "";
  139.             if(isset($context["filters"]["dateCreation"])){
  140.                 $dateCreation $context["filters"]["dateCreation"];
  141.                 // var_dump($dateCreation);die;
  142.                 $dateFin = isset($dateCreation["before"]) ? $dateCreation["before"] : "";
  143.                 $dateFin = isset($dateCreation["strictly_before"]) ? $dateCreation["strictly_before"] : "";
  144.                 $dateDebut = isset($dateCreation["after"]) ? $dateCreation["after"] : "";
  145.                 $dateDebut = isset($dateCreation["strictly_after"]) ? $dateCreation["strictly_after"] : "";
  146.             }
  147.             $datetxt "au "date('d-m-Y');
  148.             if(!empty($dateDebut) && !empty($dateFin)){
  149.                 $datetxt 'Du ' $dateDebut ' au ' $dateFin;
  150.             } elseif(!empty($dateDebut) ){
  151.                 $datetxt 'Du ' $dateDebut ' au ' date('d-m-Y');
  152.             } elseif(!empty($dateFin)) {
  153.                 $datetxt "Jusqu 'au " $dateFin ;
  154.             }
  155.             if ($operationName !== 'get'){
  156.                 $queryBuilder->orderBy('p.id''DESC');
  157.                 $result $queryBuilder->getQuery()->getResult();
  158.                 // Dans le cas ou on cherche à exporter en PDF
  159.                 if ($operationName == 'pdf_export') {
  160.                     $nombre count($result);
  161.                     $montant 0;
  162.                     foreach ( $result as $app) {
  163.                         $montant += intval($app->getMontant());
  164.                     }
  165.                     return new PdfResponse(
  166.                         $this->knpSnappy->getOutputFromHtml($this->templating->render(
  167.                             'print/approcaisses.html.twig',
  168.                             ["appros" => $result'nombre' => $nombre,  'datetxt' => $datetxt'montant' => $montant
  169.                                 "entite" => $entite"agence" => strtoupper($nomAgence), 'distributeur' => $distributeur ]
  170.                         ), array(
  171.                             'orientation'=>'Landscape',
  172.                             'encoding' =>  'utf-8',
  173.                             'footer-right'=>'Page [page]/[toPage]''header-line'=>false,'footer-line' =>true,)),
  174.                         'approvisionnement-pos-pdf-export.pdf'
  175.                     );
  176.                 }
  177.                 // Dans le cas ou on cherche à exporter en CSV
  178.                 if ($operationName == 'csv_export') {
  179.                     $response = new StreamedResponse();
  180.                     $response->setCallback(function () use($result$entite$nomAgence$datetxt$distributeur) {
  181.                         $fp fopen('php://output''w');
  182.                         if($entite) {
  183.                             fputcsv($fp, [
  184.                                 $entite->getNom(),
  185.                                 '','','','','','','','','',
  186.                             ]);
  187.                         }
  188.                         if(!empty($nomAgence)) {
  189.                             fputcsv($fp, [
  190.                                 $nomAgence,
  191.                                 '','','','','','','','','',
  192.                             ]);
  193.                         }
  194.                         if($distributeur) {
  195.                             fputcsv($fp, [
  196.                                 $distributeur->getNom(),
  197.                                 'Approvisionements POS ' .$datetxt,'','','','','','','','',
  198.                             ]);
  199.                         }
  200.                         fputcsv($fp, [
  201.                             'Date de création',
  202.                             'Montant '. !empty($entite) ? $entite->getDevise() : '',
  203.                             'Code caisse',
  204.                             'Numero caisse',
  205.                             'Statut',
  206.                             'Date de validation',
  207.                         ]);
  208.                         
  209.                         /** @var Transaction $transaction */
  210.                         foreach ($result as $appro) {
  211.                             fputcsv($fp, [
  212.                                 $appro->getDateCreation()->format('d-m-Y H:i:s'),
  213.                                 $appro->getMontant(),
  214.                                 $appro->getCaisse()->getCode(),
  215.                                 $appro->getCaisse()->getNumero(),
  216.                                 $appro->getStatus() == "En attente de validation" $appro->getStatus() == "Approuvée" "Rejetée",
  217.                                 !empty($appro->getDateValidation()) ? $appro->getDateValidation()->format('d-m-Y H:i:s') : "",
  218.                             ]);
  219.                             
  220.                         }
  221.                         fclose($fp);
  222.                     });
  223.                     // die;
  224.                     $response->setStatusCode(200);
  225.                     $response->headers->set('Content-Type''text/csv; charset=utf-8');
  226.                     $response->headers->set('Content-Disposition''attachment; filename="export-approvisionnement-caisse.csv"');
  227.                     return $response;
  228.                 }
  229.             }
  230.             return $result;
  231.         }
  232.     }