src/Flexy/FrontBundle/Themes/Lasalle/Controller/Api/ApiController.php line 233
<?phpnamespace App\Flexy\FrontBundle\Themes\Lasalle\Controller\Api;use App\Flexy\ProductBundle\Repository\ProductRepository;use App\Flexy\ShopBundle\Entity\Customer\Customer;use App\Flexy\ShopBundle\Entity\Customer\Visit;use App\Flexy\ShopBundle\Entity\Customer\VisitOutside;use App\Flexy\ShopBundle\Entity\Order\Order;use App\Flexy\ShopBundle\Repository\Order\OrderRepository;use App\Flexy\ShopBundle\Entity\Product\ProductShop;use App\Flexy\ShopBundle\Entity\Store\Store;use App\Flexy\ShopBundle\Repository\Customer\CustomerRepository;use App\Flexy\ShopBundle\Repository\Shipping\ShippingMethodRepository;use App\Service\FlexySettingsProvider;use Doctrine\Persistence\ManagerRegistry;use Exception;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\Mercure\HubInterface;use Symfony\Component\Mercure\Update;#[Route('/api')]class ApiController extends AbstractController{#[Route('/check-customer-account', name: 'api_check_customer_account',methods: ['POST'])]public function api_check_customer_account(Request $request ,ManagerRegistry $doctrine,CustomerRepository $customerRepository,HubInterface $hub,FlexySettingsProvider $flexySettingsProvider,OrderRepository $orderRepository){//dd($customer);if ($request->getContentType() == 'json' and $request->getContent()) {$contentJsonRequest = json_decode($request->getContent(),true, 512, JSON_THROW_ON_ERROR);if($contentJsonRequest){$request->request->replace($contentJsonRequest);}else{return $this->json(["status"=>"error","message"=>"Content is not well formated"]);}}$reference = $request->request->get("reference");$em = $doctrine->getManager();$currentDateTime = new \DateTime();$query = $em->createQuery('SELECT customerFROM App\Flexy\ShopBundle\Entity\Customer\Customer customerLEFT JOIN customer.productSubscriptions productSubscriptionsWHERE customer.reference = :reference AND (customer.is_actif IS NULL OR customer.is_actif = 0)AND :currentDateTime BETWEEN productSubscriptions.startAt AND productSubscriptions.endAt')->setParameter('reference', $reference)->setParameter('currentDateTime', $currentDateTime);$customer = $query->getOneOrNullResult();// envoie vers la deuxieme salle //// 📌 Connexion à la deuxième base avec DBAL (SQL brut)/** @var Connection $connection */$connection = $doctrine->getConnection('salle2');$sql = "SELECT c.*FROM customer cLEFT JOIN product_subscription psON c.id = ps.customer_idWHERE c.reference = :referenceAND (c.is_actif IS NULL OR c.is_actif = 0)AND :currentDateTime BETWEEN ps.start_at AND ps.end_at";$customer2 = $connection->fetchAssociative($sql, ['reference' => $reference,'currentDateTime' => (new \DateTime())->format('Y-m-d H:i:s')]);// dd($customer2);$content = $request->getContent();$url = $request->getUri();$other_salle = false;$status = (boolean)$customer;$status_salle2 =(boolean)$customer2;if( $status == 1 or $status_salle2 ) {$value = "true";if($status){$customer = $customerRepository->findOneBy(["reference"=> $reference]);$customer_id = $customer->getId();}else{$customer_id = $customer2['id'];$other_salle = true;}$order = $orderRepository->findOneBy(["customer"=> $customer_id]);// Vérifiez si l'ordre est "checked"if ($order && $order->getIsChecked()) {// Récupérez l'heure actuelle$currentHour = (new \DateTime())->format('H:i');// Vérifiez si l'heure est entre 07:00 et 13:30if ($currentHour >= '07:00' && $currentHour <= '13:30') {$value = "true";} else {$value = "false";}}//dd($value);// Créer l'entité Visit seulement si $value est "true"if ($value === "true" and $status) {$visit = new Visit();$entityManager = $doctrine->getManager();$visit->setCustomer($customer);$visit->setCreatedAt(\DateTime::createFromFormat('Y-m-d H:i:s',date('Y-m-d H:i:s')));if($customer->getStore()){$visit->setStore($customer->getStore());}$visit->setCardReference($reference);$entityManager->persist($visit);$entityManager->flush();}// Publication Mercure selon la valeur de $valueif ($flexySettingsProvider->get()->isIsMercureEnabled()) {$status = ($value === "true") ? "success" : "failed";$update = new Update('https://hello.com/books/1',json_encode(['status' => $status,'entity' => 'VisitCustomer',"customerId" => $customer_id,"otherSalle"=>$other_salle,'data' => $value === "true" ? $customer : null, // uniquement ajouter data si success]));$hub->publish($update);}/*if($flexySettingsProvider->get()->isIsMercureEnabled()){$update = new Update('https://hello.com/books/1',json_encode(['status' => 'success','entity'=>'VisitCustomer',"customerId"=>$customer_id,'data'=>$customer,]));$hub->publish($update);}*/}else{if($flexySettingsProvider->get()->isIsMercureEnabled()){$update = new Update('https://hello.com/books/1',json_encode(['status' => 'failed','entity'=>'VisitCustomer',]));$hub->publish($update);}$value = "false";}//dd($customer[0]->getStore()->getName());return new Response($value);// Logic/*return $this->json(["status"=>(boolean)$customer]);*/}#[Route('/visit-customer', name: 'visit-customer')]public function visitCustomer(CustomerRepository $customerRepository,OrderRepository $orderRepository,ManagerRegistry $doctrine,Request $request): Response{$timeStatus='';// Vérifier si "other" est activé dans la requête$useSalle2 = $request->query->get("other") === 'true';if ($useSalle2) {// 📌 Connexion à la deuxième base (salle2)$connection = $doctrine->getConnection('salle2');//$sql = "SELECT * FROM customer WHERE id = :reference";$sql = "SELECT * FROM customer cLEFT JOIN product_subscription psON c.id = ps.customer_idWHERE c.id =:reference";$customerSalle2 = $connection->fetchAssociative($sql, ['reference' => $request->query->get("customerId")]);//dd($customerSalle2);if ($customerSalle2) {$visit = new VisitOutside();$entityManager = $doctrine->getManager();$visit->setFistName($customerSalle2['first_name']);$visit->setLastName($customerSalle2['last_name']);$visit->setPhone($customerSalle2['phone']);$visit->setIdentity($customerSalle2['identity_number']);$visit->setPhoto($customerSalle2['image']);$visit->setCreateAt(\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s')));$visit->setCardReference($customerSalle2['reference']);$entityManager->persist($visit);$entityManager->flush();// Simulation de la récupération de la commande pour le client$sqlOrder = "SELECT * FROM `order` WHERE customer_id = :customerId LIMIT 1;";$orderSalle2 = $connection->fetchAssociative($sqlOrder, ['customerId' => $customerSalle2['id']]);$timeStatus = $orderSalle2 ? (bool) $orderSalle2['is_checked'] : false;} else {$timeStatus = false;}return $this->render('@Flexy/FrontBundle/Themes/Lasalle/templates/front/customer/visit.html.twig', ['customer' => $customerSalle2,'salle2'=> true,'timeStatus' => $timeStatus,]);}else {$customer = $customerRepository->find((int)$request->query->get("customerId"));$order = $orderRepository->findOneBy(["customer"=> $customer]);if($order){$timeStatus = $order->getisChecked();}else{$timeStatus = false;}// $customer = $doctrine->getManager()->getRepository(Customer::class)->findOneBy(["reference"=>7890222]);//dd($customer[0]->getStore());return $this->render('@Flexy/FrontBundle/Themes/Lasalle/templates/front/customer/visit.html.twig', ['customer' => $customer,'salle2'=> false,'timeStatus'=>$timeStatus,]);}}}