src/Entity/OrderRequest.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Entity\Tag\HasAuthToken;
  4. use App\Entity\Tag\IsBlameable;
  5. use App\Entity\Traits\AuthTokenTrait;
  6. use App\Entity\Traits\DefaultOrderFields;
  7. use App\Entity\Traits\SerializableIdTrait;
  8. use App\Repository\OrderRequestRepository;
  9. use App\Service\OrderRequestStateHandler;
  10. use DateTimeImmutable;
  11. use Doctrine\Common\Collections\ArrayCollection;
  12. use Doctrine\Common\Collections\Collection;
  13. use Doctrine\ORM\Mapping as ORM;
  14. use Gedmo\Blameable\Traits\BlameableEntity;
  15. use Gedmo\Mapping\Annotation as Gedmo;
  16. use Gedmo\SoftDeleteable\SoftDeleteable;
  17. use Gedmo\SoftDeleteable\Traits\SoftDeleteableEntity;
  18. use Gedmo\Timestampable\Traits\TimestampableEntity;
  19. /**
  20. * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=true, hardDelete=true)
  21. * @Gedmo\Loggable()
  22. */
  23. #[ORM\Table]
  24. #[ORM\Index(name: 'created_by', columns: ['created_by'])]
  25. #[ORM\Index(name: 'updated_by', columns: ['updated_by'])]
  26. #[ORM\Entity(repositoryClass: OrderRequestRepository::class)]
  27. class OrderRequest implements IsBlameable, SoftDeleteable, HasAuthToken
  28. {
  29. use BlameableEntity;
  30. use TimestampableEntity;
  31. use DefaultOrderFields;
  32. use SoftDeleteableEntity;
  33. use AuthTokenTrait;
  34. use SerializableIdTrait;
  35. #[ORM\Column(type: 'string', length: 255)]
  36. private $articleNumber;
  37. /**
  38. * @Gedmo\Versioned
  39. */
  40. #[ORM\Column(type: 'string', length: 255)]
  41. private $state;
  42. #[ORM\OneToMany(mappedBy: 'orderRequest', targetEntity: OrderRequestCustomFieldData::class, orphanRemoval: true)]
  43. private iterable $orderRequestCustomFieldData;
  44. #[ORM\OneToMany(mappedBy: 'order', targetEntity: OrderRequestLineItem::class, cascade: ['all'], orphanRemoval: true)]
  45. private iterable $lineItems;
  46. /**
  47. * @Gedmo\Versioned
  48. */
  49. #[ORM\Column(type: 'datetime', nullable: true)]
  50. private $stateUpdatedAt;
  51. #[ORM\OneToMany(targetEntity: CertificateUpload::class, mappedBy: 'orderRequest')]
  52. private $certificates;
  53. #[ORM\Column(type: 'boolean', nullable: false, options: ['default' => false])]
  54. private bool $organic = false;
  55. #[ORM\Column(type: 'date_immutable', nullable: true, options: ['default' => null])]
  56. private ?DateTimeImmutable $estimatedCompletionDate = null;
  57. public function __construct()
  58. {
  59. $this->orderRequestCustomFieldData = new ArrayCollection();
  60. $this->state = OrderRequestStateHandler::STATE_INCOMPLETE;
  61. $this->lineItems = new ArrayCollection();
  62. $this->certificates = new ArrayCollection();
  63. }
  64. public function isOrganic(): bool
  65. {
  66. return $this->organic;
  67. }
  68. public function setOrganic(bool $organic): OrderRequest
  69. {
  70. $this->organic = $organic;
  71. return $this;
  72. }
  73. public function getEstimatedCompletionDate(): ?\DateTimeInterface
  74. {
  75. return $this->estimatedCompletionDate;
  76. }
  77. public function setEstimatedCompletionDate(?\DateTimeInterface $estimatedCompletionDate): OrderRequest
  78. {
  79. $this->estimatedCompletionDate = DateTimeImmutable::createFromInterface($estimatedCompletionDate);
  80. return $this;
  81. }
  82. public function getState(): ?string
  83. {
  84. return $this->state;
  85. }
  86. public function setState(string $state): self
  87. {
  88. $this->state = $state;
  89. return $this;
  90. }
  91. public function getOrderRequestCustomFieldData(): Collection
  92. {
  93. return $this->orderRequestCustomFieldData;
  94. }
  95. public function setOrderRequestCustomFieldData(iterable $collection): self
  96. {
  97. $this->orderRequestCustomFieldData = $collection;
  98. return $this;
  99. }
  100. public function addOrderRequestCustomFieldData(OrderRequestCustomFieldData $orderRequestCustomFieldData): self
  101. {
  102. if (!$this->orderRequestCustomFieldData->contains($orderRequestCustomFieldData)) {
  103. $this->orderRequestCustomFieldData[] = $orderRequestCustomFieldData;
  104. $orderRequestCustomFieldData->setOrderRequest($this);
  105. }
  106. return $this;
  107. }
  108. public function removeOrderRequestCustomFieldData(OrderRequestCustomFieldData $orderRequestCustomFieldData): self
  109. {
  110. if ($this->orderRequestCustomFieldData->contains($orderRequestCustomFieldData)) {
  111. $this->orderRequestCustomFieldData->removeElement($orderRequestCustomFieldData);
  112. // set the owning side to null (unless already changed)
  113. if ($orderRequestCustomFieldData->getOrderRequest() === $this) {
  114. $orderRequestCustomFieldData->setOrderRequest(null);
  115. }
  116. }
  117. return $this;
  118. }
  119. /**
  120. * @return mixed
  121. */
  122. public function getArticleNumber()
  123. {
  124. return $this->articleNumber;
  125. }
  126. /**
  127. * @param mixed $articleNumber
  128. *
  129. * @return OrderRequest
  130. */
  131. public function setArticleNumber($articleNumber)
  132. {
  133. $this->articleNumber = $articleNumber;
  134. return $this;
  135. }
  136. public function getLineItems(): Collection
  137. {
  138. return $this->lineItems;
  139. }
  140. public function getStateUpdatedAt(): ?\DateTimeInterface
  141. {
  142. return $this->stateUpdatedAt;
  143. }
  144. public function setStateUpdatedAt(?\DateTimeInterface $stateUpdatedAt): self
  145. {
  146. $this->stateUpdatedAt = $stateUpdatedAt;
  147. return $this;
  148. }
  149. /**
  150. * @return Collection|CertificateUpload[]
  151. */
  152. public function getCertificates(): Collection
  153. {
  154. return $this->certificates;
  155. }
  156. public function addCertificate(CertificateUpload $certificate): self
  157. {
  158. if (!$this->certificates->contains($certificate)) {
  159. $this->certificates[] = $certificate;
  160. $certificate->setOrderRequest($this);
  161. }
  162. return $this;
  163. }
  164. public function removeCertificate(CertificateUpload $certificate): self
  165. {
  166. if ($this->certificates->removeElement($certificate)) {
  167. // set the owning side to null (unless already changed)
  168. if ($certificate->getOrderRequest() === $this) {
  169. $certificate->setOrderRequest(null);
  170. }
  171. }
  172. return $this;
  173. }
  174. }