You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

159 lines
6.3KB

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