<?php
namespace App\Entity\ExternalPartner;
use App\Entity\RecurrentJob;
use App\Utility\DateTimeUtility;
use DateTime;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Exception;
/**
* @ORM\Entity
*
* @ORM\Table(
* name="integrated_external_partner_customer_quotas"
* )
*/
class IntegratedExternalPartnerCustomerQuota
{
public function __construct(IntegratedExternalPartnerCustomer $integratedExternalPartnerCustomer, DateTime $startDate, DateTime $endDate, int $totalQuota = 0, bool $isActive = false)
{
$this->integratedExternalPartnerCustomer = $integratedExternalPartnerCustomer;
$this->totalQuota = $totalQuota;
$this->endDate = $endDate;
$this->startDate = $startDate;
$this->usedQuota = 0;
$this->isActive = $isActive;
}
/**
* @var string
*
* @ORM\GeneratedValue(strategy="CUSTOM")
*
* @ORM\CustomIdGenerator(class="App\Utility\DatabaseIdGenerator")
*
* @ORM\Column(name="id", type="guid")
*
* @ORM\Id
*/
protected $id;
public function getId(): string
{
return $this->id;
}
/**
* @var int
*
* @ORM\Column(name="total_quota", type="integer")
*/
private $totalQuota;
public function getTotalQuota(): int
{
return $this->totalQuota;
}
public function setTotalQuota(int $totalQuota): void
{
$this->totalQuota = $totalQuota;
}
/**
* @var int
*
* @ORM\Column(name="used_quota", type="integer")
*/
private $usedQuota;
public function getUsedQuota(): int
{
return $this->usedQuota;
}
public function setUsedQuota(int $usedQuota): void
{
$this->usedQuota = $usedQuota;
throw new Exception('Use IntegratedExternalPartnerCustomerService::increaseQuotaIfPossible/decreaseQuotaIfPossible or catch this exception if you really know what you are doing.');
}
/**
* @var bool
*
* @ORM\Column(name="is_active", type="boolean")
*/
private $isActive;
public function getIsActive(): bool
{
return $this->isActive;
}
public function setIsActive(bool $isActive): void
{
$this->isActive = $isActive;
}
/**
* @var DateTime
*
* @ORM\Column(name="end_date", type="datetime", nullable=false)
*/
protected $endDate;
public function setEndDate(DateTime $endDate): void
{
$this->endDate = $endDate;
}
public function getEndDate(): DateTime
{
return $this->endDate;
}
/**
* @var DateTime
*
* @ORM\Column(name="start_date", type="datetime", nullable=false)
*/
protected $startDate;
public function setStartDate(DateTime $startDate): void
{
$this->startDate = $startDate;
}
public function getStartDate(): DateTime
{
return $this->startDate;
}
/**
* @var IntegratedExternalPartnerCustomer
*
* @ORM\ManyToOne(targetEntity="App\Entity\ExternalPartner\IntegratedExternalPartnerCustomer", inversedBy="externalPartnerQuotas", cascade={"persist"})
*
* @ORM\JoinColumn(name="integrated_external_partner_customers_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
protected $integratedExternalPartnerCustomer;
public function getIntegratedExternalPartnerCustomer(): IntegratedExternalPartnerCustomer
{
return $this->integratedExternalPartnerCustomer;
}
public function setIntegratedExternalPartnerCustomer(IntegratedExternalPartnerCustomer $integratedExternalPartnerCustomer): void
{
$this->integratedExternalPartnerCustomer = $integratedExternalPartnerCustomer;
}
public function getIsCurrent(): bool
{
if ($this->getIsInThePast()) {
return false;
} elseif ($this->getIsInTheFuture()) {
return false;
}
return true;
}
public function getIsInThePast(): bool
{
if ($this->endDate < DateTimeUtility::createDateTimeUtc()) {
return true;
}
return false;
}
public function getIsInTheFuture(): bool
{
if ($this->startDate > DateTimeUtility::createDateTimeUtc()) {
return true;
}
return false;
}
/**
* @var RecurrentJob|Collection
*
* @ORM\OneToMany(targetEntity="App\Entity\RecurrentJob", mappedBy="quota", cascade={"persist", "remove"})
*/
protected $recurrentJobs;
public function getRecurrentJobs(): ?Collection
{
return $this->recurrentJobs;
}
/**
* @var DateTime
*
* @ORM\Column(name="last_warned_about_at", type="datetime", nullable=true)
*/
protected $lastWarnedAboutAt;
public function setLastWarnedAboutAt(?DateTime $lastWarnedAboutAt): void
{
$this->lastWarnedAboutAt = $lastWarnedAboutAt;
}
public function getLastWarnedAboutAt(): ?DateTime
{
return $this->lastWarnedAboutAt;
}
public function getRemainingQuota(): int
{
return $this->getTotalQuota() - $this->getUsedQuota();
}
}