75 lines
2.8 KiB
PHP
75 lines
2.8 KiB
PHP
|
|
<?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',
|
||
|
|
]));
|
||
|
|
}
|
||
|
|
}
|