src/Flexy/FrontBundle/Themes/Lasalle/Controller/Api/ApiController.php line 233

  1. <?php
  2. namespace App\Flexy\FrontBundle\Themes\Lasalle\Controller\Api;
  3. use App\Flexy\ProductBundle\Repository\ProductRepository;
  4. use App\Flexy\ShopBundle\Entity\Customer\Customer;
  5. use App\Flexy\ShopBundle\Entity\Customer\Visit;
  6. use App\Flexy\ShopBundle\Entity\Customer\VisitOutside;
  7. use App\Flexy\ShopBundle\Entity\Order\Order;
  8. use App\Flexy\ShopBundle\Repository\Order\OrderRepository;
  9. use App\Flexy\ShopBundle\Entity\Product\ProductShop;
  10. use App\Flexy\ShopBundle\Entity\Store\Store;
  11. use App\Flexy\ShopBundle\Repository\Customer\CustomerRepository;
  12. use App\Flexy\ShopBundle\Repository\Shipping\ShippingMethodRepository;
  13. use App\Service\FlexySettingsProvider;
  14. use Doctrine\Persistence\ManagerRegistry;
  15. use Exception;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Symfony\Component\HttpFoundation\JsonResponse;
  21. use Symfony\Component\Mercure\HubInterface;
  22. use Symfony\Component\Mercure\Update;
  23. #[Route('/api')]
  24. class ApiController extends AbstractController
  25. {
  26.     
  27.     #[Route('/check-customer-account'name'api_check_customer_account',methods: ['POST'])]
  28.     public function api_check_customer_account(Request $request ,ManagerRegistry $doctrine,   
  29.     CustomerRepository $customerRepository,HubInterface $hub,FlexySettingsProvider $flexySettingsProvider,
  30.     OrderRepository $orderRepository)
  31.     {
  32.         //dd($customer);
  33.         if ($request->getContentType() == 'json' and $request->getContent()) {
  34.             $contentJsonRequest json_decode($request->getContent(),true512JSON_THROW_ON_ERROR);
  35.             if($contentJsonRequest){
  36.                 $request->request->replace($contentJsonRequest);
  37.             }else{
  38.                 return $this->json([
  39.                     "status"=>"error","message"=>"Content is not well formated"
  40.                 ]);
  41.             }
  42.             
  43.         }
  44.         $reference =  $request->request->get("reference");
  45.         $em $doctrine->getManager();
  46.         $currentDateTime = new \DateTime();
  47.         $query $em->createQuery(
  48.             'SELECT customer
  49.             FROM App\Flexy\ShopBundle\Entity\Customer\Customer customer
  50.             
  51.             LEFT JOIN customer.productSubscriptions  productSubscriptions
  52.             WHERE customer.reference = :reference AND (customer.is_actif  IS NULL OR customer.is_actif = 0)
  53.             AND :currentDateTime BETWEEN productSubscriptions.startAt AND productSubscriptions.endAt
  54.             '
  55.         )
  56.         
  57.         ->setParameter('reference'$reference)
  58.         ->setParameter('currentDateTime'$currentDateTime);
  59.     
  60.         $customer $query->getOneOrNullResult();
  61.         
  62.          // envoie vers la deuxieme salle //
  63.         // ðŸ“Œ Connexion Ã  la deuxième base avec DBAL (SQL brut)
  64.         /** @var Connection $connection */
  65.         $connection $doctrine->getConnection('salle2');
  66.       
  67.          $sql "SELECT c.*
  68.                     FROM customer c
  69.                     LEFT JOIN product_subscription ps 
  70.                         ON c.id = ps.customer_id
  71.                     WHERE c.reference = :reference
  72.                     AND (c.is_actif IS NULL OR c.is_actif = 0)
  73.                     AND :currentDateTime BETWEEN ps.start_at AND ps.end_at
  74.                 ";
  75.                 
  76.         $customer2 $connection->fetchAssociative($sql, [
  77.                 'reference' => $reference,
  78.                 'currentDateTime' => (new \DateTime())->format('Y-m-d H:i:s')
  79.             ]);         
  80.                      
  81.         // dd($customer2);
  82.        
  83.         
  84.          $content $request->getContent();
  85.         
  86.         
  87.          $url $request->getUri();
  88.          
  89.           $other_salle false;
  90.           
  91.           $status = (boolean)$customer;
  92.           $status_salle2 =(boolean)$customer2;
  93.           
  94.           if( $status == or $status_salle2 ) {
  95.             $value  "true";
  96.             
  97.            
  98.              
  99.            if($status){
  100.             $customer $customerRepository->findOneBy(["reference"=> $reference]);
  101.             $customer_id $customer->getId();
  102.            }else{
  103.            $customer_id $customer2['id'];
  104.            $other_salle true;
  105.            }
  106.            
  107.            
  108.             
  109.             $order $orderRepository->findOneBy(["customer"=> $customer_id]);
  110.             
  111.             
  112.             // Vérifiez si l'ordre est "checked"
  113.             if ($order && $order->getIsChecked()) {
  114.                 // Récupérez l'heure actuelle
  115.                 $currentHour = (new \DateTime())->format('H:i');
  116.                  
  117.                 // Vérifiez si l'heure est entre 07:00 et 13:30
  118.                 if ($currentHour >= '07:00' && $currentHour <= '13:30') {
  119.                     $value "true";
  120.                 
  121.                     
  122.                 } else {
  123.                     $value "false";
  124.                      
  125.                 }
  126.             }
  127.            
  128.             //dd($value);
  129.             
  130.               // Créer l'entité Visit seulement si $value est "true"
  131.             if ($value === "true" and $status) {
  132.             $visit = new Visit();
  133.             $entityManager =  $doctrine->getManager();
  134.             $visit->setCustomer($customer);
  135.             $visit->setCreatedAt(\DateTime::createFromFormat('Y-m-d H:i:s',date('Y-m-d H:i:s')));
  136.             if($customer->getStore()){
  137.                $visit->setStore($customer->getStore()); 
  138.             }
  139.             
  140.             $visit->setCardReference($reference);
  141.             $entityManager->persist($visit);
  142.             $entityManager->flush();
  143.         }
  144.             // Publication Mercure selon la valeur de $value
  145.     if ($flexySettingsProvider->get()->isIsMercureEnabled()) {
  146.         $status = ($value === "true") ? "success" "failed";
  147.         $update = new Update(
  148.             'https://hello.com/books/1',
  149.             json_encode([
  150.                 'status' => $status,
  151.                 'entity' => 'VisitCustomer',
  152.                 "customerId" => $customer_id,
  153.                 "otherSalle"=>$other_salle,
  154.                 'data' => $value === "true" $customer null// uniquement ajouter data si success
  155.                 
  156.             ])
  157.         );
  158.         $hub->publish($update);
  159.     }
  160.             /*if($flexySettingsProvider->get()->isIsMercureEnabled()){
  161.                 $update = new Update(
  162.                     'https://hello.com/books/1',
  163.                     json_encode(
  164.                         [
  165.                             'status' => 'success',
  166.                             'entity'=>'VisitCustomer',
  167.                             "customerId"=>$customer_id,
  168.                             'data'=>$customer,
  169.                         ]
  170.                         )
  171.                 );
  172.                 $hub->publish($update);
  173.                
  174.             }*/
  175.     
  176.           
  177.           }else{
  178.             if($flexySettingsProvider->get()->isIsMercureEnabled()){
  179.                 $update = new Update(
  180.                     'https://hello.com/books/1',
  181.                     json_encode(
  182.                         [
  183.                             'status' => 'failed',
  184.                             'entity'=>'VisitCustomer',
  185.                         ]
  186.                         )
  187.                 );
  188.                 $hub->publish($update);
  189.                
  190.             }
  191.              $value  "false"
  192.           }
  193.         
  194.           //dd($customer[0]->getStore()->getName()); 
  195.          return new Response($value);
  196.      
  197.         
  198.         // Logic
  199.         /*return $this->json([
  200.             "status"=>(boolean)$customer
  201.         ]);*/
  202.         
  203.     }
  204.     #[Route('/visit-customer'name'visit-customer')]
  205.     public function visitCustomer(
  206.         CustomerRepository $customerRepository,
  207.         OrderRepository $orderRepository,
  208.         ManagerRegistry $doctrine
  209.         Request $request 
  210.         ): Response
  211.     {
  212.         
  213.         $timeStatus='';
  214.         // Vérifier si "other" est activé dans la requête
  215.     $useSalle2 $request->query->get("other") === 'true';
  216.             if ($useSalle2) {
  217.                 // 📌 Connexion à la deuxième base (salle2)
  218.                 $connection $doctrine->getConnection('salle2');
  219.         
  220.                 //$sql = "SELECT * FROM customer WHERE id = :reference";
  221.                 
  222.                $sql "SELECT * FROM customer c
  223.                              LEFT JOIN product_subscription ps 
  224.                                   ON c.id = ps.customer_id
  225.                                   WHERE c.id =:reference";
  226.                     
  227.                 $customerSalle2 $connection->fetchAssociative($sql, [
  228.                     'reference' => $request->query->get("customerId")
  229.                 ]);
  230.                 
  231.                //dd($customerSalle2);
  232.         
  233.                 if ($customerSalle2) {
  234.                     
  235.                 $visit = new VisitOutside();
  236.                 $entityManager =  $doctrine->getManager();
  237.                 $visit->setFistName($customerSalle2['first_name']);
  238.                 $visit->setLastName($customerSalle2['last_name']);
  239.                 $visit->setPhone($customerSalle2['phone']);
  240.                 $visit->setIdentity($customerSalle2['identity_number']);
  241.                 $visit->setPhoto($customerSalle2['image']);
  242.                 $visit->setCreateAt(\DateTimeImmutable::createFromFormat('Y-m-d H:i:s'date('Y-m-d H:i:s')));
  243.                 $visit->setCardReference($customerSalle2['reference']);
  244.                 $entityManager->persist($visit);
  245.                 $entityManager->flush();
  246.             
  247.                     
  248.                     // Simulation de la récupération de la commande pour le client
  249.                     $sqlOrder "SELECT * FROM `order` WHERE customer_id = :customerId LIMIT 1;";
  250.                     $orderSalle2 $connection->fetchAssociative($sqlOrder, [
  251.                         'customerId' => $customerSalle2['id']
  252.                     ]);
  253.                     
  254.                     
  255.                     
  256.         
  257.                     $timeStatus $orderSalle2 ? (bool) $orderSalle2['is_checked'] : false;
  258.                 } else {
  259.                     $timeStatus false;
  260.                 }
  261.                 
  262.                 
  263.         
  264.                 return $this->render('@Flexy/FrontBundle/Themes/Lasalle/templates/front/customer/visit.html.twig', [
  265.                     'customer' => $customerSalle2,
  266.                     'salle2'=> true,
  267.                     'timeStatus' => $timeStatus,
  268.                 ]);
  269.             }else {
  270.         $customer $customerRepository->find((int)$request->query->get("customerId"));
  271.         $order $orderRepository->findOneBy(["customer"=> $customer]);
  272.     
  273.          if($order){
  274.             $timeStatus $order->getisChecked();
  275.          }
  276.          else{
  277.             $timeStatus false;
  278.         }
  279.           
  280.        // $customer = $doctrine->getManager()->getRepository(Customer::class)->findOneBy(["reference"=>7890222]);
  281.         //dd($customer[0]->getStore());
  282.         
  283.        
  284.         
  285.         return $this->render('@Flexy/FrontBundle/Themes/Lasalle/templates/front/customer/visit.html.twig', [
  286.             'customer' => $customer,
  287.             'salle2'=> false,
  288.             'timeStatus'=>$timeStatus,
  289.             
  290.         ]);
  291.     }
  292.     
  293.     }
  294. }