<?php
namespace App\Controller\Front;
use App\Entity\Company;
use App\Entity\PlanningCompany;
use App\Repository\AvisRepository;
use App\Repository\CommandRepository;
use App\Repository\CompanyRepository;
use App\Repository\ProductRepository;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
class CompanyController extends AbstractController
{
/**
* @Route("/prestataires/recherche/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_company_search")
*/
public function searchCompanyFilter(int $page, Request $request, CompanyRepository $companyRepository, PaginatorInterface $paginator, SessionInterface $session)
{
if ($request->isMethod('POST')) {
if ($request->get('department_filter') || $request->get('category_filter')) {
$parameters = [
'department' => $request->get('department_filter') !== '' ? $request->get('department_filter') : null,
'category' => $request->get('category_filter') !== '' ? $request->get('category_filter') : null,
'date_evt' => $request->get('date_filter') !== '' ? $request->get('date_filter') : null,
];
$session->set('department_company', $request->get('department_filter'));
$session->set('category_company', $request->get('category_filter'));
$session->set('date_evt', $request->get('date_filter'));
$companies = $companyRepository->searchCompany($parameters);
$n_companies = [];
// on filtre sur les prestataires qui sont disponibles a la date souhaitee
foreach ($companies as $compagny){
$dtDispo = true;
/** @var Company $compagny */
foreach ($compagny->getPlanningCompanies() as $planningCompany){
/** @var PlanningCompany $planningCompany */
if ($planningCompany->getAtDate()->format("d/m/Y") == $parameters["date_evt"]){
$dtDispo = false;
continue;
}
}
if ($dtDispo) {
$n_companies[] = $compagny;
}
}
$pagination = $paginator->paginate(
$n_companies,
$page, /*page number*/
15 /*limit per page*/
);
return $this->render('front/company/list.html.twig', [
'companies' => $pagination,
'countCompanies' => count($n_companies)
]);
}
}
$session->remove('department');
$session->remove('date_evt');
$session->remove('min_price');
$session->remove('max_price');
$session->remove('category');
return $this->redirectToRoute('front_company_list');
}
/**
* @Route("/prestataires/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_company_list")
*/
public function list(int $page, CompanyRepository $companyRepository, PaginatorInterface $paginator)
{
// $companies = $companyRepository->findBy(['isConfirmed' => true, 'isValidDocument' => true]);
$companies = $companyRepository->getCompaniesprodActif();
$pagination = $paginator->paginate(
$companies,
$page, /*page number*/
9 /*limit per page*/
);
return $this->render('front/company/list.html.twig', [
'companies' => $pagination,
'countCompanies' => count($companies)
]);
}
/**
* @Route("/prestataire/{id}/{companySlug}/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_company_single")
*/
public function single(int $page, Company $company, AvisRepository $avisRepository, PaginatorInterface $paginator, CommandRepository $commandRepository, ProductRepository $productRepository)
{
$commands = $commandRepository->getCommandsByCompany($company);
$lastProducts = $productRepository->getAllProductsByCompany($company);
$allAvis = $avisRepository->getAvisByCompany($company);
$pagination = $paginator->paginate(
$allAvis,
$page, /*page number*/
20 /*limit per page*/
);
$globalNote = ['totalNote' => 0, 'count' => 0];
$qualityService = ['totalNote' => 0, 'count' => 0];
$fiablity = ['totalNote' => 0, 'count' => 0];
$price = ['totalNote' => 0, 'count' => 0];
$speed = ['totalNote' => 0, 'count' => 0];
$conformDescription = ['totalNote' => 0, 'count' => 0];
$communication = ['totalNote' => 0, 'count' => 0];
foreach ($allAvis as $avis) {
$globalNote['totalNote'] = $globalNote['totalNote'] + $avis->getGlobalNote();
$globalNote['count'] = $globalNote['count'] + 1;
$qualityService['totalNote'] = $qualityService['totalNote'] + $avis->getServiceQuality();
$qualityService['count'] = $qualityService['count'] + 1;
$fiablity['totalNote'] = $fiablity['totalNote'] + $avis->getFiability();
$fiablity['count'] = $fiablity['count'] + 1;
$price['totalNote'] = $price['totalNote'] + $avis->getPrice();
$price['count'] = $price['count'] + 1;
$speed['totalNote'] = $speed['totalNote'] + $avis->getSpeed();
$speed['count'] = $speed['count'] + 1;
$conformDescription['totalNote'] = $conformDescription['totalNote'] + $avis->getConformDescription();
$conformDescription['count'] = $conformDescription['count'] + 1;
$communication['totalNote'] = $communication['totalNote'] + $avis->getCommunication();
$communication['count'] = $communication['count'] + 1;
}
return $this->render('front/company/single.html.twig', [
'company' => $company,
'countCommands' => count($commands),
'lastProducts' => $lastProducts,
'avis' => $pagination,
'notes' => [
'globalNote' => $globalNote,
'qualityService' => $qualityService,
'price' => $price,
'speed' => $speed,
'conformDescription' => $conformDescription,
'communication' => $communication,
'fiability' => $fiablity
]
]);
}
}