add price feature
This commit is contained in:
parent
15f8db46a0
commit
64f5341371
18 changed files with 484 additions and 157 deletions
52
src/EventListener/OrderItemPreFlush.php
Normal file
52
src/EventListener/OrderItemPreFlush.php
Normal file
|
@ -0,0 +1,52 @@
|
|||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\EventListener;
|
||||
|
||||
use App\Entity\MenuItem;
|
||||
use App\Entity\OrderItem;
|
||||
use App\Repository\MenuItemRepository;
|
||||
use Doctrine\Bundle\DoctrineBundle\Attribute\AsDoctrineListener;
|
||||
use Doctrine\ORM\Event\PreFlushEventArgs;
|
||||
use Doctrine\ORM\Events;
|
||||
use Doctrine\Persistence\ObjectManager;
|
||||
|
||||
#[AsDoctrineListener(event: Events::preFlush)]
|
||||
final readonly class OrderItemPreFlush
|
||||
{
|
||||
public function __construct(
|
||||
private MenuItemRepository $menuItemRepository,
|
||||
) {}
|
||||
|
||||
public function preFlush(PreFlushEventArgs $eventArgs): void
|
||||
{
|
||||
foreach (($eventArgs->getObjectManager()->getUnitOfWork()->getIdentityMap()[OrderItem::class] ?? []) as $orderItem) {
|
||||
$this->checkOrderItem($orderItem, $eventArgs->getObjectManager());
|
||||
}
|
||||
}
|
||||
|
||||
private function checkOrderItem(OrderItem $orderItem, ObjectManager $objectManager): void
|
||||
{
|
||||
$menuItem = $this->menuItemRepository->findOneBy([
|
||||
'name' => $orderItem->getName(),
|
||||
'foodVendor' => $orderItem->getFoodOrder()
|
||||
->getFoodVendor(),
|
||||
]);
|
||||
if ($menuItem === null) {
|
||||
$menuItem = new MenuItem;
|
||||
$menuItem->setName($orderItem->getName());
|
||||
$menuItem->setFoodVendor($orderItem->getFoodOrder()->getFoodVendor());
|
||||
$objectManager->persist($menuItem);
|
||||
}
|
||||
if ($menuItem->getAliasOf() !== null) {
|
||||
$menuItem = $menuItem->getAliasOf();
|
||||
$orderItem->setName($menuItem->getName());
|
||||
}
|
||||
$orderItem->setMenuItem($menuItem);
|
||||
if ($orderItem->getPriceCents() === 0) {
|
||||
$orderItem->setPriceCents($menuItem->getPriceCents());
|
||||
} elseif ($orderItem->getPriceCents() !== $menuItem->getPriceCents()) {
|
||||
$menuItem->setPriceCents($orderItem->getPriceCents());
|
||||
$objectManager->persist($menuItem);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue