<?php
namespace App\Entity;
use App\Repository\PurchaseRequestPositionsRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Serializer\Annotation\MaxDepth;
/**
* @ORM\Entity(repositoryClass=PurchaseRequestPositionsRepository::class)
*/
class PurchaseRequestPositions
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({
* "purchase_request_position:core", "purchase_request_position@core"
* })
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity=Stocks::class, inversedBy="purchase_request_positions")
* @ORM\JoinColumn(nullable=false)
* @Groups({
* "purchase_request_position:stock", "purchase_request_position@stock"
* })
* @ORM\JoinColumn(onDelete="CASCADE")
*/
private $stock;
/**
* @ORM\Column(type="float")
* @Groups({
* "purchase_request_position:core", "purchase_request_position@core"
* })
*/
private $quantity;
/**
* @ORM\Column(type="float", nullable=true)
* @Groups({
* "purchase_request_position:core", "purchase_request_position@core"
* })
*/
private $delivered_quantity;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "purchase_request_position:core", "purchase_request_position@core"
* })
*/
private $should_deliver_at;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "purchase_request_position:core", "purchase_request_position@core"
* })
*/
private $delivered_at;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "purchase_request_position:core", "purchase_request_position@core"
* })
*/
private $created_at;
/**
* @MaxDepth(1)
* @ORM\ManyToOne(targetEntity=PurchaseRequest::class, inversedBy="purchase_request_positions", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
* @Groups({
* "purchase_request_position:purchase_request", "purchase_request_position@purchase_request"
* })
*/
private $purchase_request;
/**
* @ORM\OneToMany(targetEntity=PurchaseRequestPositionHistories::class, mappedBy="purchase_request_position")
* @Groups({
* "purchase_request_position:histories", "purchase_request_position@histories"
* })
* @ORM\OrderBy({"id"="DESC"})
*/
private $purchase_request_position_histories;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "purchase_request_position:core", "purchase_request_position@core"
* })
*/
private $approved_at;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="purchase_request_positions_approver")
* @ORM\JoinColumn(nullable=true)
* @Groups({
* "purchase_request_position:approver", "purchase_request_position@approver"
* })
*/
private $approver;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "purchase_request_position:core", "purchase_request_position@core"
* })
*/
private $rejected_at;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="purchase_request_positions_rejecter")
* @ORM\JoinColumn(nullable=true)
* @Groups({
* "purchase_request_position:rejecter", "purchase_request_position@rejecter"
* })
*/
private $rejecter;
/**
* ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
* Evet, php bin/console make:entity komutuyla oluşturduğunda Symfony (ve MakerBundle):
*
* sadece tek yönlü ilişki (unidirectional) tanımlar,
* karşı tarafa mappedBy veya inversedBy içeren ilişkiyi sen elle eklemezsen oluşturmaz.
* 🎯 Ne oldu?
*
* Sen örneğin şöyle yaptıysan:
*
* php bin/console make:entity ProjectOrderExpensePositions
* # sonra property adı: purchase_request_position
* # type: relation
* # target entity: PurchaseRequestPositions
* # relation type: OneToOne
* # is this the owning side: yes
*
* O zaman sadece ProjectOrderExpensePositions içinde aşağıdaki gibi oluşur:
* ORM\OneToOne(targetEntity=PurchaseRequestPositions::class, cascade={"persist", "remove"})
* private $purchase_request_position;
*
*✅ Ne yapmalısın?
* ProjectOrderExpensePositions Elle inverse tarafı tanımla
*
* @ORM\OneToOne(mappedBy="purchase_request_position", targetEntity=ProjectOrderExpensePositions::class)
*/
private $expense_position;
public function __construct()
{
$this->purchase_request_position_histories = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getStock(): ?Stocks
{
return $this->stock;
}
public function setStock(?Stocks $stock): self
{
$this->stock = $stock;
return $this;
}
public function getQuantity(): ?int
{
return $this->quantity;
}
public function setQuantity(int $quantity): self
{
$this->quantity = $quantity;
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, PurchaseRequestPositionHistories>
*/
public function getPurchaseRequestPositionHistories(): Collection
{
return $this->purchase_request_position_histories;
}
public function addPurchaseRequestPositionHistory(PurchaseRequestPositionHistories $purchaseRequestPositionHistory): self
{
if (!$this->purchase_request_position_histories->contains($purchaseRequestPositionHistory)) {
$this->purchase_request_position_histories[] = $purchaseRequestPositionHistory;
$purchaseRequestPositionHistory->setPurchaseRequestPosition($this);
}
return $this;
}
public function removePurchaseRequestPOsitionHistory(PurchaseRequestPositionHistories $purchaseRequestPositionHistory): self
{
if ($this->purchase_request_position_histories->removeElement($purchaseRequestPositionHistory)) {
// set the owning side to null (unless already changed)
if ($purchaseRequestPositionHistory->getPurchaseRequestPosition() === $this) {
$purchaseRequestPositionHistory->setPurchaseRequestPosition(null);
}
}
return $this;
}
public function getPurchaseRequest(): ?PurchaseRequest
{
return $this->purchase_request;
}
public function setPurchaseRequest(?PurchaseRequest $purchase_request): self
{
$this->purchase_request = $purchase_request;
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 getApprover(): ?User
{
return $this->approver;
}
public function setApprover(?User $approver): self
{
$this->approver = $approver;
return $this;
}
public function getRejectedAt(): ?\DateTimeImmutable
{
return $this->rejected_at;
}
public function setRejectedAt(?\DateTimeImmutable $rejected_at): self
{
$this->rejected_at = $rejected_at;
return $this;
}
public function getRejecter(): ?User
{
return $this->rejecter;
}
public function setRejecter(?User $rejecter): self
{
$this->rejecter = $rejecter;
return $this;
}
public function getDeliveredQuantity(): ?float
{
return $this->delivered_quantity;
}
public function setDeliveredQuantity(?float $delivered_quantity): self
{
$this->delivered_quantity = $delivered_quantity;
return $this;
}
// One to One iliskisi icin tek tarafli yapildigi icin elle eklendi Manuelle Eklendi
public function getExpensePosition(): ?ProjectOrderExpensePositions
{
return $this->expense_position;
}
// One to One iliskisi icin tek tarafli yapildigi icin elle eklendi Manuelle Eklendi
public function setExpensePosition(?ProjectOrderExpensePositions $expense_position): self
{
$this->expense_position = $expense_position;
return $this;
}
}