src/Controller/ExcelQController.php line 35

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