<?php
namespace App\AtechNet\CoreBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\JoinColumn;
use Doctrine\ORM\Mapping\ManyToOne;
use Doctrine\ORM\Mapping\OneToMany;
use Doctrine\ORM\Mapping\OrderBy;
use Doctrine\ORM\Mapping\Table as Table;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Stock positions
*
* @Entity(repositoryClass="App\AtechNet\CoreBundle\Repository\StockPositionRepository")
* @Table(name="stock_positions")
*/
class StockPosition extends AbstractSignedEntity
{
public const string STOCK_POSITION_LIST_CACHE_KEY = 'stock_position_list.v8';
public const string STOCK_POSITION_LIST_STOCK_REQUEST_CACHE_KEY = 'stock_position_list_stock_request.v1';
public const int POSITION_ID_RAKTAR = 2117;
public const int POSITION_ID_CSOMAGOLAS = 2478;
public const int POSITION_ID_CSOMAGOLAS_VARO = 10921;
public const int POSITION_ID_TELEPITES_VARO = 2721;
public const int POSITION_ID_FOLIAZAS = 2720;
public const int POSITION_ID_FOLIAZAS_VARO = 2719;
public const int POSITION_ID_SERVIS_VARO = 2821;
public const int POSITION_ID_TISZTITAS = 2256;
public const int POSITION_ID_TISZTITAS_VARO = 2724;
public const int POSITION_ID_FUTAR_VARO = 10925;
public const int POSITION_ID_ALK_VARO = 10893;
public const int POSITION_ID_ORDER_STATUS_SWITCH = self::POSITION_ID_CSOMAGOLAS;
/**
* @var Stock
*
* @Assert\NotNull
*
* @ManyToOne(targetEntity="Stock", inversedBy="stockPositions")
* @JoinColumn(name="stock_id", referencedColumnName="id")
*/
private $stock;
/**
* @var StockPositionGroup
*
* @ManyToOne(targetEntity="StockPositionGroup", inversedBy="stockPositions")
* @JoinColumn(name="stock_position_group_id", referencedColumnName="id", nullable=true)
*/
private $stockPositionGroup;
/**
* @var string
*
* @Column(name="name", type="string", length=24)
*/
private $name;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="StockItemPosition", mappedBy="stockPosition", orphanRemoval=true)
* @OrderBy({"created" = "ASC"})
**/
private $items;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="UserStockPosition", mappedBy="stockPosition", orphanRemoval=true)
* @OrderBy({"created" = "ASC"})
**/
private $users;
/**
* @var bool
*
* @Column(name="archived", type="boolean")
*/
private $archived = 0;
/**
* @var bool
*
* @Column(name="single", type="boolean", options={"default": false})
*/
private bool $single = false;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="StockReviewStockPosition", mappedBy="stockPosition", orphanRemoval=true)
*/
private $stockReviews;
public function __construct()
{
parent::__construct();
$this->items = new ArrayCollection();
$this->users = new ArrayCollection();
$this->stockReviews = new ArrayCollection();
}
/**
* @return Stock|null
*/
public function getStock(): ?Stock
{
return $this->stock;
}
/**
* @param Stock $stock
*
* @return void
*/
public function setStock(Stock $stock): void
{
$this->stock = $stock;
}
/**
* @return StockPositionGroup|null
*/
public function getStockPositionGroup(): ?StockPositionGroup
{
return $this->stockPositionGroup;
}
/**
* @param StockPositionGroup $stockPositionGroup
*
* @return void
*/
public function setStockPositionGroup(StockPositionGroup $stockPositionGroup): void
{
$this->stockPositionGroup = $stockPositionGroup;
}
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @param string $name
*
* @return void
*/
public function setName(string $name): void
{
$this->name = $name;
}
/**
* @return Collection
*/
public function getStockItems(): Collection
{
return $this->items;
}
/**
* @return bool
*/
public function hasStockItems(): bool
{
$stockItems = $this->getStockItems();
/** @var StockItemPosition $stockItemPosition */
foreach ($stockItems as $stockItemPosition) {
if ($stockItemPosition->getStockItem()->getLastKnownStockPosition()->getId() === $this->getId()) {
return true;
}
}
return false;
}
/**
* @return Collection
*/
public function getUsers(): Collection
{
return $this->users;
}
/**
* @return bool
*/
public function hasUsers(): bool
{
if ($this->getUsers()->count() > 0) {
return true;
}
return false;
}
/**
* @return Collection
*/
public function getStockReviews(): Collection
{
return $this->stockReviews;
}
/**
* @return bool
*/
public function hasStockReviews(): bool
{
if ($this->getStockReviews()->count() > 0) {
return true;
}
return false;
}
/**
* @return bool
*/
public function isArchived(): bool
{
return $this->archived;
}
/**
* @param bool $archived
*
* @return void
*/
public function setArchived(bool $archived): void
{
$this->archived = $archived;
}
/**
* @return bool
*/
public function isSingle(): bool
{
return $this->single;
}
/**
* @param bool $single
*
* @return void
*/
public function setSingle(bool $single): void
{
$this->single = $single;
}
/**
* @return bool
*/
public function isTriage(): bool
{
if (
str_starts_with($this->name, 'T010-') ||
str_starts_with($this->name, 'T011-') ||
str_starts_with($this->name, 'T012-') ||
str_starts_with($this->name, 'T013-') ||
str_starts_with($this->name, 'T020-') ||
str_starts_with($this->name, 'T021-') ||
str_starts_with($this->name, 'T022-') ||
str_starts_with($this->name, 'T023-')
) {
$stockPositionName = explode('-', $this->name);
$suffix = array_pop($stockPositionName);
if (( (int)$suffix % 2 ) == 0 ) {
return true;
}
}
return false;
}
}