feat(Revendeur): Ajoute l'envoi du lien du revendeur par email et affiche la liste des revendeurs.

This commit is contained in:
Serreau Jovann
2025-09-24 14:44:09 +02:00
parent 636e273e14
commit ea0ce9808f
6 changed files with 115 additions and 1 deletions

View File

@@ -5,8 +5,10 @@ namespace App\Controller\Artemis\Revendeur;
use App\Entity\Revendeur;
use App\Form\Artemis\Revendeur\RevendeurType;
use App\Service\Revendeur\RevendeurService;
use App\Service\Revendeur\SendLinkEvent;
use Cocur\Slugify\Slugify;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
@@ -14,8 +16,16 @@ use Symfony\Component\Routing\Attribute\Route;
class RevendeurController extends AbstractController
{
#[Route(path: '/artemis/revendeur',name: 'artemis_revendeur')]
public function revendeur(Request $request,RevendeurService $revendeurService): Response
public function revendeur(Request $request,EventDispatcherInterface $eventDispatcher,RevendeurService $revendeurService): Response
{
if($request->query->has('sendLink')) {
$revendeur = $revendeurService->get($request->query->get('id'));
$dns = $revendeur->getCode() . "-demande.esy-web.fr";
$eventSendLink = new SendLinkEvent($revendeur);
$eventDispatcher->dispatch($eventSendLink);
$this->addFlash("success","Le lien à été envoyée");
return $this->redirectToRoute('artemis_revendeur');
}
return $this->render('artemis/revendeur/revendeur.twig', [
'revendeurLists' => $revendeurService->list(),

View File

@@ -2,6 +2,7 @@
namespace App\Service\Revendeur;
use App\Entity\Revendeur;
use App\Repository\RevendeurRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
@@ -49,4 +50,9 @@ class RevendeurService
]);
}
public function get($id) : Revendeur
{
return $this->revendeurRepository->find($id);
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Service\Revendeur;
use App\Service\Mailer\Mailer;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
#[AsEventListener(event: SendLinkEvent::class, method: 'onSendLinkEvent')]
class RevendeurSubcriber
{
public function __construct(private readonly Mailer $mailer)
{
}
public function onSendLinkEvent(SendLinkEvent $sendLinkEvent)
{
$revendeur = $sendLinkEvent->getRevendeur();
$this->mailer->send($revendeur->getEmail(),$revendeur->getRaisonSocial(),"[ESY-WEB] - Lien pour vos demande d'ouverture du site","mails/revendeur/link.twig",[
"url" => $revendeur->getCode()."-demande.esy-web.fr",
'revendeur' => $revendeur
]);
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Service\Revendeur;
use App\Entity\Revendeur;
class SendLinkEvent
{
private Revendeur $revendeur;
public function __construct(Revendeur $revendeur)
{
$this->revendeur = $revendeur;
}
/**
* @return Revendeur
*/
public function getRevendeur(): Revendeur
{
return $this->revendeur;
}
}

View File

@@ -9,4 +9,32 @@
</a>
</div>
</div>
<div class="mt-2 w-full mx-auto bg-gray-800 rounded-lg shadow-lg overflow-x-auto">
<table class="min-w-full divide-y divide-gray-700">
<thead class="bg-gray-700">
<tr>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider">Raison social</th>
<th scope="col" class="px-6 py-3 text-center text-xs font-medium uppercase tracking-wider">Nom prénom</th>
<th scope="col" class="px-6 py-3 text-center text-xs font-medium uppercase tracking-wider">Email téléphone</th>
<th scope="col" class="px-6 py-3 text-center text-xs font-medium uppercase tracking-wider">Actions</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-700">
{% for revendeur in revendeurLists %}
<tr class="hover:bg-gray-700 transition relative hover:bg-gray-700 transition">
<td class="px-6 py-4 whitespace-nowrap">{{ revendeur.raisonSocial }}</td>
<td class="px-6 py-4 text-center text-sm">{{ revendeur.name }} {{ revendeur.surname }}</td>
<td class="px-6 py-4 text-center text-sm">{{ revendeur.email }} {{ revendeur.phone }}</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-center">
<a href="{{ path('artemis_revendeur',{id:revendeur.id}) }}&sendLink=1" class="bg-blue-600 hover:bg-blue-700 text-white px-3 py-1 rounded mr-2">Modifier</a>
<a href="{{ path('artemis_revendeur',{id:revendeur.id}) }}&sendLink=1" class="bg-blue-600 hover:bg-blue-700 text-white px-3 py-1 rounded mr-2">Envoyée le lien du revendeur</a>
<a target="_blank" href="{{ path('artemis_revendeur',{id:revendeur.id}) }}?open=1" class="bg-blue-600 hover:bg-blue-700 text-white px-3 py-1 rounded mr-2">Voir le lien du revendeur</a>
<a href="{{ path('artemis_revendeur',{id:revendeur.id}) }}?delete=1" class="bg-red-600 hover:bg-red-700 text-white px-3 py-1 rounded mr-2">Supprimer</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}

View File

@@ -0,0 +1,22 @@
{% extends 'mails/base.twig' %}
{% block content %}
<mj-text>Bonjour {{ datas.revendeur.raisonSocial }},</mj-text>
<mj-text>Vous trouverez ci-joint le lien pour effectuer vos demandes "ouverture de site internet" et "tant que revendeur". </mj-text>
<mj-text>Pour réinitialiser votre mot de passe, veuillez cliquer sur le bouton ci-dessous. Ce lien est valable pour une durée limitée.</mj-text>
<mj-button href="{{ datas.url }}">
{{ datas.url }}
</mj-button>
<mj-text font-size="16px" color="#555555" line-height="1.5" padding-bottom="20px">
Nhésitez pas à nous contacter si vous avez des questions ou besoin dassistance.
</mj-text>
<mj-text font-size="16px" color="#333333" padding-top="30px">
Cordialement,<br/>
Léquipe Support
</mj-text>
{% endblock %}