<?php
namespace App\Entity;
use App\Repository\JornadaCursoRepository;
use DateTime;
use DateTimeImmutable;
use DateTimeInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
#[ORM\Entity(repositoryClass: JornadaCursoRepository::class)]
class JornadaCurso
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[Assert\NotBlank]
#[ORM\Column(length: 255)]
private ?string $codigoMinisterio;
#[Assert\NotBlank]
#[ORM\Column(length: 255)]
private ?string $nombre;
#[Assert\NotBlank]
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
private ?DateTimeInterface $fechaHora;
#[Assert\NotBlank]
#[Assert\LessThanOrEqual(propertyPath: 'fechaFinInscripciones')]
#[ORM\Column(type: Types::DATE_MUTABLE)]
private ?DateTimeInterface $fechaInicioInscripciones;
#[Assert\NotBlank]
#[Assert\GreaterThanOrEqual(propertyPath: 'fechaInicioInscripciones')]
#[ORM\Column(type: Types::DATE_MUTABLE)]
private ?DateTimeInterface $fechaFinInscripciones;
#[Assert\NotBlank]
#[ORM\Column(length: 255)]
private ?string $lugar;
#[Assert\NotBlank]
#[ORM\ManyToOne(inversedBy: 'jornadasCursos')]
#[ORM\JoinColumn(nullable: false)]
private ?Localidad $localidad = null;
#[Assert\NotBlank]
#[Assert\PositiveOrZero]
#[ORM\Column]
private ?int $numPlazas = 0;
#[Assert\NotBlank]
#[ORM\Column(type: Types::TEXT)]
private ?string $descripcion;
#[Assert\NotBlank]
#[Assert\PositiveOrZero]
#[ORM\Column]
private ?float $importe = 0;
// Pendiente => 0
// Completada => 1
#[Assert\NotBlank]
#[ORM\Column(type: Types::SMALLINT)]
private ?int $estado = 0;
#[ORM\Column]
private ?bool $visible = true;
#[ORM\Column]
private ?bool $borrado = false;
#[ORM\Column(length: 255, nullable: true)]
private ?string $imagen = null;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $seoTitle = null;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $seoDescription = null;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $seoKeywords = null;
#[Assert\NotBlank]
#[Assert\Regex(pattern: '/^[a-z0-9]+(?:-[a-z0-9]+)*$/')]
#[ORM\Column(type: 'string', length: 255)]
private ?string $slug = null;
#[ORM\OneToMany(mappedBy: 'jornadaCurso', targetEntity: InscripcionUsuarioJornadaCurso::class)]
private Collection $inscripcionesUsuariosJornadasCursos;
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
private ?DateTimeInterface $fechaHoraCreacion = null;
public function __construct()
{
$this->inscripcionesUsuariosJornadasCursos = new ArrayCollection();
$this->fechaHoraCreacion = new DateTime();
}
public function getId(): ?int
{
return $this->id;
}
public function getCodigoMinisterio(): ?string
{
return $this->codigoMinisterio;
}
public function setCodigoMinisterio(?string $codigoMinisterio): static
{
$this->codigoMinisterio = $codigoMinisterio;
return $this;
}
public function getNombre(): ?string
{
return $this->nombre;
}
public function setNombre(?string $nombre): static
{
$this->nombre = $nombre;
return $this;
}
public function getFechaHora(): ?DateTimeInterface
{
return $this->fechaHora;
}
public function setFechaHora(?DateTimeInterface $fechaHora): static
{
$this->fechaHora = $fechaHora;
return $this;
}
public function getFechaInicioInscripciones(): ?DateTimeInterface
{
return $this->fechaInicioInscripciones;
}
public function setFechaInicioInscripciones(?DateTimeInterface $fechaInicioInscripciones): static
{
$this->fechaInicioInscripciones = $fechaInicioInscripciones;
return $this;
}
public function getFechaFinInscripciones(): ?DateTimeInterface
{
return $this->fechaFinInscripciones;
}
public function setFechaFinInscripciones(?DateTimeInterface $fechaFinInscripciones): static
{
$this->fechaFinInscripciones = $fechaFinInscripciones;
return $this;
}
public function getLugar(): ?string
{
return $this->lugar;
}
public function setLugar(?string $lugar): static
{
$this->lugar = $lugar;
return $this;
}
public function getLocalidad(): ?Localidad
{
return $this->localidad;
}
public function setLocalidad(?Localidad $localidad): static
{
$this->localidad = $localidad;
return $this;
}
public function getNumPlazas(): ?int
{
return $this->numPlazas;
}
public function setNumPlazas(?int $numPlazas): static
{
$this->numPlazas = $numPlazas;
return $this;
}
public function getDescripcion(): ?string
{
return $this->descripcion;
}
public function setDescripcion(?string $descripcion): static
{
$this->descripcion = $descripcion;
return $this;
}
public function getImporte(): ?float
{
return $this->importe;
}
public function setImporte(?float $importe): static
{
$this->importe = $importe;
return $this;
}
public function getEstado(): ?int
{
return $this->estado;
}
public function setEstado(?int $estado): static
{
$this->estado = $estado;
return $this;
}
public function isVisible(): ?bool
{
return $this->visible;
}
public function setVisible(?bool $visible): static
{
$this->visible = $visible;
return $this;
}
public function isBorrado(): ?bool
{
return $this->borrado;
}
public function setBorrado(?bool $borrado): static
{
$this->borrado = $borrado;
return $this;
}
public function getImagen(): ?string
{
return $this->imagen;
}
public function setImagen(?string $imagen): static
{
$this->imagen = $imagen;
return $this;
}
public function getSeoTitle(): ?string
{
return $this->seoTitle;
}
public function setSeoTitle(?string $seoTitle): self
{
$this->seoTitle = $seoTitle;
return $this;
}
public function getSeoDescription(): ?string
{
return $this->seoDescription;
}
public function setSeoDescription(?string $seoDescription): self
{
$this->seoDescription = $seoDescription;
return $this;
}
public function getSeoKeywords(): ?string
{
return $this->seoKeywords;
}
public function setSeoKeywords(?string $seoKeywords): self
{
$this->seoKeywords = $seoKeywords;
return $this;
}
public function getSlug(): ?string
{
return $this->slug;
}
public function setSlug(string $slug): static
{
$this->slug = $slug;
return $this;
}
// Comprueba si $now esta dentro de las fechas de inicio y fin de solicitud de inscripción del curso.
public function estaInscripcionAbierta(DateTimeInterface $now = null): bool
{
$now ??= new DateTimeImmutable();
if ($this->getFechaInicioInscripciones() && $now < $this->getFechaInicioInscripciones()) {
return false;
}
if ($this->getFechaFinInscripciones() && $now > $this->getFechaFinInscripciones()) {
return false;
}
return true;
}
/**
* @return Collection<int, InscripcionUsuarioJornadaCurso>
*/
public function getInscripcionesUsuariosJornadasCursos(): Collection
{
return $this->inscripcionesUsuariosJornadasCursos;
}
public function addInscripcionesUsuariosJornadasCurso(InscripcionUsuarioJornadaCurso $inscripcionesUsuariosJornadasCurso): static
{
if (!$this->inscripcionesUsuariosJornadasCursos->contains($inscripcionesUsuariosJornadasCurso)) {
$this->inscripcionesUsuariosJornadasCursos->add($inscripcionesUsuariosJornadasCurso);
$inscripcionesUsuariosJornadasCurso->setJornadaCurso($this);
}
return $this;
}
public function removeInscripcionesUsuariosJornadasCurso(InscripcionUsuarioJornadaCurso $inscripcionesUsuariosJornadasCurso): static
{
if ($this->inscripcionesUsuariosJornadasCursos->removeElement($inscripcionesUsuariosJornadasCurso)) {
// set the owning side to null (unless already changed)
if ($inscripcionesUsuariosJornadasCurso->getJornadaCurso() === $this) {
$inscripcionesUsuariosJornadasCurso->setJornadaCurso(null);
}
}
return $this;
}
public function getFechaHoraCreacion(): ?DateTimeInterface
{
return $this->fechaHoraCreacion;
}
public function setFechaHoraCreacion(DateTimeInterface $fechaHoraCreacion): static
{
$this->fechaHoraCreacion = $fechaHoraCreacion;
return $this;
}
}