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.

95 lines
3.8KB

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