vendor/crosiersource/crosierlib-radx/src/Entity/Estoque/ProdutoComposicao.php line 50

Open in your IDE?
  1. <?php
  2. namespace CrosierSource\CrosierLibRadxBundle\Entity\Estoque;
  3. use ApiPlatform\Core\Annotation\ApiFilter;
  4. use ApiPlatform\Core\Annotation\ApiResource;
  5. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
  6. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  7. use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
  8. use CrosierSource\CrosierLibBaseBundle\Doctrine\Annotations\EntityHandler;
  9. use CrosierSource\CrosierLibBaseBundle\Doctrine\Annotations\TrackedEntity;
  10. use CrosierSource\CrosierLibBaseBundle\Entity\EntityId;
  11. use CrosierSource\CrosierLibBaseBundle\Entity\EntityIdTrait;
  12. use Doctrine\ORM\Mapping as ORM;
  13. use Symfony\Component\Serializer\Annotation\Groups;
  14. /**
  15.  * @ApiResource(
  16.  *     normalizationContext={"groups"={"produtoComposicao","entityId"},"enable_max_depth"=true},
  17.  *     denormalizationContext={"groups"={"produtoComposicao"},"enable_max_depth"=true},
  18.  *
  19.  *     itemOperations={
  20.  *          "get"={"path"="/est/produtoComposicao/{id}", "security"="is_granted('ROLE_ESTOQUE')"},
  21.  *          "put"={"path"="/est/produtoComposicao/{id}", "security"="is_granted('ROLE_ESTOQUE')"},
  22.  *          "delete"={"path"="/est/produtoComposicao/{id}", "security"="is_granted('ROLE_ADMIN')"}
  23.  *     },
  24.  *     collectionOperations={
  25.  *          "get"={"path"="/est/produtoComposicao", "security"="is_granted('ROLE_ESTOQUE')"},
  26.  *          "post"={"path"="/est/produtoComposicao", "security"="is_granted('ROLE_ESTOQUE')"}
  27.  *     },
  28.  *
  29.  *     attributes={
  30.  *          "pagination_items_per_page"=10,
  31.  *          "formats"={"jsonld", "csv"={"text/csv"}}
  32.  *     }
  33.  * )
  34.  * @ApiFilter(PropertyFilter::class)
  35.  *
  36.  * @ApiFilter(SearchFilter::class, properties={"nome": "partial", "documento": "exact", "id": "exact"})
  37.  * @ApiFilter(OrderFilter::class, properties={"id", "documento", "nome", "updated"}, arguments={"orderParameterName"="order"})
  38.  *
  39.  * @EntityHandler(entityHandlerClass="CrosierSource\CrosierLibRadxBundle\EntityHandler\Estoque\ProdutoComposicaoEntityHandler")
  40.  *
  41.  * @ORM\Entity(repositoryClass="CrosierSource\CrosierLibRadxBundle\Repository\Estoque\ProdutoComposicaoRepository")
  42.  * @ORM\Table(name="est_produto_composicao")
  43.  * @TrackedEntity
  44.  *
  45.  * @author Carlos Eduardo Pauluk
  46.  */
  47. class ProdutoComposicao implements EntityId
  48. {
  49.     use EntityIdTrait;
  50.     /**
  51.      *
  52.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Estoque\Produto", inversedBy="composicoes")
  53.      * @ORM\JoinColumn(name="produto_pai_id", nullable=false)
  54.      * @Groups("produtoComposicao")
  55.      *
  56.      * @var null|Produto
  57.      */
  58.     public ?Produto $produtoPai null;
  59.     /**
  60.      *
  61.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Estoque\Produto")
  62.      * @ORM\JoinColumn(name="produto_filho_id", nullable=false)
  63.      *
  64.      * @Groups("produtoComposicao")
  65.      *
  66.      * @var null|Produto
  67.      */
  68.     public ?Produto $produtoFilho null;
  69.     /**
  70.      *
  71.      * @ORM\Column(name="ordem", type="integer", nullable=true)
  72.      * @Groups("produtoComposicao")
  73.      * @var null|integer
  74.      */
  75.     public ?int $ordem null;
  76.     /**
  77.      *
  78.      * @ORM\Column(name="qtde", type="decimal", nullable=false)
  79.      * @Groups("produtoComposicao")
  80.      *
  81.      * @var null|float
  82.      */
  83.     public ?float $qtde null;
  84.     /**
  85.      *
  86.      * @ORM\Column(name="preco_composicao", type="decimal", nullable=false)
  87.      * @Groups("produtoComposicao")
  88.      * @var null|string
  89.      */
  90.     public ?string $precoComposicao null;
  91.     
  92.     /**
  93.      * @return float|null
  94.      */
  95.     public function getTotalAtual(): ?float
  96.     {
  97.         return bcmul($this->produtoFilho->jsonData['qtde_estoque_total'] ?? 0.0$this->produtoFilho->jsonData['preco_tabela'], 2);
  98.     }
  99.     /**
  100.      * @return float|null
  101.      */
  102.     public function getTotalComposicao(): ?float
  103.     {
  104.         return bcmul($this->qtde ?? 0.0$this->precoComposicao ?? 0.02);
  105.     }
  106. }