Browse Source

Divers

develop
Guillaume Bourgeois 1 year ago
parent
commit
04dab44e41
4 changed files with 58 additions and 30 deletions
  1. +42
    -0
      Builder/Product/ProductFamilyBuilder.php
  2. +4
    -30
      Controller/AdminControllerTrait.php
  3. +5
    -0
      Repository/Product/ProductCategoryRepositoryQuery.php
  4. +7
    -0
      Repository/Product/ProductCategoryStore.php

+ 42
- 0
Builder/Product/ProductFamilyBuilder.php View File

@@ -2,9 +2,51 @@

namespace Lc\CaracoleBundle\Builder\Product;

use Doctrine\ORM\EntityManagerInterface;
use Lc\CaracoleBundle\Container\Section\SectionContainer;
use Lc\CaracoleBundle\Model\Merchant\MerchantInterface;
use Lc\CaracoleBundle\Model\Product\ProductFamilyInterface;

class ProductFamilyBuilder
{
protected EntityManagerInterface $entityManager;
protected SectionContainer $sectionContainer;

public function __construct(
EntityManagerInterface $entityManager,
SectionContainer $sectionContainer
)
{
$this->entityManager = $entityManager;
$this->sectionContainer = $sectionContainer;
}

public function setMerchant(ProductFamilyInterface $productFamily, MerchantInterface $merchant): void
{
$sectionStore = $this->sectionContainer->getStore()->setMerchant($merchant);

// Les ProductFamilySectionProperty sont créées en double, on rectifie ici
$productFamilySectionPropertyArray = [];
foreach($productFamily->getProductFamilySectionProperties() as $productFamilySectionProperty) {
$productFamilySectionPropertyArray[$productFamilySectionProperty->getId()] = $productFamilySectionProperty;
$productFamily->removeProductFamilySectionProperty($productFamilySectionProperty);
}

foreach($productFamilySectionPropertyArray as $productFamilySectionProperty) {
$oldSection = $productFamilySectionProperty->getSection();
$newSection = $sectionStore->getOneByDevAlias($oldSection->getDevAlias());

if($newSection) {
$productFamilySectionProperty->setProductFamily($productFamily);
$productFamilySectionProperty->setSection($newSection);
$productFamily->addProductFamilySectionProperty($productFamilySectionProperty);
}
else {
$this->entityManager->remove($productFamilySectionProperty);
$productFamily->removeProductFamilySectionProperty($productFamilySectionProperty);
}
}

$productFamily->initProductCategories();
}
}

+ 4
- 30
Controller/AdminControllerTrait.php View File

@@ -130,40 +130,14 @@ trait AdminControllerTrait
$newEntity = $entityComponent->duplicateEntity($context->getEntity()->getInstance());

$merchant = $duplicateOtherMerchantForm->get('merchants')->getData();
//
if($this->isInstanceOf(ProductFamilyInterface::class)) {
$sectionStore = $this->getSectionContainer()->getStore()->setMerchant($merchant);

// Les ProductFamilySectionproperty sont créées en double, on rectifie ici
// @TODO : j'imagine qu'on peut faire mieux que ça. Résoudre le problème à la base par exemple.
$productFamilySectionPropertyArray = [];
foreach($newEntity->getProductFamilySectionProperties() as $productFamilySectionProperty) {
$productFamilySectionPropertyArray[$productFamilySectionProperty->getId()] = $productFamilySectionProperty;
$newEntity->removeProductFamilySectionProperty($productFamilySectionProperty);
}

foreach($productFamilySectionPropertyArray as $productFamilySectionProperty) {
$oldSection = $productFamilySectionProperty->getSection();
$newSection = $sectionStore->getOneByDevAlias($oldSection->getDevAlias());

if($newSection) {
$productFamilySectionProperty->setProductFamily($newEntity);
$productFamilySectionProperty->setSection($newSection);
$newEntity->addProductFamilySectionProperty($productFamilySectionProperty);
}
else {
$entityManager->remove($productFamilySectionProperty);
$newEntity->removeProductFamilySectionProperty($productFamilySectionProperty);
}
}

$newEntity->initProductCategories();
}
$this->getProductFamilyContainer()->getBuilder()->setMerchant($merchant);
}
else {
$newEntity->setMerchant($merchant);
}
//
//

$entityManager->create($newEntity, false);
$entityManager->flush();


+ 5
- 0
Repository/Product/ProductCategoryRepositoryQuery.php View File

@@ -39,4 +39,9 @@ class ProductCategoryRepositoryQuery extends AbstractRepositoryQuery

return $this->andWhere('productFamilies.status = 1');
}

public function filterByTitle(string $title): self
{
return $this->andWhere('.title LIKE :title')->setParameter('title', $title);
}
}

+ 7
- 0
Repository/Product/ProductCategoryStore.php View File

@@ -53,4 +53,11 @@ class ProductCategoryStore extends AbstractStore
$query->filterByDevAlias($devAlias);
return $query->find();
}

public function getOneByTitle(string $title): ?ProductCategoryInterface
{
$query = $this->createDefaultQuery();
$query->filterByTitle($title);
return $query->findOne();
}
}

Loading…
Cancel
Save