src/Controller/EasyAdmin/Wildberries/WildberriesProductCrudController.php line 87

Open in your IDE?
  1. <?php
  2. namespace App\Controller\EasyAdmin\Wildberries;
  3. use App\Entity\WildberriesProduct;
  4. use Doctrine\ORM\QueryBuilder;
  5. use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;
  6. use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;
  7. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  8. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  9. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  10. use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
  11. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
  12. use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
  13. use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
  14. use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
  15. use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
  16. use EasyCorp\Bundle\EasyAdminBundle\Field\CurrencyField;
  17. use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
  18. use EasyCorp\Bundle\EasyAdminBundle\Field\Field;
  19. use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
  20. use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;
  21. use EasyCorp\Bundle\EasyAdminBundle\Field\MoneyField;
  22. use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
  23. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  24. use EasyCorp\Bundle\EasyAdminBundle\Filter\DateTimeFilter;
  25. use EasyCorp\Bundle\EasyAdminBundle\Filter\NumericFilter;
  26. use EasyCorp\Bundle\EasyAdminBundle\Filter\TextFilter;
  27. use EasyCorp\Bundle\EasyAdminBundle\Orm\EntityRepository;
  28. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  29. class WildberriesProductCrudController extends AbstractCrudController
  30. {
  31.     use WildberriesProductBarcodeSearchFixTrait;
  32.     private UrlGeneratorInterface $urlGenerator;
  33.     public function __construct(UrlGeneratorInterface $urlGenerator)
  34.     {
  35.         $this->urlGenerator $urlGenerator;
  36.     }
  37.     public function createIndexQueryBuilder(SearchDto $searchDtoEntityDto $entityDtoFieldCollection $fieldsFilterCollection $filters): QueryBuilder
  38.     {
  39.         return $this->get(EntityRepository::class)->createQueryBuilder($this->checkOrFixSearchDto($searchDto), $entityDto$fields$filters);
  40.     }
  41.     public static function getEntityFqcn(): string
  42.     {
  43.         return WildberriesProduct::class;
  44.     }
  45.     public function configureCrud(Crud $crud): Crud
  46.     {
  47.         return $crud
  48.             ->setSearchFields(['id''clientId''srcProductId''article''nmId''chrtId''category''brand''name''color''size''barcode''price''discount''totalPrice''stock''stockFbo''stockFboFull''stockFboNotInOrders''fboInWayToClient''fboInWayFromClient''fboDaysOnSite''stockPresent''stockCalculated''stockHistory''priceWriteError''stockWriteError''infoPrice''infoDiscount''infoTotalPrice''infoStock''note'])
  49.             ->setDefaultSort(['id' => 'DESC'])
  50.             ->setPaginatorPageSize(50)
  51.             ->setPaginatorUseOutputWalkers(true)
  52.             ->setPaginatorFetchJoinCollection(true)
  53.             ->setEntityLabelInSingular('Заведенная номенклатура')
  54.             ->setEntityLabelInPlural('Заведенная номенклатура');
  55.     }
  56.     public function configureActions(Actions $actions): Actions
  57.     {
  58.         $wbProductReprice Action::new('wbProductReprice''Обновить цену')
  59.             ->linkToUrl(function (WildberriesProduct $wildberriesProduct): string {
  60.                 return $this->urlGenerator->generate(
  61.                     'wb_product_reprice',
  62.                     ['id' => $wildberriesProduct->getId()],
  63.                     UrlGeneratorInterface::ABSOLUTE_PATH
  64.                 );
  65.             });
  66.         $resetFboStock Action::new('resetFboStock''Обнулить FBO')
  67.             ->linkToUrl(function (WildberriesProduct $wildberriesProduct): string {
  68.                 return $this->urlGenerator->generate(
  69.                     'wb_product_fbo_reset',
  70.                     ['id' => $wildberriesProduct->getId()],
  71.                     UrlGeneratorInterface::ABSOLUTE_PATH
  72.                 );
  73.             });
  74.         $wbProductWarehouseFormBind Action::new('wbProductWarehouseFormBind''Привязать к Складу')
  75.             ->linkToRoute('wb_product_warehouse_bind_form', function (WildberriesProduct $wildberriesProduct): array {
  76.                 return ['id' => $wildberriesProduct->getId()];
  77.             });
  78.         return $actions
  79.             ->add(Crud::PAGE_INDEX$wbProductWarehouseFormBind)
  80.             ->add(Crud::PAGE_INDEX$wbProductReprice)
  81.             ->add(Crud::PAGE_INDEX$resetFboStock)
  82.             ->add(Crud::PAGE_INDEXAction::DETAIL)
  83.             ->reorder(Crud::PAGE_INDEX, [Action::DETAILAction::EDIT])
  84.             ->disable('new''delete');
  85.     }
  86.     public function configureFilters(Filters $filters): Filters
  87.     {
  88.         return $filters
  89.             ->add(NumericFilter::new('id''ID'))
  90.             ->add(TextFilter::new('article''Артикул'))
  91.             ->add(NumericFilter::new('nmId''WB артикул'))
  92.             ->add(NumericFilter::new('chrtId''WB код размера'))
  93.             ->add(TextFilter::new('category''Вид товара'))
  94.             ->add(TextFilter::new('brand''Бренд'))
  95.             ->add(TextFilter::new('name''Наименование'))
  96.             ->add(TextFilter::new('color''Цвет'))
  97.             ->add(TextFilter::new('size''Размер'))
  98.             ->add(DateTimeFilter::new('createdAt''Дата создания'));
  99.     }
  100.     public function configureFields(string $pageName): iterable
  101.     {
  102.         $clientId IntegerField::new('clientId');
  103.         $onFbs Field::new('onFbs');
  104.         $onFbo Field::new('onFbo');
  105.         $srcProductId IntegerField::new('srcProductId');
  106.         $article TextField::new('article''Артикул');
  107.         $nmId IntegerField::new('nmId''WB артикул');
  108.         $chrtId IntegerField::new('chrtId''WB код размера');
  109.         $category TextField::new('category''Вид товара');
  110.         $brand TextField::new('brand''Бренд');
  111.         $name TextField::new('name''Наименование');
  112.         $color TextField::new('color''Цвет');
  113.         $size TextField::new('size''Размер');
  114.         $barcode TextField::new('barcode''Штрихкод');
  115.         $createdAt DateTimeField::new('createdAt''Дата создания');
  116.         $updatedAt DateTimeField::new('updatedAt');
  117.         $price MoneyField::new('price''Цена')->setCurrency('RUB');
  118.         $discount IntegerField::new('discount''Скидка на товар');
  119.         $totalPrice MoneyField::new('totalPrice')->setCurrency('RUB');
  120.         $hidePrice Field::new('hidePrice''Не передавать цену')->setTemplatePath('admin/default/field_toggle_inverse.html.twig');
  121.         $stock IntegerField::new('stock''Остатки');
  122.         $stockFbo IntegerField::new('stockFbo''Остатки FBO');
  123.         $stockFboFull IntegerField::new('stockFboFull');
  124.         $stockFboNotInOrders IntegerField::new('stockFboNotInOrders');
  125.         $fboInWayToClient IntegerField::new('fboInWayToClient');
  126.         $fboInWayFromClient IntegerField::new('fboInWayFromClient');
  127.         $fboDaysOnSite IntegerField::new('fboDaysOnSite');
  128.         $stockPresent IntegerField::new('stockPresent''Товары в наличии');
  129.         $hideStock Field::new('hideStock''Скрыть остатки')->setTemplatePath('admin/default/field_toggle_inverse.html.twig');
  130.         $noMinStock Field::new('noMinStock''Остатки от 1')->setTemplatePath('admin/default/field_toggle_inverse.html.twig');
  131.         $stockCalculated IntegerField::new('stockCalculated');
  132.         $stockHistory TextareaField::new('stockHistory');
  133.         $activeChangeTm DateTimeField::new('activeChangeTm');
  134.         $activeWriteTm DateTimeField::new('activeWriteTm');
  135.         $baseReadTm DateTimeField::new('baseReadTm');
  136.         $baseChangeTm DateTimeField::new('baseChangeTm');
  137.         $baseWriteTm DateTimeField::new('baseWriteTm');
  138.         $infoReadTm DateTimeField::new('infoReadTm''Обновлено');
  139.         $infoChangeTm DateTimeField::new('infoChangeTm');
  140.         $infoWriteTm DateTimeField::new('infoWriteTm');
  141.         $priceReadTm DateTimeField::new('priceReadTm');
  142.         $priceChangeTm DateTimeField::new('priceChangeTm');
  143.         $priceWriteTm DateTimeField::new('priceWriteTm''Время последней отправки цены на Wildberries');
  144.         $priceWriteError TextareaField::new('priceWriteError''Ошибки изменения цен Wildberries');
  145.         $stockReadTm DateTimeField::new('stockReadTm');
  146.         $stockChangeTm DateTimeField::new('stockChangeTm');
  147.         $stockWriteTm DateTimeField::new('stockWriteTm''Время последней отправки остатков на Wildberries');
  148.         $stockWriteUpdated BooleanField::new('stockWriteUpdated''Остатки изменены');
  149.         $stockWriteError TextareaField::new('stockWriteError''Ошибки изменения остатков Wildberries');
  150.         $isVisible BooleanField::new('isVisible''Активно');
  151.         $isDeleted BooleanField::new('isDeleted''Товар удален');//->setTemplatePath('admin/default/field_boolean_inverse.html.twig');
  152.         $infoPrice MoneyField::new('infoPrice''Цена(на WB)')->setCurrency('RUB');
  153.         $infoDiscount MoneyField::new('infoDiscount''Скидка(на WB)')->setCurrency('RUB');
  154.         $infoTotalPrice MoneyField::new('infoTotalPrice''Цена товара со скидкой(на WB)')->setCurrency('RUB');
  155.         $infoStock IntegerField::new('infoStock');
  156.         $note TextareaField::new('note''Заметка');
  157.         $client AssociationField::new('client''Площадка');
  158.         $srcProduct AssociationField::new('srcProduct''Товар 1С');
  159.         $id IdField::new('id''ID');
  160.         $fields = [];
  161.         switch ($pageName) {
  162.             case Crud::PAGE_INDEX:
  163.                 $fields = [$id$client$article$nmId$category$brand$name$stock$stockFbo$price$infoPrice$infoDiscount$hidePrice$srcProduct$hideStock$noMinStock$infoReadTm$isDeleted$stockWriteUpdated$createdAt];
  164.                 break;
  165.             case Crud::PAGE_DETAIL:
  166.                 $fields = [$id$article$nmId$chrtId$category$brand$name$barcode$color$size$stock$stockFbo$stockPresent$noMinStock$price$discount$infoPrice$infoDiscount$infoTotalPrice$priceWriteTm$priceWriteError$note$srcProduct$createdAt$stockWriteTm$stockWriteUpdated$stockWriteError$isDeleted];
  167.                 break;
  168.             case Crud::PAGE_NEW:
  169.             case Crud::PAGE_EDIT:
  170.                 $fields = [$clientId$onFbs$onFbo$srcProductId$article$nmId$chrtId$category$brand$name$color$size$barcode$createdAt$updatedAt$price$discount$totalPrice$hidePrice$stock$stockFbo$stockFboFull$stockFboNotInOrders$fboInWayToClient$fboInWayFromClient$fboDaysOnSite$stockPresent$hideStock$noMinStock$stockCalculated$stockHistory$activeChangeTm$activeWriteTm$baseReadTm$baseChangeTm$baseWriteTm$infoReadTm$infoChangeTm$infoWriteTm$priceReadTm$priceChangeTm$priceWriteTm$priceWriteError$stockReadTm$stockChangeTm$stockWriteTm$stockWriteUpdated$stockWriteError$isVisible$isDeleted$infoPrice$infoDiscount$infoTotalPrice$infoStock$note$client$srcProduct];
  171.                 break;
  172.         }
  173.         return $fields;
  174.     }
  175. }