src/Entity/Societe.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\SocieteRepository;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\Common\Collections\Criteria;
  7. use Doctrine\ORM\Mapping as ORM;
  8. /**
  9.  * @ORM\Entity(repositoryClass=SocieteRepository::class)
  10.  */
  11. class Societe
  12. {
  13.     /**
  14.      * @ORM\Id
  15.      * @ORM\GeneratedValue
  16.      * @ORM\Column(type="integer")
  17.      */
  18.     private $id;
  19.     /**
  20.      * @ORM\Column(type="string", length=20)
  21.      */
  22.     private $classe_societe;
  23.     /**
  24.      * @ORM\Column(type="string", length=255)
  25.      */
  26.     private $lib_societe;
  27.     /**
  28.      * @ORM\Column(type="string", length=255)
  29.      */
  30.     private $type_societe;
  31.     /**
  32.      * @ORM\Column(type="string", length=20)
  33.      */
  34.     private $sigle_societe;
  35.     /**
  36.      * @ORM\Column(type="integer")
  37.      */
  38.     private $nb_historique_projet;
  39.     /**
  40.      * @ORM\Column(type="datetime")
  41.      */
  42.     private $date_crea;
  43.     /**
  44.      * @ORM\Column(type="integer")
  45.      */
  46.     private $user_crea;
  47.     /**
  48.      * @ORM\Column(type="datetime", nullable=true)
  49.      */
  50.     private $date_modif;
  51.     /**
  52.      * @ORM\Column(type="integer", nullable=true)
  53.      */
  54.     private $user_modif;
  55.     /**
  56.      * @ORM\Column(type="boolean")
  57.      */
  58.     private $is_active;
  59.     /**
  60.      * @ORM\ManyToMany(targetEntity=Tiers::class, inversedBy="societes")
  61.      */
  62.     private $tiers;
  63.     /**
  64.      * @ORM\OneToMany(targetEntity=Adresse::class, mappedBy="societe")
  65.      */
  66.     private $adresses;
  67.     /**
  68.      * @var Tiers
  69.      */
  70.     private $main_tiers null;
  71.     /**
  72.      * @ORM\OneToMany(targetEntity=Projet::class, mappedBy="societe")
  73.      */
  74.     private $projets;
  75.     /**
  76.      * @ORM\OneToMany(targetEntity=Document::class, mappedBy="tiers")
  77.      */
  78.     private $documents;
  79.     /**
  80.      * @ORM\Column(type="string", length=255, nullable=true)
  81.      */
  82.     private $num_tva;
  83.     /**
  84.      * @ORM\Column(type="text", nullable=true)
  85.      */
  86.     private $condition_reglement;
  87.     public function __construct()
  88.     {
  89.         $this->getMainTiers();
  90.         $this->tiers = new ArrayCollection();
  91.         $this->adresses = new ArrayCollection();
  92.         $this->projets = new ArrayCollection();
  93.         $this->documents = new ArrayCollection();
  94.     }
  95.     public function clearForJsonResp(){
  96.         $this->getMainTiers();
  97.         $this->tiers = new ArrayCollection();
  98. //        $this->adresses = new ArrayCollection();
  99.         $this->projets = new ArrayCollection();
  100.         $this->documents = new ArrayCollection();
  101.     }
  102.     public function getId(): ?int
  103.     {
  104.         return $this->id;
  105.     }
  106.     public function getClasseSociete(): ?string
  107.     {
  108.         return $this->classe_societe;
  109.     }
  110.     public function setClasseSociete(string $classe_societe): self
  111.     {
  112.         $this->classe_societe $classe_societe;
  113.         return $this;
  114.     }
  115.     public function getLibSociete(): ?string
  116.     {
  117.         return $this->lib_societe;
  118.     }
  119.     public function setLibSociete(string $lib_societe): self
  120.     {
  121.         $this->lib_societe $lib_societe;
  122.         return $this;
  123.     }
  124.     public function getTypeSociete(): ?string
  125.     {
  126.         return $this->type_societe;
  127.     }
  128.     public function setTypeSociete(string $type_societe): self
  129.     {
  130.         $this->type_societe $type_societe;
  131.         return $this;
  132.     }
  133.     public function getSigleSociete(): ?string
  134.     {
  135.         return $this->sigle_societe;
  136.     }
  137.     public function setSigleSociete(string $sigle_societe): self
  138.     {
  139.         $this->sigle_societe $sigle_societe;
  140.         return $this;
  141.     }
  142.     public function getNbHistoriqueProjet(): ?int
  143.     {
  144.         return $this->nb_historique_projet;
  145.     }
  146.     public function setNbHistoriqueProjet(int $nb_historique_projet): self
  147.     {
  148.         $this->nb_historique_projet $nb_historique_projet;
  149.         return $this;
  150.     }
  151.     public function getDateCrea(): ?\DateTimeInterface
  152.     {
  153.         return $this->date_crea;
  154.     }
  155.     public function setDateCrea(\DateTimeInterface $date_crea): self
  156.     {
  157.         $this->date_crea $date_crea;
  158.         return $this;
  159.     }
  160.     public function getUserCrea(): ?int
  161.     {
  162.         return $this->user_crea;
  163.     }
  164.     public function setUserCrea(int $user_crea): self
  165.     {
  166.         $this->user_crea $user_crea;
  167.         return $this;
  168.     }
  169.     public function getDateModif(): ?\DateTimeInterface
  170.     {
  171.         return $this->date_modif;
  172.     }
  173.     public function setDateModif(?\DateTimeInterface $date_modif): self
  174.     {
  175.         $this->date_modif $date_modif;
  176.         return $this;
  177.     }
  178.     public function getUserModif(): ?int
  179.     {
  180.         return $this->user_modif;
  181.     }
  182.     public function setUserModif(?int $user_modif): self
  183.     {
  184.         $this->user_modif $user_modif;
  185.         return $this;
  186.     }
  187.     public function getIsActive(): ?bool
  188.     {
  189.         return $this->is_active;
  190.     }
  191.     public function setIsActive(bool $is_active): self
  192.     {
  193.         $this->is_active $is_active;
  194.         return $this;
  195.     }
  196.     /**
  197.      * @return Collection<int, Tiers>
  198.      */
  199.     public function getTiers(): Collection
  200.     {
  201.         return $this->tiers;
  202.     }
  203.     public function getMainTiers(): ?Tiers
  204.     {
  205.         if(null===$this->tiers) return null;
  206.         $tiersList = array();
  207.         foreach ($this->tiers as $tiers$tiersList$tiers->getId() ] = $tiers;
  208.         if(!empty($tiersList)) {
  209.             ksort($tiersList);
  210.             $this->main_tiers array_shift($tiersList);
  211.         }
  212.         return $this->main_tiers;
  213.     }
  214.     public function addTier(Tiers $tier): self
  215.     {
  216.         if (!$this->tiers->contains($tier)) {
  217.             $this->tiers[] = $tier;
  218.         }
  219.         return $this;
  220.     }
  221.     public function removeTier(Tiers $tier): self
  222.     {
  223.         $this->tiers->removeElement($tier);
  224.         return $this;
  225.     }
  226.     /**
  227.      * @return Collection<int, Adresse>
  228.      */
  229.     public function getAdresses(): Collection
  230.     {
  231.         return $this->adresses;
  232.     }
  233.     public function addAdress(Adresse $adress): self
  234.     {
  235.         if (!$this->adresses->contains($adress)) {
  236.             $this->adresses[] = $adress;
  237.             $adress->setSociete($this);
  238.         }
  239.         return $this;
  240.     }
  241.     public function removeAdress(Adresse $adress): self
  242.     {
  243.         if ($this->adresses->removeElement($adress)) {
  244.             // set the owning side to null (unless already changed)
  245.             if ($adress->getSociete() === $this) {
  246.                 $adress->setSociete(null);
  247.             }
  248.         }
  249.         return $this;
  250.     }
  251.     public function serializeAdresse()
  252.     {
  253.         if(empty($this->adresses)) return array();
  254.         $adresseList = array();
  255.         foreach ($this->adresses->toArray() as $adresse){
  256.             $adresseList[] = array(
  257.                 'id_adresse' => $adresse->getId(),
  258.                 'lib_adresse' => $adresse->getLibAdresse(),
  259.                 'ligne_1' => $adresse->getLigne1(),
  260.                 'ligne_2' => $adresse->getLigne2(),
  261.                 'code_postal' => $adresse->getCodePostal(),
  262.                 'ville' => $adresse->getVille(),
  263.                 'pays' => $adresse->getPays(),
  264.             );
  265.         }
  266.         return $adresseList;
  267.     }
  268.     /**
  269.      * @return Collection<int, Projet>
  270.      */
  271.     public function getProjets(): Collection
  272.     {
  273.         return $this->projets;
  274.     }
  275.     public function addProjet(Projet $projet): self
  276.     {
  277.         if (!$this->projets->contains($projet)) {
  278.             $this->projets[] = $projet;
  279.             $projet->setSociete($this);
  280.         }
  281.         return $this;
  282.     }
  283.     public function removeProjet(Projet $projet): self
  284.     {
  285.         if ($this->projets->removeElement($projet)) {
  286.             // set the owning side to null (unless already changed)
  287.             if ($projet->getSociete() === $this) {
  288.                 $projet->setSociete(null);
  289.             }
  290.         }
  291.         return $this;
  292.     }
  293.     /**
  294.      * 'AO' = Appel d'offre + Appel d'offre annulé
  295.      * 'PROD' = Projet en cours + Projet terminé + Projet annulé
  296.      * @param string $statut
  297.      * Retourne le nombre de projet de la société
  298.      * @return int
  299.      */
  300.     public function countNbProjet(string $statut): int
  301.     {
  302.         $projetList = array();
  303.         if('AO'===$statut){
  304.             $projetList $this->getProjets()->filter(function (Projet $projet){
  305.                 return in_array($projet->getStatut()->getId(), [1,2,3,4,5]) && $projet->getIsActive();
  306.             });
  307.         }
  308.         if('PROD'===$statut){
  309.             $projetList $this->getProjets()->filter(function (Projet $projet){
  310.                 return in_array($projet->getStatut()->getId(), [1,2,3,4,5]) && $projet->getIsActive();
  311.             });
  312.         }
  313.         return count($projetList);
  314.     }
  315.     /**
  316.      * Génère le numéro du prochain appel d'offre de la société
  317.      * @param string $prefix correspond à l'entité connectée
  318.      * @return string
  319.      */
  320.     public function createNumAO(string $prefix): string
  321.     {
  322.         $nb 1;
  323.         $nb+= $this->countNbProjet('AO');
  324.         return $prefix .'-'$this->getSigleSociete() .'-AO-'$nb;
  325.     }
  326.     /**
  327.      * Génère le numéro de production du prochain projet de la société
  328.      * @param string $prefix correspond à l'entité connectée
  329.      * @return string
  330.      */
  331.     public function createNumProd(string $prefix): string
  332.     {
  333.         $nb 1;
  334.         $nb+= $this->getNbHistoriqueProjet();
  335.         $nb+= $this->countNbProjet('PROD');
  336.         return $prefix .'-'$this->getSigleSociete() .'-'$nb;
  337.     }
  338.     /**
  339.      * @return Collection<int, Document>
  340.      */
  341.     public function getDocuments(): Collection
  342.     {
  343.         return $this->documents;
  344.     }
  345.     public function addDocument(Document $document): self
  346.     {
  347.         if (!$this->documents->contains($document)) {
  348.             $this->documents[] = $document;
  349.             $document->setTiers($this);
  350.         }
  351.         return $this;
  352.     }
  353.     public function removeDocument(Document $document): self
  354.     {
  355.         if ($this->documents->removeElement($document)) {
  356.             // set the owning side to null (unless already changed)
  357.             if ($document->getTiers() === $this) {
  358.                 $document->setTiers(null);
  359.             }
  360.         }
  361.         return $this;
  362.     }
  363.     public function getNumTva(): ?string
  364.     {
  365.         return $this->num_tva;
  366.     }
  367.     public function setNumTva(?string $num_tva): self
  368.     {
  369.         $this->num_tva $num_tva;
  370.         return $this;
  371.     }
  372.     public function getConditionReglement(): ?string
  373.     {
  374.         return $this->condition_reglement;
  375.     }
  376.     public function setConditionReglement(?string $condition_reglement): self
  377.     {
  378.         $this->condition_reglement $condition_reglement;
  379.         return $this;
  380.     }
  381. }