src/Controller/OrdersController.php line 651

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\AccountForm;
  4. use App\Entity\Offers;
  5. use MangoPay\PayIn;
  6. use MangoPay\PayOut;
  7. use App\Entity\Orders;
  8. use MangoPay\ApiPayIns;
  9. use MangoPay\MangoPayApi;
  10. use Psr\Log\LoggerInterface;
  11. use MangoPay\MangoPayApi as Api;
  12. use App\Repository\UserRepository;
  13. use App\Repository\OrdersRepository;
  14. use App\Service\Payment\MangopayService;
  15. use App\Repository\AccountFormRepository;
  16. use App\Repository\OffersRepository;
  17. use App\Repository\ProposalRepository;
  18. use App\Service\Payment\StripeService;
  19. use Doctrine\Common\Collections\ArrayCollection;
  20. use PHPUnit\Util\Json;
  21. use Stripe\Climate\Order;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\Response;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. use Symfony\Component\HttpFoundation\JsonResponse;
  26. use Symfony\Component\HttpFoundation\StreamedResponse;
  27. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  28. use Symfony\Bundle\FrameworkBundle\Controller\RedirectController;
  29. class OrdersController extends AbstractController {
  30.     /**
  31.      * @Route("/payout/{accountFormId}/{proposalId}", name="payout")
  32.      */
  33.     public function Payout($accountFormIdStripeService $stripeServiceOrdersRepository $ordersRepositoryAccountFormRepository $accountFormRepositoryRequest $requestProposalRepository $proposalRepository$proposalId){ 
  34.       $em $this->getDoctrine()->getManager();
  35.       $sessionBag $request->getSession(); 
  36.       $accountForm $accountFormRepository->find($accountFormId);
  37.       $proposal $proposalRepository->find($proposalId);
  38.       $orders $ordersRepository->findBy(['proposal' => $proposal'accountForm' => $accountForm]);
  39.       if(!empty($orders)){
  40.         $order $orders[0];
  41.       }
  42.       $accountConnected $accountForm->getStripeAccountConnectedId();
  43.       $buyer $this->getUser();
  44.       $product $proposal->getOffer()->getCategory()."-Jobinyana" ;
  45.       $customerId $buyer->getCustomerStripeId();
  46.       //////////
  47.       //$total = 0;
  48.       /*if(is_array($cart["meal_price"])){
  49.         foreach($cart["meal_price"] as $items_price)
  50.         {
  51.           $total += $items_price;
  52.         }
  53.       } else {
  54.         $total = $cart["meal_price"];
  55.       }*/
  56.       //$accountFormId = $cart["idRestaurant"];        
  57.       //$accountForm = $accountFormRepository->find($accountFormId);
  58.       //$stripeId = $accountForm->getStripeAccountConnectedId();
  59.       if( !isset($order) || empty($order))
  60.       {
  61.         $order = new Orders();
  62.         $order->setItems(['idCustomer' => $customerId'item' => $proposal->getContent()]);
  63.         $order->setProposal($proposal);
  64.         $order->setActive(0);
  65.         $order->setStatus(0);
  66.         $order->setCustomerId($customerId);
  67.         $order->setAccountForm($accountForm);
  68.         $order->setTime(date("d-m-Y H:i:s"));
  69.         $order->setDayNumber(date("d"));
  70.         $order->setYearNumber(date("Y"));
  71.         $order->setMonthNumber(date("m"));
  72.         $order->setWeekNumber(date("W"));
  73.         $order->setUser($buyer);
  74.         $order->setTotal($proposal->getPrice());
  75.       }
  76.         $em->persist($order);
  77.         $em->flush();
  78.         $orderId $order->getId();
  79.         $sessionBag->set('orderId',$orderId);
  80.       $session $stripeService->createCheckoutSession($buyer,$product,$order->getTotal(),$accountConnected,$customerId,$orderId$proposal->getId());
  81.       //$cart = array_merge($cart, ['order' => $orderId]);
  82.       //$sessionBag->set('cart', $cart);
  83.       ////////
  84.       return $this->redirect($session->url);
  85.       /*return new JsonResponse([
  86.         'checkoutUrl' => $session->url
  87.       ]);*/
  88.       
  89.     }
  90.     
  91.      /**
  92.      * @Route("/checkout", name="checkout")
  93.      */
  94.     public function Checkout(Request $request) {
  95.         try {
  96.             $Hook = new \MangoPay\Hook();
  97.             $mangopayApi = new Api();
  98.             $Hook->EventType "PAYIN_NORMAL_CREATED";
  99.             $Hook->Url "https://coasttocorner.com/checkout/return";
  100.             $Hook->Tag "custom meta";
  101.             $Result $mangopayApi->Hooks->Create($Hook);
  102.             
  103.         } catch(\MangoPay\Libraries\ResponseException $e) {
  104.             // handle/log the response exception with code $e->GetCode(), message $e->GetMessage() and error(s) $e->GetErrorDetails() 
  105.         } catch(\MangoPay\Libraries\Exception $e) {
  106.             // handle/log the exception $e->GetMessage() 
  107.         
  108.        
  109.         return $this->render('checkout.html.twig');
  110.     }
  111.      /**
  112.      * @Route("/checkout/return", name="checkout-return", methods={"GET","POST"})
  113.      */
  114.     public function CheckoutReturn(Request $requestLoggerInterface $loggerMangopayService $mangopayservice,AccountFormRepository $accountFormRepository) {
  115.         $em $this->getDoctrine()->getManager();
  116.         $user $this->getUser();
  117.         //$responseHook = $mangopayservice->payinHook();
  118.         $public_html_dir $this->getParameter('kernel.project_dir').'/public_html';
  119.         $EventType $request->query->get('EventType') !== null $request->query->get('EventType') : null;
  120.         $RessourceId $request->query->get('RessourceId') !== null $request->query->get('RessourceId') : null;
  121.         $transactionId $request->query->get('transactionId') !== null $request->query->get('transactionId') : null;
  122.        //dd($request->getContent());
  123.         if( $EventType !== null or $transactionId !== null){
  124.             $handle fopen($public_html_dir.'/response.txt''w+');
  125.             //var_dump($handle);
  126.             $result implode(" ",$request->request->all());
  127.             // fwrite($handle,(String)$request->getContent());
  128.             //$payIn = new ApiPayIns($mangopayservice->getMangoPayApi());
  129.             //$transaction = $payIn->Get($transactionId);
  130.             //$detailsTransaction = $transaction->GetReadOnlyProperties();
  131.             //$details = implode(',', $EventType);
  132.             fwrite($handle,$EventType);
  133.             //  fwrite($handle,$request->getContent());
  134.             fclose($handle);
  135.             $session $request->getSession();
  136.             $cart $session->get('cart');
  137.             $total 0;
  138.             if(is_array($cart["meal_price"])){
  139.                 foreach($cart["meal_price"] as $items_price)
  140.                 {
  141.                     $total += $items_price;
  142.                 }
  143.             } else {
  144.                 $total $cart["meal_price"];
  145.             }
  146.             $accountFormId $cart['idRestaurant'];
  147.             $accountForm $accountFormRepository->find($accountFormId);
  148.             $cart json_encode($cart);
  149.             $order = new Orders();
  150.             $order->setItems($cart);
  151.             $order->setActive(1);
  152.             $order->setStatus(1);
  153.             $order->setAccountForm($accountForm);
  154.             $order->setTime(date("d-m-Y H:i:s"));
  155.             $order->setDayNumber(date("d"));
  156.             $order->setYearNumber(date("Y"));
  157.             $order->setMonthNumber(date("m"));
  158.             $order->setWeekNumber(date("W"));
  159.             $order->setUser($user);
  160.             $order->setTotal($total);
  161.             $em->persist($order);
  162.             $em->flush();
  163.         }
  164.         return $this->render('checkout.return.html.twig');
  165.     }
  166.     /**
  167.     * @Route("/order-prepared/view/{idOrder}", name="ordersPrepared")
  168.     */
  169.     public function orderToTakeOver($idOrderOrdersRepository $ordersRepository){
  170.         $em $this->getDoctrine()->getManager();
  171.         $accountForm $this->getUser()->getAccounForm();
  172.         $accountFormId $this->getUser()->getAccountForm();
  173.         $order $ordersRepository->findPreparedByAccountForm($accountForm->getId());
  174.         $order->setStatus(2);
  175.         $em->persist($order);
  176.         $em->flush();
  177.         return  New JsonResponse('the status has been well changed');
  178.      }
  179.      
  180.     /**
  181.     * @Route("/order-upcoming/view/{idOrder}", name="ordersUpcoming")
  182.     */
  183.     public function ordersUpcoming($idOrderOrdersRepository $ordersRepository){
  184.         $em $this->getDoctrine()->getManager();
  185.         $accountFormId $this->getUser()->getAccountForm();
  186.         $order $ordersRepository->find($idOrder);
  187.         $order->setStatus(2);
  188.         $em->persist($order);
  189.         $em->flush();
  190.         return  New JsonResponse('the status has been well changed');
  191.      }
  192.      
  193.     /**
  194.     * @Route("/order-pending/view/{idOrder}", name="ordersPending")
  195.     */
  196.     public function orderPending($idOrderOrdersRepository $ordersRepository){
  197.         $em $this->getDoctrine()->getManager();
  198.         $accountFormId $this->getUser()->getAccountForm();
  199.         $order $ordersRepository->find($idOrder);
  200.         $order->setStatus(2);
  201.         $em->persist($order);
  202.         $em->flush();
  203.         return  New JsonResponse('the status has been well changed');
  204.      }
  205.      /**
  206.    * @Route("orders-customers", name="ordersCustomers", methods={ "GET", "POST" })
  207.    */
  208.   function ordersCustomers(Request $requestOrdersRepository $ordersRepositoryUserRepository $userRepository){
  209.     $this->denyAccessUnlessGranted('ROLE_USER');
  210.     $cookie $request->cookies->get('close');
  211.     $accountFormId $this->getUser()->getAccountForm();
  212.     $ordersRows $ordersRepository->findByAccountForm($accountFormId);
  213.     if(empty($orderRows)){
  214.       $orders null;
  215.     } 
  216.     foreach($ordersRows as $order){
  217.       $userId $order->getUser()->getId();
  218.       $user $userRepository->findOneBy(['id' => $userId]);
  219.       $orders[] = array_merge$order->getItems(), ['id' => $order->getId()], ['firstname' => $user->getFirstname()], ['name' => $user->getLastname()], ["mail" => $user->getEmail()], ["phone" => $user->getPhone()], ["time" => $order->getTime()] );
  220.     }
  221.     return $this->render('ordersCustomers.html.twig', ['orders' => $orders]);
  222.   }
  223.    /**
  224.    * @Route("orders-status/views/{status}", name="ordersViews", methods={ "GET", "POST" })
  225.    */
  226.   function ordersViews($statusRequest $request,AccountFormRepository $accountFormRepository,  OrdersRepository $ordersRepositoryUserRepository $userRepositoryOffersRepository $offersRepositoryProposalRepository $proposalRepository){
  227.     $this->denyAccessUnlessGranted('ROLE_USER');
  228.     $accountForm$this->getUser()->getAccountForm();
  229.     $orders = [];
  230.     $proposals = [];
  231.     switch ($status){
  232.       case :
  233.         $proposals $proposalRepository->findBy(['accountForm' => $accountForm'accepted' => false]);
  234.         $typeEvent "proposal";
  235.       break;
  236.       case 1:
  237.         $orders $ordersRepository->findAcceptedByAccountForm($accountForm);
  238.         $typeEvent "accepted";
  239.       break;
  240.       case 2:
  241.         $orders $ordersRepository->findFinishedByAccountForm($accountForm);
  242.         $typeEvent "payed";
  243.         //dd($accountForm);
  244.       break;
  245.       case 3:
  246.         $orders $ordersRepository->findCancelledByAccountForm($accountForm);
  247.         $typeEvent "cancelled";
  248.       break;
  249.     }
  250.     if(empty($proposals) && empty($orders)){
  251.         $response = new StreamedResponse(function(){
  252.             $rep "event: noOrders";
  253.             $rep .= "\n";
  254.             $rep .= "data: {\"content\" :  \" Pas d'offres.\"  } ";
  255.             $rep .= "\n\n";
  256.             echo $rep;
  257.         });
  258.         $response->headers->set('Content-Type''text/event-stream'); 
  259.         return $response;
  260.     }
  261.       $numberOrdersRows count($orders);
  262.       $numberProposalsRows count($proposals);
  263.     //dd($ordersRows);
  264.     if($typeEvent !== "proposal"){
  265.       foreach($orders as $order){
  266.         $userId $order->getUser()->getId();
  267.         $user $userRepository->findOneBy(['id' => $userId]);
  268.         $responses[] = array_merge$order->getItems(), ['id_order' => $order->getId(),'firstname' => $user->getFirstname()], ['name' => $user->getLastname()], ["mail" => $user->getEmail()], ["phone" => $user->getPhone()], ["time" => $order->getTime()] , ['id_offer' => $order->getProposal() !== null $order->getProposal()->getOffer()->getId() : null] , ['job_title' => $order->getProposal() !== null $order->getProposal()->getOffer()->getTitle() : null] );
  269.         //rsort($orders);
  270.     }
  271.   } else{
  272.     foreach($proposals as $proposal){
  273.       $userId $proposal->getOffer()->getUser()->getId();
  274.       $user $userRepository->findOneBy(['id' => $userId]);
  275.       $responses[] = ['id_proposal' => $proposal->getId(),'firstname' => $user->getFirstname(),'name' => $user->getLastname(),"mail" => $user->getEmail(),"phone" => $user->getPhone(),"time" => $proposal->getCreatedAt(),"content" => $proposal->getContent(), "id_offer" => $proposal->getOffer()->getId(), "job_title" => $proposal->getOffer()->getTitle()];
  276.       
  277.       //rsort($orders);
  278.     }
  279.   }
  280.     $ordersFormated json_encode($responses);
  281.     ob_start();
  282.     if($numberOrdersRows || $numberProposalsRows )
  283.     {
  284.          $res "id: ";        
  285.          $res .= "\n";
  286.          $res .= "event: ".$typeEvent;
  287.          $res .= "\n";
  288.          $res .= "data: {\"content\" :  $ordersFormated  } ";
  289.          $res .= "\n\n";
  290.          echo $res;
  291.     }
  292.      $response = new StreamedResponse(function(){
  293.       ob_end_flush();
  294.      });
  295.      $response->headers->set('Content-Type''text/event-stream'); 
  296.     return $response;
  297.   }
  298.   /**
  299.    * @Route("offers-private/views/{status}", name="offers.private.views", methods={ "GET", "POST" })
  300.    */
  301.   function offersPrivatesViewsRequest $request$statusAccountFormRepository $accountFormRepository,OrdersRepository $ordersRepositoryProposalRepository $proposalRepositoryUserRepository $userRepositoryOffersRepository $offersRepository){
  302.     $this->denyAccessUnlessGranted('ROLE_USER');
  303.     $accountForm $this->getUser()->getAccountForm();
  304.     $offers = [];
  305.     $orders = [];
  306.     $responses = [];
  307.     $offerFlag false;
  308.     switch ($status){
  309.       case 1// offers
  310.         $offersRows $offersRepository->findByAccountForm($accountForm);
  311.         $typeEvent "offers";
  312.         $offerFlag true;
  313.       break;
  314.       case 2// payment intent created
  315.         $orders $ordersRepository->findAcceptedByAccountForm($accountForm);
  316.         $typeEvent "acceptedOfferPrivate";
  317.       break;
  318.       case 3// payed
  319.         $orders $ordersRepository->findFinishedByAccountForm($accountForm);
  320.         $typeEvent "payedOfferPrivate";
  321.       break;
  322.       case 4// cancelled
  323.         $orders $ordersRepository->findCancelledByAccountForm($accountForm);
  324.         $typeEvent "cancelledOfferPrivate";
  325.       break;
  326.     }
  327.     ob_start();
  328.     if($offerFlag){
  329.      $offers = new ArrayCollection($offersRows); 
  330.     if($offers->isEmpty()){
  331.             $res "event: noOffers";
  332.             $res .= "\n";
  333.             $res .= "data: {\"content\" :  \" Pas de demandes.\"  } ";
  334.             $res .= "\n\n";
  335.             echo $res;
  336.     };
  337.     $numberOffersRows count($offersRows);
  338.     $processedOffers = [];
  339.     foreach($offers as $offer){
  340.       $offer $offersRepository->findProposals($offer['offers_id']);
  341.       $proposal $offer->getProposals();
  342.       if($proposal->isEmpty()){
  343.         $proposal "none";
  344.       }else{
  345.         $proposal "published";
  346.       }
  347.       $user $offer->getUser();
  348.       $processedOffers[] = array_merge(['id_offer' => $offer->getId(),'firstname' => $user->getFirstname()], ['name' => $user->getLastname()], ["mail" => $user->getEmail()], ["phone" => $user->getPhone()], ["time" => $offer->getCreatedAt()], ["proposal" => $proposal], ["offer_title" => $offer->getTitle()] );
  349.     }
  350.     $offersFormated json_encode($processedOffers);
  351.    
  352.     $lastOrder $offersRows[$numberOffersRows 1];
  353.     if($numberOffersRows )
  354.     {
  355.          $res "id: ";        
  356.          $res .= "\n";
  357.          $res .= "event: offers";
  358.          $res .= "\n";
  359.          $res .= "data: {\"content\" :  $offersFormated  } ";
  360.          $res .= "\n\n";
  361.          echo $res;
  362.     }
  363.   } else {
  364.     if(empty($orders)){
  365.             $res "event: noOrders";
  366.             $res .= "\n";
  367.             $res .= "data: {\"content\" :  \" Pas de commandes.\"  } ";
  368.             $res .= "\n\n";
  369.             echo $res;
  370.         };
  371.         if($typeEvent !== "offers"){
  372.           foreach($orders as $order){
  373.             $userId $order->getUser()->getId();
  374.             $user $userRepository->findOneBy(['id' => $userId]);
  375.             $responses[] = array_merge$order->getItems(), ['id_order' => $order->getId(),'firstname' => $user->getFirstname()], ['name' => $user->getLastname()], ["mail" => $user->getEmail()], ["phone" => $user->getPhone()], ["time" => $order->getTime()] , ['id_offer' => $order->getProposal() !== null $order->getProposal()->getOffer()->getId() : null] , ['job_title' => $order->getProposal() !== null $order->getProposal()->getOffer()->getTitle() : null] );
  376.           }
  377.         $ordersFormated json_encode($responses);
  378.       }
  379.     if($orders || isset($ordersFormated) && !empty($ordersFormated) )
  380.     {
  381.         $res "id: ";        
  382.         $res .= "\n";
  383.         $res .= "event: ".$typeEvent;
  384.         $res .= "\n";
  385.         $res .= "data: {\"content\" :  $ordersFormated  } ";
  386.         $res .= "\n\n";
  387.         echo $res;
  388.     }
  389.         
  390.   }
  391.       $response = new StreamedResponse(function(){
  392.       ob_end_flush();
  393.     });
  394.     $response->headers->set('Content-Type''text/event-stream'); 
  395.     return $response;
  396.   }
  397.   /**
  398.    * @Route("update-status-orders/{idOrder}/{status}", name="updateStatusOrders", methods={"POST", "GET"})
  399.    */
  400.     function updateStatusOrders($idOrder$statusOrdersRepository $ordersRepositoryStripeService $stripeService){
  401.       $em =$this->getDoctrine()->getManager();
  402.       $order $ordersRepository->find($idOrder);
  403.       $paymentIntent $order->getPaymentIntentId();
  404.       $accountConnected $order->getAccountForm()->getStripeAccountConnectedId();
  405.       if($status === 1){
  406.         $stripeService->capturePaymentIntent($paymentIntent$accountConnected);
  407.         //$order->setStatus(3);
  408.         $order->setActive(2);
  409.         $em->persist($order);
  410.         $em->flush();
  411.       }
  412.       return New JsonResponse('commande mise Ã  jour');
  413.        /* $order->setStatus(++$status);
  414.         $em->persist($order);
  415.         $em->flush();
  416.         return New JsonResponse('commande mise Ã  jour');*/
  417.     }
  418.     /**
  419.      * @Route("orders-user/view/{status}", name="ordersUser", methods={"POST","GET"})
  420.      */
  421.     function ordersUser($status,ProposalRepository $proposalRepository,  OrdersRepository $ordersRepositoryOffersRepository $offersRepositoryUserRepository $userRepository){
  422.         $this->denyAccessUnlessGranted('ROLE_USER');
  423.        /* $user = $this->getUser();
  424.         $userId = $user->getId();
  425.         $ordersRows = $ordersRepository->findBy(['user' => $userId]);
  426.         $offersRows = $offersRepository->findBy(['user' => $userId]);
  427.         if(empty($ordersRows && $offersRows)){
  428.             $response = new StreamedResponse(function(){
  429.                 $rep = "event: noOrders";
  430.                 $rep .= "\n";
  431.                 $rep .= "data: {\"content\" :  \" Pas de commandes.\"  } ";
  432.                 $rep .= "\n\n";
  433.                 echo $rep;
  434.             });
  435.             $response->headers->set('Content-Type', 'text/event-stream'); 
  436.             return $response;
  437.         }
  438.         $numberOrdersRows = count($ordersRows);
  439.         $numberOffersRows = count($offersRows);
  440.         foreach($ordersRows as $order){
  441.           $userId = $order->getUser()->getId();
  442.           $accountForm = $order->getAccountForm();
  443.           if ($accountForm === null) {
  444.               continue; // Skip this order if AccountForm is not found
  445.           }
  446.           $orders[] = array_merge(
  447.               $order->getItems(),
  448.               ['id_order' => $order->getId()],
  449.               ['category' => $order->getProposal()->getOffer()->getCategory()],
  450.               ['jobber_name' => $accountForm->getNom() . ' ' . $accountForm->getPrenom()],
  451.               ["time" => $order->getTime()],
  452.               ["status" => $order->getStatus()],
  453.               ["url" => $this->generateUrl('storeId', ['slug' => $accountForm->getCategory(), 'id' => $accountForm->getId()])],
  454.              // ["urlImage" => /*'images1/categories/Restauration/store_'.$accountForm->getMail().'/'.$accountForm->getImage()[0]->getUrlImage() "http://localhost/images/jobinyana-150x150.png"]
  455.           );
  456.         }
  457.         krsort($orders);
  458.         foreach($orders as $value){
  459.           $arrOrders[] = $value;
  460.         }
  461.         $ordersFormated = json_encode($arrOrders);
  462.         ob_start();
  463.         $lastOrder = $ordersRows[$numberOrdersRows - 1];
  464.         if($numberOrdersRows > 0 )
  465.         {
  466.              $res = "id: ".$order->getId();   
  467.              $res .= "\n";
  468.              $res .= "event: orders";
  469.              $res .= "\n";
  470.              $res .= "data: {\"content\" :  $ordersFormated  } ";
  471.              $res .= "\n\n";
  472.              echo $res;
  473.         }
  474.          $response = new StreamedResponse(function(){
  475.          ob_end_flush();
  476.          });
  477.          $response->headers->set('Content-Type', 'text/event-stream'); 
  478.         return $response; 
  479.         */
  480.         /***************************** */
  481.         $user$this->getUser();
  482.         $orders = [];
  483.         $proposals = [];
  484.         $proposalsFetch = [];
  485.         $offers $offersRepository->findBy(['user' => $user]);
  486.         foreach($offers as $offer){
  487.           if($offer === null){
  488.             continue; 
  489.           }
  490.           $proposalsByOffer $proposalRepository->findBy(['offer' => $offer 'accepted' => false]);
  491.           if(empty($proposalsByOffer)){
  492.             continue; // Skip this offer if no proposals are found
  493.           }
  494.           $proposalsFetch[$offer->getId()] = $proposalsByOffer;
  495.         }
  496.         
  497.         switch ($status){
  498.           case :
  499.             $proposals array_merge(...$proposalsFetch);
  500.             $typeEvent "proposal";
  501.           break;
  502.           case 1:
  503.             $orders $ordersRepository->findBy(['user' => $user,'status' => Orders::STATUS_PAYMENT_INTENT_CREATED]);
  504.             $typeEvent "accepted";
  505.           break;
  506.           case 2:
  507.             $orders $ordersRepository->findBy(['user' => $user,'status' => Orders::STATUS_PAID]);
  508.             $typeEvent "payed";
  509.           break;
  510.           case 3:
  511.             $orders $ordersRepository->findBy(['user' => $user'status' => Orders::STATUS_CANCELED]);
  512.             $typeEvent "canceled";
  513.           break;
  514.           case 4:
  515.             $orders $ordersRepository->findBy(['user' => $user,'status' => Orders::STATUS_REFUNDED]);
  516.             $typeEvent "refunded";
  517.           break;
  518.         }
  519.         if(empty($proposals) && empty($orders)){
  520.             $response = new StreamedResponse(function(){
  521.                 $rep "event: noOrders";
  522.                 $rep .= "\n";
  523.                 $rep .= "data: {\"content\" :  \" Pas de commandes.\"  } ";
  524.                 $rep .= "\n\n";
  525.                 echo $rep;
  526.             });
  527.             $response->headers->set('Content-Type''text/event-stream'); 
  528.             return $response;
  529.         }
  530.           $numberOrdersRows count($orders);
  531.           $numberProposalsRows count($proposals);
  532.         //dd($ordersRows);
  533.         if($typeEvent !== "proposal"){
  534.           foreach($orders as $order){
  535.             $userId $order->getUser()->getId();
  536.             $user $userRepository->findOneBy(['id' => $userId]);
  537.             $responses[] = array_merge$order->getItems(), ['id_order' => $order->getId(),'firstname' => $user->getFirstname()], ['name' => $user->getLastname()], ["mail" => $user->getEmail()], ["phone" => $user->getPhone()], ["time" => $order->getTime()], ["accountFormId" => $order->getAccountForm()->getId(), "proposalId" => $order->getProposal()->getId(), "status" => $order->getStatus(), "id_offer" => $order->getProposal()->getOffer()->getId(), 'job_title' => $order->getProposal()->getOffer()->getTitle() ] );
  538.             //rsort($orders);
  539.         }
  540.       } else{
  541.         foreach($proposals as $proposal){
  542.           if($proposal->getAccountForm() === null){
  543.             continue; // Skip this proposal if it is null
  544.           }
  545.           $userId $proposal->getAccountForm()->getUser()->getId();
  546.           $user $userRepository->findOneBy(['id' => $userId]);
  547.           $responses[] = ['id_proposal' => $proposal->getId(),'firstname' => $user->getFirstname(),'name' => $user->getLastname(),"mail" => $user->getEmail(),"phone" => $user->getPhone(),"time" => $proposal->getCreatedAt(),"content" => $proposal->getOffer()->getTitle(), "url" => $this->generateUrl(('offers.user.view.proposals'), ['idOffer' => $proposal->getId()]), "imageProfile" => $user->getImageProfil() ? $user->getImageProfil()->getUrlImage() : null"accountFormId" => $proposal->getAccountForm()->getId() ];
  548.           //rsort($orders);
  549.         }
  550.       }
  551.         $ordersFormated json_encode($responses);
  552.         ob_start();
  553.         // $testy = "id: {$visitor->getFirstname()}";
  554.         // $testy = "id: ".ceil(microtime(true));
  555.         if($numberOrdersRows || $numberProposalsRows )
  556.         {
  557.              $res "id: ";        
  558.              $res .= "\n";
  559.              $res .= "event: ".$typeEvent;
  560.              $res .= "\n";
  561.              $res .= "data: {\"content\" :  $ordersFormated  } ";
  562.              $res .= "\n\n";
  563.              echo $res;
  564.         }
  565.          //}
  566.        //  }
  567.          $response = new StreamedResponse(function(){
  568.          ob_end_flush();
  569.          //if(isset($messageChat) && $messageChat !== null)
  570.          //{
  571.              //$this->session->remove('message');
  572.          //}
  573.          });
  574.          //$response->setStatusCode(Response::HTTP_OK);
  575.          $response->headers->set('Content-Type''text/event-stream'); 
  576.         return $response;
  577.         /****************************** */
  578.       }
  579.       
  580.       /**
  581.        * @Route("payment_success", name="payment_success", methods={"GET", "POST"})
  582.        */
  583.       public function paymentSuccess(Request $requestStripeService $stripeService,OrdersRepository $ordersRepository){
  584.           $orderId $request->getSession()->get('orderId');
  585.           $em $this->getDoctrine()->getManager();
  586.           $user $this->getUser();
  587.           $total 0;
  588.           $order $ordersRepository->find($orderId);
  589.           $order->setActive(1);
  590.           $order->setStatus(1);
  591.           $em->persist($order);
  592.           $em->flush();
  593.           $request->getSession()->set('orderId'null);
  594.           return $this->render('payment_success.html.twig');
  595.       }
  596.         /**
  597.        * @Route("payment_cancel", name="payment_cancel", methods={"GET", "POST"})
  598.        */
  599.       public function paymentCancel(){
  600.         return $this->render('payment_cancel.html.twig');
  601.     }
  602.       /**
  603.        * @Route("list_payment_intent", name="list_payment_intent", methods={"GET", "POST"})
  604.        */
  605.       public function listPaymentIntent(StripeService $stripeServiceOrdersRepository $ordersRepository){
  606.           $user $this->getUser();
  607.           $customerStripeId $user->getCustomerStripeId();
  608.           $paymentIntents $stripeService->listPaymentIntent($customerStripeId$ordersRepository);
  609.           return $this->render('list_payment_intent.html.twig', ['paymentIntents' => $paymentIntents]);
  610.       }
  611.   
  612.       /**
  613.        * @Route("capture_payment_intent/{idOrder}", name="payment_intent", methods={"GET", "POST"})
  614.        */
  615.       public function capturePaymentIntent($idOrderStripeService $stripeServiceOrdersRepository $ordersRepositoryAccountFormRepository $accountFormRepository){
  616.           $order $ordersRepository->find($idOrder);
  617.           $accountForm $order->getAccountForm();
  618.           $accountConnectedId $accountForm->getStripeAccountConnectedId();
  619.           $paymentIntentId $order->getPaymentIntentId();
  620.           $stripeService->capturePaymentIntent($paymentIntentId$accountConnectedId);
  621.           return new JsonResponse('Paiement capturé');
  622.       }
  623.       /**
  624.    * @Route("offer-notification/{status}", name="offerNotifications", methods={ "GET", "POST" })
  625.    */
  626.   function offerNotifications($statusRequest $request,AccountFormRepository $accountFormRepository,  OrdersRepository $ordersRepositoryUserRepository $userRepositoryOffersRepository $offersRepositoryProposalRepository $proposalRepository){
  627.     $this->denyAccessUnlessGranted('ROLE_USER');
  628.     $accountForm$this->getUser()->getAccountForm();
  629.     $orders = [];
  630.     $proposals = [];
  631.     switch ($status){
  632.       case :
  633.         $proposals $proposalRepository->findBy(['accountForm' => $accountForm'accepted' => false]);
  634.         $typeEvent "notificationProposal";
  635.         $entries = empty($proposals) ? 'false' 'true';
  636.       break;
  637.       case 1:
  638.         $orders $ordersRepository->findAcceptedByAccountForm($accountForm);
  639.         $typeEvent "notificationAccepted";
  640.         $entries = empty($orders) ? 'false' 'true';
  641.       break;
  642.       case 2:
  643.         $orders $ordersRepository->findFinishedByAccountForm($accountForm);
  644.         $typeEvent "notificationPayed";
  645.         $entries = empty($orders) ? 'false' 'true';
  646.         //dd($accountForm);
  647.       break;
  648.       case 3:
  649.         $orders $ordersRepository->findCancelledByAccountForm($accountForm);
  650.         $typeEvent "notificationCancelled";
  651.         $entries = empty($orders) ? 'false' 'true';
  652.       break;
  653.     }
  654.  
  655.       $numberOrdersRows count($orders);
  656.       $numberProposalsRows count($proposals);
  657.       $content = ['entries' => $entries ];
  658.       $content json_encode($content);
  659.     //dd($ordersRows);
  660.    
  661.     ob_start();
  662.     /*if($numberOrdersRows > 0 || $numberProposalsRows > 0 )
  663.     {*/
  664.          $res "id: ";        
  665.          $res .= "\n";
  666.          $res .= "event: ".$typeEvent;
  667.          $res .= "\n";
  668.          $res .= "data: {\"content\" :  $content  } ";
  669.          $res .= "\n\n";
  670.          echo $res;
  671.     //}
  672.      $response = new StreamedResponse(function(){
  673.       ob_end_flush();
  674.      });
  675.      $response->headers->set('Content-Type''text/event-stream'); 
  676.     return $response;
  677.   }
  678.     }