<?php
namespace App\Entity;
use App\Repository\TbUsuarioHimedAdminRepository;
use App\Service\AyudanteCargador;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
/**
* TbUsuarioHimedAdmin
*
* @ORM\Table(name="tb_usuario_himed_admin", uniqueConstraints={@ORM\UniqueConstraint(name="str_nombre_usuario_UNIQUE", columns={"str_nombre_usuario"})}, indexes={@ORM\Index(name="tb_usuario_str_contrasenia_idx", columns={"str_contrasenia"}), @ORM\Index(name="tb_usuario_himed_admin_int_id_usuario_creador_fkey_idx", columns={"int_id_usuario_creador"}), @ORM\Index(name="tb_usuario_int_id_cargo_fkey_idx", columns={"int_id_cargo"}), @ORM\Index(name="tb_usuario_bool_estado_idx", columns={"bool_estado"}), @ORM\Index(name="tb_usuario_str_foto_idx", columns={"str_foto"}), @ORM\Index(name="tb_usuario_int_id_tipo_identificacion_fkey_idx", columns={"int_id_tipo_identificacion"})})
* @ORM\Entity(repositoryClass=TbUsuarioHimedAdminRepository::class)
* @UniqueEntity(
* fields={"strNombreUsuario"},
* message="Este nombre de usuario ya se ha utilizado."
* )
* @UniqueEntity(
* fields={"strCorreoElectronico"},
* message="Este correo electrónico ya se ha utilizado."
* )
*/
class TbUsuarioHimedAdmin implements UserInterface, PasswordAuthenticatedUserInterface
{
/**
* @var int
*
* @ORM\Column(name="int_id_usuario", type="integer", nullable=false, options={"unsigned"=true,"comment"="Clave primaria"})
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $intIdUsuario;
/**
* @var string
* @Assert\NotBlank()
* @Assert\Regex(
* pattern="/^[a-zA-Z\.]*$/",
* match="false",
* message="El nombre de usuario solo admite letras y puntos."
* )
* @Assert\Length(
* min = 3,
* max = 30,
* minMessage = "El nombre de usuario debe tener al menos {{ limit }} caracteres de largo.",
* maxMessage = "El nombre de usuario no puede ser superior a {{ limit }} caracteres."
* )
* @ORM\Column(name="str_nombre_usuario", type="string", length=180, nullable=false, options={"comment"="Nombre de usuario utilizado para ingresar a la aplicación web HiMed Admin"})
*/
private $strNombreUsuario;
/**
* @ORM\Column(name="json_roles", type="json", nullable=false, options={"comment"="Permisos del usuario para el manejo de la aplicación web HiMed Admin"})
*/
private $jsonRoles;
/**
* @var string|null
*
* @Assert\Regex(
* pattern="/^[a-zA-Z\s]*$/",
* match="false",
* message="El campo debe contener solo letras."
* )
* @Assert\Length(
* min = 3,
* max = 16,
* minMessage = "El campo debe tener al menos {{ limit }} caracteres de largo.",
* maxMessage = "El campo no puede ser superior a {{ limit }} caracteres."
* )
* @ORM\Column(name="str_rol_alternativo", type="string", length=180, nullable=true, options={"comment"="Nombre alternativo del rol del usuario"})
*/
private $strRolAlternativo;
/**
* @var int
* @Assert\NotBlank()
* @Assert\Length(
* min = 6,
* max = 16,
* minMessage = "El número de identificación debe tener al menos {{ limit }} caracteres de largo.",
* maxMessage = "El número de identificación no puede ser superior a {{ limit }} caracteres."
* )
* @ORM\Column(name="int_numero_identificacion", type="integer", nullable=false, options={"unsigned"=true,"comment"="Numero de identificación del usuario de la aplicación web HiMed Admin"})
*/
private $intNumeroIdentificacion;
/**
* @var string
* @Assert\NotBlank()
* @Assert\Regex(
* pattern="/^[a-zA-Z\s]*$/",
* match="false",
* message="Los nombres deben contener solo letras."
* )
* @Assert\Length(
* min = 2,
* max = 50,
* minMessage = "El nombre debe tener al menos {{ limit }} caracteres de largo.",
* maxMessage = "El nombre no puede ser superior a {{ limit }} caracteres."
* )
* @ORM\Column(name="str_nombres", type="string", length=180, nullable=false, options={"comment"="Nombres del usuario de la aplicación web HiMed Admin"})
*/
private $strNombres;
/**
* @var string
* @Assert\NotBlank()
* @Assert\Regex(
* pattern="/^[a-zA-Z\s]*$/",
* match="false",
* message="Los apellidos deben contener solo letras."
* )
* @Assert\Length(
* min = 2,
* max = 50,
* minMessage = "El apellido debe tener al menos {{ limit }} caracteres de largo.",
* maxMessage = "El apellido no puede ser superior a {{ limit }} caracteres."
* )
* @ORM\Column(name="str_apellidos", type="string", length=180, nullable=false, options={"comment"="Apellidos del usuario de la aplicación web HiMed Admin"})
*/
private $strApellidos;
/**
* @var int
* @Assert\NotBlank()
* @Assert\Regex(
* pattern="/^[0-9]*$/",
* match="false",
* message="Debe contener solo números."
* )
* @Assert\Length(
* min = 10,
* max = 10,
* minMessage = "El celular debe tener al menos {{ limit }} caracteres de largo.",
* maxMessage = "El celular no puede ser superior a {{ limit }} caracteres."
* )
* @ORM\Column(name="int_numero_movil", type="integer", nullable=false, options={"unsigned"=true,"comment"="Numero de teléfono móvil del usuario de la aplicación web HiMed Admin"})
*/
private $intNumeroMovil;
/**
* @var int
* @Assert\NotBlank()
* @Assert\Regex(
* pattern="/^[0-9]*$/",
* match="false",
* message="Debe contener solo números."
* )
* @Assert\Length(
* min = 7,
* max = 10,
* minMessage = "El teléfono debe tener al menos {{ limit }} caracteres de largo.",
* maxMessage = "El teléfono no puede ser superior a {{ limit }} caracteres."
* )
* @ORM\Column(name="int_numero_telefono", type="integer", nullable=false, options={"unsigned"=true,"comment"="Número de telefono fijo del usuario de la aplicación web HiMed Admin"})
*/
private $intNumeroTelefono;
/**
* @var string
* @Assert\NotBlank()
* @Assert\Email()
* @Assert\Regex(
* pattern="/^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(himedsolutions)\.com$/",
* message="El dominio del correo electrónico no es válido."
* )
* @ORM\Column(name="str_correo_electronico", type="string", length=180, nullable=false, options={"comment"="Correo electrónico del usuario de la aplicación web HiMed Admin"})
*/
private $strCorreoElectronico;
/**
* @var string
*
* @ORM\Column(name="str_contrasenia", type="string", length=255, nullable=false, options={"comment"="Contraseña del usuario de la aplicación web HiMed Admin"})
*/
private $strContrasenia;
/**
* @var string|null
* @
* @ORM\Column(name="str_foto", type="string", length=255, nullable=true, options={"comment"="Foto del usuario de la aplicación web HiMed Admin"})
*/
private $strFoto;
/**
* @var bool
*
* @ORM\Column(name="bool_estado", type="boolean", nullable=false, options={"default"="1","comment"="El valor cero (0) representa que el usuario se encuentra inactivo. El valor uno (1) representa que el usuario se encuentra activo."})
*/
private $boolEstado = true;
/**
* @var \DateTime
*
* @ORM\Column(name="dt_fecha_creacion", type="datetime", nullable=false, options={"default"="CURRENT_TIMESTAMP","comment"="Fecha de creación del registo"})
*/
private $dtFechaCreacion;
/**
* @var \TbUsuarioHimedAdmin
* @ORM\ManyToOne(targetEntity="TbUsuarioHimedAdmin")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="int_id_ultimo_usuario_editor", referencedColumnName="int_id_usuario")
* })
*/
private $intIdUltimoUsuarioEditor;
/**
* @var \DateTime|null
*
* @ORM\Column(name="dt_ultima_fecha_edicion", type="datetime", nullable=true, options={"comment"="Última fecha de edición del registro"})
*/
private $dtUltimaFechaEdicion;
/**
* @var \TbCargoHimedAdmin
*
* @ORM\ManyToOne(targetEntity="TbCargoHimedAdmin", fetch="EAGER")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="int_id_cargo", referencedColumnName="int_id_cargo")
* })
* @Assert\NotBlank(
* message="El valor seleccionado no es una opción válida."
* )
*/
private $intIdCargo;
/**
* @var \TbTipoIdentificacion
*
* @ORM\ManyToOne(targetEntity="TbTipoIdentificacion")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="int_id_tipo_identificacion", referencedColumnName="int_id_tipo_identificacion")
* })
* @Assert\NotBlank(
* message="El valor seleccionado no es una opción válida."
* )
*/
private $intIdTipoIdentificacion;
/**
* @var \TbUsuarioHimedAdmin
*
* @ORM\ManyToOne(targetEntity="TbUsuarioHimedAdmin")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="int_id_usuario_creador", referencedColumnName="int_id_usuario")
* })
*/
private $intIdUsuarioCreador;
public function __construct()
{
$this->dtFechaCreacion = new DateTime();
}
public function getUserIdentifier(): string
{
return $this->intIdUsuario;
}
public function getIntIdUsuario(): ?int
{
return $this->intIdUsuario;
}
public function getStrNombreUsuario(): ?string
{
return $this->strNombreUsuario;
}
public function setStrNombreUsuario(?string $strNombreUsuario): self
{
$this->strNombreUsuario = $strNombreUsuario;
return $this;
}
/**
* Identificador visual que representa al usuario
*
* @see UserInterface
*/
public function getUsername(): string
{
return (string) $this->strNombreUsuario;
}
public function getJsonRoles(): ?array
{
return $this->jsonRoles;
}
public function setJsonRoles(array $jsonRoles): self
{
$this->jsonRoles = $jsonRoles;
return $this;
}
/**
* @see UserInterface
*/
public function getRoles(): array
{
$roles = $this->jsonRoles;
// garantiza que por lo menos cada usuario tenga el rol ROLE_USER
$roles[] = 'ROLE_USER';
return array_unique($roles);
}
public function getStrRolAlternativo(): ?string
{
return $this->strRolAlternativo;
}
public function setStrRolAlternativo(?string $strRolAlternativo): self
{
$this->strRolAlternativo = $strRolAlternativo;
return $this;
}
public function getIntNumeroIdentificacion(): ?int
{
return $this->intNumeroIdentificacion;
}
public function setIntNumeroIdentificacion(?int $intNumeroIdentificacion): self
{
$this->intNumeroIdentificacion = $intNumeroIdentificacion;
return $this;
}
public function getStrNombres(): ?string
{
return $this->strNombres;
}
public function setStrNombres(?string $strNombres): self
{
$this->strNombres = $strNombres;
return $this;
}
public function getStrApellidos(): ?string
{
return $this->strApellidos;
}
public function setStrApellidos(?string $strApellidos): self
{
$this->strApellidos = $strApellidos;
return $this;
}
public function getIntNumeroMovil(): ?int
{
return $this->intNumeroMovil;
}
public function setIntNumeroMovil(?int $intNumeroMovil): self
{
$this->intNumeroMovil = $intNumeroMovil;
return $this;
}
public function getIntNumeroTelefono(): ?int
{
return $this->intNumeroTelefono;
}
public function setIntNumeroTelefono(?int $intNumeroTelefono): self
{
$this->intNumeroTelefono = $intNumeroTelefono;
return $this;
}
public function getStrCorreoElectronico(): ?string
{
return $this->strCorreoElectronico;
}
public function setStrCorreoElectronico(?string $strCorreoElectronico): self
{
$this->strCorreoElectronico = $strCorreoElectronico;
return $this;
}
public function getStrContrasenia(): ?string
{
return $this->strContrasenia;
}
public function setStrContrasenia(string $strContrasenia): self
{
$this->strContrasenia = $strContrasenia;
return $this;
}
/**
* @see UserInterface
*/
public function getPassword(): string
{
return (string) $this->strContrasenia ?: '';
}
public function getStrFoto(): ?string
{
return AyudanteCargador::FOTO_USUARIO.'/'.$this->strFoto;
}
public function setStrFoto(?string $strFoto): self
{
$this->strFoto = $strFoto;
return $this;
}
public function getBoolEstado(): ?bool
{
return $this->boolEstado;
}
public function setBoolEstado(bool $boolEstado): self
{
$this->boolEstado = $boolEstado;
return $this;
}
public function getDtFechaCreacion(): ?\DateTimeInterface
{
return $this->dtFechaCreacion;
}
public function setDtFechaCreacion(\DateTimeInterface $dtFechaCreacion): self
{
$this->dtFechaCreacion = $dtFechaCreacion;
return $this;
}
public function getIntIdUltimoUsuarioEditor(): ?int
{
return $this->intIdUltimoUsuarioEditor;
}
public function setIntIdUltimoUsuarioEditor(?self $intIdUltimoUsuarioEditor): self
{
$this->intIdUltimoUsuarioEditor = $intIdUltimoUsuarioEditor;
return $this;
}
public function getDtUltimaFechaEdicion(): ?\DateTimeInterface
{
return $this->dtUltimaFechaEdicion;
}
public function setDtUltimaFechaEdicion(?\DateTimeInterface $dtUltimaFechaEdicion): self
{
$this->dtUltimaFechaEdicion = $dtUltimaFechaEdicion;
return $this;
}
public function getIntIdCargo(): ?TbCargoHimedAdmin
{
return $this->intIdCargo;
}
public function setIntIdCargo(?TbCargoHimedAdmin $intIdCargo): self
{
$this->intIdCargo = $intIdCargo;
return $this;
}
public function getIntIdTipoIdentificacion(): ?TbTipoIdentificacion
{
return $this->intIdTipoIdentificacion;
}
public function setIntIdTipoIdentificacion(?TbTipoIdentificacion $intIdTipoIdentificacion): self
{
$this->intIdTipoIdentificacion = $intIdTipoIdentificacion;
return $this;
}
public function getIntIdUsuarioCreador(): ?self
{
return $this->intIdUsuarioCreador;
}
public function setIntIdUsuarioCreador(?self $intIdUsuarioCreador): self
{
$this->intIdUsuarioCreador = $intIdUsuarioCreador;
return $this;
}
/**
* Returning a salt in only needed, if you are not using a modern
* hashing algorithm (e.g bcrypt or sodium) in your security.yaml
*
* @see UserInterface
*/
public function getSalt(): ?string
{
return null;
}
/**
* @see UserInterface
*/
public function eraseCredentials()
{
// Si se almacena alguna información temporal o sensible en el usuario, limpiala aquí
// $this->plainPassword = null;
}
}