AbstractProduct.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <?php
  2. namespace AppBundle\Entity\Product;
  3. use AppBundle\Entity\Core\Tagg;
  4. use AppBundle\Entity\Organization\Organization;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use Dunglas\ApiBundle\Annotation\Iri;
  7. use Symfony\Component\Validator\Constraints as Assert;
  8. use Doctrine\Common\Collections\ArrayCollection;
  9. use Symfony\Component\Serializer\Annotation\Groups;
  10. use AppBundle\Annotation\DefaultField;
  11. use AppBundle\Entity\Traits\TimestampableEntity;
  12. use AppBundle\Entity\Traits\CreatorUpdaterEntity;
  13. use AppBundle\Validator\Constraints\Product as OpentalentAssert;
  14. /**
  15. * Classe de base de @see Equipment, Intangible
  16. *
  17. *
  18. */
  19. #[ORM\Entity]
  20. #[ORM\Table(name: 'Product')]
  21. #[ORM\InheritanceType('SINGLE_TABLE')]
  22. #[ORM\DiscriminatorColumn(name: 'discr', type: 'string')]
  23. #[ORM\DiscriminatorMap(['equipment' => 'Equipment', 'intangible' => 'Intangible'])]
  24. abstract class AbstractProduct
  25. {
  26. use TimestampableEntity;
  27. use CreatorUpdaterEntity;
  28. /**
  29. * @var int
  30. */
  31. #[ORM\Column(type: 'integer')]
  32. #[ORM\Id]
  33. #[ORM\GeneratedValue(strategy: 'AUTO')]
  34. #[Groups(['equipment', 'intangible', 'equipment_list', 'equipmentrent_list', 'equipmentloan_list', 'equipmentcontrol_list', 'equipmentrepair_list', 'equipmentaccounting_list', 'equipmentmediatheque_list', 'equipmentcostume_list', 'intangible_list', 'place_list', 'examenconvocation_list', 'accessequipment_grid', 'access_details_equipmentloans', 'access_details', 'equipment_details', 'equipment_details_equipmentcomposition', 'own_access', 'own_student_access', 'event_details', 'course_details', 'educationalproject_details', 'booking_event', 'equipment_availability_form', 'examen_details', 'access_intangible_list'])]
  35. private $id;
  36. /**
  37. * @var Organization
  38. *
  39. * @DefaultField
  40. */
  41. #[ORM\ManyToOne(targetEntity: 'AppBundle\Entity\Organization\Organization')]
  42. #[Groups(['equipment', 'intangible'])]
  43. private $organization;
  44. /**
  45. * @var string A short description of the item.
  46. *
  47. * @Iri("https://schema.org/description")
  48. */
  49. #[ORM\Column(type: 'text', nullable: true)]
  50. #[Assert\Type(type: 'string')]
  51. #[Groups(['equipment', 'intangible', 'intangible_list', 'equipment_details', 'equipment_list', 'equipmentmediatheque_list', 'equipmentcostume_list', 'equipmentrent_list', 'equipmentloan_list', 'equipmentcontrol_list', 'equipmentrepair_list', 'equipmentaccounting_list'])]
  52. private $description;
  53. /**
  54. * @var \DateTime
  55. *
  56. * @OpentalentAssert\EquipmentOutCauseDate
  57. */
  58. #[ORM\Column(type: 'date', nullable: true)]
  59. #[Assert\Date]
  60. #[Groups(['equipment', 'equipment_list', 'equipment_reference', 'equipmentloan_list_equipment', 'equipmentmediatheque_list', 'place_list_equipmentuseds', 'examenconvocation_list_equipments', 'equipment_details_equipmentcomposition', 'event_details_equipments', 'course_details_equipments', 'examen_details_equipments', 'educationalproject_details_equipments', 'equipment_details', 'equipmentrent_list_equipment', 'equipmentcostume_list'])]
  61. private $outCauseDate;
  62. /**
  63. * @var ArrayCollection<Tagg>
  64. */
  65. #[ORM\ManyToMany(targetEntity: 'AppBundle\Entity\Core\Tagg', cascade: ['persist'], inversedBy: 'products')]
  66. #[Assert\Valid]
  67. #[ORM\JoinTable(name: 'tag_product', joinColumns: [], inverseJoinColumns: [])]
  68. #[ORM\JoinColumn(name: 'product_id', referencedColumnName: 'id')]
  69. #[ORM\JoinColumn(name: 'tag_id', referencedColumnName: 'id')]
  70. #[Groups(['product_tags', 'manage_tags', 'equipment_list', 'equipmentaccounting_list', 'equipmentcostume_list', 'equipmentmediatheque_list', 'intangible_list'])]
  71. private $tags;
  72. /**
  73. * The constructor
  74. */
  75. public function __construct() {
  76. $this->tags = new ArrayCollection();
  77. }
  78. /**
  79. * Sets id.
  80. *
  81. * @param int $id
  82. *
  83. * @return $this
  84. */
  85. public function setId($id)
  86. {
  87. $this->id = $id;
  88. return $this;
  89. }
  90. /**
  91. * Gets id.
  92. *
  93. * @return int
  94. */
  95. public function getId()
  96. {
  97. return $this->id;
  98. }
  99. /**
  100. * Set description
  101. *
  102. * @param string $description
  103. *
  104. * @return AbstractProduct
  105. */
  106. public function setDescription($description)
  107. {
  108. $this->description = $description;
  109. return $this;
  110. }
  111. /**
  112. * Get description
  113. *
  114. * @return string
  115. */
  116. public function getDescription()
  117. {
  118. return $this->description;
  119. }
  120. /**
  121. * Set organization
  122. *
  123. * @param \AppBundle\Entity\Organization\Organization $organization
  124. *
  125. * @return AbstractProduct
  126. */
  127. public function setOrganization(\AppBundle\Entity\Organization\Organization $organization = null)
  128. {
  129. $this->organization = $organization;
  130. return $this;
  131. }
  132. /**
  133. * Get organization
  134. *
  135. * @return \AppBundle\Entity\Organization\Organization
  136. */
  137. public function getOrganization()
  138. {
  139. return $this->organization;
  140. }
  141. /**
  142. * Sets outCauseDate.
  143. *
  144. * @param \DateTime $outCauseDate
  145. *
  146. * @return $this
  147. */
  148. public function setOutCauseDate(\DateTime $outCauseDate = null)
  149. {
  150. $this->outCauseDate = $outCauseDate;
  151. return $this;
  152. }
  153. /**
  154. * Gets outCauseDate.
  155. *
  156. * @return \DateTime
  157. */
  158. public function getOutCauseDate()
  159. {
  160. return $this->outCauseDate ? $this->outCauseDate->format('Y-m-d') : $this->outCauseDate;
  161. }
  162. /**
  163. * Add tag
  164. *
  165. * @param \AppBundle\Entity\Core\Tagg $tag
  166. *
  167. * @return AbstractProduct
  168. */
  169. public function addTag(\AppBundle\Entity\Core\Tagg $tag)
  170. {
  171. $this->tags[] = $tag;
  172. return $this;
  173. }
  174. /**
  175. * Remove tag
  176. *
  177. * @param \AppBundle\Entity\Core\Tagg $tag
  178. */
  179. public function removeTag(\AppBundle\Entity\Core\Tagg $tag)
  180. {
  181. $this->tags->removeElement($tag);
  182. }
  183. /**
  184. * Get tags
  185. *
  186. * @return \Doctrine\Common\Collections\Collection
  187. */
  188. public function getTags()
  189. {
  190. return $this->tags;
  191. }
  192. }