<?php
namespace App\Entity\Articles;
use App\Entity\Fournisseurs\Fournisseur;
use App\Entity\Fournisseurs\Remise;
use App\Entity\GestionComerciale\ArticleCommande;
use App\Entity\Utilisateur\Utilisateur;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping\Index;
use App\Annotations\SecuredEntity;
/**
* ConditionAchat
*
* @ORM\Table("article__condition_achat",indexes={
* @ORM\Index(name="import", columns={"id_import"}),
* @ORM\Index(name="referenceFournisseur", columns={"reference_fournisseur"}),
* @ORM\Index(name="recherche", columns={"reference_fournisseur", "reference_fournisseur_appel"},flags={"fulltext"}),
* })
* @ORM\Entity(repositoryClass="App\Repository\Articles\ConditionAchatRepository")
* @Gedmo\SoftDeleteable(fieldName="dateSuppression",timeAware=false)
* @SecuredEntity (name="Condition d'achat", group="Articles")
*/
class ConditionAchat
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Utilisateur\Utilisateur", inversedBy="conditionsAchat")
* @ORM\JoinColumn(nullable=true)
*/
private $utilisateur;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Articles\Article", inversedBy="conditionsAchat")
* @ORM\JoinColumn(nullable=true)
* @Assert\Valid
*/
private $article;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Fournisseurs\Remise")
* @ORM\JoinColumn(nullable=true)
* @Assert\Valid
*/
private $remiseFournisseur;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Fournisseurs\Fournisseur", inversedBy="conditionsAchat", cascade={"persist"})
* @ORM\JoinColumn(nullable=true)
* @Assert\NotBlank(message="Fournisseur obligatoire")
*/
private $fournisseur;
/**
* @ORM\Column(name="delai", type="integer", nullable=true)
*/
private $delai;
/**
* @ORM\Column(name="quantite", type="integer", nullable=true, options={"default" : 1})
* @Assert\NotBlank(message="Quantité mini obligatoire")
*/
private $quantite;
/**
* @ORM\Column(name="prix_achat_brut", type="float", nullable=true)
* @Assert\NotBlank(message="Prix achat brut obligatoire")
*/
private $prixAchatBrut;
/**
* @ORM\Column(name="taux_remise", type="float", nullable=true)
* @Assert\NotBlank(message="Taux de remise obligatoire", groups={"articleDivers"})
*/
private $tauxRemise;
/**
* @ORM\Column(name="taux_remise_supplementaire", type="float", nullable=true)
* @Assert\NotBlank(message="Taux de remise supplémentaire obligatoire", groups={"articleDivers"})
*/
private $tauxRemiseSupplementaire;
/**
* @ORM\Column(name="coefficient", type="float", nullable=true)
*/
private $coefficient;
/**
* @ORM\Column(name="prix_achat_net", type="float", nullable=true)
*/
private $prixAchatNet;
/**
* @ORM\Column(name="conditionnement", type="float", nullable=true)
*/
private $conditionnement;
/**
* @ORM\Column(name="statut", type="boolean", nullable=true)
*/
private $defaut;
/**
* @ORM\Column(name="prixNet", type="boolean", nullable=true, options={"default" : 0})
*/
private $prixNet;
/**
* @ORM\Column(name="typeReduction", type="string", length=255, nullable=true)
*/
private $typeReduction;
/**
* @ORM\Column(name="date", type="datetime", nullable=true)
*/
private $date;
/**
* @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="donnees_import", type="text", nullable=true)
*/
private $donnesImport;
/**
* @ORM\Column(name="id_import", type="string",length=255, nullable=true)
*/
private $idImport;
/**
* @var string
* @Assert\NotBlank(message="Reférence fournisseur obligatoire")
* @Assert\NotBlank(message="Reférence fournisseur obligatoire", groups={"articleDivers"})
* @ORM\Column(name="reference_fournisseur", type="string", length=255, nullable=true)
*/
private $referenceFournisseur;
/**
* @var string
* @ORM\Column(name="reference_fournisseur_appel", type="string", length=255, nullable=true)
*/
private $referenceFournisseurAppel;
/**
* @ORM\OneToMany(targetEntity="App\Entity\GestionComerciale\ArticleCommande", mappedBy="conditionAchat")
*/
private $articlesCommande;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Articles\MouvementStock", mappedBy="conditionAchat")
*/
private $mouvementsStock;
/**
* @var string
* @Assert\NotBlank(message="Libellé obligatoire", groups={"articleDivers"})
* @ORM\Column(name="libelle", type="text", nullable=true)
*/
private $libelle;
/**
* @var string
* @ORM\Column(name="est_erreur", type="text", nullable=true)
*/
private $estErreur;
/**
* @ORM\Column(name="coefficient_conditionnement", type="float", nullable=true)
*/
private $coefficientConditionnement;
/**
* @ORM\Column(name="frais_annexes", type="float", nullable=true)
*/
private $fraisAnnexes;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Articles\UniteMesure", cascade={"persist"})
*/
private $uniteMesure;
/**
* @ORM\Column(name="commentaire", type="text", nullable=true)
*/
private $commentaire;
public function __construct()
{
$this->date = new Datetime();
$this->conditionnement = 1;
$this->quantite = 1;
$this->tauxRemise = 0;
$this->tauxRemiseSupplementaire = 0;
$this->prixAchatNet = 0;
$this->coefficientConditionnement = 1;
$this->fraisAnnexes = 0;
$this->coefficient = 1;
$this->mouvementsStock = new ArrayCollection();
$this->articlesCommande = new ArrayCollection();
}
public function getId(): int
{
return $this->id;
}
public function setQuantite(?int $quantite): ConditionAchat
{
$this->quantite = $quantite;
return $this;
}
public function getQuantite(): ?int
{
return $this->quantite;
}
public function setRemise(?float $remise): ConditionAchat
{
$this->tauxRemise = $remise;
return $this;
}
public function getRemise(): ?float
{
return $this->tauxRemise;
}
public function setDate(?DateTime $date): ConditionAchat
{
$this->date = $date;
return $this;
}
public function getDate(): ?DateTime
{
return $this->date;
}
public function setDateSuppression(?DateTime $dateSuppression): ConditionAchat
{
$this->dateSuppression = $dateSuppression;
return $this;
}
public function getDateSuppression(): ?DateTime
{
return $this->dateSuppression;
}
public function setDateMaj(?DateTime $dateMaj): ConditionAchat
{
$this->dateMaj = $dateMaj;
return $this;
}
public function getDateMaj(): ?DateTime
{
return $this->dateMaj;
}
public function setUtilisateur(?Utilisateur $utilisateur): ConditionAchat
{
$this->utilisateur = $utilisateur;
return $this;
}
public function getUtilisateur(): ?Utilisateur
{
return $this->utilisateur;
}
public function setArticle(?Article $article): ConditionAchat
{
$this->article = $article;
return $this;
}
public function getArticle(): ?Article
{
return $this->article;
}
public function setFournisseur(?Fournisseur $fournisseur): ConditionAchat
{
$this->fournisseur = $fournisseur;
//$this->fournisseurPlus = $fournisseur;
$this->setFournisseurPlus($fournisseur);
return $this;
}
public function getFournisseur(): ?Fournisseur
{
return $this->fournisseur;
}
public function setFournisseurPlus(?Fournisseur $fournisseur): ConditionAchat
{
$this->fournisseur = $fournisseur;
return $this;
}
public function getFournisseurPlus(): ?Fournisseur
{
return $this->fournisseur;
}
public function setConditionnement(?float $conditionnement): ConditionAchat
{
$this->conditionnement = $conditionnement;
return $this;
}
public function getConditionnement(): ?float
{
return $this->conditionnement;
}
public function setDefaut(?bool $defaut): ConditionAchat
{
$this->defaut = $defaut;
return $this;
}
public function getDefaut(): ?bool
{
return $this->defaut;
}
public function setTypeReduction(?string $typeReduction): ConditionAchat
{
$this->typeReduction = $typeReduction;
return $this;
}
public function getTypeReduction(): ?string
{
return $this->typeReduction;
}
public function setRemiseSupplementaire(?float $remiseSupplementaire): ConditionAchat
{
$this->tauxRemiseSupplementaire = $remiseSupplementaire;
return $this;
}
public function getRemiseSupplementaire(): ?float
{
return $this->tauxRemiseSupplementaire;
}
public function setDonnesImport(?string $donnesImport): ConditionAchat
{
$this->donnesImport = $donnesImport;
return $this;
}
public function getDonnesImport(): ?string
{
return $this->donnesImport;
}
public function setIdImport(?string $idImport): ConditionAchat
{
$this->idImport = $idImport;
return $this;
}
public function getIdImport(): ?string
{
return $this->idImport;
}
public function setReferenceFournisseur(?string $referenceFournisseur): ConditionAchat
{
$this->referenceFournisseur = $referenceFournisseur;
$delimiteur= ["-"," ","_"];
$refFournisseurAppel = str_replace($delimiteur,"",$referenceFournisseur);
$this->setReferenceFournisseurAppel($refFournisseurAppel);
return $this;
}
public function getReferenceFournisseur(): ?string
{
return $this->referenceFournisseur;
}
public function setPrixAchatBrut(?float $prixAchatBrut): ConditionAchat
{
$this->prixAchatBrut = round($prixAchatBrut, 3);
return $this;
}
public function getPrixAchatBrut(): ?float
{
return $this->prixAchatBrut;
}
public function setTauxRemise(?float $tauxRemise): ConditionAchat
{
$this->tauxRemise = $tauxRemise;
return $this;
}
public function getTauxRemise(): ?float
{
return $this->tauxRemise;
}
public function setTauxRemiseSupplementaire(?float $tauxRemiseSupplementaire): ConditionAchat
{
$this->tauxRemiseSupplementaire = $tauxRemiseSupplementaire;
return $this;
}
public function getTauxRemiseSupplementaire(): ?float
{
return $this->tauxRemiseSupplementaire;
}
public function setCoefficient(?float $coefficient): ConditionAchat
{
$this->coefficient = $coefficient;
return $this;
}
public function getCoefficient(): ?float
{
return $this->coefficient;
}
public function setPrixAchatNet(?float $prixAchatNet): ConditionAchat
{
if($this->getPrixAchatNet() != $prixAchatNet)
$this->dateMajPrix = new Datetime();
$this->prixAchatNet = round($prixAchatNet, 3);
return $this;
}
public function getPrixAchatNet(): ?float
{
return $this->prixAchatNet;
}
public function setLibelle(?string $libelle): ConditionAchat
{
$this->libelle = $libelle;
return $this;
}
public function getLibelle(): ?string
{
return $this->libelle;
}
public function addArticlesCommande(ArticleCommande $articlesCommande): ConditionAchat
{
$this->articlesCommande[] = $articlesCommande;
return $this;
}
public function removeArticlesCommande(ArticleCommande $articlesCommande)
{
$this->articlesCommande->removeElement($articlesCommande);
}
public function getArticlesCommande(): ArrayCollection
{
return $this->articlesCommande;
}
public function setCoefficientConditionnement(?float $coefficientConditionnement): ConditionAchat
{
if($coefficientConditionnement == '' || $coefficientConditionnement == 0) $coefficientConditionnement = 1;
$this->coefficientConditionnement = $coefficientConditionnement;
return $this;
}
public function getCoefficientConditionnement(): ?float
{
return $this->coefficientConditionnement;
}
public function addMouvementsStock(MouvementStock $mouvementsStock): ConditionAchat
{
$this->mouvementsStock[] = $mouvementsStock;
return $this;
}
public function removeMouvementsStock(MouvementStock $mouvementsStock)
{
$this->mouvementsStock->removeElement($mouvementsStock);
}
public function getMouvementsStock(): ArrayCollection
{
return $this->mouvementsStock;
}
public function setFraisAnnexes(?float $fraisAnnexes): ConditionAchat
{
$this->fraisAnnexes = $fraisAnnexes;
return $this;
}
public function getFraisAnnexes(): ?float
{
return $this->fraisAnnexes;
}
public function setUniteMesure(?UniteMesure $uniteMesure): ConditionAchat
{
$this->uniteMesure = $uniteMesure;
return $this;
}
public function getUniteMesure(): ?UniteMesure
{
return $this->uniteMesure;
}
public function setCommentaire(?string $commentaire): ConditionAchat
{
$this->commentaire = $commentaire;
return $this;
}
public function getCommentaire(): ?string
{
return $this->commentaire;
}
public function setDateMajPrix(?DateTime $dateMajPrix): ConditionAchat
{
$this->dateMajPrix = $dateMajPrix;
return $this;
}
public function getDateMajPrix(): ?DateTime
{
return $this->dateMajPrix;
}
public function setEstErreur(?string $estErreur): ConditionAchat
{
$this->estErreur = $estErreur;
return $this;
}
public function getEstErreur(): ?string
{
return $this->estErreur;
}
public function setReferenceFournisseurAppel(?string $referenceFournisseurAppel): ConditionAchat
{
$this->referenceFournisseurAppel = $referenceFournisseurAppel;
return $this;
}
public function getReferenceFournisseurAppel(): ?string
{
return $this->referenceFournisseurAppel;
}
public function setDelai(?int $delai): ConditionAchat
{
$this->delai = $delai;
return $this;
}
public function getDelai(): ?int
{
return $this->delai;
}
public function setRemiseFournisseur(?Remise $remiseFournisseur): ConditionAchat
{
$this->remiseFournisseur = $remiseFournisseur;
return $this;
}
public function getRemiseFournisseur(): ?Remise
{
return $this->remiseFournisseur;
}
public function setPrixNet(?bool $prixNet): ConditionAchat
{
$this->prixNet = $prixNet;
return $this;
}
public function getPrixNet(): ?bool
{
return $this->prixNet;
}
}