<?php
declare(strict_types=1);
namespace App\Form\Type;
use App\Entity\Core\OrderItem;
use App\Entity\ProductAttribute;
use App\Entity\ProductAttributeItem;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
final class CustomEstimationType extends AbstractType
{
private $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$productAttributeItemRepository = $this->container->get('doctrine')->getRepository(ProductAttributeItem::class);
$productAttributeRepository = $this->container->get('doctrine')->getRepository(ProductAttribute::class);
$productAttributeItemOptions = $productAttributeItemRepository->getProductAttributeItemsByProductAttribute();
$productAttributes = $productAttributeRepository->getAsOptions();
$builder
->add('productAttributeItems', CustomPartsType::class, [
'class' => ProductAttributeItem::class,
'mapped' => false,
'parts' => $productAttributeItemOptions,
'partOwners' => $productAttributes,
'multiple' => true,
'label' => false
])
->add('quantity', IntegerType::class, [
'attr' => [
'min' => 1,
'value' => 1,
'class' => 'h-100'
],
'label' => 'sylius.ui.quantity'
])
;
if ($options['product'] && $options['product']->getByMetre()) {
$builder
->add('metres', IntegerType::class, [
'attr' => [
'min' => 1,
'value' => 1,
'class' => 'h-100'
],
'label' => 'sylius.ui.quantity'
])
;
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => OrderItem::class,
'product' => null
]);
}
}