<?php
namespace App\Controller\Contact;
use App\Entity\Adresses\Adresse;
use App\Entity\Articles\Article;
use App\Entity\FO\Societe;
use App\Entity\GestionComerciale\Commande;
use App\Entity\Clients\HistoriqueClient;
use App\Entity\GestionComerciale\StatutCommande;
use App\Form\Contact\ContactType;
use App\Library\Datatable\Util\Datatable;
use App\Library\Uploader\Services\FileUploader;
use App\Model\GestionCommerciale\TypeDocumentCommercial;
use App\Security\Voter\EntityVoter;
use App\Service\Articles\ArticleCategorieService;
use App\Service\Articles\ArticleService;
use App\Service\GestionComerciale\EmailService;
use Doctrine\ORM\EntityManagerInterface;
use DTS\eBaySDK\FileTransfer\Types\Data;
use JMS\Serializer\SerializerBuilder;
use Knp\Component\Pager\PaginatorInterface;
use Knp\Snappy\Pdf;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints\Email;
class ContactController extends AbstractController
{
/**
* @Route("/nous-contacter", name="dtc_contact")
*/
public function ContactAction(Request$request, EntityManagerInterface $em,TranslatorInterface $translator,ValidatorInterface $validator,EmailService $emailService)
{
$user = $this->getUser();
$historiqueClient = new HistoriqueClient();
$form = $this->createForm(ContactType::class, $historiqueClient);
$errors = [];
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$reference = $form->get('reference')->getData();
$sujet = $form->get('sujet')->getData();
$prenom = $form->get('prenom')->getData();
$nom = $form->get('nom')->getData();
$email = $form->get('email')->getData();
$telephone = $form->get('telephone')->getData();
$message = $form->get('message')->getData();
$rendu_message = $this->renderView('FO/Email/contact.html.twig', ["prenom"=>$prenom,"sujet"=>$sujet,"nom"=>$nom,"email"=>$email,"message"=>$message]);
$societe = $em->getRepository(Societe::class)->find(1);
if (is_object($societe)) {
$emailDestination = $societe->getEmail();
if($societe->getMailTest()) $emailDestination = $societe->getEmailTest();
} else {
$emailDestination = 'thomas@noogaa.com';
}
$prefixe_sujet = "";
if($sujet=="demande_information") $prefixe_sujet = "[DEMANDE INFORMATION] ";
else if($sujet=="support_technique") $prefixe_sujet = "[SUPPORT TECHNIQUE] ";
else if($sujet=="partenariat") $prefixe_sujet = "[PARTENARIAT] ";
else if($sujet=="autre") $prefixe_sujet = "[AUTRE] ";
$titre_email = $prefixe_sujet."Formulaire de contact";
$donneesEmail=["destinataires"=>[$emailDestination],"message"=>$rendu_message,"titre"=>$titre_email];
$errors_envoi = $emailService->envoyerEmailClassique($donneesEmail);
$em->persist($historiqueClient);
$em->flush($historiqueClient);
$this->addFlash('notice', $translator->trans('Message envoyé avec succès !'));
return $this->redirectToRoute('dtc_contact');
}
else {
$errors = $validator->validate($historiqueClient);
}
}
return $this->render('Contact/Contact/contact.html.twig',['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/contact", name="dtc_contact_modal")
*/
public function ContactModalAction(Request$request, EntityManagerInterface $em,TranslatorInterface $translator,ValidatorInterface $validator,EmailService $emailService)
{
$titre_modal = "Nous contacter";
$article = $request->query->get('article');
$devis = $request->query->get('devis');
$commande = $request->query->get('commande');
$api = $request->query->get('api');
$valider = $request->query->get('valider');
$historiqueClient = new HistoriqueClient();
if($devis != "") {
$devis_obj = $em->getRepository(Commande::class)->find($devis);
$historiqueClient->setMessage("Demande d'informations pour le devis : ".$devis_obj->getReference()."\n");
if($valider != "") {
$titre_modal = "Commande Devis ".$devis_obj->getReference();
$historiqueClient->setMessage("Validation du devis ".$devis_obj->getReference()."\n");
}
}
else if($article != "") {
$article_obj = $em->getRepository(Article::class)->find($article);
$historiqueClient->setMessage("Demande d'informations pour le produit : ".$article_obj->getReference()."\n");
}
else if($commande != "") {
$commande_obj = $em->getRepository(Commande::class)->find($commande);
$historiqueClient->setMessage("Demande d'informations pour la commande : ".$commande_obj->getReference()."\n");
}
else if($api != "") {
$historiqueClient->setMessage("Demande d'informations pour API\n");
}
$form = $this->createForm(ContactType::class, $historiqueClient, [
'default_sujet' => $devis || $commande || $article || $api ? 'demande_information' : null,
]);
$errors = [];
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$article = NULL;
if($request->query->get('article') != "") $article = $em->getRepository(Article::class)->find($request->query->get('article'));
$reference = $form->get('reference')->getData();
$sujet = $form->get('sujet')->getData();
$prenom = $form->get('prenom')->getData();
$nom = $form->get('nom')->getData();
$email = $form->get('email')->getData();
$telephone = $form->get('telephone')->getData();
$message = $form->get('message')->getData();
if($devis != "") {
if($valider != "") {
$sujet = "Commande devis";
}
}
$rendu_message = $this->renderView('FO/Email/contact.html.twig', ["prenom"=>$prenom,"sujet"=>$sujet,"nom"=>$nom,"email"=>$email,"message"=>$message,"article"=>$article,"devis"=>$devis]);
$prefixe_sujet = "";
if($sujet=="demande_information") $prefixe_sujet = "[DEMANDE INFORMATION] ";
else if($sujet=="support_technique") $prefixe_sujet = "[SUPPORT TECHNIQUE] ";
else if($sujet=="partenariat") $prefixe_sujet = "[PARTENARIAT] ";
else if($sujet=="autre") $prefixe_sujet = "[AUTRE] ";
$titre_email = $prefixe_sujet."Formulaire de contact";
//demande_information
//support_technique
//partenariat
//autre
if($article) {
$titre_email = $prefixe_sujet." Produit:".$article->getReference();
}
else if($devis != "") {
$titre_email = $prefixe_sujet." Devis:".$devis_obj->getReference();
}
else if($api != "") {
$titre_email = $prefixe_sujet." API";
}
if($devis != "") {
if($valider != "") {
$prefixe_sujet = "[COMMANDE DEVIS] ";
$titre_email = $prefixe_sujet." Devis:".$devis_obj->getReference();
}
}
$societe = $em->getRepository(Societe::class)->find(1);
if (is_object($societe)) {
$emailDestination = $societe->getEmail();
if($societe->getMailTest()) $emailDestination = $societe->getEmailTest();
} else {
$emailDestination = 'thomas@noogaa.com';
}
$donneesEmail=["destinataires"=>[$emailDestination],"message"=>$rendu_message,"titre"=>$titre_email];
$errors_envoi = $emailService->envoyerEmailClassique($donneesEmail);
$em->persist($historiqueClient);
$em->flush($historiqueClient);
return new Response(
json_encode(['rendu' => '', 'valide' => '1', 'url' => '', 'type' => 'callBackContactProduit']),
200,
['Content-Type' => 'application/json']
);
}
else {
$errors = $validator->validate($historiqueClient);
}
}
$rendu = $this->renderView('Contact/Contact/contact_modal.html.twig',['form' => $form->createView(), 'errors' => $errors]);
// $rendu = $this->renderView('FO/Supprimer/supprimer_impossible.html.twig', ['errors' => $erreur]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/devis-personnalise/html", name="dtc_devis_personnalise_html")
*/
public function ContactDevisPersonnaliseHtml(Request $request,EntityManagerInterface $em,EmailService $emailService)
{
$commandeRepo = $em->getRepository(Commande::class);
$user = $this->getUser();
$statutPanier = $em->getRepository(StatutCommande::class)->findOneBy(["documentCommercial" => TypeDocumentCommercial::PANIER, "ordre" => "1"] );
// Récupérer ou créer le panier
$panier = $commandeRepo->findOneBy([
'statutCommande' => $statutPanier,
'utilisateur' => $user,
'typeDocumentCommercial' => TypeDocumentCommercial::PANIER
]);
return $this->render(
'FO/Email/devis_personnalise.html.twig',
[
'sujet'=> 'dee',
'panier'=> $panier,
'user'=> $user,
]
);
}
/**
* @Route("/devis-personnalise", name="dtc_devis_personnalise", methods={"POST"})
*/
public function ContactDevisPersonnalise(Request $request,EntityManagerInterface $em,EmailService $emailService): JsonResponse
{
$email = $request->request->get('email', '');
$adresseLivraisonId = $request->request->get('adresseLivraison', '');
$adresseRepository = $em->getRepository(Adresse::class);
$adresseLivraison = $adresseRepository->find($adresseLivraisonId);
if (!$adresseLivraison) {
return new JsonResponse([
'success' => false,
'message' => 'Adresse invalide.',
]);
}
$commandeRepo = $em->getRepository(Commande::class);
$validator = Validation::createValidator();
$errors = $validator->validate($email, [
new Email(),
]);
if (count($errors) > 0) {
return new JsonResponse([
'success' => false,
'message' => 'Email invalide.',
]);
}
$user = $this->getUser();
$historiqueClient = new HistoriqueClient();
$historiqueClient->setMessage("Devis personnalisé\n");
$historiqueClient->setUtilisateur($user);
$historiqueClient->setClient($user->getClient());
$societe = $em->getRepository(Societe::class)->find(1);
if (is_object($societe)) {
$emailDestination = $societe->getEmail();
if($societe->getMailTest()) $emailDestination = $societe->getEmailTest();
} else {
$emailDestination = 'thomas@noogaa.com';
}
$sujet = "Demande de devis personnalisé";
$titre_email = $sujet;
$statutPanier = $em->getRepository(StatutCommande::class)->findOneBy(["documentCommercial" => TypeDocumentCommercial::PANIER, "ordre" => "1"] );
// Récupérer ou créer le panier
$panier = $commandeRepo->findOneBy([
'statutCommande' => $statutPanier,
'utilisateur' => $user,
'typeDocumentCommercial' => TypeDocumentCommercial::PANIER
]);
$rendu_message = $this->renderView('FO/Email/devis_personnalise.html.twig', ["sujet"=>$sujet,"panier"=>$panier,'user'=>$user,'adresseLivraison'=>$adresseLivraison]);
$donneesEmail=["destinataires"=>[$emailDestination],"message"=>$rendu_message,"titre"=>$titre_email];
$errors_envoi = $emailService->envoyerEmailClassique($donneesEmail);
$em->persist($historiqueClient);
$em->flush($historiqueClient);
return new JsonResponse([
'success' => true,
'message' => 'Merci ! Votre demande a été prise en compte.',
]);
}
}