<?php
namespace App\Entity;
use App\Repository\ProduitRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
#[ORM\Entity(repositoryClass: ProduitRepository::class)]
#[Vich\Uploadable]
class Produit
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $Nom = null;
#[ORM\Column(length: 255,nullable: true)]
private ?string $Description = null;
#[ORM\Column(nullable: true)]
private ?int $prixUnitaire = null;
#[ORM\ManyToOne(inversedBy: 'produits')]
#[ORM\JoinColumn(nullable: false)]
private ?Categorie $categorie = null;
#[ORM\OneToMany(mappedBy: 'produit', targetEntity: EntreeStock::class)]
private Collection $entreeStocks;
#[ORM\OneToMany(mappedBy: 'produit', targetEntity: SortieStock::class)]
private Collection $sortieStocks;
#[ORM\ManyToOne(inversedBy: 'produits')]
private ?User $utilisateur = null;
#[ORM\Column(nullable: true)]
private ?int $quantitePr = null;
#[ORM\Column(type: Types::DECIMAL, precision: 10, scale: 2, nullable: true)]
private ?string $cout = null;
#[Vich\UploadableField(mapping: 'produit', fileNameProperty: 'imageName', )]
private ?File $imageFile = null;
#[ORM\Column(nullable: true)]
private ?string $imageName = null;
#[ORM\Column(nullable: true)]
private ?\DateTimeImmutable $updatedAt = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $uniteMesure = null;
#[ORM\OneToMany(mappedBy: 'produit', targetEntity: DetailsVente::class, cascade: ['remove'], orphanRemoval: true)]
private Collection $detailsVentes;
#[ORM\OneToMany(mappedBy: 'produit', targetEntity: LivraisonProd::class, cascade: ['remove'], orphanRemoval: true)]
private Collection $livraisonProds;
#[ORM\OneToMany(mappedBy: 'produit', targetEntity: ProduitStock::class)]
private Collection $produitStocks;
#[ORM\Column(nullable: true)]
private ?float $prixVenteUnitaire = null;
public function __construct()
{
$this->entreeStocks = new ArrayCollection();
$this->sortieStocks = new ArrayCollection();
$this->detailsVentes = new ArrayCollection();
$this->updatedAt = new \DateTimeImmutable('now');
$this->livraisonProds = new ArrayCollection();
$this->produitStocks = new ArrayCollection();
$this->prixVenteUnitaire = 0;
}
public function getId(): ?int
{
return $this->id;
}
public function getNom(): ?string
{
return $this->Nom;
}
public function setNom(string $Nom): static
{
$this->Nom = $Nom;
return $this;
}
public function getDescription(): ?string
{
return $this->Description;
}
public function setDescription(string $Description): static
{
$this->Description = $Description;
return $this;
}
public function getPrixUnitaire(): ?int
{
return $this->prixUnitaire;
}
public function setPrixUnitaire(int $prixUnitaire): static
{
$this->prixUnitaire = $prixUnitaire;
return $this;
}
public function getCategorie(): ?Categorie
{
return $this->categorie;
}
public function setCategorie(?Categorie $categorie): static
{
$this->categorie = $categorie;
return $this;
}
/**
* @return Collection<int, EntreeStock>
*/
public function getEntreeStocks(): Collection
{
return $this->entreeStocks;
}
public function addEntreeStock(EntreeStock $entreeStock): static
{
if (!$this->entreeStocks->contains($entreeStock)) {
$this->entreeStocks->add($entreeStock);
$entreeStock->setProduit($this);
}
return $this;
}
public function removeEntreeStock(EntreeStock $entreeStock): static
{
if ($this->entreeStocks->removeElement($entreeStock)) {
// set the owning side to null (unless already changed)
if ($entreeStock->getProduit() === $this) {
$entreeStock->setProduit(null);
}
}
return $this;
}
/**
* @return Collection<int, SortieStock>
*/
public function getSortieStocks(): Collection
{
return $this->sortieStocks;
}
public function addSortieStock(SortieStock $sortieStock): static
{
if (!$this->sortieStocks->contains($sortieStock)) {
$this->sortieStocks->add($sortieStock);
$sortieStock->setProduit($this);
}
return $this;
}
public function removeSortieStock(SortieStock $sortieStock): static
{
if ($this->sortieStocks->removeElement($sortieStock)) {
// set the owning side to null (unless already changed)
if ($sortieStock->getProduit() === $this) {
$sortieStock->setProduit(null);
}
}
return $this;
}
public function setImageFile(?File $imageFile = null): void
{
$this->imageFile = $imageFile;
if (null !== $imageFile) {
$this->updatedAt = new \DateTimeImmutable('now');
}
}
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 getUtilisateur(): ?User
{
return $this->utilisateur;
}
public function setUtilisateur(?User $utilisateur): static
{
$this->utilisateur = $utilisateur;
return $this;
}
public function getQuantitePr(): ?int
{
return $this->quantitePr;
}
public function setQuantitePr(?int $quantitePr): static
{
$this->quantitePr = $quantitePr;
return $this;
}
public function getCout(): ?string
{
return $this->cout;
}
public function setCout(?string $cout): static
{
$this->cout = $cout;
return $this;
}
public function getUniteMesure(): ?string
{
return $this->uniteMesure;
}
public function setUniteMesure(?string $uniteMesure): static
{
$this->uniteMesure = $uniteMesure;
return $this;
}
/**
* @return Collection<int, DetailsVente>
*/
public function getDetailsVentes(): Collection
{
return $this->detailsVentes;
}
public function addDetailsVente(DetailsVente $detailsVente): static
{
if (!$this->detailsVentes->contains($detailsVente)) {
$this->detailsVentes->add($detailsVente);
$detailsVente->setProduit($this);
}
return $this;
}
public function removeDetailsVente(DetailsVente $detailsVente): static
{
if ($this->detailsVentes->removeElement($detailsVente)) {
// set the owning side to null (unless already changed)
if ($detailsVente->getProduit() === $this) {
$detailsVente->setProduit(null);
}
}
return $this;
}
/**
* @return Collection<int, LivraisonProd>
*/
public function getLivraisonProds(): Collection
{
return $this->livraisonProds;
}
public function addLivraisonProd(LivraisonProd $livraisonProd): static
{
if (!$this->livraisonProds->contains($livraisonProd)) {
$this->livraisonProds->add($livraisonProd);
$livraisonProd->setProduit($this);
}
return $this;
}
public function removeLivraisonProd(LivraisonProd $livraisonProd): static
{
if ($this->livraisonProds->removeElement($livraisonProd)) {
// set the owning side to null (unless already changed)
if ($livraisonProd->getProduit() === $this) {
$livraisonProd->setProduit(null);
}
}
return $this;
}
/**
* @return Collection<int, ProduitStock>
*/
public function getProduitStocks(): Collection
{
return $this->produitStocks;
}
public function addProduitStock(ProduitStock $produitStock): static
{
if (!$this->produitStocks->contains($produitStock)) {
$this->produitStocks->add($produitStock);
$produitStock->setProduit($this);
}
return $this;
}
public function removeProduitStock(ProduitStock $produitStock): static
{
if ($this->produitStocks->removeElement($produitStock)) {
// set the owning side to null (unless already changed)
if ($produitStock->getProduit() === $this) {
$produitStock->setProduit(null);
}
}
return $this;
}
public function getPrixVenteUnitaire(): ?float
{
return $this->prixVenteUnitaire;
}
public function setPrixVenteUnitaire(?float $prixVenteUnitaire): static
{
$this->prixVenteUnitaire = $prixVenteUnitaire;
return $this;
}
}