productCategories = new ArrayCollection(); $this->products = new ArrayCollection(); } public function __toString() { return $this->getTitle(); } public function getSection(): SectionInterface { return $this->section; } public function setSection(SectionInterface $section): self { $this->section = $section; return $this; } public function getAvailableQuantityInherited() { $availableQuantity = 0; switch ($this->getBehaviorCountStock()) { case self::BEHAVIOR_COUNT_STOCK_BY_MEASURE : case self::BEHAVIOR_COUNT_STOCK_BY_PRODUCT_FAMILY : $availableQuantity = $this->getAvailableQuantity(); break; case self::BEHAVIOR_COUNT_STOCK_BY_PRODUCT : foreach ($this->getProductsOnline() as $product) { $availableQuantity += $product->getAvailableQuantityInherited(); } break; case self::BEHAVIOR_COUNT_STOCK_UNLIMITED : $availableQuantity = false; break; } return $availableQuantity; } public function getTaxRateInherited() { if ($this->getTaxRate()) { return $this->getTaxRate(); } else { return $this->getSection()->getMerchant()->getTaxRate(); } } public function getActiveProducts(): ?bool { return $this->activeProducts; } public function setActiveProducts(bool $activeProducts): self { $this->activeProducts = $activeProducts; return $this; } public function getProductsQuantityAsTitle(): ?bool { return $this->productsQuantityAsTitle; } public function setProductsQuantityAsTitle(bool $productsQuantityAsTitle): self { $this->productsQuantityAsTitle = $productsQuantityAsTitle; return $this; } public function getProductsType(): ?string { return $this->productsType; } public function setProductsType(?string $productsType): self { $this->productsType = $productsType; return $this; } public function getQuantityLabel(): ?string { return $this->quantityLabel; } public function setQuantityLabel(?string $quantityLabel): self { $this->quantityLabel = $quantityLabel; return $this; } /** * @return Collection|ProductInterface[] */ public function getProducts(): Collection { return $this->products; } public function getProductsOnline(): Collection { $products = $this->getProducts(); $productsOnlineArray = new ArrayCollection(); foreach ($products as $product) { if ($product->getStatus() == 1 && $product->getOriginProduct() != true) { $productsOnlineArray[] = $product; } } return $productsOnlineArray; } public function addProduct(ProductInterface $product): self { if (!$this->products->contains($product)) { $this->products[] = $product; $product->setProductFamily($this); } return $this; } public function removeProduct(ProductInterface $product): self { if ($this->products->contains($product)) { $this->products->removeElement($product); // set the owning side to null (unless already changed) if ($product->getProductFamily() === $this) { $product->setProductFamily(null); } } return $this; } public function getReductionCatalog(): ?ReductionCatalogInterface { return $this->reductionCatalog; } public function getReductionCatalogInherited(): ?ReductionCatalogInterface { return $this->getReductionCatalog(); } public function setReductionCatalog(?ReductionCatalogInterface $reductionCatalog): self { $this->reductionCatalog = $reductionCatalog; return $this; } /** * @return Collection|ProductCategoryInterface[] */ public function getProductCategories(): Collection { return $this->productCategories; } public function initProductCategories() { $this->productCategories = new ArrayCollection(); } public function addProductCategory(ProductCategoryInterface $productCategory): self { if (!$this->productCategories->contains($productCategory)) { $this->productCategories[] = $productCategory; } return $this; } public function removeProductCategory(ProductCategoryInterface $productCategory): self { if ($this->productCategories->contains($productCategory)) { $this->productCategories->removeElement($productCategory); } return $this; } public function getProductCategoryParent() { $productCategories = $this->getProductCategories(); if (count($productCategories) > 0) { return $productCategories[0]->getParent(); } return false; } public function getProductCategoryChild() { $productCategories = $this->getProductCategories(); foreach ($productCategories as $productCategory) { if ($productCategory->getParent()) { return $productCategory; } } return false; } public function getSubtitle(): ?string { return $this->subtitle; } public function setSubtitle(?string $subtitle): self { $this->subtitle = $subtitle; return $this; } public function getWarningMessage(): ?string { return $this->warningMessage; } public function setWarningMessage(?string $warningMessage): self { $this->warningMessage = $warningMessage; return $this; } public function getWarningMessageType(): ?string { return $this->warningMessageType; } public function setWarningMessageType(?string $warningMessageType): self { $this->warningMessageType = $warningMessageType; return $this; } public function getNote(): ?string { return $this->note; } public function setNote(?string $note): self { $this->note = $note; return $this; } public function getBehaviorOutOfStock(): ?string { return $this->behaviorOutOfStock; } public function setBehaviorOutOfStock(?string $behaviorOutOfStock): self { $this->behaviorOutOfStock = $behaviorOutOfStock; return $this; } public function getBehaviorCountStock(): ?string { return $this->behaviorCountStock; } public function setBehaviorCountStock(string $behaviorCountStock): self { $this->behaviorCountStock = $behaviorCountStock; return $this; } public function getBehaviorDisplaySale(): ?string { return $this->behaviorDisplaySale; } public function setBehaviorDisplaySale(string $behaviorDisplaySale): self { $this->behaviorDisplaySale = $behaviorDisplaySale; return $this; } public function isPropertyNoveltyOnline(): ?bool { if ($this->getPropertyNoveltyExpirationDate()) { $now = new \DateTime(); if ($now <= $this->getPropertyNoveltyExpirationDate()) { return true; } } return false; } public function getPropertyNoveltyExpirationDate(): ?\DateTimeInterface { return $this->propertyNoveltyExpirationDate; } public function setPropertyNoveltyExpirationDate(?\DateTimeInterface $propertyNoveltyExpirationDate): self { $this->propertyNoveltyExpirationDate = $propertyNoveltyExpirationDate; return $this; } public function getPropertyOrganicLabel(): ?string { return $this->propertyOrganicLabel; } public function setPropertyOrganicLabel(?string $propertyOrganicLabel): self { $this->propertyOrganicLabel = $propertyOrganicLabel; return $this; } public function getPropertyAllergens(): ?string { return $this->propertyAllergens; } public function setPropertyAllergens(?string $propertyAllergens): self { $this->propertyAllergens = $propertyAllergens; return $this; } public function getPropertyComposition(): ?string { return $this->propertyComposition; } public function setPropertyComposition(?string $propertyComposition): self { $this->propertyComposition = $propertyComposition; return $this; } public function getPropertyFragrances(): ?string { return $this->propertyFragrances; } public function setPropertyFragrances(?string $propertyFragrances): self { $this->propertyFragrances = $propertyFragrances; return $this; } public function countProperties(): bool { $count = 0; $count += (int)strlen($this->getPropertyOrganicLabel()) > 0; $count += (int)strlen($this->getPropertyWeight()) > 0; $count += (int)strlen($this->getPropertyFragrances()) > 0; $count += (int)strlen($this->getPropertyComposition()) > 0; $count += (int)strlen($this->getPropertyAllergens()) > 0; $count += (int)strlen($this->getPropertyAlcoholLevel()) > 0; $count += (int)strlen($this->getPropertyCharacteristics()) > 0; $count += (int)strlen($this->getPropertyFeature()) > 0; $count += (int)strlen($this->getPropertyPackaging()) > 0; $count += (int)strlen($this->getPropertyQuantity()) > 0; $count += (int)strlen($this->getPropertyVariety()) > 0; $count += (int)($this->getPropertyExpirationDate() != null); return $count; } public function getBehaviorExpirationDate(): ?string { return $this->behaviorExpirationDate; } public function setBehaviorExpirationDate(?string $behaviorExpirationDate): self { $this->behaviorExpirationDate = $behaviorExpirationDate; return $this; } public function getTypeExpirationDate(): ?string { return $this->typeExpirationDate; } public function setTypeExpirationDate(?string $typeExpirationDate): self { $this->typeExpirationDate = $typeExpirationDate; return $this; } public function getPropertyWeight(): ?string { return $this->propertyWeight; } public function setPropertyWeight(?string $propertyWeight): self { $this->propertyWeight = $propertyWeight; return $this; } public function getPropertyQuantity(): ?string { return $this->propertyQuantity; } public function setPropertyQuantity(?string $propertyQuantity): self { $this->propertyQuantity = $propertyQuantity; return $this; } public function getPropertyVariety(): ?string { return $this->propertyVariety; } public function setPropertyVariety(?string $propertyVariety): self { $this->propertyVariety = $propertyVariety; return $this; } public function getPropertyFeature(): ?string { return $this->propertyFeature; } public function setPropertyFeature(?string $propertyFeature): self { $this->propertyFeature = $propertyFeature; return $this; } public function getPropertyAlcoholLevel(): ?string { return $this->propertyAlcoholLevel; } public function setPropertyAlcoholLevel(?string $propertyAlcoholLevel): self { $this->propertyAlcoholLevel = $propertyAlcoholLevel; return $this; } public function getPropertyPackaging(): ?string { return $this->propertyPackaging; } public function setPropertyPackaging(?string $propertyPackaging): self { $this->propertyPackaging = $propertyPackaging; return $this; } public function getPropertyCharacteristics(): ?string { return $this->propertyCharacteristics; } public function setPropertyCharacteristics(?string $propertyCharacteristics): self { $this->propertyCharacteristics = $propertyCharacteristics; return $this; } public function getBehaviorAddToCart(): ?string { return $this->behaviorAddToCart; } public function setBehaviorAddToCart(?string $behaviorAddToCart): self { $this->behaviorAddToCart = $behaviorAddToCart; return $this; } public function getBehaviorPrice(): ?string { return $this->behaviorPrice; } public function getBehaviorPriceInherited() { return $this->getBehaviorPrice(); } public function setBehaviorPrice(?string $behaviorPrice): self { $this->behaviorPrice = $behaviorPrice; return $this; } public function hasProductsWithVariousWeight() { if ($this->getActiveProducts()) { $arrayCountProducts = []; $products = $this->getProductsOnline(); foreach ($products as $product) { $titleProduct = $product->getTitleInherited(); if (!isset($arrayCountProducts[$titleProduct])) { $arrayCountProducts[$titleProduct] = []; } if (!in_array($product->getQuantityLabelInherited(), $arrayCountProducts[$titleProduct])) { $arrayCountProducts[$titleProduct][] = $product->getQuantityLabelInherited(); } if (count($arrayCountProducts[$titleProduct]) > 1) { return true; } } } return false; } public function getProductsGroupByTitle() { $arrayProductsGroupByTitle = []; $products = $this->getProductsOnline(); foreach ($products as $product) { if ($product->getStatus() == 1) { $titleProduct = $product->getTitleInherited(); if (!isset($arrayProductsGroupByTitle[$titleProduct])) { $arrayProductsGroupByTitle[$titleProduct] = []; } $arrayProductsGroupByTitle[$titleProduct][] = $product; } } return $arrayProductsGroupByTitle; } public function getOriginProduct() { $products = $this->getProducts(); foreach ($products as $product) { if ($product->getOriginProduct()) { return $product; } } } public function getOriginProductOnline() { $originProduct = $this->getOriginProduct(); if ($originProduct->getStatus() == 1) { return $originProduct; } else { return false; } } public function hasOneProductOnline() { if (($this->getActiveProducts() && count($this->getProductsOnline()) > 0) || (!$this->getActiveProducts() && $this->getOriginProduct())) { return true; } return false; } public function getSaleStatus(): ?bool { return $this->saleStatus; } public function setSaleStatus(bool $saleStatus): self { $this->saleStatus = $saleStatus; return $this; } public function getFieldBuyingPrice() { if ($this->getBehaviorPrice() === self::BEHAVIOR_PRICE_BY_PIECE) { return 'buyingPrice'; } elseif ($this->getBehaviorPrice() === self::BEHAVIOR_PRICE_BY_REFERENCE_UNIT) { return 'buyingPriceByRefUnit'; } } public function getFieldPrice() { if ($this->getBehaviorPrice() === self::BEHAVIOR_PRICE_BY_PIECE) { return 'price'; } elseif ($this->getBehaviorPrice() === self::BEHAVIOR_PRICE_BY_REFERENCE_UNIT) { return 'priceByRefUnit'; } } }