SuperSeller3000/src/Infrastructure/Http/Controller/Admin/OrderCrudController.php

75 lines
2.8 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
namespace App\Infrastructure\Http\Controller\Admin;
use App\Domain\Order\Order;
use App\Domain\Order\OrderStatus;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Field\MoneyField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Filter\ChoiceFilter;
/** @extends AbstractCrudController<Order> */
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',
]));
}
}