src/Flexy/FrontBundle/Controller/MyAccountController.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Flexy\FrontBundle\Controller;
  3. use App\Entity\User;
  4. use App\Flexy\FrontBundle\Form\Customer\CustomerAddressType;
  5. use App\Flexy\FrontBundle\Form\RegistrationCustomerPasswordFormType;
  6. use App\Flexy\FrontBundle\Form\RegistrationCustomerFormType;
  7. use App\Flexy\FrontBundle\Form\RegistrationCustomerProfilFormType;
  8. use App\Flexy\FrontBundle\Form\RegistrationVendorFormType;
  9. use App\Flexy\FrontBundle\Form\RegistrationEntrepreneurFormType;
  10. use App\Flexy\ShopBundle\Entity\Customer\Customer;
  11. use App\Flexy\ShopBundle\Form\Product\ProductType;
  12. use App\Flexy\ShopBundle\Form\Order\ReturnOrderType;
  13. use App\Flexy\ShopBundle\Entity\Customer\CustomerAddress;
  14. use App\Flexy\ShopBundle\Entity\Order\Order;
  15. use App\Flexy\ShopBundle\Entity\Order\ReturnOrder;
  16. use App\Flexy\ShopBundle\Entity\Product\Comment;
  17. use App\Flexy\ShopBundle\Entity\Product\Product;
  18. use App\Flexy\ShopBundle\Entity\Vendor\Vendor;
  19. use App\Flexy\ShopBundle\Repository\Customer\CustomerRepository;
  20. use App\Flexy\ShopBundle\Repository\Customer\ReturnOrderRepository;
  21. use App\Flexy\ShopBundle\Repository\Order\OrderRepository;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  29. #[Route('/account')]
  30. class MyAccountController extends AbstractController
  31. {
  32.     #[Route('/login-register'name'login_register')]
  33.     public function register(
  34.         Request $request,
  35.          UserPasswordHasherInterface $userPasswordHasher,
  36.           EntityManagerInterface $entityManager,
  37.           \Swift_Mailer $mailer,
  38.           AuthenticationUtils $authenticationUtils
  39.           ): Response
  40.     {
  41.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  42.   
  43.        
  44.         
  45.         if($hasAccess){
  46.             return $this->redirectToRoute("myaccount");
  47.         }
  48.         
  49.         // Auth
  50.         // if ($this->getUser()) {
  51.         //     return $this->redirectToRoute('target_path');
  52.         // }
  53.         // get the login error if there is one
  54.         $error $authenticationUtils->getLastAuthenticationError();
  55.         // last username entered by the user
  56.         $lastUsername $authenticationUtils->getLastUsername();
  57.         
  58.         // Register
  59.         $user = new User();
  60.         $vendor = new Vendor();
  61.         $vendorAuto = new Vendor();
  62.         $formVendor $this->createForm(RegistrationVendorFormType::class, $vendor);
  63.         $formVendor->handleRequest($request);
  64.         $customer = new Customer();
  65.         $formCustomer $this->createForm(RegistrationCustomerFormType::class, $customer);
  66.         $formCustomer->handleRequest($request);
  67.         $formEntrepreneur $this->createForm(RegistrationEntrepreneurFormType::class,$vendorAuto);
  68.         $formEntrepreneur->handleRequest($request);
  69.         if ($formVendor->isSubmitted() && $formVendor->isValid()) {
  70.             // encode the plain password
  71.             //dd($vendor);
  72.             $user->setUsername($formVendor->get('simulateUsername')->getData());
  73.             $user->setPassword(
  74.             $userPasswordHasher->hashPassword(
  75.                     $user,
  76.                     $formVendor->get('simulatePassword')->getData()
  77.                 )
  78.             );
  79.             $user->setRoles(["ROLE_VENDOR"]);
  80.             $vendor->setUser($user);
  81.             $entityManager->persist($vendor);
  82.             $entityManager->flush();
  83.             
  84.             $message = (new \Swift_Message("Inscriptiom au compte vendeur O'Mall"))
  85.             ->setFrom(['contact@omall.ma'=>"O'Mall"])
  86.             ->setTo([$formVendor->get('email')->getData()=>"Inscriptiom au compte vendeur O'Mall"])
  87.              ->setBody(
  88.              $this->renderView(
  89.                 '@Flexy/FrontBundle/templates/registration/mail_vendor.html.twig',
  90.                 [   
  91.                     "username"=>$formVendor->get('simulateUsername')->getData(),
  92.                     "password"=>$formVendor->get('simulatePassword')->getData(),
  93.                     "boutique"=>$formVendor->get('name')->getData(),
  94.                     ]
  95.                
  96.              ),
  97.                  'text/html'
  98.              );
  99.              
  100.              $mailer->send($message); 
  101.             // do anything else you need here, like send an email
  102.             return $this->redirectToRoute('front_home');
  103.         }
  104.         if ($formEntrepreneur->isSubmitted() && $formEntrepreneur->isValid()){
  105.             $user->setUsername($formEntrepreneur->get('simulateUsername')->getData());
  106.             $user->setPassword(
  107.             $userPasswordHasher->hashPassword(
  108.                     $user,
  109.                     $formEntrepreneur->get('simulatePassword')->getData()
  110.                 )
  111.             );
  112.             $user->setRoles(["ROLE_VENDOR"]);
  113.             $vendorAuto->setUser($user);
  114.             $entityManager->persist($vendorAuto);
  115.             $entityManager->flush();
  116.              
  117.             $message = (new \Swift_Message("Inscriptiom au compte vendeur O'Mall"))
  118.             ->setFrom(['contact@omall.ma'=>"O'Mall"])
  119.             ->setTo([$formEntrepreneur->get('email')->getData()=>"Inscriptiom au compte vendeurn O'Mall"])
  120.              ->setBody(
  121.              $this->renderView(
  122.                 '@Flexy/FrontBundle/templates/registration/mail_vendor.html.twig',
  123.                 [   
  124.                     "username"=>$formEntrepreneur->get('simulateUsername')->getData(),
  125.                     "password"=>$formEntrepreneur->get('simulatePassword')->getData(),
  126.                     "boutique"=>$formEntrepreneur->get('name')->getData(),
  127.                     ]
  128.                
  129.              ),
  130.                  'text/html'
  131.              );
  132.              
  133.              $mailer->send($message); 
  134.             // do anything else you need here, like send an email
  135.             return $this->redirectToRoute('front_home');
  136.         } 
  137.         if ($formCustomer->isSubmitted() && $formCustomer->isValid()) {
  138.             // encode the plain password
  139.            
  140.             
  141.             $user->setIsValid(true);
  142.             $user->setUsername($formCustomer->get('simulateUsername')->getData());
  143.             $user->setPassword(
  144.             $userPasswordHasher->hashPassword(
  145.                     $user,
  146.                     $formCustomer->get('simulatePassword')->getData()
  147.                 )
  148.             );
  149.            
  150.             $user->setRoles(["ROLE_CUSTOMER"]);
  151.             $customer->setUser($user);
  152.             $entityManager->persist($customer);
  153.             $entityManager->flush();
  154.             $message = (new \Swift_Message("Bienvenue dans notre famille O'Mall !"))
  155.             ->setFrom(['contact@omall.ma'=>"O'Mall"])
  156.             ->setTo([$formCustomer->get('email')->getData()=>"Bienvenue dans notre famille O'Mall"])
  157.              ->setBody(
  158.              $this->renderView(
  159.                 '@Flexy/FrontBundle/templates/registration/mail_customer.html.twig',
  160.                 [   
  161.                     "username"=>$formCustomer->get('simulateUsername')->getData(),
  162.                     "password"=>$formCustomer->get('simulatePassword')->getData()
  163.                     ]
  164.                
  165.              ),
  166.                  'text/html'
  167.              );
  168.              
  169.              $mailer->send($message); 
  170.             // do anything else you need here, like send an email
  171.             return $this->redirectToRoute('front_home');
  172.         }
  173.         return $this->render('@Flexy/FrontBundle/templates/myaccount/login-register.html.twig', [
  174.             'registrationVendorForm' => $formVendor->createView(),
  175.             'registrationCustomerForm' => $formCustomer->createView(),
  176.             'registrationEntrepreneurForm' => $formEntrepreneur->createView(),
  177.             'last_username' => $lastUsername,
  178.              'error' => $error
  179.         ]);
  180.     }
  181.     #[Route('/editMyPassword'name'editpassword')]
  182.     public function editpassword
  183.         Request $request,
  184.           UserPasswordHasherInterface $userPasswordHasher,
  185.           EntityManagerInterface $entityManager,
  186.           AuthenticationUtils $authenticationUtils,
  187.           CustomerRepository $customerRepository,
  188.           ): Response
  189.     {
  190.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  191.         $formCustomer $this->createForm(RegistrationCustomerPasswordFormType::class, $customer);
  192.      
  193.         return $this->render('@Flexy/FrontBundle/templates/myaccount/editMyPassword.html.twig', [
  194.              
  195.             'registrationCustomerForm' => $formCustomer->createView(),
  196.             "customer"=>$customer,
  197.             
  198.              
  199.         ]);
  200.     }
  201.   
  202.     #[Route('/myaccount'name'myaccount')]
  203.     public function myaccount(
  204.         CustomerRepository $customerRepository,
  205.         OrderRepository $orderRepository,
  206.          Request $request,
  207.          
  208.          ): Response
  209.     {
  210.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  211.         if(!$hasAccess){
  212.             return $this->redirectToRoute("login_register");
  213.         }
  214.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  215.         $orders $orderRepository->findBy(["customer"=>$customer]);
  216.         return $this->render('@Flexy/FrontBundle/templates/myaccount/myaccount.html.twig',[
  217.             "customer"=>$customer,
  218.             "orders"=>$orders
  219.         ]);
  220.     }
  221.     
  222.     #[Route('/edit-myaccount'name'edit_myaccount')]
  223.     public function edit_myaccount(
  224.         CustomerRepository $customerRepository,
  225.         OrderRepository $orderRepository,
  226.         Request $request,         
  227.          ): Response
  228.     {
  229.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  230.         if(!$hasAccess){
  231.             return $this->redirectToRoute("login_register");
  232.         }
  233.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  234.        
  235.         $formCustomer $this->createForm(RegistrationCustomerProfilFormType::class, $customer);
  236.         $formCustomer->handleRequest($request);
  237.         if ($request->isMethod('POST')) {
  238.             if ($formCustomer->isSubmitted()) {
  239.                // dd($formCustomer->get('firstName')->getData());
  240.                 $customer->setFirstName($formCustomer->get('firstName')->getData());
  241.                 $customer->setLastName($formCustomer->get('lastName')->getData());
  242.                 $customer->setEmail($formCustomer->get('email')->getData());
  243.                 $customer->setGender($formCustomer->get('gender')->getData());
  244.                 $customer->setPhone($formCustomer->get('phone')->getData());
  245.                 $em $this->getDoctrine()->getManager();
  246.                 $em->persist($customer);
  247.                 $em->flush();
  248.                 $this->addFlash("success","Vos informations personnelles ont été enregistrées"); 
  249.                 
  250.                 return $this->redirectToRoute('edit_myaccount');  
  251.         
  252.              
  253.         }
  254.         }
  255.          
  256.   
  257.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  258.         $orders $orderRepository->findBy(["customer"=>$customer]);
  259.         return $this->render('@Flexy/FrontBundle/templates/myaccount/editMyAccount.html.twig',[
  260.             "customer"=>$customer,
  261.             "orders"=>$orders,
  262.             "registrationCustomerForm"=>$formCustomer->createView()
  263.             
  264.         ]);
  265.     }
  266.   
  267.     #[Route('/my-address-delete/{id}',name'delete_address') ]
  268.     
  269.     public function delete(Request $request,CustomerAddress $customerAddress): Response
  270.     {
  271.        
  272.             $entityManager $this->getDoctrine()->getManager();
  273.             $entityManager->remove($customerAddress);
  274.             $entityManager->flush();
  275.        
  276.         $this->addFlash("success","Votre adresse a été Supprimer"); 
  277.         return $this->redirectToRoute('my_customer_address');
  278.     }
  279.     #[Route('/my-customer-address'name'my_customer_address'defaults:  ['id' => null]) ]
  280.     #[Route('/my-customer-address/{id}') ]
  281.     public function add_customer_address(
  282.         CustomerAddress $customerAddress null,
  283.         CustomerRepository $customerRepository,
  284.         Request $request,         
  285.          ): Response
  286.     {
  287.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  288.         if(!$hasAccess){
  289.             return $this->redirectToRoute("login_register");
  290.         }
  291.         if(!$customerAddress){
  292.             $customerAddress = new CustomerAddress();
  293.         }
  294.         
  295.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  296.        
  297.         $formCustomerAddress $this->createForm(CustomerAddressType::class, $customerAddress);
  298.         $formCustomerAddress->handleRequest($request);
  299.         
  300.                 if ($formCustomerAddress->isSubmitted() && $formCustomerAddress->isValid()) {
  301.                 
  302.                     //dd($customerAddress);
  303.                     $customerAddress->setCustomer($customer);
  304.                     $customerAddress->setCountry("Maroc");
  305.                     $em $this->getDoctrine()->getManager();
  306.                     $em->persist($customerAddress);
  307.                     $em->flush();
  308.                     $this->addFlash("success","Vos informations personnelles adresse ont été enregistrées"); 
  309.                     return $this->redirectToRoute('my_customer_address');  
  310.                   
  311.             }
  312.         return $this->render('@Flexy/FrontBundle/templates/myaccount/myAddresses.html.twig',[
  313.             "customer"=>$customer,
  314.             "customAddress"=>$customerAddress,
  315.             "formCustomerAddress"=>$formCustomerAddress->createView()
  316.             
  317.         ]);
  318.     }
  319.     #[Route('/my-announce'name'my_announce'defaults:  ['id' => null]) ]
  320.     #[Route('/my-announce/{id}') ]
  321.     public function add_announces(
  322.         Product $Product null,
  323.         CustomerRepository $customerRepository,
  324.         OrderRepository $orderRepository null,
  325.         Request $request,         
  326.          ): Response
  327.     {
  328.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  329.         if(!$hasAccess){
  330.             return $this->redirectToRoute("login_register");
  331.         }
  332.         if(!$Product){
  333.             $Product = new Product();
  334.         }
  335.         
  336.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  337.        
  338.         $formProduct $this->createForm(ProductType::class, $Product);
  339.   
  340.         
  341.             $formProduct->handleRequest($request);
  342.         
  343.         
  344.                 if ($formProduct->isSubmitted() && $formProduct->isValid()) {
  345.                      
  346.                     $nameimage=explode("uploads/",$formProduct->get('image')->getData());
  347.                     $Product->setCustomer($customer);
  348.                     $Product->setProductType("announce");
  349.                     $Product->setImage($nameimage[1]);
  350.                     $em $this->getDoctrine()->getManager();
  351.                     $em->persist($Product);
  352.                     $em->flush();
  353.                     $this->addFlash("success","Votre annonce a été enregistrées"); 
  354.                     return $this->redirectToRoute('my_announce');
  355.                   
  356.             }
  357.         return $this->render('@Flexy/FrontBundle/templates/myaccount/myAnnounce.html.twig',[
  358.             "customer"=>$customer,
  359.             "product"=>$formProduct,
  360.             "formProduct"=>$formProduct->createView()
  361.             
  362.         ]);
  363.     }
  364.     #[Route('/my-return'name'my_return'defaults:  ['id' => null]) ]
  365.     #[Route('/my-return/{id}') ]
  366.     public function add_return_order(
  367.         ReturnOrder $ReturnOrder null,
  368.         CustomerRepository $customerRepository,
  369.         ReturnOrderRepository $returnOrderRepository,
  370.         OrderRepository $orderRepository null,
  371.         Request $request,         
  372.          ): Response
  373.     {
  374.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  375.         if(!$hasAccess){
  376.             return $this->redirectToRoute("login_register");
  377.         }
  378.         if(!$ReturnOrder){
  379.             $ReturnOrder = new ReturnOrder();
  380.         }
  381.         
  382.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  383.     
  384.         $orderReturn =  $returnOrderRepository->findBy(["customer"=>$customer->getId()]);
  385.          
  386.       
  387.        
  388.         $formReturn $this->createForm(ReturnOrderType::class, $ReturnOrder);
  389.   
  390.         
  391.             $formReturn->handleRequest($request);
  392.             $orderCustomer$orderRepository->findorderByCustomer($customer->getId());
  393.         
  394.                 if ($formReturn->isSubmitted() && $formReturn->isValid()) {
  395.                   
  396.                     $value=$request->request->get("orderRetour");
  397.                     $obj$orderRepository->find($value);
  398.                 
  399.                     
  400.                     $ReturnOrder->setCustomer($customer);
  401.                     $ReturnOrder->setDescription($formReturn->get("description")->getData());
  402.                     $ReturnOrder->setQuantity($formReturn->get("quantity")->getData());
  403.                     $ReturnOrder->setOrder($obj);
  404.                     $ReturnOrder->setReason($formReturn->get("reason")->getData());
  405.                     $ReturnOrder->setPrice($formReturn->get("price")->getData());
  406.                      
  407.                     $em $this->getDoctrine()->getManager();
  408.                     $em->persist($ReturnOrder);
  409.                     $em->flush();
  410.                     $this->addFlash("success","Votre retour a été enregistrées"); 
  411.                     return $this->redirectToRoute('my_return');
  412.                   
  413.             }
  414.         return $this->render('@Flexy/FrontBundle/templates/myaccount/myreturnOrder.html.twig',[
  415.             "customer"=>$customer,
  416.             "orderReturn"=>$orderReturn,
  417.             "ReturnOrder"=>$formReturn,
  418.             "orderCustomer"=>$orderCustomer,
  419.             "formReturnOrder"=>$formReturn->createView()
  420.             
  421.         ]);
  422.     }
  423.     #[Route('/order-details/{id}'name'customer_order_detail')]
  424.     public function customer_order_detail(
  425.         Order $order,
  426.        
  427.          ): Response
  428.     {
  429.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  430.         if(!$hasAccess){
  431.             return $this->redirectToRoute("login_register");
  432.         }
  433.         return $this->render('@Flexy/FrontBundle/templates/myaccount/orderDetail.html.twig',[
  434.             "order"=>$order
  435.         ]);
  436.     }
  437.     #[Route('/comment-product/{id}'name'comment_product')]
  438.     public function comment_product(
  439.         CustomerRepository $customerRepository,
  440.         Product $product,
  441.        Request $request
  442.          ): Response
  443.     {
  444.         $hasAccess $this->isGranted('ROLE_CUSTOMER');
  445.         if(!$hasAccess){
  446.             return $this->redirectToRoute("login_register");
  447.         }
  448.         $em $this->getDoctrine()->getManager();
  449.         $customer $customerRepository->findOneBy(["user"=>$this->getUser()]);
  450.         $comment = new Comment();
  451.         $comment->setRating((int)$request->request->get("rating"));
  452.         $comment->setComment($request->request->get("comment"));
  453.         $comment->setProduct($product);
  454.         $comment->setCustomer($customer);
  455.         $em->persist($comment);
  456.         $em->flush();
  457.         
  458.        return $this->redirectToRoute("single_product",["id"=>$product->getId()]);
  459.     }
  460. }