您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

182 行
7.2KB

  1. <?php
  2. namespace Lc\CaracoleBundle\Definition\Field\Reduction;
  3. use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
  4. use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
  5. use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField;
  6. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  7. use Lc\CaracoleBundle\Context\MerchantContextTrait;
  8. use Lc\SovBundle\Definition\Field\AbstractFieldDefinition;
  9. use Lc\CaracoleBundle\Field\AssociationField;
  10. use Lc\CaracoleBundle\Model\Config\TaxRateModel;
  11. use Lc\CaracoleBundle\Model\Config\UnitModel;
  12. use Lc\CaracoleBundle\Repository\Product\ProductCategoryStore;
  13. use Lc\CaracoleBundle\Repository\Product\ProductFamilyStore;
  14. use Lc\CaracoleBundle\Repository\User\GroupUserStore;
  15. use Lc\CaracoleBundle\Repository\User\UserStore;
  16. use Lc\SovBundle\Field\BooleanField;
  17. use Lc\SovBundle\Translation\TranslatorAdmin;
  18. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  19. class ReductionCatalogFieldDefinition extends AbstractFieldDefinition
  20. {
  21. use MerchantContextTrait;
  22. protected GroupUserStore $groupUserStore;
  23. protected UserStore $userStore;
  24. protected ProductFamilyStore $productFamilyStore;
  25. protected ProductCategoryStore $productCategoryStore;
  26. protected UrlGeneratorInterface $urlGenerator;
  27. protected ?array $groupUserArray = null;
  28. protected ?array $usersArray= null;
  29. protected ?array $productFamilyArray= null;
  30. protected ?array $productCategoryArray= null;
  31. public function __construct(
  32. TranslatorAdmin $translatorAdmin,
  33. GroupUserStore $groupUserStore,
  34. UserStore $userStore,
  35. ProductFamilyStore $productFamilyStore,
  36. ProductCategoryStore $productCategoryStore,
  37. UrlGeneratorInterface $urlGenerator
  38. )
  39. {
  40. parent::__construct($translatorAdmin);
  41. $this->groupUserStore = $groupUserStore;
  42. $this->userStore = $userStore;
  43. $this->productFamilyStore = $productFamilyStore;
  44. $this->productCategoryStore = $productCategoryStore;
  45. $this->urlGenerator = $urlGenerator;
  46. }
  47. public function configureIndex(): array
  48. {
  49. return [
  50. 'id',
  51. 'title',
  52. 'value',
  53. 'status',
  54. 'isDisplayed'
  55. ];
  56. }
  57. public function configureForm(): array
  58. {
  59. return [
  60. 'title',
  61. 'behaviorTaxRate',
  62. 'unit',
  63. 'value',
  64. 'permanent',
  65. 'dateStart',
  66. 'dateEnd',
  67. 'usersActive',
  68. 'users',
  69. 'groupUsersActive',
  70. 'groupUsers',
  71. 'productCategoriesActive',
  72. 'productCategories',
  73. 'productFamiliesActive',
  74. 'productFamilies',
  75. 'status',
  76. 'isDisplayed'
  77. ];
  78. }
  79. public function configureFields(): array
  80. {
  81. if(is_null($this->groupUserArray)) {
  82. $this->groupUserArray = $this->groupUserStore->setMerchant($this->merchant)->get();
  83. }
  84. if(is_null($this->usersArray)) {
  85. //$this->usersArray = $this->userStore->setMerchant($this->merchant)->getJoinGroupUsers();
  86. }
  87. if(is_null($this->productFamilyArray)) {
  88. //$this->productFamilyArray = $this->productFamilyStore->setMerchant($this->merchant)->get();
  89. }
  90. if(is_null($this->productCategoryArray)) {
  91. $this->productCategoryArray = $this->productCategoryStore->setMerchant($this->merchant)->get();
  92. }
  93. return [
  94. 'title' => TextField::new('title')->setSortable(true),
  95. 'behaviorTaxRate' => ChoiceField::new('behaviorTaxRate')
  96. ->setFormTypeOption('required', true)
  97. ->setFormTypeOption('empty_data', TaxRateModel::BEHAVIOR_TAX_RATE_INCLUDED)
  98. ->setChoices(
  99. $this->translatorAdmin->transChoices(
  100. TaxRateModel::getBehaviorTaxRateChoices(),
  101. 'TaxRate',
  102. 'behaviorTaxRate'
  103. )
  104. ),
  105. 'unit' => ChoiceField::new('unit')
  106. ->setFormTypeOption('expanded', true)
  107. ->setFormTypeOption('required', true)
  108. ->setChoices(
  109. $this->translatorAdmin->transChoices(
  110. UnitModel::getUnitAmountChoices(),
  111. 'Unit',
  112. 'unit'
  113. )
  114. ),
  115. 'value' => NumberField::new('value')->setTemplatePath('@LcCaracole/admin/reduction/field/amount.html.twig'),
  116. 'permanent' => BooleanField::new('permanent'),
  117. 'dateStart' => DateTimeField::new('dateStart'),
  118. 'dateEnd' => DateTimeField::new('dateEnd'),
  119. 'isDisplayed'=> BooleanField::new('isDisplayed'),
  120. 'groupUsersActive' => BooleanField::new('groupUsersActive')->setFormTypeOption('mapped', false),
  121. 'groupUsers' => AssociationField::new('groupUsers')
  122. ->setTemplatePath('@LcSov/adminlte/crud/field/association_many.html.twig')
  123. ->setFormTypeOption('choices', $this->groupUserArray),
  124. 'usersActive' => BooleanField::new('usersActive')->setFormTypeOption('mapped', false),
  125. 'users' => ChoiceField::new('users')
  126. ->setChoices([null])
  127. ->setTemplatePath('@LcSov/adminlte/crud/field/association_many.html.twig')
  128. ->setFormTypeOption('attr', [
  129. 'data-ajax' => json_encode([
  130. 'url' => $this->urlGenerator->generate('app_admin_ajax_users'),
  131. 'dataType' => 'json'
  132. ])
  133. ]),
  134. 'productCategoriesActive' => BooleanField::new('productCategoriesActive')->setFormTypeOption('mapped', false),
  135. 'productCategories' => AssociationField::new('productCategories')
  136. ->setTemplatePath('@LcSov/adminlte/crud/field/association_many.html.twig')
  137. ->setFormTypeOption('choice_label',
  138. // @TODO : attention, code dupliqué de ProductCategoriesFilter
  139. function ($category) {
  140. $isOffline = '';
  141. if ($category->getStatus() != 1) {
  142. $isOffline = " [Hors ligne]";
  143. }
  144. $section = ' [' . $category->getSection()->getTitle() . ']';;
  145. return $category . $section . $isOffline;
  146. })
  147. ->setFormTypeOption('choices', $this->productCategoryArray),
  148. 'productFamiliesActive' => BooleanField::new('productFamiliesActive')->setFormTypeOption('mapped', false),
  149. 'productFamilies' => ChoiceField::new('productFamilies')
  150. ->setChoices([null])
  151. ->setTemplatePath('@LcSov/adminlte/crud/field/association_many.html.twig')
  152. ->setFormTypeOption('attr', [
  153. 'data-ajax' => json_encode([
  154. 'url' => $this->urlGenerator->generate('app_admin_ajax_products'),
  155. 'dataType' => 'json'
  156. ])
  157. ]),
  158. 'productFamily' => AssociationField::new('productFamily')
  159. ->setFormTypeOption('choices', $this->productFamilyArray)
  160. ];
  161. }
  162. }