src/Entity/Finance/Expense.php line 28
<?php
namespace App\Entity\Finance;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
#[ORM\Entity]
#[ApiResource(routePrefix: '/finance')]
#[ApiResource(
uriTemplate: '/finance/quotations/{identifier}/expenses',
operations: [new GetCollection()],
uriVariables: [
'identifier' => new Link(fromProperty: 'expenses', fromClass: Quotation::class),
],
)]
#[ApiResource(
uriTemplate: '/finance/bills/{identifier}/expenses',
operations: [new GetCollection()],
uriVariables: [
'identifier' => new Link(fromProperty: 'expenses', fromClass: Bill::class),
],
)]
class Expense extends Chargeable
{
#[Assert\NotNull]
#[Assert\Type(type: BaseQuotation::class)]
#[ORM\ManyToOne(targetEntity: BaseQuotation::class, inversedBy: 'expenses')]
#[ORM\JoinColumn(name: 'bill_id')]
private ?BaseQuotation $form = null;
#[Assert\Callback]
public function validate(ExecutionContextInterface $context, $payload): void
{
if (empty($this->form)) {
$context->buildViolation('An expense must be associated only with either, a quotation, or a bill')
->atPath('form')
->addViolation();
}
}
public function getForm(): ?BaseQuotation
{
return $this->form;
}
public function setForm(?BaseQuotation $form): self
{
$this->form = $form;
return $this;
}
}