<?php
namespace App\Entity\GestionComerciale;
use App\Entity\Articles\Article;
use App\Entity\Articles\ArticleComposant;
use App\Entity\Articles\MouvementStock;
use App\Entity\FO\Atelier;
use App\Entity\Utilisateur\HistoriqueIntervention;
use App\Entity\Utilisateur\Utilisateur;
use App\Entity\Rangements\Caisse;
use DateTime;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\Common\Collections\ArrayCollection;
use App\Annotations\SecuredEntity;
/**
* Fabrication
*
* @ORM\Table("commerciale__fabrication")
* @ORM\Entity(repositoryClass="App\Repository\GestionComerciale\FabricationRepository")
* @Gedmo\SoftDeleteable(fieldName="dateSuppression",timeAware=false)
* @SecuredEntity(name="Fabrication", group="ARTICLES")
*/
class Fabrication
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="reference", type="string", length=255, nullable=true)
*/
private $reference;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Utilisateur\Utilisateur", inversedBy="fabrications")
* @ORM\JoinColumn(nullable=true)
*/
private $utilisateur;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Utilisateur\Utilisateur", inversedBy="fabricationsMagasinier")
* @ORM\JoinColumn(nullable=true)
*/
private $magasinier;
/**
* @ORM\Column(name="commentaire", type="text", nullable=true)
*/
private $commentaire;
/**
* @ORM\Column(name="date", type="datetime")
*/
private $date;
/**
* @ORM\Column(name="date_fabrication", type="datetime")
*/
private $dateFabrication;
/**
* @ORM\Column(name="date_supression", type="datetime", nullable=true)
*/
private $dateSuppression;
/**
* @ORM\Column(name="date_maj", type="datetime", nullable=true)
* @Gedmo\Timestampable(on="update")
*/
private $dateMaj;
/**
* @ORM\Column(name="date_maj_prix", type="datetime", nullable=true)
*/
private $dateMajPrix;
/**
* @ORM\Column(name="quantite", type="integer")
*/
private $quantite;
/**
* @ORM\Column(name="quantiteReceptionnee", type="integer")
*/
private $quantiteReceptionnee;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Articles\ArticleComposant", cascade={"persist"},mappedBy="fabrication")
*/
private $articlesComposants;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Articles\Article", inversedBy="fabrications")
*/
private $article;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\FO\Atelier")
*/
private $atelier;
/**
* @ORM\OneToMany(targetEntity="App\Entity\GestionComerciale\ArticleCommande", mappedBy="fabrication")
*/
private $articleCommande;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\GestionComerciale\ArticleCommande", inversedBy="fabricationArticleCommandeCommandeClient" )
* @ORM\JoinColumn(nullable=true)
*/
private $articleCommandeCommandeClient;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Articles\MouvementStock", mappedBy="fabrication")
*/
private $mouvementStock;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\GestionComerciale\StatutFabrication", inversedBy="fabrications")
* @ORM\JoinColumn(nullable=true)
*/
private $statutFabrication;
/**
* @ORM\Column(name="fabriquable", type="integer", nullable=true)
*/
private $fabriquable;
/**
* @ORM\Column(name="quantiteFabriquable", type="integer", nullable=true)
*/
private $quantiteFabriquable;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\GestionComerciale\FabricationMultiple", inversedBy="fabrications")
* @ORM\JoinColumn(nullable=true)
*/
private $fabricationMultiple;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\GestionComerciale\FabricationMultiple", inversedBy="fabricationsPrestation")
* @ORM\JoinColumn(nullable=true)
*/
private $prestation;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\GestionComerciale\Fabrication", inversedBy="fabricationsParente")
* @ORM\JoinColumn(nullable=true)
*/
private $fabricationParente;
/**
* @ORM\OneToMany(targetEntity="App\Entity\GestionComerciale\Fabrication", mappedBy="fabricationParente")
*/
private $fabricationsParente;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\GestionComerciale\CommandeFournisseur", inversedBy="fabrications")
* @ORM\JoinColumn(nullable=true)
*/
private $commandeFournisseur;
/**
* @ORM\Column(name="sous_fabrication", type="boolean", nullable=true)
*/
private $sousFabrication;
/**
* @ORM\Column(name="generer_fabriquer", type="integer", nullable=true)
*/
private $genererFabriquer;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Utilisateur\HistoriqueIntervention", mappedBy="fabrication")
*/
private $historiqueIntervention;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\GestionComerciale\Commande")
* @ORM\JoinColumn(nullable=true)
*/
private $commande;
public const NAME = [
1 => 'Fabrication ADDITIVE',
2 => 'Fabrication DEDUCTIVE',
];
public const ADDITIVE = 1;
public const DEDUCTIVE = 2;
/**
* @ORM\Column(name="type_fabrication", type="smallint", nullable=true)
*/
private $typeFabrication;
/**
* @ORM\Column(name="fabrication_etiquette", type="string",length=3, nullable=true)
*/
private $fabricationEtiquette;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Rangements\Caisse")
* @ORM\JoinColumn(nullable=true)
*/
private $caisse;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\GestionComerciale\RaisonAnomalie", cascade={"persist"})
* @ORM\JoinColumn(nullable=true)
*/
private $raisonAnomalie;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $commentaireAnomalie;
public function __construct()
{
$this->date = new Datetime();
$this->dateFabrication = new Datetime();
$this->quantiteReceptionnee = 0;
$this->articleCommande = new ArrayCollection();
$this->historiqueIntervention = new ArrayCollection();
$this->fabricationsParente = new ArrayCollection();
$this->mouvementStock = new ArrayCollection();
$this->articlesComposants = new ArrayCollection();
}
public function getId(): int
{
return $this->id;
}
public function setQuantite(int $quantite): Fabrication
{
$this->quantite = $quantite;
return $this;
}
public function getQuantite(): int
{
return $this->quantite;
}
public function setQuantiteReceptionnee(int $quantiteReceptionnee): Fabrication
{
$this->quantiteReceptionnee = $quantiteReceptionnee;
return $this;
}
public function getQuantiteReceptionnee(): int
{
return $this->quantiteReceptionnee;
}
public function setCommentaire(?string $commentaire): Fabrication
{
$this->commentaire = $commentaire;
return $this;
}
public function getCommentaire(): ?string
{
return $this->commentaire;
}
public function setDate(DateTime $date): Fabrication
{
$this->date = $date;
return $this;
}
public function getDate(): DateTime
{
return $this->date;
}
public function setDateSuppression(?DateTime $dateSuppression): Fabrication
{
$this->dateSuppression = $dateSuppression;
return $this;
}
public function getDateSuppression(): ?DateTime
{
return $this->dateSuppression;
}
public function setDateMaj(?DateTime $dateMaj): Fabrication
{
$this->dateMaj = $dateMaj;
return $this;
}
public function getDateMaj(): ?DateTime
{
return $this->dateMaj;
}
public function setDateMajPrix(?DateTime $dateMajPrix): Fabrication
{
$this->dateMajPrix = $dateMajPrix;
return $this;
}
public function getDateMajPrix(): ?DateTime
{
return $this->dateMajPrix;
}
public function setUtilisateur(?Utilisateur $utilisateur): Fabrication
{
$this->utilisateur = $utilisateur;
return $this;
}
public function getUtilisateur(): ?Utilisateur
{
return $this->utilisateur;
}
public function setMagasinier(?Utilisateur $magasinier): Fabrication
{
$this->magasinier = $magasinier;
return $this;
}
public function getMagasinier(): ?Utilisateur
{
return $this->magasinier;
}
public function addArticlesComposant(ArticleComposant $articlesComposants): Fabrication
{
$this->articlesComposants[] = $articlesComposants;
return $this;
}
public function removeArticlesComposant(ArticleComposant $articlesComposants)
{
$this->articlesComposants->removeElement($articlesComposants);
}
public function getArticlesComposants(): Collection
{
return $this->articlesComposants;
}
public function setArticle(?Article $article): Fabrication
{
$this->article = $article;
if(is_object($this->article) && is_object($this->article->getAtelier())) {
$this->atelier = $this->article->getAtelier();
}
else {
$this->atelier = NULL;
}
return $this;
}
public function getArticle(): ?Article
{
return $this->article;
}
public function addArticleCommande(ArticleCommande $articleCommande): Fabrication
{
$this->articleCommande[] = $articleCommande;
return $this;
}
public function removeArticleCommande(ArticleCommande $articleCommande)
{
$this->articleCommande->removeElement($articleCommande);
}
public function getArticleCommande(): Collection
{
return $this->articleCommande;
}
public function setReference(?string $reference): Fabrication
{
$this->reference = $reference;
return $this;
}
public function getReference(): ?string
{
return $this->reference;
}
public function setDateFabrication(DateTime $dateFabrication): Fabrication
{
$this->dateFabrication = $dateFabrication;
return $this;
}
public function getDateFabrication(): DateTime
{
return $this->dateFabrication;
}
public function addMouvementStock(MouvementStock $mouvementStock): Fabrication
{
$this->mouvementStock[] = $mouvementStock;
return $this;
}
public function removeMouvementStock(MouvementStock $mouvementStock)
{
$this->mouvementStock->removeElement($mouvementStock);
}
public function getMouvementStock(): Collection
{
return $this->mouvementStock;
}
public function setQuantiteFabriquable(?int $quantiteFabriquable): Fabrication
{
$this->quantiteFabriquable = $quantiteFabriquable;
return $this;
}
public function getQuantiteFabriquable(): ?int
{
return $this->quantiteFabriquable;
}
public function setFabricationMultiple(?FabricationMultiple $fabricationMultiple): Fabrication
{
$this->fabricationMultiple = $fabricationMultiple;
return $this;
}
public function getFabricationMultiple(): ?FabricationMultiple
{
return $this->fabricationMultiple;
}
public function setFabricationParente(?Fabrication $fabricationParente): Fabrication
{
$this->fabricationParente = $fabricationParente;
return $this;
}
public function getFabricationParente(): ?Fabrication
{
return $this->fabricationParente;
}
public function addFabricationsParente(Fabrication $fabricationsParente): Fabrication
{
$this->fabricationsParente[] = $fabricationsParente;
return $this;
}
public function removeFabricationsParente(Fabrication $fabricationsParente)
{
$this->fabricationsParente->removeElement($fabricationsParente);
}
public function getFabricationsParente(): Collection
{
return $this->fabricationsParente;
}
public function setPrestation(?FabricationMultiple $prestation): Fabrication
{
$this->prestation = $prestation;
return $this;
}
public function getPrestation(): ?FabricationMultiple
{
return $this->prestation;
}
public function setFabriquable(?int $fabriquable): Fabrication
{
$this->fabriquable = $fabriquable;
return $this;
}
public function getFabriquable(): ?int
{
return $this->fabriquable;
}
public function setCommandeFournisseur(?CommandeFournisseur $commandeFournisseur): Fabrication
{
$this->commandeFournisseur = $commandeFournisseur;
return $this;
}
public function getCommandeFournisseur(): ?CommandeFournisseur
{
return $this->commandeFournisseur;
}
public function getQuantitePrestation(): int
{
$total = 0;
foreach($this->articleCommande as $ac){
if($ac->getArticle()->getPrestation() == 1){
$total += $ac->getQuantite();
}
}
return $total;
}
public function getQuantiteArticles(): int
{
$total = 0;
foreach($this->articleCommande as $ac){
if($ac->getArticle()->getPrestation() != 1){
$total += $ac->getQuantite();
}
}
return $total;
}
public function setSousFabrication(?bool $sousFabrication): Fabrication
{
$this->sousFabrication = $sousFabrication;
return $this;
}
public function getSousFabrication(): ?bool
{
return $this->sousFabrication;
}
public function setGenererFabriquer(?int $genererFabriquer): Fabrication
{
$this->genererFabriquer = $genererFabriquer;
return $this;
}
public function getGenererFabriquer(): ?int
{
return $this->genererFabriquer;
}
public function setAtelier(?Atelier $atelier): Fabrication
{
$this->atelier = $atelier;
return $this;
}
public function getAtelier(): ?Atelier
{
return $this->atelier;
}
public function addHistoriqueIntervention(HistoriqueIntervention $historiqueIntervention): Fabrication
{
$this->historiqueIntervention[] = $historiqueIntervention;
return $this;
}
public function removeHistoriqueIntervention(HistoriqueIntervention $historiqueIntervention)
{
$this->historiqueIntervention->removeElement($historiqueIntervention);
}
public function getHistoriqueIntervention(): Collection
{
return $this->historiqueIntervention;
}
public function setArticleCommandeCommandeClient(?ArticleCommande $articleCommandeCommandeClient): Fabrication
{
$this->articleCommandeCommandeClient = $articleCommandeCommandeClient;
return $this;
}
public function getArticleCommandeCommandeClient(): ?ArticleCommande
{
return $this->articleCommandeCommandeClient;
}
public function setCommande(?Commande $commande): Fabrication
{
$this->commande = $commande;
return $this;
}
public function getCommande(): ?Commande
{
return $this->commande;
}
public function setStatutFabrication(?StatutFabrication $statutFabrication): Fabrication
{
$this->statutFabrication = $statutFabrication;
return $this;
}
public function getStatutFabrication(): ?StatutFabrication
{
return $this->statutFabrication;
}
public function getTypeFabrication()
{
return $this->typeFabrication;
}
public function setTypeFabrication($typeFabrication)
{
$this->typeFabrication = $typeFabrication;
return $this;
}
public function getFabricationEtiquette()
{
return $this->fabricationEtiquette;
}
public function setFabricationEtiquette($fabricationEtiquette)
{
$this->fabricationEtiquette = $fabricationEtiquette;
return $this;
}
public function setCaisse(?Caisse $caisse): Fabrication
{
$this->caisse = $caisse;
return $this;
}
public function getCaisse(): ?Caisse
{
return $this->caisse;
}
public function isSousFabrication(): ?bool
{
return $this->sousFabrication;
}
public function getRaisonAnomalie(): ?RaisonAnomalie
{
return $this->raisonAnomalie;
}
public function setRaisonAnomalie(?RaisonAnomalie $raisonAnomalie): self
{
$this->raisonAnomalie = $raisonAnomalie;
return $this;
}
public function getCommentaireAnomalie(): ?string
{
return $this->commentaireAnomalie;
}
public function setCommentaireAnomalie(?string $commentaireAnomalie): self
{
$this->commentaireAnomalie = $commentaireAnomalie;
return $this;
}
}