<?php
namespace App\Entity\Articles;
use App\Entity\Clients\Client;
use App\Entity\Utilisateur\Utilisateur;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
use App\Entity\Clients\Categorie;
/**
* PrixPromo
*
* @ORM\Table("article__prix_promo")
* @ORM\Entity(repositoryClass="App\Repository\Articles\PrixPromoRepository")
* @Gedmo\SoftDeleteable(fieldName="dateSuppression",timeAware=false)
*/
class PrixPromo
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Articles\Article", inversedBy="prixPromo")
* @ORM\JoinColumn(nullable=true)
*/
private $article;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Clients\Categorie", inversedBy="prixPromo")
* @ORM\JoinColumn(nullable=true)
*/
private $categorieClient;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Clients\Client", inversedBy="prixPromo")
* @ORM\JoinColumn(nullable=true)
*/
private $client;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Utilisateur\Utilisateur", inversedBy="prixPromo")
* @ORM\JoinColumn(nullable=true)
*/
private $utilisateur;
/**
* @ORM\Column(name="date", type="datetime", nullable=true)
*/
private $date;
/**
* @ORM\Column(name="dateMaj", type="datetime", nullable=true)
* @Gedmo\Timestampable(on="update")
*/
private $dateMaj;
/**
* @ORM\Column(name="dateSuppression", type="datetime", nullable=true)
*/
private $dateSuppression;
/**
* @ORM\Column(name="dateDebut", type="datetime", nullable=true)
*/
private $dateDebut;
/**
* @ORM\Column(name="dateFin", type="datetime", nullable=true)
* @Assert\NotNull(message="Merci de définir une date de fin")
*/
private $dateFin;
/**
* @ORM\Column(name="prix", type="float", nullable=true)
*/
private $prix;
/**
* @ORM\Column(name="reduction", type="float", nullable=true)
*/
private $reduction;
/**
* @ORM\Column(name="typeReduction", type="string", length=255)
*/
private $typeReduction;
/**
* @ORM\Column(name="statut", type="boolean", nullable=true)
*/
private $statut;
/**
* @Assert\True(message="Merci de saisir un nouveau prix HT ou une remise")
*/
public function isPromoSaisiValid(): bool
{
if($this->reduction > 0 or $this->prix > 0) return true;
else return false;
}
/**
* @Assert\True(message="Cette promo est supérieur à la remise max de l'article")
*/
public function isPromoValid(): bool
{
$article = $this->article;
$prixArticle = $article->getPrixBase();
$remiseMaxArticle = $article->getRemiseMax();
$typeRemiseMaxArticle = $article->getTypeRemiseMax();
$nouveauPrix = $this->getPrix();
$remiseMax = $this->getReduction();
$typeRemiseMax = $this->getTypeReduction();
if($remiseMaxArticle > 0 && ($typeRemiseMaxArticle == 'pourcentage' or $typeRemiseMaxArticle == 'montant')) {
//Nouveau prix HT pour la promo
if($nouveauPrix != "") {
if($typeRemiseMaxArticle == "montant") {
if(($prixArticle - $nouveauPrix) > $remiseMaxArticle) return false;
}
else if($typeRemiseMaxArticle == "pourcentage") {
$calculPrixRemiseMax = $prixArticle - (($remiseMaxArticle*$prixArticle)/100);
if($nouveauPrix < $calculPrixRemiseMax) return false;
}
}
//Reduction pour la promo
else {
if($typeRemiseMaxArticle == "pourcentage" && $typeRemiseMax == "pourcentage") {
if($remiseMax > $remiseMaxArticle) return false;
}
else if($typeRemiseMaxArticle == "montant" && $typeRemiseMax == "montant") {
if($remiseMax > $remiseMaxArticle) return false;
}
else if($typeRemiseMaxArticle == "montant" && $typeRemiseMax == "pourcentage") {
$calculPrixRemiseMax = $prixArticle - $remiseMaxArticle;
$calculPrixPromo = $prixArticle - (($remiseMax*$prixArticle)/100);
if($calculPrixPromo < $calculPrixRemiseMax) return false;
}
else if($typeRemiseMaxArticle == "pourcentage" && $typeRemiseMax == "montant") {
$calculPrixRemiseMax = $prixArticle - (($remiseMaxArticle*$prixArticle)/100);
$calculPrixPromo = $prixArticle - $remiseMax;
if($calculPrixPromo < $calculPrixRemiseMax) return false;
}
}
}
return true;
}
public function __construct()
{
$this->date = new Datetime();
$this->dateDebut = new Datetime();
$this->statut = true;
}
public function getId(): int
{
return $this->id;
}
public function setDate(?DateTime $date): PrixPromo
{
$this->date = $date;
return $this;
}
public function getDate(): ?DateTime
{
return $this->date;
}
public function setDateMaj(?DateTime $dateMaj): PrixPromo
{
$this->dateMaj = $dateMaj;
return $this;
}
public function getDateMaj(): ?DateTime
{
return $this->dateMaj;
}
public function setDateSuppression(?DateTime $dateSuppression): PrixPromo
{
$this->dateSuppression = $dateSuppression;
return $this;
}
public function getDateSuppression(): ?DateTime
{
return $this->dateSuppression;
}
public function setDateDebut(?DateTime $dateDebut): PrixPromo
{
$this->dateDebut = $dateDebut;
return $this;
}
public function getDateDebut(): ?DateTime
{
return $this->dateDebut;
}
public function setDateFin(?DateTime $dateFin): PrixPromo
{
$this->dateFin = $dateFin;
return $this;
}
public function getDateFin(): ?DateTime
{
return $this->dateFin;
}
public function setPrix(?float $prix): PrixPromo
{
$this->prix = $prix;
return $this;
}
public function getPrix(): ?float
{
return $this->prix;
}
public function setReduction(?float $reduction): PrixPromo
{
$this->reduction = $reduction;
return $this;
}
public function getReduction(): ?float
{
return $this->reduction;
}
public function setUtilisateur(?Utilisateur $utilisateur): PrixPromo
{
$this->utilisateur = $utilisateur;
return $this;
}
public function getUtilisateur(): ?Utilisateur
{
return $this->utilisateur;
}
public function setArticle(?Article $article): PrixPromo
{
$this->article = $article;
return $this;
}
public function getArticle(): ?Article
{
return $this->article;
}
public function setTypeReduction(string $typeReduction): PrixPromo
{
$this->typeReduction = $typeReduction;
return $this;
}
public function getTypeReduction(): string
{
return $this->typeReduction;
}
public function setStatut(?bool $statut): PrixPromo
{
$this->statut = $statut;
return $this;
}
public function getStatut(): ?bool
{
return $this->statut;
}
public function setCategorieClient(?Categorie $categorieClient): PrixPromo
{
$this->categorieClient = $categorieClient;
return $this;
}
public function getCategorieClient(): ?Categorie
{
return $this->categorieClient;
}
public function setClient(?Client $client): PrixPromo
{
$this->client = $client;
return $this;
}
public function getClient(): ?Client
{
return $this->client;
}
}