futtern/src/Controller/FoodOrderController.php
lubiana 64f5341371
All checks were successful
/ ls (pull_request) Successful in 1m37s
/ ls (push) Successful in 1m37s
add price feature
2025-06-29 23:18:23 +02:00

125 lines
4.1 KiB
PHP

<?php declare(strict_types=1);
namespace App\Controller;
use App\Entity\FoodOrder;
use App\Form\FoodOrderType;
use App\Form\OrderFinalize;
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/archive/{page}',
name: 'app_food_order_archive',
requirements: [
'page' => '\d+',
],
methods: ['GET']
)]
public function archive(FoodOrderRepository $foodOrderRepository, int $page = 1): Response
{
$nextPage = $page + 1;
$prevPage = $page - 1;
$itemsPerPage = 10;
$count = $foodOrderRepository->count();
if ($count < $page * $itemsPerPage) {
$nextPage = $page;
}
return $this->render('food_order/index.html.twig', [
'food_orders' => $foodOrderRepository->findLatestEntries(
page: $page,
pagesize: $itemsPerPage,
days: 0
),
'current_page' => $page,
'next_page' => $nextPage,
'prev_page' => $prevPage,
]);
}
#[Route('/{id}/close', name: 'app_food_order_close', methods: ['GET'])]
public function close(FoodOrder $foodOrder, FoodOrderRepository $repository): Response
{
$foodOrder->close();
$repository->save();
return $this->redirectToRoute('app_food_order_show', [
'id' => $foodOrder->getId(),
], Response::HTTP_SEE_OTHER);
}
#[Route(
path: '/list',
name: 'app_food_order_index',
methods: ['GET']
)]
public function index(FoodOrderRepository $foodOrderRepository): Response
{
return $this->render('food_order/index.html.twig', [
'food_orders' => $foodOrderRepository->findLatestEntries(days: 3),
'current_page' => 0,
'next_page' => 0,
'prev_page' => 0,
]);
}
#[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}/open', name: 'app_food_order_open', methods: ['GET'])]
public function open(FoodOrder $foodOrder, FoodOrderRepository $repository): Response
{
$foodOrder->open();
$repository->save();
return $this->redirectToRoute('app_food_order_show', [
'id' => $foodOrder->getId(),
], Response::HTTP_SEE_OTHER);
}
#[Route('/{id}', name: 'app_food_order_show', methods: ['GET', 'POST'])]
public function show(Request $request, FoodOrder $foodOrder, EntityManagerInterface $entityManager): Response
{
$form = null;
if ($foodOrder->isClosed()) {
$form = $this->createForm(OrderFinalize::class, $foodOrder);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->persist($foodOrder);
$entityManager->flush();
}
}
return $this->render('food_order/show.html.twig', [
'food_order' => $foodOrder,
'form' => $form,
]);
}
}