<?php
namespace App\Controller;
use DateTime;
use App\Entity\Site;
use App\Service\PetitsOutils;
use App\Repository\SiteRepository;
use App\Repository\DailyRepository;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class ExcelQController extends AbstractController
{
private $petitsOutils;
private $siteRepository;
private $dailyRepository;
public function __construct(PetitsOutils $petitsOutils, SiteRepository $siteRepository, DailyRepository $dailyRepository )
{
$this->petitsOutils = $petitsOutils;
$this->siteRepository = $siteRepository;
$this->dailyRepository = $dailyRepository;
}
/**
* @Route("/user/excel/qdates",name="excel-q-dates")
*/
public function choixDates(Request $request): Response
{
$route = 'excel-q';
$defaultData = [];
$form = $this->createFormBuilder($defaultData)
->add('debut', TextType::class,array(
'label' =>"début",
'attr' => array(
'class' => 'js-datepicker',
)))
->add('fin', TextType::class,array(
'label' =>"fin",
'attr' => array(
'class' => 'js-datepicker',
)
))
->add('site',EntityType::class,array(
'class'=>Site::class,
))
->add('ok', SubmitType::class)
->getForm();
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$data = $form->getData();
$debut = $this->petitsOutils->frenchDateToEnglish($data['debut']);
$fin = $this->petitsOutils->frenchDateToEnglish($data['fin']);
return $this->redirectToRoute($route,array(
'debut'=>$debut,
'fin'=>$fin,
'site'=>$data['site']->getId()
));
}
return $this->renderForm('graph/dates.html.twig', [
'form' => $form
]);
}
/**
* @Route("/user/excelq",name="excel-q")
*/
public function excelq(Request $request)
{
$debut = $request->query->get('debut');
$fin = $request->query->get('fin');
$siteId = $request->query->get('site');
$debut = new DateTime($debut);
$fin = new DateTime($fin);
$site = $this->siteRepository->find($siteId);
$datas = $this->dailyRepository->findBetweenDatesForSite($debut,$fin,$site);
//dd($datas);
$spreadsheet = new Spreadsheet();
/* @var $sheet \PhpOffice\PhpSpreadsheet\Writer\Xlsx\Worksheet */
$sheet = $spreadsheet->getActiveSheet();
$sheet
->setCellValue('A1', 'Station')
->setCellValue('A2', 'Date')
->setCellValue('B2', 'Pluie')
->setCellValue('C2', 'T°')
->setCellValue('D2', 'ETP')
;
$ligne = 3;
foreach ($datas as $d) {
//dump($ep);exit;
$sheet->setCellValue('B1', $site->getName());
$date = $d->getDate();
$date = $date->format('Y-m-d');
$excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($date);
$sheet->setCellValue('A' . $ligne, $excelDateValue);
// Set the number format mask so that the excel timestamp
// will be displayed as a human-readable date/time
//voir /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat.php
$spreadsheet->getActiveSheet()->getStyle('A' . $ligne)
->getNumberFormat()
->setFormatCode(
\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DDMMYYYY
);
$sheet->setCellValue('B' . $ligne, $d->getPrecipsum());
$sheet->setCellValue('C' . $ligne, $d->getT());
$sheet->setCellValue('D' . $ligne, $d->getETP());
$ligne++;
}
// Create your Office 2007 Excel (XLSX Format)
//$writer = new Xlsx($spreadsheet);
// redirect output to client browser
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="quotidiennes.xlsx"');
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
exit;// Create your Office 2007 Excel (XLSX Format)
}
}