<?php
namespace App\Entity\Comun;
use App\Entity\Accion\ProyectoReunion;
use App\Entity\Admin\Area;
use App\Entity\Admin\Cliente;
use App\Entity\Admin\Empleada;
use App\Entity\Admin\Servicio;
use App\Repository\Comun\ProyectoRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use App\Entity\Accesos\Tercero;
use App\Entity\Comun\Justificacion;
use App\Entity\Comun\Gasto;
#[ORM\Entity(repositoryClass: ProyectoRepository::class)]
class Proyecto
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private $id;
#[ORM\Column(type: 'string', length: 255)]
private $nombre;
#[ORM\Column(type: 'date')]
private $fechaInicio;
#[ORM\ManyToOne(targetEntity: Cliente::class, inversedBy: 'proyectos')]
#[ORM\JoinColumn(nullable: false)]
private $cliente;
#[ORM\Column(type: 'float')]
private $financiacion;
#[ORM\ManyToOne(targetEntity: Area::class, inversedBy: 'proyectos')]
#[ORM\JoinColumn(nullable: false)]
private $area;
#[ORM\ManyToOne(targetEntity: Servicio::class, inversedBy: 'proyectos')]
#[ORM\JoinColumn(nullable: false)]
private $servicio;
#[ORM\ManyToOne(targetEntity: Empleada::class, inversedBy: 'proyectos')]
#[ORM\JoinColumn(nullable: false)]
private $responsable;
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'proyectos')]
private $padre;
#[ORM\OneToMany(mappedBy: 'padre', targetEntity: self::class)]
private $proyectos;
#[ORM\OneToMany(mappedBy: 'proyecto', targetEntity: Tarea::class)]
private $tareas;
#[ORM\OneToMany(mappedBy: 'proyecto', targetEntity: Tercero::class)]
private $terceros;
#[ORM\Column(type: 'boolean')]
private $multiple;
#[ORM\OneToMany(mappedBy: 'proyecto', targetEntity: Justificacion::class)]
private $justificacions;
#[ORM\OneToMany(mappedBy: 'proyecto', targetEntity: Convenio::class)]
private $convenios;
#[ORM\OneToMany(mappedBy: 'proyecto', targetEntity: Gasto::class)]
private $gastos;
#[ORM\OneToMany(mappedBy: 'proyecto', targetEntity: Fichaje::class)]
private $fichajes;
#[ORM\OneToMany(mappedBy: 'proyecto', targetEntity: ProyectoReunion::class)]
private $observaciones;
#[ORM\Column(type: 'integer')]
private $estado;
public function __construct()
{
$this->proyectos = new ArrayCollection();
$this->tareas = new ArrayCollection();
$this->justificacions = new ArrayCollection();
$this->convenios = new ArrayCollection();
$this->gastos = new ArrayCollection();
$this->fichajes = new ArrayCollection();
$this->observaciones = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getNombre(): ?string
{
return $this->nombre;
}
public function setNombre(string $nombre): self
{
$this->nombre = $nombre;
return $this;
}
public function getFechaInicio(): ?\DateTimeInterface
{
return $this->fechaInicio;
}
public function setFechaInicio(\DateTimeInterface $fechaInicio): self
{
$this->fechaInicio = $fechaInicio;
return $this;
}
public function getCliente(): ?Cliente
{
return $this->cliente;
}
public function setCliente(?Cliente $cliente): self
{
$this->cliente = $cliente;
return $this;
}
public function getFinanciacion(): ?float
{
return $this->financiacion;
}
public function setFinanciacion(float $financiacion): self
{
$this->financiacion = $financiacion;
return $this;
}
public function getArea(): ?Area
{
return $this->area;
}
public function setArea(?Area $area): self
{
$this->area = $area;
return $this;
}
public function getServicio(): ?Servicio
{
return $this->servicio;
}
public function setServicio(?Servicio $servicio): self
{
$this->servicio = $servicio;
return $this;
}
public function getResponsable(): ?Empleada
{
return $this->responsable;
}
public function setResponsable(?Empleada $responsable): self
{
$this->responsable = $responsable;
return $this;
}
public function getPadre(): ?self
{
return $this->padre;
}
public function setPadre(?self $padre): self
{
$this->padre = $padre;
return $this;
}
/**
* @return Collection<int, self>
*/
public function getProyectos(): Collection
{
return $this->proyectos;
}
public function addProyecto(self $proyecto): self
{
if (!$this->proyectos->contains($proyecto)) {
$this->proyectos[] = $proyecto;
$proyecto->setPadre($this);
}
return $this;
}
public function removeProyecto(self $proyecto): self
{
if ($this->proyectos->removeElement($proyecto)) {
// set the owning side to null (unless already changed)
if ($proyecto->getPadre() === $this) {
$proyecto->setPadre(null);
}
}
return $this;
}
/**
* @return Collection<int, Tarea>
*/
public function getTareas(): Collection
{
return $this->tareas;
}
public function addTarea(Tarea $tarea): self
{
if (!$this->tareas->contains($tarea)) {
$this->tareas[] = $tarea;
$tarea->setProyecto($this);
}
return $this;
}
public function removeTarea(Tarea $tarea): self
{
if ($this->tareas->removeElement($tarea)) {
// set the owning side to null (unless already changed)
if ($tarea->getProyecto() === $this) {
$tarea->setProyecto(null);
}
}
return $this;
}
public function getMultiple(): ?bool
{
return $this->multiple;
}
public function setMultiple(bool $multiple): self
{
$this->multiple = $multiple;
return $this;
}
/**
* @return Collection<int, Justificacion>
*/
public function getJustificacions(): Collection
{
return $this->justificacions;
}
public function addJustificacion(Justificacion $justificacion): self
{
if (!$this->justificacions->contains($justificacion)) {
$this->justificacions[] = $justificacion;
$justificacion->setProyecto($this);
}
return $this;
}
public function removeJustificacion(Justificacion $justificacion): self
{
if ($this->justificacions->removeElement($justificacion)) {
// set the owning side to null (unless already changed)
if ($justificacion->getProyecto() === $this) {
$justificacion->setProyecto(null);
}
}
return $this;
}
/**
* @return Collection<int, Convenio>
*/
public function getConvenios(): Collection
{
return $this->convenios;
}
public function addConvenio(Convenio $convenio): self
{
if (!$this->convenios->contains($convenio)) {
$this->convenios[] = $convenio;
$convenio->setProyecto($this);
}
return $this;
}
public function removeConvenio(Convenio $convenio): self
{
if ($this->convenios->removeElement($convenio)) {
// set the owning side to null (unless already changed)
if ($convenio->getProyecto() === $this) {
$convenio->setProyecto(null);
}
}
return $this;
}
/**
* @return Collection<int, Gasto>
*/
public function getGastos(): Collection
{
return $this->gastos;
}
public function addGasto(Gasto $gasto): self
{
if (!$this->gastos->contains($gasto)) {
$this->gastos[] = $gasto;
$gasto->setProyecto($this);
}
return $this;
}
public function removeGasto(Gasto $gasto): self
{
if ($this->gastos->removeElement($gasto)) {
// set the owning side to null (unless already changed)
if ($gasto->getProyecto() === $this) {
$gasto->setProyecto(null);
}
}
return $this;
}
/**
* @return Collection<int, Fichaje>
*/
public function getFichajes(): Collection
{
return $this->fichajes;
}
public function addFichaje(Fichaje $fichaje): self
{
if (!$this->fichajes->contains($fichaje)) {
$this->fichajes[] = $fichaje;
$fichaje->setProyecto($this);
}
return $this;
}
public function removeFichaje(Fichaje $fichaje): self
{
if ($this->fichajes->removeElement($fichaje)) {
// set the owning side to null (unless already changed)
if ($fichaje->getProyecto() === $this) {
$fichaje->setProyecto(null);
}
}
return $this;
}
public function __toString() {
return $this->nombre;
}
public function getTerceros() {
return $this->terceros;
}
public function setTerceros($terceros): void {
$this->terceros = $terceros;
}
public function addTercero(Tercero $tercero): self
{
if (!$this->terceros->contains($tercero)) {
$this->terceros[] = $tercero;
$tercero->setProyecto($this);
}
return $this;
}
public function removeTercero(Tercero $tercero): self
{
if ($this->terceros->removeElement($tercero)) {
// set the owning side to null (unless already changed)
if ($tercero->getProyecto() === $this) {
$tercero->setProyecto(null);
}
}
return $this;
}
/**
* @return Collection<int, ProyectoReunion>
*/
public function getObservaciones(): Collection
{
return $this->observaciones;
}
public function addObservacione(ProyectoReunion $observacione): self
{
if (!$this->observaciones->contains($observacione)) {
$this->observaciones[] = $observacione;
$observacione->setProyecto($this);
}
return $this;
}
public function removeObservacione(ProyectoReunion $observacione): self
{
if ($this->observaciones->removeElement($observacione)) {
// set the owning side to null (unless already changed)
if ($observacione->getProyecto() === $this) {
$observacione->setProyecto(null);
}
}
return $this;
}
public function getEstado(): ?int
{
return $this->estado;
}
public function setEstado(int $estado): self
{
$this->estado = $estado;
return $this;
}
public function estadoToString(){
if($this->estado==0){
return "proyecto.sinIniciar";
}
if($this->estado==1){
return "proyecto.iniciado";
}
if($this->estado==2){
return "proyecto.finalizado";
}
}
public function getGastado(){
$gastos= $this->gastos;
$convenios= $this->convenios;
$gastado=0;
foreach($gastos as $gasto){
$gastado+=$gasto->getCantidad();
}
foreach ($convenios as $convenio){
$gastado+=$convenio->getCantidad();
}
return $gastado;
}
public function getRestante(){
return $this->financiacion-$this->getGastado();
}
}