157 lines
5.8 KiB
PHP
157 lines
5.8 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace App\Controller;
|
|
|
|
use App\Entity\FoodOrder;
|
|
use App\Entity\MenuItem;
|
|
use App\Entity\OrderItem;
|
|
use App\Form\OrderItemType;
|
|
use App\Repository\MenuItemRepository;
|
|
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('/order/item')]
|
|
final class OrderItemController extends AbstractController
|
|
{
|
|
#[Route('/new/{foodOrder}', name: 'app_order_item_new', methods: ['GET', 'POST'])]
|
|
public function new(Request $request, FoodOrder $foodOrder, EntityManagerInterface $entityManager, MenuItemRepository $menuItemRepository): Response
|
|
{
|
|
if ($foodOrder->isClosed()) {
|
|
return $this->redirectToRoute('app_food_order_show', [
|
|
'id' => $foodOrder->getId(),
|
|
], Response::HTTP_SEE_OTHER);
|
|
}
|
|
|
|
$orderItem = new OrderItem;
|
|
$username = $request->cookies->get('username', 'nobody');
|
|
$orderItem->setCreatedBy($username);
|
|
|
|
$form = $this->createForm(OrderItemType::class, $orderItem);
|
|
$form->handleRequest($request);
|
|
|
|
if ($form->isSubmitted() && $form->isValid()) {
|
|
$menuItem = $menuItemRepository->findOneBy([
|
|
'name' => $orderItem->getName(),
|
|
'foodVendor' => $foodOrder->getFoodVendor(),
|
|
]);
|
|
|
|
if ($menuItem === null) {
|
|
$menuItem = new MenuItem;
|
|
$menuItem->setName($orderItem->getName());
|
|
$menuItem->setFoodVendor($foodOrder->getFoodVendor());
|
|
$entityManager->persist($menuItem);
|
|
}
|
|
|
|
$orderItem->setMenuItem($menuItem);
|
|
$orderItem->setFoodOrder($foodOrder);
|
|
$entityManager->persist($orderItem);
|
|
$entityManager->flush();
|
|
|
|
return $this->redirectToRoute('app_food_order_show', [
|
|
'id' => $foodOrder->getId(),
|
|
], Response::HTTP_SEE_OTHER);
|
|
}
|
|
$menuItems = $menuItemRepository->findBy([
|
|
'foodVendor' => $foodOrder->getFoodVendor(),
|
|
'deletedAt' => null,
|
|
]);
|
|
|
|
return $this->render('order_item/new.html.twig', [
|
|
'order_item' => $orderItem,
|
|
'food_order' => $foodOrder,
|
|
'form' => $form,
|
|
'menuItems' => $menuItems,
|
|
]);
|
|
}
|
|
|
|
#[Route('/{id}/copy', name: 'app_order_item_copy', methods: ['GET'])]
|
|
public function copy(OrderItem $orderItem, EntityManagerInterface $entityManager): Response
|
|
{
|
|
$foodOrder = $orderItem->getFoodOrder();
|
|
if ($foodOrder->isClosed()) {
|
|
return $this->redirectToRoute('app_food_order_show', [
|
|
'id' => $foodOrder->getId(),
|
|
], Response::HTTP_SEE_OTHER);
|
|
}
|
|
$newOrderItem = new OrderItem;
|
|
$newOrderItem->setFoodOrder($orderItem->getFoodOrder());
|
|
$newOrderItem->setName($orderItem->getName());
|
|
$newOrderItem->setExtras($orderItem->getExtras());
|
|
$newOrderItem->setMenuItem($orderItem->getMenuItem());
|
|
|
|
$entityManager->persist($newOrderItem);
|
|
$entityManager->flush();
|
|
return $this->redirectToRoute('app_food_order_show', [
|
|
'id' => $orderItem->getFoodOrder()
|
|
->getId(),
|
|
], Response::HTTP_SEE_OTHER);
|
|
}
|
|
|
|
#[Route('/{id}/edit', name: 'app_order_item_edit', methods: ['GET', 'POST'])]
|
|
public function edit(
|
|
Request $request,
|
|
OrderItem $orderItem,
|
|
EntityManagerInterface $entityManager,
|
|
MenuItemRepository $menuItemRepository,
|
|
): Response {
|
|
$foodOrder = $orderItem->getFoodOrder();
|
|
if ($foodOrder->isClosed()) {
|
|
return $this->redirectToRoute('app_food_order_show', [
|
|
'id' => $foodOrder->getId(),
|
|
], Response::HTTP_SEE_OTHER);
|
|
}
|
|
$orderItem->setName($orderItem->getMenuItem()->getName());
|
|
$form = $this->createForm(OrderItemType::class, $orderItem);
|
|
$form->setData($orderItem);
|
|
$form->handleRequest($request);
|
|
|
|
if ($form->isSubmitted() && $form->isValid()) {
|
|
$menuItem = $menuItemRepository->findOneBy([
|
|
'name' => $orderItem->getName(),
|
|
'foodVendor' => $foodOrder->getFoodVendor(),
|
|
]);
|
|
|
|
if ($menuItem === null) {
|
|
$menuItem = new MenuItem;
|
|
$menuItem->setName($orderItem->getName());
|
|
$menuItem->setFoodVendor($foodOrder->getFoodVendor());
|
|
$entityManager->persist($menuItem);
|
|
}
|
|
|
|
$orderItem->setMenuItem($menuItem);
|
|
$orderItem->setFoodOrder($foodOrder);
|
|
$entityManager->persist($orderItem);
|
|
$entityManager->flush();
|
|
|
|
return $this->redirectToRoute('app_food_order_show', [
|
|
'id' => $orderItem->getFoodOrder()
|
|
->getId(),
|
|
], Response::HTTP_SEE_OTHER);
|
|
}
|
|
|
|
return $this->render('order_item/edit.html.twig', [
|
|
'order_item' => $orderItem,
|
|
'form' => $form,
|
|
]);
|
|
}
|
|
|
|
#[Route('/delete/{id}', name: 'app_order_item_delete')]
|
|
public function delete(OrderItem $orderItem, EntityManagerInterface $entityManager): Response
|
|
{
|
|
$foodOrder = $orderItem->getFoodOrder();
|
|
if ($foodOrder->isClosed()) {
|
|
return $this->redirectToRoute('app_food_order_show', [
|
|
'id' => $foodOrder->getId(),
|
|
], Response::HTTP_SEE_OTHER);
|
|
}
|
|
$entityManager->remove($orderItem);
|
|
$entityManager->flush();
|
|
return $this->redirectToRoute('app_food_order_show', [
|
|
'id' => $orderItem->getFoodOrder()
|
|
->getId(),
|
|
], Response::HTTP_SEE_OTHER);
|
|
}
|
|
}
|