<?php
namespace App\Entity\Movimientos;
use App\Repository\Movimientos\MovimientoStockRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use App\Entity\Almacen\Deposito;
use App\Entity\User;
use App\Entity\Mantenimiento\PedidoReparacionDiagramado;
use App\Entity\Mantenimiento\Preventivo\TareaPlanDiagramada;
/**
* @ORM\Entity(repositoryClass=MovimientoStockRepository::class)
* @ORM\Table(name="mov_movimiento_stock")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"ms"=MovimientoStock::class, "oc"=OrdenCompra::class, "tr"=Transferencia::class, "ph"=PrestamoHerramienta::class, "or"=OrdenReparacion::class, "as"=AjusteStock::class, "ore"=OrdenReparacionExterna::class})
* @ORM\HasLifecycleCallbacks()
*/
abstract class MovimientoStock
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="date")
* @Assert\NotNull(message="El campo es requerido")
*/
private $fecha;
/**
* @ORM\Column(type="integer")
*/
private $numero;
/**
* @ORM\Column(type="boolean")
*/
private $eliminado = false;
/**
* @ORM\Column(type="boolean", options={"default"=false})
*/
private $pendiente = true;
/**
* @ORM\Column(name="fecha_ingreso", type="datetime")
*/
private $fechaIngreso;
/**
* @ORM\ManyToOne(targetEntity=Deposito::class)
* @ORM\JoinColumn(name="id_deposito", referencedColumnName="id", nullable=true)
*/
private $deposito;
/**
* @ORM\OneToMany(targetEntity=ItemMovimiento::class, mappedBy="movimiento", cascade={"persist"})
*/
private $items;
/**
* @ORM\ManyToOne(targetEntity=User::class)
* @ORM\JoinColumn(name="id_user_alta", referencedColumnName="id", nullable=true)
*/
private $userAlta;
/**
* @ORM\Column(name="ya_procesada", type="boolean")
*/
private $yaProcesada = false;
/**
* @ORM\Column(name="observaciones", type="text", nullable=true)
*/
private $observaciones;
/**
* @ORM\Column(name="finalizo_circuito", type="boolean", options={"default"=false})
*/
private $finalizoCircuito = false; //Representa el caso en que se lleven mas repuestos para realizar una reparacion y se devuelvan algunos
/**
* @ORM\ManyToOne(targetEntity=Deposito::class)
* @ORM\JoinColumn(name="id_destino", referencedColumnName="id", nullable=true)
*/
private $destino;
/**
* @ORM\ManyToOne(targetEntity=PedidoReparacionDiagramado::class)
* @ORM\JoinColumn(name="id_tarea_diag", referencedColumnName="id", nullable=true)
*/
private $tareaDiagramada;
/**
* @ORM\ManyToOne(targetEntity=TareaPlanDiagramada::class)
* @ORM\JoinColumn(name="id_tare_preventivo", referencedColumnName="id", nullable=true)
*/
private $tareaPreventivo;
public static abstract function isToolArticle();
public abstract function getInstance();
public abstract function getDescripcion();
public function getAsociaPedidoReparacion()
{
return false;
}
public function getResponsable()
{
return "";
}
public function getArticulo($articulo)
{
$data = array();
foreach ($this->items as $it)
{
if($it->getArticulo() == $articulo)
{
$data[] = $it->getCantidad();
}
}
return $data;
}
public function getFinalizable()
{
return false;
}
public function getIsDevuelta()
{
return true;
}
public function setIsDevuelta($flag, $fecha)
{
}
public function isModificable()
{
return !$this->yaProcesada;
}
public function getDetalle()
{
return "";
}
public function __construct()
{
$this->items = new ArrayCollection();
}
/**
* @ORM\PrePersist
*/
public function setCreatedAtValue()
{
$this->fechaIngreso = new \DateTimeImmutable();
}
public function getId(): ?int
{
return $this->id;
}
public function getFecha(): ?\DateTimeInterface
{
return $this->fecha;
}
public function setFecha(?\DateTimeInterface $fecha): self
{
$this->fecha = $fecha;
return $this;
}
public function isEliminado(): ?bool
{
return $this->eliminado;
}
public function setEliminado(bool $eliminado): self
{
$this->eliminado = $eliminado;
return $this;
}
public function getFechaIngreso(): ?\DateTimeInterface
{
return $this->fechaIngreso;
}
public function setFechaIngreso(\DateTimeInterface $fechaIngreso): self
{
$this->fechaIngreso = $fechaIngreso;
return $this;
}
public function getDeposito(): ?Deposito
{
return $this->deposito;
}
public function setDeposito(?Deposito $deposito): self
{
$this->deposito = $deposito;
return $this;
}
/**
* @return Collection<int, ItemMovimiento>
*/
public function getItems(): Collection
{
return $this->items;
}
public function addItem(ItemMovimiento $item): self
{
if (!$this->items->contains($item)) {
$this->items[] = $item;
$item->setMovimiento($this);
}
return $this;
}
public function removeItem(ItemMovimiento $item): self
{
if ($this->items->removeElement($item)) {
// set the owning side to null (unless already changed)
if ($item->getMovimiento() === $this) {
$item->setMovimiento(null);
}
}
return $this;
}
public function getUserAlta(): ?User
{
return $this->userAlta;
}
public function setUserAlta(?User $userAlta): self
{
$this->userAlta = $userAlta;
return $this;
}
public function isYaProcesada(): ?bool
{
return $this->yaProcesada;
}
public function setYaProcesada(bool $yaProcesada): self
{
$this->yaProcesada = $yaProcesada;
return $this;
}
public function getObservaciones(): ?string
{
return $this->observaciones;
}
public function setObservaciones(?string $observaciones): self
{
$this->observaciones = $observaciones;
return $this;
}
public function isPendiente(): ?bool
{
return $this->pendiente;
}
public function setPendiente(bool $pendiente): self
{
$this->pendiente = $pendiente;
return $this;
}
public function isFinalizoCircuito(): ?bool
{
return $this->finalizoCircuito;
}
public function setFinalizoCircuito(bool $finalizoCircuito): self
{
$this->finalizoCircuito = $finalizoCircuito;
return $this;
}
public function getNumero(): ?int
{
return $this->numero;
}
public function setNumero(int $numero): self
{
$this->numero = $numero;
return $this;
}
public function getDestino(): ?Deposito
{
return $this->destino;
}
public function setDestino(?Deposito $destino): self
{
$this->destino = $destino;
return $this;
}
public function getTareaDiagramada(): ?PedidoReparacionDiagramado
{
return $this->tareaDiagramada;
}
public function setTareaDiagramada(?PedidoReparacionDiagramado $tareaDiagramada): self
{
$this->tareaDiagramada = $tareaDiagramada;
return $this;
}
public function getTareaPreventivo(): ?TareaPlanDiagramada
{
return $this->tareaPreventivo;
}
public function setTareaPreventivo(?TareaPlanDiagramada $tareaPreventivo): self
{
$this->tareaPreventivo = $tareaPreventivo;
return $this;
}
}