<?php
namespace App\Controller\EasyAdmin\Wildberries;
use App\Entity\Wildberries\WildberriesWarehouseProductStock;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
use EasyCorp\Bundle\EasyAdminBundle\Field\Field;
use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class WildberriesWarehouseProductStockCrudController extends AbstractCrudController
{
private UrlGeneratorInterface $urlGenerator;
public function __construct(UrlGeneratorInterface $urlGenerator)
{
$this->urlGenerator = $urlGenerator;
}
public static function getEntityFqcn(): string
{
return WildberriesWarehouseProductStock::class;
}
public function configureCrud(Crud $crud): Crud
{
return $crud
->setSearchFields(['id', 'stock', 'product.article', 'product.barcode', 'warehouse.name'])
->setDefaultSort(['id' => 'DESC'])
->setPaginatorPageSize(50)
->setPaginatorUseOutputWalkers(true)
->setPaginatorFetchJoinCollection(true)
->setEntityLabelInSingular('Остатки товара на складах')
->setEntityLabelInPlural('Остатки товара на складах');
}
public function configureActions(Actions $actions): Actions
{
$wbProductRestock = Action::new('wbWarehouseProductRestock', 'Обновить остатки')
->linkToUrl(function (WildberriesWarehouseProductStock $wbWarehouseProductStock): string {
return $this->urlGenerator->generate(
'wb_product_restock',
['id' => $wbWarehouseProductStock->getId()],
UrlGeneratorInterface::ABSOLUTE_PATH
);
});
$wbProductCastock = Action::new('wbWarehouseProductCastock', 'Пересчитать остатки')
->linkToUrl(function (WildberriesWarehouseProductStock $wbWarehouseProductStock): string {
return $this->urlGenerator->generate(
'wb_product_castock',
['id' => $wbWarehouseProductStock->getId()],
UrlGeneratorInterface::ABSOLUTE_PATH
);
});
return $actions
->add(Crud::PAGE_INDEX, $wbProductRestock)
->add(Crud::PAGE_INDEX, $wbProductCastock)
->add(Crud::PAGE_INDEX, Action::DETAIL)
->add(Crud::PAGE_EDIT, Action::INDEX)
->disable('new', 'delete');
}
public function configureFields(string $pageName): iterable
{
$disabled = Field::new('disabled', 'Отключен');
$product = AssociationField::new('product', 'Продукт');
$warehouse = AssociationField::new('warehouse', 'Склад');
$stock = IntegerField::new('stock', 'Количество товара в наличии');
$stockWriteTm = DateTimeField::new('stockWriteTm', 'Время последней отправки остатков');
$stockWriteError = TextareaField::new('stockWriteError', 'Ошибки изменения остатков');
$stockHistory = Field::new('stockHistory', 'Расчет остатков');
$warehouseClient = TextareaField::new('warehouse.client', 'Клиент');
$productBarcode = TextareaField::new('product.barcode', 'Штрихкод');
$productArticle = TextareaField::new('product.article', 'Артикул');
if (Crud::PAGE_INDEX === $pageName) {
return [$warehouseClient, $product, $productBarcode, $productArticle, $warehouse, $stock, $disabled];
} elseif (Crud::PAGE_DETAIL === $pageName) {
return [$product, $warehouse, $stock, $stockWriteTm, $stockWriteError, $stockHistory];
} elseif (Crud::PAGE_NEW === $pageName) {
return [$disabled];
} elseif (Crud::PAGE_EDIT === $pageName) {
return [$disabled];
}
}
}