src/Controller/DevisController.php line 179
<?php
namespace App\Controller;
use App\Form\DevisType;
use App\Services\DbPage;
use Symfony\Component\Mime\Email;
use Doctrine\ORM\EntityManagerInterface;
use App\Controller\ConfigurateurController;
use App\Services\MailerHandler;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class DevisController extends ConfigurateurController
{
#[Route(
path: ['fr' => '/{_locale}/devis', 'en' => '/{_locale}/devis'],
name: 'devis',
methods: ['POST'],
requirements: [
'_locale' => 'en|fr',
],
priority: 2
)]
public function devis(Request $request, EntityManagerInterface $entityManager): Response
{
if ($this->isAjaxCall($request)) {
$content = $this->getJsonContent($request);
$session = $request->getSession();
$sessionDevis = $session->get('devis');
$devis = $content;
if (!$sessionDevis) {
$sessionDevis = [];
$bytesReference = openssl_random_pseudo_bytes(16);
$reference = md5(bin2hex($bytesReference));
} else {
$reference = $sessionDevis[0]['ref'];
}
$idDevis = null;
$devisWithFile = null;
$sessionDevisId = null;
if (count($sessionDevis) < 1) {
$idDevis = 1;
} else {
$idsDevis = array_column($sessionDevis, 'id_devis');
rsort($idsDevis);
$idDevis = $idsDevis[0] + 1;
foreach ($sessionDevis as $key => $value) {
if ($value['id_devis'] == $idsDevis[0]) {
if (array_key_exists('files', $value) && !array_key_exists('description', $value)) {
$devisWithFile = $sessionDevis[$key];
$sessionDevisId = $key;
break;
}
}
}
}
if ($devisWithFile) {
$devis['id_devis'] = $devisWithFile['id_devis'];
$devis['ref'] = $devisWithFile['ref'];
$devis['files'] = $devisWithFile['files'];
$sessionDevis[$sessionDevisId] = $devis;
} else {
$devis['id_devis'] = $idDevis;
$devis['ref'] = $reference;
$sessionDevis[] = $devis;
}
$session->set('devis', $sessionDevis);
return new JsonResponse($sessionDevis);
}
}
#[Route(
path: ['fr' => '/{_locale}/devis/remove', 'en' => '/{_locale}/devis/remove'],
name: 'devis_remove',
methods: ['POST'],
requirements: [
'_locale' => 'en|fr',
],
priority: 2
)]
public function devis_remove(Request $request, EntityManagerInterface $entityManager): Response
{
if ($this->isAjaxCall($request)) {
$content = $this->getJsonContent($request);
$session = $request->getSession();
$sessionDevis = $session->get('devis');
foreach ($sessionDevis as $key => $value) {
if ($value['id_devis'] == $content['id']) {
if (array_key_exists('files', $value)) {
foreach ($value['files'] as $file) {
$filePath = $this->getParameter('kernel.project_dir');
$chemin = $filePath . '/public/upload/' . $file['filename'];
if (file_exists($chemin)) {
unlink($chemin);
}
}
}
unset($sessionDevis[$key]);
break;
}
}
$session->set('devis', $sessionDevis);
return new JsonResponse($sessionDevis);
}
}
#[Route(
path: ['fr' => '/{_locale}/devis/update', 'en' => '/{_locale}/devis/update'],
name: 'devis_update',
methods: ['POST'],
requirements: [
'_locale' => 'en|fr',
],
priority: 2
)]
public function devis_update(Request $request, EntityManagerInterface $entityManager): Response
{
if ($this->isAjaxCall($request)) {
$content = $this->getJsonContent($request);
$session = $request->getSession();
$sessionDevis = $session->get('devis');
foreach ($sessionDevis as $key => $value) {
if ($value['id_devis'] == $content['id']) {
$sessionDevis[$key]['qty'] = $content['qty'];
break;
}
}
$session->set('devis', $sessionDevis);
return new JsonResponse($sessionDevis);
}
}
#[Route(
path: ['fr' => '/{_locale}/devis/form', 'en' => '/{_locale}/quotation/form'],
name: 'devis_form',
methods: ['GET', 'POST'],
requirements: [
'_locale' => 'en|fr',
],
priority: 2
)]
public function devis_form(Request $request, MailerHandler $mailer, UrlGeneratorInterface $router): Response
{
$form = $this->createForm(DevisType::class);
$form->handleRequest($request);
$data = [];
$data['error']['societe'] = false;
$data['error']['email'] = false;
$data['error']['nom'] = false;
$data['error']['langue'] = false;
$error = false;
$session = $request->getSession();
$sessionDevis = $session->get('devis');
if ($form->isSubmitted() && $form->isValid()) {
$values = $form->getData();
if (trim($values['societe']) == '') {
$error = true;
$data['error']['societe'] = true;
}
if (trim($values['email']) == '') {
$error = true;
$data['error']['email'] = true;
}
if (trim($values['nom']) == '') {
$error = true;
$data['error']['nom'] = true;
}
if (trim($values['langue']) == '') {
$error = true;
$data['error']['langue'] = true;
}
if (!$error) {
$data['success'] = true;
// $mailer->send(['mb@adevo.be'], 'marinebeltus@gmail.com', 'exemple devis', 'devis/mails/new_quotation_client.html.twig', [
// 'logo' => 'logo',
// 'customer_name' => 'Beltus Marine',
// 'id_quot' => '21',
// 'shop_name' => "Sensy",
// 'customerquotations_URL' => 'url'
// ]);
// $mailer->send(['mb@adevo.be'], 'marinebeltus@gmail.com', 'exemple devis', 'devis/mails/new_quotation.html.twig', [
// 'logo' => 'logo',
// 'customer_details' => 'Beltus Marine',
// 'quotation_ID' => '21',
// 'shop_name' => "Sensy"
// ]);
} else {
$data['success'] = false;
}
$session->set('devis', []);
}
if ($request->getLocale() == 'fr') {
$link = '/en/quotation/form';
$breadcrumb = array(['name' => 'Devis', 'link_rewrite' => '/fr/devis/form']);
} else {
$link = '/fr/devis/form';
$breadcrumb = array(['name' => 'Quotation', 'link_rewrite' => '/en/quotation/form']);
}
return $this->render('devis/devis.form.html.twig', ['products' => $sessionDevis, 'link' => $link, 'data' => $data, 'formData' => $form->createView(), 'breadcrumb' => $breadcrumb]);
}
#[Route(
path: ['fr' => '/{_locale}/devis/remove-file', 'en' => '/{_locale}/devis/remove-file'],
name: 'devis_remove_file',
methods: ['POST'],
requirements: [
'_locale' => 'en|fr',
],
priority: 2
)]
public function devis_removeFile(Request $request, EntityManagerInterface $entityManager): Response
{
if ($this->isAjaxCall($request)) {
$content = $this->getJsonContent($request);
$idFile = $content['idFile'];
$idDevis = $content['idDevis'];
$session = $request->getSession();
$sessionDevis = $session->get('devis');
foreach ($sessionDevis as $key => $value) {
if ($value['id_devis'] == $idDevis) {
foreach ($value['files'] as $keyFile => $file) {
if ($file['id'] == $idFile) {
$filePath = $this->getParameter('kernel.project_dir');
$chemin = $filePath . '/public/upload/' . $file['filename'];
if (file_exists($chemin)) {
unlink($chemin);
}
unset($value['files'][$keyFile]);
$reasort = array_values($value['files']);
$value['files'] = $reasort;
$sessionDevis[$key] = $value;
break;
}
}
}
}
$session->set('devis', $sessionDevis);
return new JsonResponse($sessionDevis);
}
}
}