<?php
namespace App\Entity;
use App\Repository\CursoRepository;
use App\Validator\IsUrl;
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\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
#[UniqueEntity('codigoCurso')]
#[ORM\Entity(repositoryClass: CursoRepository::class)]
class Curso
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private $id;
#[ORM\ManyToOne(targetEntity: NivelFormativo::class, inversedBy: 'accionesFormativas')]
private ?NivelFormativo $nivelFormativo = null;
#[Assert\NotBlank]
#[Assert\Length(max: 255)]
#[ORM\Column(type: 'string', length: 255)]
private ?string $nombre = null;
#[Assert\NotBlank]
#[Assert\Length(max: 190)]
#[ORM\Column(type: 'string', length: 190, unique: true)]
private ?string $codigoCurso = null;
#[Assert\Range(min: 2025, max: 2035)]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $anualidad = null;
#[ORM\Column(type: 'boolean')]
private bool $certificado = false;
#[ORM\Column(type: 'boolean')]
private bool $destacado = false;
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $aforoTitulares = null;
#[Assert\PositiveOrZero]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $aforoSuplentes = null;
// Se guardará el valor en segundos por si se usa para cálculos.
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $diasDuracion = null;
// Se guardará el valor en segundos por si se usa para cálculos.
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $horasDuracion = null;
// Se guardará el valor en segundos por si se usa para cálculos.
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $horasFormacionEspecifica = null;
// Se guardará el valor en segundos por si se usa para cálculos.
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $horasPracticaProfesional = null;
// Se guardará el valor en segundos por si se usa para cálculos.
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $horasFormacionTransversal = null;
// Se guardará el valor en segundos por si se usa para cálculos.
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $horasFormacionComplementaria = null;
// Se guardará el valor en segundos por si se usa para cálculos.
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $horasTutoriaEspecifica = null;
// Se guardará el valor en segundos por si se usa para cálculos.
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $horasTutoriaPractica = null;
#[Assert\Positive]
#[ORM\Column(type: 'float', nullable: true)]
private ?float $ayudaMaxima = null;
#[ORM\Column(type: 'text', nullable: true)]
private ?string $descripcionCurso = null;
#[ORM\Column(type: 'text', nullable: true)]
private ?string $descripcionNivel = null;
#[ORM\Column(type: 'boolean')]
private bool $borrado = false;
#[Assert\NotBlank]
#[ORM\ManyToOne(targetEntity: AccionFormativa::class, inversedBy: 'cursos')]
#[ORM\JoinColumn(nullable: false)]
private ?AccionFormativa $accionFormativa = null;
#[Assert\NotBlank]
#[ORM\ManyToOne(targetEntity: Localidad::class, inversedBy: 'cursos')]
#[ORM\JoinColumn(nullable: false)]
private ?Localidad $localidad = null;
#[ORM\Column(type: 'boolean')]
private ?bool $visible = null;
#[ORM\Column(type: 'datetime')]
private DateTime|DateTimeInterface|null $fechaCreacion;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $imagen = null;
#[Assert\NotBlank]
#[Assert\Regex(pattern: '/^[a-z0-9]+(?:-[a-z0-9]+)*$/')]
#[ORM\Column(type: 'string', length: 255)]
private ?string $slug = 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;
#[ORM\OneToMany(targetEntity: Solicitud::class, mappedBy: 'curso')]
private Collection $solicitudes;
#[Assert\Range(min: 1, max: 10)]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $edicion = null;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $codigoCertificadoProfesionalJunta = null;
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $numeroConvocatoria = null;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $responsableFormacion = null;
#[Assert\PositiveOrZero]
#[ORM\Column(type: 'float', nullable: true)]
private ?float $costeHoraFormacion = null;
#[Assert\LessThan(propertyPath: 'fechaFinSolicitud')]
#[ORM\Column(type: 'datetime', nullable: true)]
private ?DateTimeInterface $fechaInicioSolicitud = null;
#[Assert\GreaterThan(propertyPath: 'fechaInicioSolicitud')]
#[ORM\Column(type: 'datetime', nullable: true)]
private ?DateTimeInterface $fechaFinSolicitud = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaInformeTecnicoSolicitudes = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaFirmaResolucionSolicitudes = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaPublicacionBopSolicitudes = null;
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $numeroBopSolicitudes = null;
/**
* @IsUrl
*/
#[ORM\Column(type: 'text', nullable: true)]
private ?string $enlaceResolucionBopSolicitudes = null;
#[Assert\LessThan(propertyPath: 'fechaFinCurso')]
#[ORM\Column(type: 'datetime', nullable: true)]
private ?DateTimeInterface $fechaInicioCurso = null;
#[Assert\GreaterThan(propertyPath: 'fechaInicioCurso')]
#[ORM\Column(type: 'datetime', nullable: true)]
private ?DateTimeInterface $fechaFinCurso = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaInicioFormacionEspecifica = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaFinFormacionEspecifica = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaInicioFormacionTransversal = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaFinFormacionTransversal = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaInicioFormacionComplementaria = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaFinFormacionComplementaria = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaInicioPracticas = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaFinPracticas = null;
#[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
private ?DateTimeInterface $fechaInicioTutoriaEspecifica = null;
#[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
private ?DateTimeInterface $fechaFinTutoriaEspecifica = null;
#[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
private ?DateTimeInterface $fechaInicioTutoriaPractica = null;
#[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
private ?DateTimeInterface $fechaFinTutoriaPractica = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaFirmaActaSeleccion = null;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $nombreTecnicoQueFirma = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaFirmaInformeEvaluacion = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaFirmaActaEvaluacion = null;
#[Assert\PositiveOrZero]
#[ORM\Column(type: 'float', nullable: true)]
private ?float $ayudasEconomicas = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaFirmaInformeTecnicoAyudas = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaFirmaResolucionProvisional = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaPublicacionBopProvisional = null;
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $numeroBopProvisional = null;
/**
* @IsUrl
*/
#[ORM\Column(type: 'text', nullable: true)]
private ?string $enlaceResolucionProvisional = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaPlazoAlegaciones = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaInformeDelOrganoInstructor = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaPropuestaResolucionDefinitiva = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaFirmaResolucionDefinitiva = null;
#[ORM\Column(type: 'date', nullable: true)]
private ?DateTimeInterface $fechaPublicacionBopDefinitiva = null;
#[Assert\Positive]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $numeroBopDefinitiva = null;
/**
* @IsUrl
*/
#[ORM\Column(type: 'text', nullable: true)]
private ?string $enlaceResolucionDefinitiva = null;
#[ORM\ManyToOne(targetEntity: EmpresaFormacion::class, inversedBy: 'cursos')]
private ?EmpresaFormacion $empresaFormacion = null;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $cargoTecnicoQueFirma = null;
#[ORM\Column(type: 'boolean')]
private ?bool $requiereCarnetConducir = null;
#[ORM\OneToMany(mappedBy: 'curso', targetEntity: CalendarioCurso::class)]
private Collection $calendario;
// #[ORM\OrderBy(['fechaLimite' => 'ASC'])]
#[ORM\OneToMany(mappedBy: 'curso', targetEntity: TareaCurso::class, cascade: ['persist', 'remove'], orphanRemoval: true)]
private Collection $tareas;
// Este campo es para activar el test de evaluación y la beca en el front.
#[ORM\Column]
private ?bool $testEvaluacionBeca = false;
#[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
private ?\DateTimeInterface $fechaMaximaSolicitudBeca = null;
#[ORM\Column(nullable: true)]
private ?float $costeDiaAsistencia = null;
public function __construct()
{
$this->fechaCreacion = new DateTime();
$this->solicitudes = new ArrayCollection();
$this->calendario = new ArrayCollection();
$this->tareas = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getNivelFormativo(): ?NivelFormativo
{
return $this->nivelFormativo;
}
public function setNivelFormativo(?NivelFormativo $nivelFormativo): self
{
$this->nivelFormativo = $nivelFormativo;
return $this;
}
public function getNombre(): ?string
{
return $this->nombre;
}
/**
* @param mixed $nombre
*/
public function setNombre(?string $nombre): self
{
$this->nombre = $nombre;
return $this;
}
public function getCodigoCurso(): ?string
{
return $this->codigoCurso;
}
public function setCodigoCurso(?string $codigoCurso): self
{
$this->codigoCurso = $codigoCurso;
return $this;
}
public function getAnualidad(): ?int
{
return $this->anualidad;
}
public function setAnualidad(?int $anualidad): self
{
$this->anualidad = $anualidad;
return $this;
}
public function isCertificado(): ?bool
{
return $this->certificado;
}
public function setCertificado(bool $certificado): self
{
$this->certificado = $certificado;
return $this;
}
public function isDestacado(): ?bool
{
return $this->destacado;
}
public function setDestacado(bool $destacado): self
{
$this->destacado = $destacado;
return $this;
}
public function getAforoTitulares(): ?int
{
return $this->aforoTitulares;
}
public function setAforoTitulares(?int $aforoTitulares): self
{
$this->aforoTitulares = $aforoTitulares;
return $this;
}
public function getAforoSuplentes(): ?int
{
return $this->aforoSuplentes;
}
public function setAforoSuplentes(?int $aforoSuplentes): self
{
$this->aforoSuplentes = $aforoSuplentes;
return $this;
}
public function getDiasDuracion(): ?int
{
return $this->diasDuracion;
}
public function setDiasDuracion(?int $diasDuracion): self
{
$this->diasDuracion = $diasDuracion;
return $this;
}
public function getHorasDuracion(): ?int
{
return $this->horasDuracion;
}
public function setHorasDuracion(?int $horasDuracion): self
{
$this->horasDuracion = $horasDuracion;
return $this;
}
public function getHorasFormacionEspecifica(): ?int
{
return $this->horasFormacionEspecifica;
}
public function setHorasFormacionEspecifica(?int $horasFormacionEspecifica): self
{
$this->horasFormacionEspecifica = $horasFormacionEspecifica;
return $this;
}
public function getHorasPracticaProfesional(): ?int
{
return $this->horasPracticaProfesional;
}
public function setHorasPracticaProfesional(?int $horasPracticaProfesional): self
{
$this->horasPracticaProfesional = $horasPracticaProfesional;
return $this;
}
public function getHorasFormacionTransversal(): ?int
{
return $this->horasFormacionTransversal;
}
public function setHorasFormacionTransversal(?int $horasFormacionTransversal): self
{
$this->horasFormacionTransversal = $horasFormacionTransversal;
return $this;
}
public function getHorasFormacionComplementaria(): ?int
{
return $this->horasFormacionComplementaria;
}
public function setHorasFormacionComplementaria(?int $horasFormacionComplementaria): self
{
$this->horasFormacionComplementaria = $horasFormacionComplementaria;
return $this;
}
public function getHorasTutoriaEspecifica(): ?int
{
return $this->horasTutoriaEspecifica;
}
public function setHorasTutoriaEspecifica(?int $horasTutoriaEspecifica): self
{
$this->horasTutoriaEspecifica = $horasTutoriaEspecifica;
return $this;
}
public function getHorasTutoriaPractica(): ?int
{
return $this->horasTutoriaPractica;
}
public function setHorasTutoriaPractica(?int $horasTutoriaPractica): self
{
$this->horasTutoriaPractica = $horasTutoriaPractica;
return $this;
}
public function getAyudaMaxima(): ?float
{
return $this->ayudaMaxima;
}
public function setAyudaMaxima(?float $ayudaMaxima): self
{
$this->ayudaMaxima = $ayudaMaxima;
return $this;
}
public function getDescripcionCurso(): ?string
{
return $this->descripcionCurso;
}
public function setDescripcionCurso(?string $descripcionCurso): self
{
$this->descripcionCurso = $descripcionCurso;
return $this;
}
public function getDescripcionNivel(): ?string
{
return $this->descripcionNivel;
}
public function setDescripcionNivel(?string $descripcionNivel): self
{
$this->descripcionNivel = $descripcionNivel;
return $this;
}
public function isBorrado(): ?bool
{
return $this->borrado;
}
public function setBorrado(bool $borrado): self
{
$this->borrado = $borrado;
return $this;
}
public function getAccionFormativa(): ?AccionFormativa
{
return $this->accionFormativa;
}
public function setAccionFormativa(?AccionFormativa $accionFormativa): self
{
$this->accionFormativa = $accionFormativa;
return $this;
}
public function getLocalidad(): ?Localidad
{
return $this->localidad;
}
public function setLocalidad(?Localidad $localidad): self
{
$this->localidad = $localidad;
return $this;
}
public function isVisible(): ?bool
{
return $this->visible;
}
public function setVisible(bool $visible): self
{
$this->visible = $visible;
return $this;
}
public function getFechaCreacion(): ?DateTimeInterface
{
return $this->fechaCreacion;
}
public function setFechaCreacion(?DateTimeInterface $fechaCreacion): self
{
$this->fechaCreacion = $fechaCreacion;
return $this;
}
public function getImagen(): ?string
{
return $this->imagen;
}
public function setImagen(?string $imagen): self
{
$this->imagen = $imagen;
return $this;
}
public function getSlug(): ?string
{
return $this->slug;
}
public function setSlug(?string $slug): self
{
$this->slug = $slug;
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;
}
/**
* @return Collection<int, Solicitud>
*/
public function getSolicitudes(): Collection
{
return $this->solicitudes;
}
public function addSolicitude(Solicitud $solicitude): self
{
if (!$this->solicitudes->contains($solicitude)) {
$this->solicitudes[] = $solicitude;
$solicitude->setCurso($this);
}
return $this;
}
public function removeSolicitude(Solicitud $solicitude): self
{
// set the owning side to null (unless already changed)
if ($this->solicitudes->removeElement($solicitude) && $solicitude->getCurso() === $this) {
$solicitude->setCurso(null);
}
return $this;
}
public function getEdicion(): ?int
{
return $this->edicion;
}
public function setEdicion(?int $edicion): self
{
$this->edicion = $edicion;
return $this;
}
public function getCodigoCertificadoProfesionalJunta(): ?string
{
return $this->codigoCertificadoProfesionalJunta;
}
public function setCodigoCertificadoProfesionalJunta(?string $codigoCertificadoProfesionalJunta): self
{
$this->codigoCertificadoProfesionalJunta = $codigoCertificadoProfesionalJunta;
return $this;
}
public function getNumeroConvocatoria(): ?int
{
return $this->numeroConvocatoria;
}
public function setNumeroConvocatoria(?int $numeroConvocatoria): self
{
$this->numeroConvocatoria = $numeroConvocatoria;
return $this;
}
public function getResponsableFormacion(): ?string
{
return $this->responsableFormacion;
}
public function setResponsableFormacion(?string $responsableFormacion): self
{
$this->responsableFormacion = $responsableFormacion;
return $this;
}
public function getCosteHoraFormacion(): ?float
{
return $this->costeHoraFormacion;
}
public function setCosteHoraFormacion(?float $costeHoraFormacion): self
{
$this->costeHoraFormacion = $costeHoraFormacion;
return $this;
}
public function getFechaInicioSolicitud(): ?DateTimeInterface
{
return $this->fechaInicioSolicitud;
}
public function setFechaInicioSolicitud(?DateTimeInterface $fechaInicioSolicitud): self
{
$this->fechaInicioSolicitud = $fechaInicioSolicitud;
return $this;
}
public function getFechaFinSolicitud(): ?DateTimeInterface
{
return $this->fechaFinSolicitud;
}
public function setFechaFinSolicitud(?DateTimeInterface $fechaFinSolicitud): self
{
$this->fechaFinSolicitud = $fechaFinSolicitud;
return $this;
}
public function getFechaInformeTecnicoSolicitudes(): ?DateTimeInterface
{
return $this->fechaInformeTecnicoSolicitudes;
}
public function setFechaInformeTecnicoSolicitudes(?DateTimeInterface $fechaInformeTecnicoSolicitudes): self
{
$this->fechaInformeTecnicoSolicitudes = $fechaInformeTecnicoSolicitudes;
return $this;
}
public function getFechaFirmaResolucionSolicitudes(): ?DateTimeInterface
{
return $this->fechaFirmaResolucionSolicitudes;
}
public function setFechaFirmaResolucionSolicitudes(?DateTimeInterface $fechaFirmaResolucionSolicitudes): self
{
$this->fechaFirmaResolucionSolicitudes = $fechaFirmaResolucionSolicitudes;
return $this;
}
public function getFechaPublicacionBopSolicitudes(): ?DateTimeInterface
{
return $this->fechaPublicacionBopSolicitudes;
}
public function setFechaPublicacionBopSolicitudes(?DateTimeInterface $fechaPublicacionBopSolicitudes): self
{
$this->fechaPublicacionBopSolicitudes = $fechaPublicacionBopSolicitudes;
return $this;
}
public function getNumeroBopSolicitudes(): ?int
{
return $this->numeroBopSolicitudes;
}
public function setNumeroBopSolicitudes(?int $numeroBopSolicitudes): self
{
$this->numeroBopSolicitudes = $numeroBopSolicitudes;
return $this;
}
public function getEnlaceResolucionBopSolicitudes(): ?string
{
return $this->enlaceResolucionBopSolicitudes;
}
public function setEnlaceResolucionBopSolicitudes(?string $enlaceResolucionBopSolicitudes): self
{
$this->enlaceResolucionBopSolicitudes = $enlaceResolucionBopSolicitudes;
return $this;
}
public function getFechaInicioCurso(): ?DateTimeInterface
{
return $this->fechaInicioCurso;
}
public function setFechaInicioCurso(?DateTimeInterface $fechaInicioCurso): self
{
$this->fechaInicioCurso = $fechaInicioCurso;
return $this;
}
public function getFechaFinCurso(): ?DateTimeInterface
{
return $this->fechaFinCurso;
}
public function setFechaFinCurso(?DateTimeInterface $fechaFinCurso): self
{
$this->fechaFinCurso = $fechaFinCurso;
return $this;
}
public function getFechaInicioFormacionEspecifica(): ?DateTimeInterface
{
return $this->fechaInicioFormacionEspecifica;
}
public function setFechaInicioFormacionEspecifica(?DateTimeInterface $fechaInicioFormacionEspecifica): self
{
$this->fechaInicioFormacionEspecifica = $fechaInicioFormacionEspecifica;
return $this;
}
public function getFechaFinFormacionEspecifica(): ?DateTimeInterface
{
return $this->fechaFinFormacionEspecifica;
}
public function setFechaFinFormacionEspecifica(?DateTimeInterface $fechaFinFormacionEspecifica): self
{
$this->fechaFinFormacionEspecifica = $fechaFinFormacionEspecifica;
return $this;
}
public function getFechaInicioFormacionTransversal(): ?DateTimeInterface
{
return $this->fechaInicioFormacionTransversal;
}
public function setFechaInicioFormacionTransversal(?DateTimeInterface $fechaInicioFormacionTransversal): self
{
$this->fechaInicioFormacionTransversal = $fechaInicioFormacionTransversal;
return $this;
}
public function getFechaFinFormacionTransversal(): ?DateTimeInterface
{
return $this->fechaFinFormacionTransversal;
}
public function setFechaFinFormacionTransversal(?DateTimeInterface $fechaFinFormacionTransversal): self
{
$this->fechaFinFormacionTransversal = $fechaFinFormacionTransversal;
return $this;
}
public function getFechaInicioFormacionComplementaria(): ?DateTimeInterface
{
return $this->fechaInicioFormacionComplementaria;
}
public function setFechaInicioFormacionComplementaria(?DateTimeInterface $fechaInicioFormacionComplementaria): self
{
$this->fechaInicioFormacionComplementaria = $fechaInicioFormacionComplementaria;
return $this;
}
public function getFechaFinFormacionComplementaria(): ?DateTimeInterface
{
return $this->fechaFinFormacionComplementaria;
}
public function setFechaFinFormacionComplementaria(?DateTimeInterface $fechaFinFormacionComplementaria): self
{
$this->fechaFinFormacionComplementaria = $fechaFinFormacionComplementaria;
return $this;
}
public function getFechaInicioPracticas(): ?DateTimeInterface
{
return $this->fechaInicioPracticas;
}
public function setFechaInicioPracticas(?DateTimeInterface $fechaInicioPracticas): self
{
$this->fechaInicioPracticas = $fechaInicioPracticas;
return $this;
}
public function getFechaFinPracticas(): ?DateTimeInterface
{
return $this->fechaFinPracticas;
}
public function setFechaFinPracticas(?DateTimeInterface $fechaFinPracticas): self
{
$this->fechaFinPracticas = $fechaFinPracticas;
return $this;
}
public function getFechaInicioTutoriaEspecifica(): ?DateTimeInterface
{
return $this->fechaInicioTutoriaEspecifica;
}
public function setFechaInicioTutoriaEspecifica(?DateTimeInterface $fechaInicioTutoriaEspecifica): static
{
$this->fechaInicioTutoriaEspecifica = $fechaInicioTutoriaEspecifica;
return $this;
}
public function getFechaFinTutoriaEspecifica(): ?DateTimeInterface
{
return $this->fechaFinTutoriaEspecifica;
}
public function setFechaFinTutoriaEspecifica(?DateTimeInterface $fechaFinTutoriaEspecifica): static
{
$this->fechaFinTutoriaEspecifica = $fechaFinTutoriaEspecifica;
return $this;
}
public function getFechaInicioTutoriaPractica(): ?DateTimeInterface
{
return $this->fechaInicioTutoriaPractica;
}
public function setFechaInicioTutoriaPractica(?DateTimeInterface $fechaInicioTutoriaPractica): static
{
$this->fechaInicioTutoriaPractica = $fechaInicioTutoriaPractica;
return $this;
}
public function getFechaFinTutoriaPractica(): ?DateTimeInterface
{
return $this->fechaFinTutoriaPractica;
}
public function setFechaFinTutoriaPractica(?DateTimeInterface $fechaFinTutoriaPractica): static
{
$this->fechaFinTutoriaPractica = $fechaFinTutoriaPractica;
return $this;
}
public function getFechaFirmaActaSeleccion(): ?DateTimeInterface
{
return $this->fechaFirmaActaSeleccion;
}
public function setFechaFirmaActaSeleccion(?DateTimeInterface $fechaFirmaActaSeleccion): self
{
$this->fechaFirmaActaSeleccion = $fechaFirmaActaSeleccion;
return $this;
}
public function getNombreTecnicoQueFirma(): ?string
{
return $this->nombreTecnicoQueFirma;
}
public function setNombreTecnicoQueFirma(?string $nombreTecnicoQueFirma): self
{
$this->nombreTecnicoQueFirma = $nombreTecnicoQueFirma;
return $this;
}
public function getFechaFirmaInformeEvaluacion(): ?DateTimeInterface
{
return $this->fechaFirmaInformeEvaluacion;
}
public function setFechaFirmaInformeEvaluacion(?DateTimeInterface $fechaFirmaInformeEvaluacion): self
{
$this->fechaFirmaInformeEvaluacion = $fechaFirmaInformeEvaluacion;
return $this;
}
public function getFechaFirmaActaEvaluacion(): ?DateTimeInterface
{
return $this->fechaFirmaActaEvaluacion;
}
public function setFechaFirmaActaEvaluacion(?DateTimeInterface $fechaFirmaActaEvaluacion): self
{
$this->fechaFirmaActaEvaluacion = $fechaFirmaActaEvaluacion;
return $this;
}
public function getAyudasEconomicas(): ?float
{
return $this->ayudasEconomicas;
}
public function setAyudasEconomicas(?float $ayudasEconomicas): self
{
$this->ayudasEconomicas = $ayudasEconomicas;
return $this;
}
public function getFechaFirmaInformeTecnicoAyudas(): ?DateTimeInterface
{
return $this->fechaFirmaInformeTecnicoAyudas;
}
public function setFechaFirmaInformeTecnicoAyudas(?DateTimeInterface $fechaFirmaInformeTecnicoAyudas): self
{
$this->fechaFirmaInformeTecnicoAyudas = $fechaFirmaInformeTecnicoAyudas;
return $this;
}
public function getFechaFirmaResolucionProvisional(): ?DateTimeInterface
{
return $this->fechaFirmaResolucionProvisional;
}
public function setFechaFirmaResolucionProvisional(?DateTimeInterface $fechaFirmaResolucionProvisional): self
{
$this->fechaFirmaResolucionProvisional = $fechaFirmaResolucionProvisional;
return $this;
}
public function getFechaPublicacionBopProvisional(): ?DateTimeInterface
{
return $this->fechaPublicacionBopProvisional;
}
public function setFechaPublicacionBopProvisional(?DateTimeInterface $fechaPublicacionBopProvisional): self
{
$this->fechaPublicacionBopProvisional = $fechaPublicacionBopProvisional;
return $this;
}
public function getNumeroBopProvisional(): ?int
{
return $this->numeroBopProvisional;
}
public function setNumeroBopProvisional(?int $numeroBopProvisional): self
{
$this->numeroBopProvisional = $numeroBopProvisional;
return $this;
}
public function getEnlaceResolucionProvisional(): ?string
{
return $this->enlaceResolucionProvisional;
}
public function setEnlaceResolucionProvisional(?string $enlaceResolucionProvisional): self
{
$this->enlaceResolucionProvisional = $enlaceResolucionProvisional;
return $this;
}
public function getFechaPlazoAlegaciones(): ?DateTimeInterface
{
return $this->fechaPlazoAlegaciones;
}
public function setFechaPlazoAlegaciones(?DateTimeInterface $fechaPlazoAlegaciones): self
{
$this->fechaPlazoAlegaciones = $fechaPlazoAlegaciones;
return $this;
}
public function getFechaInformeDelOrganoInstructor(): ?DateTimeInterface
{
return $this->fechaInformeDelOrganoInstructor;
}
public function setFechaInformeDelOrganoInstructor(?DateTimeInterface $fechaInformeDelOrganoInstructor): self
{
$this->fechaInformeDelOrganoInstructor = $fechaInformeDelOrganoInstructor;
return $this;
}
public function getFechaPropuestaResolucionDefinitiva(): ?DateTimeInterface
{
return $this->fechaPropuestaResolucionDefinitiva;
}
public function setFechaPropuestaResolucionDefinitiva(?DateTimeInterface $fechaPropuestaResolucionDefinitiva): self
{
$this->fechaPropuestaResolucionDefinitiva = $fechaPropuestaResolucionDefinitiva;
return $this;
}
public function getFechaFirmaResolucionDefinitiva(): ?DateTimeInterface
{
return $this->fechaFirmaResolucionDefinitiva;
}
public function setFechaFirmaResolucionDefinitiva(?DateTimeInterface $fechaFirmaResolucionDefinitiva): self
{
$this->fechaFirmaResolucionDefinitiva = $fechaFirmaResolucionDefinitiva;
return $this;
}
public function getFechaPublicacionBopDefinitiva(): ?DateTimeInterface
{
return $this->fechaPublicacionBopDefinitiva;
}
public function setFechaPublicacionBopDefinitiva(?DateTimeInterface $fechaPublicacionBopDefinitiva): self
{
$this->fechaPublicacionBopDefinitiva = $fechaPublicacionBopDefinitiva;
return $this;
}
public function getNumeroBopDefinitiva(): ?int
{
return $this->numeroBopDefinitiva;
}
public function setNumeroBopDefinitiva(?int $numeroBopDefinitiva): self
{
$this->numeroBopDefinitiva = $numeroBopDefinitiva;
return $this;
}
public function getEnlaceResolucionDefinitiva(): ?string
{
return $this->enlaceResolucionDefinitiva;
}
public function setEnlaceResolucionDefinitiva(?string $enlaceResolucionDefinitiva): self
{
$this->enlaceResolucionDefinitiva = $enlaceResolucionDefinitiva;
return $this;
}
public function getEmpresaFormacion(): ?EmpresaFormacion
{
return $this->empresaFormacion;
}
public function setEmpresaFormacion(?EmpresaFormacion $empresaFormacion): self
{
$this->empresaFormacion = $empresaFormacion;
return $this;
}
public function getCargoTecnicoQueFirma(): ?string
{
return $this->cargoTecnicoQueFirma;
}
public function setCargoTecnicoQueFirma(?string $cargoTecnicoQueFirma): self
{
$this->cargoTecnicoQueFirma = $cargoTecnicoQueFirma;
return $this;
}
public function isRequiereCarnetConducir(): ?bool
{
return $this->requiereCarnetConducir;
}
public function setRequiereCarnetConducir(bool $requiereCarnetConducir): self
{
$this->requiereCarnetConducir = $requiereCarnetConducir;
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->getFechaInicioSolicitud() && $now < $this->getFechaInicioSolicitud()) {
return false;
}
if ($this->getFechaFinSolicitud() && $now > $this->getFechaFinSolicitud()) {
return false;
}
return true;
}
/**
* @return Collection<int, CalendarioCurso>
*/
public function getCalendario(): Collection
{
return $this->calendario;
}
public function addCalendario(CalendarioCurso $calendario): static
{
if (!$this->calendario->contains($calendario)) {
$this->calendario->add($calendario);
$calendario->setCurso($this);
}
return $this;
}
public function removeCalendario(CalendarioCurso $calendario): static
{
if ($this->calendario->removeElement($calendario)) {
// set the owning side to null (unless already changed)
if ($calendario->getCurso() === $this) {
$calendario->setCurso(null);
}
}
return $this;
}
/**
* @return Collection<int, TareaCurso>
*/
public function getTareas(): Collection
{
return $this->getTareasOrdenadas();
}
public function addTarea(TareaCurso $tarea): static
{
if (!$this->tareas->contains($tarea)) {
$this->tareas->add($tarea);
$tarea->setCurso($this);
}
return $this;
}
public function removeTarea(TareaCurso $tarea): static
{
if ($this->tareas->removeElement($tarea)) {
// set the owning side to null (unless already changed)
if ($tarea->getCurso() === $this) {
$tarea->setCurso(null);
}
}
return $this;
}
public function isTestEvaluacionBeca(): ?bool
{
return $this->testEvaluacionBeca;
}
public function setTestEvaluacionBeca(bool $testEvaluacionBeca): static
{
$this->testEvaluacionBeca = $testEvaluacionBeca;
return $this;
}
public function getFechaMaximaSolicitudBeca(): ?\DateTimeInterface
{
return $this->fechaMaximaSolicitudBeca;
}
public function setFechaMaximaSolicitudBeca(?\DateTimeInterface $fechaMaximaSolicitudBeca): static
{
$this->fechaMaximaSolicitudBeca = $fechaMaximaSolicitudBeca;
return $this;
}
public function getCosteDiaAsistencia(): ?float
{
return $this->costeDiaAsistencia;
}
public function setCosteDiaAsistencia(?float $costeDiaAsistencia): static
{
$this->costeDiaAsistencia = $costeDiaAsistencia;
return $this;
}
// Ordena primero las completadas al final y si no están completadas por fecha.
private function getTareasOrdenadas(): Collection
{
$tareas = $this->tareas->toArray();
usort($tareas, function ($a, $b) {
if ($a->isCompletada() !== $b->isCompletada()) {
return $a->isCompletada() ? 1 : -1;
}
$fechaA = $a->getFechaLimite()?->getTimestamp() ?? PHP_INT_MAX;
$fechaB = $b->getFechaLimite()?->getTimestamp() ?? PHP_INT_MAX;
return $fechaA <=> $fechaB;
});
return new ArrayCollection($tareas);
}
}