src/Entity/Invoice.php line 41
<?phpnamespace App\Entity;use ApiPlatform\Metadata\ApiResource;use ApiPlatform\Metadata\GetCollection;use ApiPlatform\Metadata\Link;use App\Kimia;use App\Repository\InvoiceRepository;use App\Trait\CurrentStateTrait;use App\Trait\DateTrait;use App\Trait\ArrayableTrait;use DateTimeImmutable;use DateTimeInterface;use Doctrine\DBAL\Types\Types;use Doctrine\ORM\Mapping as ORM;use Symfony\Component\Serializer\Annotation\Groups;#[ORM\Entity(repositoryClass: InvoiceRepository::class)]#[ApiResource(operations: [new GetCollection(normalizationContext: ['groups' => ['invoice:list']]),new GetCollection(uriTemplate: "/orders/{orderId}/invoices",uriVariables: ['orderId' => new Link(toProperty: 'command', fromClass: Order::class),],normalizationContext: ['groups' => ['invoice:list']]),new GetCollection(uriTemplate: "/clients/{clientId}/invoices",uriVariables: ['clientId' => new Link(toProperty: 'client', fromClass: Client::class),],normalizationContext: ['groups' => ['invoice:list']]),])]class Invoice{use DateTrait;use CurrentStateTrait;use ArrayableTrait;#[ORM\Id]#[ORM\GeneratedValue]#[ORM\Column]#[Groups(['invoice:list', 'client:invoices'])]private ?int $id = null;#[ORM\Column(length: 255)]#[Groups(['invoice:list', 'client:invoices'])]private ?string $reference = null;#[ORM\Column]#[Groups(['invoice:list', 'client:invoices'])]private ?float $amount = null;#[ORM\Column(type: Types::DATETIME_MUTABLE, nullable: true)]#[Groups(['invoice:list', 'client:invoices'])]private ?DateTimeInterface $sentAt = null;#[ORM\Column(type: Types::DATETIME_MUTABLE, nullable: true)]#[Groups(['invoice:list', 'client:invoices'])]private ?DateTimeInterface $paidAt = null;#[ORM\ManyToOne(cascade: ['persist'], inversedBy: 'invoice')]#[ORM\JoinColumn(nullable: true)]private ?Order $command = null;#[ORM\ManyToOne]#[ORM\JoinColumn(nullable: false)]#[Groups(['invoice:list', 'client:invoices'])]private ?Currency $currency = null;#[ORM\ManyToOne]#[ORM\JoinColumn(nullable: true)]#[Groups(['invoice:list', 'client:invoices'])]private ?Rate $rate = null;#[ORM\Column(length: 255)]private ?string $establishment = null;#[ORM\Column(length: 255)]#[Groups(['invoice:list', 'client:invoices'])]private ?string $type = null;#[ORM\Column(type: Types::SMALLINT, options: ['default' => Kimia::FORMAT_A6])]private ?int $format = Kimia::FORMAT_A6;#[ORM\ManyToOne(inversedBy: 'invoices')]private ?Client $client = null;public function __construct(){$this->currentState = 'notCreated';if (is_null($this->reference)) $this->reference = strtoupper(uniqid('FA-', false));if (is_null($this->createdAt)) $this->createdAt = new DateTimeImmutable();$this->updatedAt = new DateTimeImmutable();}public function getId(): ?int{return $this->id;}public function getReference(): ?string{return $this->reference;}public function setReference(string $reference): self{$this->reference = $reference;return $this;}public function getAmount(): ?float{return $this->amount;}public function getAmountWithCurrency(): ?string{return "$this->amount{$this->getCurrency()->getSymbol()}";}public function setAmount(float $amount): self{$this->amount = $amount;return $this;}public function getSentAt(): ?DateTimeInterface{return $this->sentAt;}public function setSentAt(?DateTimeInterface $sentAt): self{$this->sentAt = $sentAt;return $this;}public function getPaidAt(): ?DateTimeInterface{return $this->paidAt;}public function setPaidAt(?DateTimeInterface $paidAt): self{$this->paidAt = $paidAt;return $this;}public function getCommand(): ?Order{return $this->command;}public function setCommand(?Order $command): self{$this->command = $command;return $this;}public function getCurrency(): ?Currency{return $this->currency;}public function setCurrency(?Currency $currency): self{$this->currency = $currency;return $this;}public function getRate(): ?Rate{return $this->rate;}public function setRate(?Rate $rate): self{$this->rate = $rate;return $this;}public function getEstablishment(): ?string{return $this->establishment;}public function setEstablishment(string $establishment): static{$this->establishment = $establishment;return $this;}public function getType(): ?string{return $this->type;}public static function getTypes(): array{return ['Simple' => Kimia::INVOICE_SIMPLE,'Proforma' => Kimia::INVOICE_PROFORMA,];}public static function getTypesListForView(): array{return [Kimia::INVOICE_SIMPLE => "<span class='badge badge-soft-secondary'>Simple</span>",Kimia::INVOICE_PROFORMA => "<span class='badge badge-soft-secondary'>Proforma</span>",];}public function getTypeForView(): string{return self::getTypesListForView()[$this->getType()];}public function setType(string $type): static{$this->type = $type;return $this;}public function getFormat(): ?int{return $this->format;}public static function getFormats(): array{return ['Format A6' => Kimia::FORMAT_A6,'Format A4' => Kimia::FORMAT_A4,];}public static function getFormatsListForView(): array{return [Kimia::FORMAT_A6 => "<span class='badge badge-soft-secondary'>A6</span>",Kimia::FORMAT_A4 => "<span class='badge badge-soft-secondary'>A4</span>",];}public function getFormatForView(): string{return self::getFormatsListForView()[$this->getFormat()];}public function setFormat(int $format): static{$this->format = $format;return $this;}public function __toString(): string{return $this->reference;}public function getClient(): ?Client{return $this->client;}public function setClient(?Client $client): static{$this->client = $client;return $this;}}