futtern/src/Controller/FoodOrderController.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);
}
}