src/Controller/UserController.php line 155

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use FOS\UserBundle\Model\UserManagerInterface;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  6. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  7. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  13. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  14. use Symfony\Component\HttpFoundation\Session\Session;
  15. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  16. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  17. use Symfony\Component\HttpFoundation\File\UploadedFile;
  18. use App\Entity\Product;
  19. use App\Entity\User;
  20. use App\Entity\Cart;
  21. use App\Entity\CartProduct;
  22. use App\Entity\Company;
  23. use App\Entity\CartCoupon;
  24. use App\Entity\UserVariables;
  25. use App\Entity\UserViewedProduct;
  26. use App\Entity\UserFavorite;
  27. use App\Entity\UserShippingLocation;
  28. use App\Entity\City;
  29. use App\Entity\Conservation;
  30. use App\Entity\Region;
  31. use App\Entity\UserSurvey;
  32. use App\Form\UserSurveyType;
  33. use App\Service\UserService;
  34. use App\Service\ImageService;
  35. use App\Service\ProductService;
  36. use App\Form\UserType;
  37. use App\Service\PaymentService;
  38. use DateTime;
  39. class UserController extends AbstractController
  40. {
  41.     /**
  42.      * @var UserService
  43.      */
  44.     private $userServ;
  45.     /**
  46.      * @var EntityManagerInterface
  47.      */
  48.     private $entityMana;
  49.     /**
  50.      * @var UserManagerInterface
  51.      */
  52.     private $userManager;
  53.     /**
  54.      * @var ImageService
  55.      */
  56.     private $imageServ;
  57.     public function __construct(UserService $userEntityManagerInterface $emImageService $imageUserManagerInterface $userManager){
  58.         $this->userServ $user;
  59.         $this->entityMana $em;
  60.         $this->userManager $userManager;
  61.         $this->imageServ $image;
  62.     }
  63.     /**
  64.      * @Route({
  65.      *          "fr": "/par/{email}",
  66.      *          "en": "/by/{email}",
  67.      *      },
  68.      *      name="referredBy")
  69.      */
  70.     public function referredBy(User $user){
  71.         $session = new Session();
  72.         //if(empty($session->get('referredBy')))
  73.         $session->set('referredBy'$user->getId());
  74.         return $this->redirectToRoute('fos_user_registration_register');
  75.     }
  76.     /**
  77.      * @Route({
  78.      *          "fr": "/acheteur/inviterunami",
  79.      *          "en": "/buyer/inviteafriend",
  80.      *      },
  81.      *      name="inviteAFriend")
  82.      *
  83.      * @Security("has_role('ROLE_ADMIN')")
  84.      * @Template("admin/user/inviteAFriend.html.twig")
  85.      */
  86.     public function inviteAFriend(Request $requestUserService $userServ){
  87.         $twigData = array();
  88.         $form $this->createFormBuilder(null)
  89.             ->add('email'EmailType::class, [
  90.                 'label' => 'Courriel de votre ami'
  91.             ])
  92.             ->add('submit'SubmitType::Class, [
  93.                 'label' => 'Envoyer',
  94.                 'attr' => [
  95.                     'class' => 'm-t-5'
  96.                 ]
  97.             ])->getForm();
  98.         $form->handleRequest($request);
  99.         if($form->isSubmitted() && $form->isValid()){
  100.             $email =  $this->get('twig')->render('emails/inviteAFriend.html.twig', array('user' => $userServ->getUser(), 'hideInviteAFriend' => true));
  101.             $userServ->sendEmail('Invitation de '.$userServ->getUser()->getDisplayName().' pour un rabais de 10% sur votre premier achat'$emailfalse$form->get('email')->getData());
  102.             $this->addFlash('success''Un courriel a été envoyé a votre ami!');
  103.             return $this->redirectToRoute('inviteAFriend');
  104.         }else{
  105.             foreach($form->getErrors(true) as $error){
  106.                 $this->addFlash('error'$error->getMessage());
  107.             }
  108.         }
  109.         $twigData['form']= $form->createView();
  110.         return $twigData;
  111.     }
  112.     /**
  113.      * @Route({
  114.      *          "fr": "/acheteur/controle/",
  115.      *          "en": "/buyer/dashboard/",
  116.      *      },
  117.      *      name="dashboard")
  118.      *
  119.      * @Security("has_role('ROLE_ADMIN')")
  120.      * @Template("admin/dashboardUser.html.twig")
  121.      */
  122.     public function dashboard(UserService $userServProductService $productServ){
  123.         $twigData = array();
  124.         $twigData['lastViewedProducts'] = $this->entityMana->getRepository(UserViewedProduct::class)->findLastViewed($this->userServ->getUser(), 5);
  125.         $twigData['favoriteProducts'] = $this->entityMana->getRepository(UserFavorite::class)->findLatest($this->userServ->getUser(), 5);
  126.         $twigData['productsMayLike'] = $productServ->getProductsUserMayLike();
  127.         // $user = $this->userServ->getUser();
  128.         // $this->userServ->transferSession($user); 
  129.         return $twigData;
  130.     }
  131.     /**
  132.      * @Route("/API/removeFavorite/{id}",
  133.      *      options = { "expose" = true },
  134.      *      name = "removeFavorite"
  135.      *  )
  136.      */
  137.     public function removeFavorite(Product $productSessionInterface $session){
  138.         $response = new jsonresponse();
  139.         $user $this->userServ->getUser();
  140.         if(empty($user)){
  141.             //Ok let's do some hack and use the cookie
  142.             $favs $session->get('favorites');
  143.             if(empty($favs))
  144.                 $favs = array();
  145.             if(in_array($product->getId(), $favs->toArray())){
  146.                 foreach($favs as $k => $f){
  147.                     if($f == $product->getId()){
  148.                         unset($favs[$k]);
  149.                         break;
  150.                     }
  151.                 }
  152.                 $html ='';
  153.             }
  154.             $favs $session->set('favorites'$favs);
  155.         }else{
  156.             if($user->hasFavorite($product)){
  157.                 $user->removeFavorite($user->hasFavorite($product));
  158.                 $this->entityMana->persist($user);
  159.                 $this->entityMana->flush();
  160.             }
  161.         }
  162.         $response->setdata(array(
  163.             'success' => true,
  164.         ));
  165.         return $response;
  166.     }
  167.     /**
  168.      * @Route("/API/toggleFavorite/{id}",
  169.      *      options = { "expose" = true },
  170.      *      name = "toggleFavorite"
  171.      *  )
  172.      */
  173.     public function toggleFavorite(Product $productUrlGeneratorInterface $routerSessionInterface $session){
  174.         $response = new jsonresponse();
  175.         $user $this->userServ->getUser();
  176.         $html '';
  177.         if(empty($user)){
  178.             //Ok let's do some hack and use the cookie
  179.             $favs $session->get('favorites');
  180.             if(empty($favs))
  181.                 $favs = array();
  182.             if(!in_array($product->getId(), $favs->toArray())){
  183.                 $html '
  184.                     <div class="row">
  185.                         <div class="col-10 nopadding">
  186.                             <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().'">
  187.                                 <div class="notify-icon"><img class="" src="'.$router->generate('getImageAsCroppedThumb', array('id'=> $product->getMainImage()->getId(), 'height'=> '35''width'=> '35')).'"></div>
  188.                                 <p class="notify-details">'.$product->getName().'<small class="text-muted">'.$product->getCompany()->getName().'</small></p>
  189.                             </a>
  190.                         </div>
  191.                         <div class="col-2 nopadding">
  192.                             <a href="#" class="remove-favorite" data-id="'.$product->getId().'">
  193.                                 <i class="ion-close" style="font-size: large; color: darkgray; padding-top: 10px;"></i>
  194.                             </a>
  195.                         </div>
  196.                     </div>';
  197.                 $favs[]=$product->getId();
  198.                 $favs $session->set('favorites'$favs);
  199.                 $response->setdata(array(
  200.                     'success' => true,
  201.                     'html' => $html
  202.                 ));
  203.             }
  204.         }else{
  205.             if(!$user->hasFavorite($product)){
  206.                 $favorite = new UserFavorite();
  207.                 $favorite->setUser($user);
  208.                 $favorite->setProduct($product);
  209.                 $this->entityMana->persist($favorite);
  210.                 $this->entityMana->flush();
  211.                 $html '
  212.                     <div class="row">
  213.                         <div class="col-10 nopadding">
  214.                             <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().'">
  215.                                 <div class="notify-icon"><img class="" src="'.$router->generate('getImageAsCroppedThumb', array('id'=> $product->getMainImage()->getId(), 'height'=> '35''width'=> '35')).'"></div>
  216.                                 <p class="notify-details">'.$product->getName().'<small class="text-muted">'.$product->getCompany()->getName().'</small></p>
  217.                             </a>
  218.                         </div>
  219.                         <div class="col-2 nopadding">
  220.                             <a href="#" class="remove-favorite" data-id="'.$product->getId().'">
  221.                                 <i class="ion-close" style="font-size: large; color: darkgray; padding-top: 10px;"></i>
  222.                             </a>
  223.                         </div>
  224.                     </div>';
  225.                 $response->setdata(array(
  226.                     'success' => true,
  227.                     'html' => $html
  228.                 ));
  229.             }
  230.         }
  231.         return $response;
  232.     }
  233.     /**
  234.      * @Route("/API/setUserVariable/{varname}/{category}",
  235.      *      options = { "expose" = true },
  236.      *      name = "setUserVariable",
  237.      *      defaults = {"category" = false }
  238.      *  )
  239.      */
  240.     public function setUserVariable($varname$categoryRequest $request){
  241.         $save false;
  242.         $success false;
  243.         $var false;
  244.         if($this->userServ->getUser())
  245.             $var $this->userServ->getUser()->getVariable($varname$category);
  246.         if($var){
  247.             if($request->get('value')){
  248.                 $var->setValue($request->get('value'));
  249.                 $this->entityMana->persist($var);
  250.                 $save true;
  251.             }
  252.         }else{
  253.             $var = new UserVariables();
  254.             $var->setName($varname);
  255.             if($category)
  256.                 $var->setCategory($category);
  257.             $var->setValue($request->get('value'));
  258.             $this->entityMana->persist($var);
  259.             $user $this->userServ->getUser()->addVariable($var);
  260.             $this->entityMana->persist($this->userServ->getUser());
  261.             $save true;
  262.         }
  263.         if($save){
  264.             $this->entityMana->flush();
  265.             $success true;
  266.         }
  267.         $response = new jsonresponse();
  268.         $response->setdata(array(
  269.             'success' => $success,
  270.             'value' => $var
  271.         ));
  272.         return $response;
  273.     }
  274.     /**
  275.      * @Route("/API/getUserVariable/{varname}/{category}",
  276.      *      options = { "expose" = true },
  277.      *      name = "getUserVariable",
  278.      *      defaults = {"category" = false }
  279.      *  )
  280.      */
  281.     public function getUserVariable($varname$category){
  282.         $user $this->userServ->getUser();
  283.         if(empty($user)){
  284.             return new JsonResponse();
  285.         }
  286.         $var $user->getVariable($varname$category);
  287.         if($var)
  288.             $success true;
  289.         else
  290.             $success false;
  291.         $response = new jsonresponse();
  292.         $response->setdata(array(
  293.             'success' => $success,
  294.             'value' => $var
  295.         ));
  296.         return $response;
  297.     }
  298.     /**
  299.      * @Route({
  300.      *              "fr": "/acheteur/profile/editer",
  301.      *              "en": "/buyer/profile/edit"
  302.      *        },
  303.      *        name="userProfile")
  304.      * @Template("admin/user/profile.html.twig")
  305.      * TODO: Change this to use a Image entity instead
  306.      */
  307.     public function userProfile(Request $request)
  308.     {
  309.         $twigData = array();
  310.         $user $this->userServ->getUser();
  311.         $form $this->createForm(UserType::class, $user);
  312.         $twigData['editUserForm'] = $form->createView();
  313.         $twigData['shippingAddresses'] = $user->getValidShippingAddresses();
  314.         if ($request->get("action") == "update_shippingAddress") {
  315.           $shippingAddress $request->get("shippingAddress");
  316.           if ($shippingAddress == "none") {
  317.             $this->addFlash('error''Veuillez choisir une adresse.');
  318.             return $this->redirectToRoute('userProfile');
  319.           } else {
  320.             $shippingAddress_name $request->get("shippingAddress_name");
  321.             $shippingAddress_phone $request->get("shippingAddress_phone");
  322.             $shippingAddress_civicNumber $request->get("shippingAddress_civicNumber");
  323.             $shippingAddress_streetName $request->get("shippingAddress_streetName");
  324.             $shippingAddress_unit $request->get("shippingAddress_unit");
  325.             $shippingAddress_province $request->get("shippingAddress_province");
  326.             $shippingAddress_citySelectQC $request->get("shippingAddress_citySelectQC");
  327.             $shippingAddress_cityInputAny $request->get("shippingAddress_cityInputAny");
  328.             $shippingAddress_zipCode $request->get("shippingAddress_zipCode");
  329.             $shippingAddress_city $shippingAddress_citySelectQC;
  330.             if ($shippingAddress_province == "QC") {
  331.                 $city $this->entityMana->getRepository(City::class)->findOneBy(["id"=>$shippingAddress_citySelectQC]);
  332.                 if ($city) {
  333.                   $shippingAddress_city $city->getName();
  334.                 }
  335.             } else if ($shippingAddress_province == "ON"){
  336.                 $shippingAddress_citySelectON $request->get("shippingAddress_citySelectON");
  337.                 $city $this->entityMana->getRepository(City::class)->findOneBy(["name"=>$shippingAddress_citySelectON]);
  338.                 if ($city) {
  339.                   $shippingAddress_city $city->getName();
  340.                 }
  341.             }else {
  342.                 $shippingAddress_city $shippingAddress_cityInputAny;
  343.             }
  344.             $UserShippingLocation $this->entityMana->getRepository(UserShippingLocation::class)->findOneBy(["id"=>$shippingAddress]);
  345.             if ($UserShippingLocation) {
  346.               $UserShippingLocation->setName($shippingAddress_name);
  347.               $UserShippingLocation->setPhone($shippingAddress_phone);
  348.               $UserShippingLocation->setCivicNumber($shippingAddress_civicNumber);
  349.               $UserShippingLocation->setStreetName($shippingAddress_streetName);
  350.               $UserShippingLocation->setUnit($shippingAddress_unit);
  351.               $UserShippingLocation->setProvince($shippingAddress_province);
  352.               $UserShippingLocation->setZipCode($shippingAddress_zipCode);
  353.               $UserShippingLocation->setCity($shippingAddress_city);
  354.               $this->entityMana->persist($UserShippingLocation);
  355.               $this->entityMana->flush();
  356.             }
  357.           }
  358.           $this->addFlash('success''Votre profil a été modifié avec succès.');
  359.           return $this->redirectToRoute('userProfile');
  360.         }
  361.         $form->handleRequest($request);
  362.         if($form->isSubmitted() && $form->isValid()){
  363.             $file $user->getProfileImage();
  364.             $userFile $request->files->get('user');
  365.             /*
  366.              * If we have a image we Upload it and save it in the user
  367.              */
  368.             if(!empty($userFile['profileImage'])){
  369.                 $file $userFile['profileImage'];
  370.                 $image $this->imageServ->saveUploadedFile($file'profile');
  371.                 $user->setProfileImage($image);
  372.             }
  373.             /*
  374.              * Check if a new password was requested
  375.              */
  376.             $userForm $request->get('user');
  377.             if(!empty($userForm['plainPassword'])){
  378.                 $user->setPlainPassword($userForm['plainPassword']['first']);
  379.                 $this->userManager->updatePassword($user);
  380.             }
  381.             //Saving in the database
  382.             $this->entityMana->persist($user);
  383.             $this->entityMana->flush();
  384.             $this->userManager->updateUser($user);
  385.             $this->addFlash('success''Votre profil a été modifié avec succès.');
  386.             return $this->redirectToRoute('userProfile');
  387.         }else{
  388.             foreach($form->getErrors(true) as $error){
  389.                 $this->addFlash('error'$error->getMessage());
  390.             }
  391.         }
  392.         $twigData['user'] = $user;
  393.         return $twigData;
  394.     }
  395.     /**
  396.      * @Route({
  397.      *          "fr": "/acheteur/mesProduits",
  398.      *          "en": "/buyer/myProducts",
  399.      *      },
  400.      *      name="myProducts")
  401.      *
  402.      * @Security("has_role('ROLE_ADMIN')")
  403.      * @Template("admin/user/myProducts.html.twig")
  404.      */
  405.     public function myProducts(Request $requestUserService $userServ){
  406.         $twigData = array();
  407.         $twigData['userPaidProducts']=false;
  408.         $user$userServ->getuser();
  409.         if($user){
  410.           $twigData['userPaidProducts'] = $user->getAllCartsProducts();
  411.         }
  412.         $twigData['productsAmount'] = count($twigData['userPaidProducts']);
  413.         $twigData['noPagination'] = true;
  414.         return $twigData;
  415.     }
  416.      /**
  417.      * @Route({
  418.      *          "fr": "/acheteur/sondage/{id}",
  419.      *          "en": "/buyer/survey/{id}",
  420.      *      },
  421.      *      name="survey")
  422.      *
  423.      * @Security("has_role('ROLE_ADMIN')")
  424.      * @Template("admin/user/survey.html.twig")
  425.      */
  426.     public function survey($id,Request $requestUserService $userServ){
  427.         $user$this->userServ->getUser();
  428.         if($id=="2"){// show survey in the next week
  429.             if(!$user->getNextUserSurveyTime()){
  430.                 $user->setNextUserSurveyTime(new DateTime("+1 week"));
  431.                 $em $this->getDoctrine()->getManager();
  432.                 $em->persist($user);
  433.                 $em->flush();
  434.             }
  435.             return $this->redirectToRoute('home');
  436.         }
  437.         if($id=="3"){//dont show survey for the user
  438.             $user$this->userServ->getUser();
  439.             $user->setDontShowSurvey(true);
  440.             $em $this->getDoctrine()->getManager();
  441.             $em->persist($user);
  442.             $em->flush();
  443.             return $this->redirectToRoute('home');
  444.         }
  445.         $twigData = array();
  446.         $user $userServ->getUser();
  447.         if($user->getUserSurvey())
  448.             $userSurvey $user->getUserSurvey();
  449.         else
  450.             $userSurvey = new UserSurvey();
  451.         $formSurvey $this->createForm(UserSurveyType::class, $userSurvey);
  452.         $formSurvey->handleRequest($request);
  453.         if($formSurvey->isSubmitted() && $formSurvey->isValid()){
  454.             $em $this->getDoctrine()->getManager();
  455.             $userSurvey->setUser($user);
  456.             $em->persist($userSurvey);
  457.             $em->flush();
  458.             $this->addFlash('success''Informations enregistré avec succès Merci');
  459.             $this->addFlash('focus''form[name="user_survey"]');
  460.             return $this->redirectToRoute('survey',array('id'=>1));
  461.         }
  462.         $twigData['forms']['survey'] = $formSurvey->createView();
  463.         $twigData['user']= $user ;
  464.         return $twigData;
  465.     }
  466.      /**
  467.      * @Route({
  468.      *          "fr": "/acheteur/mesProduitsListes",
  469.      *          "en": "/buyer/myProductsLists",
  470.      *      },
  471.      *      name="myProductsLists")
  472.      *
  473.      * @Security("has_role('ROLE_ADMIN')")
  474.      * @Template("frontend/myProductsListsFrontEnd.html.twig")
  475.      */
  476.     public function myProductsFront(Request $requestUserService $userServ){
  477.         $twigData = array();
  478.         $twigData['userPaidProducts']=false;
  479.         $user$userServ->getuser();
  480.         if($user){
  481.           $twigData['availableProducts'] = $user->getAllCartsProducts();
  482.         }
  483.         $twigData['productsAmount'] = count($twigData['availableProducts']);
  484.         $twigData['amountProductsPerCategories'] = array(
  485.             'total' => count($twigData['availableProducts'])
  486.         );
  487.         $twigData['productCategories'] = array();
  488.         foreach($user->getAllCartsProducts() as $key => $product){
  489.             $cat $product->getCategory();
  490.             if(empty($twigData['productCategories'][$cat->getId()]))
  491.                 $twigData['productCategories'][$cat->getId()] =
  492.                     array(
  493.                         'id' => $key,
  494.                         'name' => $cat,
  495.                         'amount' => 1
  496.                     );
  497.             else{
  498.                 $twigData['productCategories'][$cat->getId()]['amount']+=1;
  499.             }
  500.         }
  501.         return $twigData;
  502.     }
  503.  /**
  504.      * @Route({
  505.      *          "fr": "/Supprime/Adresse/{id}",
  506.      *          "en": "/Remove/Adress/{id}",
  507.      *      },
  508.      *      name="removeAdressChoose")
  509.      *
  510.      */
  511.     public function removeAdressChoose(Request $requestUserService $userServ$id){
  512.         $userDeleteAdress $request->query->get('id');
  513.         $em $this->getDoctrine()->getManager();
  514.         $userAdresse $this->entityMana->getRepository(UserShippingLocation::class)->findOneBy(["id"=>$userDeleteAdress]);
  515.             if ($userAdresse != null) {
  516.                 $userId $userAdresse->getUser()->getId();
  517.                 $usertest $userAdresse->getUser();
  518.                 if ($userId != null) {
  519.                     $userAdresse->setUser(null);
  520.                     
  521.                     $em->persist($userAdresse);
  522.                     $em->flush();
  523.                     // dd($userAdresse);
  524.                     return $this->redirectToRoute('userProfile'); 
  525.                 }
  526.             }
  527.             
  528.      }
  529.       /**
  530.      * @Route({
  531.      *          "fr": "/acheteur/ajoutCoupon",
  532.      *          "en": "/buyer/AddCode",
  533.      *      },
  534.      *      name="couponAdministration")
  535.      *
  536.      * @Security("has_role('ROLE_ADMIN')")
  537.      * @Template("admin/user/couponAdministration.html.twig")
  538.      */
  539.     public function couponAdministration(Request $request){
  540.        if ($this->getUser()->getUsername() == 'info@maturin.ca'){
  541.          
  542.         if($request->isMethod('post')){
  543.         
  544.         $getAmount $request->request->get('Amount');  
  545.         $getDateFrom $request->request->get('DateFrom'); 
  546.         $getDateTo $request->request->get('DateTo'); 
  547.         $getTypeCoupon $request->request->get('selectTypeCoupon'); 
  548.         $couponlist $request->files->get('couponListFile');
  549.     //    dd($getAmount);
  550.         if (empty($getAmount)){
  551.             $this->addFlash('error'"votre montant n'est pas correct");
  552.             return $this->redirectToRoute('couponAdministration');
  553.         }
  554.         if (empty($getDateFrom)){
  555.             $this->addFlash('error'"votre date de début de validité n'est pas correct");
  556.             return $this->redirectToRoute('couponAdministration');
  557.         }
  558.         if (empty($getDateFrom)){
  559.             $this->addFlash('error'"votre date d'expiration n'est pas correct");
  560.             return $this->redirectToRoute('couponAdministration');
  561.         }
  562.         if (isset($couponlist)){
  563.             $getExtension explode('.'$couponlist->getClientOriginalName());
  564.             // dd($getExtension);
  565.             if ($getExtension[1] == 'csv'){
  566.             $file fopen($couponlist"rw");
  567.             $countCouponCreate =0;
  568.      
  569.             while (!feof($file) ) {
  570.               $lines[] = fgetcsv($file1500" ");
  571.             }
  572.             foreach ( (array)$lines as $line) {
  573.             
  574.                 $em $this->getDoctrine()->getManager();
  575.                 // $valueCoupon = $line;
  576.                 foreach((array)$line as $cV){   
  577.     
  578.                     try{
  579.                 $cartCoupon $em->getRepository(CartCoupon::class)->findBy(["code" => $cV]);
  580.        
  581.                  if (empty($cartCoupon) && !empty($cV)){
  582.                     $countCouponCreate +=1;
  583.                     $AddCoupon = new CartCoupon();
  584.                     $AddCoupon->setOneTimeOnly(1);
  585.                     $AddCoupon->setType($getTypeCoupon);
  586.                     $AddCoupon->setAmount($getAmount);
  587.                     $AddCoupon->setCode($cV);
  588.                     $AddCoupon->setDateFrom(new \DateTime($getDateFrom));
  589.                     $AddCoupon->setDateTo(new \DateTime($getDateTo));
  590.                     $em->persist($AddCoupon);
  591.                     $em->flush();
  592.                  }
  593.                 }catch (\Exception $e ){
  594.                     $this->addFlash('error''Une erreur est survenu lors de la création des coupons, veuillez contacter notre support.');
  595.                 }
  596.             }
  597.         }
  598.             fclose($file);
  599.             $this->addFlash('success'"Nous avons réussi a créer " .$countCouponCreate " coupons");
  600.             return $this->redirectToRoute('couponAdministration');
  601.             
  602.         }else{
  603.                 $this->addFlash('error'"Ce systeme prend uniquement les fichiers csv");
  604.                 return $this->redirectToRoute('couponAdministration');
  605.             }
  606.         }else{
  607.             $this->addFlash('error'"Nous n'avons pas trouver votre fichier");
  608.             return $this->redirectToRoute('couponAdministration');
  609.         }
  610.         
  611.         }
  612.     }else{
  613.         return $this->redirectToRoute('dashboard');
  614.     }
  615.     }
  616.    
  617.     /**
  618.      * @Route({
  619.      *          "fr": "/acheteur/abonnementClient",
  620.      *          "en": "/buyer/userSubscription",
  621.      *      },
  622.      *      name="abonnementClient")
  623.      *
  624.      * @Security("has_role('ROLE_ADMIN')")
  625.      * @Template("admin/user/userSubscription.html.twig")
  626.      */
  627.     public function abonnementClient(Request $requestUserService $userServPaymentService $paymentServ){
  628.         $em $this->getDoctrine()->getManager();
  629.         $user$userServ->getuser();
  630.         $cart $userServ->getCart();
  631.         $this->paymentServ $paymentServ;
  632.         $twigData['shippingAddresses'] = $user->getValidShippingAddresses();
  633.         $mensuel 16.49;
  634.         $annuel 175;
  635.         $twigData['amountSubsciptionMensuel'] = $mensuel;
  636.         $twigData['amountSubsciptionAnnuel'] = $annuel;
  637.          $data=false;
  638.        $abonne =  $user->getUserSubscriptionMaturin();
  639.        if (isset($_POST['act'])){
  640.             if($_POST['act'] == 'adding'){
  641.                 $data true;
  642.             }else if($_POST['act'] == 'editing'){
  643.                 $data true;
  644.             }
  645.         
  646.         }
  647.         if ($this->getUser()->getUsername() == 'charlie@maturin.ca'){
  648.             if ($data == true){
  649.                 
  650.                     $stripeToken $request->request->get('stripeToken');
  651.                         $shippingAddress $request->request->get('shippingAddress');
  652.                         $UserShippingLocation $this->entityMana->getRepository(UserShippingLocation::class)->findOneBy(["id"=>$shippingAddress]);
  653.                         $courrielUser $request->request->get('emailSubscription');
  654.                         $firstnameUser $request->request->get('firstnameSubscription');
  655.                         // $nameUser += ' ';
  656.                         $lastnameUser $request->request->get('lastnameSubscription');
  657.                         // $typeSubscritpion = $request->request->get('lastnameSubscription');
  658.                         $subscriptionChoice $request->request->get('subscriptionOption');
  659.                         $user->setFirstname($firstnameUser);
  660.                         $user->setLastname($lastnameUser);
  661.                         $em->persist($user);
  662.                          $em->flush();
  663.                         if($subscriptionChoice){
  664.                             if($subscriptionChoice == 'abonnementMensuel'){
  665.                                 $price $twigData['amountSubsciptionMensuel'];
  666.                             }elseif ($subscriptionChoice == 'abonnementAnnuel') {
  667.                                 $price $twigData['amountSubsciptionAnnuel'];
  668.                             }elseif ($subscriptionChoice == 'false') {
  669.                                 $price 0;
  670.                             }
  671.                         }else{
  672.                             $price $twigData['amountSubsciptionMensuel'];
  673.                         }
  674.                  
  675.                         $this->paymentServ->createMaturinPrimeSubscription($user$price$UserShippingLocation$courrielUser$stripeToken$subscriptionChoice);
  676.                         return $this->redirectToRoute('abonnementClient');
  677.             }
  678.         
  679.         }else{
  680.             return $this->redirectToRoute('dashboard');
  681.         }
  682.         $twigData['abonne'] = $abonne;
  683.         return $twigData;
  684.         
  685.     }
  686.      /**
  687.      * @Route({
  688.      *          "fr": "/acheteur/metriqueDashboard",
  689.      *          "en": "/buyer/metriqueDashboard",
  690.      *      },
  691.      *      name="sellerDashboard")
  692.      *
  693.      * @Security("has_role('ROLE_ADMIN')")
  694.      * @Template("admin/user/sellerDashboard.html.twig")
  695.      */
  696.     public function metriqueDashboard(Request $requestUserService $userServPaymentService $paymentServ){
  697.         $em $this->getDoctrine()->getManager();
  698.         $user $userServ->getuser();
  699.         
  700.       
  701.         if ($this->getUser()->getIsBetaTester()){
  702.             $weekBefore = new \Datetime('last Monday');
  703.             $today = new \Datetime('now');
  704.             $endofWeek = new \Datetime('next Sunday');
  705.             $twigData['today'] = $today->format('Y-m-d');;
  706.             $twigData['endofWeekDate'] = $endofWeek->format('Y-m-d');;
  707.             if ($request->isMethod('post')) {
  708.                 $twigData['today'] = $request->request->get('startDateChoice');
  709.                 $twigData['endofWeekDate'] =  $request->request->get('endDateChoice');
  710.                 $weekBefore $twigData['today'];
  711.                 $today $twigData['endofWeekDate'];
  712.             }
  713.             // Liste de toutes les commandes pour cette semaine
  714.             $orderListOfWeeks $em->getRepository(Cart::class)->exporCartInfo($weekBefore$today$endofWeek);
  715.             $listLastCompanies $em->getRepository(Company::class)->exportLastCompanyList();
  716.            
  717.             $sumCartTotal 0;
  718.             $sumCartMoy 0;
  719.             $listOrderComplete = [];
  720.             $listProductinCart null;
  721.             $listAbandonnedOrder = [];
  722.             $bestCityToOrder=null;
  723.             $twigData['bestCityToOrders'] = null;
  724.             $bestRoutesToOrder=null;
  725.             $twigData['bestRoutesToOrders'] = null;
  726.             $getListFirstProductInCart = [];
  727.             
  728.             foreach ($orderListOfWeeks as $orderListOfWeek) {
  729.                 if ($orderListOfWeek->getIsPaid() == true){
  730.                     // Liste des paniers payés
  731.                     $listOrderComplete[] = $orderListOfWeek;
  732.                     $sumCartTotal += $orderListOfWeek->getTotal();
  733.                     if ($orderListOfWeek->getShippingAddress() != null){
  734.                         $bestCityToOrder[] = trim($orderListOfWeek->getShippingAddress()->getCity());
  735.                         $bestRoutesToOrder[] = trim($orderListOfWeek->getRoutes());
  736.                     }
  737.                 }else{
  738.                     // Liste des paniers abandonnés
  739.                     $listAbandonnedOrder[] = $orderListOfWeek;
  740.                 }
  741.                 $listCartPorducts $em->getRepository(CartProduct::class)->exporCartProductListe($orderListOfWeek->getId());
  742.                 $getListFirstProductInCart[] = min($listCartPorducts);
  743.                 foreach ($orderListOfWeek->getProducts() as $getProductList) {
  744.                     $listPorductsArray[] = $getProductList;
  745.                     $totalProductsLists[]= $getProductList->getProduct()->getId();
  746.                 }
  747.             }
  748.          
  749.             /*-------------Orders Informations-----------------------*/
  750.             // total order of the past week
  751.             $twigData['orderListOfWeeks'] = count($orderListOfWeeks);
  752.             // Pourcentage de commande abandonnée
  753.             if (count($listAbandonnedOrder) > 0){
  754.                 $pourcentAbandonnedOrder round(100 * (count($listAbandonnedOrder) / count($orderListOfWeeks)));
  755.                 $twigData['AbandonnedOrder'] = count($listAbandonnedOrder);
  756.                 $twigData['pourcentAbandonnedOrder'] = $pourcentAbandonnedOrder;
  757.             }else{
  758.                 $twigData['AbandonnedOrder'] = 0;
  759.                 $twigData['pourcentAbandonnedOrder'] = 0;
  760.             }
  761.             // $listUsersWithCartPaid = $em->getRepository(Cart::class)->getlistUsersWithCartPaid($weekBefore, $today, $endofWeek);
  762.             // $twigData['amountPaidPerUser'] = round($sumCartTotal / count($listUsersWithCartPaid),2);
  763.             // Pourcentage de commande Complète
  764.             $pourcentCompletedOrder round(100 * (count($listOrderComplete)/count($orderListOfWeeks)));
  765.             $twigData['CompletedOrder'] = count($listOrderComplete);
  766.             $twigData['pourcentCompletedOrder'] = $pourcentCompletedOrder;
  767.             // Montant moyen de panier
  768.             if ($sumCartTotal){
  769.                 $sumCartMoy round($sumCartTotal count($listOrderComplete),2);
  770.             }
  771.             $twigData['sumCartMoy'] = $sumCartMoy;
  772.             /*-------------Products Informations-----------------------*/
  773.             // Nombre de produits commandées
  774.             $twigData['getListFirstProductInCarts']=[];
  775.             $twigData['countlistPorductsArray'] = count($listPorductsArray);
  776.             $twigData['listPorductsArray'] = array_count_values($totalProductsLists);
  777.             arsort($twigData['listPorductsArray']);
  778.             foreach ($getListFirstProductInCart as $getFirstProduct) {
  779.                     $twigData['getListFirstProductInCarts'][] = $getFirstProduct->getProduct()->getId();
  780.                     if ($getFirstProduct->getProduct() != null){
  781.                         $getCategoriesSeller[] = $getFirstProduct->getProduct()->getCategories()->getId();
  782.                         if ($getFirstProduct->getProduct()->getSubCategory() != null){
  783.                             $getCategoriesSeller[] = $getFirstProduct->getProduct()->getSubCategory()->getId();
  784.                         }
  785.                     }
  786.             }
  787.             $twigData['getListFirstProductInCarts'] = array_count_values($twigData['getListFirstProductInCarts']);
  788.             arsort($twigData['getListFirstProductInCarts']);
  789.             //Meilleurs catégories ou sous catégorie
  790.             $twigData['getCategoriesSellers'] =  array_count_values($getCategoriesSeller);
  791.             arsort($twigData['getCategoriesSellers']);
  792.             // dd($twigData['getCategoriesSellers']);
  793.             /*-------------Company Informations-----------------------*/
  794.             $twigData['listLastCompanies'] = $listLastCompanies;
  795.             /*-------------Logistique Informations-----------------------*/
  796.             if ($bestCityToOrder){
  797.                 $twigData['bestCityToOrders'] =  array_count_values($bestCityToOrder);
  798.                 arsort($twigData['bestCityToOrders']);
  799.             }
  800.             if ($bestRoutesToOrder){
  801.                 $twigData['bestRoutesToOrders'] =  array_count_values($bestRoutesToOrder);
  802.                 arsort($twigData['bestRoutesToOrders']);
  803.             }
  804.         }else{
  805.             return $this->redirectToRoute('dashboard');
  806.         }
  807.         return $twigData;
  808.     }
  809. }