src/Controller/ExcelController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use DateTime;
  4. use App\Entity\Site;
  5. use App\Service\PetitsOutils;
  6. use App\Repository\SiteRepository;
  7. use App\Repository\MeteoRepository;
  8. use App\Repository\PrevisMeteoRepository;
  9. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  14. use Symfony\Component\Form\Extension\Core\Type\TextType;
  15. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. class ExcelController extends AbstractController
  18. {
  19.     private $petitsOutils;
  20.     private $siteRepository;
  21.     private $meteoRepository;
  22.     private $previsMeteoRepository;
  23.     public function __construct(PetitsOutils $petitsOutilsSiteRepository $siteRepositoryMeteoRepository $meteoRepositoryPrevisMeteoRepository $previsMeteoRepository )
  24.     {
  25.         $this->petitsOutils $petitsOutils;
  26.         $this->siteRepository $siteRepository;
  27.         $this->meteoRepository $meteoRepository;
  28.         $this->previsMeteoRepository $previsMeteoRepository;
  29.     }
  30.     /**
  31.      * @Route("/user/excel/dates",name="excel-dates")
  32.      */
  33.     public function choixDates(Request $request): Response
  34.     {
  35.         $route 'excel';
  36.         $defaultData = [];
  37.         $form $this->createFormBuilder($defaultData)
  38.         ->add('debut'TextType::class,array(
  39.             'label' =>"début",
  40.             'attr' => array(
  41.                 'class' => 'js-datepicker',
  42.             )))
  43.             ->add('fin'TextType::class,array(
  44.                 'label' =>"fin",
  45.                 'attr' => array(
  46.                     'class' => 'js-datepicker',
  47.                 )
  48.             ))
  49.             ->add('site',EntityType::class,array(
  50.                 'class'=>Site::class,
  51.             ))
  52.             ->add('ok'SubmitType::class)
  53.             ->getForm();
  54.         $form->handleRequest($request);
  55.         if($form->isSubmitted() && $form->isValid()){
  56.             $data $form->getData();
  57.             $debut $this->petitsOutils->frenchDateToEnglish($data['debut']);
  58.             
  59.             $fin $this->petitsOutils->frenchDateToEnglish($data['fin']);
  60.             return $this->redirectToRoute($route,array(
  61.                 'debut'=>$debut,
  62.                 'fin'=>$fin,
  63.                 'site'=>$data['site']->getId()
  64.             ));
  65.         }
  66.         return $this->renderForm('graph/dates.html.twig', [
  67.             'form' => $form
  68.         ]);
  69.     }
  70.     /**
  71.      * @Route("/user/excel",name="excel")
  72.      */
  73.     public function excel(Request $request)
  74.     {
  75.         $debut $request->query->get('debut');
  76.         $fin $request->query->get('fin');
  77.         $siteId $request->query->get('site');
  78.         $debut = new DateTime($debut);
  79.         $fin = new DateTime($fin);
  80.         $site $this->siteRepository->find($siteId);
  81.         $pastdatas $this->meteoRepository->findBetweenDatesForSite($debut,$fin,$site);
  82.         $previsdatas $this->previsMeteoRepository->findBetweenDatesForSite($debut,$fin,$site);
  83.         $datas array_merge($pastdatas,$previsdatas);
  84.         usort($datas, function($a$b)
  85.         {
  86.             return strcmp($a->getDate()->format('Y-m-d H'), $b->getDate()->format('Y-m-d H'));
  87.         });
  88.        // dd($datas);
  89.         $spreadsheet = new Spreadsheet();
  90.         /* @var $sheet \PhpOffice\PhpSpreadsheet\Writer\Xlsx\Worksheet */
  91.         $sheet $spreadsheet->getActiveSheet();
  92.         $sheet
  93.             ->setCellValue('A1''Station')
  94.             ->setCellValue('A2''Date')
  95.             ->setCellValue('B2''Pluie')
  96.             ->setCellValue('C2''Humidité')
  97.             ->setCellValue('D2''T°')
  98.             ;
  99.         $ligne 3;
  100.         foreach ($datas as $d) {
  101.             //dump($ep);exit;
  102.             
  103.             $sheet->setCellValue('B1'$site->getName());
  104.             $date $d->getDate();
  105.             $date $date->format('Y-m-d H:i');
  106.             $excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($date);
  107.             
  108.             $sheet->setCellValue('A' $ligne$excelDateValue);
  109.             // Set the number format mask so that the excel timestamp  
  110.             // will be displayed as a human-readable date/time 
  111.             //voir /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat.php
  112.             $spreadsheet->getActiveSheet()->getStyle('A' $ligne)
  113.                 ->getNumberFormat()
  114.                 ->setFormatCode(
  115.                     \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DATETIME
  116.                 ); //'d/m/yy h:mm'
  117.             $sheet->setCellValue('B' $ligne$d->getRR());
  118.             $sheet->setCellValue('C' $ligne$d->getU());
  119.             $sheet->setCellValue('D' $ligne$d->getT());
  120.             $ligne++;
  121.         }
  122.           
  123.     // Create your Office 2007 Excel (XLSX Format)
  124.     //$writer = new Xlsx($spreadsheet);
  125.             
  126.     // redirect output to client browser
  127.     header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  128.     
  129.         header('Content-Disposition: attachment;filename="horaires.xlsx"');
  130.     
  131.     header('Cache-Control: max-age=0');
  132.     $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet'Xlsx');
  133.     $writer->save('php://output');
  134.     exit;// Create your Office 2007 Excel (XLSX Format)
  135.         
  136.     }
  137. }