<?php
namespace App\Entity;
use App\Repository\PurchaseRequestRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ORM\Entity(repositoryClass=PurchaseRequestRepository::class)
*/
class PurchaseRequest
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({
* "purchase_request:core"
* })
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="purchase_requests_requester")
* @ORM\JoinColumn(nullable=false)
* @Groups({
* "purchase_request:requester"
* })
*/
private $requester;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="purchase_requests_approver")
* @ORM\JoinColumn(nullable=true)
* @Groups({
* "purchase_request:approver"
* })
*/
private $approver;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "purchase_request:core"
* })
*/
private $approved_at;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "purchase_request:core"
* })
*/
private $should_deliver_at;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "purchase_request:core"
* })
*/
private $delivered_at;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "purchase_request:core"
* })
*/
private $created_at;
/**
* @ORM\OneToMany(targetEntity=PurchaseRequestPositions::class, mappedBy="purchase_request")
* @Groups({
* "purchase_request:positions",
* "purchase_request@positions",
*
* })
*/
private $purchase_request_positions;
/**
* @ORM\OneToMany(targetEntity=PurchaseRequestHistories::class, mappedBy="purchase_request", cascade={"persist", "remove"})
* @Groups({
* "purchase_request:histories"
* })
* @ORM\OrderBy({"id" = "ASC"})
*/
private $purchase_request_histories;
/**
* @ORM\Column(type="string", length=64)
* @Groups({
* "purchase_request:core"
* })
*/
private $packet_name;
/**
* @ORM\OneToMany(targetEntity=PurchaseRequestUserFavorites::class, mappedBy="purchase_request")
*/
private $purchase_request_user_favorites;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="purchase_request_rejecter")
* @Groups({
* "purchase_request:rejecter"
* })
*/
private $rejecter;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "purchase_request:core"
* })
*/
private $rejected_at;
/**
*
* ⚠️ TODO: Bu prop uzerinden takip edilecek
* ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
* READ ME !!!!
* Expense normalde positionlara sahip ama burada Bu expense (Expense Positionlari) -> Purchase request positionlari ile iliskili olacak
* ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
*
*
* Ordered status bu prop uzerinden takip edilacek
* ORM\OneToOne(targetEntity=ProjectOrderExpenses::class, inversedBy="purchase_request", cascade={"persist", "remove"})
* @ORM\OneToMany(targetEntity=ProjectOrderExpenses::class, mappedBy="purchase_request", cascade={"persist", "remove"})
* @Groups({
* "purchase_request:expense", "purchase_request@expenses"
* })
* @ORM\JoinColumn(onDelete="SET NULL")
*/
private $expenses;
public function __construct()
{
$this->purchase_request_positions = new ArrayCollection();
$this->purchase_request_histories = new ArrayCollection();
$this->purchase_request_user_favorites = new ArrayCollection();
$this->expenses = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getRequester(): ?User
{
return $this->requester;
}
public function setRequester(?User $requester): self
{
$this->requester = $requester;
return $this;
}
public function getApprover(): ?User
{
return $this->approver;
}
public function setApprover(?User $approver): self
{
$this->approver = $approver;
return $this;
}
public function getApprovedAt(): ?\DateTimeImmutable
{
return $this->approved_at;
}
public function setApprovedAt(?\DateTimeImmutable $approved_at): self
{
$this->approved_at = $approved_at;
return $this;
}
public function getShouldDeliverAt(): ?\DateTimeImmutable
{
return $this->should_deliver_at;
}
public function setShouldDeliverAt(?\DateTimeImmutable $should_deliver_at): self
{
$this->should_deliver_at = $should_deliver_at;
return $this;
}
public function getDeliveredAt(): ?\DateTimeImmutable
{
return $this->delivered_at;
}
public function setDeliveredAt(?\DateTimeImmutable $delivered_at): self
{
$this->delivered_at = $delivered_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, PurchaseRequestPositions>
*/
public function getPurchaseRequestPositions(): Collection
{
return $this->purchase_request_positions;
}
public function addPurchaseRequestPosition(PurchaseRequestPositions $purchaseRequestPosition): self
{
if (!$this->purchase_request_positions->contains($purchaseRequestPosition)) {
$this->purchase_request_positions[] = $purchaseRequestPosition;
$purchaseRequestPosition->setPurchaseRequest($this);
}
return $this;
}
public function removePurchaseRequestPosition(PurchaseRequestPositions $purchaseRequestPosition): self
{
if ($this->purchase_request_positions->removeElement($purchaseRequestPosition)) {
// set the owning side to null (unless already changed)
if ($purchaseRequestPosition->getPurchaseRequest() === $this) {
$purchaseRequestPosition->setPurchaseRequest(null);
}
}
return $this;
}
/**
* @return Collection<int, PurchaseRequestHistories>
*/
public function getPurchaseRequestHistories(): Collection
{
return $this->purchase_request_histories;
}
public function addPurchaseRequestHistory(PurchaseRequestHistories $purchaseRequestHistory): self
{
if (!$this->purchase_request_histories->contains($purchaseRequestHistory)) {
$this->purchase_request_histories[] = $purchaseRequestHistory;
$purchaseRequestHistory->setPurchaseRequest($this);
}
return $this;
}
public function removePurchaseRequestHistory(PurchaseRequestHistories $purchaseRequestHistory): self
{
if ($this->purchase_request_histories->removeElement($purchaseRequestHistory)) {
// set the owning side to null (unless already changed)
if ($purchaseRequestHistory->getPurchaseRequest() === $this) {
$purchaseRequestHistory->setPurchaseRequest(null);
}
}
return $this;
}
public function getPacketName(): ?string
{
return $this->packet_name;
}
public function setPacketName(string $packet_name): self
{
$this->packet_name = $packet_name;
return $this;
}
/**
* @return Collection<int, PurchaseRequestUserFavorites>
*/
public function getPurchaseRequestUserFavorites(): Collection
{
return $this->purchase_request_user_favorites;
}
public function addPurchaseRequestUserFavorite(PurchaseRequestUserFavorites $purchaseRequestUserFavorite): self
{
if (!$this->purchase_request_user_favorites->contains($purchaseRequestUserFavorite)) {
$this->purchase_request_user_favorites[] = $purchaseRequestUserFavorite;
$purchaseRequestUserFavorite->setPurchaseRequest($this);
}
return $this;
}
public function removePurchaseRequestUserFavorite(PurchaseRequestUserFavorites $purchaseRequestUserFavorite): self
{
if ($this->purchase_request_user_favorites->removeElement($purchaseRequestUserFavorite)) {
// set the owning side to null (unless already changed)
if ($purchaseRequestUserFavorite->getPurchaseRequest() === $this) {
$purchaseRequestUserFavorite->setPurchaseRequest(null);
}
}
return $this;
}
public function getRejecter(): ?User
{
return $this->rejecter;
}
public function setRejecter(?User $rejecter): self
{
$this->rejecter = $rejecter;
return $this;
}
public function getRejectedAt(): ?\DateTimeImmutable
{
return $this->rejected_at;
}
public function setRejectedAt(?\DateTimeImmutable $rejected_at): self
{
$this->rejected_at = $rejected_at;
return $this;
}
/**
* Bunu kendim manuelle yaptim
* @return Collection<int, ProjectOrderExpenses>
*/
public function getExpenses(): Collection
{
return $this->expenses;
}
public function addProjectOrderExpense( ProjectOrderExpenses $expense): self
{
if (!$this->expenses->contains($expense)) {
$this->expenses[] = $expense;
$expense->setPurchaseRequest($this);
}
return $this;
}
public function removeProjectOrderExpense(ProjectOrderExpenses $expense): self
{
if ($this->expenses->removeElement($expense)) {
// set the owning side to null (unless already changed)
if ($expense->getPurchaseRequest() === $this) {
$expense->setPurchaseRequest(null);
}
}
return $this;
}
}