<?php
namespace App\Entity;
use App\Core\Entity\Institucion\Programa;
use App\Repository\CicloRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=CicloRepository::class)
*/
class Ciclo
{
const JSON_FIELDS = ['id', 'nombre', 'estado'];
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity=Ciclo::class, mappedBy="SiguienteCiclo", fetch="LAZY")
*/
private ?Ciclo $CicloAnterior;
/**
* @ORM\OneToOne(targetEntity=Ciclo::class, inversedBy="CicloAnterior", cascade={"persist"}, fetch="LAZY")
* @ORM\JoinColumn(nullable=true, onDelete= "SET NULL")
*/
private ?Ciclo $SiguienteCiclo;
/**
* @ORM\OneToMany(targetEntity=Ciclo::class, mappedBy="CicloClon")
*/
private $ciclos;
/**
* @ORM\ManyToOne(targetEntity=Ciclo::class, inversedBy="ciclos")
*/
private ?Ciclo $CicloClon;
/**
* @ORM\Column(type="date", nullable=true)
*/
private ?\DateTimeInterface $fechaInicio;
/**
* @ORM\Column(type="date", nullable=true)
*/
private ?\DateTimeInterface $fechaFin;
/**
* @ORM\Column(type="integer")
*/
private ?int $estado;
/*
* 0 = Inactivo
* 1 = Activo
* 2 = Archivado
*/
/**
* @ORM\ManyToOne(targetEntity=TipoCiclo::class, inversedBy="ciclos")
*/
private ?TipoCiclo $tipoCiclo;
/**
* @ORM\Column(type="string", length=100, nullable=true)
*/
private ?string $nombre;
/**
* @ORM\OneToMany(targetEntity=Programa::class, mappedBy="ciclo")
*/
private $programas;
public function __construct()
{
$this->ciclos = new ArrayCollection();
$this->programas = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getCicloAnterior(): ?self
{
return $this->CicloAnterior;
}
public function setCicloAnterior(?self $CicloAnterior): self
{
// No hago nada si quiero hacer un anillo
if ($CicloAnterior === $this) {
return $this;
}
if ($this->CicloAnterior && $this->getCicloAnterior()->getSiguienteCiclo() === $this) {
$this->getCicloAnterior()->setSiguienteCiclo(null);
}
$this->CicloAnterior = $CicloAnterior;
// set the owning side of the relation if necessary
if ($CicloAnterior && $CicloAnterior->getSiguienteCiclo() !== $this) {
$CicloAnterior->setSiguienteCiclo($this);
}
return $this;
}
public function getSiguienteCiclo(): ?self
{
return $this->SiguienteCiclo;
}
public function setSiguienteCiclo(?self $SiguienteCiclo): self
{
// No hago nada si quiero hacer un anillo
if ($SiguienteCiclo === $this) {
return $this;
}
if ($this->SiguienteCiclo && $this->getSiguienteCiclo()->getCicloAnterior() === $this) {
$this->getSiguienteCiclo()->setCicloAnterior(null);
}
$this->SiguienteCiclo = $SiguienteCiclo;
if ($SiguienteCiclo && $SiguienteCiclo->getCicloAnterior() !== $this) {
$SiguienteCiclo->setCicloAnterior($this);
}
return $this;
}
/**
* @return Collection<int, self>
*/
public function getCiclos(): Collection
{
return $this->ciclos;
}
public function addCiclo(self $ciclo): self
{
if (!$this->ciclos->contains($ciclo)) {
$this->ciclos[] = $ciclo;
$ciclo->setCicloClon($this);
}
return $this;
}
public function removeCiclo(self $ciclo): self
{
if ($this->ciclos->removeElement($ciclo)) {
// set the owning side to null (unless already changed)
if ($ciclo->getCicloClon() === $this) {
$ciclo->setCicloClon(null);
}
}
return $this;
}
public function getCicloClon(): ?self
{
return $this->CicloClon;
}
public function setCicloClon(?self $CicloClon): self
{
$this->CicloClon = $CicloClon;
return $this;
}
public function getFechaInicio(): ?\DateTimeInterface
{
return $this->fechaInicio;
}
public function setFechaInicio(?\DateTimeInterface $fechaInicio): self
{
$this->fechaInicio = $fechaInicio;
return $this;
}
public function getFechaFin(): ?\DateTimeInterface
{
return $this->fechaFin;
}
public function setFechaFin(?\DateTimeInterface $fechaFin): self
{
$this->fechaFin = $fechaFin;
return $this;
}
public function getEstado(): ?int
{
return $this->estado;
}
public function setEstado(int $estado): self
{
$this->estado = $estado;
return $this;
}
public function getTipoCiclo(): ?TipoCiclo
{
return $this->tipoCiclo;
}
public function setTipoCiclo(?TipoCiclo $tipoCiclo): self
{
$this->tipoCiclo = $tipoCiclo;
return $this;
}
public function getNombre(): ?string
{
return $this->nombre;
}
public function setNombre(?string $nombre): self
{
$this->nombre = $nombre;
return $this;
}
/**
* @return Collection|Programa[]
*/
public function getProgramas(): Collection
{
return $this->programas;
}
public function addPrograma(Programa $programa): self
{
if (!$this->programas->contains($programa)) {
$this->programas[] = $programa;
$programa->setCiclo($this);
}
return $this;
}
public function removePrograma(Programa $programa): self
{
if ($this->programas->removeElement($programa)) {
// set the owning side to null (unless already changed)
if ($programa->getCiclo() === $this) {
$programa->setCiclo(null);
}
}
return $this;
}
}