feat(DevisController): Améliore la gestion et l'édition des devis

Corrige des bugs et améliore la création/édition des devis, incluant options et lignes, et la gestion des signatures.
```
This commit is contained in:
Serreau Jovann
2026-01-29 10:06:39 +01:00
parent ea54f86fe8
commit 9a4d7b6ae1
14 changed files with 182 additions and 92 deletions

View File

@@ -6,6 +6,7 @@ use App\Entity\CustomerAddress;
use App\Entity\Devis;
use App\Entity\DevisLine;
use App\Entity\DevisOptions;
use App\Entity\Product;
use App\Event\Signature\DevisSend;
use App\Form\NewDevisType;
use App\Logger\AppLogger;
@@ -46,16 +47,17 @@ class DevisController extends AbstractController
PaginatorInterface $paginator,
Request $request,
KernelInterface $kernel,
): Response
{
// Gestion du renvoi de la signature
if ($request->query->has('resend')) {
$quoteId = $request->query->get('resend');
$quote = $devisRepository->find($quoteId);
if ($quote instanceof Devis) {
$quote->setState("created_waitsign");
$entityManager->persist($quote);
$entityManager->flush();
// Déclenchement de l'événement de renvoi
$event = new DevisSend($quote);
$eventDispatcher->dispatch($event);
@@ -145,7 +147,7 @@ class DevisController extends AbstractController
$rLine = new DevisLine();
$rLine->setDevi($devis);
$rLine->setPos($cd);
$rLine->setProduct($productRepository->find($line['product_id']));
$rLine->setProduct($line['product']);
$rLine->setDay($day);
$rLine->setPriceHt(floatval($line['price_ht']));
$rLine->setPriceHtSup(floatval($line['price_sup_ht']));
@@ -154,14 +156,14 @@ class DevisController extends AbstractController
foreach ($_POST['options'] as $line) {
$rLineOptions = new DevisOptions();
$rLineOptions->setDevis($devis);
$rLineOptions->setOption($optionsRepository->find($line['product_id']));
$rLineOptions->setOption($line['product']);
$rLineOptions->setPriceHt(floatval($line['price_ht']));
$entityManager->persist($rLineOptions);
}
$entityManager->persist($devis);
$entityManager->flush();
$docusealService = new DevisPdfService($kernel, $devis, true);
$docusealService = new DevisPdfService($kernel, $devis, $entityManager->getRepository(Product::class),true);
$contentDocuseal = $docusealService->generate();
@@ -172,7 +174,7 @@ class DevisController extends AbstractController
$devis->setDevisDocuSealFile($fileDocuseal);
$devisService = new DevisPdfService($kernel, $devis, false);
$devisService = new DevisPdfService($kernel, $devis, $entityManager->getRepository(Product::class), false);
$contentDevis = $devisService->generate();
$tmpPathDevis = sys_get_temp_dir() . '/devis_' . uniqid() . '.pdf';
@@ -182,13 +184,10 @@ class DevisController extends AbstractController
$devis->setDevisFile($fileDevis);
$devis->setState("created_waitsign");
$devis->setState("wait-send");
$devis->setUpdateAt(new \DateTimeImmutable());
$entityManager->flush();
$client->createSubmissionDevis($devis);
$event = new DevisSend($devis);
$eventDispatcher->dispatch($event);
$this->addFlash('success', sprintf('Le devis %s a été crée.', $devis->getNum()));
return $this->redirectToRoute('app_crm_devis');
@@ -206,6 +205,7 @@ class DevisController extends AbstractController
'options' => [
[
'product' => '',
'details' => '',
'price_ht' => '',
]
]
@@ -223,27 +223,39 @@ class DevisController extends AbstractController
$devis->setBillAddress($customerAddress->find($_POST['devis']['bill_address']));
$devis->setAddressShip($customerAddress->find($_POST['devis']['ship_address']));
$devis->setCustomer($customerRepository->find($_POST['new_devis']['customer']));
$interval = $devis->getStartAt()->diff($devis->getEndAt());
$day = $interval->days;
foreach ($_POST['lines'] as $cd => $line) {
$rLine = $devisLineRepository->find($line['id']);
$rLine->setDevi($devis);
$rLine->setPos($cd);
$rLine->setProduct($productRepository->find($line['product_id']));
$rLine->setDay($line['days']);
if($line['id'] != "") {
$rLine = $devisLineRepository->find($line['id']);
} else {
$rLine = new DevisLine();
$rLine->setDevi($devis);
$rLine->setPos($cd);
}
$rLine->setDay($day);
$rLine->setProduct($line['product']);
$rLine->setPriceHt(floatval($line['price_ht']));
$rLine->setPriceHtSup(floatval($line['price_sup_ht']));
$entityManager->persist($rLine);
}
foreach ($_POST['options'] as $line) {
$rLineOptions = $devisOptionsRepository->find($line['id']);
$rLineOptions->setOption($optionsRepository->find($line['product_id']));
if($line['id'] != "") {
$rLineOptions = $devisOptionsRepository->find($line['id']);
} else {
$rLineOptions = new DevisOptions();
$rLineOptions->setDevis($devis);
}
$rLineOptions->setOption($line['product']);
$rLineOptions->setDetails($line['details']);
$rLineOptions->setPriceHt(floatval($line['price_ht']));
$entityManager->persist($rLineOptions);
}
$entityManager->persist($devis);
$entityManager->flush();
$docusealService = new DevisPdfService($kernel, $devis, true);
$docusealService = new DevisPdfService($kernel, $devis, $entityManager->getRepository(Product::class),true);
$contentDocuseal = $docusealService->generate();
@@ -254,7 +266,7 @@ class DevisController extends AbstractController
$devis->setDevisDocuSealFile($fileDocuseal);
$devisService = new DevisPdfService($kernel, $devis, false);
$devisService = new DevisPdfService($kernel, $devis, $entityManager->getRepository(Product::class),false);
$contentDevis = $devisService->generate();
$tmpPathDevis = sys_get_temp_dir() . '/devis_' . uniqid() . '.pdf';
@@ -264,11 +276,10 @@ class DevisController extends AbstractController
$devis->setDevisFile($fileDevis);
$devis->setUpdateAt(new \DateTimeImmutable());
$devis->setState("wait-send");
$entityManager->flush();
$client->createSubmissionDevis($devis);
$event = new DevisSend($devis);
$eventDispatcher->dispatch($event);
$this->addFlash('success', sprintf('Le devis %s a été modifiée.', $devis->getNum()));
return $this->redirectToRoute('app_crm_devis');
@@ -277,7 +288,7 @@ class DevisController extends AbstractController
$lines =[
[
'id' => '',
'product_id' => '',
'product' => '',
'days'=>'',
'price_ht' => '',
'price_sup_ht' =>''
@@ -286,7 +297,8 @@ class DevisController extends AbstractController
$options = [
[
'id' => '',
'product_id' => '',
'product' => '',
'details' => '',
'price_ht' => '',
]
];
@@ -295,7 +307,7 @@ class DevisController extends AbstractController
foreach ($devis->getDevisLines() as $key => $line) {
$lines[$key] = [
'id' => $line->getId(),
'product_id' => $line->getProduct()->getId(),
'product' => $line->getProduct(),
'days' => $line->getDay(),
'price_ht' => $line->getPriceHt(),
'price_sup_ht' => $line->getPriceHtSup()
@@ -304,7 +316,8 @@ class DevisController extends AbstractController
foreach ($devis->getDevisOptions() as $key => $line) {
$options[$key] = [
'id' => $line->getId(),
'product_id' => $line->getOption()->getId(),
'details' => $line->getDetails(),
'product' => $line->getOption(),
'price_ht' => $line->getPriceHt(),
];
}