選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

165 行
6.8KB

  1. <?php
  2. namespace Lc\CaracoleBundle\Controller\Credit;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Doctrine\ORM\QueryBuilder;
  5. use EasyCorp\Bundle\EasyAdminBundle\Collection\ActionCollection;
  6. use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;
  7. use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;
  8. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  9. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  10. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  11. use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
  12. use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
  13. use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
  14. use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
  15. use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
  16. use EasyCorp\Bundle\EasyAdminBundle\Field\MoneyField;
  17. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  18. use EasyCorp\Bundle\EasyAdminBundle\Provider\AdminContextProvider;
  19. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  20. use Lc\CaracoleBundle\Container\Credit\CreditHistoryContainer;
  21. use Lc\CaracoleBundle\Container\User\UserMerchantContainer;
  22. use Lc\CaracoleBundle\Controller\AdminControllerTrait;
  23. use Lc\CaracoleBundle\Factory\Credit\CreditHistoryFactory;
  24. use Lc\CaracoleBundle\Model\Credit\CreditHistoryInterface;
  25. use Lc\CaracoleBundle\Model\Credit\CreditHistoryModel;
  26. use Lc\CaracoleBundle\Model\Order\OrderPaymentModel;
  27. use Lc\CaracoleBundle\Model\User\UserMerchantInterface;
  28. use Lc\SovBundle\Controller\AbstractAdminController;
  29. use Lc\SovBundle\Translation\TranslatorAdmin;
  30. abstract class CreditHistoryAdminController extends AbstractAdminController
  31. {
  32. use AdminControllerTrait;
  33. public function overrideGlobalActions(?ActionCollection $actions): void
  34. {
  35. parent::overrideGlobalActions($actions);
  36. if ($actions) {
  37. $adminUrlGenerator = $this->get(AdminUrlGenerator::class);
  38. $creditControllerFqcn = $this->getControllerFqcnByInterface(CreditHistoryInterface::class);
  39. foreach ($actions as $action) {
  40. $url = $adminUrlGenerator
  41. ->setController($creditControllerFqcn)
  42. ->setAction(Action::NEW)
  43. ->set('userMerchantId', $this->getUserMerchant()->getId())
  44. ->generateUrl();
  45. $action->setLinkUrl($url);
  46. }
  47. }
  48. }
  49. public function createEntity(string $entityFqcn)
  50. {
  51. return $this->get(CreditHistoryContainer::class)->getFactory()->create();
  52. }
  53. public function persistEntity(EntityManagerInterface $entityManager, $entityInstance): void
  54. {
  55. $entityInstance->setUserMerchant($this->getUserMerchant());
  56. parent::persistEntity($entityManager, $entityInstance); // TODO: Change the autogenerated stub
  57. }
  58. protected function getUserMerchant(): UserMerchantInterface
  59. {
  60. $request = $this->get(AdminContextProvider::class)->getContext()->getRequest();
  61. return $this->get(UserMerchantContainer::class)->getStore()->getOneById(
  62. $request->get('userMerchantId')
  63. );
  64. }
  65. public function configureActions(Actions $actions): Actions
  66. {
  67. $actions->disable(Action::DELETE, Action::EDIT);
  68. return parent::configureActions($actions); // TODO: Change the autogenerated stub
  69. }
  70. public function configureCrud(Crud $crud): Crud
  71. {
  72. $crud->overrideTemplate('crud/index', '@LcCaracole/admin/credit/index_credithistory.html.twig');
  73. return $crud;
  74. }
  75. public function configureFields(string $pageName): iterable
  76. {
  77. $translatorAdmin = $this->get(TranslatorAdmin::class);
  78. return [
  79. IdField::new('id')->hideOnForm(),
  80. // @TODO : transChoices
  81. ChoiceField::new('type')->setChoices(
  82. array(
  83. $translatorAdmin->transField(
  84. 'typeOptions.' . CreditHistoryModel::TYPE_CREDIT,
  85. 'CreditHistory'
  86. ) => CreditHistoryModel::TYPE_CREDIT,
  87. $translatorAdmin->transField(
  88. 'typeOptions.' . CreditHistoryModel::TYPE_DEBIT,
  89. 'CreditHistory'
  90. ) => CreditHistoryModel::TYPE_DEBIT,
  91. )
  92. ),
  93. MoneyField::new('amount')->setCurrency('EUR'),
  94. DateField::new('paidAt'),
  95. // @TODO : transChoices
  96. ChoiceField::new('meanPayment')->setChoices(
  97. array(
  98. $translatorAdmin->transField(
  99. 'meanPaymentOptions.' . OrderPaymentModel::MEAN_PAYMENT_CASH,
  100. 'CreditHistory'
  101. ) => OrderPaymentModel::MEAN_PAYMENT_CASH,
  102. $translatorAdmin->transField(
  103. 'meanPaymentOptions.' . OrderPaymentModel::MEAN_PAYMENT_CHEQUE,
  104. 'CreditHistory'
  105. ) => OrderPaymentModel::MEAN_PAYMENT_CHEQUE,
  106. $translatorAdmin->transField(
  107. 'meanPaymentOptions.' . OrderPaymentModel::MEAN_PAYMENT_CREDIT,
  108. 'CreditHistory'
  109. ) => OrderPaymentModel::MEAN_PAYMENT_CREDIT,
  110. $translatorAdmin->transField(
  111. 'meanPaymentOptions.' . OrderPaymentModel::MEAN_PAYMENT_CREDIT_CARD,
  112. 'CreditHistory'
  113. ) => OrderPaymentModel::MEAN_PAYMENT_CREDIT_CARD,
  114. $translatorAdmin->transField(
  115. 'meanPaymentOptions.' . OrderPaymentModel::MEAN_PAYMENT_TRANSFER,
  116. 'CreditHistory'
  117. ) => OrderPaymentModel::MEAN_PAYMENT_TRANSFER,
  118. )
  119. ),
  120. TextField::new('reference'),
  121. TextField::new('comment'),
  122. ];
  123. }
  124. public function createIndexQueryBuilder(
  125. SearchDto $searchDto,
  126. EntityDto $entityDto,
  127. FieldCollection $fields,
  128. FilterCollection $filters
  129. ): QueryBuilder {
  130. $queryBuilder = parent::createIndexQueryBuilder(
  131. $searchDto,
  132. $entityDto,
  133. $fields,
  134. $filters
  135. );
  136. $queryBuilder->andWhere('entity.userMerchant = :userMerchant');
  137. $queryBuilder->setParameter('userMerchant', $searchDto->getRequest()->get('userMerchantId'));
  138. return $queryBuilder;
  139. }
  140. }