<?php
declare(strict_types=1);
namespace App\Infrastructure\Doctrine\Entity;
use App\Domain\Common\Entity\Cart;
use App\Domain\Common\Entity\IzOrderClient;
use App\Infrastructure\Doctrine\Entity\Traits\IdableTrait;
use App\Infrastructure\Doctrine\Entity\Traits\TimestampableTrait;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Infrastructure\Doctrine\Repository\DoctrineCartRepository")
*/
class DoctrineCart implements Cart
{
use IdableTrait;
use TimestampableTrait;
/**
* @ORM\OneToOne(
* targetEntity="App\Infrastructure\Doctrine\Entity\DoctrineIzOrderClient",
* inversedBy="cart",
* )
* @ORM\JoinColumn(referencedColumnName="code_client", nullable=false)
*/
private ?IzOrderClient $client = null;
/**
* @ORM\Column(type="json")
*/
private array $content = [];
/**
* @ORM\Column(type="integer")
*/
private int $lastArticlePosition = 0;
public function getClient(): ?IzOrderClient
{
return $this->client;
}
public function setClient(IzOrderClient $client): void
{
$this->client = $client;
}
public function getContent(): array
{
return $this->content;
}
public function setContent(array $content): void
{
$this->content = $content;
}
public function addContent(string $codeArticle, int $quantity = 1): void
{
if (empty($this->content[$codeArticle])) {
$this->setLastArticlePosition($this->getLastArticlePosition() + 1);
$this->content += [$codeArticle => [
Cart::QUANTITY_KEY => 0,
Cart::POSITION_KEY => $this->getLastArticlePosition(),
]];
}
$this->content[$codeArticle][Cart::QUANTITY_KEY] += $quantity;
}
public function editContent(string $codeArticle, int $quantity = 1): void
{
if (!empty($this->content[$codeArticle])) {
$this->content[$codeArticle][Cart::QUANTITY_KEY] = $quantity;
if ($quantity <= 0) {
$this->removeContent($codeArticle);
}
}
}
public function removeContent(string $codeArticle): void
{
unset($this->content[$codeArticle]);
}
public function getLastArticlePosition(): int
{
return $this->lastArticlePosition;
}
public function setLastArticlePosition(int $lastArticlePosition): void
{
$this->lastArticlePosition = $lastArticlePosition;
}
}