From deeadda31508b3780eaf091a687c88b569265410 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Thu, 13 Feb 2025 21:59:10 +0100 Subject: [PATCH 1/2] wip --- src/Controller/Admin/TicketCrudController.php | 7 +++++-- src/Entity/Ticket.php | 15 +++++++++++++++ templates/admin/checked_in.html.twig | 6 ++++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 templates/admin/checked_in.html.twig diff --git a/src/Controller/Admin/TicketCrudController.php b/src/Controller/Admin/TicketCrudController.php index a61dc3e..1b87949 100644 --- a/src/Controller/Admin/TicketCrudController.php +++ b/src/Controller/Admin/TicketCrudController.php @@ -11,6 +11,7 @@ use EasyCorp\Bundle\EasyAdminBundle\Config\Actions; use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController; use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField; +use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField; use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField; class TicketCrudController extends AbstractCrudController @@ -22,16 +23,18 @@ class TicketCrudController extends AbstractCrudController public function configureFields(string $pageName): iterable { - yield ChoiceField::new('type', 'Name') + yield ChoiceField::new('type', 'Typ') ->setChoices(TicketData::TYPES); yield ChoiceField::new('foodType', 'Ernährung') ->setChoices(FoodData::TYPES); - yield AssociationField::new('customer', 'Kunde') + yield AssociationField::new('customer', 'Käufer') ->setCrudController(CustomerCrudController::class) ->formatValue(fn(Customer $customer) => $customer->getEmail()) ->hideOnForm(); + + yield BooleanField::new('checkedIn', '')->setTemplatePath('admin/checked_in.html.twig'); } diff --git a/src/Entity/Ticket.php b/src/Entity/Ticket.php index 914c208..2fa1358 100644 --- a/src/Entity/Ticket.php +++ b/src/Entity/Ticket.php @@ -27,6 +27,9 @@ class Ticket implements \Stringable #[ORM\JoinColumn(nullable: false)] private ?Customer $customer = null; + #[ORM\Column(options: ['default' => false])] + private ?bool $checkedIn = null; + public function getId(): ?int { return $this->id; @@ -84,4 +87,16 @@ class Ticket implements \Stringable { return TicketData::TICKET_DATA[$this->type]['name']; } + + public function isCheckedIn(): ?bool + { + return $this->checkedIn; + } + + public function setCheckedIn(bool $checkedIn): static + { + $this->checkedIn = $checkedIn; + + return $this; + } } diff --git a/templates/admin/checked_in.html.twig b/templates/admin/checked_in.html.twig new file mode 100644 index 0000000..ca79db0 --- /dev/null +++ b/templates/admin/checked_in.html.twig @@ -0,0 +1,6 @@ +{% if not field.value %} + + {{ dump(field) }} +{% else %} + +{% endif %} \ No newline at end of file -- 2.47.2 From bfe3ea37b550d89280f932b7b942354f2277b4f0 Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Sat, 15 Feb 2025 15:29:48 +0100 Subject: [PATCH 2/2] add functionality --- src/Controller/Admin/CheckinAction.php | 36 +++++++++++++++++++ src/Controller/Admin/TicketCrudController.php | 3 +- src/Repository/TicketRepository.php | 1 + src/Twig/Environment.php | 14 +++++++- templates/admin/checked_in.html.twig | 9 ++--- 5 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 src/Controller/Admin/CheckinAction.php diff --git a/src/Controller/Admin/CheckinAction.php b/src/Controller/Admin/CheckinAction.php new file mode 100644 index 0000000..22f4056 --- /dev/null +++ b/src/Controller/Admin/CheckinAction.php @@ -0,0 +1,36 @@ +query->get('entityId'); + + if (!$entityId || !$ticket = $this->ticketRepository->findOneById($entityId)) { + noty()->error('Ein Fehler ist aufgetreten.'); + + return $this->redirect($request->get('referer')); + } + + $ticket->setCheckedIn(true); + $this->entityManager->flush(); + + return $this->redirect($request->headers->get('referer')); + } +} \ No newline at end of file diff --git a/src/Controller/Admin/TicketCrudController.php b/src/Controller/Admin/TicketCrudController.php index 1b87949..af34e44 100644 --- a/src/Controller/Admin/TicketCrudController.php +++ b/src/Controller/Admin/TicketCrudController.php @@ -34,7 +34,8 @@ class TicketCrudController extends AbstractCrudController ->formatValue(fn(Customer $customer) => $customer->getEmail()) ->hideOnForm(); - yield BooleanField::new('checkedIn', '')->setTemplatePath('admin/checked_in.html.twig'); + yield BooleanField::new('checkedIn', '') + ->setTemplatePath('admin/checked_in.html.twig'); } diff --git a/src/Repository/TicketRepository.php b/src/Repository/TicketRepository.php index cd6e338..3e5a0ce 100644 --- a/src/Repository/TicketRepository.php +++ b/src/Repository/TicketRepository.php @@ -9,6 +9,7 @@ use Doctrine\Persistence\ManagerRegistry; /** * @extends ServiceEntityRepository + * @method Ticket|null findOneById(int $entityId) */ class TicketRepository extends ServiceEntityRepository { diff --git a/src/Twig/Environment.php b/src/Twig/Environment.php index 8f363be..96766ad 100644 --- a/src/Twig/Environment.php +++ b/src/Twig/Environment.php @@ -2,6 +2,7 @@ namespace App\Twig; +use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; @@ -9,11 +10,22 @@ class Environment extends AbstractExtension { public function getFunctions(): array { - return [new TwigFunction('env', $this->getVar(...))]; + return [ + new TwigFunction('env', $this->getVar(...)), + new TwigFunction('entityId', $this->getEntityId(...)), + ]; } public function getVar(string $name): string { return $_ENV[$name]; } + + public function getEntityId(FieldDto $field): string + { + $url = $field->getCustomOption('toggleUrl'); + preg_match('/entityId=(\d+)/', $url, $matches); + + return $matches[1]; + } } \ No newline at end of file diff --git a/templates/admin/checked_in.html.twig b/templates/admin/checked_in.html.twig index ca79db0..24a928c 100644 --- a/templates/admin/checked_in.html.twig +++ b/templates/admin/checked_in.html.twig @@ -1,6 +1,7 @@ {% if not field.value %} - - {{ dump(field) }} +
+ +
{% else %} - -{% endif %} \ No newline at end of file + +{% endif %} -- 2.47.2