<?php
declare(strict_types=1);
namespace App\CoreBundle\Controller\Admin;
use App\CoreBundle\Component\Grid\DataSourceInterface;
use App\CoreBundle\Component\Grid\GridFactory;
use App\CoreBundle\Component\Grid\QueryBuilderWithRowManipulatorDataSource;
use App\CoreBundle\Form\Admin\QuickSearch\QuickSearchFormData;
use App\CoreBundle\Form\Admin\QuickSearch\QuickSearchFormType;
use App\CoreBundle\Model\Administrator\AdministratorGridFacade;
use App\CoreBundle\Model\AdminNavigation\BreadcrumbOverrider;
use App\CoreBundle\Model\OrderPdf\OrderPdfFacade;
use App\CoreBundle\Model\UploadedFile\UploadedFileFacade;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use App\CoreBundle\Component\Router\Security\Annotation\CsrfProtection;
class OrderPdfController extends AdminBaseController
{
/**
* @var \App\CoreBundle\Model\AdminNavigation\BreadcrumbOverrider
*/
protected $breadcrumbOverrider;
/**
* @var \App\CoreBundle\Component\Grid\GridFactory
*/
protected $gridFactory;
/**
* @var \App\CoreBundle\Model\OrderPdf\OrderPdfFacade
*/
protected $orderPdfFacade;
/**
* @var \App\CoreBundle\Model\Administrator\AdministratorGridFacade
*/
protected $administratorGridFacade;
/**
* @var UploadedFileFacade
*/
protected $uploadedFileFacade;
public function __construct(
BreadcrumbOverrider $breadcrumbOverrider,
GridFactory $gridFactory,
OrderPdfFacade $orderPdfFacade,
AdministratorGridFacade $administratorGridFacade,
UploadedFileFacade $uploadedFileFacade
) {
$this->breadcrumbOverrider = $breadcrumbOverrider;
$this->gridFactory = $gridFactory;
$this->orderPdfFacade = $orderPdfFacade;
$this->administratorGridFacade = $administratorGridFacade;
$this->uploadedFileFacade = $uploadedFileFacade;
}
/**
* @Route("/order-pdf/list", name="admin_order_pdf_list")
* @param \Symfony\Component\HttpFoundation\Request $request
*/
public function listAction(Request $request)
{
$administrator = $this->getUser();
/* @var $administrator \App\CoreBundle\Model\Administrator\Administrator */
$quickSearchForm = $this->createForm(QuickSearchFormType::class, new QuickSearchFormData());
$quickSearchForm->handleRequest($request);
$queryBuilder = $this->orderPdfFacade->getOrderPdfListQueryBuilderByQuickSearchData($quickSearchForm->getData());
$dataSource = new QueryBuilderWithRowManipulatorDataSource(
$queryBuilder,
'op.id',
function ($row) {
return $this->addOrderPdfEntityToDataSource($row);
}
);
$grid = $this->gridFactory->create('orderPdfList', $dataSource);
$grid->enablePaging();
$grid->setDefaultOrder('created_at', DataSourceInterface::ORDER_DESC);
$grid->addColumn('info', 'op.info', t('Info'), false);
$grid->addColumn('status', 'op.status', t('Status'), false);
$grid->addColumn('tags', 'tags', t('Tags'), false);
$grid->addColumn('orders', 'orders', t('Orders'), false);
$grid->addColumn('pdfs', 'pdfs', t('PDF Document'), false);
$grid->addColumn('created_at', 'op.createdAt', t('Created'), true);
$grid->setActionColumnClassAttribute('table-col table-col-10');
$grid->addDeleteActionColumn('admin_order_pdf_delete', ['id' => 'id'], [])
->setConfirmMessage(t('Do you really want to remove the documents?'));
$grid->setTheme('Admin/Content/OrderPdf/listGrid.html.twig');
$this->administratorGridFacade->restoreAndRememberGridLimit($administrator, $grid);
return $this->render('Admin/Content/OrderPdf/list.html.twig', [
'gridView' => $grid->createView(),
'totalCount' => $grid->getTotalCount(),
'quickSearchForm' => $quickSearchForm->createView(),
]);
}
/**
* @param array $row
* @return array
*/
protected function addOrderPdfEntityToDataSource(array $row)
{
$orderPdf = $this->orderPdfFacade->getById($row['id']);
$row['orderPdf'] = $orderPdf;
$row['orders'] = $orderPdf->getOrders();
$row['tags'] = $orderPdf->getTags();
$row['attr']['class'] = 'grid-group grid-group--' . $orderPdf->getGridGroup();
$ordersPacketa = array();
foreach ($orderPdf->getOrders() as $order) {
$ordersPacketa[$order->getId()] = $order->getPacketa();
}
$row['ordersPacketa'] = $ordersPacketa;
$row['pdfs'] = $this->uploadedFileFacade->getUploadedFilesByEntity($orderPdf);
return $row;
}
/**
* @Route("/order-pdf/delete/{id}", requirements={"id" = "\d+"}, name="admin_order_pdf_delete")
* @CsrfProtection
* @param int $id
*/
public function deleteAction($id)
{
$this->orderPdfFacade->deleteById($id);
return $this->redirectToRoute('admin_order_pdf_list');
}
}