<?php
namespace App\Controller;
use App\Entity\Progression;
use App\Entity\ProgressionDetail;
use App\Form\ProgressionType;
use App\Repository\ProgressionRepository;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use Knp\Snappy\Pdf;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
#[Route('/progression')]
class ProgressionController extends AbstractController
{
#[Route('/', name: 'app_progression_index', methods: ['GET'])]
public function index(ProgressionRepository $progressionRepository): Response
{
/*$formPdf = $this->createForm(ProgressionPdfSequenceType::class, null ,[
'action' => $this->generateUrl('app_progression_pdf_sequence'),
]);
$formPage = $this->createForm(ProgressionPdfSequenceType::class, null ,[
'action' => $this->generateUrl('app_progression_pdf_sequence'),
]);*/
return $this->renderForm('progression/index.html.twig', [
'progressions' => $progressionRepository->findAll(),
//'formPage' => $formPage,
//'formPdf' => $formPdf,
]);
}
#[Route('/new', name: 'app_progression_new', methods: ['GET', 'POST'])]
public function new(Request $request, ProgressionRepository $progressionRepository): Response
{
$progression = new Progression();
$form = $this->createForm(ProgressionType::class, $progression);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$progressionRepository->add($progression, true);
return $this->redirectToRoute('app_progression_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('progression/new.html.twig', [
'progression' => $progression,
'form' => $form,
]);
}
#[Route('/{id}', name: 'app_progression_show', methods: ['GET'])]
public function show(Progression $progression): Response
{
return $this->render('progression/show.html.twig', [
'progression' => $progression,
]);
}
#[Route('/{id}/edit', name: 'app_progression_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Progression $progression, ProgressionRepository $progressionRepository): Response
{
$form = $this->createForm(ProgressionType::class, $progression);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$progressionRepository->add($progression, true);
return $this->redirectToRoute('app_progression_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('progression/edit.html.twig', [
'progression' => $progression,
'form' => $form,
]);
}
#[Route('/{id}', name: 'app_progression_delete', methods: ['POST'])]
public function delete(Request $request, Progression $progression, ProgressionRepository $progressionRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$progression->getId(), $request->request->get('_token'))) {
$progressionRepository->remove($progression, true);
}
return $this->redirectToRoute('app_progression_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('/{id}/generer', name: 'app_progression_generate', methods: ['GET'])]
public function generer(Request $request, Progression $progression, EntityManagerInterface $entityManager): Response
{
if(!$progression->isEstGenere()){
$date = $progression->getDateDebut();
$jours =[];
foreach ($progression->getRefBlocHeure() as $bloc ){
if (!in_array($bloc->getJour(),$jours))
$jours[] = $bloc->getJour();
}
$dateFin = date_format($progression->getDateFin(),"Ymd");
while (date_format($date,"Ymd") <= $dateFin){
$dayOfDate = date_format($date,"N");
if(in_array($dayOfDate,$jours)){
foreach ($progression->getRefBlocHeure() as $bloc ){
if ($bloc->getJour() == $dayOfDate){
$progressionDetail = new ProgressionDetail();
$progressionDetail->setDate(new DateTime(date_format($date,"Y-m-d")));
$progressionDetail->setJour($dayOfDate);
$progressionDetail->setRefBlocHeure($bloc);
$progressionDetail->setRefProgression($progression);
foreach ($progression->getRefPeriodeCle() as $periode){
if(is_null($progressionDetail->getRefPeriodeCle()) && date_format($date,"Ymd") >= date_format($periode->getDebut(),"Ymd") && date_format($date,"Ymd") <= date_format($periode->getFin(),"Ymd")){
$progressionDetail->setRefPeriodeCle($periode);
}
}
$entityManager->persist($progressionDetail);
}
}
dump(date_format($date,"Ymd")." / ".date_format($progression->getDateFin(),"Ymd"));
}
if ($dayOfDate == 5)
$date->modify('+3 day');
else
$date->modify('+1 day');
}
$progression->setEstGenere(true);
$entityManager->flush();
}
return $this->redirectToRoute('app_progression_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('/{id}/tableau/sequence', name: 'app_progression_tableau_sequence', methods: ['GET'])]
public function tableauSequence(Progression $progression): Response
{
return $this->render('pdf/ficheProgressionSequence.html.twig', [
'progression' => $progression,
'page' => true,
]);
}
#[Route('/{id}/pdf/sequence', name: 'app_progression_pdf_sequence', methods: ['GET'])]
public function pdfSequence(Pdf $pdf,Progression $progression): Response
{
$pageUrl = $this->renderView('pdf/ficheProgressionSequence.html.twig', array(
'progression' => $progression,
'page' => false,
));
return new PdfResponse(
$pdf->getOutputFromHtml($pageUrl,[
"orientation" => 'Landscape',
"enable-local-file-access" => true,
"enable-javascript" => true,
"page-size" => "A3"
]),
iconv('UTF-8','ASCII//TRANSLIT',$progression->getLibelle()) .'.pdf'
);
}
#[Route('{id}/page/sequence', name: 'app_progression_page_sequence', methods: ['GET'])]
public function pageSequence(Progression $progression): Response
{
return $this->render('pdf/ficheProgressionSequence.html.twig', array(
'progression' => $progression,
'page' => true,
));
}
}