<?php
namespace App\Entity;
use App\Repository\AlumnoRepository;
use DateTime;
use DateTimeInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: AlumnoRepository::class)]
class Alumno
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\OneToOne(inversedBy: 'alumno')]
#[ORM\JoinColumn(nullable: false)]
private ?Solicitud $solicitud = null;
#[ORM\ManyToOne(inversedBy: 'alumnos')]
#[ORM\JoinColumn(nullable: false)]
private ?EstadoAlumno $estado = null;
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
private ?DateTimeInterface $fechaAdmision;
#[ORM\OneToMany(mappedBy: 'alumno', targetEntity: CentroPracticasAlumno::class, cascade: ['persist', 'remove'], orphanRemoval: true)]
private Collection $centrosPracticas;
#[ORM\OneToMany(mappedBy: 'alumno', targetEntity: AsistenciaAlumno::class, cascade: ['persist', 'remove'], orphanRemoval: true)]
private Collection $asistencias;
// BEGIN: Estos campos son para hacer el siguimiento cuando es persona formada.
#[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
private ?DateTimeInterface $fechaLlamadaMes = null;
#[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
private ?DateTimeInterface $fechaLlamadaSeisMeses = null;
#[ORM\Column(nullable: true)]
private ?bool $estaTrabajandoMes = null;
#[ORM\Column(nullable: true)]
private ?bool $estaTrabajandoSeisMeses = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $observacionesSeguimiento = null;
// END: Estos campos son para hacer el siguimiento cuando es persona formada.
#[ORM\OneToOne(mappedBy: 'alumno', cascade: ['persist', 'remove'])]
private ?TestEvaluacionAlumno $testEvaluacion = null;
#[ORM\OneToOne(mappedBy: 'alumno', cascade: ['persist', 'remove'])]
private ?SolicitudBecaAlumno $solicitudBeca = null;
// Este campo se rellena al ponerle el estado "Cursando" al alumno.
#[ORM\Column(type: Types::DATETIME_MUTABLE, nullable: true)]
private ?DateTimeInterface $fechaCursando = null;
public function __construct()
{
$this->fechaAdmision = new DateTime();
$this->centrosPracticas = new ArrayCollection();
$this->asistencias = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getSolicitud(): ?Solicitud
{
return $this->solicitud;
}
public function setSolicitud(Solicitud $solicitud): static
{
$this->solicitud = $solicitud;
return $this;
}
public function getEstado(): ?EstadoAlumno
{
return $this->estado;
}
public function setEstado(?EstadoAlumno $estado): static
{
$this->estado = $estado;
return $this;
}
public function getFechaAdmision(): ?DateTimeInterface
{
return $this->fechaAdmision;
}
public function setFechaAdmision(DateTimeInterface $fechaAdmision): static
{
$this->fechaAdmision = $fechaAdmision;
return $this;
}
/**
* @return Collection<int, CentroPracticasAlumno>
*/
public function getCentrosPracticas(): Collection
{
return $this->centrosPracticas;
}
public function addCentrosPractica(CentroPracticasAlumno $centrosPractica): static
{
if (!$this->centrosPracticas->contains($centrosPractica)) {
$this->centrosPracticas->add($centrosPractica);
$centrosPractica->setAlumno($this);
}
return $this;
}
public function removeCentrosPractica(CentroPracticasAlumno $centrosPractica): static
{
if ($this->centrosPracticas->removeElement($centrosPractica)) {
// set the owning side to null (unless already changed)
if ($centrosPractica->getAlumno() === $this) {
$centrosPractica->setAlumno(null);
}
}
return $this;
}
/**
* @return Collection<int, AsistenciaAlumno>
*/
public function getAsistencias(): Collection
{
return $this->asistencias;
}
public function addAsistencia(AsistenciaAlumno $asistencia): static
{
if (!$this->asistencias->contains($asistencia)) {
$this->asistencias->add($asistencia);
$asistencia->setAlumno($this);
}
return $this;
}
public function removeAsistencia(AsistenciaAlumno $asistencia): static
{
if ($this->asistencias->removeElement($asistencia)) {
// set the owning side to null (unless already changed)
if ($asistencia->getAlumno() === $this) {
$asistencia->setAlumno(null);
}
}
return $this;
}
public function getFechaLlamadaMes(): ?DateTimeInterface
{
return $this->fechaLlamadaMes;
}
public function setFechaLlamadaMes(?DateTimeInterface $fechaLlamadaMes): static
{
$this->fechaLlamadaMes = $fechaLlamadaMes;
return $this;
}
public function getFechaLlamadaSeisMeses(): ?DateTimeInterface
{
return $this->fechaLlamadaSeisMeses;
}
public function setFechaLlamadaSeisMeses(?DateTimeInterface $fechaLlamadaSeisMeses): static
{
$this->fechaLlamadaSeisMeses = $fechaLlamadaSeisMeses;
return $this;
}
public function isEstaTrabajandoMes(): ?bool
{
return $this->estaTrabajandoMes;
}
public function setEstaTrabajandoMes(?bool $estaTrabajandoMes): static
{
$this->estaTrabajandoMes = $estaTrabajandoMes;
return $this;
}
public function isEstaTrabajandoSeisMeses(): ?bool
{
return $this->estaTrabajandoSeisMeses;
}
public function setEstaTrabajandoSeisMeses(?bool $estaTrabajandoSeisMeses): static
{
$this->estaTrabajandoSeisMeses = $estaTrabajandoSeisMeses;
return $this;
}
public function getObservacionesSeguimiento(): ?string
{
return $this->observacionesSeguimiento;
}
public function setObservacionesSeguimiento(?string $observacionesSeguimiento): static
{
$this->observacionesSeguimiento = $observacionesSeguimiento;
return $this;
}
public function getTestEvaluacion(): ?TestEvaluacionAlumno
{
return $this->testEvaluacion;
}
public function setTestEvaluacion(TestEvaluacionAlumno $testEvaluacion): static
{
// set the owning side of the relation if necessary
if ($testEvaluacion->getAlumno() !== $this) {
$testEvaluacion->setAlumno($this);
}
$this->testEvaluacion = $testEvaluacion;
return $this;
}
public function getSolicitudBeca(): ?SolicitudBecaAlumno
{
return $this->solicitudBeca;
}
public function setSolicitudBeca(SolicitudBecaAlumno $solicitudBeca): static
{
// set the owning side of the relation if necessary
if ($solicitudBeca->getAlumno() !== $this) {
$solicitudBeca->setAlumno($this);
}
$this->solicitudBeca = $solicitudBeca;
return $this;
}
public function getFechaCursando(): ?DateTimeInterface
{
return $this->fechaCursando;
}
public function setFechaCursando(?DateTimeInterface $fechaCursando): static
{
$this->fechaCursando = $fechaCursando;
return $this;
}
}