<?php
namespace App\Entity;
use App\Repository\ClientRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ClientRepository::class)]
class Client
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\ManyToOne]
private ?Events $event = null;
#[ORM\Column(length: 50, nullable: true)]
private ?string $nom = null;
#[ORM\Column(length: 50, nullable: true)]
private ?string $prenom = null;
#[ORM\Column(length: 100)]
private ?string $mail = null;
#[ORM\Column(length: 50, nullable: true)]
private ?string $tel = null;
#[ORM\Column(length: 50, nullable: true)]
private ?string $societe = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $note = null;
#[ORM\ManyToOne]
private ?Statut $statut = null;
#[ORM\ManyToOne]
private ?Couleur $couleur = null;
#[ORM\ManyToOne]
private ?ModePaiement $modePaiement = null;
#[ORM\ManyToOne]
private ?Langue $langue = null;
#[ORM\Column(nullable: true)]
private ?bool $paye = null;
#[ORM\OneToMany(mappedBy: 'client', targetEntity: Commande::class, cascade: ['persist'], orphanRemoval: true)]
private Collection $commandes;
public function __construct()
{
$this->commandes = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getEvent(): ?Events
{
return $this->event;
}
public function setEvent(?Events $event): self
{
$this->event = $event;
return $this;
}
public function getNom(): ?string
{
return $this->nom;
}
public function setNom(?string $nom): self
{
$this->nom = $nom;
return $this;
}
public function getPrenom(): ?string
{
return $this->prenom;
}
public function setPrenom(?string $prenom): self
{
$this->prenom = $prenom;
return $this;
}
public function getMail(): ?string
{
return $this->mail;
}
public function setMail(string $mail): self
{
$this->mail = $mail;
return $this;
}
public function getTel(): ?string
{
return $this->tel;
}
public function setTel(?string $tel): self
{
$this->tel = $tel;
return $this;
}
public function getSociete(): ?string
{
return $this->societe;
}
public function setSociete(?string $societe): self
{
$this->societe = $societe;
return $this;
}
public function getNote(): ?string
{
return $this->note;
}
public function setNote(?string $note): self
{
$this->note = $note;
return $this;
}
public function getStatut(): ?Statut
{
return $this->statut;
}
public function setStatut(?Statut $statut): self
{
$this->statut = $statut;
return $this;
}
public function getCouleur(): ?Couleur
{
return $this->couleur;
}
public function setCouleur(?Couleur $couleur): self
{
$this->couleur = $couleur;
return $this;
}
public function getModePaiement(): ?ModePaiement
{
return $this->modePaiement;
}
public function setModePaiement(?ModePaiement $modePaiement): self
{
$this->modePaiement = $modePaiement;
return $this;
}
public function getLangue(): ?Langue
{
return $this->langue;
}
public function setLangue(?Langue $langue): self
{
$this->langue = $langue;
return $this;
}
public function isPaye(): ?bool
{
return $this->paye;
}
public function setPaye(?bool $paye): self
{
$this->paye = $paye;
return $this;
}
/**
* @return string|null
*/
public function getColorCode(): ?string
{
// Vérifiez si l'entité COLOR est associée à l'acheteur
if (null === $this->couleur) {
return null;
}
// Récupérez le code couleur de l'entité COLOR associée
return $this->couleur->getCode();
}
public function getTotalCommandes(?int $eventId = null, ?string $statut = 'all'): float
{
$total = 0;
/** @var Commande $commande */
foreach ($this->getCommandes() as $commande) {
if(!is_null($eventId) && $commande->getSession()->getEvent()->getId() == $eventId && ($statut == "all" || ($statut == $commande->getStatut()))) {
$total += $commande->getTotal();
}
}
return $total;
}
public function getTotalSerieBillet(?int $eventId = null, ?string $statut = 'all'): int
{
$count = 0;
foreach ($this->getCommandes() as $commande) {
if (!is_null($eventId) && $commande->getSession()->getEvent()->getId() == $eventId && ($statut == "all" || ($statut == $commande->getStatut()))) $count++;
}
return $count;
}
public function getTotalBillet(?int $eventId = null, ?string $statut = 'all'): int
{
$total = 0;
/** @var Commande $commande */
foreach ($this->getCommandes() as $commande) {
if (!is_null($eventId) && $commande->getSession()->getEvent()->getId() == $eventId && ($statut == "all" || ($statut == $commande->getStatut()))) $total += $commande->getNbr();
}
return $total;
}
/**
* @return Collection<int, Commande>
*/
public function getCommandes(): array
{
$currentEventId = null;
if (isset($_COOKIE['current_event_id'])) {
$currentEventId = $_COOKIE['current_event_id'];
}
$commandes = [];
foreach ($this->commandes as $commande) {
if($commande->getEvent()->getId() == $currentEventId) {
$commandes[] = $commande;
}
}
return $commandes;
}
public function addCommande(Commande $commande): self
{
if (!$this->commandes->contains($commande)) {
$this->commandes->add($commande);
$commande->setClient($this);
}
return $this;
}
public function removeCommande(Commande $commande): self
{
if ($this->commandes->removeElement($commande)) {
// set the owning side to null (unless already changed)
if ($commande->getClient() === $this) {
$commande->setClient(null);
}
}
return $this;
}
public function __toString(): string
{
// TODO: Implement __toString() method.
return $this->prenom.' '.$this->nom;
}
public function getFullName(): string
{
return $this->getNom().' '.$this->getPrenom();
}
public function __clone(): void
{
if ($this->id) {
$this->id = null;
$this->event = null;
$this->commandes = new ArrayCollection();
}
}
}