<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Controller;
use Symfony\Component\HttpFoundation\{
Response,
Request
};
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Commandes;
use App\Entity\DetailsCommande;
use Doctrine\ORM\Query;
use App\Repository\iRepository;
use Symfony\Component\Validator\Constraints\NotBlank;
use App\Validator\Constraints\Emoji;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Form\Extension\Core\Type\{
ChoiceType,
HiddenType,
ButtonType,
SubmitType,
TextareaType,
TextType
};
use App\Services\TelephoneInternational;
use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
use App\Services\ContactezNous as ContactezNousService;
class TarifsController extends EntityUsingController {
public const MAX_AGE = 43200; // 12heures
/**
* @var TelephoneInternational
*/
private $telephoneInternational;
/**
* @var EntityManagerInterface
*/
private $em;
/**
*
* @var type
*/
private $contactezNous;
/**
*
* @param EntityManagerInterface $em
* @param TelephoneInternational $telephoneInternational
* @param ContactezNousService $contactezNous
*/
public function __construct(EntityManagerInterface $em, TelephoneInternational $telephoneInternational, ContactezNousService $contactezNous) {
$this->em = $em;
$this->telephoneInternational = $telephoneInternational;
$this->contactezNous = $contactezNous;
}
public function index(Request $request): Response {
$form = $this->createFormBuilder()
->add('civilite', ChoiceType::class, [
'choices' => ['M' => 'masculin', 'Mme' => 'feminin'],
'constraints' => [new NotBlank(['message' => 'Ce champ est obligatoire'])],
'expanded' => true,
'multiple' => false,
])
->add('nom', TextType::class, ['constraints' => [new NotBlank(['message' => 'Le nom est obligatoire'])]])
->add('prenom', TextType::class, ['constraints' => [new NotBlank(['message' => 'Le prénom est obligatoire'])]])
->add('mail', TextType::class, ['constraints' => [new NotBlank(['message' => 'L\'email est obligatoire']), new Email(['message' => 'L\'email "{{ value }}" n\'est pas valide'])]])
->add('societe', TextType::class, ['constraints' => [new NotBlank(['message' => 'La société est obligatoire'])]])
->add('telephone', TextType::class, ['constraints' => [new NotBlank(['message' => 'Le téléphone est obligatoire'])]])
->add('indicatif', ChoiceType::class, [
'choices' => $this->telephoneInternational->listIndicatifChoiceForm(),
'attr' => ['class' => 'form-control'],
'choice_attr' => fn($key, $val, $index) => ($key == "") ? ['disabled' => 'disabled'] : [],
'data' => array_values($this->telephoneInternational->listIndicatifChoiceForm())[0],
'constraints' => [new NotBlank(['message' => 'L\'indicatif est obligatoire'])]
])
->add('message', TextareaType::class, [
'attr' => ['class' => 'form-control', 'rows' => 8, 'autocomplete' => 'off'],
'constraints' => [new NotBlank(['message' => 'Le message est obligatoire']), new Emoji()]
])
->add('recaptcha', EWZRecaptchaType::class, ['mapped' => false, 'language' => 'fr'])
->getForm();
// Traitement de la requête
$form->handleRequest($request);
if ($form->isSubmitted()) {
$this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
if ($form->isValid() ) {
$data = $form->getData();
$obj = new \stdClass();
$obj->type_contact = "cedant";
$obj->civilite = $data["civilite"];
$obj->prenom = $data["prenom"];
$obj->nom = $data["nom"];
$obj->email = $data["mail"];
$obj->indicatif = $data["indicatif"];
$obj->telephone = $data["telephone"];
$obj->contenu_question = $data["message"];
$response = $this->contactezNous->sendMailCreateQuestionUtilisateur($obj);
if ($response) {
$this->addFlash('success_contact_tarif', 'Votre demande est bien envoyée');
} else {
$this->addFlash('error_contact_tarif', "Votre demande n'est pas envoyée");
}
} else {
$this->addFlash('error_contact_tarif', "Votre demande n'est pas envoyée");
}
}
$response = $this->render('tarifs/index.html.twig', [
'controller_name' => 'TarifsController',
'form' => $form->createView(),
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
public function comparatifOffres(): Response {
$nbMiseEnRelations = 0;
$time = strtotime(date("Ymd"));
$final = date("Ymd", strtotime("-1 month", $time));
$qb = $this->em->createQueryBuilder();
$alias = "a";
$query = $qb->select([
'd.id_detail_cmde',
])
->from(Commandes::class, $alias)
->leftJoin(DetailsCommande::class, 'd', iRepository::WITH, 'a.id_commande = d.id_commande')
->where($alias . ".etat = 'facture_envoyee' OR " . $alias . ".etat = 'information_transmise'")
->andWhere($alias . ".date_livraison <= '" . date("Ymd") . "'")
->andWhere($alias . ".date_livraison >= '" . $final . "'");
$commandes = $query->getQuery()->getResult(Query::HYDRATE_ARRAY);
$nbMiseEnRelations = count($commandes);
$array = array_map('intval', str_split((string) $nbMiseEnRelations));
$response = $this->render('tarifs/comparatif_offres.html.twig', [
'controller_name' => 'TarifsController',
'nbMiseEnRelations' => $array,
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
}