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.

213 line
8.8KB

  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)->getOnlineAndOffline();
  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. AssociationField::new('users')
  135. ->setTemplatePath('@LcSov/adminlte/crud/field/association_many.html.twig')
  136. ->setFormTypeOption('choices', $this->usersArray)
  137. ->setFormTypeOption(
  138. 'choice_attr',
  139. function ($choice, $key, $value) {
  140. $data = array();
  141. foreach ($choice->getGroupUsers() as $groupUser) {
  142. $data[] = '_' . $groupUser->getId() . '_';
  143. }
  144. return ['data-group-users' => json_encode($data)];
  145. },
  146. ),
  147. 'productCategoriesActive' => BooleanField::new('productCategoriesActive')->setFormTypeOption('mapped', false),
  148. 'productCategories' => AssociationField::new('productCategories')
  149. ->setTemplatePath('@LcSov/adminlte/crud/field/association_many.html.twig')
  150. ->setFormTypeOption('choice_label',
  151. // @TODO : attention, code dupliqué de ProductCategoriesFilter
  152. function ($category) {
  153. $isOffline = '';
  154. if ($category->getStatus() != 1) {
  155. $isOffline = " [Hors ligne]";
  156. }
  157. $section = ' [' . $category->getSection()->getTitle() . ']';;
  158. return $category . $section . $isOffline;
  159. })
  160. ->setFormTypeOption('choices', $this->productCategoryArray),
  161. 'productFamiliesActive' => BooleanField::new('productFamiliesActive')->setFormTypeOption('mapped', false),
  162. 'productFamilies' => /*ChoiceField::new('productFamilies')
  163. ->setChoices([null])
  164. ->setTemplatePath('@LcSov/adminlte/crud/field/association_many.html.twig')
  165. ->setFormTypeOption('attr', [
  166. 'data-ajax' => json_encode([
  167. 'url' => $this->urlGenerator->generate('app_admin_ajax_products'),
  168. 'dataType' => 'json'
  169. ])
  170. ]),*/
  171. AssociationField::new('productFamilies')
  172. ->setTemplatePath('@LcSov/adminlte/crud/field/association_many.html.twig')
  173. ->setFormTypeOption('choices', $this->productFamilyArray)
  174. ->setFormTypeOption(
  175. 'choice_attr',
  176. function ($choice, $key, $value) {
  177. $data = array();
  178. foreach ($choice->getProductCategories() as $category) {
  179. $data[] = '_' . $category->getId() . '_';
  180. }
  181. return [
  182. 'data-product-categories' => json_encode($data),
  183. 'data-supplier' => $choice->getSupplier()->getId()
  184. ];
  185. }
  186. ),
  187. 'productFamily' => AssociationField::new('productFamily')
  188. ->setFormTypeOption('choices', $this->productFamilyArray)
  189. ];
  190. }
  191. }