<?php
namespace App\Controller;
use App\Entity\Entreprise;
use App\Entity\ElectricMeter;
use App\Form\ElectricMeterType;
use App\Repository\ElectricMeterRepository;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
use Dompdf\Dompdf;
class ElectricMeterController extends AbstractController
{
/**
* @Route("/entreprise/electric_meter/add/{id}", name="app_electric_meter_add")
*/
public function add(int $id, Request $request, EntityManagerInterface $entityManager): Response
{
$electric_meters = new ElectricMeter();
$electric_meters->setEntrepriseId($id);
$form = $this->createForm(ElectricMeterType::class, $electric_meters);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->persist($electric_meters);
$entityManager->flush();
// Redirect to the new contract page
return $this->redirectToRoute('app_entreprise_new_contrat', [
'id' => $id,
'meterId' => $electric_meters->getId(),
'meterType' => 'electric'
]);
}
return $this->render('entreprise/electric_meter/add.html.twig', [
'electric_meterForm' => $form->createView(),
'entreprise_id' => $id
]);
}
/**
* @Route("/entreprise/electric_meter/edit/{id}", name="app_electric_meter_edit")
*/
public function edit(int $id, Request $request, EntityManagerInterface $entityManager, ManagerRegistry $doctrine): Response
{
$electric_meters = new ElectricMeter();
$form = $this->createForm(ElectricMeterType::class, $electric_meters);
$form->handleRequest($request);
$electric_meter = $doctrine->getRepository(ElectricMeter::class)->findOneBy(['id' => $id]);
$electric_meter_entity = [
'adresse_compteur' => $electric_meter->getAdresseCompteur(),
'PDL' => $electric_meter->getPDL(),
'date_debut' => $electric_meter->getDateDebut() ? date_format($electric_meter->getDateDebut(),"Y-m-d") : "",
'date_fin' => $electric_meter->getDateFin() ? date_format($electric_meter->getDateFin(),"Y-m-d") : "",
'PS' => $electric_meter->getPS(),
'Profil' => $electric_meter->getProfil(),
'CAR' => $electric_meter->getCAR(),
'fournisseur' => $electric_meter->getFournisseur(),
'prix' => $electric_meter->getPrix(),
];
if ($form->isSubmitted() && $form->isValid()) {
$electric_meterEdit = $form->getData();
$electric_meter->setAdresseCompteur($electric_meterEdit->getAdresseCompteur());
$electric_meter->setPDL($electric_meterEdit->getPDL());
$electric_meter->setDateDebut($electric_meterEdit->getDateDebut());
$electric_meter->setDateFin($electric_meterEdit->getDateFin());
$electric_meter->setPS($electric_meterEdit->getPS());
$electric_meter->setProfil($electric_meterEdit->getProfil());
$electric_meter->setCAR($electric_meterEdit->getCAR());
$electric_meter->setFournisseur($electric_meterEdit->getFournisseur());
$electric_meter->setPrix($electric_meterEdit->getPrix());
$entityManager->persist($electric_meter);
$entityManager->flush();
return $this->redirectToRoute('app_entreprise_details',['id' => $electric_meter->getEntrepriseId()]);
}
return $this->render('entreprise/electric_meter/edit.html.twig', [
'electric_meterForm' => $form->createView(),
'electric_meter' => $electric_meter_entity,
'entreprise_id' => $electric_meter->getEntrepriseId()
]);
}
/**
* @Route("/entreprise/electric_meter/suppr/{id}", name="app_electric_meter_suppr")
*/
public function suppr(int $id, Request $request, EntityManagerInterface $entityManager, ManagerRegistry $doctrine): Response
{
$electric_meter = $doctrine->getRepository(ElectricMeter::class)->findOneBy(['id' => $id]);
$entreprise_id = $electric_meter->getEntrepriseId();
$entityManager->remove($electric_meter);
$entityManager->flush();
return $this->redirectToRoute('app_entreprise_details',['id' => $entreprise_id]);
}
/**
* @Route("/entreprise/electric_meter/details/{id}", name="app_electric_meter_details")
*/
public function details(int $id, ManagerRegistry $doctrine): Response
{
$electric_meter = $doctrine->getRepository(ElectricMeter::class)->findOneBy(['id' => $id]);
$entreprise = $doctrine->getRepository(Entreprise::class)->findOneBy(['id' => $electric_meter->getEntrepriseId()]);
$electric_meter_entity = [
'adresse_compteur' => $electric_meter->getAdresseCompteur(),
'PDL' => $electric_meter->getPDL(),
'date_debut' => $electric_meter->getDateDebut() ? date_format($electric_meter->getDateDebut(),"Y-m-d") : "",
'date_fin' => $electric_meter->getDateFin() ? date_format($electric_meter->getDateFin(),"Y-m-d") : "",
'PS' => $electric_meter->getPS(),
'Profil' => $electric_meter->getProfil(),
'CAR' => $electric_meter->getCAR(),
'fournisseur' => $electric_meter->getFournisseur(),
'prix' => $electric_meter->getPrix(),
'entreprise' => $entreprise ? $entreprise->getRaisonSociale() : "",
'return_path' => $this->generateUrl('app_entreprise_details',['id' => $electric_meter->getEntrepriseId()])
];
return $this->render('entreprise/electric_meter/details.html.twig', [
'electric_meter' => $electric_meter_entity,
]);
}
/**
* @Route("/entreprise/electric_meter/check_pdl/{pdl}", name="app_electric_meter_check_pdl")
*/
public function checkPDL($pdl, ManagerRegistry $doctrine): Response
{
$electric_meter = $doctrine->getRepository(ElectricMeter::class)->findOneBy(['PDL' => $pdl]);
if($electric_meter){
return new Response("exist");
}
return new Response("available");
}
/**
* @Route("/entreprise/electric_meter/pre_etude_c5_base/{pdl}", name="app_electric_meter_pre_etude_c5_base")
*/
public function preEtudeC5Base(string $pdl=null, ManagerRegistry $doctrine): Response
{
$electric_meter = $doctrine->getRepository(ElectricMeter::class)->findOneBy(['PDL' => $pdl]);
$entreprise = $doctrine->getRepository(Entreprise::class)->findOneBy(['id' => $electric_meter->getEntrepriseId()]);
$templatePath = $this->getParameter('kernel.project_dir') . '/assets/templates/ETUDE_C5_Base.xlsx';
$spreadsheet = IOFactory::load($templatePath);
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('B3', $entreprise->getRaisonSociale());
$sheet->setCellValue('C6', $entreprise->getSIRET());
$sheet->setCellValue('C7', $electric_meter->getPDL());
$sheet->setCellValue('C8', $electric_meter->getPS());
$sheet->setCellValue('G6', $entreprise->getNaf());
$sheet->setCellValue('G9', $electric_meter->getDateFin() ? date_format($electric_meter->getDateFin(),"d/m/Y") : "");
$address = $electric_meter->getAdresseCompteur();
preg_match('/\b\d{5}\b/', $address, $matches);
$postal_code = $matches[0];
$postal_code_position = strpos($address, $postal_code);
$city = trim(substr($address, $postal_code_position + strlen($postal_code)));
$address_with_no_postal_code_and_city = trim(substr($address, 0, $postal_code_position));
$sheet->setCellValue('C12', $address_with_no_postal_code_and_city);
$sheet->setCellValue('C13', $postal_code . ' ' . $city);
$sheet->setCellValue('B16', $electric_meter->getCAR());
// Générer la réponse pour le téléchargement du fichier
$response = new Response();
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
ob_start();
$writer->save('php://output');
$excelData = ob_get_contents();
ob_end_clean();
// Définir les en-têtes pour le téléchargement
$RaisonSociale = str_replace(' ', '_', $entreprise->getRaisonSociale());
$response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
//last 4 digits of PDL
$pdl_last_4_digits = substr($electric_meter->getPDL(), -4);
$response->headers->set('Content-Disposition', 'attachment;filename="Etude_C5_'.$pdl_last_4_digits.'_'.$RaisonSociale.'.xlsx"');
$response->headers->set('Cache-Control', 'max-age=0');
// Envoyer le contenu généré en tant que réponse
$response->setContent($excelData);
return $response;
}
//electric_meter_pre_etude_c5_hp_hc
/**
* @Route("/entreprise/electric_meter/pre_etude_c5_hp_hc/{pdl}", name="app_electric_meter_pre_etude_c5_hp_hc")
*/
public function preEtudeC5HPHC(string $pdl=null, ManagerRegistry $doctrine): Response
{
$electric_meter = $doctrine->getRepository(ElectricMeter::class)->findOneBy(['PDL' => $pdl]);
$entreprise = $doctrine->getRepository(Entreprise::class)->findOneBy(['id' => $electric_meter->getEntrepriseId()]);
$templatePath = $this->getParameter('kernel.project_dir') . '/assets/templates/ETUDE_C5_HP_HC.xlsx';
$spreadsheet = IOFactory::load($templatePath);
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('B3', $entreprise->getRaisonSociale());
$sheet->setCellValue('C6', $entreprise->getSIRET());
$sheet->setCellValue('C7', $electric_meter->getPDL());
$sheet->setCellValue('C8', $electric_meter->getPS());
$sheet->setCellValue('F6', $entreprise->getNaf());
$sheet->setCellValue('F9', $electric_meter->getDateFin() ? date_format($electric_meter->getDateFin(),"d/m/Y") : "");
$address = $electric_meter->getAdresseCompteur();
preg_match('/\b\d{5}\b/', $address, $matches);
$postal_code = $matches[0];
$postal_code_position = strpos($address, $postal_code);
$city = trim(substr($address, $postal_code_position + strlen($postal_code)));
$address_with_no_postal_code_and_city = trim(substr($address, 0, $postal_code_position));
$sheet->setCellValue('C12', $address_with_no_postal_code_and_city);
$sheet->setCellValue('C13', $postal_code . ' ' . $city);
// Générer la réponse pour le téléchargement du fichier
$response = new Response();
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
ob_start();
$writer->save('php://output');
$excelData = ob_get_contents();
ob_end_clean();
// Définir les en-têtes pour le téléchargement
$RaisonSociale = str_replace(' ', '_', $entreprise->getRaisonSociale());
$response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
//last 4 digits of PDL
$pdl_last_4_digits = substr($electric_meter->getPDL(), -4);
$response->headers->set('Content-Disposition', 'attachment;filename="Etude_C5_'.$pdl_last_4_digits.'_'.$RaisonSociale.'.xlsx"');
$response->headers->set('Cache-Control', 'max-age=0');
// Envoyer le contenu généré en tant que réponse
$response->setContent($excelData);
return $response;
}
}