<?php
declare(strict_types=1);
namespace App\Entity;
use App\Repository\FiltreStructureRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* FiltreStructure.
*
* @ORM\Table(name="FiltreStructure")
*
* @ORM\Entity(repositoryClass=FiltreStructureRepository::class)
*/
class FiltreStructure
{
/**
* @var ArrayCollection
*/
public $communesZoneInfluence;
public $territoireRevitalisationRurale;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
*
* @ORM\Id
*
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255)
*/
private $nom;
/**
* @var string
*
* @ORM\Column(name="description", type="string", length=255, nullable=true)
*/
private $description;
/**
* Quel est le mode de gestion du centre social ?
*
* @ORM\ManyToOne(targetEntity="ModeGestion", inversedBy="filtreStructures")
*
* @ORM\JoinColumn(name="mode_gestion_id", referencedColumnName="id")
*/
private $modeGestion;
/**
* @var int
*
* @ORM\Column(name="adhesionIndividuel", type="integer", nullable=true)
*/
private $adhesionIndividuel;
/**
* @var int
*
* @ORM\Column(name="adhesionFamiliale", type="integer", nullable=true)
*/
private $adhesionFamiliale;
/**
* @var string
*
* @ORM\Column(name="communes", type="text", nullable=true)
*/
private $communes;
/**
* Cette association gère-t-elle: Un agrément / Plusieurs agrément.
*
* @ORM\ManyToOne(targetEntity="Agrement", inversedBy="filtreStructures")
*
* @ORM\JoinColumn(name="agrement_id", referencedColumnName="id")
*/
private $agrement;
/**
* si mode de gestion « collectivité locale », précisez :
*
* @ORM\ManyToOne(targetEntity="ModeGestionCollectiviteLocale", inversedBy="filtreStructures")
*
* @ORM\JoinColumn(name="mode_gestion_collectivite_locale_id", referencedColumnName="id")
*/
private $modeGestionCollectiviteLocale;
/**
* si mode de gestion « co gestion », précisez :
*
* @ORM\ManyToOne(targetEntity="ModeGestionCoGestion", inversedBy="filtreStructures")
*
* @ORM\JoinColumn(name="mode_gestion_co_gestion_id", referencedColumnName="id")
*/
private $modeGestionCoGestion;
/**
* Êtes vous adhérent à la Fédération des centres sociaux ?
*
* @var int
*
* @ORM\Column(name="is_adherent_federation", type="integer",nullable=true)
*/
private $isAdherentFederation;
/**
* Êtes vous adhérent à une autre fédération ?
*
* @ORM\ManyToOne(targetEntity="AdherentAutreFederation", inversedBy="filtreStructures")
*
* @ORM\JoinColumn(name="adherent_autre_federation_id", referencedColumnName="id")
*/
private $adherentAutreFederation;
/**
* But(s) de ces modalités d'adhésion ?
*
* @ORM\ManyToOne(targetEntity="SystemeAdhesionGoal", inversedBy="filtreStructures")
*
* @ORM\JoinColumn(name="systemeAdhesionGoal_id", referencedColumnName="id")
*/
private $systemeAdhesionGoal;
/**
* Votre territoire d'intervention est.
*
* @ORM\ManyToOne(targetEntity="TerritoireIntervention", inversedBy="filtreStructures")
*
* @ORM\JoinColumn(name="territoire_intervention_id", referencedColumnName="id")
*/
private $territoireIntervention;
/**
* Si votre territoire d'intervention est un espace à dominante urbaine, il est situé sur:
*
* @ORM\ManyToOne(targetEntity="TerritoireInterventionUrbaine", inversedBy="filtreStructures")
*
* @ORM\JoinColumn(name="territoire_intervention_urbaine_id", referencedColumnName="id")
*/
private $territoireInterventionUrbaine;
/**
* Si votre territoire d'intervention est un espace à dominante rurale, il est situé sur:
*
* @ORM\ManyToOne(targetEntity="TerritoireInterventionRurale", inversedBy="filtreStructures")
*
* @ORM\JoinColumn(name="territoire_intervention_rurale_id", referencedColumnName="id")
*/
private $territoireInterventionRurale;
/**
* votre territoire est-il un territoire de revitalisation rurale.
*
* @var bool
*
* @ORM\Column(name="is_territoire_revitalisation_rurale", type="integer",nullable=true)
*/
private $isTerritoireRevitalisationRurale;
/**
* La politique de la ville et votre centre social (centre social situé sur un territoire urbain).
*
* @ORM\ManyToMany(targetEntity="PolitiqueVille", cascade={"persist"})
*
* @ORM\JoinTable(name="filtre_structures_politique_villes")
*/
private $politiqueVille;
/**
* Vous êtes un centre social "gens du voyage".
*
* @var int
*
* @ORM\Column(name="is_gens_voyage", type="integer",nullable=true)
*/
private $isGensVoyage;
/**
* @var bool
*
* @ORM\Column(name="hasEVSAgrement", type="boolean", nullable= true, options={"default" = 0})
*/
private $hasEVSAgrement;
/**
* @Gedmo\Blameable(on="create")
*
* @ORM\ManyToOne(targetEntity="User", cascade={"persist"})
*
* @ORM\JoinColumn(referencedColumnName="id", onDelete="SET NULL")
*/
protected $createdBy;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $isMultiSites;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $isItinerante;
/**
* @ORM\ManyToMany(targetEntity=TypeStructure::class, inversedBy="filtreStructures", cascade={"persist"})
*
* @ORM\JoinTable(name="filtre_structures_types_structure")
*/
private $typesStructure;
/**
* @ORM\ManyToOne(targetEntity=Departement::class, inversedBy="filtreStructures")
*/
private $departement;
/**
* Constructor.
*/
public function __construct()
{
$this->communesZoneInfluence = new ArrayCollection();
$this->typesStructure = new ArrayCollection();
$this->politiqueVille = new ArrayCollection();
}
#[\Override]
public function __toString(): string
{
return $this->nom;
}
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set nom.
*
* @param string $nom
*/
public function setNom($nom): static
{
$this->nom = $nom;
return $this;
}
/**
* Get nom.
*
* @return string
*/
public function getNom()
{
return $this->nom;
}
/**
* Set description.
*
* @param string $description
*/
public function setDescription($description): static
{
$this->description = $description;
return $this;
}
/**
* Get description.
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* Set modeGestion.
*/
public function setModeGestion(?ModeGestion $modeGestion = null): static
{
$this->modeGestion = $modeGestion;
return $this;
}
/**
* Get modeGestion.
*
* @return ModeGestion
*/
public function getModeGestion()
{
return $this->modeGestion;
}
/**
* Set isAdherentFederation.
*
* @param bool $isAdherentFederation
*/
public function setIsAdherentFederation($isAdherentFederation): static
{
$this->isAdherentFederation = $isAdherentFederation;
return $this;
}
/**
* Get isAdherentFederation.
*
* @return bool
*/
public function getIsAdherentFederation()
{
return $this->isAdherentFederation;
}
/**
* Set isTerritoireRevitalisationRurale.
*
* @param bool $isTerritoireRevitalisationRurale
*/
public function setIsTerritoireRevitalisationRurale($isTerritoireRevitalisationRurale): static
{
$this->isTerritoireRevitalisationRurale = $isTerritoireRevitalisationRurale;
return $this;
}
/**
* Get isTerritoireRevitalisationRurale.
*
* @return bool
*/
public function getIsTerritoireRevitalisationRurale()
{
return $this->isTerritoireRevitalisationRurale;
}
/**
* Set territoireRevitalisationRurale.
*
* @param string $territoireRevitalisationRurale
*/
public function setTerritoireRevitalisationRurale($territoireRevitalisationRurale): static
{
$this->territoireRevitalisationRurale = $territoireRevitalisationRurale;
return $this;
}
/**
* Get territoireRevitalisationRurale.
*
* @return string
*/
public function getTerritoireRevitalisationRurale()
{
return $this->territoireRevitalisationRurale;
}
/**
* Set adherentAutreFederation.
*/
public function setAdherentAutreFederation(?AdherentAutreFederation $adherentAutreFederation = null): static
{
$this->adherentAutreFederation = $adherentAutreFederation;
return $this;
}
/**
* Get adherentAutreFederation.
*
* @return AdherentAutreFederation
*/
public function getAdherentAutreFederation()
{
return $this->adherentAutreFederation;
}
/**
* Set territoireIntervention.
*/
public function setTerritoireIntervention(?TerritoireIntervention $territoireIntervention = null): static
{
$this->territoireIntervention = $territoireIntervention;
return $this;
}
/**
* Get territoireIntervention.
*
* @return TerritoireIntervention
*/
public function getTerritoireIntervention()
{
return $this->territoireIntervention;
}
/**
* Set territoireInterventionUrbaine.
*/
public function setTerritoireInterventionUrbaine(?TerritoireInterventionUrbaine $territoireInterventionUrbaine = null): static
{
$this->territoireInterventionUrbaine = $territoireInterventionUrbaine;
return $this;
}
/**
* Get territoireInterventionUrbaine.
*
* @return TerritoireInterventionUrbaine
*/
public function getTerritoireInterventionUrbaine()
{
return $this->territoireInterventionUrbaine;
}
/**
* Set territoireInterventionRurale.
*/
public function setTerritoireInterventionRurale(?TerritoireInterventionRurale $territoireInterventionRurale = null): static
{
$this->territoireInterventionRurale = $territoireInterventionRurale;
return $this;
}
/**
* Get territoireInterventionRurale.
*
* @return TerritoireInterventionRurale
*/
public function getTerritoireInterventionRurale()
{
return $this->territoireInterventionRurale;
}
/**
* Set adhesionIndividuel.
*
* @param int $adhesionIndividuel
*/
public function setAdhesionIndividuel($adhesionIndividuel): static
{
$this->adhesionIndividuel = $adhesionIndividuel;
return $this;
}
/**
* Get adhesionIndividuel.
*
* @return int
*/
public function getAdhesionIndividuel()
{
return $this->adhesionIndividuel;
}
/**
* Set adhesionFamiliale.
*
* @param int $adhesionFamiliale
*/
public function setAdhesionFamiliale($adhesionFamiliale): static
{
$this->adhesionFamiliale = $adhesionFamiliale;
return $this;
}
/**
* Get adhesionFamiliale.
*
* @return int
*/
public function getAdhesionFamiliale()
{
return $this->adhesionFamiliale;
}
/**
* Set modeGestionCollectiviteLocale.
*/
public function setModeGestionCollectiviteLocale(?ModeGestionCollectiviteLocale $modeGestionCollectiviteLocale = null): static
{
$this->modeGestionCollectiviteLocale = $modeGestionCollectiviteLocale;
return $this;
}
/**
* Get modeGestionCollectiviteLocale.
*
* @return ModeGestionCollectiviteLocale
*/
public function getModeGestionCollectiviteLocale()
{
return $this->modeGestionCollectiviteLocale;
}
/**
* Set modeGestionCoGestion.
*/
public function setModeGestionCoGestion(?ModeGestionCoGestion $modeGestionCoGestion = null): static
{
$this->modeGestionCoGestion = $modeGestionCoGestion;
return $this;
}
/**
* Get modeGestionCoGestion.
*
* @return ModeGestionCoGestion
*/
public function getModeGestionCoGestion()
{
return $this->modeGestionCoGestion;
}
/**
* Add politiqueVille.
*/
public function addPolitiqueVille(PolitiqueVille $politiqueVille): static
{
$this->politiqueVille[] = $politiqueVille;
return $this;
}
/**
* Remove politiqueVille.
*/
public function removePolitiqueVille(PolitiqueVille $politiqueVille): void
{
$this->politiqueVille->removeElement($politiqueVille);
}
/**
* Get politiqueVille.
*
* @return Collection
*/
public function getPolitiqueVille()
{
return $this->politiqueVille;
}
/**
* Get format
* pour le filtre.
*/
public function getFormat(): string
{
return '';
}
/**
* Get onlyComplete
* pour le filtre.
*/
public function getOnlyComplete(): bool
{
return false;
}
/**
* Get info
* pour le filtre.
*/
public function getInfo(): string
{
return '';
}
/**
* Get groupe
* pour le filtre.
*/
public function getGroupe(): string
{
return '';
}
/**
* Get query.
*
* @return string
*/
public function getAddQuery(string $alias): array
{
$query_join = [];
$query = '';
$join = '';
if ($this->modeGestion) {
$query .= ' AND '.$alias.'.modeGestion = '.$this->modeGestion->getId();
}
if ($this->modeGestionCollectiviteLocale) {
$query .= ' AND '.$alias.'.modeGestionCollectiviteLocale = '.$this->modeGestionCollectiviteLocale->getId();
}
if ($this->modeGestionCoGestion) {
$query .= ' AND '.$alias.'.modeGestionCoGestion = '.$this->modeGestionCoGestion->getId();
}
if ($this->adherentAutreFederation) {
$join .= ' JOIN '.$alias.'.adherentAutreFederation2 aaf2';
$query .= ' AND aaf2.id = '.$this->adherentAutreFederation->getId();
}
if ($this->territoireIntervention) {
$query .= ' AND '.$alias.'. territoireIntervention = '.$this->territoireIntervention->getId();
}
if ($this->territoireInterventionUrbaine) {
$query .= ' AND '.$alias.'.territoireInterventionUrbaine = '.$this->territoireInterventionUrbaine->getId();
}
if ($this->territoireInterventionRurale) {
$query .= ' AND '.$alias.'. territoireInterventionRurale = '.$this->territoireInterventionRurale->getId();
}
if ($this->agrement) {
$join .= ' JOIN '.$alias.'.agrement ag';
$query .= ' AND ag.id = '.$this->agrement->getId();
}
if ($this->isAdherentFederation) {
$query .= ' AND '.$alias.'.isAdherentFederation = '.$this->isAdherentFederation;
}
if ($this->isGensVoyage) {
$query .= ' AND '.$alias.'.isGensVoyage = '.$this->isGensVoyage;
}
if ($this->isMultiSites) {
$query .= ' AND '.$alias.'.isMultiSites = '.$this->isMultiSites;
}
if ($this->isItinerante) {
$query .= ' AND '.$alias.'.isItinerante = '.$this->isItinerante;
}
// if ($this->isTerritoireRevitalisationRurale) {
// $query .= " AND " . $alias . ".isTerritoireRevitalisationRurale = " . $this->isTerritoireRevitalisationRurale;
// }
if ((is_countable($this->politiqueVille) ? count($this->politiqueVille) : 0) > 0) {
$join .= ' JOIN '.$alias.'.politiqueVille pv';
foreach ($this->politiqueVille as $politique) {
$query .= ' AND pv.id = '.$politique->getId();
}
}
if ($this->communes) {
$join .= ' JOIN '.$alias.'.communeImplementation c';
$query .= ' AND c.insee IN ('.$this->communes.')';
}
if ($this->departement) {
$query .= ' AND '.$alias.'. departement = '.$this->getDepartement()->getId();
}
$query_join['query'] = $query;
$query_join['join'] = $join;
return $query_join;
}
/**
* Get query.
*
* @return string
*/
public function getAddQuerySQL(string $alias): array
{
$query_join = [];
$query = '';
$join = '';
if ($this->modeGestion) {
$query .= ' AND '.$alias.'.mode_gestion_id = '.$this->modeGestion->getId();
}
if ($this->modeGestionCollectiviteLocale) {
$query .= ' AND '.$alias.'.mode_gestion_collectivite_locale_id = '.$this->modeGestionCollectiviteLocale->getId();
}
// if ($this->modeGestionCoGestion) {
// $query .= " AND " . $alias . ".mode_gestion_co_gestion_id = " . $this->modeGestionCoGestion->getId();
// }
if ($this->adherentAutreFederation) {
$query .= ' AND '.$alias.'.precision_adherent_autre_federation = '.$this->adherentAutreFederation->getId();
}
if ($this->territoireIntervention) {
$query .= ' AND '.$alias.'.territoire_intervention_id = '.$this->territoireIntervention->getId();
}
if ($this->territoireInterventionUrbaine) {
$query .= ' AND '.$alias.'.territoire_intervention_urbaine_id = '.$this->territoireInterventionUrbaine->getId();
}
if ($this->territoireInterventionRurale) {
$query .= ' AND '.$alias.'.territoire_intervention_rurale_id = '.$this->territoireInterventionRurale->getId();
}
if ($this->agrement) {
$join .= ' JOIN Agrement ag ON agrement_id=ad.id';
$query .= ' AND ag.id = '.$this->agrement->getId();
}
if ($this->isAdherentFederation) {
$query .= ' AND '.$alias.'.is_adherent_federation = '.$this->isAdherentFederation;
}
if ($this->isGensVoyage) {
$query .= ' AND '.$alias.'.is_gens_voyage = '.$this->isGensVoyage;
}
if ($this->isTerritoireRevitalisationRurale) {
$query .= ' AND '.$alias.'.is_territoire_revitalisation_rurale = '.$this->isTerritoireRevitalisationRurale;
}
if ($this->politiqueVille && (is_countable($this->politiqueVille) ? count($this->politiqueVille) : 0)) {
$join .= ' JOIN structures_politique_villes spv ON s.id = spv.structure_id ';
$politiqueVilleIds = [];
foreach ($this->politiqueVille as $politiqueVille) {
$politiqueVilleIds[] = $politiqueVille->getId();
}
$query .= ' AND spv.politiqueville_id IN ('.implode(',', $politiqueVilleIds).')';
}
if ($this->communes) {
$join .= ' JOIN Commune c ON commune_implementation_id = c.id ';
$query .= ' AND c.insee IN ('.$this->communes.')';
}
$query_join['query'] = $query;
$query_join['join'] = $join;
return $query_join;
}
/**
* Set agrement.
*/
public function setAgrement(?Agrement $agrement = null): static
{
$this->agrement = $agrement;
return $this;
}
/**
* Get agrement.
*
* @return Agrement
*/
public function getAgrement()
{
return $this->agrement;
}
/**
* Set communes.
*
* @param string $communes
*/
public function setCommunes($communes): static
{
$this->communes = $communes;
return $this;
}
/**
* Get communes.
*
* @return string
*/
public function getCommunes()
{
return $this->communes;
}
/**
* Set isGensVoyage.
*
* @param int $isGensVoyage
*/
public function setIsGensVoyage($isGensVoyage): static
{
$this->isGensVoyage = $isGensVoyage;
return $this;
}
/**
* Get isGensVoyage.
*
* @return int
*/
public function getIsGensVoyage()
{
return $this->isGensVoyage;
}
/**
* Set hasEVSAgrement.
*
* @param bool $hasEVSAgrement
*/
public function setHasEVSAgrement($hasEVSAgrement): static
{
$this->hasEVSAgrement = $hasEVSAgrement;
return $this;
}
/**
* Get hasEVSAgrement.
*
* @return bool
*/
public function getHasEVSAgrement()
{
return $this->hasEVSAgrement;
}
/**
* Set systemeAdhesionGoal.
*/
public function setSystemeAdhesionGoal(?SystemeAdhesionGoal $systemeAdhesionGoal = null): static
{
$this->systemeAdhesionGoal = $systemeAdhesionGoal;
return $this;
}
/**
* Get systemeAdhesionGoal.
*
* @return SystemeAdhesionGoal
*/
public function getSystemeAdhesionGoal()
{
return $this->systemeAdhesionGoal;
}
/**
* Set createdBy.
*/
public function setCreatedBy(?User $createdBy = null): static
{
$this->createdBy = $createdBy;
return $this;
}
/**
* Get createdBy.
*
* @return \User
*/
public function getCreatedBy()
{
return $this->createdBy;
}
public function getIsMultiSites(): ?bool
{
return $this->isMultiSites;
}
public function setIsMultiSites(?bool $isMultiSites): self
{
$this->isMultiSites = $isMultiSites;
return $this;
}
public function getIsItinerante(): ?bool
{
return $this->isItinerante;
}
public function setIsItinerante(?bool $isItinerante): self
{
$this->isItinerante = $isItinerante;
return $this;
}
/**
* @return Collection<int, TypeStructure>
*/
public function getTypesStructure(): Collection
{
return $this->typesStructure;
}
public function addTypesStructure(TypeStructure $typesStructure): self
{
if (!$this->typesStructure->contains($typesStructure)) {
$this->typesStructure[] = $typesStructure;
}
return $this;
}
public function removeTypesStructure(TypeStructure $typesStructure): self
{
$this->typesStructure->removeElement($typesStructure);
return $this;
}
public function getDepartement(): ?Departement
{
return $this->departement;
}
public function setDepartement(?Departement $departement): self
{
$this->departement = $departement;
return $this;
}
public function isHasEVSAgrement(): ?bool
{
return $this->hasEVSAgrement;
}
public function isIsMultiSites(): ?bool
{
return $this->isMultiSites;
}
public function isIsItinerante(): ?bool
{
return $this->isItinerante;
}
}