<?php
namespace App\Entity;
use App\Repository\ShippingRepository;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ShippingRepository::class)]
class Shipping
{
public const STATUS_SENT = 'enviado';
public const STATUS_NOT_SENT = 'no enviado';
public const STATUS_CANCELLED = 'cancelado';
public const STATUS_STORE_PICKUP = 'recogida en tienda';
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private ?int $id = null;
/**
* Fecha en la que se envió el pedido.
*/
#[ORM\Column(type: 'datetime', nullable: true)]
private ?\DateTimeInterface $shippedAt = null;
/**
* Transportista o compañía de envíos.
*/
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $carrier = null;
#[ORM\Column(type: 'string', length: 20)]
private ?string $status = null;
/**
* Relación bidireccional con Order. Se asume que cada Order tiene un Shipping.
*/
#[ORM\OneToOne(targetEntity: Order::class, inversedBy: 'shipping', cascade: ['persist', 'remove'])]
#[ORM\JoinColumn(nullable: false)]
private ?Order $order = null;
// Getters y setters
public function getId(): ?int
{
return $this->id;
}
public function getShippedAt(): ?\DateTimeInterface
{
return $this->shippedAt;
}
public function setShippedAt(?\DateTimeInterface $shippedAt): self
{
$this->shippedAt = $shippedAt;
return $this;
}
public function getCarrier(): ?string
{
return $this->carrier;
}
public function setCarrier(?string $carrier): self
{
$this->carrier = $carrier;
return $this;
}
public function getStatus(): ?string
{
return $this->status;
}
public function setStatus(string $status): self
{
$allowed = [
self::STATUS_SENT,
self::STATUS_NOT_SENT,
self::STATUS_CANCELLED,
self::STATUS_STORE_PICKUP,
];
if (!in_array($status, $allowed, true)) {
throw new \InvalidArgumentException("Estado de envío no válido.");
}
$this->status = $status;
return $this;
}
public function getOrder(): ?Order
{
return $this->order;
}
public function setOrder(Order $order): self
{
$this->order = $order;
return $this;
}
}