<?php
namespace App\Entity\System;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* OrderReturn
*
* @ORM\Table(name="ps_returns_lines")
*
* @ORM\Entity(repositoryClass="App\Repository\System\OrderReturnLineRepository")
*/
class OrderReturnLine
{
/**
* @ORM\Id()
*
* @ORM\GeneratedValue()
*
* @ORM\Column(type="integer", name="id_returns_lines")
*/
private $id;
/**
* @var OrderReturn
*
* @ORM\ManyToOne(targetEntity="App\Entity\System\OrderReturn", inversedBy="lines")
*
* @ORM\JoinColumn(name="id_returns", referencedColumnName="id_returns")
*/
private $rma;
/**
* @var OrderDetail
*
* @ORM\ManyToOne(targetEntity="App\Entity\System\OrderDetail")
*
* @ORM\JoinColumn(name="order_detail_id", referencedColumnName="id_order_detail")
*/
private $orderDetail;
/**
* @var OrderReturnLineStatus
*
* @ORM\ManyToOne(targetEntity="App\Entity\System\OrderReturnLineStatus")
*
* @ORM\JoinColumn(name="status_id", referencedColumnName="id")
*/
private $status;
/**
* @var int
*
* @ORM\Column(type="integer", name="product_qty", length=10)
*/
private $productQuantity;
/**
* @var float
*
* @ORM\Column(type="float", options={"default" : 0.00})
*/
private $price;
/**
* @var float
*
* @ORM\Column(type="float", options={"default" : 0.00})
*/
private $tax;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime")
*/
private $dateAdd;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime")
*/
private $dateUpd;
/**
* @var string
*
* @ORM\Column(type="string", nullable=true)
*/
private $noteSat;
/**
* @var string
*
* @ORM\Column(type="text", nullable=true)
*/
private $satDescription;
/**
* @var string
*
* @ORM\Column(type="text", nullable=true, name="sat_comments")
*/
private $satComments;
/**
* @var string
*
* @ORM\Column(type="text", nullable=true)
*/
private $adminComments;
/**
* @var bool
*
* @ORM\Column(type="boolean", options={"default" : 0})
*/
private $productOk;
/**
* @var bool
*
* @ORM\Column(type="boolean", options={"default" : 0})
*/
private $validate;
/**
* @var bool
*
* @ORM\Column(type="boolean", options={"default" : 0}, nullable=true)
*/
private $refused;
/**
* @var bool
*
* @ORM\Column(type="boolean", options={"default" : 0}, nullable=true)
*/
private $confirmed;
/**
* @var bool
*
* @ORM\Column(type="boolean", name="revisar", options={"default" : 0}, nullable=true)
*/
private $revised;
/**
* @var int
*
* @ORM\Column(type="integer", length=2)
*/
private $taxRate;
/**
* @var string
*
* @ORM\Column(type="text")
*/
private $returnReason;
/**
* @var OrderReturnLineComment[]|ArrayCollection
*
* @ORM\OneToMany(targetEntity="OrderReturnLineComment", mappedBy="returnsLine")
*/
private $comments;
/**
* @var float
*
* @ORM\Column(type="float", options={"default" : 0})
*/
private $total;
/**
* @var float
*
* @ORM\Column(type="float", options={"default" : 0})
*/
private $totalPaid;
/**
* @var bool
*
* @ORM\Column(name="product_50", type="boolean", options={"default" : 0})
*/
private $product50;
/**
* @var bool
*
* @ORM\Column(name="product_100", type="boolean", options={"default" : 0})
*/
private $product100;
/**
* @var int
*
* @ORM\Column(type="integer")
*/
private $receivedQuantity;
/**
* @var int
*
* @ORM\Column(type="integer")
*/
private $acceptedQuantity;
public static function createRmaLine(
OrderReturn $rma,
OrderDetail $orderDetail,
\DateTime $creationDate,
OrderReturnLineStatus $status,
int $quantity,
float $price,
float $tax,
string $returnReason
): OrderReturnLine {
$rmaLine = new self();
$rmaLine->dateAdd = $creationDate;
$rmaLine->dateUpd = $creationDate;
$rmaLine->status = $status;
$rmaLine->rma = $rma;
$rmaLine->orderDetail = $orderDetail;
$rmaLine->productQuantity = $quantity;
$rmaLine->price = $price;
$rmaLine->tax = $tax;
$rmaLine->validate = 0;
$rmaLine->returnReason = $returnReason;
$rmaLine->total = $price * $quantity;
$rmaLine->totalPaid = $price * $quantity;
$rmaLine->productOk = false;
$rmaLine->product50 = false;
$rmaLine->product100 = false;
$rmaLine->receivedQuantity = 0;
$rmaLine->acceptedQuantity = 0;
$rmaLine->taxRate = $orderDetail->getTaxRate();
return $rmaLine;
}
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*
* @return OrderReturnLine
*/
public function setId($id): OrderReturnLine
{
$this->id = $id;
return $this;
}
/**
* @return OrderReturn
*/
public function getRma(): OrderReturn
{
return $this->rma;
}
/**
* @param OrderReturn $rma
*
* @return OrderReturnLine
*/
public function setRma(OrderReturn $rma): OrderReturnLine
{
$this->rma = $rma;
return $this;
}
/**
* @return int
*/
public function getProductQuantity(): int
{
return $this->productQuantity;
}
/**
* @param int $productQuantity
*
* @return OrderReturnLine
*/
public function setProductQuantity(int $productQuantity): OrderReturnLine
{
$this->productQuantity = $productQuantity;
return $this;
}
/**
* @return float
*/
public function getPrice(): float
{
return $this->price;
}
/**
* @param float $price
*
* @return OrderReturnLine
*/
public function setPrice(float $price): OrderReturnLine
{
$this->price = $price;
return $this;
}
/**
* @return int
*/
public function getTaxRate(): int
{
return $this->taxRate;
}
/**
* @param int $taxRate
*
* @return OrderReturnLine
*/
public function setTaxRate(int $taxRate): OrderReturnLine
{
$this->taxRate = $taxRate;
return $this;
}
/**
* @return OrderDetail
*/
public function getOrderDetail(): OrderDetail
{
return $this->orderDetail;
}
/**
* @return string
*/
public function getReturnReason(): ?string
{
return $this->returnReason;
}
/**
* @param string $returnReason
*/
public function setReturnReason(string $returnReason): void
{
$this->returnReason = $returnReason;
}
/**
* @return OrderReturnLineStatus
*/
public function getStatus(): OrderReturnLineStatus
{
return $this->status;
}
/**
* @param OrderReturnLineStatus $status
*/
public function setStatus(OrderReturnLineStatus $status): void
{
$this->status = $status;
}
/**
* @return OrderReturnLineComment[]|ArrayCollection
*/
public function getComments()
{
return $this->comments;
}
/**
* @return float
*/
public function getTotal(): float
{
return $this->total;
}
/**
* @return float
*/
public function getTotalPaid(): float
{
return $this->totalPaid;
}
/**
* @param float $total
*
* @return OrderReturnLine
*/
public function setTotal(float $total): OrderReturnLine
{
$this->total = $total;
return $this;
}
/**
* @param float $totalPaid
*
* @return OrderReturnLine
*/
public function setTotalPaid(float $totalPaid): OrderReturnLine
{
$this->totalPaid = $totalPaid;
return $this;
}
/**
* @return bool
*/
public function getProduct50(): bool
{
return $this->product50;
}
/**
* @return bool
*/
public function getProduct100(): bool
{
return $this->product100;
}
/**
* @return bool
*/
public function isRefused(): bool
{
return $this->refused;
}
/**
* @param bool $refused
*/
public function setRefused(bool $refused): void
{
$this->refused = $refused;
}
/**
* @return bool
*/
public function isConfirmed(): bool
{
return $this->confirmed;
}
/**
* @param bool $confirmed
*/
public function setConfirmed(bool $confirmed): void
{
$this->confirmed = $confirmed;
}
public function getNoteSat(): ?string
{
return $this->noteSat;
}
public function setNoteSat(?string $noteSat): OrderReturnLine
{
$this->noteSat = $noteSat;
return $this;
}
public function getTax(): float
{
return $this->tax;
}
public function setTax(float $tax): OrderReturnLine
{
$this->tax = $tax;
return $this;
}
public function getReceivedQuantity(): int
{
return $this->receivedQuantity;
}
public function setReceivedQuantity(int $receivedQuantity): OrderReturnLine
{
$this->receivedQuantity = $receivedQuantity;
return $this;
}
public function getAcceptedQuantity(): int
{
return $this->acceptedQuantity;
}
public function setAcceptedQuantity(int $acceptedQuantity): OrderReturnLine
{
$this->acceptedQuantity = $acceptedQuantity;
return $this;
}
public function setProductOk(bool $productOk): OrderReturnLine
{
$this->productOk = $productOk;
return $this;
}
public function setProduct50(bool $product50): OrderReturnLine
{
$this->product50 = $product50;
return $this;
}
public function setProduct100(bool $product100): OrderReturnLine
{
$this->product100 = $product100;
return $this;
}
public function isProductOk(): bool
{
return $this->productOk;
}
public function isProductReview(): bool
{
return $this->getProduct50() || $this->getProduct100() || $this->isProductOk();
}
public function getDamagedGoodsFee(): int
{
if ($this->getProduct50()) {
return 50;
}
if ($this->getProduct100()) {
return 100;
}
return 0;
}
public function getSatComments(): ?string
{
return $this->satComments;
}
public function setSatComments(?string $satComments): OrderReturnLine
{
$this->satComments = $satComments;
return $this;
}
/**
* @return string[]
*/
public function getCommentDetails(): array
{
return array_map(static function (OrderReturnLineComment $comment) {
return $comment->getComments();
}, $this->comments->toArray());
}
public function updateTax(): OrderReturnLine
{
$this->tax = ($this->totalPaid * $this->taxRate) / 100;
return $this;
}
public function getAdminComments(): ?string
{
return $this->adminComments;
}
public function setAdminComments(?string $adminComments): OrderReturnLine
{
$this->adminComments = $adminComments;
return $this;
}
}