<?php
namespace App\Controller;
use FOS\UserBundle\Model\UserManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use App\Entity\Product;
use App\Entity\User;
use App\Entity\Cart;
use App\Entity\CartProduct;
use App\Entity\Company;
use App\Entity\CartCoupon;
use App\Entity\UserVariables;
use App\Entity\UserViewedProduct;
use App\Entity\UserFavorite;
use App\Entity\UserShippingLocation;
use App\Entity\City;
use App\Entity\Conservation;
use App\Entity\Region;
use App\Entity\UserSurvey;
use App\Form\UserSurveyType;
use App\Service\UserService;
use App\Service\ImageService;
use App\Service\ProductService;
use App\Form\UserType;
use App\Service\PaymentService;
use DateTime;
class UserController extends AbstractController
{
/**
* @var UserService
*/
private $userServ;
/**
* @var EntityManagerInterface
*/
private $entityMana;
/**
* @var UserManagerInterface
*/
private $userManager;
/**
* @var ImageService
*/
private $imageServ;
public function __construct(UserService $user, EntityManagerInterface $em, ImageService $image, UserManagerInterface $userManager){
$this->userServ = $user;
$this->entityMana = $em;
$this->userManager = $userManager;
$this->imageServ = $image;
}
/**
* @Route({
* "fr": "/par/{email}",
* "en": "/by/{email}",
* },
* name="referredBy")
*/
public function referredBy(User $user){
$session = new Session();
//if(empty($session->get('referredBy')))
$session->set('referredBy', $user->getId());
return $this->redirectToRoute('fos_user_registration_register');
}
/**
* @Route({
* "fr": "/acheteur/inviterunami",
* "en": "/buyer/inviteafriend",
* },
* name="inviteAFriend")
*
* @Security("has_role('ROLE_ADMIN')")
* @Template("admin/user/inviteAFriend.html.twig")
*/
public function inviteAFriend(Request $request, UserService $userServ){
$twigData = array();
$form = $this->createFormBuilder(null)
->add('email', EmailType::class, [
'label' => 'Courriel de votre ami'
])
->add('submit', SubmitType::Class, [
'label' => 'Envoyer',
'attr' => [
'class' => 'm-t-5'
]
])->getForm();
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$email = $this->get('twig')->render('emails/inviteAFriend.html.twig', array('user' => $userServ->getUser(), 'hideInviteAFriend' => true));
$userServ->sendEmail('Invitation de '.$userServ->getUser()->getDisplayName().' pour un rabais de 10% sur votre premier achat', $email, false, $form->get('email')->getData());
$this->addFlash('success', 'Un courriel a été envoyé a votre ami!');
return $this->redirectToRoute('inviteAFriend');
}else{
foreach($form->getErrors(true) as $error){
$this->addFlash('error', $error->getMessage());
}
}
$twigData['form']= $form->createView();
return $twigData;
}
/**
* @Route({
* "fr": "/acheteur/controle/",
* "en": "/buyer/dashboard/",
* },
* name="dashboard")
*
* @Security("has_role('ROLE_ADMIN')")
* @Template("admin/dashboardUser.html.twig")
*/
public function dashboard(UserService $userServ, ProductService $productServ){
$twigData = array();
$twigData['lastViewedProducts'] = $this->entityMana->getRepository(UserViewedProduct::class)->findLastViewed($this->userServ->getUser(), 5);
$twigData['favoriteProducts'] = $this->entityMana->getRepository(UserFavorite::class)->findLatest($this->userServ->getUser(), 5);
$twigData['productsMayLike'] = $productServ->getProductsUserMayLike();
// $user = $this->userServ->getUser();
// $this->userServ->transferSession($user);
return $twigData;
}
/**
* @Route("/API/removeFavorite/{id}",
* options = { "expose" = true },
* name = "removeFavorite"
* )
*/
public function removeFavorite(Product $product, SessionInterface $session){
$response = new jsonresponse();
$user = $this->userServ->getUser();
if(empty($user)){
//Ok let's do some hack and use the cookie
$favs = $session->get('favorites');
if(empty($favs))
$favs = array();
if(in_array($product->getId(), $favs->toArray())){
foreach($favs as $k => $f){
if($f == $product->getId()){
unset($favs[$k]);
break;
}
}
$html ='';
}
$favs = $session->set('favorites', $favs);
}else{
if($user->hasFavorite($product)){
$user->removeFavorite($user->hasFavorite($product));
$this->entityMana->persist($user);
$this->entityMana->flush();
}
}
$response->setdata(array(
'success' => true,
));
return $response;
}
/**
* @Route("/API/toggleFavorite/{id}",
* options = { "expose" = true },
* name = "toggleFavorite"
* )
*/
public function toggleFavorite(Product $product, UrlGeneratorInterface $router, SessionInterface $session){
$response = new jsonresponse();
$user = $this->userServ->getUser();
$html = '';
if(empty($user)){
//Ok let's do some hack and use the cookie
$favs = $session->get('favorites');
if(empty($favs))
$favs = array();
if(!in_array($product->getId(), $favs->toArray())){
$html = '
<div class="row">
<div class="col-10 nopadding">
<a href="'.$router->generate('viewProduct', array('id'=> $product->getId(), 'producerUrl' => $product->getCompany()->getUrlName(), 'productName'=> $product->getUrlName())).'" class="dropdown-item notify-item view-favorite" data-product="'.$product->getId().'">
<div class="notify-icon"><img class="" src="'.$router->generate('getImageAsCroppedThumb', array('id'=> $product->getMainImage()->getId(), 'height'=> '35', 'width'=> '35')).'"></div>
<p class="notify-details">'.$product->getName().'<small class="text-muted">'.$product->getCompany()->getName().'</small></p>
</a>
</div>
<div class="col-2 nopadding">
<a href="#" class="remove-favorite" data-id="'.$product->getId().'">
<i class="ion-close" style="font-size: large; color: darkgray; padding-top: 10px;"></i>
</a>
</div>
</div>';
$favs[]=$product->getId();
$favs = $session->set('favorites', $favs);
$response->setdata(array(
'success' => true,
'html' => $html
));
}
}else{
if(!$user->hasFavorite($product)){
$favorite = new UserFavorite();
$favorite->setUser($user);
$favorite->setProduct($product);
$this->entityMana->persist($favorite);
$this->entityMana->flush();
$html = '
<div class="row">
<div class="col-10 nopadding">
<a href="'.$router->generate('viewProduct', array('id'=> $product->getId(), 'producerUrl' => $product->getCompany()->getUrlName(), 'productName'=> $product->getUrlName())).'" class="dropdown-item notify-item view-favorite" data-product="'.$product->getId().'">
<div class="notify-icon"><img class="" src="'.$router->generate('getImageAsCroppedThumb', array('id'=> $product->getMainImage()->getId(), 'height'=> '35', 'width'=> '35')).'"></div>
<p class="notify-details">'.$product->getName().'<small class="text-muted">'.$product->getCompany()->getName().'</small></p>
</a>
</div>
<div class="col-2 nopadding">
<a href="#" class="remove-favorite" data-id="'.$product->getId().'">
<i class="ion-close" style="font-size: large; color: darkgray; padding-top: 10px;"></i>
</a>
</div>
</div>';
$response->setdata(array(
'success' => true,
'html' => $html
));
}
}
return $response;
}
/**
* @Route("/API/setUserVariable/{varname}/{category}",
* options = { "expose" = true },
* name = "setUserVariable",
* defaults = {"category" = false }
* )
*/
public function setUserVariable($varname, $category, Request $request){
$save = false;
$success = false;
$var = false;
if($this->userServ->getUser())
$var = $this->userServ->getUser()->getVariable($varname, $category);
if($var){
if($request->get('value')){
$var->setValue($request->get('value'));
$this->entityMana->persist($var);
$save = true;
}
}else{
$var = new UserVariables();
$var->setName($varname);
if($category)
$var->setCategory($category);
$var->setValue($request->get('value'));
$this->entityMana->persist($var);
$user = $this->userServ->getUser()->addVariable($var);
$this->entityMana->persist($this->userServ->getUser());
$save = true;
}
if($save){
$this->entityMana->flush();
$success = true;
}
$response = new jsonresponse();
$response->setdata(array(
'success' => $success,
'value' => $var
));
return $response;
}
/**
* @Route("/API/getUserVariable/{varname}/{category}",
* options = { "expose" = true },
* name = "getUserVariable",
* defaults = {"category" = false }
* )
*/
public function getUserVariable($varname, $category){
$user = $this->userServ->getUser();
if(empty($user)){
return new JsonResponse();
}
$var = $user->getVariable($varname, $category);
if($var)
$success = true;
else
$success = false;
$response = new jsonresponse();
$response->setdata(array(
'success' => $success,
'value' => $var
));
return $response;
}
/**
* @Route({
* "fr": "/acheteur/profile/editer",
* "en": "/buyer/profile/edit"
* },
* name="userProfile")
* @Template("admin/user/profile.html.twig")
* TODO: Change this to use a Image entity instead
*/
public function userProfile(Request $request)
{
$twigData = array();
$user = $this->userServ->getUser();
$form = $this->createForm(UserType::class, $user);
$twigData['editUserForm'] = $form->createView();
$twigData['shippingAddresses'] = $user->getValidShippingAddresses();
if ($request->get("action") == "update_shippingAddress") {
$shippingAddress = $request->get("shippingAddress");
if ($shippingAddress == "none") {
$this->addFlash('error', 'Veuillez choisir une adresse.');
return $this->redirectToRoute('userProfile');
} else {
$shippingAddress_name = $request->get("shippingAddress_name");
$shippingAddress_phone = $request->get("shippingAddress_phone");
$shippingAddress_civicNumber = $request->get("shippingAddress_civicNumber");
$shippingAddress_streetName = $request->get("shippingAddress_streetName");
$shippingAddress_unit = $request->get("shippingAddress_unit");
$shippingAddress_province = $request->get("shippingAddress_province");
$shippingAddress_citySelectQC = $request->get("shippingAddress_citySelectQC");
$shippingAddress_cityInputAny = $request->get("shippingAddress_cityInputAny");
$shippingAddress_zipCode = $request->get("shippingAddress_zipCode");
$shippingAddress_city = $shippingAddress_citySelectQC;
if ($shippingAddress_province == "QC") {
$city = $this->entityMana->getRepository(City::class)->findOneBy(["id"=>$shippingAddress_citySelectQC]);
if ($city) {
$shippingAddress_city = $city->getName();
}
} else if ($shippingAddress_province == "ON"){
$shippingAddress_citySelectON = $request->get("shippingAddress_citySelectON");
$city = $this->entityMana->getRepository(City::class)->findOneBy(["name"=>$shippingAddress_citySelectON]);
if ($city) {
$shippingAddress_city = $city->getName();
}
}else {
$shippingAddress_city = $shippingAddress_cityInputAny;
}
$UserShippingLocation = $this->entityMana->getRepository(UserShippingLocation::class)->findOneBy(["id"=>$shippingAddress]);
if ($UserShippingLocation) {
$UserShippingLocation->setName($shippingAddress_name);
$UserShippingLocation->setPhone($shippingAddress_phone);
$UserShippingLocation->setCivicNumber($shippingAddress_civicNumber);
$UserShippingLocation->setStreetName($shippingAddress_streetName);
$UserShippingLocation->setUnit($shippingAddress_unit);
$UserShippingLocation->setProvince($shippingAddress_province);
$UserShippingLocation->setZipCode($shippingAddress_zipCode);
$UserShippingLocation->setCity($shippingAddress_city);
$this->entityMana->persist($UserShippingLocation);
$this->entityMana->flush();
}
}
$this->addFlash('success', 'Votre profil a été modifié avec succès.');
return $this->redirectToRoute('userProfile');
}
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$file = $user->getProfileImage();
$userFile = $request->files->get('user');
/*
* If we have a image we Upload it and save it in the user
*/
if(!empty($userFile['profileImage'])){
$file = $userFile['profileImage'];
$image = $this->imageServ->saveUploadedFile($file, 'profile');
$user->setProfileImage($image);
}
/*
* Check if a new password was requested
*/
$userForm = $request->get('user');
if(!empty($userForm['plainPassword'])){
$user->setPlainPassword($userForm['plainPassword']['first']);
$this->userManager->updatePassword($user);
}
//Saving in the database
$this->entityMana->persist($user);
$this->entityMana->flush();
$this->userManager->updateUser($user);
$this->addFlash('success', 'Votre profil a été modifié avec succès.');
return $this->redirectToRoute('userProfile');
}else{
foreach($form->getErrors(true) as $error){
$this->addFlash('error', $error->getMessage());
}
}
$twigData['user'] = $user;
return $twigData;
}
/**
* @Route({
* "fr": "/acheteur/mesProduits",
* "en": "/buyer/myProducts",
* },
* name="myProducts")
*
* @Security("has_role('ROLE_ADMIN')")
* @Template("admin/user/myProducts.html.twig")
*/
public function myProducts(Request $request, UserService $userServ){
$twigData = array();
$twigData['userPaidProducts']=false;
$user= $userServ->getuser();
if($user){
$twigData['userPaidProducts'] = $user->getAllCartsProducts();
}
$twigData['productsAmount'] = count($twigData['userPaidProducts']);
$twigData['noPagination'] = true;
return $twigData;
}
/**
* @Route({
* "fr": "/acheteur/sondage/{id}",
* "en": "/buyer/survey/{id}",
* },
* name="survey")
*
* @Security("has_role('ROLE_ADMIN')")
* @Template("admin/user/survey.html.twig")
*/
public function survey($id,Request $request, UserService $userServ){
$user= $this->userServ->getUser();
if($id=="2"){// show survey in the next week
if(!$user->getNextUserSurveyTime()){
$user->setNextUserSurveyTime(new DateTime("+1 week"));
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
}
return $this->redirectToRoute('home');
}
if($id=="3"){//dont show survey for the user
$user= $this->userServ->getUser();
$user->setDontShowSurvey(true);
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
return $this->redirectToRoute('home');
}
$twigData = array();
$user = $userServ->getUser();
if($user->getUserSurvey())
$userSurvey = $user->getUserSurvey();
else
$userSurvey = new UserSurvey();
$formSurvey = $this->createForm(UserSurveyType::class, $userSurvey);
$formSurvey->handleRequest($request);
if($formSurvey->isSubmitted() && $formSurvey->isValid()){
$em = $this->getDoctrine()->getManager();
$userSurvey->setUser($user);
$em->persist($userSurvey);
$em->flush();
$this->addFlash('success', 'Informations enregistré avec succès Merci');
$this->addFlash('focus', 'form[name="user_survey"]');
return $this->redirectToRoute('survey',array('id'=>1));
}
$twigData['forms']['survey'] = $formSurvey->createView();
$twigData['user']= $user ;
return $twigData;
}
/**
* @Route({
* "fr": "/acheteur/mesProduitsListes",
* "en": "/buyer/myProductsLists",
* },
* name="myProductsLists")
*
* @Security("has_role('ROLE_ADMIN')")
* @Template("frontend/myProductsListsFrontEnd.html.twig")
*/
public function myProductsFront(Request $request, UserService $userServ){
$twigData = array();
$twigData['userPaidProducts']=false;
$user= $userServ->getuser();
if($user){
$twigData['availableProducts'] = $user->getAllCartsProducts();
}
$twigData['productsAmount'] = count($twigData['availableProducts']);
$twigData['amountProductsPerCategories'] = array(
'total' => count($twigData['availableProducts'])
);
$twigData['productCategories'] = array();
foreach($user->getAllCartsProducts() as $key => $product){
$cat = $product->getCategory();
if(empty($twigData['productCategories'][$cat->getId()]))
$twigData['productCategories'][$cat->getId()] =
array(
'id' => $key,
'name' => $cat,
'amount' => 1
);
else{
$twigData['productCategories'][$cat->getId()]['amount']+=1;
}
}
return $twigData;
}
/**
* @Route({
* "fr": "/Supprime/Adresse/{id}",
* "en": "/Remove/Adress/{id}",
* },
* name="removeAdressChoose")
*
*/
public function removeAdressChoose(Request $request, UserService $userServ, $id){
$userDeleteAdress = $request->query->get('id');
$em = $this->getDoctrine()->getManager();
$userAdresse = $this->entityMana->getRepository(UserShippingLocation::class)->findOneBy(["id"=>$userDeleteAdress]);
if ($userAdresse != null) {
$userId = $userAdresse->getUser()->getId();
$usertest = $userAdresse->getUser();
if ($userId != null) {
$userAdresse->setUser(null);
$em->persist($userAdresse);
$em->flush();
// dd($userAdresse);
return $this->redirectToRoute('userProfile');
}
}
}
/**
* @Route({
* "fr": "/acheteur/ajoutCoupon",
* "en": "/buyer/AddCode",
* },
* name="couponAdministration")
*
* @Security("has_role('ROLE_ADMIN')")
* @Template("admin/user/couponAdministration.html.twig")
*/
public function couponAdministration(Request $request){
if ($this->getUser()->getUsername() == 'info@maturin.ca'){
if($request->isMethod('post')){
$getAmount = $request->request->get('Amount');
$getDateFrom = $request->request->get('DateFrom');
$getDateTo = $request->request->get('DateTo');
$getTypeCoupon = $request->request->get('selectTypeCoupon');
$couponlist = $request->files->get('couponListFile');
// dd($getAmount);
if (empty($getAmount)){
$this->addFlash('error', "votre montant n'est pas correct");
return $this->redirectToRoute('couponAdministration');
}
if (empty($getDateFrom)){
$this->addFlash('error', "votre date de début de validité n'est pas correct");
return $this->redirectToRoute('couponAdministration');
}
if (empty($getDateFrom)){
$this->addFlash('error', "votre date d'expiration n'est pas correct");
return $this->redirectToRoute('couponAdministration');
}
if (isset($couponlist)){
$getExtension = explode('.', $couponlist->getClientOriginalName());
// dd($getExtension);
if ($getExtension[1] == 'csv'){
$file = fopen($couponlist, "rw");
$countCouponCreate =0;
while (!feof($file) ) {
$lines[] = fgetcsv($file, 1500, " ");
}
foreach ( (array)$lines as $line) {
$em = $this->getDoctrine()->getManager();
// $valueCoupon = $line;
foreach((array)$line as $cV){
try{
$cartCoupon = $em->getRepository(CartCoupon::class)->findBy(["code" => $cV]);
if (empty($cartCoupon) && !empty($cV)){
$countCouponCreate +=1;
$AddCoupon = new CartCoupon();
$AddCoupon->setOneTimeOnly(1);
$AddCoupon->setType($getTypeCoupon);
$AddCoupon->setAmount($getAmount);
$AddCoupon->setCode($cV);
$AddCoupon->setDateFrom(new \DateTime($getDateFrom));
$AddCoupon->setDateTo(new \DateTime($getDateTo));
$em->persist($AddCoupon);
$em->flush();
}
}catch (\Exception $e ){
$this->addFlash('error', 'Une erreur est survenu lors de la création des coupons, veuillez contacter notre support.');
}
}
}
fclose($file);
$this->addFlash('success', "Nous avons réussi a créer " .$countCouponCreate . " coupons");
return $this->redirectToRoute('couponAdministration');
}else{
$this->addFlash('error', "Ce systeme prend uniquement les fichiers csv");
return $this->redirectToRoute('couponAdministration');
}
}else{
$this->addFlash('error', "Nous n'avons pas trouver votre fichier");
return $this->redirectToRoute('couponAdministration');
}
}
}else{
return $this->redirectToRoute('dashboard');
}
}
/**
* @Route({
* "fr": "/acheteur/abonnementClient",
* "en": "/buyer/userSubscription",
* },
* name="abonnementClient")
*
* @Security("has_role('ROLE_ADMIN')")
* @Template("admin/user/userSubscription.html.twig")
*/
public function abonnementClient(Request $request, UserService $userServ, PaymentService $paymentServ){
$em = $this->getDoctrine()->getManager();
$user= $userServ->getuser();
$cart = $userServ->getCart();
$this->paymentServ = $paymentServ;
$twigData['shippingAddresses'] = $user->getValidShippingAddresses();
$mensuel = 16.49;
$annuel = 175;
$twigData['amountSubsciptionMensuel'] = $mensuel;
$twigData['amountSubsciptionAnnuel'] = $annuel;
$data=false;
$abonne = $user->getUserSubscriptionMaturin();
if (isset($_POST['act'])){
if($_POST['act'] == 'adding'){
$data = true;
}else if($_POST['act'] == 'editing'){
$data = true;
}
}
if ($this->getUser()->getUsername() == 'charlie@maturin.ca'){
if ($data == true){
$stripeToken = $request->request->get('stripeToken');
$shippingAddress = $request->request->get('shippingAddress');
$UserShippingLocation = $this->entityMana->getRepository(UserShippingLocation::class)->findOneBy(["id"=>$shippingAddress]);
$courrielUser = $request->request->get('emailSubscription');
$firstnameUser = $request->request->get('firstnameSubscription');
// $nameUser += ' ';
$lastnameUser = $request->request->get('lastnameSubscription');
// $typeSubscritpion = $request->request->get('lastnameSubscription');
$subscriptionChoice = $request->request->get('subscriptionOption');
$user->setFirstname($firstnameUser);
$user->setLastname($lastnameUser);
$em->persist($user);
$em->flush();
if($subscriptionChoice){
if($subscriptionChoice == 'abonnementMensuel'){
$price = $twigData['amountSubsciptionMensuel'];
}elseif ($subscriptionChoice == 'abonnementAnnuel') {
$price = $twigData['amountSubsciptionAnnuel'];
}elseif ($subscriptionChoice == 'false') {
$price = 0;
}
}else{
$price = $twigData['amountSubsciptionMensuel'];
}
$this->paymentServ->createMaturinPrimeSubscription($user, $price, $UserShippingLocation, $courrielUser, $stripeToken, $subscriptionChoice);
return $this->redirectToRoute('abonnementClient');
}
}else{
return $this->redirectToRoute('dashboard');
}
$twigData['abonne'] = $abonne;
return $twigData;
}
/**
* @Route({
* "fr": "/acheteur/metriqueDashboard",
* "en": "/buyer/metriqueDashboard",
* },
* name="sellerDashboard")
*
* @Security("has_role('ROLE_ADMIN')")
* @Template("admin/user/sellerDashboard.html.twig")
*/
public function metriqueDashboard(Request $request, UserService $userServ, PaymentService $paymentServ){
$em = $this->getDoctrine()->getManager();
$user = $userServ->getuser();
if ($this->getUser()->getIsBetaTester()){
$weekBefore = new \Datetime('last Monday');
$today = new \Datetime('now');
$endofWeek = new \Datetime('next Sunday');
$twigData['today'] = $today->format('Y-m-d');;
$twigData['endofWeekDate'] = $endofWeek->format('Y-m-d');;
if ($request->isMethod('post')) {
$twigData['today'] = $request->request->get('startDateChoice');
$twigData['endofWeekDate'] = $request->request->get('endDateChoice');
$weekBefore = $twigData['today'];
$today = $twigData['endofWeekDate'];
}
// Liste de toutes les commandes pour cette semaine
$orderListOfWeeks = $em->getRepository(Cart::class)->exporCartInfo($weekBefore, $today, $endofWeek);
$listLastCompanies = $em->getRepository(Company::class)->exportLastCompanyList();
$sumCartTotal = 0;
$sumCartMoy = 0;
$listOrderComplete = [];
$listProductinCart = null;
$listAbandonnedOrder = [];
$bestCityToOrder=null;
$twigData['bestCityToOrders'] = null;
$bestRoutesToOrder=null;
$twigData['bestRoutesToOrders'] = null;
$getListFirstProductInCart = [];
foreach ($orderListOfWeeks as $orderListOfWeek) {
if ($orderListOfWeek->getIsPaid() == true){
// Liste des paniers payés
$listOrderComplete[] = $orderListOfWeek;
$sumCartTotal += $orderListOfWeek->getTotal();
if ($orderListOfWeek->getShippingAddress() != null){
$bestCityToOrder[] = trim($orderListOfWeek->getShippingAddress()->getCity());
$bestRoutesToOrder[] = trim($orderListOfWeek->getRoutes());
}
}else{
// Liste des paniers abandonnés
$listAbandonnedOrder[] = $orderListOfWeek;
}
$listCartPorducts = $em->getRepository(CartProduct::class)->exporCartProductListe($orderListOfWeek->getId());
$getListFirstProductInCart[] = min($listCartPorducts);
foreach ($orderListOfWeek->getProducts() as $getProductList) {
$listPorductsArray[] = $getProductList;
$totalProductsLists[]= $getProductList->getProduct()->getId();
}
}
/*-------------Orders Informations-----------------------*/
// total order of the past week
$twigData['orderListOfWeeks'] = count($orderListOfWeeks);
// Pourcentage de commande abandonnée
if (count($listAbandonnedOrder) > 0){
$pourcentAbandonnedOrder = round(100 * (count($listAbandonnedOrder) / count($orderListOfWeeks)));
$twigData['AbandonnedOrder'] = count($listAbandonnedOrder);
$twigData['pourcentAbandonnedOrder'] = $pourcentAbandonnedOrder;
}else{
$twigData['AbandonnedOrder'] = 0;
$twigData['pourcentAbandonnedOrder'] = 0;
}
// $listUsersWithCartPaid = $em->getRepository(Cart::class)->getlistUsersWithCartPaid($weekBefore, $today, $endofWeek);
// $twigData['amountPaidPerUser'] = round($sumCartTotal / count($listUsersWithCartPaid),2);
// Pourcentage de commande Complète
$pourcentCompletedOrder = round(100 * (count($listOrderComplete)/count($orderListOfWeeks)));
$twigData['CompletedOrder'] = count($listOrderComplete);
$twigData['pourcentCompletedOrder'] = $pourcentCompletedOrder;
// Montant moyen de panier
if ($sumCartTotal){
$sumCartMoy = round($sumCartTotal / count($listOrderComplete),2);
}
$twigData['sumCartMoy'] = $sumCartMoy;
/*-------------Products Informations-----------------------*/
// Nombre de produits commandées
$twigData['getListFirstProductInCarts']=[];
$twigData['countlistPorductsArray'] = count($listPorductsArray);
$twigData['listPorductsArray'] = array_count_values($totalProductsLists);
arsort($twigData['listPorductsArray']);
foreach ($getListFirstProductInCart as $getFirstProduct) {
$twigData['getListFirstProductInCarts'][] = $getFirstProduct->getProduct()->getId();
if ($getFirstProduct->getProduct() != null){
$getCategoriesSeller[] = $getFirstProduct->getProduct()->getCategories()->getId();
if ($getFirstProduct->getProduct()->getSubCategory() != null){
$getCategoriesSeller[] = $getFirstProduct->getProduct()->getSubCategory()->getId();
}
}
}
$twigData['getListFirstProductInCarts'] = array_count_values($twigData['getListFirstProductInCarts']);
arsort($twigData['getListFirstProductInCarts']);
//Meilleurs catégories ou sous catégorie
$twigData['getCategoriesSellers'] = array_count_values($getCategoriesSeller);
arsort($twigData['getCategoriesSellers']);
// dd($twigData['getCategoriesSellers']);
/*-------------Company Informations-----------------------*/
$twigData['listLastCompanies'] = $listLastCompanies;
/*-------------Logistique Informations-----------------------*/
if ($bestCityToOrder){
$twigData['bestCityToOrders'] = array_count_values($bestCityToOrder);
arsort($twigData['bestCityToOrders']);
}
if ($bestRoutesToOrder){
$twigData['bestRoutesToOrders'] = array_count_values($bestRoutesToOrder);
arsort($twigData['bestRoutesToOrders']);
}
}else{
return $this->redirectToRoute('dashboard');
}
return $twigData;
}
}