orderProducts = new ArrayCollection(); $this->status = 1; } public function __toString() { $title = $this->getProductFamily()->getTitle(); if ($this->getTitle() && strlen($this->getTitle())) { $title .= ' - ' . $this->getTitle(); } if ($this->getProductFamily()->hasProductsWithVariousWeight()) { $title .= ' - ' . $this->getQuantityLabelInherited(); } return $title; } public function isProductSaleStatusOn() { if ($this->getProductFamily()->getSaleStatus() != 1) { return false; } $allCategoriesSalesOff = true; $unavailableSpecificDay = false; foreach ($this->getProductFamily()->getProductCategories() as $category) { if ($category->getParent()) { if ($category->getSaleStatus() && $category->getParent()->getSaleStatus()) { $allCategoriesSalesOff = false; } } else { if ($category->getSaleStatus()) { $allCategoriesSalesOff = false; } } // specific day // @TODO : spécifique pdl ? $displaySpecificDay = $category->getDisplaySpecificDay(); if ($displaySpecificDay && $displaySpecificDay != date('N')) { $unavailableSpecificDay = true; } } if ($allCategoriesSalesOff) { return false; } if ($unavailableSpecificDay) { return false; } return true; } // isProductAvailable public function isAvailable($quantityOrder = 0, $checkCart = false, $orderShop = null) { if ($this->getStatus() != 1 || $this->getProductFamily()->getStatus() != 1 || !$this->isProductSaleStatusOn()) { return false; } // @TODO : orderShop à définir où est appelé isProductAvailable if ($checkCart && !$orderShop) { throw new \Exception("Attention jeune padawan : définir le orderShop à l'endroit où est appelé isProductAvailable"); } $productFamily = $this->getProductFamily(); $quantityAsked = $quantityOrder; if ($productFamily->getBehaviorCountStock() == ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_MEASURE) { if (!$quantityOrder) { $quantityAsked = $orderShop->getQuantityOrderByProduct($this, true); } else { $quantityAsked = ($this->getQuantityInherited() / $this->getUnitInherited()->getCoefficient()) * $quantityOrder; } if ($checkCart) { $quantityAsked += $orderShop->getQuantityOrderByProduct($this, true); } } if (($productFamily->getBehaviorCountStock() == ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_PRODUCT_FAMILY || $productFamily->getBehaviorCountStock() == ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_PRODUCT)) { if (!$quantityOrder) { $quantityAsked = $orderShop->getQuantityOrderByProduct($this); } if ($checkCart) { $quantityAsked += $orderShop->getQuantityOrderByProduct($this); } } if ($this->getAvailableQuantityInherited() >= $quantityAsked || $productFamily->getBehaviorCountStock() == ProductFamilyModel::BEHAVIOR_COUNT_STOCK_UNLIMITED) { return true; } else { return false; } } // getProductQuantityMaxAddCart public function getQuantityMaxAddCart(OrderShopInterface $orderShop) { $productFamily = $this->getProductFamily(); $byWeight = false; if ($productFamily->getBehaviorCountStock() == ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_MEASURE) { $byWeight = true; } return $this->getAvailableQuantityInherited() - $orderShop->getQuantityOrderByProduct($this, $byWeight); } // getProductQuantity public function getProductQuantity() { $productFamily = $this->getProductFamily(); if ($productFamily->getBehaviorCountStock() == ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_MEASURE) { return $this->getQuantityInherited() / $this->getUnitInherited()->getCoefficient(); } else { return 1; } } public function getBuyingPriceInherited() { if ($this->getBuyingPrice()) { return $this->getBuyingPrice(); } else { return $this->getProductFamily()->getBuyingPrice(); } } public function getBuyingPriceByRefUnitInherited() { if ($this->getBuyingPriceByRefUnit()) { return $this->getBuyingPriceByRefUnit(); } else { return $this->getProductFamily()->getBuyingPriceByRefUnit(); } } public function getPriceInherited() { if ($this->getPrice()) { return $this->getPrice(); } else { return $this->getProductFamily()->getPrice(); } } public function getPriceByRefUnitInherited() { if ($this->getPriceByRefUnit()) { return $this->getPriceByRefUnit(); } else { return $this->getProductFamily()->getPriceByRefUnit(); } } public function getBehaviorPriceInherited() { return $this->getProductFamily()->getBehaviorPrice(); } public function getReductionCatalogInherited() { return $this->getProductFamily()->getReductionCatalog(); } public function getUnitInherited() { if ($this->getUnit()) { return $this->getUnit(); } else { return $this->getProductFamily()->getUnit(); } } public function getTitleInherited() { if ($this->getTitle()) { return $this->getTitle(); } else { return $this->getProductFamily()->getTitle(); } } public function getQuantityInherited() { if ($this->getQuantity()) { return $this->getQuantity(); } else { return $this->getProductFamily()->getQuantity(); } } public function getQuantityLabelInherited() { $quantity = $this->getQuantityInherited(); $unit = $this->getUnitInherited(); return $quantity . $unit->getWordingShort(); } public function getQuantityTitle($productFamily) { $title = $this->getQuantityLabelInherited(); if ($productFamily->hasProductsWithVariousWeight()) { $title .= ', ' . $this->getTitleInherited(); } return $title; } public function getAvailableQuantityInherited() { switch ($this->getProductFamily()->getBehaviorCountStock()) { case ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_PRODUCT_FAMILY : case ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_MEASURE : return $this->getProductFamily()->getAvailableQuantity(); break; case ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_PRODUCT : return $this->getAvailableQuantity(); break; case ProductFamilyModel::BEHAVIOR_COUNT_STOCK_UNLIMITED : return false; break; } } public function getTaxRateInherited() { return $this->getProductFamily()->getTaxRateInherited(); } public function getProductFamily(): ?ProductFamilyInterface { return $this->productFamily; } public function setProductFamily(?ProductFamilyInterface $productFamily): self { $this->productFamily = $productFamily; return $this; } public function getTitle(): ?string { return $this->title; } public function setTitle(?string $title): self { $this->title = $title; return $this; } public function getOriginProduct(): ?bool { return $this->originProduct; } public function setOriginProduct(?bool $originProduct): self { $this->originProduct = $originProduct; return $this; } }