src/App/Entity/ExternalPartner/IntegratedExternalPartnerCustomerQuota.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Entity\ExternalPartner;
  3. use App\Entity\RecurrentJob;
  4. use App\Utility\DateTimeUtility;
  5. use DateTime;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\ORM\Mapping as ORM;
  8. use Exception;
  9. /**
  10. * @ORM\Entity
  11. *
  12. * @ORM\Table(
  13. * name="integrated_external_partner_customer_quotas"
  14. * )
  15. */
  16. class IntegratedExternalPartnerCustomerQuota
  17. {
  18. public function __construct(IntegratedExternalPartnerCustomer $integratedExternalPartnerCustomer, DateTime $startDate, DateTime $endDate, int $totalQuota = 0, bool $isActive = false)
  19. {
  20. $this->integratedExternalPartnerCustomer = $integratedExternalPartnerCustomer;
  21. $this->totalQuota = $totalQuota;
  22. $this->endDate = $endDate;
  23. $this->startDate = $startDate;
  24. $this->usedQuota = 0;
  25. $this->isActive = $isActive;
  26. }
  27. /**
  28. * @var string
  29. *
  30. * @ORM\GeneratedValue(strategy="CUSTOM")
  31. *
  32. * @ORM\CustomIdGenerator(class="App\Utility\DatabaseIdGenerator")
  33. *
  34. * @ORM\Column(name="id", type="guid")
  35. *
  36. * @ORM\Id
  37. */
  38. protected $id;
  39. public function getId(): string
  40. {
  41. return $this->id;
  42. }
  43. /**
  44. * @var int
  45. *
  46. * @ORM\Column(name="total_quota", type="integer")
  47. */
  48. private $totalQuota;
  49. public function getTotalQuota(): int
  50. {
  51. return $this->totalQuota;
  52. }
  53. public function setTotalQuota(int $totalQuota): void
  54. {
  55. $this->totalQuota = $totalQuota;
  56. }
  57. /**
  58. * @var int
  59. *
  60. * @ORM\Column(name="used_quota", type="integer")
  61. */
  62. private $usedQuota;
  63. public function getUsedQuota(): int
  64. {
  65. return $this->usedQuota;
  66. }
  67. public function setUsedQuota(int $usedQuota): void
  68. {
  69. $this->usedQuota = $usedQuota;
  70. throw new Exception('Use IntegratedExternalPartnerCustomerService::increaseQuotaIfPossible/decreaseQuotaIfPossible or catch this exception if you really know what you are doing.');
  71. }
  72. /**
  73. * @var bool
  74. *
  75. * @ORM\Column(name="is_active", type="boolean")
  76. */
  77. private $isActive;
  78. public function getIsActive(): bool
  79. {
  80. return $this->isActive;
  81. }
  82. public function setIsActive(bool $isActive): void
  83. {
  84. $this->isActive = $isActive;
  85. }
  86. /**
  87. * @var DateTime
  88. *
  89. * @ORM\Column(name="end_date", type="datetime", nullable=false)
  90. */
  91. protected $endDate;
  92. public function setEndDate(DateTime $endDate): void
  93. {
  94. $this->endDate = $endDate;
  95. }
  96. public function getEndDate(): DateTime
  97. {
  98. return $this->endDate;
  99. }
  100. /**
  101. * @var DateTime
  102. *
  103. * @ORM\Column(name="start_date", type="datetime", nullable=false)
  104. */
  105. protected $startDate;
  106. public function setStartDate(DateTime $startDate): void
  107. {
  108. $this->startDate = $startDate;
  109. }
  110. public function getStartDate(): DateTime
  111. {
  112. return $this->startDate;
  113. }
  114. /**
  115. * @var IntegratedExternalPartnerCustomer
  116. *
  117. * @ORM\ManyToOne(targetEntity="App\Entity\ExternalPartner\IntegratedExternalPartnerCustomer", inversedBy="externalPartnerQuotas", cascade={"persist"})
  118. *
  119. * @ORM\JoinColumn(name="integrated_external_partner_customers_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
  120. */
  121. protected $integratedExternalPartnerCustomer;
  122. public function getIntegratedExternalPartnerCustomer(): IntegratedExternalPartnerCustomer
  123. {
  124. return $this->integratedExternalPartnerCustomer;
  125. }
  126. public function setIntegratedExternalPartnerCustomer(IntegratedExternalPartnerCustomer $integratedExternalPartnerCustomer): void
  127. {
  128. $this->integratedExternalPartnerCustomer = $integratedExternalPartnerCustomer;
  129. }
  130. public function getIsCurrent(): bool
  131. {
  132. if ($this->getIsInThePast()) {
  133. return false;
  134. } elseif ($this->getIsInTheFuture()) {
  135. return false;
  136. }
  137. return true;
  138. }
  139. public function getIsInThePast(): bool
  140. {
  141. if ($this->endDate < DateTimeUtility::createDateTimeUtc()) {
  142. return true;
  143. }
  144. return false;
  145. }
  146. public function getIsInTheFuture(): bool
  147. {
  148. if ($this->startDate > DateTimeUtility::createDateTimeUtc()) {
  149. return true;
  150. }
  151. return false;
  152. }
  153. /**
  154. * @var RecurrentJob|Collection
  155. *
  156. * @ORM\OneToMany(targetEntity="App\Entity\RecurrentJob", mappedBy="quota", cascade={"persist", "remove"})
  157. */
  158. protected $recurrentJobs;
  159. public function getRecurrentJobs(): ?Collection
  160. {
  161. return $this->recurrentJobs;
  162. }
  163. /**
  164. * @var DateTime
  165. *
  166. * @ORM\Column(name="last_warned_about_at", type="datetime", nullable=true)
  167. */
  168. protected $lastWarnedAboutAt;
  169. public function setLastWarnedAboutAt(?DateTime $lastWarnedAboutAt): void
  170. {
  171. $this->lastWarnedAboutAt = $lastWarnedAboutAt;
  172. }
  173. public function getLastWarnedAboutAt(): ?DateTime
  174. {
  175. return $this->lastWarnedAboutAt;
  176. }
  177. public function getRemainingQuota(): int
  178. {
  179. return $this->getTotalQuota() - $this->getUsedQuota();
  180. }
  181. }