$this->productFamilySectionPropertySolver = $productFamilySectionPropertySolver; | $this->productFamilySectionPropertySolver = $productFamilySectionPropertySolver; | ||||
} | } | ||||
public function enable(ProductFamilyInterface $productFamily, SectionInterface $section, bool $flush = true): void | public function enable(ProductFamilyInterface $productFamily, SectionInterface $section, bool $flush = true): void | ||||
{ | { | ||||
$productFamilySectionProperty = $this->productFamilySectionPropertySolver->getProductFamilySectionProperty($productFamily, $section); | $productFamilySectionProperty = $this->productFamilySectionPropertySolver->getProductFamilySectionProperty($productFamily, $section); | ||||
} | } | ||||
} | } | ||||
public function disable(ProductFamilyInterface $productFamily, SectionInterface $section, bool $flush = true): void | |||||
{ | |||||
$productFamilySectionProperty = $this->productFamilySectionPropertySolver->getProductFamilySectionProperty($productFamily, $section); | |||||
if ($productFamilySectionProperty) { | |||||
$productFamilySectionProperty->setStatus(0); | |||||
$this->entityManager->update($productFamilySectionProperty); | |||||
} | |||||
if($flush) { | |||||
$this->entityManager->flush(); | |||||
} | |||||
} | |||||
} | } |
'title', | 'title', | ||||
'description', | 'description', | ||||
'image', | 'image', | ||||
'status', | |||||
'saleStatus', | 'saleStatus', | ||||
'isEligibleTicketRestaurant', | 'isEligibleTicketRestaurant', | ||||
]; | ]; |
parent::__construct($repository, 'productFamily', $paginator); | parent::__construct($repository, 'productFamily', $paginator); | ||||
} | } | ||||
public function resetRelationsJoin(): void | |||||
{ | |||||
$this->isJoinSections = false; | |||||
$this->isJoinProductCategories = false; | |||||
$this->isJoinProductFamilySectionProperties = false; | |||||
$this->isJoinProducts = false; | |||||
$this->isJoinQualityLabels = false; | |||||
} | |||||
public function joinProductFamilySectionProperties(bool $addSelect = true): self | public function joinProductFamilySectionProperties(bool $addSelect = true): self | ||||
{ | { | ||||
if (!$this->isJoinProductFamilySectionProperties) { | if (!$this->isJoinProductFamilySectionProperties) { | ||||
$this->innerJoin('.products', 'products'); | $this->innerJoin('.products', 'products'); | ||||
if ($addSelect) { | if ($addSelect) { | ||||
$this->addSelect('products'); | |||||
// Décommenté sinon doctrine n'hydrate pas correctement les produits liés au ProductFamily (exemple : un seul sur deux) | |||||
// $this->addSelect('products'); | |||||
} | } | ||||
} | } | ||||
return $this; | return $this; |
{% import '@LcCaracole/admin/section/macros.html.twig' as macros_section %} | |||||
{% set item = entity.instance %} | |||||
{% for section_property in item.productFamilySectionProperties %} | |||||
{{ macros_section.section_badge(section_property.section) }} | |||||
{% else %} | |||||
<span class="badge badge-secondary">Aucune</span> | |||||
{% endfor %} |
{% macro section_badge(section) %} | {% macro section_badge(section) %} | ||||
<span class="badge badge-secondary {{ section_container.solver.getHtmlClass(section) }}">{{ section.title }}</span> | <span class="badge badge-secondary {{ section_container.solver.getHtmlClass(section) }}">{{ section.title }}</span> | ||||
{% endmacro %} | |||||
{% macro section_badge_light_custom(section,title, status= 1) %} | |||||
<span class="badge badge-secondary {{ status !=1 ? 'stripped'}} {{ section_container.solver.getHtmlClass(section) }}-light">{{ title }}</span> | |||||
{% endmacro %} | {% endmacro %} |
namespace Lc\CaracoleBundle\Solver\Product; | namespace Lc\CaracoleBundle\Solver\Product; | ||||
use Lc\CaracoleBundle\Model\Product\ProductCategoryInterface; | |||||
class ProductCategorySolver | class ProductCategorySolver | ||||
{ | { | ||||
public function isOnline(ProductCategoryInterface $productCategory) | |||||
{ | |||||
if ($productCategory->getParent()) { | |||||
if ($productCategory->getStatus() && $productCategory->getParent()->getStatus()) { | |||||
return true; | |||||
} | |||||
} elseif ($productCategory->getStatus()) { | |||||
return true; | |||||
} | |||||
return false; | |||||
} | |||||
} | } | ||||
} | } | ||||
return null; | return null; | ||||
} | } | ||||
} | } | ||||
use Lc\CaracoleBundle\Doctrine\Extension\ProductPropertyInterface; | use Lc\CaracoleBundle\Doctrine\Extension\ProductPropertyInterface; | ||||
use Lc\CaracoleBundle\Model\Product\ProductFamilyInterface; | use Lc\CaracoleBundle\Model\Product\ProductFamilyInterface; | ||||
use Lc\CaracoleBundle\Model\Product\ProductFamilyModel; | use Lc\CaracoleBundle\Model\Product\ProductFamilyModel; | ||||
use Lc\CaracoleBundle\Model\Product\ProductFamilySectionPropertyInterface; | |||||
use Lc\CaracoleBundle\Model\Product\ProductInterface; | use Lc\CaracoleBundle\Model\Product\ProductInterface; | ||||
use Lc\CaracoleBundle\Model\Reduction\ReductionCatalogInterface; | use Lc\CaracoleBundle\Model\Reduction\ReductionCatalogInterface; | ||||
use Lc\CaracoleBundle\Model\Section\SectionInterface; | use Lc\CaracoleBundle\Model\Section\SectionInterface; | ||||
{ | { | ||||
protected ProductSolver $productSolver; | protected ProductSolver $productSolver; | ||||
protected ProductFamilySectionPropertySolver $productFamilySectionPropertySolver; | |||||
protected ProductCategorySolver $productCategorySolver; | |||||
public function __construct(ProductSolver $productSolver) | |||||
public function __construct(ProductSolver $productSolver, ProductFamilySectionPropertySolver $productFamilySectionPropertySolver, ProductCategorySolver $productCategorySolver) | |||||
{ | { | ||||
$this->productSolver = $productSolver; | $this->productSolver = $productSolver; | ||||
$this->productFamilySectionPropertySolver = $productFamilySectionPropertySolver; | |||||
$this->productCategorySolver = $productCategorySolver; | |||||
} | } | ||||
return false; | return false; | ||||
} | } | ||||
public function isCategoriesOnlineInSection(ProductFamilyInterface $productFamily, SectionInterface $section):bool | |||||
{ | |||||
$isCategoriesOnlineInSection =false; | |||||
foreach ($productFamily->getProductCategories() as $productCatgory){ | |||||
if($productCatgory->getSection() === $section && $this->productCategorySolver->isOnline($productCatgory)){ | |||||
$isCategoriesOnlineInSection = true; | |||||
} | |||||
} | |||||
return $isCategoriesOnlineInSection; | |||||
} | |||||
} | } | ||||
return $this->sectionResolver->isOutOfSection(); | return $this->sectionResolver->isOutOfSection(); | ||||
} | } | ||||
private $sections = null; | |||||
public function getSections() | public function getSections() | ||||
{ | { | ||||
return $this->sectionStore | |||||
if(!$this->sections){ | |||||
$this->sections = $this->sectionStore | |||||
->setMerchant($this->merchantResolver->getCurrent()) | ->setMerchant($this->merchantResolver->getCurrent()) | ||||
->getOnline(); | ->getOnline(); | ||||
} | |||||
return $this->sections; | |||||
} | } | ||||
public function getMerchants() | public function getMerchants() |