src/Entity/Projet.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Model\Workflow\Workflow;
  4. use App\Repository\ProjetRepository;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\ORM\Mapping as ORM;
  8. /**
  9.  * @ORM\Entity(repositoryClass=ProjetRepository::class)
  10.  */
  11. class Projet
  12. {
  13.     public object $workflow;
  14.     /**
  15.      * @return object
  16.      */
  17.     public function getWorkflow(): object
  18.     {
  19.         return $this->workflow;
  20.     }
  21.     /**
  22.      * @param object $workflow
  23.      */
  24.     public function setWorkflow(): void
  25.     {
  26.         $Workflow = new Workflow();
  27.         $this->workflow $Workflow->processProjet($this);
  28.     }
  29.     /**
  30.      * @ORM\Id
  31.      * @ORM\GeneratedValue
  32.      * @ORM\Column(type="integer")
  33.      */
  34.     private $id;
  35.     /**
  36.      * @ORM\Column(type="string", length=255, nullable=true)
  37.      */
  38.     private $num_prod;
  39.     /**
  40.      * @ORM\Column(type="string", length=255, nullable=true)
  41.      */
  42.     private $num_administratif;
  43.     /**
  44.      * @ORM\ManyToOne(targetEntity=Societe::class, inversedBy="projets")
  45.      * @ORM\JoinColumn(nullable=false)
  46.      */
  47.     private $societe;
  48.     /**
  49.      * @ORM\ManyToOne(targetEntity=Tiers::class, inversedBy="projet_producteur")
  50.      * @ORM\JoinColumn(nullable=false)
  51.      */
  52.     private $producteur;
  53.     /**
  54.      * @ORM\Column(type="string", length=255, nullable=true)
  55.      */
  56.     private $lib_projet;
  57.     /**
  58.      * @ORM\Column(type="string", length=255, nullable=true)
  59.      */
  60.     private $type_projet;
  61.     /**
  62.      * @ORM\Column(type="date")
  63.      */
  64.     private $date_deb;
  65.     /**
  66.      * @ORM\Column(type="date")
  67.      */
  68.     private $date_fin;
  69.     /**
  70.      * @ORM\Column(type="datetime")
  71.      */
  72.     private $date_crea;
  73.     /**
  74.      * @ORM\Column(type="integer")
  75.      */
  76.     private $user_crea;
  77.     /**
  78.      * @ORM\Column(type="datetime", nullable=true)
  79.      */
  80.     private $date_modif;
  81.     /**
  82.      * @ORM\Column(type="integer", nullable=true)
  83.      */
  84.     private $user_modif;
  85.     /**
  86.      * @ORM\Column(type="boolean")
  87.      */
  88.     private $is_active;
  89.     /**
  90.      * @ORM\ManyToOne(targetEntity=Tiers::class, inversedBy="projet_tiers")
  91.      */
  92.     private $tiers;
  93.     /**
  94.      * @ORM\ManyToOne(targetEntity=LdvStatutProjet::class)
  95.      * @ORM\JoinColumn(nullable=false)
  96.      */
  97.     private $statut;
  98.     /**
  99.      * @ORM\OneToMany(targetEntity=Document::class, mappedBy="projet")
  100.      */
  101.     private $documents;
  102.     /**
  103.      * @ORM\Column(type="text", nullable=true)
  104.      */
  105.     private $commentaire;
  106.     /**
  107.      * @ORM\ManyToMany(targetEntity=Tiers::class, inversedBy="projet_salarie")
  108.      * @ORM\JoinTable(name="projet_salarie")
  109.      */
  110.     private $salaries;
  111.     /**
  112.      * @ORM\ManyToMany(targetEntity=Tiers::class, inversedBy="projet_presta")
  113.      * @ORM\JoinTable(name="projet_presta")
  114.      */
  115.     private $prestataires;
  116.     /**
  117.      * @ORM\Column(type="boolean")
  118.      */
  119.     private $is_appel_offre;
  120.     public function __construct()
  121.     {
  122.         $this->documents = new ArrayCollection();
  123.         $this->salaries = new ArrayCollection();
  124.         $this->prestataire = new ArrayCollection();
  125.     }
  126.     public function getId(): ?int
  127.     {
  128.         return $this->id;
  129.     }
  130.     public function getNumProd(): ?string
  131.     {
  132.         return $this->num_prod;
  133.     }
  134.     public function setNumProd(?string $num_prod): self
  135.     {
  136.         $this->num_prod $num_prod;
  137.         return $this;
  138.     }
  139.     public function getNumAdministratif(): ?string
  140.     {
  141.         return $this->num_administratif;
  142.     }
  143.     public function setNumAdministratif(?string $num_administratif): self
  144.     {
  145.         $this->num_administratif $num_administratif;
  146.         return $this;
  147.     }
  148.     public function getSociete(): ?Societe
  149.     {
  150.         return $this->societe;
  151.     }
  152.     public function setSociete(?Societe $societe): self
  153.     {
  154.         $this->societe $societe;
  155.         return $this;
  156.     }
  157.     public function getProducteur(): ?Tiers
  158.     {
  159.         return $this->producteur;
  160.     }
  161.     public function setProducteur(?Tiers $producteur): self
  162.     {
  163.         $this->producteur $producteur;
  164.         return $this;
  165.     }
  166.     public function getLibProjet(): ?string
  167.     {
  168.         return $this->lib_projet;
  169.     }
  170.     public function setLibProjet(?string $lib_projet): self
  171.     {
  172.         $this->lib_projet $lib_projet;
  173.         return $this;
  174.     }
  175.     public function getTypeProjet(): ?string
  176.     {
  177.         return $this->type_projet;
  178.     }
  179.     public function setTypeProjet(?string $type_projet): self
  180.     {
  181.         $this->type_projet $type_projet;
  182.         return $this;
  183.     }
  184.     public function getDateDeb(): ?\DateTimeInterface
  185.     {
  186.         return $this->date_deb;
  187.     }
  188.     public function setDateDeb(\DateTimeInterface $date_deb): self
  189.     {
  190.         $this->date_deb $date_deb;
  191.         return $this;
  192.     }
  193.     public function getDateFin(): ?\DateTimeInterface
  194.     {
  195.         return $this->date_fin;
  196.     }
  197.     public function setDateFin(\DateTimeInterface $date_fin): self
  198.     {
  199.         $this->date_fin $date_fin;
  200.         return $this;
  201.     }
  202.     public function getDateCrea(): ?\DateTimeInterface
  203.     {
  204.         return $this->date_crea;
  205.     }
  206.     public function setDateCrea(\DateTimeInterface $date_crea): self
  207.     {
  208.         $this->date_crea $date_crea;
  209.         return $this;
  210.     }
  211.     public function getUserCrea(): ?int
  212.     {
  213.         return $this->user_crea;
  214.     }
  215.     public function setUserCrea(int $user_crea): self
  216.     {
  217.         $this->user_crea $user_crea;
  218.         return $this;
  219.     }
  220.     public function getDateModif(): ?\DateTimeInterface
  221.     {
  222.         return $this->date_modif;
  223.     }
  224.     public function setDateModif(?\DateTimeInterface $date_modif): self
  225.     {
  226.         $this->date_modif $date_modif;
  227.         return $this;
  228.     }
  229.     public function getUserModif(): ?int
  230.     {
  231.         return $this->user_modif;
  232.     }
  233.     public function setUserModif(?int $user_modif): self
  234.     {
  235.         $this->user_modif $user_modif;
  236.         return $this;
  237.     }
  238.     public function getIsActive(): ?bool
  239.     {
  240.         return $this->is_active;
  241.     }
  242.     public function setIsActive(bool $is_active): self
  243.     {
  244.         $this->is_active $is_active;
  245.         return $this;
  246.     }
  247.     public function getTiers(): ?Tiers
  248.     {
  249.         return $this->tiers;
  250.     }
  251.     public function setTiers(?Tiers $tiers): self
  252.     {
  253.         $this->tiers $tiers;
  254.         return $this;
  255.     }
  256.     public function getStatut(): ?LdvStatutProjet
  257.     {
  258.         return $this->statut;
  259.     }
  260.     public function setStatut(?LdvStatutProjet $statut): self
  261.     {
  262.         $this->statut $statut;
  263.         return $this;
  264.     }
  265.     /**
  266.      * @return Collection<int, Document>
  267.      */
  268.     public function getDocuments(): Collection
  269.     {
  270.         return $this->documents;
  271.     }
  272.     public function addDocument(Document $document): self
  273.     {
  274.         if (!$this->documents->contains($document)) {
  275.             $this->documents[] = $document;
  276.             $document->setProjet($this);
  277.         }
  278.         return $this;
  279.     }
  280.     public function removeDocument(Document $document): self
  281.     {
  282.         if ($this->documents->removeElement($document)) {
  283.             // set the owning side to null (unless already changed)
  284.             if ($document->getProjet() === $this) {
  285.                 $document->setProjet(null);
  286.             }
  287.         }
  288.         return $this;
  289.     }
  290.     public function getCommentaire(): ?string
  291.     {
  292.         return $this->commentaire;
  293.     }
  294.     public function setCommentaire(?string $commentaire): self
  295.     {
  296.         $this->commentaire $commentaire;
  297.         return $this;
  298.     }
  299.     /**
  300.      * @return float
  301.      */
  302.     public function getBudget(): float
  303.     {
  304.         $docList $this->getDocuments()->filter(function (Document $document){
  305.             return $document->getTypeDocument() === 'FACTURE PROFORMA';
  306.         })->toArray();
  307.         return array_reduce(
  308.             $docList,
  309.             function (float $sumDocument $document){
  310.                 return $sum $document->getMontantHt();
  311.             },
  312.             0.0
  313.         );
  314.     }
  315.     /**
  316.      * @return float
  317.      */
  318.     public function getChiffreAffaire(): float
  319.     {
  320.         $docList $this->getDocuments()->filter(function (Document $document){
  321.             return in_array($document->getTypeDocument(), ['FACTURE''AVOIR']);
  322.         })->toArray();
  323.         return array_reduce(
  324.             $docList,
  325.             function (float $sumDocument $document){
  326.                 $montant $document->getMontantHt();
  327.                 if('AVOIR'===$document->getTypeDocument()) $montant $montant * -1;
  328.                 return $sum $montant;
  329.             },
  330.             0.0
  331.         );
  332.     }
  333.     /**
  334.      * @return float
  335.      */
  336.     public function getChargeNdf(): float
  337.     {
  338.         $docList $this->getDocuments()->filter(function (Document $document){
  339.             return $document->getTypeDocument() === 'NDF';
  340.         })->toArray();
  341.         return array_reduce(
  342.             $docList,
  343.             function (float $sumDocument $document){
  344.                 return $sum $document->getMontantHt();
  345.             },
  346.             0.0
  347.         );
  348.     }
  349.     /**
  350.      * @return Collection<int, Tiers>
  351.      */
  352.     public function getSalaries(): Collection
  353.     {
  354.         return $this->salaries;
  355.     }
  356.     public function addSalary(Tiers $salary): self
  357.     {
  358.         if (!$this->salaries->contains($salary)) {
  359.             $this->salaries[] = $salary;
  360.         }
  361.         return $this;
  362.     }
  363.     /**
  364.      * @return float
  365.      */
  366.     public function getChargeSalariale(): float
  367.     {
  368.         $chargeProjet 0;
  369.         $salarieList $this->getSalaries();
  370.         foreach ($salarieList as $salarie){
  371.             $contratList $salarie->getContratByIdProjet($this->getId());
  372.             foreach ($contratList as $contrat){
  373.                 $salaire $contrat->getNbJourPointage() * $contrat->getTarifJour();
  374.                 $charge $salaire $contrat->getCharge() / 100;
  375.                 $chargeProjet+= $salaire $charge;
  376.             }
  377.         }
  378.         return $chargeProjet;
  379.     }
  380.     public function removeSalary(Tiers $salary): self
  381.     {
  382.         $this->salaries->removeElement($salary);
  383.         return $this;
  384.     }
  385.     /**
  386.      * @return Collection<int, Tiers>
  387.      */
  388.     public function getPrestataires(): Collection
  389.     {
  390.         return $this->prestataires;
  391.     }
  392.     public function addPrestataire(Tiers $prestataire): self
  393.     {
  394.         if (!$this->prestataires->contains($prestataire)) {
  395.             $this->prestataires[] = $prestataire;
  396.         }
  397.         return $this;
  398.     }
  399.     public function removePrestataire(Tiers $prestataire): self
  400.     {
  401.         $this->prestataires->removeElement($prestataire);
  402.         return $this;
  403.     }
  404.     /**
  405.      * @return float
  406.      */
  407.     public function getChargePrestataire(): float
  408.     {
  409.         $docList $this->getDocuments()->filter(function (Document $document){
  410.             return $document->getTypeDocument() === 'COMMANDE PRESTATAIRE';
  411.         })->toArray();
  412.         return array_reduce(
  413.             $docList,
  414.             function (float $sumDocument $document){
  415.                 return $sum $document->getMontantHt();
  416.             },
  417.             0.0
  418.         );
  419.     }
  420.     public function getMarge(): float
  421.     {
  422.         $charges 0;
  423.         $charges+= $this->getChargeSalariale();
  424.         $charges+= $this->getChargePrestataire();
  425.         $charges+= $this->getChargeNdf();
  426.         $marge $this->getBudget() - $charges;
  427.         if(0>$marge) return 0;
  428.         return $marge;
  429.     }
  430.     public function getPourcentageMarge(): float
  431.     {
  432.         $budget $this->getBudget();
  433.         if(0.0===$budget) return 0;
  434.         $rounded round($this->getMarge() / $budget 10000);
  435.         return $rounded 100;
  436.     }
  437.     public function getPourcentageFacture(): float
  438.     {
  439.         $budget $this->getBudget();
  440.         if(0.0===$budget) return 0;
  441.         $rounded round($this->getChiffreAffaire() / $budget 10000);
  442.         return $rounded 100;
  443.     }
  444.     public function getPourcentageSalaire(): float
  445.     {
  446.         $budget $this->getBudget();
  447.         if(0.0===$budget) return 0;
  448.         $rounded round($this->getChargeSalariale() / $budget 10000);
  449.         return $rounded 100;
  450.     }
  451.     public function getPourcentagePrestataire(): float
  452.     {
  453.         $budget $this->getBudget();
  454.         if(0.0===$budget) return 0;
  455.         $rounded round($this->getChargePrestataire() / $budget 10000);
  456.         return $rounded 100;
  457.     }
  458.     public function getPourcentageNdf(): float
  459.     {
  460.         $budget $this->getBudget();
  461.         if(0.0===$budget) return 0;
  462.         $rounded round($this->getChargeNdf() / $budget 10000);
  463.         return $rounded 100;
  464.     }
  465.     public function getIsAppelOffre(): ?bool
  466.     {
  467.         return $this->is_appel_offre;
  468.     }
  469.     public function setIsAppelOffre(bool $is_appel_offre): self
  470.     {
  471.         $this->is_appel_offre $is_appel_offre;
  472.         return $this;
  473.     }
  474.     public function getNbJourProd()
  475.     {
  476.         $interval $this->getDateDeb()->diff$this->getDateFin(), true );
  477.         return $interval->days;
  478.     }
  479.     public function getPrestataireCount(): int
  480.     {
  481.         $commandeList $this->getDocuments()->filter(function (Document $document){
  482.             return $document->getTypeDocument() === 'COMMANDE PRESTATAIRE';
  483.         });
  484.         $presta = array();
  485.         foreach ($commandeList as $commande){
  486.             $presta[] = $commande->getTiers()->getMainTiers()->getId();
  487.         }
  488.         if(empty($presta)) return 0;
  489.         return count(array_unique($presta));
  490.     }
  491. }