src/Entity/HistorialInvitacionConvocatoria.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Enum\EstadoInvitacionConvocatoriaEnum;
  4. use App\Enum\TipoInvitacionConvocatoriaEnum;
  5. use App\Repository\Doctrine\HistorialInvitacionConvocatoriaRepository;
  6. use Doctrine\DBAL\Types\Types;
  7. use Doctrine\ORM\Mapping as ORM;
  8. /**
  9. * @ORM\Entity(repositoryClass=HistorialInvitacionConvocatoriaRepository::class)
  10. * @ORM\Table(name="historial_invitacion_convocatoria")
  11. * @ORM\HasLifecycleCallbacks()
  12. */
  13. class HistorialInvitacionConvocatoria extends BaseEntity
  14. {
  15. /**
  16. * @ORM\Id
  17. * @ORM\GeneratedValue
  18. * @ORM\Column(type="integer")
  19. */
  20. private ?int $id = null;
  21. /**
  22. * @ORM\ManyToOne(targetEntity=SolicitudAccionFormativa::class)
  23. * @ORM\JoinColumn(nullable=false)
  24. */
  25. private ?SolicitudAccionFormativa $convocatoria = null;
  26. /**
  27. * @ORM\ManyToOne(targetEntity=Grupo::class)
  28. * @ORM\JoinColumn(nullable=true)
  29. */
  30. private ?Grupo $grupo = null;
  31. /**
  32. * @ORM\ManyToOne(targetEntity=PropietarioContenido::class)
  33. * @ORM\JoinColumn(nullable=true)
  34. */
  35. private ?PropietarioContenido $entidadColaboradora = null;
  36. /**
  37. * @ORM\Column(type="string", length=50)
  38. */
  39. private ?string $tipoInvitacion = null;
  40. /**
  41. * @ORM\Column(type="datetime")
  42. */
  43. private ?\DateTimeInterface $fechaEnvio = null;
  44. /**
  45. * @ORM\Column(type="string", length=255)
  46. */
  47. private ?string $destinatarioEmail = null;
  48. /**
  49. * @ORM\Column(type="string", length=255)
  50. */
  51. private ?string $destinatarioNombre = null;
  52. /**
  53. * @ORM\Column(type="string", length=255, nullable=true)
  54. */
  55. private ?string $destinatarioDni = null;
  56. /**
  57. * @ORM\Column(type="string", length=500)
  58. */
  59. private ?string $asuntoEnviado = null;
  60. /**
  61. * @ORM\Column(type="text", nullable=true)
  62. */
  63. private ?string $cuerpoEnviado = null;
  64. /**
  65. * @ORM\Column(type="string", length=100, nullable=true)
  66. */
  67. private ?string $plantillaUsada = null;
  68. /**
  69. * @ORM\Column(type="string", length=20)
  70. */
  71. private ?string $estadoEnvio = null;
  72. /**
  73. * @ORM\Column(type="text", nullable=true)
  74. */
  75. private ?string $errorEnvio = null;
  76. /**
  77. * @ORM\Column(type="json", nullable=true)
  78. */
  79. private ?array $metadatos = null;
  80. public function getId(): ?int
  81. {
  82. return $this->id;
  83. }
  84. public function getConvocatoria(): ?SolicitudAccionFormativa
  85. {
  86. return $this->convocatoria;
  87. }
  88. public function setConvocatoria(?SolicitudAccionFormativa $convocatoria): self
  89. {
  90. $this->convocatoria = $convocatoria;
  91. return $this;
  92. }
  93. public function getGrupo(): ?Grupo
  94. {
  95. return $this->grupo;
  96. }
  97. public function setGrupo(?Grupo $grupo): self
  98. {
  99. $this->grupo = $grupo;
  100. return $this;
  101. }
  102. public function getEntidadColaboradora(): ?PropietarioContenido
  103. {
  104. return $this->entidadColaboradora;
  105. }
  106. public function setEntidadColaboradora(?PropietarioContenido $entidadColaboradora): self
  107. {
  108. $this->entidadColaboradora = $entidadColaboradora;
  109. return $this;
  110. }
  111. public function getTipoInvitacion(): ?TipoInvitacionConvocatoriaEnum
  112. {
  113. return $this->tipoInvitacion ? TipoInvitacionConvocatoriaEnum::from($this->tipoInvitacion) : null;
  114. }
  115. public function setTipoInvitacion(TipoInvitacionConvocatoriaEnum|string $tipoInvitacion): self
  116. {
  117. $this->tipoInvitacion = $tipoInvitacion instanceof TipoInvitacionConvocatoriaEnum ? $tipoInvitacion->value : $tipoInvitacion;
  118. return $this;
  119. }
  120. public function getFechaEnvio(): ?\DateTimeInterface
  121. {
  122. return $this->fechaEnvio;
  123. }
  124. public function setFechaEnvio(\DateTimeInterface $fechaEnvio): self
  125. {
  126. $this->fechaEnvio = $fechaEnvio;
  127. return $this;
  128. }
  129. public function getDestinatarioEmail(): ?string
  130. {
  131. return $this->destinatarioEmail;
  132. }
  133. public function setDestinatarioEmail(string $destinatarioEmail): self
  134. {
  135. $this->destinatarioEmail = $destinatarioEmail;
  136. return $this;
  137. }
  138. public function getDestinatarioNombre(): ?string
  139. {
  140. return $this->destinatarioNombre;
  141. }
  142. public function setDestinatarioNombre(string $destinatarioNombre): self
  143. {
  144. $this->destinatarioNombre = $destinatarioNombre;
  145. return $this;
  146. }
  147. public function getDestinatarioDni(): ?string
  148. {
  149. return $this->destinatarioDni;
  150. }
  151. public function setDestinatarioDni(?string $destinatarioDni): self
  152. {
  153. $this->destinatarioDni = $destinatarioDni;
  154. return $this;
  155. }
  156. public function getAsuntoEnviado(): ?string
  157. {
  158. return $this->asuntoEnviado;
  159. }
  160. public function setAsuntoEnviado(string $asuntoEnviado): self
  161. {
  162. $this->asuntoEnviado = $asuntoEnviado;
  163. return $this;
  164. }
  165. public function getCuerpoEnviado(): ?string
  166. {
  167. return $this->cuerpoEnviado;
  168. }
  169. public function setCuerpoEnviado(?string $cuerpoEnviado): self
  170. {
  171. $this->cuerpoEnviado = $cuerpoEnviado;
  172. return $this;
  173. }
  174. public function getPlantillaUsada(): ?string
  175. {
  176. return $this->plantillaUsada;
  177. }
  178. public function setPlantillaUsada(?string $plantillaUsada): self
  179. {
  180. $this->plantillaUsada = $plantillaUsada;
  181. return $this;
  182. }
  183. public function getEstadoEnvio(): ?EstadoInvitacionConvocatoriaEnum
  184. {
  185. return $this->estadoEnvio ? EstadoInvitacionConvocatoriaEnum::from($this->estadoEnvio) : null;
  186. }
  187. public function setEstadoEnvio(EstadoInvitacionConvocatoriaEnum|string $estadoEnvio): self
  188. {
  189. $this->estadoEnvio = $estadoEnvio instanceof EstadoInvitacionConvocatoriaEnum ? $estadoEnvio->value : $estadoEnvio;
  190. return $this;
  191. }
  192. public function getErrorEnvio(): ?string
  193. {
  194. return $this->errorEnvio;
  195. }
  196. public function setErrorEnvio(?string $errorEnvio): self
  197. {
  198. $this->errorEnvio = $errorEnvio;
  199. return $this;
  200. }
  201. public function getMetadatos(): ?array
  202. {
  203. return $this->metadatos;
  204. }
  205. public function setMetadatos(?array $metadatos): self
  206. {
  207. $this->metadatos = $metadatos;
  208. return $this;
  209. }
  210. /**
  211. * @ORM\PrePersist
  212. */
  213. public function onPrePersist(): void
  214. {
  215. if ($this->fechaEnvio === null) {
  216. $this->fechaEnvio = new \DateTime();
  217. }
  218. }
  219. /**
  220. * Comprueba si el envío fue exitoso
  221. */
  222. public function isExitoso(): bool
  223. {
  224. return $this->getEstadoEnvio() === EstadoInvitacionConvocatoriaEnum::ENVIADO;
  225. }
  226. /**
  227. * Marca el envío como exitoso
  228. */
  229. public function marcarExitoso(): self
  230. {
  231. $this->setEstadoEnvio(EstadoInvitacionConvocatoriaEnum::ENVIADO);
  232. $this->errorEnvio = null;
  233. return $this;
  234. }
  235. /**
  236. * Marca el envío como fallido
  237. */
  238. public function marcarFallido(string $error): self
  239. {
  240. $this->setEstadoEnvio(EstadoInvitacionConvocatoriaEnum::FALLIDO);
  241. $this->errorEnvio = $error;
  242. return $this;
  243. }
  244. /**
  245. * Obtiene tipos de invitación disponibles
  246. */
  247. public static function getTiposInvitacion(): array
  248. {
  249. return array_map(fn($case) => $case->value, TipoInvitacionConvocatoriaEnum::cases());
  250. }
  251. /**
  252. * Valida si un tipo de invitación es válido
  253. */
  254. public static function esTipoValido(string $tipo): bool
  255. {
  256. return TipoInvitacionConvocatoriaEnum::tryFrom($tipo) !== null;
  257. }
  258. }