|
- <?php
-
- namespace Lc\CaracoleBundle\Form\Order;
-
- use App\Repository\Product\ProductFamilyStore;
- use Doctrine\ORM\EntityManagerInterface;
- use Lc\CaracoleBundle\Factory\Order\OrderProductFactory;
- use Lc\CaracoleBundle\Solver\Product\ProductFamilySolver;
- use Symfony\Component\Form\AbstractType;
- use Symfony\Component\Form\Extension\Core\Type\HiddenType;
- use Symfony\Component\Form\FormBuilderInterface;
- use Symfony\Component\OptionsResolver\OptionsResolver;
-
- class OrderProductsType extends AbstractType
- {
- protected EntityManagerInterface $entityManager;
- protected ProductFamilyStore $productFamilyStore;
- protected OrderProductFactory $orderProductFactory;
- protected ProductFamilySolver $productFamilySolver;
-
- public function __construct(
- EntityManagerInterface $entityManager,
- ProductFamilyStore $productFamilyStore,
- OrderProductFactory $orderProductFactory,
- ProductFamilySolver $productFamilySolver
- ) {
- $this->entityManager = $entityManager;
- $this->productFamilyStore = $productFamilyStore;
- $this->orderProductFactory = $orderProductFactory;
- $this->productFamilySolver = $productFamilySolver;
- }
-
- public function buildForm(FormBuilderInterface $builder, array $options)
- {
- if (isset($options['data']['id_product_family'])) {
- $idProductFamily = $options['data']['id_product_family'];
- $productFamily = $this->productFamilyStore->getOneById($idProductFamily);
-
- $builder->add('id_product_family', HiddenType::class, [
- 'data' => $productFamily->getId()
- ]);
-
- if ($productFamily) {
- if ($productFamily->getActiveProducts()
- && $productFamily->getBehaviorAddToCart() == 'multiple') {
- $cpt = 0;
-
- foreach ($this->productFamilySolver->getProductsGroupByTitle($productFamily) as $key => $product) {
- $orderProduct = $this->orderProductFactory->create($product[0], 0);
- $builder->add('order_product_' . $cpt, OrderProductType::class, [
- 'data' => $orderProduct
- ]);
- $cpt++;
- }
- } else {
- $product = null;
- if ($productFamily->getActiveProducts()) {
- $products = $productFamily->getProductsOnline();
- if ($products && count($products) > 0) {
- $product = $products[0];
- }
- } else {
- $originProduct = $this->productFamilySolver->getOriginProduct($productFamily);
- if ($originProduct && $originProduct->getStatus() == 1) {
- $product = $originProduct;
- }
- }
-
- $orderProduct = $this->orderProductFactory->create($product, 1);
-
- $builder->add('order_product_0', OrderProductType::class, [
- 'data' => $orderProduct
- ]);
- }
- }
- }
- }
-
- public function configureOptions(OptionsResolver $resolver)
- {
- $resolver->setDefaults([
- // Configure your form options here
- ]);
- }
- }
|