<?php
namespace AdminBundle\Admin;
use AcquiringBundle\Component\Model\Order;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Security\Core\Security;
class OrderAdmin extends AbstractAdmin
{
protected Security $security;
protected ParameterBagInterface $parameterBag;
public function setContainerServices(Security $security, ParameterBagInterface $parameterBag): void
{
$this->security = $security;
$this->parameterBag = $parameterBag;
}
protected function configureRoutes(RouteCollectionInterface $collection): void
{
$collection->remove('create'); // Action gets added automatically
$collection->remove('view');
//$collection->remove('edit');
}
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$user = $this->security->getUser();
$datagridMapper->add('id')
->add('state',null, ['label' => 'Статус'], ChoiceType::class, [ 'choices' => [
'Новый' => Order::STATE_NEW,
'Успешно оплачен' => Order::STATE_SUCCESS,
'Не успешная оплата' => Order::STATE_FAILED,
]])
;
if($user->hasRole('ROLE_SUPER_ADMIN')) {
$dcParams = $this->parameterBag->get('acquiring');
$dc = [];
foreach ($dcParams as $dcCode => $row) {
$dc[$row['site']['name']] = $dcCode;
}
$datagridMapper->add('dc',null, ['label' => 'ДЦ'], ChoiceType::class, [ 'choices' => $dc]);
}
}
public function configureQuery($context = 'list'): ProxyQueryInterface
{
$user = $this->security->getUser();
$query = parent::configureQuery($context);
if($user->hasRole('ROLE_SUPER_ADMIN')) {
return $query;
}
$query->andWhere(
$query->expr()->eq($query->getRootAliases()[0] . '.dc', ':dc')
);
$query->setParameter('dc', $user->getDc());
return $query;
}
protected function configureListFields(ListMapper $listMapper): void
{
$dcParams = $this->parameterBag->get('acquiring');
$dc = [];
foreach ($dcParams as $dcCode => $row) {
$dc[$dcCode] = $row['site']['name'];
}
$listMapper->addIdentifier('id')
->add('price',null, ['label' => 'Сумма'])
->add('bank_amount',null, ['label' => 'Оплаченная сумма'])
->add('state', ChoiceType::class, ['label' => 'Состояние', 'choices' => [
Order::STATE_NEW => 'Новый',
Order::STATE_SUCCESS => 'Успешно оплачен',
Order::STATE_FAILED => 'Не успешная оплата',
]])
->add('date_create',null, ['label' => 'Дата создания', 'format' => 'Y-m-d H:i:s'])
->add('create_in_1c',null, ['label' => 'Дата счета (создания в 1С)', 'format' => 'Y-m-d H:i:s'])
->add('date_expired',null, ['label' => 'Активен до', 'format' => 'Y-m-d H:i:s'])
->add('dc', ChoiceType::class, ['label' => 'ДЦ', 'choices' => $dc])
->add('_action', 'actions', [
'actions' => [
'show' => [],
'edit' => [],
]
])
;
}
}