<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Expose;
use JMS\Serializer\Annotation\Groups;
use App\Entity\Interfaces\UsuarioDependenteInterface;
use App\Entity\Interfaces\ContratoDependenteInterface;
/**
* @ORM\Entity(repositoryClass="App\Repository\DispositivoRepository")
* @ExclusionPolicy("all")
*/
class Dispositivo extends AbstractEntity implements UsuarioDependenteInterface, ContratoDependenteInterface
{
const PENDENTE = 0;
const ATIVO = 1;
const DESATIVO = 2;
const RECUSADO = 9;
const BLOQUEADO = 1;
const DESBLOQUADO = 0;
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @Assert\NotBlank
* @ORM\Column(type="string", length=50)
* @Expose
*/
private $identificador;
/**
* @ORM\Column(type="string", length=100, nullable=true)
* @Expose
*/
private $marca;
/**
* @ORM\Column(type="string", length=100, nullable=true)
* @Expose
*/
private $modelo;
/**
* @Assert\NotBlank
* @ORM\ManyToOne(targetEntity="App\Entity\Contrato", inversedBy="dispositivos")
* @ORM\JoinColumn(nullable=false)
* @Expose
*/
private $contrato;
/**
* @ORM\Column(type="string", length=12)
* @Expose
* @Groups({"new"})
*/
private $selector;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Solicitacao", mappedBy="dispositivo", orphanRemoval=true)
*/
private $solicitacoes;
/**
* @ORM\Column(type="smallint")
* @Expose
*/
private $status;
/**
* @ORM\Column(type="smallint", nullable=true)
* @Expose
*/
private $bloqueio;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Usuario", inversedBy="dispositivos")
* @ORM\JoinColumn(nullable=false)
* @Expose
*/
private $usuario;
/**
* @Assert\NotBlank
* @ORM\Column(type="string", length=50, nullable=true)
* @Expose
*/
private $informacaoComplementar;
/**
* @Assert\NotBlank
* @ORM\Column(type="string", length=50, nullable=true)
*/
private $firebaseIdentificador;
/**
* @ORM\Column(type="string", length=6, nullable=true)
* @Expose
* @Groups({"senha"})
*/
private $senha;
/**
* @ORM\OneToMany(targetEntity="App\Entity\PackageDispositivo", mappedBy="dispositivo", orphanRemoval=true, cascade={"persist"} )
*/
private $packages;
/**
* @ORM\OneToMany(targetEntity="App\Entity\DispositivoHistoricoAcao", mappedBy="dispositivo", orphanRemoval=true, cascade={"persist"} )
*/
private $historicoAcao;
/**
* @ORM\Column(type="string", length=50, nullable=true)
*/
private $identificador_propaganda;
/**
* @ORM\Column(type="string", length=500, nullable=true)
*/
private $firebaseToken;
public function __construct()
{
$this->selector = $this->generateSelector();
$this->status = Dispositivo::PENDENTE;
$this->bloqueio = Dispositivo::DESBLOQUADO;
$this->solicitacoes = new ArrayCollection();
$this->senha = rand(100000, 999999);
$this->packages = new ArrayCollection();
$this->historicoAcao = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getIdentificador(): ?string
{
return $this->identificador;
}
public function setIdentificador(string $identificador): self
{
$this->identificador = $identificador;
return $this;
}
public function getMarca(): ?string
{
return $this->marca;
}
public function setMarca(?string $marca): self
{
$this->marca = $marca;
return $this;
}
public function getModelo(): ?string
{
return $this->modelo;
}
public function setModelo(?string $modelo): self
{
$this->modelo = $modelo;
return $this;
}
public function getContrato(): ?Contrato
{
return $this->contrato;
}
public function setContrato(?Contrato $contrato): ContratoDependenteInterface
{
$this->contrato = $contrato;
return $this;
}
public function getSelector(): ?string
{
return $this->selector;
}
public function setSelector(string $selector): self
{
$this->selector = $selector;
return $this;
}
/**
* @return Collection|Solicitacao[]
*/
public function getSolicitacoes(): Collection
{
return $this->solicitacoes;
}
public function addSolicitacao(Solicitacao $solicitacao): self
{
if (!$this->solicitacoes->contains($solicitacao)) {
$this->solicitacoes[] = $solicitacao;
$solicitacao->setDispositivo($this);
}
return $this;
}
public function removeSolicitacao(Solicitacao $solicitacao): self
{
if ($this->solicitacoes->contains($solicitacao)) {
$this->solicitacoes->removeElement($solicitacao);
// set the owning side to null (unless already changed)
if ($solicitacao->getDispositivo() === $this) {
$solicitacao->setDispositivo(null);
}
}
return $this;
}
public function getStatus(): ?int
{
return $this->status;
}
public function setStatus(int $status): self
{
$this->status = $status;
return $this;
}
public function getBloqueio(): ?int
{
return $this->bloqueio;
}
public function setBloqueio(int $bloqueado): self
{
$this->bloqueio = $bloqueado;
return $this;
}
public function getUsuario(): ?Usuario
{
return $this->usuario;
}
public function setUsuario(?Usuario $usuario): UsuarioDependenteInterface
{
$this->usuario = $usuario;
return $this;
}
public function getInformacaoComplementar(): ?string
{
return $this->informacaoComplementar;
}
public function setInformacaoComplementar(?string $informacaoComplementar): self
{
$this->informacaoComplementar = $informacaoComplementar;
return $this;
}
public function getFirebaseIdentificador(): ?string
{
return $this->firebaseIdentificador;
}
public function setFirebaseIdentificador(?string $firebaseIdentificador): self
{
$this->firebaseIdentificador = $firebaseIdentificador;
return $this;
}
public function getFirebaseToken(): ?string
{
return $this->firebaseToken;
}
public function setFirebaseToken(?string $firebaseToken): self
{
$this->firebaseToken = $firebaseToken;
return $this;
}
public function getSenha(): ?string
{
return $this->senha;
}
public function setSenha(?string $senha): self
{
$this->senha = $senha;
return $this;
}
/**
* @return Collection|PackageDispositivo[]
*/
public function getPackages(): Collection
{
return $this->packages;
}
public function addPackage(PackageDispositivo $package): self
{
if (!$this->packages->contains($package)) {
$this->packages[] = $package;
$package->setDispositivo($this);
}
return $this;
}
public function removePackage(PackageDispositivo $package): self
{
if ($this->packages->contains($package)) {
$this->packages->removeElement($package);
// set the owning side to null (unless already changed)
if ($package->getDispositivo() === $this) {
$package->setDispositivo(null);
}
}
return $this;
}
/**
* @return Collection|DispositivoHistoricoAcao[]
*/
public function getDispositivoHistoricoAcoes(): Collection
{
return $this->historicoAcao;
}
public function addDispositivoHistoricoAcao(DispositivoHistoricoAcao $acao): self
{
$this->historicoAcao[] = $acao;
$acao->setDispositivo($this);
return $this;
}
public function getUltimaMensagemBloqueio(): ?String
{
$criteria = Criteria::create();
$criteria->where(Criteria::expr()->eq('bloqueio', Dispositivo::BLOQUEADO));
$criteria->orderBy(array('created_at' => Criteria::DESC));
$criteria->setMaxResults(1);
$result = $this->historicoAcao->matching($criteria);
if (!$result->isEmpty()) {
return $result[0]->getDescricao();
}
return null;
}
public function getIdentificadorPropaganda(): ?string
{
return $this->identificador_propaganda;
}
public function setIdentificadorPropaganda(?string $identificador_propaganda): self
{
$this->identificador_propaganda = $identificador_propaganda;
return $this;
}
}