<?php
namespace App\Entity;
use App\Enum\EstadoInvitacionConvocatoriaEnum;
use App\Enum\TipoInvitacionConvocatoriaEnum;
use App\Repository\Doctrine\HistorialInvitacionConvocatoriaRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=HistorialInvitacionConvocatoriaRepository::class)
* @ORM\Table(name="historial_invitacion_convocatoria")
* @ORM\HasLifecycleCallbacks()
*/
class HistorialInvitacionConvocatoria extends BaseEntity
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private ?int $id = null;
/**
* @ORM\ManyToOne(targetEntity=SolicitudAccionFormativa::class)
* @ORM\JoinColumn(nullable=false)
*/
private ?SolicitudAccionFormativa $convocatoria = null;
/**
* @ORM\ManyToOne(targetEntity=Grupo::class)
* @ORM\JoinColumn(nullable=true)
*/
private ?Grupo $grupo = null;
/**
* @ORM\ManyToOne(targetEntity=PropietarioContenido::class)
* @ORM\JoinColumn(nullable=true)
*/
private ?PropietarioContenido $entidadColaboradora = null;
/**
* @ORM\Column(type="string", length=50)
*/
private ?string $tipoInvitacion = null;
/**
* @ORM\Column(type="datetime")
*/
private ?\DateTimeInterface $fechaEnvio = null;
/**
* @ORM\Column(type="string", length=255)
*/
private ?string $destinatarioEmail = null;
/**
* @ORM\Column(type="string", length=255)
*/
private ?string $destinatarioNombre = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $destinatarioDni = null;
/**
* @ORM\Column(type="string", length=500)
*/
private ?string $asuntoEnviado = null;
/**
* @ORM\Column(type="text", nullable=true)
*/
private ?string $cuerpoEnviado = null;
/**
* @ORM\Column(type="string", length=100, nullable=true)
*/
private ?string $plantillaUsada = null;
/**
* @ORM\Column(type="string", length=20)
*/
private ?string $estadoEnvio = null;
/**
* @ORM\Column(type="text", nullable=true)
*/
private ?string $errorEnvio = null;
/**
* @ORM\Column(type="json", nullable=true)
*/
private ?array $metadatos = null;
public function getId(): ?int
{
return $this->id;
}
public function getConvocatoria(): ?SolicitudAccionFormativa
{
return $this->convocatoria;
}
public function setConvocatoria(?SolicitudAccionFormativa $convocatoria): self
{
$this->convocatoria = $convocatoria;
return $this;
}
public function getGrupo(): ?Grupo
{
return $this->grupo;
}
public function setGrupo(?Grupo $grupo): self
{
$this->grupo = $grupo;
return $this;
}
public function getEntidadColaboradora(): ?PropietarioContenido
{
return $this->entidadColaboradora;
}
public function setEntidadColaboradora(?PropietarioContenido $entidadColaboradora): self
{
$this->entidadColaboradora = $entidadColaboradora;
return $this;
}
public function getTipoInvitacion(): ?TipoInvitacionConvocatoriaEnum
{
return $this->tipoInvitacion ? TipoInvitacionConvocatoriaEnum::from($this->tipoInvitacion) : null;
}
public function setTipoInvitacion(TipoInvitacionConvocatoriaEnum|string $tipoInvitacion): self
{
$this->tipoInvitacion = $tipoInvitacion instanceof TipoInvitacionConvocatoriaEnum ? $tipoInvitacion->value : $tipoInvitacion;
return $this;
}
public function getFechaEnvio(): ?\DateTimeInterface
{
return $this->fechaEnvio;
}
public function setFechaEnvio(\DateTimeInterface $fechaEnvio): self
{
$this->fechaEnvio = $fechaEnvio;
return $this;
}
public function getDestinatarioEmail(): ?string
{
return $this->destinatarioEmail;
}
public function setDestinatarioEmail(string $destinatarioEmail): self
{
$this->destinatarioEmail = $destinatarioEmail;
return $this;
}
public function getDestinatarioNombre(): ?string
{
return $this->destinatarioNombre;
}
public function setDestinatarioNombre(string $destinatarioNombre): self
{
$this->destinatarioNombre = $destinatarioNombre;
return $this;
}
public function getDestinatarioDni(): ?string
{
return $this->destinatarioDni;
}
public function setDestinatarioDni(?string $destinatarioDni): self
{
$this->destinatarioDni = $destinatarioDni;
return $this;
}
public function getAsuntoEnviado(): ?string
{
return $this->asuntoEnviado;
}
public function setAsuntoEnviado(string $asuntoEnviado): self
{
$this->asuntoEnviado = $asuntoEnviado;
return $this;
}
public function getCuerpoEnviado(): ?string
{
return $this->cuerpoEnviado;
}
public function setCuerpoEnviado(?string $cuerpoEnviado): self
{
$this->cuerpoEnviado = $cuerpoEnviado;
return $this;
}
public function getPlantillaUsada(): ?string
{
return $this->plantillaUsada;
}
public function setPlantillaUsada(?string $plantillaUsada): self
{
$this->plantillaUsada = $plantillaUsada;
return $this;
}
public function getEstadoEnvio(): ?EstadoInvitacionConvocatoriaEnum
{
return $this->estadoEnvio ? EstadoInvitacionConvocatoriaEnum::from($this->estadoEnvio) : null;
}
public function setEstadoEnvio(EstadoInvitacionConvocatoriaEnum|string $estadoEnvio): self
{
$this->estadoEnvio = $estadoEnvio instanceof EstadoInvitacionConvocatoriaEnum ? $estadoEnvio->value : $estadoEnvio;
return $this;
}
public function getErrorEnvio(): ?string
{
return $this->errorEnvio;
}
public function setErrorEnvio(?string $errorEnvio): self
{
$this->errorEnvio = $errorEnvio;
return $this;
}
public function getMetadatos(): ?array
{
return $this->metadatos;
}
public function setMetadatos(?array $metadatos): self
{
$this->metadatos = $metadatos;
return $this;
}
/**
* @ORM\PrePersist
*/
public function onPrePersist(): void
{
if ($this->fechaEnvio === null) {
$this->fechaEnvio = new \DateTime();
}
}
/**
* Comprueba si el envío fue exitoso
*/
public function isExitoso(): bool
{
return $this->getEstadoEnvio() === EstadoInvitacionConvocatoriaEnum::ENVIADO;
}
/**
* Marca el envío como exitoso
*/
public function marcarExitoso(): self
{
$this->setEstadoEnvio(EstadoInvitacionConvocatoriaEnum::ENVIADO);
$this->errorEnvio = null;
return $this;
}
/**
* Marca el envío como fallido
*/
public function marcarFallido(string $error): self
{
$this->setEstadoEnvio(EstadoInvitacionConvocatoriaEnum::FALLIDO);
$this->errorEnvio = $error;
return $this;
}
/**
* Obtiene tipos de invitación disponibles
*/
public static function getTiposInvitacion(): array
{
return array_map(fn($case) => $case->value, TipoInvitacionConvocatoriaEnum::cases());
}
/**
* Valida si un tipo de invitación es válido
*/
public static function esTipoValido(string $tipo): bool
{
return TipoInvitacionConvocatoriaEnum::tryFrom($tipo) !== null;
}
}