forked from lubiana/futtern
95 lines
3.2 KiB
PHP
95 lines
3.2 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace App\Controller;
|
|
|
|
use App\Entity\FoodOrder;
|
|
use App\Form\FoodOrderType;
|
|
use App\Repository\FoodOrderRepository;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\Routing\Attribute\Route;
|
|
|
|
#[Route('/food/order')]
|
|
final class FoodOrderController extends AbstractController
|
|
{
|
|
#[Route(
|
|
path: '/list/{page}',
|
|
name: 'app_food_order_index',
|
|
requirements: [
|
|
'page' => '\d+',
|
|
],
|
|
methods: ['GET']
|
|
)]
|
|
public function index(FoodOrderRepository $foodOrderRepository, int $page = 1): Response
|
|
{
|
|
$days = 4;
|
|
if ($page > 1) {
|
|
$days = 0;
|
|
}
|
|
$nextPage = $page + 1;
|
|
$prevPage = $page - 1;
|
|
$itemsPerPage = 10;
|
|
if($foodOrderRepository->count() < $page * $itemsPerPage) {
|
|
$nextPage = $page;
|
|
}
|
|
|
|
return $this->render('food_order/index.html.twig', [
|
|
'food_orders' => $foodOrderRepository->findLatestEntries(page: $page, pagesize: $itemsPerPage, days: $days),
|
|
'current_page' => $page,
|
|
'next_page' => $nextPage,
|
|
'prev_page' => $prevPage,
|
|
]);
|
|
}
|
|
|
|
#[Route('/new', name: 'app_food_order_new', methods: ['GET', 'POST'])]
|
|
public function new(Request $request, EntityManagerInterface $entityManager): Response
|
|
{
|
|
$foodOrder = new FoodOrder;
|
|
$username = $request->cookies->get('username', 'nobody');
|
|
$foodOrder->setCreatedBy($username);
|
|
$form = $this->createForm(FoodOrderType::class, $foodOrder, [
|
|
'action' => $this->generateUrl('app_food_order_new'),
|
|
]);
|
|
$form->handleRequest($request);
|
|
|
|
if ($form->isSubmitted() && $form->isValid()) {
|
|
$entityManager->persist($foodOrder);
|
|
$entityManager->flush();
|
|
|
|
return $this->redirectToRoute('app_food_order_index', [], Response::HTTP_SEE_OTHER);
|
|
}
|
|
|
|
return $this->render('food_order/new.html.twig', [
|
|
'food_order' => $foodOrder,
|
|
'form' => $form,
|
|
]);
|
|
}
|
|
|
|
#[Route('/{id}', name: 'app_food_order_show', methods: ['GET'])]
|
|
public function show(FoodOrder $foodOrder): Response
|
|
{
|
|
return $this->render('food_order/show.html.twig', [
|
|
'food_order' => $foodOrder,
|
|
]);
|
|
}
|
|
|
|
#[Route('/{id}/close', name: 'app_food_order_close', methods: ['GET'])]
|
|
public function close(FoodOrder $foodOrder, FoodOrderRepository $repository): Response
|
|
{
|
|
$repository->save($foodOrder->close());
|
|
return $this->redirectToRoute('app_food_order_show', [
|
|
'id' => $foodOrder->getId(),
|
|
], Response::HTTP_SEE_OTHER);
|
|
}
|
|
|
|
#[Route('/{id}/open', name: 'app_food_order_open', methods: ['GET'])]
|
|
public function open(FoodOrder $foodOrder, FoodOrderRepository $repository): Response
|
|
{
|
|
$repository->save($foodOrder->open());
|
|
return $this->redirectToRoute('app_food_order_show', [
|
|
'id' => $foodOrder->getId(),
|
|
], Response::HTTP_SEE_OTHER);
|
|
}
|
|
}
|