src/Entity/ProjectStakeholders.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\ProjectStakeholdersRepository;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\Common\Collections\Selectable;
  7. use Doctrine\ORM\Event\LifecycleEventArgs;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  10. use Doctrine\ORM\Mapping\UniqueConstraint;
  11. use Symfony\Component\Serializer\Annotation\Groups;
  12. /**
  13.  * @ORM\Entity(repositoryClass=ProjectStakeholdersRepository::class)
  14.  * UniqueEntity(
  15.  *      fields={"partner", "project", "start_at"},
  16.  *      errorPath="partner",
  17.  *      message="This partner already assigned to this project"
  18.  * )
  19.  *
  20.  * ORM\Table("project_stakeholders",
  21.  *     uniqueConstraints={UniqueConstraint(name="project_stakeholders_unique", columns={"partner_id", "project_id", "start_at", "end_at"}),
  22.  * })
  23.  * @ORM\Table(name="project_stakeholders", uniqueConstraints={
  24.  *     @UniqueConstraint(name="project_stakeholders_unique", columns={"partner_id", "project_id", "start_at", "end_at"})},
  25.  *     options={"comment": "Partner joined Project's table"}
  26.  * )
  27.  * ORM\Table(name="project_stakeholders", options={"comment": "Partner joined Project's table"})
  28.  * @ORM\HasLifecycleCallbacks
  29.  *
  30.  */
  31. class ProjectStakeholders
  32. {
  33.     /**
  34.      * IN Worker/Projects Component, Selectable Stakeholder Projects decide worker in stakeholder project or not
  35.      * This is a dynamic prop managed from
  36.      * PartnerController / fetchPartnerProjects
  37.      */
  38.     /**
  39.      * @Groups({
  40.      *     "worker.manage.selectable.stakeholder.projects"
  41.      * })
  42.      */
  43.     // private $is_in_included_to_project;
  44.     private $is_worker_included_to_project;
  45.     public function getIsWorkerIncludedToProject(){ return $this->is_worker_included_to_project;}
  46.     public function setIsWorkerIncludedToProject(string $is_in_included_to_project): self $this->is_worker_included_to_project $is_in_included_to_project; return $this;}
  47.     /**
  48.      * @ORM\Id
  49.      * @ORM\GeneratedValue
  50.      * @ORM\Column(type="integer")
  51.      * @Groups({"partner.joined.projects",
  52.      *     "partner.selected.project",
  53.      *     "worker.join.to.project",
  54.      *     "worker.manage.joined.projects",
  55.      *     "worker.manage.selectable.stakeholder.projects",
  56.      *     "selected.partner.project.for.worker",
  57.      *     "worker.manage.selected.worker.in.project",
  58.      *     "timesheet.for.partner",
  59.      *
  60.      *     "project_stakeholder@core",
  61.      *     "project_stakeholder@base"
  62.      * })
  63.      */
  64.     private $id;
  65.     /**
  66.      * @ORM\ManyToOne(targetEntity=Partner::class, inversedBy="project_stakeholders")
  67.      * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
  68.      * @Groups({
  69.      *     "project_stakeholder@partner"
  70.      * })
  71.      *
  72.      */
  73.     private $partner;
  74.     /**
  75.      * @ORM\ManyToOne(targetEntity=Projects::class, inversedBy="stakeholders")
  76.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  77.      * @Groups({"partner.joined.projects",
  78.      *     "partner.selected.project",
  79.      *     "worker.join.to.project",
  80.      *     "worker.manage.joined.projects",
  81.      *     "worker.manage.selectable.stakeholder.projects",
  82.      *     "worker.manage.selected.worker.in.project",
  83.      *     "selected.partner.project.for.worker",
  84.      *     "worker.manage.base.timesheet.payments",
  85.      *     "timesheet.for.partner",
  86.      *
  87.      *      "TODO @info projects yerine project kullan",
  88.      *      "project_stakeholder@projects",
  89.      *      "project_stakeholder@project"
  90.      * })
  91.      */
  92.     private $project;
  93.     /**
  94.      * @ORM\Column(type="datetime_immutable", nullable=true)
  95.      * @Groups({
  96.      *     "partner.joined.projects",
  97.      *     "partner.selected.project",
  98.      *     "worker.manage.joined.projects",
  99.      *     "selected.partner.project.for.worker",
  100.      *     "worker.manage.selected.worker.in.project",
  101.      *
  102.      *     "project_stakeholder@core"
  103.      * })
  104.      */
  105.     private $start_at;
  106.     /**
  107.      * @ORM\Column(type="datetime_immutable", nullable=true)
  108.      * @Groups({
  109.      *     "partner.joined.projects",
  110.      *     "partner.selected.project",
  111.      *     "worker.manage.joined.projects",
  112.      *     "selected.partner.project.for.worker",
  113.      *     "worker.manage.selected.worker.in.project",
  114.      *
  115.      *
  116.      *     "project_stakeholder@core"
  117.      * })
  118.      */
  119.     private $end_at;
  120.     /**
  121.      * @ORM\Column(type="datetime_immutable", nullable=true)
  122.      * @Groups({
  123.      *     "project_stakeholder@core"
  124.      * })
  125.      */
  126.     private $created_at;
  127.     /**
  128.      * @ORM\OneToMany(targetEntity=WorkerInProject::class, mappedBy="project", cascade={"persist", "remove"})
  129.      * @ORM\JoinColumn(onDelete="CASCADE")
  130.      * @Groups({
  131.      *     "partner.manage.base",
  132.      *     "partner.selected.project",
  133.      *     "timesheet.for.stakeholder",
  134.      *     "timesheet.for.partner",
  135.      *
  136.      *     "project_stakeholder@worker_in_projects"
  137.      * })
  138.      */
  139.     /// TODO In react for frontend workerInProjects doesn't use so use worker_in_projects
  140.     /// Check This words in app
  141.     private $worker_in_projects;
  142.     /**
  143.      * ----------------------------------------------------------------------------------------------------------------
  144.      * This is custom column not associated to table
  145.      * Event Listener Prop
  146.      * This prop Update during event.listener
  147.      * @Groups({
  148.      *     "partner.joined.projects",
  149.      *     "partner.selected.project",
  150.      *     "worker.manage.joined.projects",
  151.      *     "worker.manage.selectable.stakeholder.projects",
  152.      *     "selected.partner.project.for.worker",
  153.      *     "worker.manage.selected.worker.in.project",
  154.      *
  155.      *     "project_stakeholder@core"
  156.      * })
  157.     */
  158.     private $status;
  159.     /**
  160.      * Event Listener Prop
  161.      * This prop Update during event.listener
  162.      * @param array $status
  163.      */
  164.     public function setStatus( array $status ): void {
  165.         $this->status $status;
  166.     }
  167.     /** * Event Listener Prop */
  168.     public function getStatus(){
  169.         return $this->status;
  170.     }
  171.     // ----------------------------------------------------------------------------------------------------------------
  172.     /**
  173.      * @ORM\ManyToMany(targetEntity=Qualification::class, inversedBy="project_stakeholders")
  174.      * ORM\JoinColumn(onDelete="CASCADE")
  175.      * @Groups({
  176.      *     "partner.joined.projects.depended.qualifications",
  177.      *     "selected.partner.project.for.worker",
  178.      *     "worker.manage.selected.worker.in.project",
  179.      *
  180.      *
  181.      *     "project_stakeholder@qualifications"
  182.      * })
  183.      */
  184.     private $dependent_qualifications;
  185.     /**
  186.      * @ORM\ManyToMany(targetEntity=Certificates::class, inversedBy="project_stakeholders", fetch="EXTRA_LAZY")
  187.      * ORM\JoinColumn(onDelete="CASCADE")
  188.      * @Groups({
  189.      *     "partner.joined.projects.depended.certificates",
  190.      *     "partner.joined.projects.depended.certificates.eligibility",
  191.      *     "worker.manage.selected.worker.in.project",
  192.      *     "selected.partner.project.for.worker",
  193.      *
  194.      *     "project_stakeholder@certificates"
  195.      * })
  196.      */
  197.     private $dependent_certificates;
  198.     /**
  199.      * @ORM\OneToMany(targetEntity=ProjectStakeholdersTimesheet::class, mappedBy="project_stakeholder", cascade={"persist", "remove"} )
  200.      * @ORM\JoinColumn(onDelete="CASCADE")
  201.      */
  202.     private $projectStakeholdersTimesheets;
  203.     /**
  204.      * @ORM\OneToMany(targetEntity=WorkerTimesheetPayments::class, mappedBy="project_stakeholder")
  205.      */
  206.     private $workerTimesheetPayments;
  207.     public function __construct()
  208.     {
  209.         $this->worker_in_projects = new ArrayCollection();
  210.         $this->dependent_qualifications = new ArrayCollection();
  211.         $this->dependent_certificates = new ArrayCollection();
  212.         // $this->workerTimesheets = new ArrayCollection();
  213.         $this->projectStakeholdersTimesheets = new ArrayCollection();
  214.         $this->workerTimesheetPayments = new ArrayCollection();
  215.     }
  216.     public function getId(): ?int
  217.     {
  218.         return $this->id;
  219.     }
  220.     public function getPartner(): ?Partner
  221.     {
  222.         return $this->partner;
  223.     }
  224.     public function setPartner(?Partner $partner): self
  225.     {
  226.         $this->partner $partner;
  227.         return $this;
  228.     }
  229.     public function getProject(): ?Projects
  230.     {
  231.         return $this->project;
  232.     }
  233.     public function setProject(?Projects $project): self
  234.     {
  235.         $this->project $project;
  236.         return $this;
  237.     }
  238.     public function getStartAt(): ?\DateTimeImmutable
  239.     {
  240.         return $this->start_at;
  241.     }
  242.     public function setStartAt(?\DateTimeImmutable $start_at): self
  243.     {
  244.         $this->start_at $start_at;
  245.         return $this;
  246.     }
  247.     public function getEndAt(): ?\DateTimeImmutable
  248.     {
  249.         return $this->end_at;
  250.     }
  251.     public function setEndAt(?\DateTimeImmutable $end_at): self
  252.     {
  253.         $this->end_at $end_at;
  254.         return $this;
  255.     }
  256.     public function getCreatedAt(): ?\DateTimeImmutable
  257.     {
  258.         return $this->created_at;
  259.     }
  260.     public function setCreatedAt(?\DateTimeImmutable $created_at): self
  261.     {
  262.         $this->created_at $created_at;
  263.         return $this;
  264.     }
  265.     /**
  266.      * @return Collection<int, WorkerInProject>&Selectable
  267.      */
  268.     public function getWorkerInProjects(): Collection
  269.     {
  270.         return $this->worker_in_projects;
  271.     }
  272.     public function addWorkerInProject(WorkerInProject $workerInProject): self
  273.     {
  274.         if (!$this->worker_in_projects->contains($workerInProject)) {
  275.             $this->worker_in_projects[] = $workerInProject;
  276.             $workerInProject->setProject($this);
  277.         }
  278.         return $this;
  279.     }
  280.     public function removeWorkerInProject(WorkerInProject $workerInProject): self
  281.     {
  282.         if ($this->worker_in_projects->removeElement($workerInProject)) {
  283.             // set the owning side to null (unless already changed)
  284.             if ($workerInProject->getProject() === $this) {
  285.                 $workerInProject->setProject(null);
  286.             }
  287.         }
  288.         return $this;
  289.     }
  290.     /**
  291.      * @return Collection<int, Qualification>
  292.      */
  293.     public function getDependentQualifications(): Collection
  294.     {
  295.         return $this->dependent_qualifications;
  296.     }
  297.     public function addDependentQualification(Qualification $dependentQualification): self
  298.     {
  299.         if (!$this->dependent_qualifications->contains($dependentQualification)) {
  300.             $this->dependent_qualifications[] = $dependentQualification;
  301.         }
  302.         return $this;
  303.     }
  304.     public function removeDependentQualification(Qualification $dependentQualification): self
  305.     {
  306.         $this->dependent_qualifications->removeElement($dependentQualification);
  307.         return $this;
  308.     }
  309.     /**
  310.      * @return Collection<int, Certificates>
  311.      */
  312.     public function getDependentCertificates(): Collection
  313.     {
  314.         return $this->dependent_certificates;
  315.     }
  316.     public function addDependentCertificate(Certificates $dependentCertificate): self
  317.     {
  318.         if (!$this->dependent_certificates->contains($dependentCertificate)) {
  319.             $this->dependent_certificates[] = $dependentCertificate;
  320.         }
  321.         return $this;
  322.     }
  323.     public function removeDependentCertificate(Certificates $dependentCertificate): self
  324.     {
  325.         $this->dependent_certificates->removeElement($dependentCertificate);
  326.         return $this;
  327.     }
  328.     //    /**
  329.     //     * @return Collection<int, WorkerTimesheet>
  330.     //     */
  331.     //    public function getWorkerTimesheets(): Collection
  332.     //    {
  333.     //        return $this->workerTimesheets;
  334.     //    }
  335.     //
  336.     //    public function addWorkerTimesheet(WorkerTimesheet $workerTimesheet): self
  337.     //    {
  338.     //        if (!$this->workerTimesheets->contains($workerTimesheet)) {
  339.     //            $this->workerTimesheets[] = $workerTimesheet;
  340.     //            $workerTimesheet->setProjectStakeholder($this);
  341.     //        }
  342.     //
  343.     //        return $this;
  344.     //    }
  345.     //
  346.     //    public function removeWorkerTimesheet(WorkerTimesheet $workerTimesheet): self
  347.     //    {
  348.     //        if ($this->workerTimesheets->removeElement($workerTimesheet)) {
  349.     //            // set the owning side to null (unless already changed)
  350.     //            if ($workerTimesheet->getProjectStakeholder() === $this) {
  351.     //                $workerTimesheet->setProjectStakeholder(null);
  352.     //            }
  353.     //        }
  354.     //
  355.     //        return $this;
  356.     //    }
  357.     /**
  358.      * @return Collection<int, ProjectStakeholdersTimesheet>
  359.      */
  360.     public function getProjectStakeholdersTimesheets(): Collection
  361.     {
  362.         return $this->projectStakeholdersTimesheets;
  363.     }
  364.     public function addProjectStakeholdersTimesheet(ProjectStakeholdersTimesheet $projectStakeholdersTimesheet): self
  365.     {
  366.         if (!$this->projectStakeholdersTimesheets->contains($projectStakeholdersTimesheet)) {
  367.             $this->projectStakeholdersTimesheets[] = $projectStakeholdersTimesheet;
  368.             $projectStakeholdersTimesheet->setProjectStakeholder($this);
  369.         }
  370.         return $this;
  371.     }
  372.     public function removeProjectStakeholdersTimesheet(ProjectStakeholdersTimesheet $projectStakeholdersTimesheet): self
  373.     {
  374.         if ($this->projectStakeholdersTimesheets->removeElement($projectStakeholdersTimesheet)) {
  375.             // set the owning side to null (unless already changed)
  376.             if ($projectStakeholdersTimesheet->getProjectStakeholder() === $this) {
  377.                 $projectStakeholdersTimesheet->setProjectStakeholder(null);
  378.             }
  379.         }
  380.         return $this;
  381.     }
  382.     /**
  383.      * @return Collection<int, WorkerTimesheetPayments>
  384.      */
  385.     public function getWorkerTimesheetPayments(): Collection
  386.     {
  387.         return $this->workerTimesheetPayments;
  388.     }
  389.     public function addWorkerTimesheetPayment(WorkerTimesheetPayments $workerTimesheetPayment): self
  390.     {
  391.         if (!$this->workerTimesheetPayments->contains($workerTimesheetPayment)) {
  392.             $this->workerTimesheetPayments[] = $workerTimesheetPayment;
  393.             $workerTimesheetPayment->setProjectStakeholder($this);
  394.         }
  395.         return $this;
  396.     }
  397.     public function removeWorkerTimesheetPayment(WorkerTimesheetPayments $workerTimesheetPayment): self
  398.     {
  399.         if ($this->workerTimesheetPayments->removeElement($workerTimesheetPayment)) {
  400.             // set the owning side to null (unless already changed)
  401.             if ($workerTimesheetPayment->getProjectStakeholder() === $this) {
  402.                 $workerTimesheetPayment->setProjectStakeholder(null);
  403.             }
  404.         }
  405.         return $this;
  406.     }
  407. }