<?php
namespace App\Controller;
use App\Entity\FraisKilometriques;
use App\Repository\AccountingFirmRepository;
use Symfony\Component\HttpFoundation\Request;
use App\Repository\AuthorizedDomainRepository;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class WidgetSimulateurController extends AbstractController
{
#[Route('/check-simulateur', name: 'w_simu_check')]
public function ctrl_checkSimuateur(Request $request, AccountingFirmRepository $repository, string $prefix = null): JsonResponse
{
$token = $request->query->get('token');
$host = $request->get('host');
if ($token && $host) {
$accountingFirm = $repository->findOneBy(['simulateurToken' => $token]);
$isAuthorized = false;
if ($accountingFirm && in_array($host, $accountingFirm->getListAuthorizedDomains())) {
$isAuthorized = true;
}
$url = $isAuthorized ? $accountingFirm->getSimulateurWidgetUrl() : null;
} else {
$accountingFirm = $repository->findOneBy(['host' => $host]);
$url = $accountingFirm ? $prefix . $this->generateUrl('w_simu_get') : null;
}
return $this->json($url);
}
#[Route('/widget-simulateur', name: 'w_simu_get')]
public function ctrl_widgetSimulateur(Request $request, AccountingFirmRepository $repository, AuthorizedDomainRepository $domains)
{
$token = $request->query->get('token');
$host = $request->get('host');
if ($host != "preview") {
$accountingFirm = $repository->findOneBy(['host' => $host]);
if (is_null($accountingFirm)) {
$domains = $domains->findBy(['name' => $host]);
if (is_null($domains)) {
throw new NotFoundHttpException();
}
foreach ($domains as $dom) {
$tmp_ac = $dom->getAccountingFirm();
if ($tmp_ac->getSimulateurToken() == $token) {
$accountingFirm = $tmp_ac;
break;
}
}
}
if (is_null($accountingFirm)) {
throw new NotFoundHttpException();
}
}
return $this->render('widget_simulateur_v2/content.html.twig', [
'cabinet' => $accountingFirm,
]);
}
#[Route('/widget-simulateur-list', name: 'w_simu_get_list')]
public function ctrl_widgetSimulateurList(Request $request, AccountingFirmRepository $repository, AuthorizedDomainRepository $domains)
{
$token = $request->query->get('token');
$host = $request->get('host');
if ($host != "preview") {
$accountingFirm = $repository->findOneBy(['host' => $host]);
if (is_null($accountingFirm)) {
$domains = $domains->findBy(['name' => $host]);
if (is_null($domains)) {
throw new NotFoundHttpException();
}
foreach ($domains as $dom) {
$tmp_ac = $dom->getAccountingFirm();
if ($tmp_ac->getSimulateurToken() == $token) {
$accountingFirm = $tmp_ac;
break;
}
}
}
if (is_null($accountingFirm)) {
throw new NotFoundHttpException();
}
}
return $this->render('widget_simulateur_v2/list.html.twig', [
'cabinet' => $accountingFirm,
]);
}
#[Route('/embed', name: 'w_simu_embed')]
public function embed(Request $request, AccountingFirmRepository $repository)
{
$root = $this->getParameter('kernel.project_dir');
$path = $root . '/public/widgets/simulateur/widget_simulateur.js';
return new BinaryFileResponse($path);
}
#[Route('/{filename}.{format}', name: 'w_simu_files')]
public function simu_files(Request $request, string $filename, string $format)
{
$allowed = array('png', 'jpg', 'jpeg', 'gif', 'js', 'svg', 'eot', 'ttf', 'woff');
if (in_array($format, $allowed)) {
$root = $this->getParameter('kernel.project_dir');
$path = $root . '/public/widgets/simulateur/' . $filename . '.' . $format;
//dd(file_exists($path), $path, $request->getRequestFormat());
return new BinaryFileResponse($path);
}
return false;
}
#[Route('/simulateur-bareme-kilometrique', name: 'simulateur_bareme_kilometrique')]
public function simulateur_bareme_kilometrique(Request $request, AccountingFirmRepository $repository, AuthorizedDomainRepository $domains, EntityManagerInterface $entityManager): Response
{
$token = $request->query->get('token');
$host = $request->get('host');
$rates = $entityManager->getRepository(FraisKilometriques::class)->findAll();
$modifiedRates = [];
foreach ($rates as $rate) {
$power = str_replace(' ', '-', strtolower($rate->getPower()));
$distance = str_replace([' ', "'", '(', ')'], ['-', '-', '', ''], strtolower($rate->getDistance()));
if ($rate->getOptional()) {
$modifiedRates[$distance][$rate->getType()][$power] = [
'power' => $rate->getPower(),
'rate' => $rate->getRate(),
'plus' => $rate->getOptional()
];
} else {
$modifiedRates[$distance][$rate->getType()][$power] = [
'power' => $rate->getPower(),
'rate' => $rate->getRate(),
];
}
}
if ($host != "preview") {
$accountingFirm = $repository->findOneBy(['host' => $host]);
if (is_null($accountingFirm)) {
$domains = $domains->findBy(['name' => $host]);
if (is_null($domains)) {
throw new NotFoundHttpException();
}
foreach ($domains as $dom) {
$tmp_ac = $dom->getAccountingFirm();
if ($tmp_ac->getSimulateurToken() == $token) {
$accountingFirm = $tmp_ac;
break;
}
}
}
if (is_null($accountingFirm)) {
throw new NotFoundHttpException();
}
}
// Générez le contenu de la page HTML contenant le script
return $this->render('widget_simulateur_v2/simulateur-bareme-kilometrique.html.twig', [
'cabinet' => $accountingFirm,
'rates' => $modifiedRates
]);
}
/**
* @Route("/dynamic-svg", name="dynamic_svg")
*/
public function dynamicSvg(Request $request, AccountingFirmRepository $repository, AuthorizedDomainRepository $domains): Response
{
$token = $request->query->get('token');
$host = $request->get('host');
if ($host != "preview") {
$accountingFirm = $repository->findOneBy(['host' => $host]);
if (is_null($accountingFirm)) {
$domains = $domains->findBy(['name' => $host]);
if (is_null($domains)) {
throw new NotFoundHttpException();
}
foreach ($domains as $dom) {
$tmp_ac = $dom->getAccountingFirm();
if ($tmp_ac->getSimulateurToken() == $token) {
$accountingFirm = $tmp_ac;
break;
}
}
}
if (is_null($accountingFirm)) {
throw new NotFoundHttpException();
}
}
$cabinetColor = $accountingFirm->getActuv2Colorprimary();
// Rendre le fichier SVG en utilisant Twig
return $this->render('widget_simulateur_v2/svg/dynamic_svg.html.twig', [
'cabinetColor' => $cabinetColor,
]);
}
#[Route('/simulateur-calcul-rtt', name: 'simulateur_calcul_rtt')]
public function simulateur_calcul_rtt(Request $request, AccountingFirmRepository $repository, AuthorizedDomainRepository $domains, EntityManagerInterface $entityManager): Response
{
$token = $request->query->get('token');
$host = $request->get('host');
if ($host != "preview") {
$accountingFirm = $repository->findOneBy(['host' => $host]);
if (is_null($accountingFirm)) {
$domains = $domains->findBy(['name' => $host]);
if (is_null($domains)) {
throw new NotFoundHttpException();
}
foreach ($domains as $dom) {
$tmp_ac = $dom->getAccountingFirm();
if ($tmp_ac->getSimulateurToken() == $token) {
$accountingFirm = $tmp_ac;
break;
}
}
}
if (is_null($accountingFirm)) {
throw new NotFoundHttpException();
}
}
// Générez le contenu de la page HTML contenant le script
// Récupérer l'année actuelle
$currentYear = (new DateTime())->format('Y');
// Calculer l'année précédente et l'année suivante
$previousYear2 = $currentYear - 2;
$previousYear = $currentYear - 1;
$nextYear = $currentYear + 1;
$nextYear2 = $currentYear + 2;
return $this->render('widget_simulateur_v2/simulateur-calcul-rtt.html.twig', [
'cabinet' => $accountingFirm,
'currentYear' => $currentYear,
'previousYear2' => $previousYear2,
'previousYear' => $previousYear,
'nextYear' => $nextYear,
'nextYear2' => $nextYear2,
]);
}
}