<?php
namespace App\V4\Model\Quote;
use App\Model\Compare\DateCompare;
use App\Model\Compare\NumberCompare;
use App\Model\SpecificField\SpecificField;
use App\Model\SpecificFieldsAwareInterface;
use App\Model\Traits\BlamableTrait;
use App\Model\Traits\ImportableObjectTrait;
use App\Model\Traits\TimeStampableCompare;
use App\V4\Model\IdSearchTrait;
use App\V4\Model\QuoteSpecificField\QuoteSpecificField;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Serializer\Annotation\Groups;
class QuoteSearch implements SpecificFieldsAwareInterface
{
public const SPECIFIC_FIELD_CLASS_NAME = QuoteSpecificField::class;
use ImportableObjectTrait;
use BlamableTrait;
use TimeStampableCompare;
use IdSearchTrait;
/**
* Titre de l'offre.
*
* @var string|null
* @Groups({"quote:search"})
*/
private $name;
/**
* Numéro de devis.
*
* @var string|null
* @Groups({"quote:search"})
*/
private $quoteNumber;
/**
* Numéro de contrat.
*
* @var string|null
* @Groups({"quote:search"})
*/
private $contractNumber;
/**
* @var array|null
* @Groups({"quote:search"})
*/
private $status;
/**
* @var string|null
* @Groups({"quote:search"})
*/
private $salesForecast;
/**
* @var DateCompare|null
* @Groups({"quote:search"})
*/
private $issuedAt;
/**
* @var DateCompare|null
* @Groups({"quote:search"})
*/
private $warrantlyAt;
/**
* @var DateCompare|null
* @Groups({"quote:search"})
*/
private $expiredAt;
/**
* @var DateCompare|null
* @Groups({"quote:search"})
*/
private $expectedSignedAt;
/**
* @var array|null
* @Groups({"quote:search"})
*/
private $managedBy;
/**
* @var NumberCompare|null
* @Groups({"quote:search"})
*/
private $totalExcludingVat;
/**
* @var float|null
* @Groups({"quote:search"})
*/
private $potential;
/**
* Mes devis.
*
* @var bool|null
* @Groups({"quote:search"})
*/
private $myQuotes;
/**
* contrat de maintenance ?
*
* @var bool|null
* @Groups({"isMaintenance"})
*/
private $isMaintenance;
/**
* @Groups({"quote:search"})
*
* @var array|null
*/
private $prospectIds = [];
/**
* @var array
*
* @Groups({"quote:search"})
*/
private $productIds = [];
/**
* @Groups({"quote:search"})
*
* @var array|null
*/
private $contactIds = [];
/**
* @var array|null
* @Groups({"quote:search"})
*/
private $prospects;
/**
* Section de l'offre.
*
* @var string|null
* @Groups({"quote:search"})
*/
private $sectionName;
/**
* @var SpecificField[]|Collection
*
* @Groups({"prospect:search"})
*/
private $specificFields;
/**
* @var array|null
* @Groups({"quote:search"})
*/
private $reason;
/**
* Commentaire de la raison.
*
* @var string|null
* @Groups({"quote:search"})
*/
private $reasonComment;
/**
* @var string|null
*
* @Groups({"quote:search"})
*/
private $fileLabel;
public function __construct()
{
$this->specificFields = new ArrayCollection();
}
/**
* {@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 QuoteSpecificField $specificField
*
* @return $this
*/
public function addQuoteSpecificField(QuoteSpecificField $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 QuoteSearch
*/
public function setName(?string $name): QuoteSearch
{
$this->name = $name;
return $this;
}
/**
* @return bool|null
*/
public function getMyQuotes(): ?bool
{
return $this->myQuotes;
}
/**
* @param bool|null $myQuotes
*
* @return QuoteSearch
*/
public function setMyQuotes(?bool $myQuotes): QuoteSearch
{
$this->myQuotes = $myQuotes;
return $this;
}
/**
* @return string|null
*/
public function getQuoteNumber(): ?string
{
return $this->quoteNumber;
}
/**
* @param string|null $quoteNumber
*
* @return QuoteSearch
*/
public function setQuoteNumber(?string $quoteNumber): QuoteSearch
{
$this->quoteNumber = $quoteNumber;
return $this;
}
/**
* @return string|null
*/
public function getSalesForecast(): ?string
{
return $this->salesForecast;
}
/**
* @param string|null $salesForecast
*
* @return QuoteSearch
*/
public function setSalesForecast(?string $salesForecast): QuoteSearch
{
$this->salesForecast = $salesForecast;
return $this;
}
/**
* @return DateCompare|null
*/
public function getIssuedAt(): ?DateCompare
{
return $this->issuedAt;
}
/**
* @param DateCompare|null $issuedAt
*
* @return QuoteSearch
*/
public function setIssuedAt(?DateCompare $issuedAt): QuoteSearch
{
$this->issuedAt = $issuedAt;
return $this;
}
/**
* @return DateCompare|null
*/
public function getExpectedSignedAt(): ?DateCompare
{
return $this->expectedSignedAt;
}
/**
* @param DateCompare|null $expectedSignedAt
*
* @return QuoteSearch
*/
public function setExpectedSignedAt(?DateCompare $expectedSignedAt): QuoteSearch
{
$this->expectedSignedAt = $expectedSignedAt;
return $this;
}
/**
* @return NumberCompare|null
*/
public function getTotalExcludingVat(): ?NumberCompare
{
return $this->totalExcludingVat;
}
/**
* @param NumberCompare|null $totalExcludingVat
*
* @return QuoteSearch
*/
public function setTotalExcludingVat(?NumberCompare $totalExcludingVat): QuoteSearch
{
$this->totalExcludingVat = $totalExcludingVat;
return $this;
}
/**
* @return float|null
*/
public function getPotential(): ?float
{
return $this->potential;
}
/**
* @param float|null $potential
*
* @return QuoteSearch
*/
public function setPotential(?float $potential): QuoteSearch
{
$this->potential = $potential;
return $this;
}
/**
* @return array|null
*/
public function getProspectIds(): ?array
{
return $this->prospectIds;
}
/**
* @param array|null $prospectIds
*
* @return QuoteSearch
*/
public function setProspectIds(?array $prospectIds): QuoteSearch
{
$this->prospectIds = $prospectIds;
return $this;
}
/**
* @return array
*/
public function getProductIds(): array
{
return $this->productIds;
}
/**
* @param array $productIds
*
* @return self
*/
public function setProductIds(array $productIds): self
{
$this->productIds = $productIds;
return $this;
}
/**
* @return array|null
*/
public function getContactIds(): ?array
{
return $this->contactIds;
}
/**
* @param array|null $contactIds
*
* @return QuoteSearch
*/
public function setContactIds(?array $contactIds): QuoteSearch
{
$this->contactIds = $contactIds;
return $this;
}
/**
* @return DateCompare|null
*/
public function getWarrantlyAt(): ?DateCompare
{
return $this->warrantlyAt;
}
/**
* @param DateCompare|null $warrantlyAt
*
* @return QuoteSearch
*/
public function setWarrantlyAt(?DateCompare $warrantlyAt): QuoteSearch
{
$this->warrantlyAt = $warrantlyAt;
return $this;
}
/**
* @return DateCompare|null
*/
public function getExpiredAt(): ?DateCompare
{
return $this->expiredAt;
}
/**
* @param DateCompare|null $expiredAt
*
* @return QuoteSearch
*/
public function setExpiredAt(?DateCompare $expiredAt): QuoteSearch
{
$this->expiredAt = $expiredAt;
return $this;
}
/**
* @return bool|null
*/
public function getIsMaintenance(): ?bool
{
return $this->isMaintenance;
}
/**
* @param bool|null $isMaintenance
*
* @return QuoteSearch
*/
public function setIsMaintenance(?bool $isMaintenance): QuoteSearch
{
$this->isMaintenance = $isMaintenance;
return $this;
}
/**
* @return string|null
*/
public function getContractNumber(): ?string
{
return $this->contractNumber;
}
/**
* @param string|null $contractNumber
*
* @return QuoteSearch
*/
public function setContractNumber(?string $contractNumber): QuoteSearch
{
$this->contractNumber = $contractNumber;
return $this;
}
/**
* @return array|null
*/
public function getProspects(): ?array
{
return $this->prospects;
}
/**
* @param array|null $prospects
*
* @return QuoteSearch
*/
public function setProspects(?array $prospects): QuoteSearch
{
$this->prospects = $prospects;
return $this;
}
/**
* @return array|null
*/
public function getStatus(): ?array
{
return $this->status;
}
/**
* @param array|null $status
*
* @return QuoteSearch
*/
public function setStatus(?array $status): QuoteSearch
{
$this->status = $status;
return $this;
}
/**
* @return array|null
*/
public function getManagedBy(): ?array
{
return $this->managedBy;
}
/**
* @param array|null $managedBy
*
* @return QuoteSearch
*/
public function setManagedBy(?array $managedBy): QuoteSearch
{
$this->managedBy = $managedBy;
return $this;
}
/**
* @return string|null
*/
public function getSectionName(): ?string
{
return $this->sectionName;
}
/**
* @param string|null $sectionName
*
* @return QuoteSearch
*/
public function setSectionName(?string $sectionName): QuoteSearch
{
$this->sectionName = $sectionName;
return $this;
}
/**
* @return array|null
*/
public function getReason(): ?array
{
return $this->reason;
}
/**
* @param array|null $reason
*
* @return QuoteSearch
*/
public function setReason(?array $reason): QuoteSearch
{
$this->reason = $reason;
return $this;
}
/**
* @return string|null
*/
public function getReasonComment(): ?string
{
return $this->reasonComment;
}
/**
* @param string|null $reasonComment
*
* @return QuoteSearch
*/
public function setReasonComment(?string $reasonComment): QuoteSearch
{
$this->reasonComment = $reasonComment;
return $this;
}
public function getFileLabel(): ?string
{
return $this->fileLabel;
}
public function setFileLabel(?string $fileLabel): self
{
$this->fileLabel = $fileLabel;
return $this;
}
}