<?php
namespace App\Controller;
use App\Entity\Ariane\Cgv;
use App\Entity\Ariane\Contact;
use App\Entity\Ariane\MentionsLegales;
use App\Entity\Hermes\Client;
use App\Entity\Hermes\ClientArticleIndispensable;
use App\Entity\Hermes\GuideDesEncres;
use App\Entity\Hermes\Promotion;
use App\Entity\Hermes\UserCommercial;
use App\Form\ContactType;
use App\Repository\Ariane\CarrouselRepository;
use App\Repository\Ariane\CgvRepository;
use App\Repository\Ariane\ContactObjetRepository;
use App\Repository\Ariane\MentionsLegalesRepository;
use App\Repository\ArticleRepository;
use App\Repository\PromotionRepository;
use App\Repository\UserClientRepository;
use App\Services\GetFiltresServices;
use App\Services\Mail\SendEmailServices;
use App\Services\Trie\TrieServices;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
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\Routing\Annotation\Route;
class PageController extends AbstractController
{
public function __construct(
private ManagerRegistry $doctrine,
private ArticleRepository $articleRepository,
private TrieServices $trieServices,
private GetFiltresServices $getFiltresServices,
private UserClientRepository $userClientRepository,
private CarrouselRepository $carrouselRepository,
private SendEmailServices $sendEmailServices
) {
}
#[Route('/client', name: 'app_accueil_index')]
public function index(): Response
{
$email = $this->getUser()->getUserIdentifier();
$user = $this->userClientRepository->findOneBy(['email' => $email]);
$client = $this->doctrine->getRepository(Client::class, 'hermes')->findOneBy(['numero' => $user->getNumero()]);
$carrousel = $this->carrouselRepository->findAll();
$promotions = $this->articleRepository->findByCheckRestrictionVenteFilters($client, null, 4);
$promotions = $this->trieServices->sortByIsPrioritaire($promotions);
$nouveautes = $this->articleRepository->findByCheckRestrictionVenteFilters($client, null, 1);
$nouveautes = $this->trieServices->sortByIsPrioritaire($nouveautes);
$guideDesEncres = $this->doctrine->getRepository(GuideDesEncres::class, 'hermes')->findAll();
$indispensables = null;
if (null !== $client) {
/* @phpstan-ignore-next-line */
$indispensables = $this->doctrine->getRepository(ClientArticleIndispensable::class, 'hermes')->findIndispensables($client->getId());
}
$articles = $this->articleRepository->findByCheckRestrictionVenteFilters($client);
return $this->render('page/index.html.twig', [
'client' => $client,
'promotions' => $promotions,
'nouveautes' => $nouveautes,
'indispensables' => $indispensables,
'articles' => $articles,
'guideDesEncres' => array_pop($guideDesEncres),
'carrousel' => $carrousel[0],
]);
}
#[Route('/client/promotions', name: 'app_page_promotions')]
public function promotions(Request $request): Response
{
$email = $this->getUser()->getUserIdentifier();
$user = $this->userClientRepository->findOneBy(['email' => $email]);
$client = $this->doctrine->getRepository(Client::class, 'hermes')->findOneBy(['numero' => $user->getNumero()]);
$articlesSeuls = $this->articleRepository->findByCheckRestrictionVenteFilters($client, null, 4, null, null, null, null);
$articlesBoxs = $this->articleRepository->findByCheckRestrictionVenteFilters($client, null, 8, null, null, null, null);
$articlesSeuls = $this->trieServices->sortByIsPrioritaire($articlesSeuls);
$articlesBoxs = $this->trieServices->sortByIsPrioritaire($articlesBoxs);
$guideDesEncres = $this->doctrine->getRepository(GuideDesEncres::class, 'hermes')->findAll();
$seulAffiches = 4;
$seulNum = 4;
if (
(null !== $request->get('voirplus') && 'true' === $request->get('voirplus'))
&& null !== $request->get('affiches')
) {
$seulNum = $request->get('newSeulNum');
$seulAffiches = $request->get('newSeulNum') + $request->get('affiches');
} elseif (
null !== $request->get('newSeulNum')
&& null === $request->get('voirplus')
) {
$seulNum = $request->get('newSeulNum');
$seulAffiches = $seulNum;
} else {
$seulNum = 4;
}
$boxAffiches = 4;
$boxNum = 4;
if (
(null !== $request->get('voirplus') && 'true' === $request->get('voirplus'))
&& null !== $request->get('affiches')
) {
$boxNum = $request->get('newBoxNum');
$boxAffiches = $request->get('newBoxNum') + $request->get('affiches');
} elseif (
null !== $request->get('newBoxNum')
&& null === $request->get('voirplus')
) {
$boxNum = $request->get('newBoxNum');
$boxAffiches = $boxNum;
} else {
$boxNum = 4;
}
return $this->render('page/promotions.html.twig', [
'client' => $client,
'articlesSeuls' => $articlesSeuls,
'articlesBoxs' => $articlesBoxs,
'guideDesEncres' => array_pop($guideDesEncres),
'boxNum' => $boxNum,
'seulNum' => $seulNum,
'seulAffiches' => $seulAffiches,
'boxAffiches' => $boxAffiches,
]);
}
#[Route('/client/indispensables', name: 'app_page_indispensables')]
public function indispensable(Request $request): Response
{
$email = $this->getUser()->getUserIdentifier();
$user = $this->userClientRepository->findOneBy(['email' => $email]);
$client = $this->doctrine->getRepository(Client::class, 'hermes')->findOneBy(['numero' => $user->getNumero()]);
$indispensables = null;
if (null !== $client) {
/* @phpstan-ignore-next-line */
$indispensables = $this->doctrine->getRepository(ClientArticleIndispensable::class, 'hermes')->findIndispensables($client->getId());
}
$guideDesEncres = $this->doctrine->getRepository(GuideDesEncres::class, 'hermes')->findAll();
$affiches = 4;
$searchNum = 4;
if (
(null !== $request->get('voirplus') && true === $request->get('voirplus'))
&& null !== $request->get('affiches')
) {
$searchNum = $request->get('newSearchNum');
$affiches = $request->get('newSearchNum') + $request->get('affiches');
} elseif (
null !== $request->get('newSearchNum')
&& null === $request->get('voirplus')
) {
$searchNum = $request->get('newSearchNum');
$affiches = $searchNum;
} else {
$searchNum = 4;
}
return $this->render('page/indispensables.html.twig', [
'indispensables' => $indispensables,
'searchNum' => $searchNum,
'affiches' => $affiches,
'guideDesEncres' => array_pop($guideDesEncres),
]);
}
#[Route('/client/destockage', name: 'app_page_bons_plans_web')]
public function bonPlanWeb(Request $request): Response
{
$email = $this->getUser()->getUserIdentifier();
$user = $this->userClientRepository->findOneBy(['email' => $email]);
$affiches = 4;
$searchNum = 4;
if (
(null !== $request->get('voirplus') && 'true' === $request->get('voirplus'))
&& null !== $request->get('affiches')
) {
$searchNum = $request->get('newSearchNum');
$affiches = $request->get('newSearchNum') + $request->get('affiches');
} elseif (
null !== $request->get('newSearchNum')
&& null === $request->get('voirplus')
) {
$searchNum = $request->get('newSearchNum');
$affiches = $searchNum;
} else {
$searchNum = 4;
}
$client = $this->doctrine->getRepository(Client::class, 'hermes')->findOneBy(['numero' => $user->getNumero()]);
$bonsPlansWeb = $this->articleRepository->findByCheckRestrictionVenteFilters($client, true, null, null, null, null, null);
$guideDesEncres = $this->doctrine->getRepository(GuideDesEncres::class, 'hermes')->findAll();
return $this->render('page/bons_plans_web.html.twig', [
'client' => $client,
'bonsPlansWeb' => $bonsPlansWeb,
'guideDesEncres' => array_pop($guideDesEncres),
'searchNum' => $searchNum,
'affiches' => $affiches,
]);
}
#[Route('/client/recherche', name: 'app_page_recherche')]
public function recherche(
Request $request,
ArticleRepository $articleRepository,
PromotionRepository $promotionRepository
): Response {
$allRequest = $request->query->all();
switch ($request->get('categorie')) {
case 1:
$allRequest['categorie'] = 'ENCRE COMPATIBLE';
break;
case 2:
$allRequest['categorie'] = 'ACCESSOIRE';
break;
case 3:
$allRequest['categorie'] = 'ENCRE OEM';
break;
}
// Affichage pour les promotions
$promotions = null;
if (null !== $request->get('search') && '' !== $request->get('search')) {
$promotions = $promotionRepository->findPromotion($request->get('search'));
}
if (null !== $promotions && \count($promotions) > 0) {
return $this->render('page/recherche_promotion.html.twig', [
'search' => $request->get('search'),
'promotions' => $promotions,
'types' => Promotion::$typeList,
]);
}
$affiches = 4;
$searchNum = 4;
if (
(null !== $request->get('voirplus') && 'true' === $request->get('voirplus'))
&& null !== $request->get('affiches')
) {
$searchNum = $request->get('newSearchNum');
$affiches = $request->get('newSearchNum') + $request->get('affiches');
} elseif (
null !== $request->get('newSearchNum')
&& null === $request->get('voirplus')
) {
$searchNum = $request->get('newSearchNum');
$affiches = $searchNum;
} else {
$searchNum = 4;
}
$isPageNouveaute = false;
if (\is_array($request->get('statut')) && \in_array('NEW', $request->get('statut'), true)) {
$isPageNouveaute = true;
}
$email = $this->getUser()->getUserIdentifier();
$user = $this->userClientRepository->findOneBy(['email' => $email]);
$client = $this->doctrine->getRepository(Client::class, 'hermes')->findOneBy(['numero' => $user->getNumero()]);
if (true === $isPageNouveaute) {
$articles = $articleRepository->findByQueryRestrictionNouveautes($client, $allRequest, $request->get('sort'), $request->get('prix'));
} else {
$articles = $articleRepository->findByQueryRestriction($client, $allRequest, $request->get('sort'), $request->get('prix'));
}
$articlesMax = \count($articles);
if (0 === \count($articles)) {
$allRequest['search'] = '';
$filtres = $this->getFiltresServices->getFiltres(
$articleRepository->findByQueryRestriction($client, $allRequest, $request->get('sort'), $request->get('prix'))
);
} else {
$filtres = $this->getFiltresServices->getFiltres($articles);
}
$articles = \array_slice($articles, 0, $affiches);
$guideDesEncres = $this->doctrine->getRepository(GuideDesEncres::class, 'hermes')->findAll();
$querys = $this->getFiltresServices->sortQuerys($allRequest);
return $this->render('page/recherche.html.twig', [
'search' => $request->get('search'),
'searchNum' => $searchNum,
'affiches' => $affiches,
'querys' => $querys,
'articlesMax' => $articlesMax,
'articles' => $articles,
'filtres' => $filtres,
'guideDesEncres' => array_pop($guideDesEncres),
'client' => $client,
]);
}
#[Route('/client/recherche/ajax', name: 'app_page_recherche_ajax')]
public function rechercheAjax(): JsonResponse
{
return new JsonResponse([
'success' => true,
]);
}
#[Route('/contact', name: 'app_page_contact')]
public function contact(Request $request, EntityManagerInterface $entityManager, ContactObjetRepository $contactObjetRepository, MailerInterface $mailer): Response
{
$user = null;
if (null !== $this->getUser()) {
$email = $this->getUser()->getUserIdentifier();
$user = $this->userClientRepository->findOneBy(['email' => $email]);
}
$objets = $contactObjetRepository->findAll();
$contact = new Contact();
$form = $this->createForm(ContactType::class, $contact);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$commercial = null;
if (null !== $user && $user->getCompte() && $user->getCompte()->isCommercialAccessToMailContact()) {
$client = $this->doctrine->getRepository(Client::class, 'hermes')->findOneBy(['numero' => $user->getCompte()->getSuperClient()->getNumero()]);
$commercial = $this->doctrine->getRepository(UserCommercial::class, 'hermes')->find(['id' => $client->getCommercial()]);
}
$contact = $form->getData();
$contact->setCreatedAt(new \DateTime());
$entityManager->persist($contact);
$entityManager->flush();
$this->sendEmailServices->sendContactEmail($contact, $commercial, $user);
$this->addFlash('success', 'Votre message a bien été envoyé.');
$contact = new Contact();
$form = $this->createForm(ContactType::class, $contact);
}
return $this->render('page/contact.html.twig', [
'form' => $form->createView(),
'objets' => $objets,
]);
}
#[Route('/mentions-legales', name: 'app_page_mentions_legales')]
public function mentionsLegales(MentionsLegalesRepository $mentionsLegalesRepository): Response
{
$mentionsLegales = $mentionsLegalesRepository->findOneBy(['id' => 1]);
if (!$mentionsLegales) {
$mentionsLegales = new MentionsLegales();
$mentionsLegales->setContenu("Les mentions legales sont momentanément indisponible.
Merci de contacter directement SRDI pour plus d'informations");
}
return $this->render('page/mentions_legales.html.twig', [
'mentionsLegales' => $mentionsLegales,
]);
}
#[Route('/cgv', name: 'app_page_cgv')]
public function cgv(CgvRepository $cgvRepository): Response
{
$cgv = $cgvRepository->findOneBy(['id' => 1]);
if (!$cgv) {
$cgv = new Cgv();
$cgv->setContenu("Les conditions générales de vente sont momentanément indisponible.
Merci de contacter directement SRDI pour plus d'informations");
}
return $this->render('page/cgv.html.twig', [
'cgv' => $cgv,
]);
}
}