<?php
declare(strict_types=1);
namespace App\Controller\Administration;
use Symfony\Component\HttpFoundation\{
Request,
Response
};
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use App\Common\Controllers\CrmCrudAbstractController;
use App\Form\Type\CspType;
use App\Entity\Csp;
use App\Services\Administration\CspService;
class CspController extends CrmCrudAbstractController
{
private const TEMPLATE_FOLDER = 'administration/csp/';
/**
* @see CrmAbstractController
*/
protected function initModuleDetails(): array
{
return [
'entityClassName' => Csp::class,
'formClassName' => CspType::class,
'moduleService' => CspService::class,
'modulePrefix' => 'administration_csp',
'moduleTemplate' => self::TEMPLATE_FOLDER,
'hasPagin' => true,
'defaultSort' => ['field' => 'c.name', 'op' => 'ASC'],
'useIndexMode' => true,
];
}
#[Route('/administration/csp', name: 'administration_csp_management_index', options: ['expose' => true])]
public function index(Request $request, CspService $cspTypeService): Response
{
return parent::getList($request, parent::MODE_INDEX, $cspTypeService);
}
#[Route('/administration/csp/listing', name: 'administration_csp_management_listing', options: ['expose' => true])]
public function listing(Request $request, CspService $cspTypeService): Response
{
return parent::getList($request, parent::MODE_LISTING, $cspTypeService, true);
}
#[Security("is_granted('ROLE_PM') or is_granted('ROLE_EDM') or is_granted('ROLE_EPA')")]
#[Route('/administration/csp/add', name: 'administration_csp_management_add', options: ['expose' => true])]
#[Route('/administration/csp/edit/{id}', name: 'administration_csp_management_edit', options: ['expose' => true])]
public function add(Request $request, CspService $cspService, ?Csp $csp): Response
{
try {
$response = parent::addEntity(
$request,
$csp,
['csp' => $csp,],
[],
false
);
if ($request->isMethod('POST')) {
$cspService->saveCsp(
$response['entity'],
$_POST['csp']['selectedCsptype'] ?? [],
$_POST['csp']['selectedCompanytype'] ?? [],
$_POST['csp']['selectedCountry'] ?? []
);
$this->addFlash('success', 'Done successfully !');
return $this->redirectToRoute('administration_csp_management_index');
}
} catch (\Exception $exception) {
$this->addFlash('error', $exception->getMessage());
if ($request->isMethod('POST')) {
$route = ($csp)
? $this->generateUrl('administration_csp_management_edit', ['id' => $csp->getId(),])
: $this->generateUrl('administration_csp_management_add')
;
return $this->redirect($route);
}
return $this->redirectToRoute('administration_csp_management_index');
}
return $response;
}
#[IsGranted("ROLE_PM")]
#[Route('/administration/csp/delete/{id}', name: 'administration_csp_management_delete', options: ['expose' => true])]
public function delete(CspService $cspService, Csp $csp): Response
{
try {
$cspService->moveToTrash($csp);
$this->addFlash('success', 'Done successfully !');
} catch (\Exception $exception) {
$this->addFlash('error', $exception->getMessage());
}
return $this->redirectToRoute('administration_csp_management_index');
}
#[Security("is_granted('ROLE_PM') or is_granted('ROLE_EDM') or is_granted('ROLE_EPA')")]
#[Route(
'/administration/csp/csv-export',
name: 'administration_csp_management_csv_export',
options: ['expose' => true])
]
public function csvExport(Request $request, CspService $cspService): Response
{
return parent::csvExportResponse(
$request,
$cspService,
$cspService->getCsvExportFilename()
);
}
}