<?php
namespace App\Controller;
use DateTime;
use PhpImap\Mailbox;
use App\Service\UtilsService;
use App\Form\ResetPasswordType;
use App\Service\BandeauService;
use App\Service\EmailGenerator;
use TeamTNT\TNTSearch\TNTSearch;
use App\Repository\UserRepository;
use Symfony\Component\Mime\Address;
use App\Repository\ClientRepository;
use App\Form\ClientFinalValidateType;
use App\Repository\BandeauRepository;
use App\Controller\CommandeController;
use App\Form\ResetPasswordRequestType;
use App\Repository\CommandeRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\ClientFinalRepository;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
class DefaultController extends AbstractController
{
private $utilsService;
private $emailGeneratorService;
private $roleAdmin;
private $baseDomain = 'https://wine.mbebordeaux.fr';
private $fuzzy_storage = "/home/mbe/public_html/www";
private $mailer;
private $bandeauService;
//private $fuzzy_storage = "/Users/mbk15/Documents/aSchone/mbeplateforme";
//private $fuzzy_storage = "C:\wamp64\www\mbeplateforme";
//private $fuzzy_storage = "C:\Users\bleu-\OneDrive\Bureau\aschone\mbeplateforme";
public function __construct(UtilsService $utilsService, BandeauService $bandeauService, EmailGenerator $emailGeneratorService, MailerInterface $mailer)
{
$this->utilsService = $utilsService;
$this->emailGeneratorService = $emailGeneratorService;
$this->roleAdmin = $this->utilsService->isAdmin();
$this->mailer = $mailer;
$this->bandeauService = $bandeauService;
}
/**
* @Route("/", name="default")
*/
public function index(BandeauRepository $BandeauRepository, Request $request): Response
{
return $this->render('default/index.html.twig',
array('controller_name' => 'DefaultController',
'bandeau' => $this->bandeauService->displayPopup()
));
}
private function sendErrorEmail($errorDetails, $excelFilePath)
{
$email = (new TemplatedEmail())
->from('no-reply@mbe.vent-en-poupe.fr')
->to(new Address('linnea.cederblad@mbebordeaux.fr'))
->bcc(new Address('bpouverel@mbefrance.fr'))
->bcc(new Address('support@bleu-digital.fr'))
->subject('MBE - Problème import script')
->htmlTemplate('emails/error_template.html.twig') // Assurez-vous d'avoir ce template Twig
->context([
'errorDetails' => $errorDetails,
]);
foreach ($excelFilePath as $key => $file) {
$email->attachFromPath($file);
}
try {
$this->mailer->send($email);
echo "E-mail envoyé avec succès.";
} catch (TransportExceptionInterface $e) {
echo "L'e-mail n'a pas pu être envoyé. Erreur: {$e->getMessage()}";
}
}
private function sendErrorEmailIdealWine($errorDetails, $excelFilePath)
{
$email = (new TemplatedEmail())
->from('no-reply@mbe.vent-en-poupe.fr')
->to(new Address('linnea.cederblad@mbebordeaux.fr'))
->bcc(new Address('bpouverel@mbefrance.fr'))
->bcc(new Address('support@bleu-digital.fr'))
->subject('MBE - Problème import script')
->htmlTemplate('emails/error_template.html.twig') // Assurez-vous d'avoir ce template Twig
->context([
'errorDetails' => $errorDetails,
]);
foreach ($excelFilePath as $key => $file) {
$email->attachFromPath($file);
}
try {
$this->mailer->send($email);
echo "E-mail envoyé avec succès.";
} catch (TransportExceptionInterface $e) {
echo "L'e-mail n'a pas pu être envoyé. Erreur: {$e->getMessage()}";
}
}
/**
* @Route("/create_commande_par_email_Wf74oVv7WY4QLu1YqSad ", name="create_commande_par_email", methods={"GET", "POST"})
*/
public function createCommandeParEmail(CommandeController $commandeController, ClientRepository $clientRepository, CommandeRepository $commandeRepository)
{
// Paramètres de connexion IMAP
$server = '{ssl0.ovh.net:993/imap/ssl}INBOX';
$username = 'usa@mbebordeaux.fr';
$password = 'R2rFMxYgN5dw5cMMbpta';
//https://mail.ovh.net/roundcube/
// Créer une instance de la boîte aux lettres
$mailbox = new Mailbox($server, $username, $password);
// Récupérer tous les e-mails
$emails = $mailbox->searchMailbox('UNSEEN');
// $emails = $mailbox->searchMailbox('ALL');
// Parcourir les e-mails
foreach ($emails as $emailUid) {
$email = $mailbox->getMail($emailUid);
// Vérifier si le from est Charlotte ou Florian ou Benoit ou Lilly (Après, les adresses du client )
if ($email->fromAddress === 'cbrisson@bleu-digital.fr' || $email->fromAddress === 'fdieu@bleu-digital.fr' || $email->fromAddress === 'linnea.cederblad@mbebordeaux.fr' || $email->fromAddress === 'bpouverel@mbefrance.fr' || $email->fromAddress === 'aschone@bleu-digital.fr' || $email->fromAddress == 'mbe011@mbefrance.fr') {
// Vérifier s'il existe des pièces jointes
if ($email->hasAttachments()) {
// Parcourir les pièces jointes
foreach ($email->getAttachments() as $attachment) {
// Vérifier si la pièce jointe est un fichier Excel
$mimeType = $attachment->mime;
$fileName = $attachment->name;
if ($mimeType === 'application/vnd.ms-excel; charset=binary' || $mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=binary" || $mimeType === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || $mimeType === 'application/vnd.ms-excel') {
// Déterminez l'encodage manuellement si mb_detect_encoding() échoue
$current_encoding = 'ISO-8859-1'; // Par exemple, supposons que l'encodage est ISO-8859-1
// Conversion de l'encodage si nécessaire (ex. vers UTF-8)
if ($current_encoding !== 'UTF-8') {
$filename = mb_convert_encoding($fileName, 'UTF-8', $current_encoding);
}
// Suppression des caractères non valides
$filenameNew = preg_replace('/[^\p{L}\p{N}\s\-_\.]/u', '', $filename);
// Vérifier si l'objet de l'email contient le mot "IDEALWINE"
if (strpos(strtolower($email->subject), 'idealwine') !== false) {
file_put_contents(__DIR__ . "/../../public/VK74QTZTBQax9SkdDuax/" . $filenameNew, $attachment->getContents());
} else {
file_put_contents(__DIR__ . "/../../public/xdeUEDJuejUDEiduhEDIOehdEUDHe/" . $filenameNew, $attachment->getContents());
}
// Chemin vers le fichier Excel
// $excelFilePath = __DIR__."/../../public/xdeUEDJuejUDEiduhEDIOehdEUDHe/".$filenameNew;
}
}
}
$mailbox->markMailAsRead($emailUid);
}
}
$createCommandeResponse = $commandeController->create_via_import($clientRepository, $commandeRepository);
$createCommandeResponseIdealWine = $commandeController->create_via_import_idealwine($clientRepository, $commandeRepository);
$errorFound = $createCommandeResponse['errorFound'];
// Si le script merde alors on send un email pour expliquer l'erreur
if ($errorFound) {
$errorDetails = $createCommandeResponse['errorDetails'];
$excelFilePath = $createCommandeResponse['excelFilePath'];
$this->sendErrorEmail($errorDetails, $excelFilePath);
} else {
echo "Aucune erreur trouvée dans le fichier Excel Martin.";
}
$errorFound = $createCommandeResponseIdealWine['errorFound'];
// Si le script merde alors on send un email pour expliquer l'erreur pour IDEALWINE
if ($errorFound) {
$errorDetails = $createCommandeResponseIdealWine['errorDetails'];
$excelFilePath = $createCommandeResponseIdealWine['excelFilePath'];
$this->sendErrorEmailIdealWine($errorDetails, $excelFilePath);
} else {
echo "Aucune erreur trouvée dans le fichier Excel IDEALWINE.";
}
return new Response("OK");
}
/**
* @Route("/admin", name="admin_default")
*/
public function indexAdmin(): Response
{
if ($this->roleAdmin) {
return $this->render('default/indexAdmin.html.twig', [
'controller_name' => 'DefaultController',
]);
}
return $this->redirectToRoute('app_commande_new', [], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/mdpoublier ", name="app_client_forgot_pwd", methods={"GET", "POST"})
*/
public function askResetPassword(Request $request, UserRepository $userRepository): Response
{
$form = $this->createForm(ResetPasswordRequestType::class);
$form->handleRequest($request);
if ($form->isSubmitted()) {
$email = $_POST['reset_password_request']['email'];
$user = $userRepository->findByEmail($email);
if (count($user) > 0) {
$payload = [
'id' => $user[0]->getId(),
'exp' => time() + 900
];
$token = $this->utilsService->generateJWT($payload);
$url = $this->baseDomain . $this->generateUrl('reset_password', array('token' => $token));
// TODO send the link by email
$this->emailGeneratorService->sendResetPassword($user[0], $url);
}
$this->addFlash(
'info',
'Si votre email est lié à un compte nous vous avons envoyé un lien par mail'
);
}
return $this->render('client/forgot_password.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/changermdp", name="reset_password", methods={"GET", "POST"})
*/
public function resetPassword(Request $request, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager)
{
$token = $request->query->get('token');
if ($token == null) {
return $this->redirectToRoute('default', [], Response::HTTP_SEE_OTHER);
}
$payload = $this->utilsService->validateJWT($token);
//TODO decode the token present in the get request
$user = $userRepository->find($payload['id']);
$form = $this->createForm(ResetPasswordType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('login');
}
return $this->render('client/reset_password.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/validate", name="app_client_final_validate", methods={"GET", "POST"})
*/
public function validate(CommandeRepository $commandeRepository, Request $request)
{
$token = $request->query->get('token');
if ($token == null) {
return $this->redirectToRoute('default', [], Response::HTTP_SEE_OTHER);
}
$payload = $this->utilsService->validateJWT($token);
$commande = $commandeRepository->find($payload['id']);
if ($commande->isIsValideeParClient() == true) {
//Le client a déjà validé ses infos et revient sur le lien, on redirige direct vers la page "Vos informations ont bien été validées"
return $this->render('client_final/informations_validees.html.twig');
}
/* if($commande->getState() == 'valide'
|| $commande->getState() == 'emballage'
|| $commande->getState() == 'archive'){
return $this->redirectToRoute('default', [], Response::HTTP_SEE_OTHER);
} */
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(ClientFinalValidateType::class, $commande);
$form->handleRequest($request);
$dateCreneau1Clone = clone $commande->getDateCollecte();
$dateCreneau2Clone = clone $commande->getDateCollecte();
if ($commande->isEmballageLivraison()) {
$dateCreneau1Brut = $dateCreneau1Clone->modify("+7 days");
$dateCreneau2Brut = $dateCreneau2Clone->modify("+12 days");
} else {
$dateCreneau1Brut = $dateCreneau1Clone->modify("+22 days");
$dateCreneau2Brut = $dateCreneau2Clone->modify("+27 days");
}
$dateCreneau1 = $dateCreneau1Brut->format('d/m/Y');
$dateCreneau2 = $dateCreneau2Brut->format('d/m/Y');
if ($form->isSubmitted() && $form->isValid()) {
$postCommande = $_POST['client_final_validate'];
$etatUs = $_POST['input_etat_us'];
//Client final
$clientFinal = $commande->getClientFinal();
$clientFinal->setTelephone($postCommande['telephone']);
if (strlen($postCommande['fullName']) > 70) {
$this->addFlash("error", 'The fullname is too long');
return $this->render('client_final/validate.html.twig', [
'commande' => $commande,
'form' => $form->createView(),
'dateCreneau1' => $dateCreneau1,
'dateCreneau2' => $dateCreneau2,
]);
}
if (strlen($postCommande['telephone']) != 10) {
$this->addFlash("error", 'The phone number must be composed of 10 digits.');
return $this->render('client_final/validate.html.twig', [
'commande' => $commande,
'form' => $form->createView(),
'dateCreneau1' => $dateCreneau1,
'dateCreneau2' => $dateCreneau2,
]);
}
$clientFinal->setFullName($postCommande['fullName']);
// $clientFinal->setPrenom($postCommande['clientFinal']['prenom']);
// $clientFinal->setNom($postCommande['clientFinal']['nom']);
$em->persist($clientFinal);
$em->flush();
//Commande
$commande->setCodePostalLivraison(str_replace(' ', '', $postCommande['codePostalLivraison']));
$commande->setVilleLivraison(trim($postCommande['villeLivraison']));
$commande->setAdresseLivraison($postCommande['adresseLivraison']);
$commande->setComplementAdresseLivraison($postCommande['complementAdresseLivraison']);
$commande->setEtatUs($etatUs);
$commande->setProvince($this->utilsService->getProvinceByEtatUs($etatUs));
//Si le statut de la commande a déjà avancé et que la suite était conditionnée à la validation des infos du client, on passe au state suivant
if ($commande->getState() == "attente_client") {
if ($commande->isEmballageLivraison() == true) {
$commande->setState('attente_pec_transporteur');
} else {
$commande->setState('attente_collecte_mbe');
}
}
/* $commande->setState($commande->isEmballageLivraison() ? 'valide' : 'emballage'); */
$commande->setIsValideeParClient(true);
$em->persist($commande);
$em->flush();
$this->addFlash(
'info',
'Order validated'
);
//On redirige direct vers la page "Vos informations ont bien été validées"
/* return $this->redirectToRoute('default', [], Response::HTTP_SEE_OTHER); */
return $this->render('client_final/informations_validees.html.twig');
}
return $this->render('client_final/validate.html.twig', [
'commande' => $commande,
'form' => $form->createView(),
'dateCreneau1' => $dateCreneau1,
'dateCreneau2' => $dateCreneau2,
]);
}
/**
* @Route("/updateFirstConnexion", name="update_first_connexion")
*/
public function updateFirstConnexion(): Response
{
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$user->setIsFirstConnexion(false);
$em->persist($user);
$em->flush();
return new Response("OK");
}
/**
* @Route("/cron_BJbOT7r0aa/adminEmballages", name="admin_emballages")
*/
public function adminEmballages(CommandeRepository $commandeRepository): Response
{
//On recup la valeur de today
$jourDebut = intval(date("d"));
$moisDebut = intval(date("m"));
$anneeDebut = intval(date("Y"));
if (intval($moisDebut) == 12) {
$moisSuivant = '01';
$anneeFin = $anneeDebut + 1;
} else {
$moisSuivant = intval($moisDebut) + 1;
$anneeFin = $anneeDebut;
}
switch (true) {
case $jourDebut == 5:
$dateFinCreneau = strval($anneeDebut) . '-' . sprintf('%02d', strval($moisDebut)) . '-' . $this->utilsService->getDernierJourMois($moisDebut, $anneeDebut);
break;
case $jourDebut == 10:
$dateFinCreneau = strval($anneeFin) . '-' . sprintf('%02d', strval($moisSuivant)) . '-05';
break;
case $jourDebut == 15:
$dateFinCreneau = strval($anneeFin) . '-' . sprintf('%02d', strval($moisSuivant)) . '-10';
break;
case $jourDebut == 20:
$dateFinCreneau = strval($anneeFin) . '-' . sprintf('%02d', strval($moisSuivant)) . '-15';
break;
case $jourDebut == 25:
$dateFinCreneau = strval($anneeFin) . '-' . sprintf('%02d', strval($moisSuivant)) . '-20';
break;
case $jourDebut == 30:
$dateFinCreneau = strval($anneeFin) . '-' . sprintf('%02d', strval($moisSuivant)) . '-25';
break;
default:
$dateFinCreneau = '';
break;
}
//If today ne correspond pas aux jours, on ne lance pas le script
if ($dateFinCreneau != '') {
$commandes = $commandeRepository->findCommandesAEmballerParCreneau($dateFinCreneau);
if ($commandes) {
$res = $this->emailGeneratorService->sendEmailPrepareEmballage($commandes);
if ($res) {
return new Response("OK");
} else {
return new Response("ErreurMail");
}
exit();
}
return new Response("Pas d'\'envoi ce jour");
die();
}
return new Response("Pas d'\'envoi ce jour");
die();
}
/**
* @Route("/cron_BJbOT7r0aa/preparationColisCavistes", name="preparation_colis_cavistes")
*/
public function preparationColisCavistes(ClientRepository $clientRepository, CommandeRepository $commandeRepository): Response
{
//On recup la valeur de today
$jourDebut = intval(date("d"));
$moisDebut = intval(date("m"));
$anneeDebut = intval(date("Y"));
if (intval($moisDebut) == 12) {
$moisSuivant = '01';
$anneeFin = $anneeDebut + 1;
} else {
$moisSuivant = intval($moisDebut) + 1;
$anneeFin = $anneeDebut;
}
switch (true) {
case $jourDebut == 5:
$dateFinCreneau = strval($anneeFin) . '-' . sprintf('%02d', strval($moisDebut)) . '-25';
break;
case $jourDebut == 10:
$dateFinCreneau = strval($anneeDebut) . '-' . sprintf('%02d', strval($moisDebut)) . '-' . $this->utilsService->getDernierJourMois($moisDebut, $anneeDebut);
break;
case $jourDebut == 15:
$dateFinCreneau = strval($anneeFin) . '-' . sprintf('%02d', strval($moisSuivant)) . '-05';
break;
case $jourDebut == 20:
$dateFinCreneau = strval($anneeFin) . '-' . sprintf('%02d', strval($moisSuivant)) . '-10';
break;
case $jourDebut == 25:
$dateFinCreneau = strval($anneeFin) . '-' . sprintf('%02d', strval($moisSuivant)) . '-15';
break;
case $jourDebut == 30:
$dateFinCreneau = strval($anneeFin) . '-' . sprintf('%02d', strval($moisSuivant)) . '-20';
break;
default:
$dateFinCreneau = '';
break;
}
//If today ne correspond pas aux jours, on ne lance pas le script
if ($dateFinCreneau != '') {
$clients = $clientRepository->findAll();
$mailsEnvoyes = [];
$mailsErreur = [];
foreach ($clients as $key => $client) {
//Pour chaque client, on recherche si il a des commandes à envoyer avant la date de fin
$commandes = $commandeRepository->findCommandesAEnvoyerCaviste($dateFinCreneau, $client);
if ($commandes) {
$res = $this->emailGeneratorService->sendEmailPrepareCommandesCaviste($client, $commandes);
if ($res) {
$mailsEnvoyes[] = $client->getId();
} else {
$mailsErreur[] = $client->getId();
}
}
}
if ($mailsErreur) {
$response = new Response();
$response->setContent(json_encode([
'$mailsErreur' => $mailsErreur,
]));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
return new Response("OK");
exit();
}
return new Response("Pas d'\'envoi ce jour");
die();
}
private function getTNTSearchConfiguration()
{
$databaseURL = $_ENV['DATABASE_URL'];
$databaseParameters = parse_url($databaseURL);
$config = [
'driver' => $databaseParameters["scheme"],
'host' => $databaseParameters["host"],
'database' => str_replace("/", "", $databaseParameters["path"]),
'username' => $databaseParameters["user"],
'password' => $databaseParameters["pass"],
'storage' => $this->fuzzy_storage . '/fuzzy_storage_aeZAdJfvVpgZGTvh/',
'stemmer' => \TeamTNT\TNTSearch\Stemmer\PorterStemmer::class
];
return $config;
}
/**
* @Route("/generate-index_AiNnDiIPx7C9ZcWmoiO4", name="app_generate-index")
*/
public function generate_index(): JsonResponse
{
$tnt = new TNTSearch;
// Obtain and load the configuration that can be generated with the previous described method
$configuration = $this->getTNTSearchConfiguration();
$tnt->loadConfig($configuration);
$indexerCommande = $tnt->createIndex('commande.index');
$indexerCommande->query('SELECT id, numero_facture, code_postal_livraison, ville_livraison, tracking_number FROM commande');
$indexerCommande->run();
$indexerClientFinal = $tnt->createIndex('clientFinal.index');
$indexerClientFinal->query('SELECT id, full_name FROM client_final');
$indexerClientFinal->run();
$indexerClient = $tnt->createIndex('client.index');
$indexerClient->query('SELECT id, raison_sociale FROM client');
$indexerClient->run();
return new JsonResponse('done');
}
/**
* @route("/fedexTest", name="instable")
*/
public function cancelFedex()
{
$trackingNumber = '773704227696';
$fedexEndpoint = 'https://apis.fedex.com/ship/v1/shipments/cancel';
$payload = '{
"trackingNumber": " ' . $trackingNumber . ' ",
"senderCountryCode": "FR",
"deletionControl": "DELETE_ALL_PACKAGES",
"accountNumber": {
"value": "782780123"
}
}';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $fedexEndpoint,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => array(
'x-customer-transaction-id: 624deea6-b709-470c-8c39-4b5511281492',
'x-locale: en_US',
'Content-Type: application/json',
'Authorization: Bearer ' . $this->getFedexToken()
),
));
$response = curl_exec($curl);
$json = json_decode($response, true);
var_dump($response);
}
public function getFedexToken()
{
$url = "https://apis.fedex.com/oauth/token";
$payload = "grant_type=client_credentials&client_id=l7c771e0d2fd444799b4ce63c4ccd10032&client_secret=7dacb43d3ecc4d239d27236f37a39075";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$json = json_decode($response, true);
curl_close($ch);
return $json['access_token'];
}
/**
* @route("/recapFedex_zS4DvryqHjVQdXCeRsgpP5JWc9tKn32Af8bLxE7B", name="recapFedex")
*/
public function testDateCondition(CommandeRepository $commandeRepository): JsonResponse
{
$currentDayOfWeek = date("w");
if ($currentDayOfWeek == 0 || $currentDayOfWeek == 6) {
return new JsonResponse('ok');
}
// Iterate over the next seven days
for ($i = 0; $i < 9; $i++) {
if (intval(date('w', strtotime("+$i days"))) != 6 && intval(date('w', strtotime("+$i days"))) != 0) {
$dayName = date("D", strtotime("+$i days"));
switch ($dayName) {
case 'Mon':
$day = 'Lundi';
break;
case 'Tue':
$day = 'Mardi';
break;
case 'Wed':
$day = 'Mercredi';
break;
case 'Thu':
$day = 'Jeudi';
break;
case 'Fri':
$day = 'Vendredi';
break;
default:
$day = '';
break;
}
$mmddyyyyValue = date("Y-m-d", strtotime("+$i days"));
$days[] = array('name' => $day, 'mmddyyyy' => $mmddyyyyValue);
}
}
$daysInfo = [];
for ($i = 0; $i < 5; $i++) {
$datas = $commandeRepository->findBy([
'dateCollecte' => new DateTime($days[$i]['mmddyyyy']),
'fedexPdfAvailable' => '0',
'state' => 'attente_pec_transporteur'
]);
$x = 0;
foreach ($datas as $data) {
$x++;
}
$daysInfo[] = array('dayDate' => $days[$i]['mmddyyyy'], 'dayName' => $days[$i]['name'], 'total' => $x);
}
$this->emailGeneratorService->sendFedexRecap($daysInfo);
return new JsonResponse('ok');
}
}