productCategories = new ArrayCollection(); $this->products = new ArrayCollection(); } public function getTaxRateInherited() { if($this->getTaxRate()) { return $this->getTaxRate() ; } else { return $this->getMerchant()->getTaxRate() ; } } public function getMerchant(): ?Merchant { return $this->merchant; } public function setMerchant(?Merchant $merchant): self { $this->merchant = $merchant; return $this; } public function getActiveProducts(): ?bool { return $this->activeProducts; } public function setActiveProducts(bool $activeProducts): self { $this->activeProducts = $activeProducts; return $this; } public function getProductsType(): ?string { return $this->productsType; } public function setProductsType(?string $productsType): self { $this->productsType = $productsType; return $this; } /** * @return Collection|ProductInterface[] */ public function getProducts(): Collection { return $this->products; } 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; } /** * @return Collection|ProductCategory[] */ public function getProductCategories(): Collection { return $this->productCategories; } public function initProductCategories() { $this->productCategories = new ArrayCollection(); } public function addProductCategory(ProductCategory $productCategory): self { if (!$this->productCategories->contains($productCategory)) { $this->productCategories[] = $productCategory; } return $this; } public function removeProductCategory(ProductCategory $productCategory): self { if ($this->productCategories->contains($productCategory)) { $this->productCategories->removeElement($productCategory); } return $this; } public function getSupplierTaxRate(): ?TaxRate { return $this->supplierTaxRate; } public function setSupplierTaxRate(?TaxRate $supplierTaxRate): self { $this->supplierTaxRate = $supplierTaxRate; return $this; } public function getSubtitle(): ?string { return $this->subtitle; } public function setSubtitle(?string $subtitle): self { $this->subtitle = $subtitle; 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 getIsNovelty(): ?bool { return $this->isNovelty; } public function isNoveltyOnline(): ?bool { if($this->isNovelty) { if($this->getNoveltyExpirationDate()) { $now = new \DateTime() ; if($now <= $this->getNoveltyExpirationDate()) { return true ; } } else { return true ; } } return false ; } public function setIsNovelty(?bool $isNovelty): self { $this->isNovelty = $isNovelty; return $this; } public function getNoveltyExpirationDate(): ?\DateTimeInterface { return $this->noveltyExpirationDate; } public function setNoveltyExpirationDate(?\DateTimeInterface $noveltyExpirationDate): self { $this->noveltyExpirationDate = $noveltyExpirationDate; return $this; } public function getIsOrganic(): ?bool { return $this->isOrganic; } public function setIsOrganic(?bool $isOrganic): self { $this->isOrganic = $isOrganic; return $this; } public function getOrganicLabel(): ?string { return $this->organicLabel; } public function setOrganicLabel(?string $organicLabel): self { $this->organicLabel = $organicLabel; return $this; } private function getCheapestOrMostExpensiveProduct($comparisonFunction, $returnSelfIfNotActiveProducts) { $products = $this->getProducts()->getValues() ; if(count($products) > 0) { usort($products, $comparisonFunction) ; return $products[0] ; } if($returnSelfIfNotActiveProducts) { return $this ; } else { return false ; } } public function getCheapestProduct() { return $this->getCheapestOrMostExpensiveProduct(function($a, $b) { return $a->getPriceInherited() > $b->getPriceInherited() ; },true) ; } public function getCheapestProductByUnitRef() { return $this->getCheapestOrMostExpensiveProduct(function($a, $b) { return $a->getPriceByUnitRef() > $b->getPriceByUnitRef() ; },false) ; } public function getMostExpensiveProductByUnitRef() { return $this->getCheapestOrMostExpensiveProduct(function($a, $b) { return $a->getPriceByUnitRef() < $b->getPriceByUnitRef() ; },false) ; } }