<?php
namespace App\Entity\Registro;
use App\Repository\Registro\RegistroAspiranteRepository;
use App\Entity\SsoMatricula;
use App\Entity\SsoPersona;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Persistence\Event\LifecycleEventArgs;
use Symfony\Component\Validator\Constraints as Assert;
use App\Validator as AppAssert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity(repositoryClass=RegistroAspiranteRepository::class)
* @ORM\HasLifecycleCallbacks()
* @UniqueEntity("dni", repositoryMethod="findRegistroPendiente", message="Ya tiene un registro presentado pendiente de verificación, por favor aguarde respuesta del mismo.")
*/
class RegistroAspirante
{
public const ESTADO_INICIADO = 'Iniciado';
public const ESTADO_ADJUNTOS = 'Adjuntos';
public const ESTADO_CORREO = 'Correo';
public const ESTADO_ESCUELA = 'Escuela';
public const ESTADO_RECHAZADO = 'Rechazado';
public const ESTADO_CONFIRMADO = 'Confirmado';
public const ESTADO_CONFIRMADO_ESCUELA = 'Confirmado_escuela';
public const ESTADO_VENCIDO = 'Vencido';
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=150)
* @Assert\NotBlank(
* message = "Campo requerido."
* )
* @Assert\Length(
* min = 3,
* max = 150,
* minMessage = "Tamaño mínimo {{ limit }}",
* maxMessage = "Tamaño máximo {{ limit }}"
* )
*/
private $nombres;
/**
* @ORM\Column(type="string", length=150)
* @Assert\NotBlank(
* message = "Campo requerido."
* )
* @Assert\Length(
* min = 3,
* max = 150,
* minMessage = "Tamaño mínimo {{ limit }}",
* maxMessage = "Tamaño máximo {{ limit }}"
* )
*/
private $apellidos;
/**
* @ORM\Column(type="integer")
* @Assert\NotBlank(
* message = "Campo requerido."
* )
* @Assert\Range(
* min = 1000000,
* max = 100000000,
* notInRangeMessage = "Número entre {{ min }} y {{ max }}",
* invalidMessage = "Número inválido"
* )
* @AppAssert\UniquePersona()
*/
private $dni;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $urlDni;
/**
* @ORM\Column(type="string", length=100, nullable=true)
* @Assert\Email(
* message = "El Email es incorrecto.",
* mode= "html5"
* )
* @Assert\NotBlank(
* message = "Campo requerido."
* )
* @AppAssert\UniqueMail()
*/
private $email_personal;
/**
* @var string The hashed password
* @ORM\Column(type="string")
* @Assert\Length(
* min = 6,
* minMessage = "Tamaño mínimo {{ limit }}"
* )
* @Assert\NotBlank(
* message = "Campo requerido."
* )
*/
private $password;
/**
* @ORM\Column(type="string", length=20, nullable=true)
* @Assert\NotBlank(
* message = "Campo requerido."
* )
* @AppAssert\UniqueDniTramite()
*/
private $dni_tramite;
/**
* @ORM\Column(type="string", length=2, nullable=true)
* @Assert\Choice(choices=SsoPersona::GENEROS, message="Género inválido.")
*/
private $genero;
/**
* @ORM\OneToOne(targetEntity=SsoMatricula::class, cascade={"all"})
* @ORM\JoinColumn(nullable=false)
* @Assert\Valid
*/
private $matricula;
/**
* @ORM\Column(type="string", length=100)
*/
private $estado;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $descargaReglamento;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $aceptaReglamento;
/**
* @ORM\PrePersist
*/
public function iniciarPresentacion(LifecycleEventArgs $eventArgs): void
{
$this->setAceptaReglamento(new \DateTimeImmutable());
}
public function marcarReglamentoDescargado(): void
{
$this->descargaReglamento = new \DateTimeImmutable();
}
public function getId(): ?int
{
return $this->id;
}
public function getNombres(): ?string
{
return $this->nombres;
}
public function setNombres(string $nombres): self
{
$this->nombres = $nombres;
return $this;
}
public function getApellidos(): ?string
{
return $this->apellidos;
}
public function setApellidos(string $apellidos): self
{
$this->apellidos = $apellidos;
return $this;
}
public function getDni(): ?int
{
return $this->dni;
}
public function setDni(int $dni): self
{
$this->dni = $dni;
return $this;
}
public function getEmailPersonal(): ?string
{
return $this->email_personal;
}
public function setEmailPersonal(?string $email_personal): self
{
$this->email_personal = $email_personal;
return $this;
}
public function getDniTramite(): ?string
{
return $this->dni_tramite;
}
public function setDniTramite(string $dni_tramite): self
{
$this->dni_tramite = $dni_tramite;
return $this;
}
public function getGenero(): ?string
{
return $this->genero;
}
public function setGenero(?string $genero): self
{
$this->genero = $genero;
return $this;
}
public function getPassword(): ?string
{
return $this->password;
}
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getMatricula(): ?SsoMatricula
{
return $this->matricula;
}
public function setMatricula(SsoMatricula $matricula): self
{
$this->matricula = $matricula;
return $this;
}
public function getUrlDni(): ?string
{
return $this->urlDni;
}
public function setUrlDni(?string $urlDni): self
{
$this->urlDni = $urlDni;
return $this;
}
public function getEstado(): ?string
{
return $this->estado;
}
public function setEstado(string $estado): self
{
$this->estado = $estado;
return $this;
}
public function getTick(): ?String
{
return $this->getDescargaReglamento()?$this->getDescargaReglamento()->format(\DateTimeInterface::ATOM):null;
}
public function setTick(?String $tick): self
{
$dateTime = \DateTimeImmutable::createFromFormat(\DateTimeInterface::ATOM, $tick);
$this->setDescargaReglamento($dateTime);
return $this;
}
public function getDescargaReglamento(): ?\DateTimeInterface
{
return $this->descargaReglamento;
}
public function setDescargaReglamento(?\DateTimeInterface $descargaReglamento): self
{
$this->descargaReglamento = $descargaReglamento;
return $this;
}
public function getAceptaReglamento(): ?\DateTimeInterface
{
return $this->aceptaReglamento;
}
public function setAceptaReglamento(?\DateTimeInterface $aceptaReglamento): self
{
$this->aceptaReglamento = $aceptaReglamento;
return $this;
}
}