<?php
namespace App\Model\Product;
use App\Model\Compare\NumberCompare;
use App\Model\ProductSpecificField\ProductSpecificField;
use App\Model\SpecificField\SpecificField;
use App\Model\SpecificFieldsAwareInterface;
use App\Model\Traits\ImportableObjectTrait;
use App\Model\Traits\TimestampableTrait;
use App\V4\Model\IdSearchTrait;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Serializer\Annotation\Groups;
class ProductSearch implements SpecificFieldsAwareInterface
{
public const SPECIFIC_FIELD_CLASS_NAME = ProductSpecificField::class;
use TimestampableTrait;
use ImportableObjectTrait;
use IdSearchTrait;
/**
* @var array|null
*
* @Groups({"product:search"})
*/
private $vat;
/**
* @var array|null
*
* @Groups({"product:search"})
*/
private $unit;
/**
* @var array|null
*
* @Groups({"product:search"})
*/
private $categories;
/**
* @var array|null
*
* @Groups({"product:search"})
*/
private $warranty;
/**
* @var SpecificField[]|Collection
*
* @Groups({"product:search"})
*/
private $specificFields;
/**
* @var string|null
*
* @Groups({"product:search"})
*/
private $name;
/**
* @var string|null
*
* @Groups({"product:search"})
*/
private $shortDescription;
/**
* @var string|null
*
* @Groups({"product:search"})
*/
private $reference;
/**
* @var NumberCompare|null
*
* @Groups({"product:search"})
*/
private $priceExcludingVat;
/**
* @var NumberCompare|null
*
* @Groups({"product:search"})
*/
private $sellingPriceExcludingVat;
/**
* @var string|null
*
* @Groups({"product:search"})
*/
private $serialNumber;
/**
* @var bool|null
*
* @Groups({"search"})
*/
private $isComponent;
/**
* @var NumberCompare|null
*
* @Groups({"search"})
*/
private $stockQty;
/**
* @var string|null
*
* @Groups({"product:search"})
*/
private $fileLabel;
public function __construct()
{
$this->specificFields = new ArrayCollection();
}
/**
* @return array|null
*/
public function getVat(): ?array
{
return $this->vat;
}
/**
* @param array|null $vat
*
* @return ProductSearch
*/
public function setVat(?array $vat): ProductSearch
{
$this->vat = $vat;
return $this;
}
/**
* @return array|null
*/
public function getUnit(): ?array
{
return $this->unit;
}
/**
* @param array|null $unit
*
* @return ProductSearch
*/
public function setUnit(?array $unit): ProductSearch
{
$this->unit = $unit;
return $this;
}
/**
* @return array|null
*/
public function getCategories(): ?array
{
return $this->categories;
}
/**
* @param array|null $categories
*
* @return ProductSearch
*/
public function setCategories(?array $categories): ProductSearch
{
$this->categories = $categories;
return $this;
}
/**
* @return array|null
*/
public function getWarranty(): ?array
{
return $this->warranty;
}
/**
* @param array|null $warranty
*
* @return ProductSearch
*/
public function setWarranty(?array $warranty): ProductSearch
{
$this->warranty = $warranty;
return $this;
}
/**
* {@inheritdoc}
*/
public function getSpecificFields(): Collection
{
return $this->specificFields;
}
/**
* {@inheritdoc}
*/
public function getSpecificFieldByFieldId(string $id): ?SpecificField
{
foreach ($this->specificFields as $specificField) {
if ($specificField->getFieldId() === $id) {
return $specificField;
}
}
return null;
}
/**
* @see ImportableObjectTrait::class
*
* @param ProductSpecificField $specificField
*
* @return $this
*/
public function addProductSpecificField(ProductSpecificField $specificField): self
{
return $this->addSpecificField($specificField);
}
/**
* {@inheritdoc}
*/
public function addSpecificField($specificField): SpecificFieldsAwareInterface
{
$this->specificFields[] = $specificField;
return $this;
}
/**
* {@inheritdoc}
*/
public function setSpecificFields(Collection $specificFields): self
{
$this->specificFields = $specificFields;
return $this;
}
/**
* @return string|null
*/
public function getName(): ?string
{
return $this->name;
}
/**
* @param string|null $name
*
* @return ProductSearch
*/
public function setName(?string $name): ProductSearch
{
$this->name = $name;
return $this;
}
/**
* @return string|null
*/
public function getShortDescription(): ?string
{
return $this->shortDescription;
}
/**
* @param string|null $shortDescription
*
* @return ProductSearch
*/
public function setShortDescription(?string $shortDescription): ProductSearch
{
$this->shortDescription = $shortDescription;
return $this;
}
/**
* @return string|null
*/
public function getReference(): ?string
{
return $this->reference;
}
/**
* @param string|null $reference
*
* @return ProductSearch
*/
public function setReference(?string $reference): ProductSearch
{
$this->reference = $reference;
return $this;
}
/**
* @return NumberCompare|null
*/
public function getPriceExcludingVat(): ?NumberCompare
{
return $this->priceExcludingVat;
}
/**
* @param NumberCompare|null $priceExcludingVat
*
* @return ProductSearch
*/
public function setPriceExcludingVat(?NumberCompare $priceExcludingVat): ProductSearch
{
$this->priceExcludingVat = $priceExcludingVat;
return $this;
}
/**
* @return NumberCompare|null
*/
public function getSellingPriceExcludingVat(): ?NumberCompare
{
return $this->sellingPriceExcludingVat;
}
/**
* @param NumberCompare|null $sellingPriceExcludingVat
*
* @return ProductSearch
*/
public function setSellingPriceExcludingVat(?NumberCompare $sellingPriceExcludingVat): ProductSearch
{
$this->sellingPriceExcludingVat = $sellingPriceExcludingVat;
return $this;
}
/**
* @return string|null
*/
public function getSerialNumber(): ?string
{
return $this->serialNumber;
}
/**
* @param string|null $serialNumber
*
* @return ProductSearch
*/
public function setSerialNumber(?string $serialNumber): ProductSearch
{
$this->serialNumber = $serialNumber;
return $this;
}
/**
* @return bool|null
*/
public function getIsComponent(): ?bool
{
return $this->isComponent;
}
/**
* @param bool|null $isComponent
*
* @return ProductSearch
*/
public function setIsComponent(?bool $isComponent): ProductSearch
{
$this->isComponent = $isComponent;
return $this;
}
/**
* @return NumberCompare|null
*/
public function getStockQty(): ?NumberCompare
{
return $this->stockQty;
}
/**
* @param NumberCompare|null $stockQty
*
* @return ProductSearch
*/
public function setStockQty(?NumberCompare $stockQty): ProductSearch
{
$this->stockQty = $stockQty;
return $this;
}
public function getFileLabel(): ?string
{
return $this->fileLabel;
}
public function setFileLabel(?string $fileLabel): self
{
$this->fileLabel = $fileLabel;
return $this;
}
}