<?php
namespace App\Application\Internit\ClienteBundle\Entity;
use App\Application\Internit\ClienteBundle\Repository\ClienteRepository;
use App\Application\Internit\UnidadeClienteBundle\Entity\UnidadeCliente;
use App\Application\Internit\DownloadBundle\Entity\Download;
use App\Application\Internit\ComunicadoBundle\Entity\Comunicado;
use App\Application\Project\ContentBundle\Entity\BaseUser;
use App\Application\Project\SecurityUserBundle\Entity\Group;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use App\Entity\SonataMediaGallery;
use App\Entity\SonataMediaMedia;
use Doctrine\ORM\Mapping as ORM;
use DateTime;
/** Info: */
#[ORM\Table(name: 'cliente')]
#[ORM\Entity(repositoryClass: ClienteRepository::class)]
#[UniqueEntity('id')]
#[UniqueEntity('cpf')]
class Cliente extends BaseUser
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(name: 'id', type: 'integer', unique: true, nullable: false)]
private ?int $id = null;
#[ORM\Column(name: 'import_id', type: 'integer', unique: false, nullable: true)]
private ?int $importId;
#[ORM\Column(name: 'import', type: 'boolean', unique: false, nullable: true)]
private ?bool $import;
#[ORM\Column(name: 'ativo', type: 'boolean', unique: false, nullable: true)]
private ?bool $ativo = null;
#[ORM\ManyToMany(targetEntity: Group::class)]
#[ORM\JoinTable(name: "security_cliente_group")]
#[ORM\JoinColumn(name: "cliente_id", referencedColumnName: "id")]
#[ORM\InverseJoinColumn(name: "group_id", referencedColumnName: "id")]
private $groups;
#[Assert\NotNull]
#[Assert\NotBlank]
#[ORM\Column(name: 'nomeCompleto', type: 'string', unique: false, nullable: false)]
private string $nomeCompleto;
#[ORM\Column(name: 'razaoSocial', type: 'string', unique: false, nullable: true)]
private ?string $razaoSocial;
#[ORM\Column(name: 'nomeFantasia', type: 'string', unique: false, nullable: true)]
private ?string $nomeFantasia;
#[ORM\Column(name: 'cpf', type: 'string', length: 14, unique: false, nullable: true)]
private ?string $cpf;
#[ORM\Column(name: 'cnpj', type: 'string', length: 24, unique: false, nullable: true)]
private ?string $cnpj;
#[ORM\Column(name: 'telefone', type: 'string', unique: false, nullable: true)]
private ?string $telefone = null;
#[ORM\Column(name: 'celular', type: 'string', unique: false, nullable: true)]
private ?string $celular = null;
#[ORM\OneToMany(mappedBy: 'cliente', targetEntity: UnidadeCliente::class)]
private Collection $unidades;
#[ORM\ManyToMany(targetEntity: Download::class, mappedBy: 'clientes')]
private Collection $downloads;
#[ORM\ManyToMany(targetEntity: Comunicado::class, mappedBy: 'clientes')]
private Collection $comunicados;
#[ORM\OneToMany(mappedBy: 'associado', targetEntity: Cliente::class)]
private Collection $dependentes;
#[ORM\ManyToOne(targetEntity: Cliente::class, inversedBy: 'dependentes')]
#[ORM\JoinColumn(name: 'associado_id', referencedColumnName: 'id')]
private Cliente|null $associado = null;
#[ORM\Column(name: 'hash_nova_senha', type: "string", nullable: true)]
protected ?string $hashNovaSenha = '';
#[ORM\Column(name: 'data_hash_nova_senha', type: "datetime", nullable: true)]
protected ?DateTime $dataHashNovaSenha;
public function __construct()
{
$this->unidades = new ArrayCollection();
$this->downloads = new ArrayCollection();
$this->comunicados = new ArrayCollection();
$this->groups = new ArrayCollection();
$this->dependentes = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
/**
* @return int|null
*/
public function getImportId(): ?int
{
return $this->importId;
}
/**
* @param int|null $importId
*/
public function setImportId(?int $importId): void
{
$this->importId = $importId;
}
public function isImport(): bool
{
return $this->import;
}
public function setImport(bool $import): void
{
$this->import = $import;
}
public function getNomeCompleto(): string
{
return $this->nomeCompleto;
}
public function setNomeCompleto(string $nomeCompleto): void
{
$this->nomeCompleto = $nomeCompleto;
}
public function getCpf(): ?string
{
return $this->cpf;
}
public function setCpf(?string $cpf): void
{
$this->cpf = $cpf;
}
public function getCnpj(): ?string
{
return $this->cnpj;
}
public function setCnpj(?string $cnpj): void
{
$this->cnpj = $cnpj;
}
public function getTelefone(): ?string
{
return $this->telefone;
}
public function setTelefone(?string $telefone): void
{
$this->telefone = $telefone;
}
public function getCelular(): ?string
{
return $this->celular;
}
public function setCelular(?string $celular): void
{
$this->celular = $celular;
}
public function getUnidades(): Collection
{
return $this->unidades;
}
public function setUnidades(Collection $unidades): void
{
$this->unidades = $unidades;
}
public function getDownloads(): Collection
{
return $this->downloads;
}
public function setDownloads(Collection $downloads): void
{
$this->downloads = $downloads;
}
public function getComunicados(): Collection
{
return $this->comunicados;
}
public function setComunicados(Collection $comunicados): void
{
$this->comunicados = $comunicados;
}
public function getGroups()
{
return $this->groups;
}
public function setGroups($groups): void
{
$this->groups = $groups;
}
public function getAtivo(): ?bool
{
return $this->ativo;
}
public function setAtivo(?bool $ativo): void
{
$this->ativo = $ativo;
}
/**
* @return string|null
*/
public function getRazaoSocial(): ?string
{
return $this->razaoSocial;
}
/**
* @param string|null $razaoSocial
*/
public function setRazaoSocial(?string $razaoSocial): void
{
$this->razaoSocial = $razaoSocial;
}
/**
* @return string|null
*/
public function getNomeFantasia(): ?string
{
return $this->nomeFantasia;
}
/**
* @param string|null $nomeFantasia
*/
public function setNomeFantasia(?string $nomeFantasia): void
{
$this->nomeFantasia = $nomeFantasia;
}
public function getDependentes(): Collection
{
return $this->dependentes;
}
public function setDependentes(Collection $dependentes): void
{
$this->dependentes = $dependentes;
}
public function getAssociado(): ?Cliente
{
return $this->associado;
}
public function setAssociado(?Cliente $associado): void
{
$this->associado = $associado;
}
public function getRoles(): array
{
$apiRoles = $this->getApiRoles();
$webRoles = $this->getWebRoles();
foreach ($this->getGroups() as $group){
$apiRoles = array_merge( $apiRoles, $group->getApiRoles() );
$webRoles = array_merge( $webRoles, $group->getWebRoles() );
}
/** Merge de todas as roles do usuário */
$roles = array_merge( $this->roles, $apiRoles, $webRoles);
/** Limpa roles repedidas e retorna todas as roles do usuário */
return array_unique(array_values(array_filter($roles)));
}
public function getEmprendimentos($ativo = true)
{
$empreendimentos = [];
/** @var $unidadeCliente UnidadeCliente */
foreach ($this->getUnidades() as $unidadeCliente){
if( $ativo && (!$unidadeCliente->getAtivo()))
continue;
if(!$unidadeCliente->getUnidade())
continue;
if(!$unidadeCliente->getUnidade()->getBloco())
continue;
if(!$unidadeCliente->getUnidade()->getBloco()->getEmpreendimento())
continue;
$empreendimentos[] = $unidadeCliente->getUnidade()->getBloco()->getEmpreendimento();
}
return array_unique($empreendimentos, SORT_REGULAR);
}
public function getAllBlocos($ativo = true){
$blocos = [];
/** @var $unidadeCliente UnidadeCliente */
foreach ($this->getUnidades() as $unidadeCliente){
if($ativo && (!$unidadeCliente->getAtivo()))
continue;
if(!$unidadeCliente->getUnidade())
continue;
if(!$unidadeCliente->getUnidade()->getBloco())
continue;
$blocos[] = $unidadeCliente->getUnidade()->getBloco();
}
return array_unique($blocos, SORT_REGULAR);
}
public function getAllUnidades($ativo = true){
$unidades = [];
/** @var $unidadeCliente UnidadeCliente */
foreach ($this->getUnidades() as $unidadeCliente){
if($ativo && (!$unidadeCliente->getAtivo()))
continue;
if(!$unidadeCliente->getUnidade())
continue;
$unidades[] = $unidadeCliente->getUnidade();
}
return array_unique($unidades, SORT_REGULAR);
}
public function getHashNovaSenha(): ?string
{
return $this->hashNovaSenha;
}
public function setHashNovaSenha(?string $hashNovaSenha): void
{
$this->hashNovaSenha = $hashNovaSenha;
}
public function getDataHashNovaSenha(): ?DateTime
{
return $this->dataHashNovaSenha;
}
public function setDataHashNovaSenha(?DateTime $dataHashNovaSenha): void
{
$this->dataHashNovaSenha = $dataHashNovaSenha;
}
}