@@ -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(); | |||
} | |||
} |
@@ -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(); | |||
@@ -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); | |||
} | |||
} |
@@ -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(); | |||
} | |||
} |