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.

86 lines
3.4KB

  1. <?php
  2. namespace Lc\CaracoleBundle\Form\Order;
  3. use App\Repository\Product\ProductFamilyStore;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Lc\CaracoleBundle\Factory\Order\OrderProductFactory;
  6. use Lc\CaracoleBundle\Solver\Product\ProductFamilySolver;
  7. use Symfony\Component\Form\AbstractType;
  8. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  9. use Symfony\Component\Form\FormBuilderInterface;
  10. use Symfony\Component\OptionsResolver\OptionsResolver;
  11. class OrderProductsType extends AbstractType
  12. {
  13. protected EntityManagerInterface $entityManager;
  14. protected ProductFamilyStore $productFamilyStore;
  15. protected OrderProductFactory $orderProductFactory;
  16. protected ProductFamilySolver $productFamilySolver;
  17. public function __construct(
  18. EntityManagerInterface $entityManager,
  19. ProductFamilyStore $productFamilyStore,
  20. OrderProductFactory $orderProductFactory,
  21. ProductFamilySolver $productFamilySolver
  22. ) {
  23. $this->entityManager = $entityManager;
  24. $this->productFamilyStore = $productFamilyStore;
  25. $this->orderProductFactory = $orderProductFactory;
  26. $this->productFamilySolver = $productFamilySolver;
  27. }
  28. public function buildForm(FormBuilderInterface $builder, array $options)
  29. {
  30. if (isset($options['data']['id_product_family'])) {
  31. $idProductFamily = $options['data']['id_product_family'];
  32. $productFamily = $this->productFamilyStore->getOneById($idProductFamily);
  33. $builder->add('id_product_family', HiddenType::class, [
  34. 'data' => $productFamily->getId()
  35. ]);
  36. if ($productFamily) {
  37. if ($productFamily->getActiveProducts()
  38. && $productFamily->getBehaviorAddToCart() == 'multiple') {
  39. $cpt = 0;
  40. foreach ($this->productFamilySolver->getProductsGroupByTitle($productFamily) as $key => $product) {
  41. $orderProduct = $this->orderProductFactory->create($product[0], 0);
  42. $builder->add('order_product_' . $cpt, OrderProductType::class, [
  43. 'data' => $orderProduct
  44. ]);
  45. $cpt++;
  46. }
  47. } else {
  48. $product = null;
  49. if ($productFamily->getActiveProducts()) {
  50. $products = $productFamily->getProductsOnline();
  51. if ($products && count($products) > 0) {
  52. $product = $products[0];
  53. }
  54. } else {
  55. $originProduct = $this->productFamilySolver->getOriginProduct($productFamily);
  56. if ($originProduct && $originProduct->getStatus() == 1) {
  57. $product = $originProduct;
  58. }
  59. }
  60. $orderProduct = $this->orderProductFactory->create($product, 1);
  61. $builder->add('order_product_0', OrderProductType::class, [
  62. 'data' => $orderProduct
  63. ]);
  64. }
  65. }
  66. }
  67. }
  68. public function configureOptions(OptionsResolver $resolver)
  69. {
  70. $resolver->setDefaults([
  71. // Configure your form options here
  72. ]);
  73. }
  74. }