<?php
namespace App\Controller\Admin;
use App\Entity\Order;
use App\Repository\Admin\OrderRepository;
use App\Service\SearchHelper;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\Common\Collections\Criteria;
/**
* Admin Order Controller.
* @Route("/admin/order/")
* @IsGranted("ROLE_ADMIN")
*/
class OrderController extends AbstractController {
private $urls = [
'list' => 'admin_order_list',
/*'edit' => 'admin_order_edit',*/
'view' => 'admin_order_view',
/*'delete' => 'admin_order_delete',*/
];
private $token_prefix = 'admin_order';
/**
* Order List.
* @Route(
* "list/{page}/{sort}/{dir}",
* name="admin_order_list",
* methods={"GET","POST"},
* requirements={"page"="\d+","sort"="[0-9a-zA-Z\.]+","dir"="asc|desc"},
* defaults={"page"=1,"sort"="createdAt","dir"="desc"}
* )
*
* @return string
*/
public function defaultAction(
Request $request, $page, $sort, $dir, OrderRepository $orderRepository, SearchHelper $searchHelper
) {
$limit = $request->query->getInt('limit', 20);
$searchHelper->searchSession($this->token_prefix);
$searchHelper->addParameter('code', 'like', 'code', 'code', 'Code', 'Enter code...', 'text', 'all');
$searchHelper->addParameter('status', 'eq', 'status', 'status', 'Status', 'Please select...', 'select', 'full', [
null => "Please Select",
\App\DBAL\Types\OrderStatusType::CREATED => "Created",
\App\DBAL\Types\OrderStatusType::DECLINED => "Declined",
\App\DBAL\Types\OrderStatusType::PENDING => "Pending",
\App\DBAL\Types\OrderStatusType::CANCELED => "Canceled",
\App\DBAL\Types\OrderStatusType::SUCCESS => "Success",
\App\DBAL\Types\OrderStatusType::FAILED => "Failed",
], true);
$action = $request->request->get('_action', '');
if ($this->isCsrfTokenValid('quicksearch', $request->request->get('_csrf_token')) && $action == 'quicksearch') $searchHelper->processQuick();
if ($this->isCsrfTokenValid('fullsearch', $request->request->get('_csrf_token')) && $action == 'fullsearch') :
if ($request->get('reset', 0) == 1)
$searchHelper->resetActive();
else
$searchHelper->processFull();
endif;
$criteria = $searchHelper->getCriteria();
$criteria->orderBy([$sort => $dir]);
$entries = $orderRepository->matching($criteria);
$totalSearch = $entries->count();
$entries = $entries->slice(($page-1)*$limit, $limit);
$totalCriteria = Criteria::create();
//$totalCriteria->andWhere(Criteria::expr()->eq('isActive', true));
//$totalCriteria->andWhere(Criteria::expr()->eq('isDeceased', false));
$total = $orderRepository->countAll($totalCriteria);
$pages = ceil($totalSearch/$limit);
return $this->render('/admin/orders/list.html.twig', [
'title' => 'Orders',
'listParams' => [],
'entries' => $entries,
'activeSearch' => $searchHelper->isActive(),
'quickSearchValue' => $searchHelper->getQuickSearchValue(),
'searchFields' => $searchHelper->getSearchParams(),
'ordering' => [
'sort' => $sort,
'dir' => $dir
],
'page' => [
'icon' => 'list',
'title' => 'List Orders',
'subtitle' => 'View the list with the Orders',
'header' => 'Training Manager - Orders List'
],
'urls' => $this->urls,
'tokenPrefix' => $this->token_prefix,
'pagination' => [
'total' => $total,
'totalSearch' => $totalSearch,
'limit' => $limit,
'totalPages' => $pages,
'page' => $page,
'listURL' => $this->urls['list']
],
]);
}
/**
* @Route("show/{id}", name="admin_order_view", methods={"GET"})
*/
public function show(
Order $order
): Response {
return $this->render('admin/orders/show.html.twig', [
'title' => 'View Order',
'page' => [
'icon' => 'star',
'title' => 'View Order'
],
'urls' => $this->urls,
'tokenPrefix' => $this->token_prefix,
'entry' => $order,
]);
}
/**
* @Route("edit/{id}", name="admin_order_edit", methods={"GET","POST"})
*/
/*public function edit(
Request $request,
Order $order,
\Symfony\Contracts\Translation\TranslatorInterface $translator,
\Doctrine\Persistence\ManagerRegistry $managerRegistry
): Response {
$form = $this->createForm(\App\Form\Admin\OrderForm::class, $order);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$managerRegistry->getManager()->flush();
$this->addFlash(
'success',
$translator->trans('Entry was updated successfully!')
);
if ($form->get('save-exit')->isClicked()) return $this->redirectToRoute($this->urls['list']);
if ($form->get('save-new')->isClicked()) return $this->redirectToRoute($this->urls['create']);
}
return $this->render('admin/orders/edit.html.twig', [
'title' => 'Edit Order',
'page' => [
'icon' => 'star',
'title' => 'Edit Order'
],
'urls' => $this->urls,
'tokenPrefix' => $this->token_prefix,
'entry' => $order,
'form' => $form->createView(),
]);
}*/
/**
* @Route("delete/{id}", name="admin_order_delete", methods={"POST"})
*/
/*public function delete(
Request $request,
Order $order,
\Symfony\Contracts\Translation\TranslatorInterface $translator,
\Doctrine\Persistence\ManagerRegistry $managerRegistry
): Response {
$returnURL = null;
if ($this->isCsrfTokenValid($this->token_prefix . '-delete' . $order->getId(), $request->request->get('_token'))) {
$returnURL = $request->get('_return')?$request->get('_return'):null;
$entityManager = $managerRegistry->getManager();
$entityManager->remove($order);
$entityManager->flush();
$this->addFlash(
'success',
$translator->trans('Entry was deleted successfully!')
);
if ($returnURL) return $this->redirect($returnURL);
} else {
$this->addFlash(
'danger',
$translator->trans('Invalid Token!')
);
}
return $this->redirectToRoute($this->urls['list']);
}*/
}