<?php
namespace App\Entity\App;
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\Component\Validator\Constraints as Assert;
/**
* Grupo
*
* @ORM\Table(name="grupo", indexes={@ORM\Index(name="IDX_NOMBRE", columns={"nombre"})})
* @ORM\Entity(repositoryClass="App\Repository\App\GrupoRepository")
* @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false)
*/
class Grupo
{
/**
* @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="descripcion", type="string", length=255, nullable=true)
* @Assert\Length(
* max = 255,
* maxMessage = "La cantidad maxima es {{ limit }} caracteres"
* )
*/
private $descripcion;
/**
* @var Categoria|null
*
* @ORM\ManyToOne(targetEntity="App\Entity\App\Categoria", inversedBy="grupos")
* @ORM\JoinColumn(name="categoria_id", referencedColumnName="id")
* @Assert\NotBlank(message="Categoria requerida")
*/
private $categoria;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\App\Tramite", mappedBy="grupos")
*/
private $tramites;
use ActivoTrait;
use PosicionTrait;
use TimestampableEntity;
use SoftDeleteableEntity;
private $originalTramites;
public function __construct()
{
$this->tramites = new ArrayCollection();
}
public function addTramite(Tramite $tramite)
{
$tramite->setGrupo($this);
$this->tramites->add($tramite);
}
public function removeTramite(Tramite $tramite)
{
$this->tramites->removeElement($tramite);
}
/**
* @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 getDescripcion(): ?string
{
return $this->descripcion;
}
/**
* @param string|null $descripcion
*/
public function setDescripcion(?string $descripcion): void
{
$this->descripcion = $descripcion;
}
/**
* @return Categoria|null
*/
public function getCategoria(): ?Categoria
{
return $this->categoria;
}
/**
* @param Categoria|null $categoria
*/
public function setCategoria(?Categoria $categoria): void
{
$this->categoria = $categoria;
}
/**
* @return Collection
*/
public function getTramites(): Collection
{
return $this->tramites;
}
/**
* @param Collection $tramites
*/
public function setTramites(Collection $tramites): void
{
$this->tramites = $tramites;
}
public function getOriginalTramites()
{
return $this->originalTramites;
}
public function setOriginalTramites()
{
$this->originalTramites = new ArrayCollection();
foreach ($this->getTramites() as $tramite) {
$this->originalTramites->add($tramite);
}
}
public function setOriginalsCollections()
{
$this->setOriginalTramites();
}
public function getBreadcrumb()
{
return $this->getCategoria()->getBreadcrumb(array($this->getCategoria()));
}
public function getMaterialesRecursos()
{
$materialesRecursos = $this->getCategoria()->getMaterialesRecursos();
$materialesRecursosGrupo = array();
foreach ($materialesRecursos as $materialRecurso) {
if ($materialRecurso->getGrupo() && $materialRecurso->getGrupo()->getId() == $this->getId()) {
$materialesRecursosGrupo[] = $materialRecurso;
}
}
return $materialesRecursosGrupo;
}
public function getAllChilds()
{
return $this->getTramites()->toArray();
}
public function __toString()
{
return $this->getNombre() ?: 'Nuevo grupo';
}
}