src/Controller/DashboardController.php line 34
<?phpnamespace App\Controller;use App\Entity\Pack;use App\Repository\PackRepository;use App\Repository\PaiementRepository;use App\Services\InvestmentService;use App\Services\Sendmail;use App\Services\StatsService;use App\Service\NotificationService;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\Mime\Address;use Symfony\Component\Mime\Email;use Symfony\Component\Routing\Annotation\Route;class DashboardController extends AbstractController{public function __construct(private StatsService $statsService,private InvestmentService $investmentService,private Sendmail $sendmail,private PackRepository $packRepository,private PaiementRepository $paiementRepository,private NotificationService $notificationService) {}#[Route('/', name: 'app_acceuil')]public function acceuil(Request $request): Response{$stats = $this->statsService->getAdminStats();return $this->render('acceuil/index.html.twig', ['paramettre' => $stats['paramettre'],'promotion' => $this->packRepository->findBy(['promotion' => true]),'pack1' => $this->packRepository->findBy(['niveauPack' => 1]),'pack2' => $this->packRepository->findBy(['niveauPack' => 2])]);}#[Route('/space/dasbord', name: 'app_dashboard')]public function index(): Response{if (!$this->getUser()->isOneConnexion()) {return $this->redirectToRoute('app_completer_profile');}$data = $this->statsService->getDashboardData($this->getUser()->getId());return $this->render('dashboard/index.html.twig', ['achaters' => $data['packAcheter'],'promotion' => $data['promotion'],'solde' => $data['solde'],'nbrpackActive' => $data['nbrPackAcheterActive'],'nbrpackAcheter' => $data['nbrPackAcheter'],'paiement' => $data['paiement'],'personne' => $data['personne'],'paramettre' => $data['paramettre']]);}#[Route('/infor/pack/{id}', name: 'app_info_pack')]public function infoPack(Request $request,Pack $pack){$form = $this->createFormBuilder(null, ['action' => $this->generateUrl('app_investir',['id' => $pack->getId()]),'method' => 'POST',])->getForm();$paiement=$this->paiementRepository->findAll();$html= $this->renderView('dashboard/investirModal.html.twig',['pack'=>$pack,'paiement'=>$paiement,'form'=>$form]);return new JsonResponse(['html' => $html]);}#[Route('/investir/{id}', name: 'app_investir')]public function investir(Request $request, Pack $pack): Response{$nbrPack = (int) $request->request->get('nbrPack', 0);$paiement = $request->request->get('paiement');if ($nbrPack <= 0) {$this->addFlash('error', 'Le nombre de packs doit être supérieur à 0');return $this->redirectToRoute('app_liste_pack');}try {$this->investmentService->createPurchases($pack, $this->getUser(), $nbrPack);// Créer une notification pour l'utilisateurtry {$montantTotal = $this->investmentService->calculateTotalAmount($pack, $nbrPack);$this->notificationService->createPurchaseNotification($this->getUser(), $nbrPack, $montantTotal);} catch (\Exception $e) {error_log('Erreur création notification achat: ' . $e->getMessage());}return $this->redirectToRoute('app_paiement', ['pack' => $pack->getId(),'type' => $paiement,'nbr' => $nbrPack]);} catch (\InvalidArgumentException $e) {$this->addFlash('error', $e->getMessage());return $this->redirectToRoute('app_liste_pack');}}#[Route('/space/paiement/{pack}/{type}/{nbr}', name: 'app_paiement')]public function paiement(Request $request, Pack $pack, int $type, int $nbr): Response{$paiement = $this->paiementRepository->find($type);if (!$paiement) {throw $this->createNotFoundException('Méthode de paiement introuvable');}$data = $this->statsService->getDashboardData($this->getUser()->getId());$montant = $this->investmentService->calculateTotalAmount($pack, $nbr);try {$this->sendmail->sendEmailCommande($this->getUser()->getUserIdentifier(),$data['personne'],$pack,$nbr,$montant);} catch (\Exception $e) {// Log l'erreur mais continue l'affichage// En production, utiliser un logger}return $this->render('dashboard/paiement.html.twig', ['solde' => $data['solde'],'nbrpackActive' => $data['nbrPackAcheterActive'],'nbrpackAcheter' => $data['nbrPackAcheter'],'paiement' => $paiement,'nbr' => $nbr,'packcommander' => $pack,'montant' => $montant,'personne' => $data['personne'],'paramettre' => $data['paramettre']]);}#[Route('/space/liste/pack', name: 'app_liste_pack')]public function listepack(Request $request): Response{$data = $this->statsService->getDashboardData($this->getUser()->getId());return $this->render('dashboard/listePack.html.twig', ['solde' => $data['solde'],'nbrpackActive' => $data['nbrPackAcheterActive'],'nbrpackAcheter' => $data['nbrPackAcheter'],'pack1' => $data['pack1'],'pack2' => $data['pack2'],'personne' => $data['personne'],'paramettre' => $data['paramettre']]);}#[Route('/space/retrait', name: 'app_retrait')]public function retrait(Request $request): Response{$data = $this->statsService->getDashboardData($this->getUser()->getId());return $this->render('dashboard/retrait.html.twig', ['solde' => $data['solde'],'nbrpackActive' => $data['nbrPackAcheterActive'],'nbrpackAcheter' => $data['nbrPackAcheter'],'paiement' => $data['paiement'],'packcommander' => $this->packRepository->findAll(),'personne' => $data['personne'],'paramettre' => $data['paramettre']]);}#[Route('/space/confirmation', name: 'app_confirmation')]public function confirmation(Request $request, MailerInterface $mailer): Response{$data = $this->statsService->getDashboardData($this->getUser()->getId());$montant = $request->request->get('montant');$paiementId = $request->request->get('paiement');$paiementAdresse = $request->request->get('adresse');if (!$montant || !$paiementId || !$paiementAdresse) {$this->addFlash('error', 'Tous les champs sont obligatoires');return $this->redirectToRoute('app_retrait');}$paiementNom = $this->paiementRepository->find($paiementId);if (!$paiementNom) {throw $this->createNotFoundException('Méthode de paiement introuvable');}try {// Lire les valeurs depuis les variables d'environnement .env avec valeurs par défaut$fromEmail = $_ENV['MAILER_FROM_EMAIL'] ?? 'avaservice@allgroupe.com';$fromName = $_ENV['MAILER_FROM_NAME'] ?? 'AvaService';$toEmail = $_ENV['MAILER_TO_EMAIL'] ?? 'avaservice@allgroupe.com';$email = (new Email())->from(new Address($fromEmail, $fromName))->to($toEmail)->subject('Demande de retrait - ' . $data['personne']->getNom() . ' ' . $data['personne']->getPrenom())->html('<h3>Nouvelle demande de retrait</h3><p><strong>Nom:</strong> ' . htmlspecialchars($data['personne']->getNom()) . '</p><p><strong>Prénom:</strong> ' . htmlspecialchars($data['personne']->getPrenom()) . '</p><p><strong>Pays:</strong> ' . htmlspecialchars($data['personne']->getPays()) . '</p><p><strong>Téléphone:</strong> ' . htmlspecialchars($data['personne']->getTel()) . '</p><p><strong>Sexe:</strong> ' . htmlspecialchars($data['personne']->getSex()) . '</p><p><strong>Email:</strong> ' . htmlspecialchars($this->getUser()->getUserIdentifier()) . '</p><hr><p><strong>Montant:</strong> ' . htmlspecialchars($montant) . ' $</p><p><strong>Type de paiement:</strong> ' . htmlspecialchars($paiementNom->getNomPaiement()) . '</p><p><strong>Adresse de retrait:</strong> ' . htmlspecialchars($paiementAdresse) . '</p>');$mailer->send($email);$this->addFlash('success', 'Demande de retrait envoyée avec succès');} catch (\Exception $e) {$this->addFlash('error', 'Erreur lors de l\'envoi de l\'email');}return $this->render('dashboard/comfirmation.html.twig', ['solde' => $data['solde'],'nbrpackActive' => $data['nbrPackAcheterActive'],'nbrpackAcheter' => $data['nbrPackAcheter'],'paiement' => $data['paiement'],'packcommander' => $this->packRepository->findAll(),'personne' => $data['personne'],'paramettre' => $data['paramettre']]);}}