<?php
declare(strict_types=1);
namespace App\Infrastructure\Doctrine\Entity;
use App\Domain\Common\Entity\IzOrderClient;
use App\Domain\Common\Entity\IzOrderOrder;
use App\Domain\Common\Entity\IzOrderOrderLine;
use App\Domain\Order\Enum\StatusEnum;
use App\Infrastructure\Doctrine\Entity\Traits\TimestampableTrait;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Infrastructure\Doctrine\Repository\DoctrineIzOrderOrderRepository")
*/
class DoctrineIzOrderOrder implements IzOrderOrder
{
use TimestampableTrait;
/**
* @ORM\Id
* @ORM\Column(type="string", length=10)
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class="App\Infrastructure\Doctrine\IdGenerator\OrderIdGenerator")
*/
private string $numeroDeCommande = '';
/**
* @ORM\Column(type="string", length=3)
*/
private string $numeroDeRepresentant = '';
/**
* @ORM\Column(type="string", length=16)
*/
private string $codeClient = '';
/**
* @ORM\Column(type="integer")
*/
private int $totalQuantite = 0;
/**
* @ORM\Column(type="float")
*/
private float $totalMontant = 0.0;
/**
* @ORM\Column(type="integer")
*/
private int $totalQuantiteExpediee = 0;
/**
* @ORM\Column(type="integer")
*/
private int $totalQuantiteReliquat = 0;
/**
* @ORM\Column(type="date_immutable", nullable=true)
*/
private ?\DateTimeImmutable $dateDeLivraisonSouhaitee = null;
/**
* @ORM\Column(type="string", length=10, nullable=true)
*/
private ?string $codeFiliere = null;
/**
* @ORM\Column(type="string", length=191)
*/
private string $nomLivraison = '';
/**
* @ORM\Column(type="string", length=191)
*/
private string $adresseLivraison = '';
/**
* @ORM\Column(type="string", length=191)
*/
private string $codePostalLivraison = '';
/**
* @ORM\Column(type="string", length=191)
*/
private string $villeLivraison = '';
/**
* @ORM\Column(type="string", length=191)
*/
private string $paysLivraison = '';
/**
* @ORM\Column(type="string", length=191)
*/
private string $statut;
/**
* @var Collection<int, IzOrderOrderLine>
*
* @ORM\OneToMany(
* targetEntity="App\Infrastructure\Doctrine\Entity\DoctrineIzOrderOrderLine",
* mappedBy="order",
* orphanRemoval=true,
* cascade={"persist"}
* )
*/
private iterable $lines;
/**
* @ORM\ManyToOne(targetEntity="App\Infrastructure\Doctrine\Entity\DoctrineIzOrderClient")
* @ORM\JoinColumn(referencedColumnName="code_client", onDelete="SET NULL")
*/
private ?IzOrderClient $client = null;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
*/
private ?\DateTimeImmutable $sendAt = null;
public function __construct()
{
$this->statut = StatusEnum::PRISE_EN_COMPTE()->getKey();
$this->lines = new ArrayCollection();
}
public function __toString(): string
{
return "Commande n°{$this->getNumeroDeCommande()}";
}
public function getNumeroDeCommande(): string
{
return $this->numeroDeCommande;
}
public function setNumeroDeCommande(string $numeroDeCommande): void
{
$this->numeroDeCommande = $numeroDeCommande;
}
public function getNumeroDeRepresentant(): string
{
return $this->numeroDeRepresentant;
}
public function setNumeroDeRepresentant(string $numeroDeRepresentant): void
{
$this->numeroDeRepresentant = $numeroDeRepresentant;
}
public function getCodeClient(): string
{
return $this->codeClient;
}
public function setCodeClient(string $codeClient): void
{
$this->codeClient = $codeClient;
}
public function getTotalQuantite(): int
{
return $this->totalQuantite;
}
public function setTotalQuantite(int $totalQuantite): void
{
$this->totalQuantite = $totalQuantite;
}
public function getTotalMontant(): float
{
return $this->totalMontant;
}
public function setTotalMontant(float $totalMontant): void
{
$this->totalMontant = $totalMontant;
}
public function getTotalQuantiteExpediee(): int
{
return $this->totalQuantiteExpediee;
}
public function setTotalQuantiteExpediee(int $totalQuantiteExpediee): void
{
$this->totalQuantiteExpediee = $totalQuantiteExpediee;
}
public function getTotalQuantiteReliquat(): int
{
return $this->totalQuantiteReliquat;
}
public function setTotalQuantiteReliquat(int $totalQuantiteReliquat): void
{
$this->totalQuantiteReliquat = $totalQuantiteReliquat;
}
public function getDateDeLivraisonSouhaitee(): ?\DateTimeImmutable
{
return $this->dateDeLivraisonSouhaitee;
}
public function setDateDeLivraisonSouhaitee(?\DateTimeImmutable $dateDeLivraisonSouhaitee): void
{
$this->dateDeLivraisonSouhaitee = $dateDeLivraisonSouhaitee;
}
public function getCodeFiliere(): ?string
{
return $this->codeFiliere;
}
public function setCodeFiliere(?string $codeFiliere): void
{
$this->codeFiliere = $codeFiliere;
}
public function getNomLivraison(): string
{
return $this->nomLivraison;
}
public function setNomLivraison(string $nomLivraison): void
{
$this->nomLivraison = $nomLivraison;
}
public function getAdresseLivraison(): string
{
return $this->adresseLivraison;
}
public function setAdresseLivraison(string $adresseLivraison): void
{
$this->adresseLivraison = $adresseLivraison;
}
public function getCodePostalLivraison(): string
{
return $this->codePostalLivraison;
}
public function setCodePostalLivraison(string $codePostalLivraison): void
{
$this->codePostalLivraison = $codePostalLivraison;
}
public function getVilleLivraison(): string
{
return $this->villeLivraison;
}
public function setVilleLivraison(string $villeLivraison): void
{
$this->villeLivraison = $villeLivraison;
}
public function getPaysLivraison(): string
{
return $this->paysLivraison;
}
public function setPaysLivraison(string $paysLivraison): void
{
$this->paysLivraison = $paysLivraison;
}
public function getStatut(): string
{
return $this->statut;
}
public function setStatut(string $statut): void
{
$this->statut = $statut;
}
/**
* {@inheritDoc}
*/
public function getLines(): iterable
{
return $this->lines;
}
public function addLine(IzOrderOrderLine $line): void
{
if (!$this->lines->contains($line)) {
$this->lines[] = $line;
$line->setOrder($this);
}
}
public function removeLine(IzOrderOrderLine $line): void
{
$this->lines->removeElement($line);
}
public function getClient(): ?IzOrderClient
{
return $this->client;
}
public function setClient(?IzOrderClient $client): void
{
$this->client = $client;
if ($client) {
$this->setCodeClient($client->getCodeClient());
$this->setNumeroDeRepresentant(($representant = $client->getCodeRepresentant()) ? $representant->getCodeRepresentant() : '00');
$this->setCodeFiliere($client->getCodeFiliere());
$this->setNomLivraison((string) $client->getRaisonSociale());
$this->setAdresseLivraison(trim($client->getAdresse1().' '.$client->getAdresse2()));
$this->setCodePostalLivraison($client->getCodePostal() ?? '');
$this->setVilleLivraison($client->getVille() ?? '');
$this->setPaysLivraison($client->getPays() ?? '');
}
}
public function getSendAt(): ?\DateTimeImmutable
{
return $this->sendAt;
}
public function setSendAt(?\DateTimeImmutable $sendAt): void
{
$this->sendAt = $sendAt;
}
}