<?php
namespace App\Entity;
use App\Repository\ProduitRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Serializer\Annotation\Groups;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ORM\Mapping\OrderBy;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Bridge\Elasticsearch\DataProvider\Filter\OrderFilter;
use Symfony\Component\Serializer\Annotation\SerializedName;
/**
* @ORM\Entity(repositoryClass=ProduitRepository::class)
* * @ApiResource(
* normalizationContext={"groups"={"produit:read"}, "skip_null_values" = false},
*
* denormalizationContext={"groups"={"produit:write"}} ,
* attributes= {"pagination_items_per_page" = 10},
* order= {"id" = "DESC"},
* )
* @ApiFilter(SearchFilter::class, properties={"nom" : "partial"})
* @ApiFilter(OrderFilter::class, properties={"id" : "DESC"})
*/
class Produit
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({"produit:read","commandes:read","user:read","panier"})
*/
private $id;
/**
* @SerializedName("libelle")
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"produit:read","commandes:read","user:read","panier"})
*/
private $nom;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({"produit:read","commandes:read","user:read","panier"})
*/
private $description;
/**
* @ORM\Column(type="float", nullable=true)
* @Groups({"produit:read","commandes:read","user:read","panier"})
*/
private $prix;
/** @Gedmo\Slug(fields={"nom"})
* @ORM\Column(type="string", length=255)
*/
private $slug;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Gedmo\Timestampable(on="create")
*/
private $createdAt;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Gedmo\Timestampable(on="update")
*/
private $updateAt;
/**
* @ORM\ManyToOne(targetEntity=Categorie::class, inversedBy="produits")
* @Groups({"produit:read","commandes:read","produit:write"})
*/
private $categorie;
/**
* @ORM\OneToMany(targetEntity=ImagesProduit::class, mappedBy="produit",cascade={"persist"})
* @Groups({"produit:read","commandes:read","user:read","panier"})
*/
private $images;
/**
* @ORM\Column(type="datetime", nullable=true)
* @Groups({"produit:read","commandes:read","user:read","panier"})
* @SerializedName("disponibilite")
*/
private $Disponibilite;
/**
* @ORM\ManyToOne(targetEntity=Quartier::class, inversedBy="produit")
* @Groups({"produit:read","commandes:read","user:read","panier"})
*/
private $localite;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"produit:read","commandes:read","user:read","panier"})
*/
private $acteur;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="produits")
* @Groups({"produit:read","commandes:read","produit:write"})
*/
private $utilisateur;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({"produit:read","commandes:read","user:read","panier"})
*/
private $valide;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $dateDisponibilite;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $quantite;
/**
* @ORM\ManyToOne(targetEntity=Cooperative::class, inversedBy="produits")
*/
private $cooperative;
/**
* @ORM\OneToMany(targetEntity=LignesApprovisionnement::class, mappedBy="Produit")
*
*/
private $lignesApprovisionnements;
/**
* @ORM\OneToOne(targetEntity=Stocks::class, mappedBy="produit", cascade={"persist", "remove"})
* @Groups({"produit:read","commandes:read","user:read","panier"})
*/
private $stocks;
/**
* @ORM\ManyToOne(targetEntity=Items::class, inversedBy="produits")
* @Groups({"produit:read","commandes:read","produit:write"})
*/
private $item;
public function __construct()
{
$this->categories = new ArrayCollection();
$this->images = new ArrayCollection();
$this->valide = true;
$this->lignesApprovisionnements = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getNom(): ?string
{
return $this->nom;
}
public function setNom(?string $nom): self
{
$this->nom = $nom;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getPrix(): ?float
{
return $this->prix;
}
public function setPrix(?float $prix): self
{
$this->prix = $prix;
return $this;
}
public function getSlug(): ?string
{
return $this->slug;
}
public function setSlug(string $slug): self
{
$this->slug = $slug;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(?\DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getUpdateAt(): ?\DateTimeInterface
{
return $this->updateAt;
}
public function setUpdateAt(?\DateTimeInterface $updateAt): self
{
$this->updateAt = $updateAt;
return $this;
}
/**
* @return Collection<int, Categorie>
*/
public function getCategories(): Collection
{
return $this->categories;
}
public function addCategory(Categorie $category): self
{
if (!$this->categories->contains($category)) {
$this->categories[] = $category;
$category->addProduit($this);
}
return $this;
}
public function removeCategory(Categorie $category): self
{
if ($this->categories->removeElement($category)) {
$category->removeProduit($this);
}
return $this;
}
/**
* @return Collection<int, ImagesProduit>
*/
public function getImages(): Collection
{
return $this->images;
}
public function addImage(ImagesProduit $image): self
{
if (!$this->images->contains($image)) {
$this->images[] = $image;
$image->setProduit($this);
}
return $this;
}
public function removeImage(ImagesProduit $image): self
{
if ($this->images->removeElement($image)) {
// set the owning side to null (unless already changed)
if ($image->getProduit() === $this) {
$image->setProduit(null);
}
}
return $this;
}
public function getQuantite(): ?int
{
return $this->quantite;
}
public function setQuantite(?int $quantite): self
{
$this->quantite = $quantite;
return $this;
}
public function getDisponibilite(): ?\DateTime
{
return $this->Disponibilite;
}
public function setDisponibilite(?\DateTime $Disponibilite): self
{
$this->Disponibilite = $Disponibilite;
return $this;
}
public function getLocalite(): ?Quartier
{
return $this->localite;
}
public function setLocalite(?Quartier $localite): self
{
$this->localite =$localite;
return $this;
}
public function getActeur(): ?string
{
return $this->acteur;
}
public function setActeur(?string $acteur): self
{
$this->acteur = $acteur;
return $this;
}
public function getUtilisateur(): ?User
{
return $this->utilisateur;
}
public function setUtilisateur(?User $utilisateur): self
{
$this->utilisateur = $utilisateur;
return $this;
}
public function getValide(): ?bool
{
return $this->valide;
}
public function setValide(?bool $valide): self
{
$this->valide = $valide;
return $this;
}
public function getDateDisponibilite(): ?\DateTimeInterface
{
return $this->dateDisponibilite;
}
public function setDateDisponibilite(?\DateTimeInterface $dateDisponibilite): self
{
$this->dateDisponibilite = $dateDisponibilite;
return $this;
}
public function getCooperative(): ?Cooperative
{
return $this->cooperative;
}
public function setCooperative(?Cooperative $cooperative): self
{
$this->cooperative = $cooperative;
return $this;
}
/**
* @return Collection<int, LignesApprovisionnement>
*/
public function getLignesApprovisionnements(): Collection
{
return $this->lignesApprovisionnements;
}
public function addLignesApprovisionnement(LignesApprovisionnement $lignesApprovisionnement): self
{
if (!$this->lignesApprovisionnements->contains($lignesApprovisionnement)) {
$this->lignesApprovisionnements[] = $lignesApprovisionnement;
$lignesApprovisionnement->setProduit($this);
}
return $this;
}
public function removeLignesApprovisionnement(LignesApprovisionnement $lignesApprovisionnement): self
{
if ($this->lignesApprovisionnements->removeElement($lignesApprovisionnement)) {
// set the owning side to null (unless already changed)
if ($lignesApprovisionnement->getProduit() === $this) {
$lignesApprovisionnement->setProduit(null);
}
}
return $this;
}
public function getStocks(): ?Stocks
{
return $this->stocks;
}
public function setStocks(?Stocks $stocks): self
{
// unset the owning side of the relation if necessary
if ($stocks === null && $this->stocks !== null) {
$this->stocks->setProduit(null);
}
// set the owning side of the relation if necessary
if ($stocks !== null && $stocks->getProduit() !== $this) {
$stocks->setProduit($this);
}
$this->stocks = $stocks;
return $this;
}
public function getCategorie(): ?Categorie
{
return $this->categorie;
}
public function setCategorie(?Categorie $categorie): self
{
$this->categorie = $categorie;
return $this;
}
public function getItem(): ?items
{
return $this->item;
}
public function setItem(?items $item): self
{
$this->item = $item;
return $this;
}
}