<?phpnamespace App\Controller;use App\Entity\Alert;use App\Entity\AlertProduct;use App\Entity\Competitor;use App\Entity\CompetitorProduct;use App\Entity\PriceScraped;use DateInterval;use DateTime;use http\Env\Request;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;class DashboardController extends AbstractController{ /** * @Route("/", name="home") */ public function index(): Response { $em = $this->getDoctrine()->getManager(); $interval = $this->lastScrapedCard(); $nbErrors = $this->countProductError(); $monitoredProduct = $em->getRepository(CompetitorProduct::class)->findMonitoredProducts(); $number_prices_scrapped = $this->countPriceScrap(); $compScrap = $this->countCompScrap(); if($monitoredProduct) $monitoredProduct = count($monitoredProduct); else $monitoredProduct = 0; return $this->render('dashboard/index.html.twig', [ 'interval' => $interval, 'nbErrors' => $nbErrors, 'monitoredProduct' => $monitoredProduct, 'pricesScrapped' => $number_prices_scrapped, 'compScrap' => $compScrap ]); } public function lastScrapedCard(): string { $em = $this->getDoctrine()->getManager(); $idLast = $em->getRepository(PriceScraped::class)->findLastScrap(); $lastScrap = $em->getRepository(PriceScraped::class)->findOneBy(['id' => $idLast[0][1]]); $dateLastScrap = $lastScrap->getDate(); $date = new DateTime('now'); $intervalDate = $dateLastScrap->diff($date); $interval = ($intervalDate->h)*60 + $intervalDate->i; if($intervalDate->h > 0 || $intervalDate->i > 5){ return '<p class="uk-margin-remove-bottom uk-padding-small uk-padding-remove-bottom"><i class="fas fa-exclamation-triangle fa-xl uk-margin-small-right" style="color: orange"></i>Attention, il y a peut-être un caillou dans l\'engrenage :</p> <p class="uk-padding-small uk-padding-remove-top uk-margin-small-left">dernier prix relevé il y a '.$interval.' minutes</p>'; }else{ return '<p class="uk-padding-small"><i class="fas fa-check-circle fa-xl uk-margin-small-right" style="color: green"></i>La routourne tourne rond, dernier prix relevé à '.$dateLastScrap->format('h:i').' sur '.$em->getRepository(Competitor::class)->findOneBy(['competitor_id' => $lastScrap->getCompetitorId()])->getBrand().'</p>'; } } public function countProductError(): string { $em = $this->getDoctrine()->getManager(); $date = new DateTime('now'); $interval = $date->sub(new DateInterval('P7D')); $products = $em->getRepository(PriceScraped::class)->findProductError($interval); if ($products) $nb_errors = '<p class="uk-padding-small"><i class="fas fa-exclamation-triangle fa-xl uk-margin-small-right" style="color: orange"></i>'.count($products).' Produits n\'ont pas pu être mis à jour</p>'; else $nb_errors = ''; return $nb_errors; } public function countPriceScrap(){ $em = $this->getDoctrine()->getManager(); $date = new DateTime('now'); $intervalDate = $date->sub(new DateInterval('P7D')); $pricesScrapped = $em->getRepository(PriceScraped::class)->findPriceScrap($intervalDate); if($pricesScrapped) return count($pricesScrapped); else return 0; } /** * count the number of competitor activated * @return int */ public function countCompScrap(){ $em = $this->getDoctrine()->getManager(); $date = new DateTime('now'); $intervalDate = $date->sub(new DateInterval('P7D')); $compScrap = $em->getRepository(PriceScraped::class)->findCompScrap($intervalDate); if($compScrap) return count($compScrap); else return 0; } /** * construct table with all alerts * @Route("/load/dashboardTable", name="dashboard_table") */ public function constructTable(\Symfony\Component\HttpFoundation\Request $request){ $data = $request->request->all(); $em = $this->getDoctrine()->getManager(); $alerts = $em->getRepository(Alert::class)->findAll(); foreach($alerts as $alert){ $alert_table['icon'] = '<p class="uk-align-center">'.$alert->getIconLink().'</p>'; $alert_table['alert_level'] = '<p style="text-align: center">'.$alert->getAlertLevel().'</p>'; $alert_table['name'] = '<p class="uk-align-center">'.$alert->getMessage().'</p>'; $alerted_products = $em->getRepository(AlertProduct::class)->findBy(['alert_level' => $alert->getAlertLevel()]); if($alerted_products){ $number_products = count($alerted_products); }else $number_products = 0; $alert_table['number_products'] = '<p class="uk-align-center">'.$number_products.'</p>'; $alert_table['list_products'] = '<a href="https://pricedemo.romapps.com/comparativeTable/'.$alert->getAlertLevel().'" class="uk-button uk-button-primary uk-margin-small-left uk-align-center">Voir produits</a>'; $alerts_table[] = $alert_table; } $json_alerts_table = json_encode($alerts_table); $returnResponse = new JsonResponse($json_alerts_table); $returnResponse->setJson($json_alerts_table); return $returnResponse; }}