<?php
namespace App\Entity;
use App\Repository\ConcessionRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
#[ORM\Entity(repositoryClass: ConcessionRepository::class)]
class Concession
{
public const NATURE_OPTIONS = ["Concession de travaux", "Concession de service","Concession de service public","Délégation de service public"];
public const PROCEDURE_OPTIONS = ["Procédure négociée ouverte","Procédure non négociée ouverte","Procédure négociée restreinte","Procédure non négociée restreinte"];
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
#[Assert\Length(max: 16)]
#[Assert\NotNull(message: 'Le champs Numéro unique \'identification unique de contrat de concession doit être renseigné')]
private ?string $concessionIdentifiant = null;
#[ORM\Column(length: 255)]
#[Assert\NotNull(message: 'Le champs Identifiant de l\autorité concédante doit être renseigné')]
private ?string $autoriteConcedanteId = null;
#[ORM\Column(length: 255)]
#[Assert\NotNull(message: 'Le champs Nom de l\'autorité conédante doit être renseigné')]
private ?string $autoriteConcedanteNom = null;
#[ORM\Column(length: 255)]
#[Assert\NotNull(message: 'Le champs nature doit être renseigné')]
#[Assert\Choice(choices: Concession::NATURE_OPTIONS)]
private ?string $nature = null;
#[ORM\Column(length: 1000)]
#[Assert\NotNull(message: 'Le champs objet doit être renseigné')]
#[Assert\Length(max: 1000)]
private ?string $objet = null;
#[ORM\Column(length: 255)]
#[Assert\Choice(choices: Concession::PROCEDURE_OPTIONS)]
#[Assert\NotNull(message: 'Le champs procédure doit être renseigné')]
private ?string $concessionProcedure = null;
#[Assert\NotNull(message: "Le champ Lieu d'exécution doit être renseigné.")]
#[ORM\Column(length: 255)]
private ?string $lieuExecutionCode = null;
#[ORM\Column(length: 255)]
#[Assert\NotNull(message: "Le champs Type de lieu d'exécution doit être renseigné.")]
#[Assert\Choice(choices: MarchePublic::CHOICE_TYPE_LIEUX, message: 'Choisissez une valeur valide pour le type de code du lieu d’exécution.')]
private ?string $lieuExecutionTypeCode = null;
#[ORM\Column(length: 500)]
#[Assert\NotNull(message: "Le champ nom du lieu d'exécution doit être renseigné.")]
private ?string $lieuExecutionNom = null;
#[ORM\Column]
#[Assert\NotNull(message: "La durée en mois doit être renseignée.")]
#[Assert\Type(type: 'integer', message: "La durée doit être un nombre entier.")]
#[Assert\GreaterThanOrEqual(value: 1, message: "La durée doit être d'au moins 1 mois.")]
private ?int $dureeMois = null;
#[ORM\Column(type: Types::DATE_MUTABLE)]
#[Assert\NotNull(message: 'La date de signature doit être renseignée')]
private ?\DateTimeInterface $dateSignature = null;
#[ORM\Column(type: Types::DATE_MUTABLE)]
#[Assert\NotNull(message: 'La date de publication des données doit être renseignée')]
private ?\DateTimeInterface $datePublicationDonnees = null;
#[ORM\Column(type: Types::DATE_MUTABLE)]
#[Assert\NotNull(message: 'La date de début d\'exécution doit être renseignée')]
private ?\DateTimeInterface $dateDebutExecution = null;
#[ORM\Column(type: Types::DECIMAL, precision: 20, scale: 2)]
#[Assert\Type(type: 'numeric', message: 'Le montant de la valeur globale doit être un nombre.')]
#[Assert\NotNull(message: 'La valeur globale doit être renseignée')]
#[Assert\PositiveOrZero(message: 'Le montant de la valeur globale doit être positif ou zéro.')]
private ?string $valeurGlobale = null;
#[ORM\Column(type: Types::DECIMAL, precision: 20, scale: 2)]
#[Assert\NotNull(message: 'La date valeur globale doit être renseignée')]
#[Assert\Type(type: 'numeric', message: 'Le montant de la subvention publique doit être un nombre.')]
#[Assert\PositiveOrZero(message: 'Le montant de la subvention publique doit être positif ou zéro.')]
private ?string $montantSubventionPublique = null;
#[ORM\Column]
#[Assert\Choice(choices: ['Clause sociale', 'Critère social', 'Marché réservé', 'Pas de considération sociale'], multiple: true, message: "Choisissez une ou plusieurs valeurs valides pour les considérations sociales.")]
#[Assert\NotNull(message: "Le champ Considérations sociales doit être renseigné.")]
private array $considerationsSociales = [];
#[ORM\Column]
#[Assert\NotNull(message: "Le champ considérations environnementale doit être renseigné.")]
#[Assert\Choice(choices: ['Clause environnementale', 'Critère environnemental', 'Pas de considération environnementale'], multiple: true, message: "Choisissez une ou plusieurs valeurs valides pour les considérations environnementales.")]
private array $considerationsEnvironnementales = [];
#[ORM\OneToMany(mappedBy: 'concession', targetEntity: DonneePerformance::class, cascade: ['persist'])]
private Collection $donneePerformance;
#[ORM\OneToMany(mappedBy: 'concession', targetEntity: Titulaire::class, cascade: ['persist'])]
private Collection $titulaire;
#[ORM\OneToMany(mappedBy: 'concession', targetEntity: ModificationConcession::class, cascade: ['persist'])]
private Collection $modificationConcession;
#[ORM\Column(type: Types::DATE_MUTABLE)]
private ?\DateTimeInterface $dateMade = null;
#[ORM\ManyToOne(inversedBy: 'concessions')]
private ?User $user = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $apiId = null;
public function __construct()
{
$this->donneePerformance = new ArrayCollection();
$this->titulaire = new ArrayCollection();
$this->modificationConcession = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getConcessionIdentifiant(): ?string
{
return $this->concessionIdentifiant;
}
public function setConcessionIdentifiant(string $concessionIdentifiant): static
{
$this->concessionIdentifiant = $concessionIdentifiant;
return $this;
}
public function getAutoriteConcedanteId(): ?string
{
return $this->autoriteConcedanteId;
}
public function setAutoriteConcedanteId(string $autoriteConcedanteId): static
{
$this->autoriteConcedanteId = $autoriteConcedanteId;
return $this;
}
public function getAutoriteConcedanteNom(): ?string
{
return $this->autoriteConcedanteNom;
}
public function setAutoriteConcedanteNom(string $autoriteConcedanteNom): static
{
$this->autoriteConcedanteNom = $autoriteConcedanteNom;
return $this;
}
public function getNature(): ?string
{
return $this->nature;
}
public function setNature(string $nature): static
{
$this->nature = $nature;
return $this;
}
public function getObjet(): ?string
{
return $this->objet;
}
public function setObjet(string $objet): static
{
$this->objet = $objet;
return $this;
}
public function getConcessionProcedure(): ?string
{
return $this->concessionProcedure;
}
public function setConcessionProcedure(string $concessionProcedure): static
{
$this->concessionProcedure = $concessionProcedure;
return $this;
}
public function getLieuExecutionTypeCode(): ?string
{
return $this->lieuExecutionTypeCode;
}
public function setLieuExecutionTypeCode(string $lieuExecutionTypeCode): static
{
$this->lieuExecutionTypeCode = $lieuExecutionTypeCode;
return $this;
}
public function getLieuExecutionCode(): ?string
{
return $this->lieuExecutionCode;
}
public function setLieuExecutionCode(string $lieuExecutionCode): static
{
$this->lieuExecutionCode = $lieuExecutionCode;
return $this;
}
public function getLieuExecutionNom(): ?string
{
return $this->lieuExecutionNom;
}
public function setLieuExecutionNom(string $lieuExecutionNom): static
{
$this->lieuExecutionNom = $lieuExecutionNom;
return $this;
}
public function getDureeMois(): ?int
{
return $this->dureeMois;
}
public function setDureeMois(int $dureeMois): static
{
$this->dureeMois = $dureeMois;
return $this;
}
public function getDateSignature(): ?\DateTimeInterface
{
return $this->dateSignature;
}
public function setDateSignature(\DateTimeInterface $dateSignature): static
{
$this->dateSignature = $dateSignature;
return $this;
}
public function getDatePublicationDonnees(): ?\DateTimeInterface
{
return $this->datePublicationDonnees;
}
public function setDatePublicationDonnees(\DateTimeInterface $datePublicationDonnees): static
{
$this->datePublicationDonnees = $datePublicationDonnees;
return $this;
}
public function getDateDebutExecution(): ?\DateTimeInterface
{
return $this->dateDebutExecution;
}
public function setDateDebutExecution(\DateTimeInterface $dateDebutExecution): static
{
$this->dateDebutExecution = $dateDebutExecution;
return $this;
}
public function getValeurGlobale(): ?string
{
return $this->valeurGlobale;
}
public function setValeurGlobale(string $valeurGlobale): static
{
$this->valeurGlobale = $valeurGlobale;
return $this;
}
public function getMontantSubventionPublique(): ?string
{
return $this->montantSubventionPublique;
}
public function setMontantSubventionPublique(string $montantSubventionPublique): static
{
$this->montantSubventionPublique = $montantSubventionPublique;
return $this;
}
public function getConsiderationsSociales(): array
{
return $this->considerationsSociales;
}
public function setConsiderationsSociales(array $considerationsSociales): static
{
$this->considerationsSociales = $considerationsSociales;
return $this;
}
public function getConsiderationsEnvironnementales(): array
{
return $this->considerationsEnvironnementales;
}
public function setConsiderationsEnvironnementales(array $considerationsEnvironnementales): static
{
$this->considerationsEnvironnementales = $considerationsEnvironnementales;
return $this;
}
/**
* @return Collection<int, DonneePerformance>
*/
public function getDonneePerformance(): Collection
{
return $this->donneePerformance;
}
public function addDonneePerformance(DonneePerformance $donneePerformance): static
{
if (!$this->donneePerformance->contains($donneePerformance)) {
$this->donneePerformance->add($donneePerformance);
$donneePerformance->setConcession($this);
}
return $this;
}
public function removeDonneePerformance(DonneePerformance $donneePerformance): static
{
if ($this->donneePerformance->removeElement($donneePerformance)) {
// set the owning side to null (unless already changed)
if ($donneePerformance->getConcession() === $this) {
$donneePerformance->setConcession(null);
}
}
return $this;
}
/**
* @return Collection<int, Titulaire>
*/
public function getTitulaire(): Collection
{
return $this->titulaire;
}
public function addTitulaire(Titulaire $titulaire): static
{
if (!$this->titulaire->contains($titulaire)) {
$this->titulaire->add($titulaire);
$titulaire->setConcession($this);
}
return $this;
}
public function removeTitulaire(Titulaire $titulaire): static
{
if ($this->titulaire->removeElement($titulaire)) {
// set the owning side to null (unless already changed)
if ($titulaire->getConcession() === $this) {
$titulaire->setConcession(null);
}
}
return $this;
}
/**
* @return Collection<int, ModificationConcession>
*/
public function getModificationConcession(): Collection
{
return $this->modificationConcession;
}
public function addModificationConcession(ModificationConcession $modificationConcession): static
{
if (!$this->modificationConcession->contains($modificationConcession)) {
$this->modificationConcession->add($modificationConcession);
$modificationConcession->setConcession($this);
}
return $this;
}
public function removeModificationConcession(ModificationConcession $modificationConcession): static
{
if ($this->modificationConcession->removeElement($modificationConcession)) {
// set the owning side to null (unless already changed)
if ($modificationConcession->getConcession() === $this) {
$modificationConcession->setConcession(null);
}
}
return $this;
}
public function getDateMade(): ?\DateTimeInterface
{
return $this->dateMade;
}
public function setDateMade(\DateTimeInterface $dateMade): static
{
$this->dateMade = $dateMade;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): static
{
$this->user = $user;
return $this;
}
public function getApiId(): ?string
{
return $this->apiId;
}
public function setApiId(?string $apiId): static
{
$this->apiId = $apiId;
return $this;
}
}