<?php
namespace App\Entity;
use App\Repository\ProjectOrderExpensePositionsRepository;
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=ProjectOrderExpensePositionsRepository::class)
*/
class ProjectOrderExpensePositions
{
/**
* 💡💡💡💡
* project.orders.expense.positions.countable.version
* countable sadece exoense list üzerinde expense ait kac tane position oldugunu anlamak icin lazim!!!
* 💡💡💡💡
*/
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({
* "project.orders.expense.position.base",
* "project.orders.expense.positions.countable.version",
*
* "project.orders.expense.minify.version",
*
* "expense.position.core", "expense_position@core"
* })
*/
private $id;
/**
* @Groups({
* "project.orders.expense.position.base",
* })
*/
private $test;
/**
* @return mixed
*/
public function getTest()
{
return $this->test;
}
/**
* "project.orders.expense.position.base",
* @ORM\ManyToOne(targetEntity=ProjectOrderExpenses::class, inversedBy="projectOrderExpensePositions")
* @ORM\JoinColumn(onDelete="CASCADE")
* @Groups({
* "project.orders.expense.minify.version",
*
* "expense.position.expense"
* })
*/
private $project_order_expense;
/**
* @ORM\ManyToOne(targetEntity=Material::class, inversedBy="projectOrderExpensePositions")
* @ORM\JoinColumn(nullable=true)
* @Groups({
* "material.base",
*
* "expense.position.material"
* })
*/
private $material;
/**
* @ORM\Column(type="integer")
* @Groups({
* "project.orders.expense.position.base",
* "project.orders.expense.minify.version",
* "project.orders.expense.positions.countable.version",
* "expense.position.core", "expense_position@core"
* })
*/
private $unit;
/**
* @ORM\Column(type="datetime_immutable")
* @Groups({
* "project.orders.expense.position.base",
* "expense.position.core", "expense_position@core"
* })
*/
private $created_at;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "project.orders.expense.minify.version",
* "project.orders.expense.positions.countable.version",
*
* "expense.position.core", "expense_position@core"
* })
*/
private $delivered_at;
/**
* @deprecated use buying price instead
* @ORM\Column(type="decimal", precision=10, scale=2, nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "project.orders.expense.minify.version",
* "project.orders.expense.positions.countable.version",
* "expense.position.core", "expense_position@core"
* })
*/
private $amount;
/**
* @ORM\Column(type="integer", nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "expense.position.core", "expense_position@core"
* })
*/
private $delivered_unit;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "project.orders.expense.minify.version",
* "expense.position.core", "expense_position@core"
* })
*
*/
private $content;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "expense.position.core", "expense_position@core"
* })
*/
private $completed;
/**
* @ORM\Column(type="text", nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "expense.position.core", "expense_position@core"
* })
*/
private $comment;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "expense.position.core", "expense_position@core"
* })
*/
private $delivered_to;
/**
* @MaxDepth(1)
* @ORM\ManyToOne(targetEntity=ProjectOrders::class, inversedBy="projectOrderExpensePositions")
* @Groups({
* "project.orders.expense.position.base",
* "project.order.expense.position.order",
*
* "expense.position.order"
* })
*/
private $project_order;
/**
* A manipulated or simulated column is used to prevent circular references.
* It is used for retrieving the necessary information related to an order in order to generate
* a list of minified expenses for the associated spending
* @Groups({
* "project.orders.expense.minify.version",
* })
*/
private $required_order_details_for_expense_history;
/**
* @return mixed
*/
public function getRequiredOrderDetailsForExpenseHistory(): array
{
if($this->getProjectOrder()){
return [
"id" => $this->getProjectOrder()->getId(),
"order_nr" => $this->getProjectOrder()->getOrderNr()
];
}
return null;
}
/**
* @ORM\Column(type="string", length=64, nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "expense.position.core", "expense_position@core"
* })
*/
private $an_supplier;
/**
* @ORM\ManyToOne(targetEntity=ProjectOrderExpensePositions::class, inversedBy="decomposed_positions", cascade={"persist"})
* @Groups({
* "project.orders.expense.position.base",
* "expense.position.core", "expense_position@core"
* })
* @ORM\JoinColumn(onDelete="SET NULL")
*/
private $parent_pos;
/**
* @ORM\OneToMany(targetEntity=ProjectOrderExpensePositions::class, mappedBy="parent_pos")
* @Groups({
* "project.orders.expense.position.base",
* "expense.position.decomposed"
* })
*/
private $decomposed_positions;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "project.orders.expense.minify.version",
* "expense.position.core", "expense_position@core"
* })
*/
private $file_name;
/**
* @ORM\ManyToOne(targetEntity=Stocks::class, inversedBy="projectOrderExpensePositions")
* @Groups({
* "project_orders_expense_position@stock"
* })
*/
private $stock;
/**
* @ORM\Column(type="float", nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "project.orders.expense.minify.version",
* "project.orders.expense.positions.countable.version",
* "expense.position.core", "expense_position@core"
* })
*/
private $buying_price;
/**
* @ORM\Column(type="float", nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "project.orders.expense.minify.version",
* "project.orders.expense.positions.countable.version",
* "expense.position.core", "expense_position@core"
* })
*/
private $sales_price;
/**
* @ORM\Column(type="float", nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "project.orders.expense.minify.version",
* "project.orders.expense.positions.countable.version",
* "expense.position.core", "expense_position@core"
* })
*/
private $sales_margin;
/**
* @ORM\OneToOne(targetEntity=PurchaseRequestPositions::class, inversedBy="expense_position", cascade={"persist", "remove"})
* @ORM\JoinColumn(onDelete="CASCADE")
* @Groups({
* "expense_position@purchse_request_position"
* })
*/
private $purchase_request_position;
/**
* @ORM\Column(type="float", nullable=true)
* @Groups({
* "project.orders.expense.position.base",
* "project.orders.expense.minify.version",
* "project.orders.expense.positions.countable.version",
* "expense.position.core", "expense_position@core"
* })
*/
private $delivery_amount;
public function __construct()
{
$this->decomposed_positions = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getProjectOrderExpense(): ?ProjectOrderExpenses
{
return $this->project_order_expense;
}
public function setProjectOrderExpense(?ProjectOrderExpenses $project_order_expense): self
{
$this->project_order_expense = $project_order_expense;
return $this;
}
public function getMaterial(): ?Material
{
return $this->material;
}
public function setMaterial(?Material $material): self
{
$this->material = $material;
return $this;
}
public function getUnit(): ?int
{
return $this->unit;
}
public function setUnit(int $unit): self
{
$this->unit = $unit;
return $this;
}
public function getCreatedAt(): ?\DateTimeImmutable
{
return $this->created_at;
}
public function setCreatedAt(\DateTimeImmutable $created_at): self
{
$this->created_at = $created_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;
}
/**
* @deprecated use buying price instead
*/
public function getAmount(): ?string
{
return $this->amount;
}
/**
* @deprecated use buying price instead
*/
public function setAmount(?string $amount): self
{
$this->amount = $amount;
return $this;
}
public function getDeliveredUnit(): ?int
{
return $this->delivered_unit;
}
public function setDeliveredUnit(?int $delivered_unit): self
{
$this->delivered_unit = $delivered_unit;
return $this;
}
public function getContent(): ?string
{
return $this->content;
}
public function setContent(?string $content): self
{
$this->content = $content;
return $this;
}
public function getCompleted(): ?bool
{
return $this->completed;
}
public function setCompleted(?bool $completed): self
{
$this->completed = $completed;
return $this;
}
public function getComment(): ?string
{
return $this->comment;
}
public function setComment(?string $comment): self
{
$this->comment = $comment;
return $this;
}
public function getDeliveredTo(): ?string
{
return $this->delivered_to;
}
public function setDeliveredTo(?string $delivered_to): self
{
$this->delivered_to = $delivered_to;
return $this;
}
public function getProjectOrder(): ?ProjectOrders
{
return $this->project_order;
}
public function setProjectOrder(?ProjectOrders $project_order): self
{
$this->project_order = $project_order;
return $this;
}
public function getAnSupplier(): ?string
{
return $this->an_supplier;
}
public function setAnSupplier(?string $an_supplier): self
{
$this->an_supplier = $an_supplier;
return $this;
}
public function getParentPos():? self
{
return $this->parent_pos;
}
public function setParentPos(?self $parent_pos): self
{
$this->parent_pos = $parent_pos;
return $this;
}
/**
* @return Collection<int, self>
*/
public function getDecomposedPositions(): Collection
{
return $this->decomposed_positions;
}
public function addDecomposedPosition(self $decomposedPosition): self
{
if (!$this->decomposed_positions->contains($decomposedPosition)) {
$this->decomposed_positions[] = $decomposedPosition;
$decomposedPosition->setParentPos($this);
}
return $this;
}
public function removeDecomposedPosition(self $decomposedPosition): self
{
if ($this->decomposed_positions->removeElement($decomposedPosition)) {
// set the owning side to null (unless already changed)
if ($decomposedPosition->getParentPos() === $this) {
$decomposedPosition->setParentPos(null);
}
}
return $this;
}
public function getFileName(): ?string
{
return $this->file_name;
}
public function setFileName(?string $file_name): self
{
$this->file_name = $file_name;
return $this;
}
public function getStock(): ?Stocks
{
return $this->stock;
}
public function setStock(?Stocks $stock): self
{
$this->stock = $stock;
return $this;
}
public function getBuyingPrice(): ?float
{
return $this->buying_price;
}
public function setBuyingPrice(?float $buying_price): self
{
$this->buying_price = $buying_price;
return $this;
}
public function getSalesPrice(): ?float
{
return $this->sales_price;
}
public function setSalesPrice(?float $sales_price): self
{
$this->sales_price = $sales_price;
return $this;
}
public function getSalesMargin(): ?float
{
return $this->sales_margin;
}
public function setSalesMargin(?float $sales_margin): self
{
$this->sales_margin = $sales_margin;
return $this;
}
public function getPurchaseRequestPosition(): ?PurchaseRequestPositions
{
return $this->purchase_request_position;
}
public function setPurchaseRequestPosition(?PurchaseRequestPositions $purchase_request_position): self
{
$this->purchase_request_position = $purchase_request_position;
return $this;
}
public function getDeliveryAmount(): ?float
{
return $this->delivery_amount;
}
public function setDeliveryAmount(?float $delivery_amount): self
{
$this->delivery_amount = $delivery_amount;
return $this;
}
}