<?php
namespace App\Entity\System;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Invoice
*
* @ORM\Table(name="invoice")
*
* @ORM\Entity(repositoryClass="App\Repository\System\InvoiceRepository")
*/
class Invoice
{
public const TYPE_PDF = 1;
public const TYPE_ELECTRONIC = 2;
public const TYPE_EDI = 3;
public const A4B_INVOICE_MIME_TYPE_PDF = 'pdf';
public const A4B_INVOICE_MIME_TYPE_ELECTRONIC = 'xml';
public const A4B_INVOICE_MIME_TYPE_EDI = 'txt';
public const INVOICE_FILE_TYPES_INDEXED_BY_A4B_MIME_TYPE = [
self::A4B_INVOICE_MIME_TYPE_PDF => self::TYPE_PDF,
self::A4B_INVOICE_MIME_TYPE_ELECTRONIC => self::TYPE_ELECTRONIC,
self::A4B_INVOICE_MIME_TYPE_EDI => self::TYPE_EDI,
];
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
*
* @ORM\Id
*
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Customer
*
* @ORM\ManyToOne(targetEntity="Customer")
*
* @ORM\JoinColumn(name="customer_id", referencedColumnName="id_customer")
*/
private $customer;
/**
* @var Order[]|ArrayCollection
*
* @ORM\ManyToMany(targetEntity="App\Entity\System\Order", indexBy="id", inversedBy="invoice")
*
* @ORM\JoinTable(name="order_invoice",
* joinColumns={@ORM\JoinColumn(name="invoice_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="order_id", referencedColumnName="id_order")}
* )
*/
private $orders;
/**
* @var string
*
* @ORM\Column(name="reference", type="string", length=100)
*/
private $reference;
/**
* @var float
*
* @ORM\Column(name="total", type="float")
*/
private $total;
/**
* @var \DateTime
*
* @ORM\Column(name="date_add", type="datetime")
*/
private $dateAdd;
/**
* @var \DateTime|null
*
* @ORM\Column(name="date_upd", type="datetime", nullable=true)
*/
private $dateUpd;
/**
* @var string
*
* @ORM\Column(name="download_link", type="text", length=100)
*/
private $downloadLink;
/**
* @var int
*
* @ORM\Column(name="type", type="integer", options={"default":"1"})
*/
private int $type;
public function __construct()
{
$this->orders = new ArrayCollection();
}
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @param int $id
*
* @return Invoice
*/
public function setId(int $id): self
{
$this->id = $id;
return $this;
}
/**
* @return Customer
*/
public function getCustomer(): Customer
{
return $this->customer;
}
/**
* @param Customer $customer
*
* @return Invoice
*/
public function setCustomer(Customer $customer): self
{
$this->customer = $customer;
return $this;
}
/**
* @return Order[]|ArrayCollection
*/
public function getOrders()
{
return $this->orders;
}
/**
* @param Order[]|ArrayCollection $orders
*/
public function setOrders($orders): self
{
$this->orders = $orders;
return $this;
}
/**
* @return float
*/
public function getTotal(): float
{
return $this->total;
}
/**
* @param float $total
*
* @return Invoice
*/
public function setTotal(float $total): self
{
$this->total = $total;
return $this;
}
/**
* @return \DateTime
*/
public function getDateAdd()
{
return $this->dateAdd;
}
/**
* @param \DateTime $dateAdd
*
* @return Invoice
*/
public function setDateAdd(\DateTime $dateAdd): self
{
$this->dateAdd = $dateAdd;
return $this;
}
public function getDateUpd(): ?\DateTime
{
return $this->dateUpd;
}
/**
* @param \DateTime $dateUpd
*
* @return Invoice
*/
public function setDateUpd(\DateTime $dateUpd): self
{
$this->dateUpd = $dateUpd;
return $this;
}
/**
* @return string
*/
public function getReference(): string
{
return $this->reference;
}
/**
* @param string $reference
*
* @return Invoice
*/
public function setReference(string $reference): self
{
$this->reference = $reference;
return $this;
}
/**
* @return string
*/
public function getDownloadLink(): string
{
return $this->downloadLink;
}
/**
* @param string $downloadLink
*
* @return Invoice
*/
public function setDownloadLink(string $downloadLink): self
{
$this->downloadLink = $downloadLink;
return $this;
}
public function getType(): int
{
return $this->type;
}
public function setType(int $type): Invoice
{
$this->type = $type;
return $this;
}
public static function getInvoiceType(int $type): string
{
$types = \array_flip(self::INVOICE_FILE_TYPES_INDEXED_BY_A4B_MIME_TYPE);
return $types[$type];
}
}