<?php
declare(strict_types=1);
namespace App\Order\Doctrine\Entity;
use App\Shop\Doctrine\Entity\Product;
use App\Supplier\Doctrine\Entity\Supplier;
use DateTimeImmutable;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\GeneratedValue;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\JoinColumn;
use Doctrine\ORM\Mapping\ManyToOne;
use Doctrine\ORM\Mapping\Table;
#[Entity]
#[Table(name: 'order_detail')]
class Detail
{
#[Id]
#[Column(type: 'integer')]
#[GeneratedValue]
private ?int $id = null;
private bool $used = true;
#[ManyToOne(targetEntity: Order::class, inversedBy: 'details')]
#[JoinColumn(nullable: false, onDelete: 'CASCADE')]
private Order $order;
#[ManyToOne(targetEntity: Line::class)]
#[JoinColumn(nullable: false, onDelete: 'CASCADE')]
private Line $line;
#[ManyToOne(targetEntity: Product::class)]
#[JoinColumn(nullable: false)]
private Product $product;
#[ManyToOne(targetEntity: Bill::class, inversedBy: 'details')]
#[JoinColumn(onDelete: 'SET NULL')]
private ?Bill $bill = null;
#[Column]
private string $state = 'in_progress';
#[Column(type: 'datetime_immutable')]
private DateTimeImmutable $updatedAt;
/**
* @var array<array-key, array{state: string, date: string}>
*/
#[Column(type: 'array')]
private array $history = [];
#[ManyToOne(targetEntity: Carrier::class)]
private ?Carrier $carrier = null;
#[Column(nullable: true)]
private ?string $tracking = null;
#[ManyToOne(targetEntity: Supplier::class, cascade: ['persist'])]
private ?Supplier $supplier = null;
#[Column(nullable: true)]
private ?string $reference = null;
#[Column(nullable: true, name: '`reference_comm`')]
private ?string $referenceComm = null;
#[Column(nullable: true)]
private ?int $price = null;
#[Column(type: 'date_immutable', nullable: true)]
private ?DateTimeImmutable $date = null;
#[Column(nullable: true)]
private ?string $numberOrder = null;
public function __construct()
{
$this->updatedAt = new DateTimeImmutable();
$this->addStateHistory('in_progress');
}
public function getId(): ?int
{
return $this->id;
}
public function getOrder(): Order
{
return $this->order;
}
public function setOrder(Order $order): void
{
$this->order = $order;
}
public function getProduct(): Product
{
return $this->product;
}
public function setProduct(Product $product): void
{
$this->product = $product;
}
public function getState(): string
{
return $this->state;
}
public function setState(string $state): void
{
$this->state = $state;
}
public function getUpdatedAt(): DateTimeImmutable
{
return $this->updatedAt;
}
public function setUpdatedAt(DateTimeImmutable $updatedAt): void
{
$this->updatedAt = $updatedAt;
}
/**
* @return array<array-key, array{state: string, date: string}>
*/
public function getHistory(): array
{
return $this->history;
}
public function addStateHistory(string $state): void
{
$this->history[] = ['date' => date('Y-m-d H:i:s'), 'state' => $state];
}
public function getCarrier(): ?Carrier
{
return $this->carrier;
}
public function setCarrier(?Carrier $carrier): void
{
$this->carrier = $carrier;
}
public function getTracking(): ?string
{
return $this->tracking;
}
public function setTracking(?string $tracking): void
{
$this->tracking = $tracking;
}
public function getBill(): ?Bill
{
return $this->bill;
}
public function setBill(?Bill $bill): void
{
$this->bill = $bill;
}
public function getLine(): Line
{
return $this->line;
}
public function setLine(Line $line): void
{
$this->line = $line;
}
public function getSupplier(): ?Supplier
{
return $this->supplier;
}
public function setSupplier(?Supplier $supplier): void
{
$this->supplier = $supplier;
}
public function getReference(): ?string
{
return $this->reference;
}
public function setReference(?string $reference): void
{
$this->reference = $reference;
}
public function getPrice(): ?int
{
return $this->price;
}
public function setPrice(?int $price): void
{
$this->price = $price;
}
public function getDate(): ?DateTimeImmutable
{
return $this->date;
}
public function setDate(?DateTimeImmutable $date): void
{
$this->date = $date;
}
public function isUsed(): bool
{
return $this->used;
}
public function setUsed(bool $used): void
{
$this->used = $used;
}
public function getNumberOrder(): ?string
{
return $this->numberOrder;
}
public function setNumberOrder(?string $numberOrder): void
{
$this->numberOrder = $numberOrder;
}
public function getReferenceComm(): ?string
{
return $this->referenceComm;
}
public function setReferenceComm(?string $referenceComm): void
{
$this->referenceComm = $referenceComm;
}
}