<?php
namespace App\Controller;
use App\Entity\FournitureItem;
use App\Service\BandeauService;
use App\Entity\ConsigneEmballage;
use App\Entity\FournitureAutonome;
use App\Entity\FournitureCategorie;
use Symfony\Component\Mime\Address;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
class FournitureController extends AbstractController
{
private $fournitureCategorieRepository;
private $fournitureItemRepository;
private $fournitureAutonomeRepository;
private $consigneEmballageRepository;
private $mailer;
private $bandeauService;
public function __construct(EntityManagerInterface $entityManager, MailerInterface $mailer, BandeauService $bandeauService)
{
$this->fournitureCategorieRepository = $entityManager->getRepository(FournitureCategorie::class);
$this->fournitureItemRepository = $entityManager->getRepository(FournitureItem::class);
$this->fournitureAutonomeRepository = $entityManager->getRepository(FournitureAutonome::class);
$this->consigneEmballageRepository = $entityManager->getRepository(ConsigneEmballage::class);
$this->mailer = $mailer;
$this->bandeauService = $bandeauService;
}
/**
* @Route("/fourniture", name="app_fourniture")
*/
public function index(): Response
{
$user = $this->getUser();
// Vérifier si l'utilisateur est authentifié
if (!$user) {
return $this->redirectToRoute('login');
}
if ($this->isGranted('ROLE_ADMIN')) {
return $this->redirectToRoute('app_admin_index');
}
// Récupération des données
$fournitureCategories = $this->fournitureCategorieRepository->findAll();
$fournitureAutonomes = $this->fournitureAutonomeRepository->findAll();
$consigneEmballages = $this->consigneEmballageRepository->findAll();
return $this->render('fourniture/index.html.twig', [
'controller_name' => 'FournitureController',
'user' => $user,
'fournitureCategories' => $fournitureCategories,
'fournitureAutonomes' => $fournitureAutonomes,
'consigneEmballages' => $consigneEmballages,
'bandeau' => $this->bandeauService->displayPopup()
]);
}
/**
* @Route("/fourniture/handle", name="fourniture_handle_form", methods={"POST"})
*/
public function handleForm(Request $request): Response
{
$user = $this->getUser();
// Vérifier si l'utilisateur est authentifié
if (!$user) {
return $this->redirectToRoute('login');
}
// Récupérer les données du formulaire
$fournitures = $request->request->get('fournitureItem'); // Récupère toutes les fournitures en un tableau
$fournituresAutonomes = $request->request->get('fournitureAutonome'); // Récupère toutes les fournitures autonomes en un tableau
// Tableau pour affichage email
$aEmailFournitures = array();
// Tableau pour listing des frais de livraison
$aFranco = array();
// Variable pour le montant total avec frais de livraison
$montantTotal=0;
// Variable pour accumuler la quantité totale
$totalQuantite = 0;
// On boucle sur les fournitures catégories
foreach ($fournitures as $keyFournitureCategorie => $valueFournitureCategorie) {
// On récupère en bdd la catégorie
$valueFournitureCategorieRepo = $this->fournitureCategorieRepository->findOneById($keyFournitureCategorie);
$franco = $valueFournitureCategorieRepo->getMontantFranco();
$fraisLivraison = $valueFournitureCategorieRepo->getFraisLivraison();
$marque = $valueFournitureCategorieRepo->getMarque();
$montantTotalCategorie=0;
foreach ($valueFournitureCategorie as $keyFournitureItem => $valueFournitureItem) {
$valueFournitureItem = intval($valueFournitureItem);
// Uniquement si la quantité est supérieure à 0
if($valueFournitureItem > 0 ){
// On incrémente la quantité totale
$totalQuantite += $valueFournitureItem;
// On récupère en bdd la fournitureItem
$valueFournitureItemRepo = $this->fournitureItemRepository->findOneById($keyFournitureItem);
// On incrémente le montant total de la catégorie pour vérifier ensuite le franco à la fin de la catégorie
$montantTotalCategorie += $valueFournitureItemRepo->getMontant() * $valueFournitureItem;
// On incrémente le montant total
$montantTotal +=$valueFournitureItemRepo->getMontant() * $valueFournitureItem;
$aEmailFournitures[] = $marque." : ".$valueFournitureItemRepo->getTitre()." - ".$valueFournitureItemRepo->getSousTitre()." - Quantité : ". $valueFournitureItem;
}
}
if($franco != null){
if($montantTotalCategorie < $franco && $montantTotalCategorie>0){
$aFranco[]= "Frais de livraison de ".$fraisLivraison." € pour : ".$marque;
$montantTotal += $fraisLivraison;
}
}
}
foreach ($fournituresAutonomes as $keyFournitureAutonome => $valueFournitureAutonome) {
$valueFournitureAutonome = intval($valueFournitureAutonome);
if($valueFournitureAutonome > 0){
// On incrémente la quantité totale
$totalQuantite += $valueFournitureAutonome;
// On récupère en bdd la fournitureAutonome
$valueFournitureAutonomeRepo = $this->fournitureAutonomeRepository->findOneById($keyFournitureAutonome);
$aEmailFournitures[] = $valueFournitureAutonomeRepo->getTitre()." - Quantité : ". $valueFournitureAutonome;
if($valueFournitureAutonomeRepo->getMontant() != null && $valueFournitureAutonomeRepo->getMontant()>0){
$montantTotal +=$valueFournitureAutonomeRepo->getMontant() * $valueFournitureAutonome;
}
}
}
if($totalQuantite > 0) {
$this->sendEmailCommandeFourniture($aEmailFournitures, $aFranco, $montantTotal, $user->getClient());
$this->addFlash("success", "Commande fourniture transmise avec succès");
}else{
$this->addFlash("error", "Commande fourniture vide");
}
return $this->redirectToRoute('app_fourniture');
}
private function sendEmailCommandeFourniture($aEmailFournitures, $aFranco, $montantTotal, $client)
{
$email = (new TemplatedEmail())
->from('no-reply@mbe.vent-en-poupe.fr')
->to(new Address('mbe011@mbefrance.fr'))
// ->to(new Address('bpouverel@mbefrance.fr'))
// ->bcc(new Address('linnea.cederblad@mbebordeaux.fr'))
->bcc(new Address('support@bleu-digital.fr'))
->subject('MBE - Commande fourniture')
->htmlTemplate('emails/commandeFourniture.html.twig') // Assurez-vous d'avoir ce template Twig
->context([
'aEmailFournitures' => $aEmailFournitures,
'aFranco' => $aFranco,
'montantTotal' => $montantTotal,
'client'=> $client
]);
try {
$this->mailer->send($email);
// dump("E-mail envoyé");
// die;
// echo "E-mail envoyé avec succès.";
} catch (TransportExceptionInterface $e) {
// dump("E-mail pas envoyé");
// die;
// echo "L'e-mail n'a pas pu être envoyé. Erreur: {$e->getMessage()}";
}
}
}