<?php
namespace App\Entity;
use App\Repository\QualificationRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\MaxDepth;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ORM\Entity(repositoryClass=QualificationRepository::class)
*/
class Qualification
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({
* "qualifications.base",
* "project.qualifications",
* "customer.joined.projects.depended.qualifications",
* "stakeholder.selected.core.project.manage",
* "worker.manage.base",
* "worker.manage.selected.worker.in.project",
* "worker.manage.joined.projects",
* "selected.customer.project.for.worker",
*
* })
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Groups({
* "qualifications.base",
* "project.qualifications",
* "customer.joined.projects.depended.qualifications",
* "stakeholder.selected.core.project.manage",
* "worker.manage.base",
* "worker.manage.selected.worker.in.project",
* "worker.manage.joined.projects",
* "selected.customer.project.for.worker"
* })
*/
private $name;
/**
* @ORM\ManyToMany(targetEntity=Worker::class, mappedBy="qualifications")
*/
private $workers;
/**
* @ORM\Column(type="string", length=255, nullable=true )
* @Groups({
* "qualifications.base",
* "project.qualifications",
* "customer.joined.projects.depended.qualifications",
* "stakeholder.selected.core.project.manage",
* "worker.manage.selected.worker.in.project",
* "worker.manage.joined.projects"
* })
*/
private $color;
/**
* @ORM\ManyToMany(targetEntity=ProjectStakeholders::class, mappedBy="dependent_qualifications", cascade={"remove"} )
*/
private $projectStakeholders;
/**
* @ORM\ManyToMany(targetEntity=WorkerInProject::class, mappedBy="assigned_qualifications")
*/
private $workerInProjects;
/**
* @ORM\ManyToMany(targetEntity=Projects::class, mappedBy="dependent_qualifications")
*/
private $projects;
/**
* @ORM\OneToMany(targetEntity=AccessAddTimesheetTime::class, mappedBy="qualification")
*/
private $accessAddTimesheetTimes;
public function __construct()
{
$this->workers = new ArrayCollection();
$this->projectStakeholders = new ArrayCollection();
$this->workerInProjects = new ArrayCollection();
$this->projects = new ArrayCollection();
$this->accessAddTimesheetTimes = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
// /**
// * @return Collection<int, Worker>
// */
// public function getWorkers(): ?Collection
// {
// return $this->workers;
// }
public function addWorker(Worker $worker): self
{
if (!$this->workers->contains($worker)) {
$this->workers[] = $worker;
$worker->addQualification($this);
}
return $this;
}
public function removeWorker(Worker $worker): self
{
if ($this->workers->removeElement($worker)) {
$worker->removeQualification($this);
}
return $this;
}
public function getColor(): ?string
{
return $this->color;
}
public function setColor(string $color): self
{
$this->color = $color;
return $this;
}
// /**
// * @return Collection<int, ProjectStakeholders>
// */
// public function getProjectStakeholders(): Collection
// {
//
//// return $this->projectStakeholders->map(function(/**@var $projectStakeholder ProjectStakeholders*/$projectStakeholder){
//// return [
//// 'id' => $projectStakeholder->getId(),
//// $projectStakeholder->getCreatedAt(),
//// $projectStakeholder->get(),
//// ]
//// });
////
//// return $this->projectStakeholders;
// return $this->projectStakeholders;
// }
public function addProjectStakeholder(ProjectStakeholders $projectStakeholder): self
{
if (!$this->projectStakeholders->contains($projectStakeholder)) {
$this->projectStakeholders[] = $projectStakeholder;
$projectStakeholder->addDependentQualification($this);
}
return $this;
}
public function removeProjectStakeholder(ProjectStakeholders $projectStakeholder): self
{
if ($this->projectStakeholders->removeElement($projectStakeholder)) {
$projectStakeholder->removeDependentQualification($this);
}
return $this;
}
// /**
// * @return Collection<int, WorkerInProject>
// */
// public function getWorkerInProjects(): Collection
// {
// return $this->workerInProjects;
//
// return $this->workerInProjects->map( function(/**@var $workerInProject WorkerInProject*/ $workerInProject ){
// return [
// "id"=>$workerInProject->getId(),
// 'project'=>[
// "name"=>$workerInProject->getProject()->getProject()->getName(),
// ]
// ];
// });
//
// // return new ArrayCollection([]); // $this->workerInProjects;
// }
public function addWorkerInProject(WorkerInProject $workerInProject): self
{
if (!$this->workerInProjects->contains($workerInProject)) {
$this->workerInProjects[] = $workerInProject;
$workerInProject->addAssignedQualification($this);
}
return $this;
}
public function removeWorkerInProject(WorkerInProject $workerInProject): self
{
if ($this->workerInProjects->removeElement($workerInProject)) {
$workerInProject->removeAssignedQualification($this);
}
return $this;
}
// /**
// * @return Collection<int, Projects>
// */
// public function getProjects(): Collection
// {
// return $this->projects;
// return $this->projects->map( function(/**@var $project Projects*/$project){
// return [
// "id"=>$project->getId(),
// 'name'=>$project->getName()
// ];
// });
//
// // return new ArrayCollection([]); // $this->projects;
// }
public function addProject(Projects $project): self
{
if (!$this->projects->contains($project)) {
$this->projects[] = $project;
$project->addDependentQualification($this);
}
return $this;
}
public function removeProject(Projects $project): self
{
if ($this->projects->removeElement($project)) {
$project->removeDependentQualification($this);
}
return $this;
}
/**
* @return Collection<int, AccessAddTimesheetTime>
*/
public function getAccessAddTimesheetTimes(): Collection
{
return $this->accessAddTimesheetTimes;
}
public function addAccessAddTimesheetTime(AccessAddTimesheetTime $accessAddTimesheetTime): self
{
if (!$this->accessAddTimesheetTimes->contains($accessAddTimesheetTime)) {
$this->accessAddTimesheetTimes[] = $accessAddTimesheetTime;
$accessAddTimesheetTime->setQualification($this);
}
return $this;
}
public function removeAccessAddTimesheetTime(AccessAddTimesheetTime $accessAddTimesheetTime): self
{
if ($this->accessAddTimesheetTimes->removeElement($accessAddTimesheetTime)) {
// set the owning side to null (unless already changed)
if ($accessAddTimesheetTime->getQualification() === $this) {
$accessAddTimesheetTime->setQualification(null);
}
}
return $this;
}
}