<?php
namespace App\Entity;
use App\Repository\ProjectsRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\PersistentCollection;
use phpDocumentor\Reflection\Types\Float_;
use function PHPSTORM_META\map;
use function Sodium\add;
use function Sodium\crypto_generichash_final;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ORM\Entity(repositoryClass=ProjectsRepository::class)
* @ORM\HasLifecycleCallbacks
*/
class Projects
{
/*
* @ORM\PostLoad
* @ORM\PrePersist
* @ORM\PreUpdate
* @param LifecycleEventArgs $lifecycleEventArgs
public function init( LifecycleEventArgs $lifecycleEventArgs ){
$this->setTotalCost();
}
*/
// TODO replace project.base with project.core
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({
* "project.base",
* "project.core",
* "project.selectable.list",
* "customer.manage.base",
* "stakeholder.selected.core.project.manage",
* "customer.selected.project",
* "worker.join.to.project",
* "worker.manage.joined.projects",
* "worker.manage.selectable.stakeholder.projects",
* "selected.customer.project.for.worker",
* "worker.manage.selected.worker.in.project",
* "worker.manage.base.timesheet.payments",
*
* "customer.selected.project",
*
*
* "project.list.with.necessary.details",
* "project.details",
*
* "order.assigned.project.minify",
*
* "project.details.for.collected.timesheet"
*
*
* })
*/
#"project.orders.expense.position.base"
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Groups({"project.base",
* "project.core",
* "project.selectable.list",
* "customer.manage.base",
* "stakeholder.selected.core.project.manage",
* "customer.selected.project",
* "worker.join.to.project",
* "worker.manage.joined.projects",
* "worker.manage.selectable.stakeholder.projects",
* "selected.customer.project.for.worker",
* "worker.manage.selected.worker.in.project",
* "worker.manage.base.timesheet.payments",
* "timesheet.for.customer",
*
* "customer.selected.project",
* "project.list.with.necessary.details",
*
* "project.details",
*
* "order.assigned.project.minify",
*
* "project.details.for.collected.timesheet"
*
* })
*/
#"project.orders.expense.position.base"
private $name;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({"project.base",
* "project.core",
* "customer.manage.base",
* "stakeholder.selected.core.project.manage",
* "customer.selected.project",
* "worker.manage.joined.projects",
* "selected.customer.project.for.worker",
* "worker.manage.selected.worker.in.project",
* "project.list.with.necessary.details",
*
*
* "project.details"
* })
*/
private $start_at;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({"project.base",
* "project.core",
* "customer.manage.base",
* "stakeholder.selected.core.project.manage",
* "customer.selected.project",
* "worker.manage.joined.projects",
* "selected.customer.project.for.worker",
* "worker.manage.selected.worker.in.project",
* "project.list.with.necessary.details",
*
*
* "project.details"
* })
*/
private $end_at;
/**
* @ORM\Column(type="datetime_immutable")
*/
private $created_at;
/**
* @ORM\OneToMany(targetEntity=ProjectStakeholders::class, mappedBy="project")
*/
private $stakeholders;
/**
* @ORM\ManyToMany(targetEntity=Qualification::class, inversedBy="projects")
* @ORM\JoinColumn(onDelete="CASCADE")
* @Groups({
* "project.qualifications",
* "customer.manage.base",
* "stakeholder.selected.core.project.manage",
* "customer.selected.project",
* "selected.customer.project.for.worker",
* "worker.manage.selected.worker.in.project"
* })
*
*/
private $dependent_qualifications;
/**
* @ORM\ManyToMany(targetEntity=Certificates::class, inversedBy="projects")
* @ORM\JoinColumn(onDelete="CASCADE")
* @Groups({
* "project.certificates",
* "customer.manage.base",
* "stakeholder.selected.core.project.manage",
* "customer.selected.project",
* "selected.customer.project.for.worker",
* "worker.manage.selected.worker.in.project"
* })
*/
private $dependent_certificates;
/**
* @ORM\ManyToOne(targetEntity=ProjectOwner::class, inversedBy="projects")
* @ORM\JoinColumn(nullable=true)
* @Groups({
* "project.owner",
* "project.list.with.necessary.details",
* "project.details",
*
* "project.details.for.collected.timesheet"
* })
*/
private $owner;
/**
* @ORM\ManyToOne(targetEntity=Countries::class, inversedBy="projects")
* @Groups({
* "project.base",
* "project.core",
* "project.list.with.necessary.details",
* "project.details"
* })
*/
private Countries $country;
/**
* @ORM\Column(type="string", length=64, nullable=true )
* @Groups({
* "project.base",
* "project.core",
* "customer.manage.base",
* "project.list.with.necessary.details",
*
* "project.selectable.list",
* "stakeholder.selected.core.project.manage",
* "customer.selected.project",
* "worker.manage.selectable.stakeholder.projects",
* "selected.customer.project.for.worker",
* "worker.manage.selected.worker.in.project",
* "worker.manage.joined.projects",
*
*
* "project.details",
*
* "project.details.for.collected.timesheet"
*
*
* })
*/
#"project.orders.expense.position.base"
private ?string $project_id;
/**
* @ORM\OneToMany(targetEntity=ProjectAddendumCosts::class, mappedBy="project", cascade={"persist", "remove"})
* @ORM\OrderBy({"id":"DESC"})
* @ORM\JoinColumn(onDelete="CASCADE")
* @Groups({
* "customer.manage.base",
* "project.list.with.necessary.details",
* "project.details"
* })
*/
private $project_addendum_costs;
/**
* ----------------------------------------------------------------------------------------------------------------
* This is custom column not associated to table
* Event Listener Prop
* This prop Update during event.listener
* @Groups({
* "project.base",
* "project.core",
* "project.selectable.list",
* "customer.manage.base",
* "stakeholder.selected.core.project.manage",
* "customer.selected.project",
* "worker.manage.joined.projects",
* "worker.manage.selectable.stakeholder.projects",
* "selected.customer.project.for.worker",
* "worker.manage.selected.worker.in.project",
* "project.list.with.necessary.details"
* })
*/
private array $status;
/**
* Event Listener Prop
* This prop Update during event.listener
* @param array $status
*/
public function setStatus( array $status ): void {
$this->status = $status;
}
/** * Event Listener Prop */
public function getStatus(): array {
return $this->status;
}
// ----------------------------------------------------------------------------------------------------------------
/**
* @Groups({
* "project.base",
* "project.core",
* "project.details"
* })
*/
private array $total_cost;
/**
* TODO bunu incele cunku Project_order_expenses olayi var
* @deprecated
* @ORM\OneToMany(targetEntity=ProjectExpense::class, mappedBy="project", orphanRemoval=true)
* @ORM\JoinColumn(onDelete="CASCADE", nullable=true)
* @Groups({"project.expenses"})
*/
private $project_expenses;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({
* "project.base",
* "project.core"
* })
*/
private ?string $qr_code = '';
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({
* "project.base",
* "project.core"
* })
*/
private ?string $address;
/**
* @deprecated
* @ORM\Column(type="string", length=255, nullable=true, unique=false )
* @Groups({
* "project.base",
* "project.core"
* })
*/
private $longitude;
/**
* @deprecated
* @ORM\Column(type="string", length=255, nullable=true, unique=false )
* @Groups({
* "project.base",
* "project.core"
* })
*/
private $latitude;
/**
* @deprecated
* @ORM\Column(type="integer", nullable=true)
* @Groups({
* "project.base",
* "project.core"
* })
*/
private $scan_distance;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({
* "project.base",
* "project.core"
* })
*/
private ?int $reward_time;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({
* "project.base",
* "project.core"
* })
*/
private ?int $work_pause;
/**
* @ORM\Column(type="string", length=10, nullable=true)
* @Groups({
* "project.base",
* "project.core"
* })
*/
private ?string $working_time_start;
/**
* @ORM\Column(type="string", length=10, nullable=true)
* @Groups({
* "project.base",
* "project.core"
* })
*/
private ?string $working_time_stop;
/**
* @ORM\Column(type="string", length=12, nullable=true)
* @Groups({
* "project.base",
* "project.core"
* })
*/
private ?string $code_postal;
/**
* @ORM\Column(type="string", length=64, nullable=true)
* @Groups({
* "project.base",
* "project.core",
* "project.list.with.necessary.details"
* })
*/
private ?string $town;
/**
* @ORM\OneToMany(targetEntity=ProjectBranches::class, mappedBy="project", cascade={"persist", "remove"}, orphanRemoval=true, fetch="EAGER")
* @Groups({
* "project.branches",
* "customer.manage.base",
* "stakeholder.selected.core.project.manage",
* "worker.manage.selected.worker.in.project",
* "selected.customer.project.for.worker",
* "customer.selected.project",
*
* "project.details.for.collected.timesheet"
* })
*/
private $project_branches;
/**
* @ORM\OneToMany(targetEntity=ProjectOrders::class, mappedBy="project", orphanRemoval=true, cascade={"persist", "remove"})
* @Groups({
* "project.orders",
* "worker.manage.base.timesheet",
* "customer.selected.project",
* "project.list.with.necessary.details",
* "project.details",
*
* "project.details.orders",
*
* "project.details.for.collected.timesheet"
*
* })
*/
private $project_orders;
/**
* @ORM\OneToMany(targetEntity=WorkerTimesheetPayments::class, mappedBy="project")
*/
private $worker_timesheet_payments;
/**
* @ORM\ManyToOne(targetEntity=InvoiceType::class, inversedBy="projects")
* @Groups({
* "project.details",
* "project.base",
* "project.core"
* })
*/
private $invoice_type;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({
* "project.details",
* "project.base",
* "project.core"
* })
*/
private $is_archived;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({
* "project.details",
* "project.base",
* "project.core"
* })
*/
private $is_recycle;
/**
* @ORM\OneToOne(targetEntity=ProjectSettings::class, mappedBy="project", cascade={"persist", "remove"})
* @Groups({
* "project.settings"
* })
*
*/
private $project_settings;
public function __construct()
{
$this->stakeholders = new ArrayCollection();
$this->dependent_qualifications = new ArrayCollection();
$this->dependent_certificates = new ArrayCollection();
$this->project_addendum_costs = new ArrayCollection();
$this->project_expenses = new ArrayCollection();
$this->project_branches = new ArrayCollection();
$this->project_orders = new ArrayCollection();
$this->worker_timesheet_payments = 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;
}
public function getStartAt(): ?\DateTimeImmutable
{
return $this->start_at;
}
public function setStartAt(?\DateTimeImmutable $start_at): self
{
$this->start_at = $start_at;
return $this;
}
public function getEndAt(): ?\DateTimeImmutable
{
return $this->end_at;
}
public function setEndAt(?\DateTimeImmutable $end_at): self
{
$this->end_at = $end_at;
return $this;
}
public function getCreatedAt(): ?\DateTimeImmutable
{
return $this->created_at;
}
public function setCreatedAt(\DateTimeImmutable $created_at): self
{
$this->created_at = $created_at;
return $this;
}
// /**
// * @return Collection<int, ProjectStakeholders>
// */
public function getStakeholders(): Collection
{
return $this->stakeholders;
}
public function addStakeholder(ProjectStakeholders $stakeholder): self
{
if (!$this->stakeholders->contains($stakeholder)) {
$this->stakeholders[] = $stakeholder;
$stakeholder->setProject($this);
}
return $this;
}
public function removeStakeholder(ProjectStakeholders $stakeholder): self
{
if ($this->stakeholders->removeElement($stakeholder)) {
// set the owning side to null (unless already changed)
if ($stakeholder->getProject() === $this) {
$stakeholder->setProject(null);
}
}
return $this;
}
/**
* @return Collection<int, Qualification>
*/
public function getDependentQualifications(): Collection
{
return $this->dependent_qualifications;
}
public function addDependentQualification(Qualification $dependentQualification): self
{
if (!$this->dependent_qualifications->contains($dependentQualification)) {
$this->dependent_qualifications[] = $dependentQualification;
}
return $this;
}
public function removeDependentQualification(Qualification $dependentQualification): self
{
$this->dependent_qualifications->removeElement($dependentQualification);
return $this;
}
/**
* @return Collection<int, Certificates>
*/
public function getDependentCertificates(): Collection
{
return $this->dependent_certificates;
}
public function addDependentCertificate(Certificates $dependentCertificate): self
{
if (!$this->dependent_certificates->contains($dependentCertificate)) {
$this->dependent_certificates[] = $dependentCertificate;
}
return $this;
}
public function removeDependentCertificate(Certificates $dependentCertificate): self
{
$this->dependent_certificates->removeElement($dependentCertificate);
return $this;
}
public function getOwner(): ?ProjectOwner
{
return $this->owner;
}
public function setOwner(?ProjectOwner $owner): self
{
$this->owner = $owner;
return $this;
}
public function getCountry(): ?Countries
{
return $this->country;
}
public function setCountry(?Countries $country): self
{
$this->country = $country;
return $this;
}
public function getProjectId(): ?string
{
return $this->project_id;
}
public function setProjectId(?string $project_id): self
{
$this->project_id = $project_id;
return $this;
}
/**
* @return Collection<int, ProjectAddendumCosts>
*/
public function getProjectAddendumCosts(): Collection
{
return $this->project_addendum_costs;
}
public function addProjectAddendumCost(ProjectAddendumCosts $projectAddendumCost): self
{
if (!$this->project_addendum_costs->contains($projectAddendumCost)) {
$this->project_addendum_costs[] = $projectAddendumCost;
$projectAddendumCost->setProject($this);
}
return $this;
}
public function removeProjectAddendumCost(ProjectAddendumCosts $projectAddendumCost): self
{
if ($this->project_addendum_costs->removeElement($projectAddendumCost)) {
// set the owning side to null (unless already changed)
if ($projectAddendumCost->getProject() === $this) {
$projectAddendumCost->setProject(null);
}
}
return $this;
}
public function getTotalCost(): array{
return $this->total_cost;
}
/**
* @return Collection<int, ProjectExpense>
*/
public function getProjectExpenses(): Collection
{
return $this->project_expenses;
}
public function addProjectExpense(ProjectExpense $projectExpense): self
{
if (!$this->project_expenses->contains($projectExpense)) {
$this->project_expenses[] = $projectExpense;
$projectExpense->setProject($this);
}
return $this;
}
public function removeProjectExpense(ProjectExpense $projectExpense): self
{
if ($this->project_expenses->removeElement($projectExpense)) {
// set the owning side to null (unless already changed)
if ($projectExpense->getProject() === $this) {
$projectExpense->setProject(null);
}
}
return $this;
}
public function getQrCode(): ?string
{
return $this->qr_code;
}
public function setQrCode(?string $qr_code): self
{
$this->qr_code = $qr_code;
return $this;
}
public function getLongitude(): ?string
{
return $this->longitude;
}
public function setLongitude(?string $longitude): self
{
$this->longitude = $longitude;
return $this;
}
public function getLatitude(): ?string
{
return $this->latitude;
}
public function setLatitude(?string $latitude): self
{
$this->latitude = $latitude;
return $this;
}
public function getAddress(): ?string
{
return $this->address;
}
public function setAddress(?string $address): self
{
$this->address = $address;
return $this;
}
public function getScanDistance(): ?int
{
return $this->scan_distance;
}
public function setScanDistance(?int $scan_distance): self
{
$this->scan_distance = $scan_distance;
return $this;
}
public function getRewardTime(): ?int
{
return $this->reward_time;
}
public function setRewardTime(?int $reward_time): self
{
$this->reward_time = $reward_time;
return $this;
}
public function getWorkPause(): ?int
{
return $this->work_pause;
}
public function setWorkPause(?int $work_pause): self
{
$this->work_pause = $work_pause;
return $this;
}
public function getWorkingTimeStart(): ?string
{
return $this->working_time_start;
}
public function setWorkingTimeStart(?string $working_time_start): self
{
$this->working_time_start = $working_time_start;
return $this;
}
public function getWorkingTimeStop(): ?string
{
return $this->working_time_stop;
}
public function setWorkingTimeStop(?string $working_time_stop): self
{
$this->working_time_stop = $working_time_stop;
return $this;
}
public function getCodePostal(): ?string
{
return $this->code_postal;
}
public function setCodePostal(?string $code_postal): self
{
$this->code_postal = $code_postal;
return $this;
}
public function getTown(): ?string
{
return $this->town;
}
public function setTown(?string $town): self
{
$this->town = $town;
return $this;
}
/**
* @return Collection<int, ProjectBranches>
*/
public function getProjectBranches(): Collection
{
return $this->project_branches;
}
public function addProjectBranch(ProjectBranches $projectBranch): self
{
if (!$this->project_branches->contains($projectBranch)) {
$this->project_branches[] = $projectBranch;
$projectBranch->setProject($this);
}
return $this;
}
public function removeProjectBranch(ProjectBranches $projectBranch): self
{
if ($this->project_branches->removeElement($projectBranch)) {
// set the owning side to null (unless already changed)
if ($projectBranch->getProject() === $this) {
$projectBranch->setProject(null);
}
}
return $this;
}
/**
* @return Collection<int, ProjectOrder>
*/
public function getProjectOrders(): Collection
{
return $this->project_orders;
}
public function addProjectOrder(ProjectOrders $projectOrder): self
{
if (!$this->project_orders->contains($projectOrder)) {
$this->project_orders[] = $projectOrder;
$projectOrder->setProject($this);
}
return $this;
}
public function removeProjectOrder(ProjectOrders $projectOrder): self
{
if ($this->project_orders->removeElement($projectOrder)) {
// set the owning side to null (unless already changed)
if ($projectOrder->getProject() === $this) {
$projectOrder->setProject(null);
}
}
return $this;
}
/**
* @return Collection<int, WorkerTimesheetPayments>
*/
public function getWorkerTimesheetpayments(): Collection
{
return $this->worker_timesheet_payments;
}
public function addWorkerTimesheetPayment(WorkerTimesheetPayments $workerTimesheetPayment): self
{
if (!$this->worker_timesheet_payments->contains($workerTimesheetPayment)) {
$this->worker_timesheet_payments[] = $workerTimesheetPayment;
$workerTimesheetPayment->setProject($this);
}
return $this;
}
public function removeWorkerTimesheetPayment(WorkerTimesheetPayments $workerTimesheetPayment): self
{
if ($this->worker_timesheet_payments->removeElement($workerTimesheetPayment)) {
// set the owning side to null (unless already changed)
if ($workerTimesheetPayment->getProject() === $this) {
$workerTimesheetPayment->setProject(null);
}
}
return $this;
}
/**
* @return Collection<int, OrderBilled>
*/
public function getInvoiceType(): ?InvoiceType
{
return $this->invoice_type;
}
public function setInvoiceType(?InvoiceType $invoice_type): self
{
$this->invoice_type = $invoice_type;
return $this;
}
public function isArchived(): ?bool
{
return $this->is_archived;
}
public function setIsArchived(?bool $is_archived): self
{
$this->is_archived = $is_archived;
return $this;
}
public function isRecycle(): ?bool
{
return $this->is_recycle;
}
public function setIsRecycle(?bool $is_recycle): self
{
$this->is_recycle = $is_recycle;
return $this;
}
public function getProjectSettings(): ?ProjectSettings
{
return $this->project_settings;
}
public function setProjectSetting(ProjectSettings $projectSetting): self
{
if ($projectSetting->getProject() !== $this) {
$projectSetting->setProject($this);
}
$this->project_settings = $projectSetting;
return $this;
}
}