<?php
namespace App\Controller;
use App\Entity\AccountForm;
use App\Entity\Offers;
use MangoPay\PayIn;
use MangoPay\PayOut;
use App\Entity\Orders;
use MangoPay\ApiPayIns;
use MangoPay\MangoPayApi;
use Psr\Log\LoggerInterface;
use MangoPay\MangoPayApi as Api;
use App\Repository\UserRepository;
use App\Repository\OrdersRepository;
use App\Service\Payment\MangopayService;
use App\Repository\AccountFormRepository;
use App\Repository\OffersRepository;
use App\Repository\ProposalRepository;
use App\Service\Payment\StripeService;
use Doctrine\Common\Collections\ArrayCollection;
use PHPUnit\Util\Json;
use Stripe\Climate\Order;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\FrameworkBundle\Controller\RedirectController;
class OrdersController extends AbstractController {
/**
* @Route("/payout/{accountFormId}/{proposalId}", name="payout")
*/
public function Payout($accountFormId, StripeService $stripeService, OrdersRepository $ordersRepository, AccountFormRepository $accountFormRepository, Request $request, ProposalRepository $proposalRepository, $proposalId){
$em = $this->getDoctrine()->getManager();
$sessionBag = $request->getSession();
$accountForm = $accountFormRepository->find($accountFormId);
$proposal = $proposalRepository->find($proposalId);
$orders = $ordersRepository->findBy(['proposal' => $proposal, 'accountForm' => $accountForm]);
if(!empty($orders)){
$order = $orders[0];
}
$accountConnected = $accountForm->getStripeAccountConnectedId();
$buyer = $this->getUser();
$product = $proposal->getOffer()->getCategory()."-Jobinyana" ;
$customerId = $buyer->getCustomerStripeId();
//////////
//$total = 0;
/*if(is_array($cart["meal_price"])){
foreach($cart["meal_price"] as $items_price)
{
$total += $items_price;
}
} else {
$total = $cart["meal_price"];
}*/
//$accountFormId = $cart["idRestaurant"];
//$accountForm = $accountFormRepository->find($accountFormId);
//$stripeId = $accountForm->getStripeAccountConnectedId();
if( !isset($order) || empty($order))
{
$order = new Orders();
$order->setItems(['idCustomer' => $customerId, 'item' => $proposal->getContent()]);
$order->setProposal($proposal);
$order->setActive(0);
$order->setStatus(0);
$order->setCustomerId($customerId);
$order->setAccountForm($accountForm);
$order->setTime(date("d-m-Y H:i:s"));
$order->setDayNumber(date("d"));
$order->setYearNumber(date("Y"));
$order->setMonthNumber(date("m"));
$order->setWeekNumber(date("W"));
$order->setUser($buyer);
$order->setTotal($proposal->getPrice());
}
$em->persist($order);
$em->flush();
$orderId = $order->getId();
$sessionBag->set('orderId',$orderId);
$session = $stripeService->createCheckoutSession($buyer,$product,$order->getTotal(),$accountConnected,$customerId,$orderId, $proposal->getId());
//$cart = array_merge($cart, ['order' => $orderId]);
//$sessionBag->set('cart', $cart);
////////
return $this->redirect($session->url);
/*return new JsonResponse([
'checkoutUrl' => $session->url
]);*/
}
/**
* @Route("/checkout", name="checkout")
*/
public function Checkout(Request $request) {
try {
$Hook = new \MangoPay\Hook();
$mangopayApi = new Api();
$Hook->EventType = "PAYIN_NORMAL_CREATED";
$Hook->Url = "https://coasttocorner.com/checkout/return";
$Hook->Tag = "custom meta";
$Result = $mangopayApi->Hooks->Create($Hook);
} catch(\MangoPay\Libraries\ResponseException $e) {
// handle/log the response exception with code $e->GetCode(), message $e->GetMessage() and error(s) $e->GetErrorDetails()
} catch(\MangoPay\Libraries\Exception $e) {
// handle/log the exception $e->GetMessage()
}
return $this->render('checkout.html.twig');
}
/**
* @Route("/checkout/return", name="checkout-return", methods={"GET","POST"})
*/
public function CheckoutReturn(Request $request, LoggerInterface $logger, MangopayService $mangopayservice,AccountFormRepository $accountFormRepository) {
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
//$responseHook = $mangopayservice->payinHook();
$public_html_dir = $this->getParameter('kernel.project_dir').'/public_html';
$EventType = $request->query->get('EventType') !== null ? $request->query->get('EventType') : null;
$RessourceId = $request->query->get('RessourceId') !== null ? $request->query->get('RessourceId') : null;
$transactionId = $request->query->get('transactionId') !== null ? $request->query->get('transactionId') : null;
//dd($request->getContent());
if( $EventType !== null or $transactionId !== null){
$handle = fopen($public_html_dir.'/response.txt', 'w+');
//var_dump($handle);
$result = implode(" ",$request->request->all());
// fwrite($handle,(String)$request->getContent());
//$payIn = new ApiPayIns($mangopayservice->getMangoPayApi());
//$transaction = $payIn->Get($transactionId);
//$detailsTransaction = $transaction->GetReadOnlyProperties();
//$details = implode(',', $EventType);
fwrite($handle,$EventType);
// fwrite($handle,$request->getContent());
fclose($handle);
$session = $request->getSession();
$cart = $session->get('cart');
$total = 0;
if(is_array($cart["meal_price"])){
foreach($cart["meal_price"] as $items_price)
{
$total += $items_price;
}
} else {
$total = $cart["meal_price"];
}
$accountFormId = $cart['idRestaurant'];
$accountForm = $accountFormRepository->find($accountFormId);
$cart = json_encode($cart);
$order = new Orders();
$order->setItems($cart);
$order->setActive(1);
$order->setStatus(1);
$order->setAccountForm($accountForm);
$order->setTime(date("d-m-Y H:i:s"));
$order->setDayNumber(date("d"));
$order->setYearNumber(date("Y"));
$order->setMonthNumber(date("m"));
$order->setWeekNumber(date("W"));
$order->setUser($user);
$order->setTotal($total);
$em->persist($order);
$em->flush();
}
return $this->render('checkout.return.html.twig');
}
/**
* @Route("/order-prepared/view/{idOrder}", name="ordersPrepared")
*/
public function orderToTakeOver($idOrder, OrdersRepository $ordersRepository){
$em = $this->getDoctrine()->getManager();
$accountForm = $this->getUser()->getAccounForm();
$accountFormId = $this->getUser()->getAccountForm();
$order = $ordersRepository->findPreparedByAccountForm($accountForm->getId());
$order->setStatus(2);
$em->persist($order);
$em->flush();
return New JsonResponse('the status has been well changed');
}
/**
* @Route("/order-upcoming/view/{idOrder}", name="ordersUpcoming")
*/
public function ordersUpcoming($idOrder, OrdersRepository $ordersRepository){
$em = $this->getDoctrine()->getManager();
$accountFormId = $this->getUser()->getAccountForm();
$order = $ordersRepository->find($idOrder);
$order->setStatus(2);
$em->persist($order);
$em->flush();
return New JsonResponse('the status has been well changed');
}
/**
* @Route("/order-pending/view/{idOrder}", name="ordersPending")
*/
public function orderPending($idOrder, OrdersRepository $ordersRepository){
$em = $this->getDoctrine()->getManager();
$accountFormId = $this->getUser()->getAccountForm();
$order = $ordersRepository->find($idOrder);
$order->setStatus(2);
$em->persist($order);
$em->flush();
return New JsonResponse('the status has been well changed');
}
/**
* @Route("orders-customers", name="ordersCustomers", methods={ "GET", "POST" })
*/
function ordersCustomers(Request $request, OrdersRepository $ordersRepository, UserRepository $userRepository){
$this->denyAccessUnlessGranted('ROLE_USER');
$cookie = $request->cookies->get('close');
$accountFormId = $this->getUser()->getAccountForm();
$ordersRows = $ordersRepository->findByAccountForm($accountFormId);
if(empty($orderRows)){
$orders = null;
}
foreach($ordersRows as $order){
$userId = $order->getUser()->getId();
$user = $userRepository->findOneBy(['id' => $userId]);
$orders[] = array_merge( $order->getItems(), ['id' => $order->getId()], ['firstname' => $user->getFirstname()], ['name' => $user->getLastname()], ["mail" => $user->getEmail()], ["phone" => $user->getPhone()], ["time" => $order->getTime()] );
}
return $this->render('ordersCustomers.html.twig', ['orders' => $orders]);
}
/**
* @Route("orders-status/views/{status}", name="ordersViews", methods={ "GET", "POST" })
*/
function ordersViews($status, Request $request,AccountFormRepository $accountFormRepository, OrdersRepository $ordersRepository, UserRepository $userRepository, OffersRepository $offersRepository, ProposalRepository $proposalRepository){
$this->denyAccessUnlessGranted('ROLE_USER');
$accountForm= $this->getUser()->getAccountForm();
$orders = [];
$proposals = [];
switch ($status){
case 0 :
$proposals = $proposalRepository->findBy(['accountForm' => $accountForm, 'accepted' => false]);
$typeEvent = "proposal";
break;
case 1:
$orders = $ordersRepository->findAcceptedByAccountForm($accountForm);
$typeEvent = "accepted";
break;
case 2:
$orders = $ordersRepository->findFinishedByAccountForm($accountForm);
$typeEvent = "payed";
//dd($accountForm);
break;
case 3:
$orders = $ordersRepository->findCancelledByAccountForm($accountForm);
$typeEvent = "cancelled";
break;
}
if(empty($proposals) && empty($orders)){
$response = new StreamedResponse(function(){
$rep = "event: noOrders";
$rep .= "\n";
$rep .= "data: {\"content\" : \" Pas d'offres.\" } ";
$rep .= "\n\n";
echo $rep;
});
$response->headers->set('Content-Type', 'text/event-stream');
return $response;
}
$numberOrdersRows = count($orders);
$numberProposalsRows = count($proposals);
//dd($ordersRows);
if($typeEvent !== "proposal"){
foreach($orders as $order){
$userId = $order->getUser()->getId();
$user = $userRepository->findOneBy(['id' => $userId]);
$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] );
//rsort($orders);
}
} else{
foreach($proposals as $proposal){
$userId = $proposal->getOffer()->getUser()->getId();
$user = $userRepository->findOneBy(['id' => $userId]);
$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()];
//rsort($orders);
}
}
$ordersFormated = json_encode($responses);
ob_start();
if($numberOrdersRows > 0 || $numberProposalsRows > 0 )
{
$res = "id: ";
$res .= "\n";
$res .= "event: ".$typeEvent;
$res .= "\n";
$res .= "data: {\"content\" : $ordersFormated } ";
$res .= "\n\n";
echo $res;
}
$response = new StreamedResponse(function(){
ob_end_flush();
});
$response->headers->set('Content-Type', 'text/event-stream');
return $response;
}
/**
* @Route("offers-private/views/{status}", name="offers.private.views", methods={ "GET", "POST" })
*/
function offersPrivatesViews( Request $request, $status, AccountFormRepository $accountFormRepository,OrdersRepository $ordersRepository, ProposalRepository $proposalRepository, UserRepository $userRepository, OffersRepository $offersRepository){
$this->denyAccessUnlessGranted('ROLE_USER');
$accountForm = $this->getUser()->getAccountForm();
$offers = [];
$orders = [];
$responses = [];
$offerFlag = false;
switch ($status){
case 1: // offers
$offersRows = $offersRepository->findByAccountForm($accountForm);
$typeEvent = "offers";
$offerFlag = true;
break;
case 2: // payment intent created
$orders = $ordersRepository->findAcceptedByAccountForm($accountForm);
$typeEvent = "acceptedOfferPrivate";
break;
case 3: // payed
$orders = $ordersRepository->findFinishedByAccountForm($accountForm);
$typeEvent = "payedOfferPrivate";
break;
case 4: // cancelled
$orders = $ordersRepository->findCancelledByAccountForm($accountForm);
$typeEvent = "cancelledOfferPrivate";
break;
}
ob_start();
if($offerFlag){
$offers = new ArrayCollection($offersRows);
if($offers->isEmpty()){
$res = "event: noOffers";
$res .= "\n";
$res .= "data: {\"content\" : \" Pas de demandes.\" } ";
$res .= "\n\n";
echo $res;
};
$numberOffersRows = count($offersRows);
$processedOffers = [];
foreach($offers as $offer){
$offer = $offersRepository->findProposals($offer['offers_id']);
$proposal = $offer->getProposals();
if($proposal->isEmpty()){
$proposal = "none";
}else{
$proposal = "published";
}
$user = $offer->getUser();
$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()] );
}
$offersFormated = json_encode($processedOffers);
$lastOrder = $offersRows[$numberOffersRows - 1];
if($numberOffersRows > 0 )
{
$res = "id: ";
$res .= "\n";
$res .= "event: offers";
$res .= "\n";
$res .= "data: {\"content\" : $offersFormated } ";
$res .= "\n\n";
echo $res;
}
} else {
if(empty($orders)){
$res = "event: noOrders";
$res .= "\n";
$res .= "data: {\"content\" : \" Pas de commandes.\" } ";
$res .= "\n\n";
echo $res;
};
if($typeEvent !== "offers"){
foreach($orders as $order){
$userId = $order->getUser()->getId();
$user = $userRepository->findOneBy(['id' => $userId]);
$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] );
}
$ordersFormated = json_encode($responses);
}
if($orders > 0 || isset($ordersFormated) && !empty($ordersFormated) )
{
$res = "id: ";
$res .= "\n";
$res .= "event: ".$typeEvent;
$res .= "\n";
$res .= "data: {\"content\" : $ordersFormated } ";
$res .= "\n\n";
echo $res;
}
}
$response = new StreamedResponse(function(){
ob_end_flush();
});
$response->headers->set('Content-Type', 'text/event-stream');
return $response;
}
/**
* @Route("update-status-orders/{idOrder}/{status}", name="updateStatusOrders", methods={"POST", "GET"})
*/
function updateStatusOrders($idOrder, $status, OrdersRepository $ordersRepository, StripeService $stripeService){
$em =$this->getDoctrine()->getManager();
$order = $ordersRepository->find($idOrder);
$paymentIntent = $order->getPaymentIntentId();
$accountConnected = $order->getAccountForm()->getStripeAccountConnectedId();
if($status === 1){
$stripeService->capturePaymentIntent($paymentIntent, $accountConnected);
//$order->setStatus(3);
$order->setActive(2);
$em->persist($order);
$em->flush();
}
return New JsonResponse('commande mise à jour');
/* $order->setStatus(++$status);
$em->persist($order);
$em->flush();
return New JsonResponse('commande mise à jour');*/
}
/**
* @Route("orders-user/view/{status}", name="ordersUser", methods={"POST","GET"})
*/
function ordersUser($status,ProposalRepository $proposalRepository, OrdersRepository $ordersRepository, OffersRepository $offersRepository, UserRepository $userRepository){
$this->denyAccessUnlessGranted('ROLE_USER');
/* $user = $this->getUser();
$userId = $user->getId();
$ordersRows = $ordersRepository->findBy(['user' => $userId]);
$offersRows = $offersRepository->findBy(['user' => $userId]);
if(empty($ordersRows && $offersRows)){
$response = new StreamedResponse(function(){
$rep = "event: noOrders";
$rep .= "\n";
$rep .= "data: {\"content\" : \" Pas de commandes.\" } ";
$rep .= "\n\n";
echo $rep;
});
$response->headers->set('Content-Type', 'text/event-stream');
return $response;
}
$numberOrdersRows = count($ordersRows);
$numberOffersRows = count($offersRows);
foreach($ordersRows as $order){
$userId = $order->getUser()->getId();
$accountForm = $order->getAccountForm();
if ($accountForm === null) {
continue; // Skip this order if AccountForm is not found
}
$orders[] = array_merge(
$order->getItems(),
['id_order' => $order->getId()],
['category' => $order->getProposal()->getOffer()->getCategory()],
['jobber_name' => $accountForm->getNom() . ' ' . $accountForm->getPrenom()],
["time" => $order->getTime()],
["status" => $order->getStatus()],
["url" => $this->generateUrl('storeId', ['slug' => $accountForm->getCategory(), 'id' => $accountForm->getId()])],
// ["urlImage" => /*'images1/categories/Restauration/store_'.$accountForm->getMail().'/'.$accountForm->getImage()[0]->getUrlImage() "http://localhost/images/jobinyana-150x150.png"]
);
}
krsort($orders);
foreach($orders as $value){
$arrOrders[] = $value;
}
$ordersFormated = json_encode($arrOrders);
ob_start();
$lastOrder = $ordersRows[$numberOrdersRows - 1];
if($numberOrdersRows > 0 )
{
$res = "id: ".$order->getId();
$res .= "\n";
$res .= "event: orders";
$res .= "\n";
$res .= "data: {\"content\" : $ordersFormated } ";
$res .= "\n\n";
echo $res;
}
$response = new StreamedResponse(function(){
ob_end_flush();
});
$response->headers->set('Content-Type', 'text/event-stream');
return $response;
*/
/***************************** */
$user= $this->getUser();
$orders = [];
$proposals = [];
$proposalsFetch = [];
$offers = $offersRepository->findBy(['user' => $user]);
foreach($offers as $offer){
if($offer === null){
continue;
}
$proposalsByOffer = $proposalRepository->findBy(['offer' => $offer , 'accepted' => false]);
if(empty($proposalsByOffer)){
continue; // Skip this offer if no proposals are found
}
$proposalsFetch[$offer->getId()] = $proposalsByOffer;
}
switch ($status){
case 0 :
$proposals = array_merge(...$proposalsFetch);
$typeEvent = "proposal";
break;
case 1:
$orders = $ordersRepository->findBy(['user' => $user,'status' => Orders::STATUS_PAYMENT_INTENT_CREATED]);
$typeEvent = "accepted";
break;
case 2:
$orders = $ordersRepository->findBy(['user' => $user,'status' => Orders::STATUS_PAID]);
$typeEvent = "payed";
break;
case 3:
$orders = $ordersRepository->findBy(['user' => $user, 'status' => Orders::STATUS_CANCELED]);
$typeEvent = "canceled";
break;
case 4:
$orders = $ordersRepository->findBy(['user' => $user,'status' => Orders::STATUS_REFUNDED]);
$typeEvent = "refunded";
break;
}
if(empty($proposals) && empty($orders)){
$response = new StreamedResponse(function(){
$rep = "event: noOrders";
$rep .= "\n";
$rep .= "data: {\"content\" : \" Pas de commandes.\" } ";
$rep .= "\n\n";
echo $rep;
});
$response->headers->set('Content-Type', 'text/event-stream');
return $response;
}
$numberOrdersRows = count($orders);
$numberProposalsRows = count($proposals);
//dd($ordersRows);
if($typeEvent !== "proposal"){
foreach($orders as $order){
$userId = $order->getUser()->getId();
$user = $userRepository->findOneBy(['id' => $userId]);
$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() ] );
//rsort($orders);
}
} else{
foreach($proposals as $proposal){
if($proposal->getAccountForm() === null){
continue; // Skip this proposal if it is null
}
$userId = $proposal->getAccountForm()->getUser()->getId();
$user = $userRepository->findOneBy(['id' => $userId]);
$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() ];
//rsort($orders);
}
}
$ordersFormated = json_encode($responses);
ob_start();
// $testy = "id: {$visitor->getFirstname()}";
// $testy = "id: ".ceil(microtime(true));
if($numberOrdersRows > 0 || $numberProposalsRows > 0 )
{
$res = "id: ";
$res .= "\n";
$res .= "event: ".$typeEvent;
$res .= "\n";
$res .= "data: {\"content\" : $ordersFormated } ";
$res .= "\n\n";
echo $res;
}
//}
// }
$response = new StreamedResponse(function(){
ob_end_flush();
//if(isset($messageChat) && $messageChat !== null)
//{
//$this->session->remove('message');
//}
});
//$response->setStatusCode(Response::HTTP_OK);
$response->headers->set('Content-Type', 'text/event-stream');
return $response;
/****************************** */
}
/**
* @Route("payment_success", name="payment_success", methods={"GET", "POST"})
*/
public function paymentSuccess(Request $request, StripeService $stripeService,OrdersRepository $ordersRepository){
$orderId = $request->getSession()->get('orderId');
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
$total = 0;
$order = $ordersRepository->find($orderId);
$order->setActive(1);
$order->setStatus(1);
$em->persist($order);
$em->flush();
$request->getSession()->set('orderId', null);
return $this->render('payment_success.html.twig');
}
/**
* @Route("payment_cancel", name="payment_cancel", methods={"GET", "POST"})
*/
public function paymentCancel(){
return $this->render('payment_cancel.html.twig');
}
/**
* @Route("list_payment_intent", name="list_payment_intent", methods={"GET", "POST"})
*/
public function listPaymentIntent(StripeService $stripeService, OrdersRepository $ordersRepository){
$user = $this->getUser();
$customerStripeId = $user->getCustomerStripeId();
$paymentIntents = $stripeService->listPaymentIntent($customerStripeId, $ordersRepository);
return $this->render('list_payment_intent.html.twig', ['paymentIntents' => $paymentIntents]);
}
/**
* @Route("capture_payment_intent/{idOrder}", name="payment_intent", methods={"GET", "POST"})
*/
public function capturePaymentIntent($idOrder, StripeService $stripeService, OrdersRepository $ordersRepository, AccountFormRepository $accountFormRepository){
$order = $ordersRepository->find($idOrder);
$accountForm = $order->getAccountForm();
$accountConnectedId = $accountForm->getStripeAccountConnectedId();
$paymentIntentId = $order->getPaymentIntentId();
$stripeService->capturePaymentIntent($paymentIntentId, $accountConnectedId);
return new JsonResponse('Paiement capturé');
}
/**
* @Route("offer-notification/{status}", name="offerNotifications", methods={ "GET", "POST" })
*/
function offerNotifications($status, Request $request,AccountFormRepository $accountFormRepository, OrdersRepository $ordersRepository, UserRepository $userRepository, OffersRepository $offersRepository, ProposalRepository $proposalRepository){
$this->denyAccessUnlessGranted('ROLE_USER');
$accountForm= $this->getUser()->getAccountForm();
$orders = [];
$proposals = [];
switch ($status){
case 0 :
$proposals = $proposalRepository->findBy(['accountForm' => $accountForm, 'accepted' => false]);
$typeEvent = "notificationProposal";
$entries = empty($proposals) ? 'false' : 'true';
break;
case 1:
$orders = $ordersRepository->findAcceptedByAccountForm($accountForm);
$typeEvent = "notificationAccepted";
$entries = empty($orders) ? 'false' : 'true';
break;
case 2:
$orders = $ordersRepository->findFinishedByAccountForm($accountForm);
$typeEvent = "notificationPayed";
$entries = empty($orders) ? 'false' : 'true';
//dd($accountForm);
break;
case 3:
$orders = $ordersRepository->findCancelledByAccountForm($accountForm);
$typeEvent = "notificationCancelled";
$entries = empty($orders) ? 'false' : 'true';
break;
}
$numberOrdersRows = count($orders);
$numberProposalsRows = count($proposals);
$content = ['entries' => $entries ];
$content = json_encode($content);
//dd($ordersRows);
ob_start();
/*if($numberOrdersRows > 0 || $numberProposalsRows > 0 )
{*/
$res = "id: ";
$res .= "\n";
$res .= "event: ".$typeEvent;
$res .= "\n";
$res .= "data: {\"content\" : $content } ";
$res .= "\n\n";
echo $res;
//}
$response = new StreamedResponse(function(){
ob_end_flush();
});
$response->headers->set('Content-Type', 'text/event-stream');
return $response;
}
}