<?php
namespace App\Controller\Backend;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\View\View;
use App\Annotation\Log;
use App\Annotation\PermissionAdmin;
use App\Annotation\PermissionPublic;
use App\Utilities\ExportUtil;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* @Rest\Route("/api/jury")
*/
class JuryController extends BaseController
{
public function extraFilter($input)
{
$commercialId = $input->get('filter_commercial') ?? $this->userService->getCommercialIdByUser();
$extraFilter = function ($qb) use ($commercialId) {
if ($commercialId) {
$qb->join('Jury.profiles', 'profiles');
$qb->andWhere('profiles.commercial IS NOT NULL AND profiles.commercial = :commercialId')
->setParameter('commercialId', $commercialId);
}
};
return $extraFilter;
}
/**
* @Rest\Get("/manager")
* @PermissionPublic
* @return View
*/
public function juryManager(Request $request): View
{
$input = $request->query;
$extraFilter = $this->extraFilter($input);
return View::create(
$this->currentRepo->getList($request, 'App\DTO\Jury\JuryManagerOutput', $extraFilter),
Response::HTTP_OK
);
}
/**
* @Rest\Get("/manager/{id}")
* @PermissionPublic
* @return View
*/
public function juryManagerProfile($id): View
{
return View::create(
$this->currentService->getProfileById($id),
Response::HTTP_OK
);
}
/**
* @Rest\Get("/list")
* @PermissionPublic
* @return View
*/
public function getList(Request $request): View
{
return View::create(
$this->currentRepo->getList($request, null),
Response::HTTP_OK
);
}
/**
* @Rest\Get("/export-excel")
* @PermissionPublic
*/
public function exportExcel(Request $request, TranslatorInterface $translator, ExportUtil $exportUtil)
{
ini_set('memory_limit', '-1');
ini_set('max_execution_time', 9600);
set_time_limit(0);
$input = $request->query;
$extraFilter = $this->extraFilter($input);
if ($request->get('all') == 'true') {
$q = $this->currentRepo->getAll($request, 'App\DTO\Jury\JuryExcelOutput', $extraFilter, true);
$fileName = 'Export_' . $translator->trans('Étude_du_dossier') . '_' . date('d_m_Y') . '.xlsx';
$excelData = $exportUtil->generateByArrayJury($q);
header('Content-Description: File Transfer');
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: inline; filename=' . $fileName);
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
echo $excelData;
exit;
}
$data = $this->currentRepo->getAll($request, 'App\DTO\Jury\JuryExcelOutput');
$content = $this->renderView('excel/jury_list.html.twig', [
'data' => $data,
]);
$fileName = 'Export_' . $translator->trans('Étude_du_dossier') . '_' . date('d_m_Y') . '.xlsx';
$excelData = ExportUtil::generateExcel($content);
$result = [
'file_name' => $fileName,
'file' => "data:application/vnd.ms-excel;base64," . base64_encode($excelData),
];
return $this->json($result);
}
/**
* @Rest\Post("")
* @PermissionAdmin
* @Log
* @return View
*/
public function add(Request $request): View
{
return View::create($this->currentService->add($request), Response::HTTP_OK);
}
/**
* @Rest\Post("/update")
* @PermissionAdmin
* @Log
* @return View
*/
public function update(Request $request): View
{
return View::create($this->currentService->update(null, $request), Response::HTTP_OK);
}
/**
* @Rest\Delete("/{id}")
* @PermissionAdmin
* @Log
* @return View
*/
public function delete(int $id): View
{
return View::create(['result' => $this->currentService->delete($id)], Response::HTTP_OK);
}
/**
* @Rest\Get("/{id}")
* @PermissionPublic
* @return View
*/
public function getOne($id): View
{
return View::create($this->currentService->getById($id), Response::HTTP_OK);
}
}