<?php
namespace App\Entity\App;
use App\Utils\CommonFunctions;
use App\Utils\Traits\ActivoTrait;
use App\Utils\Traits\PosicionTrait;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\SoftDeleteable\Traits\SoftDeleteableEntity;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Tramite
*
* @ORM\Table(name="tramite", indexes={@ORM\Index(name="IDX_NOMBRE", columns={"nombre"})})
* @ORM\Entity(repositoryClass="App\Repository\App\TramiteRepository")
* @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false)
* @UniqueEntity(
* fields={"nombre"},
* message="El nombre ya está en uso. Por favor, elige otro."
* )
* @UniqueEntity(
* fields={"link"},
* message="La url ya se encuentra asignada a un tramite existente. Por favor, elige otro."
* )
*/
class Tramite
{
/**
* @var integer|null
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue
*/
private $id;
/**
* @var string|null
*
* @ORM\Column(name="nombre", type="string", length=255)
* @Assert\NotBlank(message="El valor es requerido")
*/
private $nombre;
/**
* @var string|null
*
* @ORM\Column(name="codigo", type="string", length=255, nullable=true)
* @Assert\Length(
* max = 255,
* maxMessage = "La cantidad maxima es {{ limit }} caracteres"
* )
*/
private $codigo;
/**
* @var string|null
*
* @ORM\Column(name="descripcion", type="text", nullable=true)
* @Assert\NotBlank(message="El valor es requerido")
*/
private $descripcion;
/**
* @var string|null
*
* @ORM\Column(name="link", type="text", nullable=true)
* @Assert\Length(
* max = 1000,
* maxMessage = "La cantidad maxima es {{ limit }} caracteres"
* )
* @Assert\NotBlank(message="El valor es requerido")
*/
private $link;
/**
* @var string|null
*
* @ORM\Column(name="path_interno", type="text", nullable=true)
* @Assert\Length(
* max = 1000,
* maxMessage = "La cantidad maxima es {{ limit }} caracteres"
* )
*/
private $pathInterno;
/**
* @var boolean
*
* @ORM\Column(name="es_path_interno", type="boolean")
* @Assert\Type(
* type="bool",
* message="El valor debe ser un bool"
* )
*/
private $esPathInterno;
/**
* @var boolean
*
* @ORM\Column(name="tiene_ficha", type="boolean")
* @Assert\Type(
* type="bool",
* message="El valor debe ser un bool"
* )
*/
private $tieneFicha;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\App\Grupo", inversedBy="tramites")
* @ORM\JoinTable(name="tramites_grupos")
*/
private $grupos;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\App\Categoria", inversedBy="tramites")
* @ORM\JoinTable(name="tramites_categorias")
*/
private $categorias;
/**
* @var boolean
*
* @ORM\Column(name="destacado", type="boolean")
* @Assert\Type(
* type="bool",
* message="El valor debe ser un bool"
* )
*/
private $destacado = false;
/**
* @var integer|null
*
* @ORM\Column(name="posicion_destacado", type="integer", nullable=true)
*/
private $posicionDestacado = null;
/**
* @var integer|null
*
* @ORM\Column(name="id_drupal", type="integer", nullable=true)
*/
private $idDrupal;
/**
* @var string|null
*
* @ORM\Column(name="url_tad", type="string", length=1000, nullable=true)
* @Assert\Length(
* max = 1000,
* maxMessage = "La cantidad maxima es {{ limit }} caracteres"
* )
*/
private $urlTad;
/**
* @var boolean | null
* @ORM\Column(name="modalidad_online", type="boolean", nullable=true)
*/
private $modalidadOnline;
/**
* @var boolean | null
* @ORM\Column(name="modalidad_presencial", type="boolean", nullable=true)
*/
private $modalidadPresencial;
/**
* @var boolean | null
* @ORM\Column(name="pago", type="boolean", nullable=true)
*/
private $pago;
use ActivoTrait;
use PosicionTrait;
use TimestampableEntity;
use SoftDeleteableEntity;
public function __construct()
{
$this->categorias = new ArrayCollection();
$this->grupos = new ArrayCollection();
}
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @return string|null
*/
public function getNombre(): ?string
{
return $this->nombre;
}
/**
* @param string|null $nombre
*/
public function setNombre(?string $nombre): void
{
$this->nombre = $nombre;
}
/**
* @return string|null
*/
public function getCodigo(): ?string
{
return $this->codigo;
}
/**
* @param string|null $codigo
*/
public function setCodigo(?string $codigo): void
{
$this->codigo = $codigo;
}
/**
* @return string|null
*/
public function getDescripcion(): ?string
{
return $this->descripcion;
}
/**
* @param string|null $descripcion
*/
public function setDescripcion(?string $descripcion): void
{
$this->descripcion = $descripcion;
}
/**
* @return string|null
*/
public function getLink(): ?string
{
return $this->link;
}
/**
* @param string|null $link
*/
public function setLink(?string $link): void
{
$this->link = $link;
}
public function getValidLink()
{
$link = $this->getLink();
if ($this->isEsPathInterno() == 1 && $this->getPathInterno()) {
$link = implode('/', [CommonFunctions::getParameterUrl('FRONT_URL'), CommonFunctions::removeFirstSlash($this->getPathInterno())]);
}
return $link;
}
public function __toString()
{
return $this->getNombre() ?: 'Nuevo trámite';
}
/**
* @return string|null
*/
public function getPathInterno(): ?string
{
return $this->pathInterno;
}
/**
* @param string|null $pathInterno
*/
public function setPathInterno(?string $pathInterno): void
{
$this->pathInterno = $pathInterno;
}
/**
* @return bool|null
*/
public function isEsPathInterno(): ?bool
{
return $this->esPathInterno;
}
/**
* @param bool $esPathInterno
*/
public function setEsPathInterno(bool $esPathInterno): void
{
$this->esPathInterno = $esPathInterno;
}
/**
* @return bool
*/
public function isTieneFicha(): bool
{
return $this->tieneFicha;
}
/**
* @param bool $tieneFicha
*/
public function setTieneFicha(bool $tieneFicha): void
{
$this->tieneFicha = $tieneFicha;
}
public function getDirectoryFile()
{
$class = CommonFunctions::getClassMethod(__CLASS__);
$class = CommonFunctions::camelCaseToSnakeCase($class, '-');
$dir = CommonFunctions::getParameter('BASE_PATH_ARCHIVOS');
return CommonFunctions::getPathOrURLWithSlash($dir) . $class;
}
public function getAbsolutePath($name)
{
return CommonFunctions::getAbsolutePath($this->getDirectoryFile(), $name);
}
public function getCategorias(): Collection
{
return $this->categorias;
}
public function addCategoria(Categoria $categoria): self
{
if (!$this->categorias->contains($categoria)) {
$this->categorias[] = $categoria;
}
return $this;
}
public function removeCategoria(Categoria $categoria): self
{
$this->categorias->removeElement($categoria);
return $this;
}
public function getGrupos(): Collection
{
return $this->grupos;
}
public function addGrupos(Grupo $grupo)
{
if (!$this->grupos->contains($grupo)) {
$this->grupos[] = $grupo;
}
return $this;
}
public function removeGrupo(Grupo $grupo): self
{
$this->grupos->removeElement($grupo);
return $this;
}
public function isDestacado(): bool
{
return $this->destacado;
}
public function setDestacado(bool $destacado): void
{
$this->destacado = $destacado;
}
public function getPosicionDestacado(): ?int
{
return $this->posicionDestacado;
}
public function setPosicionDestacado(?int $posicionDestacado): void
{
$this->posicionDestacado = $posicionDestacado;
}
/**
* @return int|null
*/
public function getIdDrupal(): ?int
{
return $this->idDrupal;
}
/**
* @param int|null $idDrupal
*/
public function setIdDrupal(?int $idDrupal): void
{
$this->idDrupal = $idDrupal;
}
/**
* @return string|null
*/
public function getUrlTad(): ?string
{
return $this->urlTad;
}
/**
* @param string|null $urlTad
*/
public function setUrlTad(?string $urlTad): void
{
$this->urlTad = $urlTad;
}
public function getModalidadOnline(): ?bool
{
return $this->modalidadOnline;
}
public function setModalidadOnline(?bool $modalidadOnline): void
{
$this->modalidadOnline = $modalidadOnline;
}
public function getModalidadPresencial(): ?bool
{
return $this->modalidadPresencial;
}
public function setModalidadPresencial(?bool $modalidadPresencial): void
{
$this->modalidadPresencial = $modalidadPresencial;
}
public function getPago(): ?bool
{
return $this->pago;
}
public function setPago(?bool $pago): void
{
$this->pago = $pago;
}
}