<?php
namespace App\AtechNet\CoreBundle\Entity;
use App\AtechNet\CoreBundle\Repository\ProductModelRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\JoinColumn;
use Doctrine\ORM\Mapping\JoinTable;
use Doctrine\ORM\Mapping\ManyToMany;
use Doctrine\ORM\Mapping\ManyToOne;
use Doctrine\ORM\Mapping\OneToMany;
use Doctrine\ORM\Mapping\OneToOne;
use Doctrine\ORM\Mapping\OrderBy;
use Doctrine\ORM\Mapping\Table as Table;
use Doctrine\ORM\Mapping\UniqueConstraint;
use Doctrine\ORM\PersistentCollection;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @Table(name="product_model", uniqueConstraints={
* @UniqueConstraint(name="model_unique",
* columns={"title", "vendor_id", "type_id", "is_product_v2"})
* })
* @Entity(repositoryClass=ProductModelRepository::class)
* @UniqueEntity(fields={"title", "vendor", "type", "isProductV2"}, message="A product model with this title, vendor and type already exists.")
*/
class ProductModel extends AbstractSignedEntity
{
/**
* @var string
*
* @Column(name="title", type="string", length=512)
*/
private string $title;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="Product", mappedBy="productModel")
*/
private $products;
/**
* @var ArrayCollection
*
* @ManyToMany(targetEntity="Product", inversedBy="connectedProductModels")
* @JoinTable(
* name="product_productmodel",
* joinColumns={
* @JoinColumn(name="productmodel_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @JoinColumn(name="product_id", referencedColumnName="id")
* })
* @OrderBy({"created" = "DESC"})
*/
private $connectedProducts;
/**
* @var PersistentCollection
*
* @OneToMany(targetEntity="ProductMarketplaceListing", mappedBy="productModel")
*/
private $productMarketplaceListings;
/**
* @var ArrayCollection
*
* @ManyToMany(targetEntity="ProductModel", inversedBy="parentProductModels")
* @JoinTable(
* name="product_models_alternative_models",
* joinColumns={
* @JoinColumn(name="parent_model_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @JoinColumn(name="alternative_model_id", referencedColumnName="id")
* })
* @OrderBy({"created" = "DESC"})
*/
private $alternativeProductModels;
/**
* @var ArrayCollection
*
* @ManyToMany(targetEntity="ProductModel", mappedBy="alternativeProductModels")
* @OrderBy({"created" = "DESC"})
*/
private $parentProductModels;
/**
* @var int
*
* @Column(name="calculated_qty_for_marketplaces", type="integer", nullable=false)
*/
private $calculatedQtyForMarketplaces = 0;
/**
* @var \DateTime
*
* @Column(name="calculated_qty_date", type="datetime", nullable=true)
*/
private $calculatedDate;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="MarketplaceJobProductModel", mappedBy="productModel")
*/
private $marketplaceJobProductModels;
/**
* @var bool
*
* @Column(name="paused_for_internal_job", type="boolean")
*/
private $pausedForInternalJob = false;
/**
* @var ProductModel|null
*
* @ManyToOne(targetEntity="ProductModel")
* @JoinColumn(name="priorized_alternative_model_id", referencedColumnName="id", nullable=true)
*/
private ?ProductModel $priorizedAlternativeModel;
/**
* @var ProductModel|null
*
* @ManyToOne(targetEntity="ProductModel")
* @JoinColumn(name="current_alternative_model_for_availability_calculation", referencedColumnName="id", nullable=true)
*/
private ?ProductModel $currentAlternativeModelForAvailabilityCalculation;
/**
* @var Album|null
*
* @OneToOne(targetEntity="Album", cascade={"persist", "remove"})
* @JoinColumn(name="photo_album_id", referencedColumnName="id")
*/
private ?Album $album = null;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="ProductModelMeta", mappedBy="productModel", cascade={"persist", "remove"}))
*/
private $productModelMetas;
/**
* note ide attribute option id-k vannak mentve, szivesen -> te flegma GenZ
* @Column(name="product_config_settings", type="array", nullable=true)
*/
private $fixedConfigSettings; //$productConfigSettings
/**
* note ide attribute option id-k vannak mentve, szivesen -> te flegma GenZ
* @Column(name="product_variation_settings", type="array", nullable=true)
*/
private $configurableConfigSettings; //$productVariationSettings
/**
* note ide azok az attribute option id-k kerulnek, amelyeket az import hozott letre/hasznalt fel,
* es amelyekre nincs teljes variacio-kombinacio lista legeneralva
* @Column(name="partial_variation_attribute_options", type="array", nullable=true)
*/
private $partialVariationAttributeOptions;
/**
* @var Vendor
*
* @ManyToOne(targetEntity="Vendor")
* @JoinColumn(name="vendor_id", referencedColumnName="id")
*/
private $vendor;
/**
* @var ProductType
*
* @Assert\NotNull
*
* @ManyToOne(targetEntity="ProductType")
* @JoinColumn(name="type_id", referencedColumnName="id")
*/
private $type;
/**
* @var bool
*
* @Column(name="is_product_v2", type="boolean")
*/
private $isProductV2 = false;
/**
* @var bool
*
* @Column(name="is_bestseller", type="boolean")
*/
private $isBestseller = false;
/**
* @var PersistentCollection
*
* @OneToMany(targetEntity="ModelMigrationSetting", mappedBy="productModel", orphanRemoval=true)
* @OrderBy({"created" = "DESC"})
**/
private $settings;
/**
* @var int|null
*
* @Column(name="base_parent_product_id", type="integer", nullable=true)
*/
private ?int $baseParentProductId = null;
/**
* @var ArrayCollection
*
* @ManyToMany(targetEntity="FixedAttributeOptionCombination", inversedBy="productModels", fetch="EXTRA_LAZY")
* @JoinTable(
* name="product_model_fixed_attribute_option_combinations",
* joinColumns={
* @JoinColumn(name="product_model_id", referencedColumnName="id", onDelete="CASCADE")
* },
* inverseJoinColumns={
* @JoinColumn(name="fixed_attribute_option_combination_id", referencedColumnName="id")
* })
* @OrderBy({"created" = "DESC"})
*/
private $fixedAttributeOptionCombinations;
/**
* @var ArrayCollection
*
* @ManyToMany(targetEntity="ConfigurableAttributeOptionCombination", inversedBy="productModels", fetch="EXTRA_LAZY")
* @JoinTable(
* name="product_model_configurable_attribute_option_combinations",
* joinColumns={
* @JoinColumn(name="product_model_id", referencedColumnName="id", onDelete="CASCADE")
* },
* inverseJoinColumns={
* @JoinColumn(name="configurable_attribute_option_combination_id", referencedColumnName="id")
* })
* @OrderBy({"created" = "DESC"})
*/
private $configurableAttributeOptionCombinations;
/**
* @var bool
*
* @Column(name="archived", type="boolean")
*/
private $archived = 0;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="ProductModelConfigFieldValue", mappedBy="productModel")
**/
private $productModelConfigFieldValues;
public function __construct()
{
parent::__construct();
$this->products = new ArrayCollection();
$this->alternativeProductModels = new ArrayCollection();
$this->productModelMetas = new ArrayCollection();
$this->settings = new ArrayCollection();
$this->fixedAttributeOptionCombinations = new ArrayCollection();
$this->configurableAttributeOptionCombinations = new ArrayCollection();
$this->connectedProducts = new ArrayCollection();
$this->productModelConfigFieldValues = new ArrayCollection();
}
public function getConnectedProducts()
{
return $this->connectedProducts;
}
/**
* @param ArrayCollection $connectedProducts
*/
public function setConnectedProducts($connectedProducts)
{
$this->connectedProducts = $connectedProducts;
}
/**
* @param Product $product
* @return bool
*/
public function addConnectedProduct(Product $product): bool
{
if (!$this->connectedProducts->contains($product)) {
$this->connectedProducts->add($product);
return true;
}
return false;
}
/**
* @param Product $product
*/
public function removeConnectedProduct(Product $product)
{
$this->connectedProducts->removeElement($product);
}
public function removeAllConnectedProducts()
{
$this->connectedProducts = new ArrayCollection();
}
/**
* @return string
*/
public function getTitle(): string
{
return $this->title;
}
/**
* @param string $title
*
* @return void
*/
public function setTitle(string $title): void
{
$this->title = $title;
}
/**
* @return ArrayCollection
*/
public function getProducts()
{
return $this->products;
}
/**
* @param ArrayCollection $products
*
* @return void
*/
public function setProducts(ArrayCollection $products): void
{
$this->products = $products;
}
/**
* @param Product $product
*
* @return void
*/
public function addProduct(Product $product): void
{
$this->products->add($product);
}
/**
* @param Product $product
*
* @return void
*/
public function removeProduct(Product $product): void
{
$this->products->remove($product);
}
/**
* @param null|int $marketplaceId
*/
public function getProductMarketplaceListings(?int $marketplaceId = null)
{
if (!is_null($marketplaceId)) {
return $this->productMarketplaceListings->filter(
function (ProductMarketplaceListing $pml) use ($marketplaceId) {
return $pml->getCustomer()->getId() == $marketplaceId && !$pml->isArchived();
}
);
}
return $this->productMarketplaceListings;
}
/**
* @param PersistentCollection $productMarketplaceListings
*
* @return void
*/
public function setProductMarketplaceListings(PersistentCollection $productMarketplaceListings): void
{
$this->productMarketplaceListings = $productMarketplaceListings;
}
public function getAvailable()
{
$available = 0;
foreach ($this->products as $product) {
$available += $product->getAvailable();
}
return $available;
}
public function getInStock()
{
$inStock = 0;
foreach ($this->products as $product) {
$inStock += $product->getInStock();
}
return $inStock;
}
/**
* @return ArrayCollection
*/
public function getParentProductModels()
{
return $this->parentProductModels;
}
/**
* @return ArrayCollection
*/
public function getAlternativeProductModels()
{
return $this->alternativeProductModels;
}
/**
* @param ArrayCollection $alternativeProductModels
*/
public function setAlternativeProductModels($alternativeProductModels)
{
$this->alternativeProductModels = $alternativeProductModels;
}
/**
* @param ProductModel $alternativeProductModel
*/
public function addAlternativeProductModel(ProductModel $alternativeProductModel)
{
if (!$this->alternativeProductModels->contains($alternativeProductModel)) {
$this->alternativeProductModels->add($alternativeProductModel);
}
}
/**
* @param ProductModel $alternativeProductModel
*/
public function removeAlternativeModel(ProductModel $alternativeProductModel)
{
$this->alternativeProductModels->removeElement($alternativeProductModel);
}
/**
* @return int
*/
public function getCalculatedQtyForMarketplaces(): int
{
return $this->calculatedQtyForMarketplaces;
}
/**
* @param int $calculatedQtyForMarketplace
*
* @return void
*/
public function setCalculatedQtyForMarketplace(int $calculatedQtyForMarketplaces): void
{
$this->calculatedQtyForMarketplaces = $calculatedQtyForMarketplaces;
}
/**
* @return null|\DateTime
*/
public function getCalculatedDate(): ?\DateTime
{
return $this->calculatedDate;
}
/**
* @param null|\DateTime $calculatedDate
*/
public function setCalculatedDate(?\DateTime $calculatedDate): void
{
$this->calculatedDate = $calculatedDate;
}
/**
* @return ArrayCollection
*/
public function getMarketplaceJobProductModels()
{
return $this->marketplaceJobProductModels;
}
/**
* @return bool
*/
public function isProductModelPaused()
{
return $this->pausedForInternalJob;
}
/**
* @return bool
*/
public function setPauseStatusForMarketplaceJobs(bool $pauseStatus)
{
return $this->pausedForInternalJob = $pauseStatus;
}
/**
* @return ProductModel|null
*/
public function getPriorizedAlternativeModel(): ?ProductModel
{
return $this->priorizedAlternativeModel;
}
/**
* @param ProductModel|null $priorizedProductModel
*
* @return void
*/
public function setPriorizedAlternativeModel(?ProductModel $priorizedProductModel): void
{
$this->priorizedAlternativeModel = $priorizedProductModel;
}
/**
* @return ProductModel|null
*/
public function getCurrentAlternativeModelForAvailabilityCalculation(): ?ProductModel
{
return $this->currentAlternativeModelForAvailabilityCalculation;
}
/**
* @param ProductModel|null $currentAlternativeModelForAvailabilityCalculation
*
* @return void
*/
public function setCurrentAlternativeModelForAvailabilityCalculation(?ProductModel $currentAlternativeModelForAvailabilityCalculation): void
{
$this->currentAlternativeModelForAvailabilityCalculation = $currentAlternativeModelForAvailabilityCalculation;
}
public function getAlbum(): ?Album
{
return $this->album;
}
public function setAlbum(?Album $album): void
{
$this->album = $album;
}
/**
* @return ArrayCollection
*/
public function getProductModelMetas()
{
return $this->productModelMetas;
}
/**
* @param string $languageCode
*
* @return ProductModelMeta|null
*/
public function getMetaByLanguage(string $languageCode): ?ProductModelMeta
{
$result = $this->productModelMetas->filter(function (ProductModelMeta $productModelMeta) use ($languageCode) {
return $productModelMeta->getLanguage()->getCode() == $languageCode;
})->first();
return !$result ? null : $result;
}
/**
* @return array|null
*/
public function getFixedConfigSettings(): ?array
{
return $this->fixedConfigSettings;
}
/**
* @param array|null $fixedConfigSettings
*/
public function setFixedConfigSettings(array $fixedConfigSettings = [])
{
$this->fixedConfigSettings = $fixedConfigSettings;
}
/**
* @return array|null
*/
public function getConfigurableConfigSettings(): ?array
{
return $this->configurableConfigSettings;
}
/**
* @param array|null $configurableVariationSettings
*/
public function setConfigurableConfigSettings(array $configurableVariationSettings = [])
{
$this->configurableConfigSettings = $configurableVariationSettings;
}
/**
* @return array
*/
public function getPartialVariationAttributeOptions(): array
{
return $this->partialVariationAttributeOptions ?? [];
}
/**
* @param array $partialVariationAttributeOptions
*/
public function setPartialVariationAttributeOptions(array $partialVariationAttributeOptions = []): void
{
$this->partialVariationAttributeOptions = $partialVariationAttributeOptions;
}
/**
* @return Vendor
*/
public function getVendor()
{
return $this->vendor;
}
/**
* @param Vendor $vendor
*/
public function setVendor($vendor)
{
$this->vendor = $vendor;
}
/**
* @return ProductType
*/
public function getType()
{
return $this->type;
}
/**
* @param ProductType $productType
*/
public function setType($productType)
{
$this->type = $productType;
}
/**
* @return bool
*/
public function isProductV2()
{
return $this->isProductV2;
}
/**
* @return bool
*/
public function setIsProductV2(bool $isProductV2)
{
return $this->isProductV2 = $isProductV2;
}
/**
* @return bool
*/
public function isBestseller()
{
return $this->isBestseller;
}
/**
* @param bool $isBestseller
*
* @return void
*/
public function setIsBestseller(bool $isBestseller)
{
return $this->isBestseller = $isBestseller;
}
/**
* @return PersistentCollection
*/
public function getSettings(): PersistentCollection
{
return $this->settings;
}
/**
* @param PersistentCollection $settings
*
* @return void
*/
public function setSettings(PersistentCollection $settings): void
{
$this->settings = $settings;
}
/**
* @return ModelMigrationSetting|null
*/
public function getArchivedModelSetting(): ?ModelMigrationSetting
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() == ModelMigrationSetting::TYPE_PRODUCT_MODEL_ARCHIVED) {
return $setting;
}
}
return null;
}
/**
* @return ModelMigrationSetting|null
*/
public function getOldModelSetting(): ?ModelMigrationSetting
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if (in_array($setting->getType(), [ModelMigrationSetting::TYPE_PRODUCT_MODEL_IDS, ModelMigrationSetting::TYPE_PRODUCT_IDS])) {
return $setting;
}
}
return null;
}
/**
* @return ModelMigrationSetting|null
*/
public function getSelectedProductModelMetaIdSetting(): ?ModelMigrationSetting
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() == ModelMigrationSetting::TYPE_SELECTED_PRODUCT_MODEL_META_ID) {
return $setting;
}
}
return null;
}
/**
* @return ModelMigrationSetting|null
*/
public function getProductMemorySetting(): ?ModelMigrationSetting
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() == ModelMigrationSetting::TYPE_PRODUCT_CARD_SELECTED_PRODUCT_MEMORY) {
return $setting;
}
}
return null;
}
/**
* @return ModelMigrationSetting|null
*/
public function getAiPairSuggestionsSetting(): ?ModelMigrationSetting
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() === ModelMigrationSetting::TYPE_AI_PAIR_SUGGESTIONS) {
return $setting;
}
}
return null;
}
/**
* @return ModelMigrationSetting|null
*/
public function getProductModelProductModelVariationSetting(): ?ModelMigrationSetting
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() == ModelMigrationSetting::TYPE_PRODUCT_MODEL_VARIATIONS_CREATED) {
return $setting;
}
}
return null;
}
/**
* @return ModelMigrationSetting|null
*/
public function getProductModelOpenTabSetting(): ?ModelMigrationSetting
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() == ModelMigrationSetting::TYPE_PRODUCT_MODEL_OPEN_TAB_IDS) {
return $setting;
}
}
return null;
}
/**
* @return ModelMigrationSetting|null
*/
public function getProductModelFinishedTabSetting(): ?ModelMigrationSetting
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() == ModelMigrationSetting::TYPE_PRODUCT_MODEL_FINISHED_TAB_IDS) {
return $setting;
}
}
return null;
}
/**
* @param string $tab
*
* @return bool
*/
public function isTabFinished(string $tab): bool
{
$setting = $this->getProductModelFinishedTabSetting();
foreach ($setting->getValue() as $finishedTab) {
if ($finishedTab == $tab) {
return true;
}
}
return false;
}
/**
* @return bool
*/
public function isProductModelVariationCreated(): bool
{
return !is_null($this->getProductModelProductModelVariationSetting());
}
/**
* @return ModelMigrationSetting|null
*/
public function getProductModelLockedSetting(): ?ModelMigrationSetting
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() == ModelMigrationSetting::TYPE_PRODUCT_MODEL_LOCKED) {
return $setting;
}
}
return null;
}
/**
* @return ModelMigrationSetting|null
*/
public function getProductModelAmazonPendingFeedSetting(): ?ModelMigrationSetting
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() == ModelMigrationSetting::TYPE_PRODUCT_MODEL_AMAZON_PENDING_FEED_IDS) {
return $setting;
}
}
return null;
}
/**
* @return bool
*/
public function isProductModelUnderAttributeUpdate(): bool
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() == ModelMigrationSetting::TYPE_PRODUCT_MODEL_IS_UNDER_ATTRIBUTE_UPDATE) {
return true;
}
}
return false;
}
/**
* @return bool
*/
public function isLocked(): bool
{
return !is_null($this->getProductModelLockedSetting());
}
public function isConfigChangesCreated(): bool
{
return !is_null($this->getProductModelConfigChangesCreatedSetting());
}
public function getProductModelConfigChangesCreatedSetting()
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() == ModelMigrationSetting::TYPE_CONFIG_CHANGES_CREATED) {
return $setting;
}
}
return null;
}
public function getProductModelArchivedCombinationIdsSetting(): ?ModelMigrationSetting
{
/** @var ModelMigrationSetting $setting */
foreach ($this->getSettings() as $setting) {
if ($setting->getType() == ModelMigrationSetting::TYPE_ARCHIVED_COMBINATION_IDS) {
return $setting;
}
}
return null;
}
public function getArchivedFixedAttributeOptionCombinations(): ?array
{
$setting = $this->getProductModelArchivedCombinationIdsSetting();
if (!$setting) {
return null;
}
$data = $setting->getValue();
return $data['fixedAttributeOptionCombinations'] ?? null;
}
public function setArchivedFixedAttributeOptionCombinations(int $fixedAttributeOptionCombinationId): ModelMigrationSetting
{
$setting = $this->getProductModelArchivedCombinationIdsSetting();
if ($setting) {
$existing = $setting->getValue()['fixedAttributeOptionCombinations'] ?? [];
$setting->setValue(array_merge($setting->getValue(), [
'fixedAttributeOptionCombinations' => array_merge($existing, [$fixedAttributeOptionCombinationId]),
]));
} else {
$newSetting = ModelMigrationSetting::createSetting(
$this,
ModelMigrationSetting::TYPE_ARCHIVED_COMBINATION_IDS,
[
'fixedAttributeOptionCombinations' => [$fixedAttributeOptionCombinationId],
]
);
$this->settings->add($newSetting);
$setting = $newSetting;
}
return $setting;
}
public function removeArchivedFixedAttributeOptionCombination(int $fixedAttributeOptionCombinationId): ?ModelMigrationSetting
{
$setting = $this->getProductModelArchivedCombinationIdsSetting();
if (!$setting) {
return null;
}
$existing = $setting->getValue()['fixedAttributeOptionCombinations'] ?? [];
$setting->setValue(array_merge($setting->getValue(), [
'fixedAttributeOptionCombinations' => array_values(array_filter($existing, fn ($id) => $id !== $fixedAttributeOptionCombinationId)),
]));
return $setting;
}
public function getArchivedConfigurableAttributeOptionCombinations(): ?array
{
$setting = $this->getProductModelArchivedCombinationIdsSetting();
if (!$setting) {
return null;
}
$data = $setting->getValue();
return $data['configurableAttributeOptionCombinations'] ?? null;
}
public function setArchivedConfigurableAttributeOptionCombinations(int $configurableAttributeOptionCombinationId): ModelMigrationSetting
{
$setting = $this->getProductModelArchivedCombinationIdsSetting();
if ($setting) {
$existing = $setting->getValue()['configurableAttributeOptionCombinations'] ?? [];
$setting->setValue(array_merge($setting->getValue(), [
'configurableAttributeOptionCombinations' => array_merge($existing, [$configurableAttributeOptionCombinationId]),
]));
} else {
$newSetting = ModelMigrationSetting::createSetting(
$this,
ModelMigrationSetting::TYPE_ARCHIVED_COMBINATION_IDS,
[
'configurableAttributeOptionCombinations' => [$configurableAttributeOptionCombinationId],
]
);
$this->settings->add($newSetting);
$setting = $newSetting;
}
return $setting;
}
public function removeArchivedConfigurableAttributeOptionCombination(int $configurableAttributeOptionCombinationId): ?ModelMigrationSetting
{
$setting = $this->getProductModelArchivedCombinationIdsSetting();
if (!$setting) {
return null;
}
$existing = $setting->getValue()['configurableAttributeOptionCombinations'] ?? [];
$setting->setValue(array_merge($setting->getValue(), [
'configurableAttributeOptionCombinations' => array_values(array_filter($existing, fn ($id) => $id !== $configurableAttributeOptionCombinationId)),
]));
return $setting;
}
/**
* @return int|null
*/
public function getBaseParentProductId(): ?int
{
return $this->baseParentProductId;
}
/**
* @param int|null $baseParentProductId
*
* @return void
*/
public function setBaseParentProductId(?int $baseParentProductId): void
{
$this->baseParentProductId = $baseParentProductId;
}
/**
* @return ArrayCollection
*/
public function getFixedAttributeOptionCombinations()
{
return $this->fixedAttributeOptionCombinations;
}
/**
* @param ArrayCollection $fixedAttributeOptionCombinations
*/
public function setFixedAttributeOptionCombinations($fixedAttributeOptionCombinations)
{
$this->fixedAttributeOptionCombinations = $fixedAttributeOptionCombinations;
}
/**
* @param FixedAttributeOptionCombination $fixedAttributeOptionCombination
*/
public function addFixedAttributeOptionCombination($fixedAttributeOptionCombination)
{
if (!$this->fixedAttributeOptionCombinations->contains($fixedAttributeOptionCombination)) {
$this->fixedAttributeOptionCombinations->add($fixedAttributeOptionCombination);
}
}
/**
* @param FixedAttributeOptionCombination $fixedAttributeOptionCombination
*/
public function removeFixedAttributeOptionCombination($fixedAttributeOptionCombination)
{
$this->fixedAttributeOptionCombinations->removeElement($fixedAttributeOptionCombination);
}
/**
* @return ArrayCollection
*/
public function getConfigurableAttributeOptionCombinations()
{
return $this->configurableAttributeOptionCombinations;
}
/**
* @param ArrayCollection $configurableAttributeOptionCombinations
*/
public function setConfigurableAttributeOptionCombinations($configurableAttributeOptionCombinations)
{
$this->configurableAttributeOptionCombinations = $configurableAttributeOptionCombinations;
}
/**
* @param ConfigurableAttributeOptionCombination $configurableAttributeOptionCombination
*/
public function addConfigurableAttributeOptionCombination($configurableAttributeOptionCombination)
{
if (!$this->configurableAttributeOptionCombinations->contains($configurableAttributeOptionCombination)) {
$this->configurableAttributeOptionCombinations->add($configurableAttributeOptionCombination);
}
}
/**
* @param ConfigurableAttributeOptionCombination $configurableAttributeOptionCombination
*/
public function removeConfigurableAttributeOptionCombination($configurableAttributeOptionCombination)
{
$this->configurableAttributeOptionCombinations->removeElement($configurableAttributeOptionCombination);
}
/**
* @return bool
*/
public function isArchived(): bool
{
return $this->archived;
}
/**
* @param bool $archived
* @return void
*/
public function setArchived(bool $archived): void
{
$this->archived = $archived;
}
public function getProductModelConfigFieldValues()
{
return $this->productModelConfigFieldValues;
}
public function setProductModelConfigFieldValues($productModelConfigFieldValues): void
{
$this->productModelConfigFieldValues = $productModelConfigFieldValues;
}
public function getProductModelConfigFieldValueByAttribute(int $attributeId): ?ProductModelConfigFieldValue
{
return $this->productModelConfigFieldValues->filter(function (ProductModelConfigFieldValue $productModelConfigFieldValue) use ($attributeId) {
return $productModelConfigFieldValue->getV2Attribute()->getId() == $attributeId;
})->first() ?: null;
}
}