<?php
namespace App\Entity\PointsCatalog;
use App\Entity\AbstractBase;
use App\Entity\Garages\Garage;
use App\Entity\Interfaces\SiteInterface;
use App\Entity\MiniAbstractBase;
use App\Entity\Traits\SiteTrait;
use App\Repository\PointsCatalog\CatalogPointConfigRepository;
use DateTime;
use DateTimeInterface;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* @ORM\Table(name="vulco_points_catalog_config", indexes={@ORM\Index(name="catalog_point_config_site_idx", columns={"site"})})
* @ORM\Entity(repositoryClass=CatalogPointConfigRepository::class)
* @Gedmo\SoftDeleteable(fieldName="removedAt", timeAware=false)
*/
class CatalogPointConfig extends AbstractBase implements SiteInterface
{
use SiteTrait;
/**
* @ORM\Column(type="date", nullable=false)
*/
private DateTimeInterface $expirationDate;
/**
* @ORM\Column(type="float", nullable=false, options={"default": 4800})
*/
private float $pointsLimit = Garage::DEFAULT_POINTS_LIMIT;
public function __construct(string $site, DateTimeInterface $expirationDate)
{
$this->site = $site;
$this->expirationDate = $expirationDate;
}
public function getExpirationDate(): DateTimeInterface
{
return $this->expirationDate;
}
public function setExpirationDate(DateTimeInterface $expirationDate): self
{
$this->expirationDate = $expirationDate;
return $this;
}
public function getExpirationDatePastYearLastDate(): DateTime
{
$expirationDate = clone $this->expirationDate;
return DateTime::createFromFormat(MiniAbstractBase::DEFAULT_DATE_DATABASE_FORMAT, $expirationDate->format('Y').'-12-31')->modify('-1 year'); // expiration date year - 1
}
public function getExpirationDatePastYear(): string
{
$expirationDate = clone $this->expirationDate;
$expirationDate = $expirationDate->modify('-1 year');
return $expirationDate->format('Y');
}
public function update(string $site, DateTimeInterface $expirationDate, float $pointsLimit): void
{
$this->site = $site;
$this->expirationDate = clone $expirationDate;
$this->pointsLimit = $pointsLimit;
}
public function getPointsLimit(): float
{
return $this->pointsLimit;
}
public function setPointsLimit(float $pointsLimit): self
{
$this->pointsLimit = $pointsLimit;
return $this;
}
}