src/Entity/Sesion.php line 63

  1. <?php
  2. namespace App\Entity;
  3. use Symfony\Component\Serializer\Annotation\Groups;
  4. use Ramsey\Uuid\Uuid;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use Doctrine\DBAL\Types\Types;
  7. use Doctrine\Common\Collections\Collection;
  8. use Doctrine\Common\Collections\ArrayCollection;
  9. use App\Trait\UuidTrait;
  10. use App\Trait\TimestampableTrait;
  11. use App\Trait\BlameableTrait;
  12. use App\State\SesionStateProcessor;
  13. use App\State\SesionStateDeleteProcessor;
  14. use App\Repository\SesionRepository;
  15. use App\Entity\User;
  16. use App\Entity\Muestra;
  17. use App\Controller\InformesController;
  18. use App\Controller\CalculosSesionController;
  19. use ApiPlatform\Metadata\Put;
  20. use ApiPlatform\Metadata\Post;
  21. use ApiPlatform\Metadata\Patch;
  22. use ApiPlatform\Metadata\GetCollection;
  23. use ApiPlatform\Metadata\Get;
  24. use ApiPlatform\Metadata\Delete;
  25. use ApiPlatform\Metadata\ApiResource;
  26. use ApiPlatform\Metadata\ApiFilter;
  27. use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
  28. use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
  29. ini_set('memory_limit''-1');
  30. #[ORM\Entity(repositoryClassSesionRepository::class)]
  31. #[ApiResource(
  32.     operations: [
  33.         new GetCollection(uriTemplate'sesiones'normalizationContext: ['groups' => ['sesionCollection:read']]),
  34.         new Post(uriTemplate'sesiones'validationContext: ['groups' => ['Default''sesion:create']], denormalizationContext: ['groups' => ['sesion:create']], processorSesionStateProcessor::class),
  35.         new Get(uriTemplate'sesiones/{uuid}'),
  36.         new Get(uriTemplate'sesiones/{uuid}/calculo'controllerCalculosSesionController::class, security"is_granted('ROLE_ADMIN')"),
  37.         new Put(uriTemplate'sesiones/{uuid}'denormalizationContext: ['groups' => ['sesion:update']], processorSesionStateProcessor::class),
  38.         new Patch(uriTemplate'sesiones/{uuid}'denormalizationContext: ['groups' => ['sesion:update']], processorSesionStateProcessor::class),
  39.         new Delete(uriTemplate'sesiones/{uuid}'processorSesionStateDeleteProcessor::class),
  40.     ],
  41.     normalizationContext: ['groups' => ['sesion:read''uuid']],
  42. )]
  43. #[ApiFilter(
  44.     SearchFilter::class,
  45.     properties: [
  46.         'nombre' => 'exact',
  47.         'codigo' => 'exact',
  48.         'estado' => 'exact',
  49.     ]
  50. )]
  51. #[ApiFilter(
  52.     OrderFilter::class,
  53.     properties: [
  54.         'nombre',
  55.         'estado',
  56.         'fecha',
  57.     ]
  58. )]
  59. class Sesion
  60. {
  61.     public const ESTADO_INICIADA 'iniciada';
  62.     public const ESTADO_VALIDADA 'validada';
  63.     public const ESTADO_CALCULADA 'calculada';
  64.     public const ESTADO_FINALIZADA 'finalizada';
  65.     public const ESTADO_CANCELADA 'cancelada';
  66.     public const ESTADO_PENDIENTE 'pendiente';
  67.     public const MODULO 'sesiones';
  68.     use TimestampableTrait;
  69.     use BlameableTrait;
  70.     use UuidTrait;
  71.     #[Groups(['sesion:read''sesion:create''sesion:update''sesionCollection:read'])]
  72.     #[ORM\Column(length255nullabletrue)]
  73.     private ?string $nombre null;
  74.     #[Groups(['sesion:read''sesion:create''sesion:update'])]
  75.     #[ORM\Column(length255nullabletrue)]
  76.     private ?string $descripcion null;
  77.     #[Groups(['sesion:read''sesion:create''sesion:update''sesionCollection:read'])]
  78.     #[ORM\Column(length255nullabletrue)]
  79.     private ?string $codigo null;
  80.     #[Groups(['sesion:read''sesion:create''sesion:update'])]
  81.     #[ORM\Column(length255nullabletrue)]
  82.     private ?string $temperatura null;
  83.     #[Groups(['sesion:read''sesion:create''sesion:update''sesionCollection:read'])]
  84.     #[ORM\Column(typeTypes::DATETIME_MUTABLEnullabletrue)]
  85.     private ?\DateTimeInterface $fecha null;
  86.     #[Groups(['sesion:read''sesion:create''sesion:update'])]
  87.     #[ORM\ManyToMany(targetEntityUser::class)]
  88.     private Collection $evaluadores;
  89.     #[Groups(['sesion:read'])]
  90.     #[ORM\ManyToOne]
  91.     #[ORM\JoinColumn(nullablefalse)]
  92.     private ?Empresa $empresa null;
  93.     #[Groups(['sesion:read''sesion:create''sesion:update''sesionCollection:read'])]
  94.     #[ORM\Column(length255nullabletrue)]
  95.     private ?string $estado null;
  96.     #[Groups(['sesion:create''sesion:update'])]
  97.     #[ORM\OneToMany(mappedBy'sesion'targetEntitySesionesValores::class, orphanRemovaltruecascade: ['persist''remove'])]
  98.     private Collection $sesionesValores;
  99.     #[Groups(['sesion:read''sesionCollection:read'])]
  100.     #[ORM\Column(nullabletrue)]
  101.     private ?array $control = [];
  102.     #[Groups(['sesion:update'])]
  103.     private ?array $evaluacion = [];
  104.     #[Groups(['sesion:read''sesion:create''sesion:update'])]
  105.     #[ORM\Column(nullabletrue)]
  106.     private ?array $organizacion = [];
  107.     #[Groups(['sesion:read''sesion:create''sesion:update'])]
  108.     #[ORM\Column(nullabletrue)]
  109.     private array $parametrosMuestra = [];
  110.     #[Groups(['sesion:read''sesion:create''sesion:update'])]
  111.     #[ORM\OneToMany(mappedBy'sesion'targetEntityMuestra::class, cascade: ['persist'])]
  112.     private Collection $muestras;
  113.     #[ORM\Column(typeTypes::TIME_MUTABLEnullabletrue)]
  114.     #[Groups(['sesion:read''sesion:create''sesion:update''sesionCollection:read'])]
  115.     private ?\DateTimeInterface $horaFin null;
  116.     public function __construct()
  117.     {
  118.         $this->evaluadores = new ArrayCollection();
  119.         $this->sesionesValores = new ArrayCollection();
  120.         $this->uuid Uuid::uuid4()->toString();
  121.         $this->muestras = new ArrayCollection();
  122.     }
  123.     public function getId(): ?string
  124.     {
  125.         return $this->id;
  126.     }
  127.     public function getNombre(): ?string
  128.     {
  129.         return $this->nombre;
  130.     }
  131.     public function setNombre(?string $nombre): self
  132.     {
  133.         $this->nombre $nombre;
  134.         return $this;
  135.     }
  136.     public function getDescripcion(): ?string
  137.     {
  138.         return $this->descripcion;
  139.     }
  140.     public function setDescripcion(?string $descripcion): self
  141.     {
  142.         $this->descripcion $descripcion;
  143.         return $this;
  144.     }
  145.     public function getCodigo(): ?string
  146.     {
  147.         return $this->codigo;
  148.     }
  149.     public function setCodigo(?string $codigo): self
  150.     {
  151.         $this->codigo $codigo;
  152.         return $this;
  153.     }
  154.     public function getTemperatura(): ?string
  155.     {
  156.         return $this->temperatura;
  157.     }
  158.     public function setTemperatura(?string $temperatura): self
  159.     {
  160.         $this->temperatura $temperatura;
  161.         return $this;
  162.     }
  163.     public function getFecha(): ?\DateTimeInterface
  164.     {
  165.         return $this->fecha;
  166.     }
  167.     public function setFecha(?\DateTimeInterface $fecha): self
  168.     {
  169.         $this->fecha $fecha;
  170.         return $this;
  171.     }
  172.     /**
  173.      * @return Collection<int, User>
  174.      */
  175.     public function getEvaluadores(): Collection
  176.     {
  177.         return $this->evaluadores;
  178.     }
  179.     public function addEvaluadore(User $evaluadore): self
  180.     {
  181.         if (!$this->evaluadores->contains($evaluadore)) {
  182.             $this->evaluadores->add($evaluadore);
  183.         }
  184.         return $this;
  185.     }
  186.     public function removeEvaluadore(User $evaluadore): self
  187.     {
  188.         $this->evaluadores->removeElement($evaluadore);
  189.         return $this;
  190.     }
  191.     public function getEmpresa(): ?Empresa
  192.     {
  193.         return $this->empresa;
  194.     }
  195.     public function setEmpresa(?Empresa $empresa): self
  196.     {
  197.         $this->empresa $empresa;
  198.         return $this;
  199.     }
  200.     public function getEstado(): ?string
  201.     {
  202.         return $this->estado;
  203.     }
  204.     public function setEstado(?string $estado): self
  205.     {
  206.         $this->estado $estado;
  207.         return $this;
  208.     }
  209.     /**
  210.      * @return Collection<int, SesionesValores>
  211.      */
  212.     public function getSesionesValores(): Collection
  213.     {
  214.         return $this->sesionesValores;
  215.     }
  216.     public function addSesionesValores(SesionesValores $sesionesValore): self
  217.     {
  218.         if (!$this->sesionesValores->contains($sesionesValore)) {
  219.             $this->sesionesValores->add($sesionesValore);
  220.             $sesionesValore->setSesion($this);
  221.         }
  222.         return $this;
  223.     }
  224.     public function removeSesionesValores(SesionesValores $sesionesValore): self
  225.     {
  226.         if ($this->sesionesValores->removeElement($sesionesValore)) {
  227.             // set the owning side to null (unless already changed)
  228.             if ($sesionesValore->getSesion() === $this) {
  229.                 $sesionesValore->setSesion(null);
  230.             }
  231.         }
  232.         return $this;
  233.     }
  234.     public function getControl(): ?array
  235.     {
  236.         return $this->control;
  237.     }
  238.     public function setControl(?array $control): self
  239.     {
  240.         $this->control $control;
  241.         return $this;
  242.     }
  243.     public function getEvaluacion(): ?array
  244.     {
  245.         return $this->evaluacion;
  246.     }
  247.     public function setEvaluacion(?array $evaluacion): self
  248.     {
  249.         $this->evaluacion $evaluacion;
  250.         return $this;
  251.     }
  252.     public function getOrganizacion(): ?array
  253.     {
  254.         return $this->organizacion;
  255.     }
  256.     public function setOrganizacion(?array $organizacion): self
  257.     {
  258.         $this->organizacion $organizacion;
  259.         return $this;
  260.     }
  261.     public function getParametrosMuestra(): array
  262.     {
  263.         return $this->parametrosMuestra;
  264.     }
  265.     public function setParametrosMuestra(?array $parametrosMuestra): self
  266.     {
  267.         $this->parametrosMuestra $parametrosMuestra;
  268.         return $this;
  269.     }
  270.     /**
  271.      * @return Collection<int, Muestra>
  272.      */
  273.     public function getMuestras(): Collection
  274.     {
  275.         return $this->muestras;
  276.     }
  277.     public function addMuestra(Muestra $muestra): static
  278.     {
  279.         if (!$this->muestras->contains($muestra)) {
  280.             $this->muestras->add($muestra);
  281.             $muestra->setSesion($this);
  282.         }
  283.         return $this;
  284.     }
  285.     public function removeMuestra(Muestra $muestra): static
  286.     {
  287.         if ($this->muestras->removeElement($muestra)) {
  288.             // set the owning side to null (unless already changed)
  289.             if ($muestra->getSesion() === $this) {
  290.                 $muestra->setSesion(null);
  291.             }
  292.         }
  293.         return $this;
  294.     }
  295.     public function getHoraFin(): ?\DateTimeInterface
  296.     {
  297.         return $this->horaFin;
  298.     }
  299.     public function setHoraFin(?\DateTimeInterface $horaFin): static
  300.     {
  301.         $this->horaFin $horaFin;
  302.         return $this;
  303.     }
  304. }