src/Entity/Producto.php line 65

  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\Common\Collections\Collection;
  7. use Doctrine\Common\Collections\ArrayCollection;
  8. use App\Trait\UuidTrait;
  9. use App\Trait\TimestampableTrait;
  10. use App\Trait\BlameableTrait;
  11. use App\State\ProductoStateProcessor;
  12. use App\Repository\ProductoRepository;
  13. use App\Controller\ProductoCloneController;
  14. use ApiPlatform\Metadata\Put;
  15. use ApiPlatform\Metadata\Post;
  16. use ApiPlatform\Metadata\Patch;
  17. use ApiPlatform\Metadata\GetCollection;
  18. use ApiPlatform\Metadata\Get;
  19. use ApiPlatform\Metadata\Delete;
  20. use ApiPlatform\Metadata\ApiResource;
  21. use ApiPlatform\Metadata\ApiFilter;
  22. use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
  23. use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
  24. #[ORM\Entity(repositoryClassProductoRepository::class)]
  25. #[ApiResource(
  26.     operations: [
  27.         new GetCollection(),
  28.         new Post(validationContext: ['groups' => ['Default''producto:create']], denormalizationContext: ['groups' => ['producto:create']], processorProductoStateProcessor::class),
  29.         new Post(
  30.             uriTemplate'productos/clone',
  31.             validationContext: ['groups' => ['Default''producto:clone']],
  32.             denormalizationContext: ['groups' => ['producto:clone']],
  33.             controllerProductoCloneController::class,
  34.             readfalse,
  35.         ),
  36.         new Get(),
  37.         new Put(denormalizationContext: ['groups' => ['producto:update''uuid']], processorProductoStateProcessor::class),
  38.         new Patch(denormalizationContext: ['groups' => ['producto:update''uuid']], processorProductoStateProcessor::class),
  39.         new Delete(),
  40.     ],
  41.     normalizationContext: ['groups' => ['producto:read''uuid']],
  42. )]
  43. #[ApiFilter(
  44.     SearchFilter::class,
  45.     properties: [
  46.         'nombre' => 'exact',
  47.         'codigo' => 'exact',
  48.         'activo' => 'exact',
  49.         'modelo' => 'exact',
  50.     ]
  51. )]
  52. #[ApiFilter(
  53.     OrderFilter::class,
  54.     properties: [
  55.         'nombre',
  56.         'codigo',
  57.         'activo',
  58.         'modelo',
  59.     ]
  60. )]
  61. class Producto
  62. {
  63.     use TimestampableTrait;
  64.     use BlameableTrait;
  65.     use UuidTrait;
  66.     #[Groups(['producto:read''producto:create''producto:update''muestra:read'])]
  67.     #[ORM\Column(nullabletrue)]
  68.     private ?bool $isActivo null;
  69.     #[Groups(['producto:read''producto:create''producto:update''muestra:read'])]
  70.     #[ORM\Column(length255nullabletrue)]
  71.     private ?string $codigo null;
  72.     #[Groups(['producto:read''producto:create''producto:update''muestra:read''productoParametros:read'])]
  73.     #[ORM\Column(length255nullabletrue)]
  74.     private ?string $nombre null;
  75.     #[Groups(['producto:read''producto:create''producto:update''muestra:read'])]
  76.     #[ORM\Column(nullabletrue)]
  77.     private array $definicionMuestra = [];
  78.     #[Groups(['producto:read''producto:create''producto:update''muestra:read'])]
  79.     #[ORM\Column(nullabletrue)]
  80.     private array $fases = [];
  81.     #[Groups(['producto:read'])]
  82.     #[ORM\ManyToOne]
  83.     #[ORM\JoinColumn(nullablefalse)]
  84.     private ?Empresa $empresa null;
  85.     #[Groups(['producto:read''producto:create''producto:update''muestra:read'])]
  86.     #[ORM\Column(length255nullabletrue)]
  87.     private ?string $modelo null;
  88.     #[Groups(['producto:read''producto:create''producto:update''muestra:read''sesion:read'])]
  89.     #[ORM\OneToMany(mappedBy'producto'targetEntityProductoParametros::class, orphanRemovaltruecascade: ['all'])]
  90.     private Collection $parametros;
  91.     #[Groups(['producto:clone'])]
  92.     private ?int $number null;
  93.     #[Groups(['producto:clone'])]
  94.     private ?string $entityUuid null;
  95.     #[ORM\ManyToOne]
  96.     #[Groups(['producto:read''producto:create''producto:update''muestra:read''sesion:read'])]
  97.     private ?Categoria $categoria null;
  98.     public function __construct()
  99.     {
  100.         $this->parametros = new ArrayCollection();
  101.         $this->uuid Uuid::uuid4()->toString();
  102.     }
  103.     public function cloneProducto(int $iProducto $producto)
  104.     {
  105.         $clone = new Producto();
  106.         $clone->setEmpresa($producto->getEmpresa());
  107.         $clone->setCodigo($producto->getCodigo());
  108.         $clone->setNombre($producto->getNombre() . ' (copia #' $i ')');
  109.         $clone->setDefinicionMuestra($producto->getDefinicionMuestra());
  110.         $clone->setFases($producto->getFases());
  111.         $clone->setModelo($producto->getModelo());
  112.         $clone->setIsActivo($producto->isIsActivo());
  113.         $clone->setCategoria($producto->getCategoria());
  114.         foreach ($producto->getParametros() as $parametro) {
  115.             $clone->addParametro($parametro->cloneParametro($clone$parametro));
  116.         }
  117.         return $clone;
  118.     }
  119.     public function isIsActivo(): ?bool
  120.     {
  121.         return $this->isActivo;
  122.     }
  123.     public function setIsActivo(?bool $isActivo): self
  124.     {
  125.         $this->isActivo $isActivo;
  126.         return $this;
  127.     }
  128.     public function getCodigo(): ?string
  129.     {
  130.         return $this->codigo;
  131.     }
  132.     public function setCodigo(?string $codigo): self
  133.     {
  134.         $this->codigo $codigo;
  135.         return $this;
  136.     }
  137.     public function getNombre(): ?string
  138.     {
  139.         return $this->nombre;
  140.     }
  141.     public function setNombre(?string $nombre): self
  142.     {
  143.         $this->nombre $nombre;
  144.         return $this;
  145.     }
  146.     public function getDefinicionMuestra(): array
  147.     {
  148.         return $this->definicionMuestra;
  149.     }
  150.     public function setDefinicionMuestra(?array $definicionMuestra): self
  151.     {
  152.         $this->definicionMuestra $definicionMuestra;
  153.         return $this;
  154.     }
  155.     public function getFases(): array
  156.     {
  157.         return $this->fases;
  158.     }
  159.     public function setFases(?array $fases): self
  160.     {
  161.         $this->fases $fases;
  162.         return $this;
  163.     }
  164.     public function getEmpresa(): ?Empresa
  165.     {
  166.         return $this->empresa;
  167.     }
  168.     public function setEmpresa(?Empresa $empresa): self
  169.     {
  170.         $this->empresa $empresa;
  171.         return $this;
  172.     }
  173.     public function getModelo(): ?string
  174.     {
  175.         return $this->modelo;
  176.     }
  177.     public function setModelo(?string $modelo): self
  178.     {
  179.         $this->modelo $modelo;
  180.         return $this;
  181.     }
  182.     /**
  183.      * @return Collection<int, ProductoParametros>
  184.      */
  185.     public function getParametros(): Collection
  186.     {
  187.         return $this->parametros;
  188.     }
  189.     public function addParametro(ProductoParametros $parametro): self
  190.     {
  191.         if (!$this->parametros->contains($parametro)) {
  192.             $this->parametros->add($parametro);
  193.             $parametro->setProducto($this);
  194.         }
  195.         return $this;
  196.     }
  197.     public function removeParametro(ProductoParametros $parametro): self
  198.     {
  199.         if ($this->parametros->removeElement($parametro)) {
  200.             // set the owning side to null (unless already changed)
  201.             if ($parametro->getProducto() === $this) {
  202.                 $parametro->setProducto(null);
  203.             }
  204.         }
  205.         return $this;
  206.     }
  207.     public function getNumber(): ?int
  208.     {
  209.         return $this->number;
  210.     }
  211.     public function setNumber(?int $number): self
  212.     {
  213.         $this->number $number;
  214.         return $this;
  215.     }
  216.     public function getEntityUuid(): ?string
  217.     {
  218.         return $this->entityUuid;
  219.     }
  220.     public function setEntityUuid(?string $entityUuid): self
  221.     {
  222.         $this->entityUuid $entityUuid;
  223.         return $this;
  224.     }
  225.     public function getCategoria(): ?Categoria
  226.     {
  227.         return $this->categoria;
  228.     }
  229.     public function setCategoria(?Categoria $categoria): static
  230.     {
  231.         $this->categoria $categoria;
  232.         return $this;
  233.     }
  234. }