*/ final class OrderCrudController extends AbstractCrudController { public static function getEntityFqcn(): string { return Order::class; } public function configureCrud(Crud $crud): Crud { return $crud ->setEntityLabelInSingular('Bestellung') ->setEntityLabelInPlural('Bestellungen') ->setDefaultSort(['saleDate' => 'DESC']) ->showEntityActionsInlined(); } public function configureActions(Actions $actions): Actions { return $actions ->disable(Action::NEW, Action::DELETE) ->add(Crud::PAGE_INDEX, Action::DETAIL); } public function configureFields(string $pageName): iterable { yield IdField::new('id')->hideOnForm(); yield TextField::new('platformOrderId', 'Plattform-Bestellnr.'); yield AssociationField::new('article', 'Artikel'); yield AssociationField::new('customer', 'Käufer'); yield ChoiceField::new('status', 'Status') ->setChoices(array_combine( array_map(static fn (OrderStatus $s) => ucfirst($s->value), OrderStatus::cases()), array_map(static fn (OrderStatus $s) => $s->value, OrderStatus::cases()), )); yield MoneyField::new('salePrice', 'Verkaufspreis')->setCurrency('EUR'); yield DateTimeField::new('saleDate', 'Verkaufsdatum'); yield TextField::new('trackingNumber', 'Sendungsnummer')->onlyOnDetail(); yield TextField::new('carrier', 'Versanddienstleister')->onlyOnDetail(); yield DateTimeField::new('shippedAt', 'Versanddatum')->onlyOnDetail(); } public function configureFilters(Filters $filters): Filters { return $filters->add(ChoiceFilter::new('status')->setChoices([ 'Ausstehend' => 'pending', 'In Bearbeitung' => 'processing', 'Versandt' => 'shipped', 'Abgeschlossen' => 'completed', 'Fehlgeschlagen' => 'failed', ])); } }