<?php
declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiFilter;
use Symfony\Component\Serializer\Annotation\Groups;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Core\Annotation\ApiResource;
use App\Entity\Reference\ReferenceFinancingMode;
use App\Entity\Reference\ReferenceTransactionFeesPayment;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use App\Entity\Reference\ReferenceTransactionPaymentMethod;
use App\Entity\Reference\ReferenceTransactionStatus;
use App\Repository\AbstractTransactionRepository;
use App\Traits\TimeStampTrait;
use App\Domain\MarginCheckList\Adapters\Gateway\Doctrine\MarginCheckListEntity;
use DateTimeInterface;
/**
* @ApiResource(
* normalizationContext={"groups"={"transaction:collection:read","transaction-item:read"}},
* denormalizationContext={"groups"={"transaction:write"},"skip_null_values" = true}
* )
*
* @ORM\Entity(repositoryClass=AbstractTransactionRepository::class)
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string", length=12)
* @ORM\DiscriminatorMap({
* "RE"="Transaction",
* "BI"="BusinessIndication"
* })
*
* @ORM\HasLifecycleCallbacks()
* @ORM\EntityListeners({"App\EventListener\TransactionStatusListener"})
*
* @ApiFilter(SearchFilter::class, properties={
* "contact.id": "exact"
* })
*/
class AbstractTransaction
{
use TimeStampTrait;
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*
* @Groups({
* "transaction-item:read","transaction:collection:read",
* "business-indication:item:read","business-indication:collection:read",
* "property-visit:read"
* })
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity=Mandate::class, cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
*
* @Groups({
* "transaction-item:read","transaction:collection:read","transaction:write",
* "business-indication:item:read","business-indication:collection:read","business-indication:write",
* "property-visit:read"
* })
*/
protected ?Mandate $mandate;
/**
* @ORM\Column(type="float", nullable=true)
*
* @Groups({
* "transaction-item:read","transaction:collection:read","transaction:write","transaction:put",
* "business-indication:item:read","business-indication:collection:read","business-indication:write"
* })
*/
protected ?float $buyerCommission = 0;
/**
* @deprecated
* @ORM\Column(type="float", nullable=true)
*
* @Groups({"transaction-item:read","transaction:collection:read"})
*/
protected ?float $total = 0;
/**
* @ORM\ManyToOne(targetEntity=ReferenceTransactionStatus::class)
* @ORM\JoinColumn(nullable=false)
*
* @Groups({
* "transaction-item:read","transaction:collection:read",
* "business-indication:item:read","business-indication:collection:read",
* "siege:write","siege:put"
* })
*/
protected ?ReferenceTransactionStatus $referenceTransactionStatus;
/**
* @ORM\ManyToOne(targetEntity=ReferenceTransactionFeesPayment::class)
* @Groups({
* "transaction-item:read","transaction:write","transaction:put",
* "business-indication:item:read","business-indication:collection:read","business-indication:write"
* })
*/
protected ?ReferenceTransactionFeesPayment $referenceCommissionPaidBy;
/**
* @ORM\ManyToOne(targetEntity=Agent::class)
* @ORM\JoinColumn(nullable=false)
* @Groups({
* "transaction-item:read","transaction:collection:read",
* "business-indication:collection:read","business-indication:item:read",
* "siege:put"
* })
*/
protected ?Agent $inputAgent;
/**
* @ORM\ManyToOne(targetEntity=Agent::class)
* @ORM\JoinColumn(nullable=true)
* @Groups({
* "transaction-item:read","transaction:collection:read",
* "siege:write","siege:put",
* "business-indication:collection:read","business-indication:item:read"
* })
*/
protected ?Agent $outputAgent;
/**
* @ORM\ManyToOne(targetEntity=Vat::class)
* @Groups({
* "transaction-item:read","transaction:write","transaction:put",
* "business-indication:item:read","business-indication:write"
* })
*/
protected ?Vat $vat;
/**
* @ORM\Column(type="float")
* @Groups({
* "transaction-item:read","transaction:collection:read","transaction:put",
* "business-indication:collection:read","business-indication:item:read","business-indication:write",
* "transaction:write","siege:put"
* })
*/
protected ?float $sellPriceWithTax = 0;
/**
* @ORM\Column(type="float", nullable=true)
* @Groups({
* "transaction:collection:read","transaction-item:read","transaction:write","transaction:put",
* "business-indication:collection:read","business-indication:item:read","business-indication:write"
* })
*/
protected ?float $feesWithTax = 0;
/**
* @ORM\Column(type="float", nullable=true)
* @Groups({
* "transaction-item:read","transaction:write",
* "business-indication:item:read","business-indication:write"
* })
*/
protected ?float $feesWithoutTax = 0;
/**
* @ORM\Column(type="date")
* @Groups({"transaction-item:read","business-indication:item:read"})
*/
protected ?DateTimeInterface $underCompriseAt;
/**
* @ORM\Column(type="date", nullable=true)
* @Groups({"transaction-item:read","business-indication:item:read"})
*/
protected ?DateTimeInterface $valideAt;
/**
* @ORM\Column(type="date", nullable=true)
* @Groups({"transaction-item:read","business-indication:item:read"})
*/
protected ?DateTimeInterface $recordedAt;
/**
* @ORM\Column(type="date", nullable=true)
*/
protected ?DateTimeInterface $paidAt;
/**
* @ORM\Column(type="date", nullable=true)
*/
protected ?DateTimeInterface $canceledAt;
/**
* @ORM\Column(type="date", nullable=true)
* @Groups({
* "transaction-item:read","transaction:write","transaction:put",
* "business-indication:item:read","business-indication:write"
* })
*/
protected ?DateTimeInterface $expectedDateOfCompromise;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({
* "transaction-item:read","transaction:write","transaction:put",
* "business-indication:item:read","business-indication:write"
* })
*/
protected ?string $invoiceNumber;
/**
* @ORM\Column(type="date", nullable=true)
* @Groups({
* "transaction-item:read","transaction:write","transaction:put",
* "business-indication:item:read","business-indication:write"
* })
*/
protected ?DateTimeInterface $invoiceDate;
/**
* @ORM\Column(type="float")
* @Groups({
* "transaction-item:read","transaction:write",
* "business-indication:item:read","business-indication:write"
* })
*/
protected ?float $propertyValue = 0;
/**
* @var ArrayCollection
*
* @ORM\OneToOne(
* targetEntity=MarginCheckListEntity::class,
* mappedBy="transaction",
* cascade={"persist", "remove"},
* orphanRemoval=true
* )
* @Groups({
* "transaction-item:read", "transaction:collection:read"
* })
*/
protected $marginCheckLists;
/**
* @ORM\ManyToOne(targetEntity=Contact::class, inversedBy="transactions")
* @Groups({
* "transaction-item:read","transaction:write","transaction:put",
* "business-indication:item:read","business-indication:write"
* })
*/
protected ?Contact $contact;
/**
* @ORM\ManyToOne(targetEntity=ReferenceFinancingMode::class, inversedBy="transactions")
* @Groups({
* "transaction-item:read","transaction:write","transaction:put",
* "business-indication:item:read","business-indication:write"
* })
*/
protected ?ReferenceFinancingMode $referenceFinancingMode;
/**
* @ORM\ManyToOne(targetEntity=ReferenceTransactionPaymentMethod::class)
* @ORM\JoinColumn(nullable=true)
*
* @Groups({
* "transaction-item:read","transaction:write","transaction:put",
* "business-indication:item:read","business-indication:write"
* })
*/
protected ?ReferenceTransactionPaymentMethod $referencePaymentMethod;
/**
* @ORM\Column(type="float", nullable=true)
* @Groups({
* "transaction-item:read","transaction:write","transaction:put",
* "business-indication:item:read","business-indication:write"
* })
*/
protected ?float $advance;
/**
* @ORM\Column(type="float", nullable=true)
* @Groups({
* "transaction-item:read","transaction:write","transaction:put",
* "business-indication:item:read","business-indication:write"
* })
*/
protected ?float $apport;
public function getMarginCheckLists()
{
return $this->marginCheckLists;
}
public function setMarginCheckLists($marginCheckLists): self
{
$this->marginCheckLists = $marginCheckLists;
return $this;
}
public function getId(): ?int
{
return $this->id;
}
public function getMandate(): ?Mandate
{
return $this->mandate;
}
public function setMandate(Mandate $mandate): self
{
$this->mandate = $mandate;
return $this;
}
public function getBuyerCommission(): ?float
{
return $this->buyerCommission;
}
public function setBuyerCommission(?float $buyerCommission): self
{
$this->buyerCommission = $buyerCommission;
return $this;
}
public function getTotal(): ?float
{
return $this->total;
}
public function setTotal(?float $total): self
{
$this->total = $total;
return $this;
}
public function getReferenceTransactionStatus(): ?ReferenceTransactionStatus
{
return $this->referenceTransactionStatus;
}
public function setReferenceTransactionStatus(?ReferenceTransactionStatus $referenceTransactionStatus): self
{
$this->referenceTransactionStatus = $referenceTransactionStatus;
return $this;
}
public function getReferenceCommissionPaidBy(): ?ReferenceTransactionFeesPayment
{
return $this->referenceCommissionPaidBy;
}
public function setReferenceCommissionPaidBy(?ReferenceTransactionFeesPayment $referenceCommissionPaidBy): self
{
$this->referenceCommissionPaidBy = $referenceCommissionPaidBy;
return $this;
}
public function getInputAgent(): ?Agent
{
return $this->inputAgent;
}
public function setInputAgent(?Agent $inputAgent): self
{
$this->inputAgent = $inputAgent;
return $this;
}
public function getOutputAgent(): ?Agent
{
return $this->outputAgent;
}
public function setOutputAgent(?Agent $outputAgent): self
{
$this->outputAgent = $outputAgent;
return $this;
}
public function getVat(): ?Vat
{
return $this->vat;
}
public function setVat(?Vat $vat): self
{
$this->vat = $vat;
return $this;
}
public function getSellPriceWithTax(): ?float
{
return $this->sellPriceWithTax;
}
public function setSellPriceWithTax(float $sellPriceWithTax): self
{
$this->sellPriceWithTax = $sellPriceWithTax;
return $this;
}
public function getFeesWithTax(): ?float
{
return $this->feesWithTax;
}
public function setFeesWithTax(?float $feesWithTax): self
{
$this->feesWithTax = $feesWithTax;
return $this;
}
public function getFeesWithoutTax(): ?float
{
return $this->feesWithoutTax;
}
public function setFeesWithoutTax(?float $feesWithoutTax): self
{
$this->feesWithoutTax = $feesWithoutTax;
return $this;
}
public function getUnderCompriseAt(): ?DateTimeInterface
{
return $this->underCompriseAt;
}
public function setUnderCompriseAt(DateTimeInterface $underCompriseAt): self
{
$this->underCompriseAt = $underCompriseAt;
return $this;
}
public function getValideAt(): ?DateTimeInterface
{
return $this->valideAt;
}
public function setValideAt(?DateTimeInterface $valideAt): self
{
$this->valideAt = $valideAt;
return $this;
}
public function getRecordedAt(): ?DateTimeInterface
{
return $this->recordedAt;
}
public function setRecordedAt(?DateTimeInterface $recordedAt): self
{
$this->recordedAt = $recordedAt;
return $this;
}
public function getPaidAt(): ?DateTimeInterface
{
return $this->paidAt;
}
public function setPaidAt(?DateTimeInterface $paidAt): self
{
$this->paidAt = $paidAt;
return $this;
}
public function getCanceledAt(): ?DateTimeInterface
{
return $this->canceledAt;
}
public function setCanceledAt(?DateTimeInterface $canceledAt): self
{
$this->canceledAt = $canceledAt;
return $this;
}
public function getExpectedDateOfCompromise(): ?DateTimeInterface
{
return $this->expectedDateOfCompromise;
}
public function setExpectedDateOfCompromise(?DateTimeInterface $expectedDateOfCompromise): self
{
$this->expectedDateOfCompromise = $expectedDateOfCompromise;
return $this;
}
public function getInvoiceNumber(): ?string
{
return $this->invoiceNumber;
}
public function setInvoiceNumber(?string $invoiceNumber): self
{
$this->invoiceNumber = $invoiceNumber;
return $this;
}
public function getInvoiceDate(): ?DateTimeInterface
{
return $this->invoiceDate;
}
public function setInvoiceDate(?DateTimeInterface $invoiceDate): self
{
$this->invoiceDate = $invoiceDate;
return $this;
}
public function getPropertyValue(): ?float
{
return $this->propertyValue;
}
public function setPropertyValue(float $propertyValue): self
{
$this->propertyValue = $propertyValue;
return $this;
}
public function getReferencePaymentMethod(): ?ReferenceTransactionPaymentMethod
{
return $this->referencePaymentMethod;
}
public function setReferencePaymentMethod(?ReferenceTransactionPaymentMethod $referencePaymentMethod): self
{
$this->referencePaymentMethod = $referencePaymentMethod;
return $this;
}
public function getContact(): ?Contact
{
return $this->contact;
}
public function setContact(?Contact $contact): self
{
$this->contact = $contact;
return $this;
}
public function getReferenceFinancingMode(): ?ReferenceFinancingMode
{
return $this->referenceFinancingMode;
}
public function setReferenceFinancingMode(?ReferenceFinancingMode $referenceFinancingMode): self
{
$this->referenceFinancingMode = $referenceFinancingMode;
return $this;
}
public function getAdvance(): ?float
{
return $this->advance;
}
public function setAdvance(?float $advance): self
{
$this->advance = $advance;
return $this;
}
public function getApport(): ?float
{
return $this->apport;
}
public function setApport(?float $apport): self
{
$this->apport = $apport;
return $this;
}
}