<?php namespace Lc\CaracoleBundle\Controller\Credit; use Doctrine\ORM\EntityManagerInterface; use EasyCorp\Bundle\EasyAdminBundle\Collection\ActionCollection; use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection; use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection; use EasyCorp\Bundle\EasyAdminBundle\Config\Actions; use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; use EasyCorp\Bundle\EasyAdminBundle\Config\KeyValueStore; use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto; use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto; use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField; use EasyCorp\Bundle\EasyAdminBundle\Field\DateField; use EasyCorp\Bundle\EasyAdminBundle\Field\IdField; use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField; use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Provider\AdminContextProvider; use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator; use Lc\CaracoleBundle\Container\Credit\CreditHistoryContainer; use Lc\CaracoleBundle\Container\User\UserMerchantContainer; use Lc\CaracoleBundle\Controller\AbstractAdminController; use Lc\CaracoleBundle\Definition\ActionDefinition; use Lc\CaracoleBundle\Model\Credit\CreditHistoryInterface; use Lc\CaracoleBundle\Model\User\UserMerchantInterface; use Lc\CaracoleBundle\Solver\Credit\CreditHistorySolver; use Lc\CaracoleBundle\Solver\Order\OrderPaymentSolver; use Lc\SovBundle\Repository\RepositoryQueryInterface; use Lc\SovBundle\Translation\TranslatorAdmin; abstract class CreditHistoryAdminController extends AbstractAdminController { public function getRepositoryQuery(): RepositoryQueryInterface { return $this->get(CreditHistoryContainer::class)->getRepositoryQuery(); } public function overrideGlobalActions(?ActionCollection $actions): void { parent::overrideGlobalActions($actions); if ($actions) { $adminUrlGenerator = $this->get(AdminUrlGenerator::class); $creditControllerFqcn = $this->getControllerFqcnByInterface(CreditHistoryInterface::class); foreach ($actions as $action) { $url = $adminUrlGenerator ->setController($creditControllerFqcn) ->setAction(ActionDefinition::NEW) ->set('userMerchantId', $this->getUserMerchant()->getId()) ->generateUrl(); $action->setLinkUrl($url); } } } public function createEntity(string $entityFqcn) { return $this->get(CreditHistoryContainer::class)->getFactory()->createBase($this->getUserMerchant()); } protected function getUserMerchant(): UserMerchantInterface { $request = $this->get(AdminContextProvider::class)->getContext()->getRequest(); return $this->get(UserMerchantContainer::class)->getStore()->getOneById( $request->get('userMerchantId') ); } public function configureActions(Actions $actions): Actions { $actions = parent::configureActions($actions); $actions->disable(ActionDefinition::DELETE, ActionDefinition::EDIT, ActionDefinition::DUPLICATE); return $actions; } public function persistEntity(EntityManagerInterface $entityManager, $entityInstance): void { if ($this->get(CreditHistoryContainer::class)->getBuilder()->save($entityInstance)) { $this->addFlashTranslator('success', 'saveCreditHistory'); } else { $this->addFlashTranslator('error', 'saveCreditHistory'); } } public function configureCrud(Crud $crud): Crud { $crud->overrideTemplate('crud/index', '@LcCaracole/admin/credit/index_credithistory.html.twig'); return $crud; } public function configureResponseParameters(KeyValueStore $responseParameters): KeyValueStore { $responseParameters = parent::configureResponseParameters($responseParameters); $responseParameters->set('user_merchant', $this->getUserMerchant()); return $responseParameters; } public function configureFields(string $pageName): iterable { return $this->getCreditHistoryContainer()->getFieldDefinition()->getFields($pageName); } public function createIndexRepositoryQuery( SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters ): RepositoryQueryInterface { $repositoryQuery = parent::createIndexRepositoryQuery( $searchDto, $entityDto, $fields, $filters ); $repositoryQuery->filterByUserMerchant($this->getUserMerchant()); return $repositoryQuery; } }