Files
ludikevent_crm/src/Controller/Dashboard/DevisController.php

79 lines
3.3 KiB
PHP
Raw Normal View History

<?php
namespace App\Controller\Dashboard;
use App\Entity\Devis;
2026-01-17 22:29:04 +01:00
use App\Entity\DevisLine;
use App\Form\NewDevisType;
use App\Logger\AppLogger;
use App\Repository\AccountRepository;
2026-01-17 22:29:04 +01:00
use App\Repository\CustomerRepository;
use App\Repository\DevisRepository;
use App\Repository\ProductRepository;
2026-01-17 22:29:04 +01:00
use App\Service\Pdf\DevisPdfService;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Bundle\PaginatorBundle\KnpPaginatorBundle;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
2026-01-17 22:29:04 +01:00
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Attribute\Route;
class DevisController extends AbstractController
{
/**
* Liste des administrateurs
*/
#[Route(path: '/crm/devis', name: 'app_crm_devis', options: ['sitemap' => false], methods: ['GET'])]
2026-01-17 22:29:04 +01:00
public function devis(KernelInterface $kernel,DevisRepository $devisRepository,AppLogger $appLogger,PaginatorInterface $paginator,Request $request): Response
{
$d = $devisRepository->findAll()[0];
$f = new DevisPdfService($kernel,$d);
$f->generate();
$f->Output('I');
$appLogger->record('VIEW', 'Consultation de la liste des devis');
return $this->render('dashboard/devis/list.twig',[
'quotes' => $paginator->paginate($devisRepository->findBy([],['createA'=>'asc']),$request->get('page', 1),20),
]);
}
2026-01-17 22:29:04 +01:00
#[Route(path: '/crm/devis/add', name: 'app_crm_devis_add', options: ['sitemap' => false], methods: ['GET','POST'])]
public function devisAdd(ProductRepository $productRepository,EntityManagerInterface $entityManager,CustomerRepository $customerRepository,DevisRepository $devisRepository, AppLogger $appLogger,Request $request): Response
{
$devisNumber ="DEVIS-".sprintf('%05d',$devisRepository->count()+1);
$appLogger->record('VIEW', 'Consultation de la création d\'un devis');
$devis = new Devis();
$devis->setNum($devisNumber);
$devis->setState("draft");
$devis->setCreateA(new \DateTimeImmutable());
$devis->setUpdateAt(new \DateTimeImmutable());
$form = $this->createForm(NewDevisType::class,$devis);
2026-01-17 22:29:04 +01:00
if($request->isMethod('POST')){
$devis->setCustomer($customerRepository->find($_POST['new_devis']['customer']));
foreach ($_POST['lines'] as $cd=>$line) {
$rLine = new DevisLine();
$rLine->setDevi($devis);
$rLine->setPos($cd);
$rLine->setProduct($productRepository->find($line['product_id']));
$rLine->setDay($line['days']);
$rLine->setPriceHt(floatval($line['price_ht']));
$rLine->setPriceHtSup(floatval($line['price_sup_ht']));
$rLine->setStartAt(\DateTimeImmutable::createFromFormat('Y-m-d',$line['date_start']));
$rLine->setEndAt(\DateTimeImmutable::createFromFormat('Y-m-d',$line['date_end']));
2026-01-17 22:29:04 +01:00
$entityManager->persist($rLine);
}
$entityManager->persist($devis);
$entityManager->flush();
}
return $this->render('dashboard/devis/add.twig',[
'form' => $form->createView(),
]);
}
}