src/Entity/WorkerInProject.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\WorkerInProjectRepository;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\Common\Collections\Selectable;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Doctrine\ORM\Event\LifecycleEventArgs;
  9. use Doctrine\ORM\Mapping as ORM;
  10. use phpDocumentor\Reflection\Types\This;
  11. use Symfony\Component\Serializer\Annotation\Groups;
  12. use Symfony\Component\Serializer\Annotation\MaxDepth;
  13. use Symfony\Component\Validator\Constraints\Date;
  14. /**
  15.  * @ORM\Entity(repositoryClass=WorkerInProjectRepository::class)
  16.  * @ORM\HasLifecycleCallbacks
  17.  */
  18. class WorkerInProject
  19. {
  20.     /**
  21.      * @ORM\Id
  22.      * @ORM\GeneratedValue
  23.      * @ORM\Column(type="integer")
  24.      * @Groups({
  25.      *     "partner.joined.projects.assigned.team.leaders",
  26.      *     "worker.manage.joined.projects",
  27.      *     "worker.manage.selectable.stakeholder.projects",
  28.      *     "worker.manage.selected.worker.in.project",
  29.      *
  30.      *     "worker.in.project.base",
  31.      *
  32.      *     "worker_in_project@core"
  33.      *
  34.      * })
  35.      */
  36.     private $id;
  37.     /**
  38.      * /// TODO Remove this prop
  39.      * @deprecated
  40.      * use over πŸ‘‰ worker_activity βœ…
  41.      * @ORM\ManyToOne(targetEntity=Worker::class, inversedBy="workerInProjects")
  42.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  43.      * @MaxDepth(2)
  44.      *      "timesheet.for.stakeholder",
  45.      *      "timesheet.for.partner"
  46.      * Groups({
  47.      *     "partner.joined.projects.assigned.team.leaders",
  48.      *     })
  49.      */
  50.     private $worker;
  51.     /**
  52.      * @deprecated use stakeholder_project
  53.      * Stakeholder Level
  54.      * Info: Assigned to Project Stakeholder -> StakeHolder assigned to Project
  55.      * @ORM\ManyToOne(targetEntity=ProjectStakeholders::class, inversedBy="workerInProjects")
  56.      * @ORM\JoinColumn(nullable=false, options={"comment": "Project StakeholderId"}, onDelete="CASCADE")
  57.      * @MaxDepth(2)
  58.      * @Groups({
  59.      *     "worker.manage.joined.projects",
  60.      *     "worker.manage.selectable.stakeholder.projects",
  61.      *     "worker.manage.selected.worker.in.project",
  62.      *
  63.      *     "worker_in_project@project"
  64.      * })
  65.      */
  66.     private $project;
  67.     /**
  68.      * @MaxDepth(1)
  69.      * TODO bu kisim gecici worker_in_project deki project prop u stakeholder_project prop u ile degisecek
  70.      * direct project deprecated olucak
  71.      * project keyword karisikliga sebep oluyor cunku project projectin anasi kendisi project_stakeholder o stakeholderin baglandigi project anlaminda
  72.      * stakeholder_project kullan project sadece ana project icin kullanilacak
  73.      * @Groups({
  74.      *     "worker_in_project@project_stakeholder"
  75.      *  })
  76.      */
  77.     private $stakeholder_project;
  78.     /**
  79.      * @return mixed
  80.      * // TODO bu kisim gecici worker_in_project deki project prop u stakeholder_project prop u ile degisecek
  81.      */
  82.     public function getStakeholderProject()
  83.     {
  84.         return $this->stakeholder_project;
  85.     }
  86.     // TODO bu kisim gecici worker_in_project deki project prop u stakeholder_project prop u ile degisecek
  87.     public function setStakeholderProject(?ProjectStakeholders $project)
  88.     {
  89.         $this->stakeholder_project $project;
  90.     }
  91.     /**
  92.      * @ORM\Column(type="datetime_immutable", nullable=true)
  93.      * @Groups({
  94.      *     "worker.manage.joined.projects",
  95.      *     "worker.manage.selected.worker.in.project",
  96.      *
  97.      *     "worker_in_project@core"
  98.      * })
  99.      */
  100.     private $start_at;
  101.     /**
  102.      * @ORM\Column(type="datetime_immutable", nullable=true)
  103.      * @Groups({
  104.      *     "worker.manage.joined.projects",
  105.      *     "worker.manage.selected.worker.in.project",
  106.      *
  107.      *     "worker_in_project@core"
  108.      * })
  109.      */
  110.     private $end_at;
  111.     /**
  112.      * @ORM\Column(type="datetime_immutable")
  113.      * @Groups({
  114.      *     "worker_in_project@core"
  115.      * })
  116.      */
  117.     private $created_at;
  118.     /**
  119.      * ----------------------------------------------------------------------------------------------------------------
  120.      * This is custom column not associated to table
  121.      * Event Listener Prop
  122.      * This prop Update during event.listener
  123.      * @Groups({
  124.      *     "worker.manage.joined.projects",
  125.      *     "worker.manage.selectable.stakeholder.projects",
  126.      *     "worker.manage.selected.worker.in.project",
  127.      *
  128.      *
  129.      *     "worker_in_project@core"
  130.      * })
  131.     */
  132.     private $status;
  133.     /**
  134.      * Event Listener Prop
  135.      * This prop Update during event.listener
  136.      * @param array $status
  137.      */
  138.     public function setStatus( array $status ): void {
  139.         $this->status $status;
  140.     }
  141.     /** * Event Listener Prop */
  142.     public function getStatus(){
  143.         return $this->status;
  144.     }
  145.     // ----------------------------------------------------------------------------------------------------------------
  146.     /**
  147.      * @ORM\Column(type="boolean", nullable=true)
  148.      * @Groups({
  149.      *     "worker.manage.joined.projects",
  150.      *     "worker.manage.selected.worker.in.project",
  151.      *
  152.      *     "worker_in_project@core"
  153.      * })
  154.      */
  155.     private $forcibly_completed;
  156.     /**
  157.      * @ORM\ManyToMany(targetEntity=Qualification::class, inversedBy="workerInProjects")
  158.      * @Groups({
  159.      *     "worker.manage.joined.projects",
  160.      *     "worker.manage.selected.worker.in.project",
  161.      *
  162.      *     "worker_in_project@qualifications"
  163.      * })
  164.      */
  165.     private $assigned_qualifications;
  166.     /**
  167.      * @ORM\Column(type="decimal", precision=7, scale=2, nullable=true)
  168.      * @Groups({
  169.      *     "worker.manage.selected.worker.in.project",
  170.      *     "worker.manage.joined.projects",
  171.      *
  172.      *     "worker_in_project@core"
  173.      * })
  174.      */
  175.     private $cost_per_hour;
  176.     /**
  177.      * @ORM\Column(type="boolean", nullable=true, options={"comment": "Worker for App Check-In/Out anywhere without coords just for joined project"})
  178.      * @Groups({
  179.      *     "worker.manage.selected.worker.in.project",
  180.      *
  181.      *     "worker_in_project@core"
  182.      * })
  183.      */
  184.     private $can_app_check_anywhere;
  185.     /**
  186.      * βŒ USE project_branch (Branches Entity Related)
  187.      * Use Direct Stakeholder/ (Project <=> Branch)
  188.      * @deprecated
  189.      *
  190.      * @ORM\ManyToMany(targetEntity=ProjectBranches::class, inversedBy="workerInProjects")
  191.      * @Groups({
  192.      *     "worker.manage.joined.projects",
  193.      *     "worker.manage.selected.worker.in.project",
  194.      *     "partner.selected.project",
  195.      *
  196.      *     "worker.in.project.assigned.project.branches",
  197.      *
  198.      * })
  199.      */
  200.     private $assigned_project_branches;
  201.     /**
  202.      * USE $project_branch_team_leader
  203.      * βŒβŒβŒIliski ProjectBranches Iliski project_branch_team_leader ile berabe Branches ile kuruldu
  204.      * @deprecated
  205.      * βš οΈβš οΈβš οΈβš οΈβš οΈ SEDECE ProjectBranches to Branches Oldu
  206.      * TODO ProjectBranches yerine Branches Kullan Degisecek
  207.      * TODO Bu rasi incelenecek n icin kullaniyliyor !!!
  208.      * If you change the name of table, this is a important risk for data, will lost all
  209.      * Before you replace the name of table should backup!!
  210.      * @ORM\ManyToMany(targetEntity=ProjectBranches::class, inversedBy="project_branch_team_leaders")
  211.      * ORM\JoinTable(name="worker_in_project_project_branches_team_leaders",
  212.      *     joinColumns={@ORM\JoinColumn(name="worker_in_project_id", referencedColumnName="id")},
  213.      *     inverseJoinColumns={@ORM\JoinColumn(name="project_branch_id", referencedColumnName="id")}
  214.      *     )
  215.      * @ORM\JoinTable(name="worker_in_project_project_branches_team_leaders")
  216.      * @Groups({
  217.      *     "worker.manage.joined.projects",
  218.      *     "worker.manage.selected.worker.in.project",
  219.      *
  220.      *
  221.      *     "worker_in_project@project_branch_team_leaders"
  222.      * })
  223.      */
  224.     private $project_branches_team_leader;
  225.     /**
  226.      * βœ… πŸ‘ˆπŸ‘‡| πŸ‘‰ $assigned_project_branches βŒβŒ
  227.      * @ORM\ManyToMany(targetEntity=Branches::class, inversedBy="worker_in_projects")
  228.      * @Groups({
  229.      *     "worker_in_project@project_branches"
  230.      * })
  231.      */
  232.     private $branches;
  233.     /**
  234.      * @ORM\ManyToMany(targetEntity=Branches::class, inversedBy="worker_in_project_team_leader")
  235.      * @ORM\JoinTable(name="worker_in_project_project_branch_team_leader")
  236.      * @Groups({
  237.      *      "worker_in_project@project_branch_team_leader"
  238.      *  })
  239.      */
  240.     private $project_branch_team_leader;
  241.     /**
  242.      * @ORM\ManyToOne(targetEntity=WorkerActivities::class, inversedBy="worker_in_projects")
  243.      * @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
  244.      * @MaxDepth(2)
  245.      * @Groups({
  246.      *     "partner.joined.projects.assigned.team.leaders",
  247.      *     "timesheet.for.stakeholder",
  248.      *     "timesheet.for.partner",
  249.      *     "partner.selected.project",
  250.      *
  251.      *
  252.      *     "worker.in.project.worker.activity",
  253.      *
  254.      *     "worker_in_project@worker_activity"
  255.      * })
  256.      */
  257.     private $worker_activity;
  258.     public function __construct()
  259.     {
  260.         $this->assigned_qualifications = new ArrayCollection();
  261.         $this->assigned_project_branches = new ArrayCollection();
  262.         $this->project_branches_team_leader = new ArrayCollection();
  263.         $this->branches = new ArrayCollection();
  264.         $this->project_branch_team_leader = new ArrayCollection();
  265.     }
  266.     public function getId(): ?int
  267.     {
  268.         return $this->id;
  269.     }
  270.     /**@deprecated
  271.      * Fetch over WorkerActivity*/
  272.     public function getWorker(): ?Worker
  273.     {
  274.         return $this->worker;
  275.     }
  276.     /**@deprecated
  277.      * Fetch over WorkerActivity*/
  278.     public function setWorker(?Worker $worker): self
  279.     {
  280.         $this->worker $worker;
  281.         return $this;
  282.     }
  283.     /**
  284.      * TODO I'm not sure eiter deprecated or not! Check this absolute (getStakeholderProject)
  285.      * @deprecated use getStakeholderProject
  286.      *
  287.     */
  288.     public function getProject(): ?ProjectStakeholders
  289.     {
  290.         return $this->project;
  291.     }
  292.     /**
  293.      * TODO I'm not sure eiter deprecated or not! Check this absolute (getStakeholderProject)
  294.      * @deprecated use setStakeholderProject
  295.      *
  296.      */
  297.     public function setProject(?ProjectStakeholders $project): self
  298.     {
  299.         $this->project $project;
  300.         $this->stakeholder_project $project;
  301.         return $this;
  302.     }
  303.     public function getStartAt(): ?\DateTimeImmutable
  304.     {
  305.         return $this->start_at;
  306.     }
  307.     public function setStartAt(?\DateTimeImmutable $start_at): self
  308.     {
  309.         $this->start_at $start_at;
  310.         return $this;
  311.     }
  312.     public function getEndAt(): ?\DateTimeImmutable
  313.     {
  314.         return $this->end_at;
  315.     }
  316.     public function setEndAt(?\DateTimeImmutable $end_at): self
  317.     {
  318.         $this->end_at $end_at;
  319.         return $this;
  320.     }
  321.     public function getCreatedAt(): ?\DateTimeImmutable
  322.     {
  323.         return $this->created_at;
  324.     }
  325.     public function setCreatedAt(\DateTimeImmutable $created_at): self
  326.     {
  327.         $this->created_at $created_at;
  328.         return $this;
  329.     }
  330.     public function getCustomName(){
  331.         $this->customName $this->getId();
  332.     }
  333.     public function getForciblyCompleted(): ?bool
  334.     {
  335.         return $this->forcibly_completed;
  336.     }
  337.     public function setForciblyCompleted(?bool $forcibly_completed): self
  338.     {
  339.         $this->forcibly_completed $forcibly_completed;
  340.         return $this;
  341.     }
  342.     /**
  343.      * @return Collection<int, Qualification>
  344.      */
  345.     public function getAssignedQualifications(): Collection
  346.     {
  347.         // use this
  348.         return new ArrayCollection$this->assigned_qualifications->map( function ( /**@var $qualification Qualification*/ $qualification ){
  349.             return $qualification;
  350.         })->getValues() );
  351.         // Instead of this
  352.         // return $this->assigned_qualifications;
  353.         // Info: If Assigned Q empty selected return, error for required field, if select again any value collection returned as associative array instead indexed
  354.     }
  355.     public function addAssignedQualification(Qualification $assignedQualification): self
  356.     {
  357.         if (!$this->assigned_qualifications->contains($assignedQualification)) {
  358.             $this->assigned_qualifications[] = $assignedQualification;
  359.         }
  360.         return $this;
  361.     }
  362.     public function removeAssignedQualification(Qualification $assignedQualification): self
  363.     {
  364.         $this->assigned_qualifications->removeElement($assignedQualification);
  365.         return $this;
  366.     }
  367.     // TODO replace this column with HourlyRate
  368.     public function getCostPerHour(): ?float
  369.     {
  370.         return $this->cost_per_hour;// ?? $this->getWorker()->getCostPerHour();
  371.     }
  372.     public function setCostPerHour(?string $cost_per_hour): self
  373.     {
  374.         $this->cost_per_hour $cost_per_hour;
  375.         return $this;
  376.     }
  377.     public function isCanAppCheckAnywhere(): ?bool
  378.     {
  379.         return $this->can_app_check_anywhere;
  380.     }
  381.     public function setCanAppCheckAnywhere(?bool $can_app_check_anywhere): self
  382.     {
  383.         $this->can_app_check_anywhere $can_app_check_anywhere;
  384.         return $this;
  385.     }
  386.     /**
  387.      *  βŒ USE project_branch (Branches Entity Related)
  388.      *  Use Direct Stakeholder/ (Project <=> Branch)
  389.      * @deprecated
  390.      * @return Collection<int, ProjectBranches>
  391.      */
  392.     public function getAssignedProjectBranches(): Collection
  393.     {
  394.         return $this->assigned_project_branches;
  395.     }
  396.     /**
  397.      * βŒ USE project_branch (Branches Entity Related)
  398.      *  Use Direct Stakeholder/ (Project <=> Branch)
  399.      * @deprecated
  400.      *  */
  401.     public function addAssignedProjectBranch(ProjectBranches $assignedProjectBranch): self
  402.     {
  403.         if (!$this->assigned_project_branches->contains($assignedProjectBranch)) {
  404.             $this->assigned_project_branches[] = $assignedProjectBranch;
  405.         }
  406.         return $this;
  407.     }
  408.     /**
  409.      * βŒ USE project_branch (Branches Entity Related)
  410.      *  Use Direct Stakeholder/ (Project <=> Branch)
  411.      * @deprecated
  412.      *  */
  413.     public function removeAssignedProjectBranch(ProjectBranches $assignedProjectBranch): self
  414.     {
  415.         $this->assigned_project_branches->removeElement($assignedProjectBranch);
  416.         return $this;
  417.     }
  418.     /**
  419.      * USE $project_branch_team_leader
  420.      * @deprecated
  421.      * @return Collection<int, ProjectBranches>
  422.      */
  423.     public function getProjectBranchesTeamLeader(): Collection
  424.     {
  425.         return $this->project_branches_team_leader;
  426.     }
  427.     /**
  428.      * USE $project_branch_team_leader
  429.      * @deprecated
  430.      *
  431.      * */
  432.     public function addProjectBranchesTeamLeader(ProjectBranches $workerInProjectProjectBranchesTeamLeader): self
  433.     {
  434.         if (!$this->project_branches_team_leader->contains($workerInProjectProjectBranchesTeamLeader)) {
  435.             $this->project_branches_team_leader[] = $workerInProjectProjectBranchesTeamLeader;
  436.         }
  437.         return $this;
  438.     }
  439.     /**
  440.      * USE $project_branch_team_leader
  441.      * @deprecated
  442.      * */
  443.     public function removeProjectBranchesTeamLeader(ProjectBranches $workerInProjectProjectBranchesTeamLeader): self
  444.     {
  445.         $this->project_branches_team_leader->removeElement($workerInProjectProjectBranchesTeamLeader);
  446.         return $this;
  447.     }
  448.     public function getWorkerActivity(): ?WorkerActivities
  449.     {
  450.         return $this->worker_activity;
  451.     }
  452.     public function setWorkerActivity(?WorkerActivities $workerActivity): self
  453.     {
  454.         $this->worker_activity $workerActivity;
  455.         return $this;
  456.     }
  457.     /**
  458.      * @return Collection<int, Branches> & Selectable
  459.      */
  460.     public function getBranches(): Collection
  461.     {
  462.         return $this->branches;
  463.     }
  464.     public function addBranch(Branches $projectBranch): self
  465.     {
  466.         if (!$this->branches->contains($projectBranch)) {
  467.             $this->branches[] = $projectBranch;
  468.         }
  469.         return $this;
  470.     }
  471.     public function removeBranch(Branches $projectBranch): self
  472.     {
  473.         $this->branches->removeElement($projectBranch);
  474.         return $this;
  475.     }
  476.     /**
  477.      * @return Collection<int, Branches>
  478.      */
  479.     public function getProjectBranchTeamLeader(): Collection
  480.     {
  481.         return $this->project_branch_team_leader;
  482.     }
  483.     public function addProjectBranchTeamLeader(Branches $projectBranchTeamLeader): self
  484.     {
  485.         if (!$this->project_branch_team_leader->contains($projectBranchTeamLeader)) {
  486.             $this->project_branch_team_leader[] = $projectBranchTeamLeader;
  487.         }
  488.         return $this;
  489.     }
  490.     public function removeProjectBranchTeamLeader(Branches $projectBranchTeamLeader): self
  491.     {
  492.         $this->project_branch_team_leader->removeElement($projectBranchTeamLeader);
  493.         return $this;
  494.     }
  495. }