2026-01-16 13:44:08 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Entity;
|
|
|
|
|
|
|
|
|
|
use App\Repository\ProductRepository;
|
2026-01-20 14:31:12 +01:00
|
|
|
use Cocur\Slugify\Slugify;
|
2026-01-19 17:56:57 +01:00
|
|
|
use Doctrine\Common\Collections\ArrayCollection;
|
|
|
|
|
use Doctrine\Common\Collections\Collection;
|
2026-01-16 13:44:08 +01:00
|
|
|
use Doctrine\ORM\Mapping as ORM;
|
2026-01-16 13:52:22 +01:00
|
|
|
use Symfony\Component\HttpFoundation\File\File;
|
2026-01-16 15:04:50 +01:00
|
|
|
use Vich\UploaderBundle\Mapping\Attribute\Uploadable;
|
|
|
|
|
use Vich\UploaderBundle\Mapping\Attribute\UploadableField;
|
2026-01-16 13:44:08 +01:00
|
|
|
|
|
|
|
|
#[ORM\Entity(repositoryClass: ProductRepository::class)]
|
2026-01-16 15:04:50 +01:00
|
|
|
#[Uploadable]
|
2026-01-16 13:44:08 +01:00
|
|
|
class Product
|
|
|
|
|
{
|
|
|
|
|
#[ORM\Id]
|
|
|
|
|
#[ORM\GeneratedValue]
|
|
|
|
|
#[ORM\Column]
|
|
|
|
|
private ?int $id = null;
|
|
|
|
|
|
|
|
|
|
#[ORM\Column(length: 255)]
|
|
|
|
|
private ?string $ref = null;
|
|
|
|
|
|
|
|
|
|
#[ORM\Column(length: 255)]
|
|
|
|
|
private ?string $category = null;
|
|
|
|
|
|
|
|
|
|
#[ORM\Column(length: 255)]
|
|
|
|
|
private ?string $name = null;
|
|
|
|
|
|
|
|
|
|
#[ORM\Column]
|
|
|
|
|
private ?float $priceDay = null;
|
|
|
|
|
|
|
|
|
|
#[ORM\Column]
|
|
|
|
|
private ?float $priceSup = null;
|
|
|
|
|
|
|
|
|
|
#[ORM\Column]
|
|
|
|
|
private ?float $installation = null;
|
|
|
|
|
|
|
|
|
|
#[ORM\Column]
|
|
|
|
|
private ?float $caution = null;
|
|
|
|
|
|
2026-01-16 13:52:22 +01:00
|
|
|
|
2026-01-16 15:04:50 +01:00
|
|
|
#[UploadableField(mapping: 'image_product', fileNameProperty: 'imageName', size: 'imageSize')]
|
2026-01-16 13:52:22 +01:00
|
|
|
private ?File $imageFile = null;
|
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
|
|
|
private ?string $imageName = null;
|
|
|
|
|
|
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
|
|
|
private ?int $imageSize = null;
|
|
|
|
|
|
|
|
|
|
#[ORM\Column(nullable: true)]
|
|
|
|
|
private ?\DateTimeImmutable $updatedAt = null;
|
|
|
|
|
|
2026-01-16 13:55:11 +01:00
|
|
|
#[ORM\Column(length: 255, nullable: true)]
|
|
|
|
|
private ?string $productId = null;
|
|
|
|
|
|
2026-01-19 17:56:57 +01:00
|
|
|
/**
|
|
|
|
|
* @var Collection<int, DevisLine>
|
|
|
|
|
*/
|
|
|
|
|
#[ORM\OneToMany(targetEntity: DevisLine::class, mappedBy: 'product')]
|
|
|
|
|
private Collection $devisLines;
|
|
|
|
|
|
2026-01-19 19:40:27 +01:00
|
|
|
/**
|
|
|
|
|
* @var Collection<int, ProductReserve>
|
|
|
|
|
*/
|
|
|
|
|
#[ORM\OneToMany(targetEntity: ProductReserve::class, mappedBy: 'product')]
|
|
|
|
|
private Collection $productReserves;
|
|
|
|
|
|
2026-01-19 17:56:57 +01:00
|
|
|
public function __construct()
|
|
|
|
|
{
|
|
|
|
|
$this->devisLines = new ArrayCollection();
|
2026-01-19 19:40:27 +01:00
|
|
|
$this->productReserves = new ArrayCollection();
|
2026-01-19 17:56:57 +01:00
|
|
|
}
|
2026-01-20 14:31:12 +01:00
|
|
|
public function slug()
|
|
|
|
|
{
|
|
|
|
|
$s = new Slugify();
|
|
|
|
|
|
|
|
|
|
return$s->slugify($this->id."-".$this->name);
|
|
|
|
|
}
|
2026-01-19 17:56:57 +01:00
|
|
|
|
2026-01-16 13:44:08 +01:00
|
|
|
public function getId(): ?int
|
|
|
|
|
{
|
|
|
|
|
return $this->id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getRef(): ?string
|
|
|
|
|
{
|
|
|
|
|
return $this->ref;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function setRef(string $ref): static
|
|
|
|
|
{
|
|
|
|
|
$this->ref = $ref;
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getCategory(): ?string
|
|
|
|
|
{
|
|
|
|
|
return $this->category;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function setCategory(string $category): static
|
|
|
|
|
{
|
|
|
|
|
$this->category = $category;
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getName(): ?string
|
|
|
|
|
{
|
|
|
|
|
return $this->name;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function setName(string $name): static
|
|
|
|
|
{
|
|
|
|
|
$this->name = $name;
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getPriceDay(): ?float
|
|
|
|
|
{
|
|
|
|
|
return $this->priceDay;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function setPriceDay(float $priceDay): static
|
|
|
|
|
{
|
|
|
|
|
$this->priceDay = $priceDay;
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getPriceSup(): ?float
|
|
|
|
|
{
|
|
|
|
|
return $this->priceSup;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function setPriceSup(float $priceSup): static
|
|
|
|
|
{
|
|
|
|
|
$this->priceSup = $priceSup;
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getInstallation(): ?float
|
|
|
|
|
{
|
|
|
|
|
return $this->installation;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function setInstallation(float $installation): static
|
|
|
|
|
{
|
|
|
|
|
$this->installation = $installation;
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getCaution(): ?float
|
|
|
|
|
{
|
|
|
|
|
return $this->caution;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function setCaution(float $caution): static
|
|
|
|
|
{
|
|
|
|
|
$this->caution = $caution;
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
2026-01-16 13:52:22 +01:00
|
|
|
|
|
|
|
|
public function setImageFile(?File $imageFile = null): void
|
|
|
|
|
{
|
|
|
|
|
$this->imageFile = $imageFile;
|
|
|
|
|
|
|
|
|
|
if (null !== $imageFile) {
|
|
|
|
|
// It is required that at least one field changes if you are using doctrine
|
|
|
|
|
// otherwise the event listeners won't be called and the file is lost
|
|
|
|
|
$this->updatedAt = new \DateTimeImmutable();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getImageFile(): ?File
|
|
|
|
|
{
|
|
|
|
|
return $this->imageFile;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function setImageName(?string $imageName): void
|
|
|
|
|
{
|
|
|
|
|
$this->imageName = $imageName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getImageName(): ?string
|
|
|
|
|
{
|
|
|
|
|
return $this->imageName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function setImageSize(?int $imageSize): void
|
|
|
|
|
{
|
|
|
|
|
$this->imageSize = $imageSize;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getImageSize(): ?int
|
|
|
|
|
{
|
|
|
|
|
return $this->imageSize;
|
|
|
|
|
}
|
2026-01-16 13:55:11 +01:00
|
|
|
|
|
|
|
|
public function getProductId(): ?string
|
|
|
|
|
{
|
|
|
|
|
return $this->productId;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function setProductId(?string $productId): static
|
|
|
|
|
{
|
|
|
|
|
$this->productId = $productId;
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
2026-01-19 17:56:57 +01:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return Collection<int, DevisLine>
|
|
|
|
|
*/
|
|
|
|
|
public function getDevisLines(): Collection
|
|
|
|
|
{
|
|
|
|
|
return $this->devisLines;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function addDevisLine(DevisLine $devisLine): static
|
|
|
|
|
{
|
|
|
|
|
if (!$this->devisLines->contains($devisLine)) {
|
|
|
|
|
$this->devisLines->add($devisLine);
|
|
|
|
|
$devisLine->setProduct($this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function removeDevisLine(DevisLine $devisLine): static
|
|
|
|
|
{
|
|
|
|
|
if ($this->devisLines->removeElement($devisLine)) {
|
|
|
|
|
// set the owning side to null (unless already changed)
|
|
|
|
|
if ($devisLine->getProduct() === $this) {
|
|
|
|
|
$devisLine->setProduct(null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
2026-01-19 19:40:27 +01:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return Collection<int, ProductReserve>
|
|
|
|
|
*/
|
|
|
|
|
public function getProductReserves(): Collection
|
|
|
|
|
{
|
|
|
|
|
return $this->productReserves;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function addProductReserf(ProductReserve $productReserf): static
|
|
|
|
|
{
|
|
|
|
|
if (!$this->productReserves->contains($productReserf)) {
|
|
|
|
|
$this->productReserves->add($productReserf);
|
|
|
|
|
$productReserf->setProduct($this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function removeProductReserf(ProductReserve $productReserf): static
|
|
|
|
|
{
|
|
|
|
|
if ($this->productReserves->removeElement($productReserf)) {
|
|
|
|
|
// set the owning side to null (unless already changed)
|
|
|
|
|
if ($productReserf->getProduct() === $this) {
|
|
|
|
|
$productReserf->setProduct(null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this;
|
|
|
|
|
}
|
2026-01-16 13:44:08 +01:00
|
|
|
}
|