vendor/crosiersource/crosierlib-radx/src/Entity/Fiscal/NotaFiscalItem.php line 63

Open in your IDE?
  1. <?php
  2. namespace CrosierSource\CrosierLibRadxBundle\Entity\Fiscal;
  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\NotUppercase;
  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. use Symfony\Component\Serializer\Annotation\SerializedName;
  15. use Symfony\Component\Validator\Constraints as Assert;
  16. /**
  17.  * @ApiResource(
  18.  *     normalizationContext={"groups"={"notaFiscalItem","entityId"},"enable_max_depth"=true},
  19.  *     denormalizationContext={"groups"={"notaFiscalItem"},"enable_max_depth"=true},
  20.  *
  21.  *     itemOperations={
  22.  *          "get"={"path"="/fis/notaFiscalItem/{id}", "security"="is_granted('ROLE_FISCAL')"},
  23.  *          "put"={"path"="/fis/notaFiscalItem/{id}", "security"="is_granted('ROLE_FISCAL')"},
  24.  *          "delete"={"path"="/fis/notaFiscalItem/{id}", "security"="is_granted('ROLE_FISCAL')"}
  25.  *     },
  26.  *     collectionOperations={
  27.  *          "get"={"path"="/fis/notaFiscalItem", "security"="is_granted('ROLE_FISCAL')"},
  28.  *          "post"={"path"="/fis/notaFiscalItem", "security"="is_granted('ROLE_FISCAL')"}
  29.  *     },
  30.  *
  31.  *     attributes={
  32.  *          "pagination_items_per_page"=10,
  33.  *          "formats"={"jsonld", "csv"={"text/csv"}}
  34.  *     }
  35.  * )
  36.  * @ApiFilter(PropertyFilter::class)
  37.  *
  38.  * @ApiFilter(SearchFilter::class, properties={
  39.  *     "id": "exact",
  40.  *     "notaFiscal": "exact"
  41.  * })
  42.  *
  43.  * @ApiFilter(OrderFilter::class, properties={
  44.  *     "id",
  45.  *     "updated",
  46.  *     "ordem",
  47.  *     "codigo",
  48.  *     "cfop",
  49.  *     "ncm",
  50.  *     "valorUnit",
  51.  *     "qtde",
  52.  *     "valorTotal"
  53.  * }, arguments={"orderParameterName"="order"})
  54.  *
  55.  * @EntityHandler(entityHandlerClass="CrosierSource\CrosierLibRadxBundle\EntityHandler\Fiscal\NotaFiscalItemEntityHandler")
  56.  *
  57.  * @ORM\Entity(repositoryClass="CrosierSource\CrosierLibRadxBundle\Repository\Fiscal\NotaFiscalItemRepository")
  58.  * @ORM\Table(name="fis_nf_item")
  59.  */
  60. class NotaFiscalItem implements EntityId
  61. {
  62.     use EntityIdTrait;
  63.     /**
  64.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Fiscal\NotaFiscal", inversedBy="itens")
  65.      * @ORM\JoinColumn(name="nota_fiscal_id")
  66.      * @Groups("notaFiscalItem")
  67.      * @var $notaFiscal null|NotaFiscal
  68.      */
  69.     public ?NotaFiscal $notaFiscal null;
  70.     /**
  71.      * @ORM\Column(name="ordem", type="integer", nullable=true)
  72.      * @Groups("notaFiscalItem")
  73.      * @var null|int
  74.      */
  75.     public ?int $ordem null;
  76.     /**
  77.      * @ORM\Column(name="codigo", type="string", nullable=false)
  78.      * @Groups("notaFiscalItem")
  79.      * @var null|string
  80.      */
  81.     public ?string $codigo null;
  82.     /**
  83.      * @ORM\Column(name="descricao", type="string", nullable=false)
  84.      * @Groups("notaFiscalItem")
  85.      * @var null|string
  86.      */
  87.     public ?string $descricao null;
  88.     /**
  89.      * @ORM\Column(name="cfop", type="string", nullable=false)
  90.      * @Groups("notaFiscalItem")
  91.      * @var null|string
  92.      */
  93.     public ?string $cfop null;
  94.     /**
  95.      * @ORM\Column(name="ean", type="string", nullable=true)
  96.      * @Groups("notaFiscalItem")
  97.      * @var null|string
  98.      */
  99.     public ?string $ean null;
  100.     /**
  101.      * @ORM\Column(name="csosn", type="integer", nullable=true)
  102.      * @Groups("notaFiscalItem")
  103.      * @var null|int
  104.      */
  105.     public ?int $csosn null;
  106.     /**
  107.      * @ORM\Column(name="ncm", type="string", length=20, nullable=false)
  108.      * @Groups("notaFiscalItem")
  109.      * @var null|string
  110.      */
  111.     public ?string $ncm null;
  112.     /**
  113.      * Código Especificador da Substituição Tributária.
  114.      * 
  115.      * @ORM\Column(name="cest", type="string",  length=20, nullable=true)
  116.      * @Groups("notaFiscalItem")
  117.      * @var null|string
  118.      */
  119.     public ?string $cest null;
  120.     /**
  121.      * Código da Situação Tributária.
  122.      * 
  123.      * @ORM\Column(name="cst", type="string", nullable=true)
  124.      * @Groups("notaFiscalItem")
  125.      * @var null|string
  126.      */
  127.     public ?string $cst null;
  128.     /**
  129.      * @ORM\Column(name="qtde", type="decimal", nullable=false, precision=15, scale=2)
  130.      * @Groups("N")
  131.      * @Assert\NotNull()
  132.      * @Assert\Type(type="string")
  133.      */
  134.     public ?string $qtde null;
  135.     /**
  136.      * @ORM\Column(name="unidade", type="string", length=50, nullable=true)
  137.      * @Groups("notaFiscalItem")
  138.      * @var null|string
  139.      */
  140.     public ?string $unidade null;
  141.     /**
  142.      * @ORM\Column(name="valor_total", type="decimal", nullable=true, precision=15, scale=2)
  143.      * @Groups("N")
  144.      * @Assert\Type(type="string")
  145.      */
  146.     public ?string $valorTotal null;
  147.     /**
  148.      * @ORM\Column(name="valor_unit", type="decimal", nullable=false, precision=15, scale=2)
  149.      * @Groups("N")
  150.      * @Assert\NotNull()
  151.      * @Assert\Type(type="string")
  152.      */
  153.     public ?string $valorUnit null;
  154.     /**
  155.      * @ORM\Column(name="valor_desconto", type="decimal", nullable=true, precision=15, scale=2)
  156.      * @Groups("N")
  157.      * @Assert\Type(type="string")
  158.      */
  159.     public ?string $valorDesconto null;
  160.     /**
  161.      * @ORM\Column(name="sub_total", type="decimal", nullable=true, precision=15, scale=2)
  162.      * @Groups("N")
  163.      * @Assert\Type(type="string")
  164.      */
  165.     public ?string $subtotal null;
  166.     /**
  167.      * @ORM\Column(name="icms_valor", type="decimal", nullable=true, precision=15, scale=2)
  168.      * @Groups("N")
  169.      * @Assert\Type(type="string")
  170.      */
  171.     public ?string $icmsValor null;
  172.     /**
  173.      * @ORM\Column(name="icms_mod_bc", type="string", nullable=true)
  174.      * @Groups("notaFiscalItem")
  175.      * @var null|string
  176.      */
  177.     public ?string $icmsModBC null;
  178.     /**
  179.      * @ORM\Column(name="icms_valor_bc", type="decimal", nullable=true, precision=15, scale=2)
  180.      * @Groups("N")
  181.      * @Assert\Type(type="string")
  182.      */
  183.     public ?string $icmsValorBc null;
  184.     /**
  185.      * @ORM\Column(name="icms", type="decimal", nullable=true, precision=15, scale=2)
  186.      * @Groups("N")
  187.      * @Assert\Type(type="string")
  188.      */
  189.     public ?string $icmsAliquota null;
  190.     /**
  191.      * @ORM\Column(name="pis_valor", type="decimal", nullable=true, precision=15, scale=2)
  192.      * @Groups("N")
  193.      * @Assert\Type(type="string")
  194.      */
  195.     public ?string $pisValor null;
  196.     /**
  197.      * @ORM\Column(name="pis_valor_bc", type="decimal", nullable=true, precision=15, scale=2)
  198.      * @Groups("N")
  199.      * @Assert\Type(type="string")
  200.      */
  201.     public ?string $pisValorBc null;
  202.     /**
  203.      * @ORM\Column(name="pis", type="decimal", nullable=true, precision=15, scale=2)
  204.      * @Groups("N")
  205.      * @Assert\Type(type="string")
  206.      */
  207.     public ?string $pisAliquota null;
  208.     /**
  209.      * @ORM\Column(name="cofins_valor", type="decimal", nullable=true, precision=15, scale=2)
  210.      * @Groups("N")
  211.      * @Assert\Type(type="string")
  212.      */
  213.     public ?string $cofinsValor null;
  214.     /**
  215.      * @ORM\Column(name="cofins_valor_bc", type="decimal", nullable=true, precision=15, scale=2)
  216.      * @Groups("N")
  217.      * @Assert\Type(type="string")
  218.      */
  219.     public ?string $cofinsValorBc null;
  220.     /**
  221.      * @ORM\Column(name="cofins", type="decimal", nullable=true, precision=15, scale=2)
  222.      * @Groups("N")
  223.      * @Assert\Type(type="string")
  224.      */
  225.     public ?string $cofinsAliquota null;
  226.     /**
  227.      * @ORM\Column(name="ncm_existente", type="boolean", nullable=true)
  228.      * @Groups("notaFiscalItem")
  229.      * @var null|bool
  230.      */
  231.     public ?bool $ncmExistente null;
  232.     /**
  233.      * @ORM\Column(name="json_data", type="json", nullable=true)
  234.      * @Groups("notaFiscalItem")
  235.      * @var null|array
  236.      * @NotUppercase()
  237.      */
  238.     public ?array $jsonData null;
  239.     /**
  240.      * Para aceitar tanto em string quanto em double.
  241.      * @Groups("notaFiscalItem")
  242.      * @SerializedName("qtde")
  243.      * @return null|float
  244.      */
  245.     public function getQtdeFormatted(): ?float
  246.     {
  247.         return (float)$this->qtde;
  248.     }
  249.     /**
  250.      * Para aceitar tanto em string quanto em double.
  251.      * @Groups("notaFiscalItem")
  252.      * @SerializedName("qtde")
  253.      * @param null|float $qtde
  254.      */
  255.     public function setQtdeFormatted(?float $qtde)
  256.     {
  257.         $this->qtde $qtde;
  258.     }
  259.     /**
  260.      * Para aceitar tanto em string quanto em double.
  261.      * @Groups("notaFiscalItem")
  262.      * @SerializedName("valorTotal")
  263.      * @return null|float
  264.      */
  265.     public function getValorTotalFormatted(): ?float
  266.     {
  267.         return (float)$this->valorTotal;
  268.     }
  269.     /**
  270.      * Para aceitar tanto em string quanto em double.
  271.      * @Groups("notaFiscalItem")
  272.      * @SerializedName("valorTotal")
  273.      * @param null|float $valorTotal
  274.      */
  275.     public function setValorTotalFormatted(?float $valorTotal)
  276.     {
  277.         $this->valorTotal $valorTotal;
  278.     }
  279.     /**
  280.      * Para aceitar tanto em string quanto em double.
  281.      * @Groups("notaFiscalItem")
  282.      * @SerializedName("valorUnit")
  283.      * @return null|float
  284.      */
  285.     public function getValorUnitFormatted(): ?float
  286.     {
  287.         return (float)$this->valorUnit;
  288.     }
  289.     /**
  290.      * Para aceitar tanto em string quanto em double.
  291.      * @Groups("notaFiscalItem")
  292.      * @SerializedName("valorUnit")
  293.      * @param null|float $valorUnit
  294.      */
  295.     public function setValorUnitFormatted(?float $valorUnit)
  296.     {
  297.         $this->valorUnit $valorUnit;
  298.     }
  299.     
  300.     /**
  301.      * Para aceitar tanto em string quanto em double.
  302.      * @Groups("notaFiscalItem")
  303.      * @SerializedName("valorDesconto")
  304.      * @return null|float
  305.      */
  306.     public function getValorDescontoFormatted(): ?float
  307.     {
  308.         return (float)$this->valorDesconto;
  309.     }
  310.     /**
  311.      * Para aceitar tanto em string quanto em double.
  312.      * @Groups("notaFiscalItem")
  313.      * @SerializedName("valorDesconto")
  314.      * @param null|float $valorDesconto
  315.      */
  316.     public function setValorDescontoFormatted(?float $valorDesconto)
  317.     {
  318.         $this->valorDesconto $valorDesconto;
  319.     }
  320.     /**
  321.      * Para aceitar tanto em string quanto em double.
  322.      * @Groups("notaFiscalItem")
  323.      * @SerializedName("subtotal")
  324.      * @return null|float
  325.      */
  326.     public function getSubTotalFormatted(): ?float
  327.     {
  328.         return $this->subtotal;
  329.     }
  330.     /**
  331.      * Para aceitar tanto em string quanto em double.
  332.      * @Groups("notaFiscalItem")
  333.      * @SerializedName("subtotal")
  334.      * @param null|float $subtotal
  335.      */
  336.     public function setSubTotalFormatted(?float $subtotal)
  337.     {
  338.         $this->subtotal $subtotal;
  339.     }
  340.     /**
  341.      * Para aceitar tanto em string quanto em double.
  342.      * @Groups("notaFiscalItem")
  343.      * @SerializedName("icmsValor")
  344.      * @return null|float
  345.      */
  346.     public function getIcmsValorFormatted(): ?float
  347.     {
  348.         return (float)$this->icmsValor;
  349.     }
  350.     /**
  351.      * Para aceitar tanto em string quanto em double.
  352.      * @Groups("notaFiscalItem")
  353.      * @SerializedName("icmsValor")
  354.      * @param null|float $icmsValor
  355.      */
  356.     public function setIcmsValorFormatted(?float $icmsValor)
  357.     {
  358.         $this->icmsValor $icmsValor;
  359.     }
  360.     /**
  361.      * Para aceitar tanto em string quanto em double.
  362.      * @Groups("notaFiscalItem")
  363.      * @SerializedName("icmsValorBc")
  364.      * @return null|float
  365.      */
  366.     public function getIcmsValorBcFormatted(): ?float
  367.     {
  368.         return (float)$this->icmsValorBc;
  369.     }
  370.     /**
  371.      * Para aceitar tanto em string quanto em double.
  372.      * @Groups("notaFiscalItem")
  373.      * @SerializedName("icmsValorBc")
  374.      * @param null|float $icmsValorBc
  375.      */
  376.     public function setIcmsValorBcFormatted(?float $icmsValorBc)
  377.     {
  378.         $this->icmsValorBc $icmsValorBc;
  379.     }
  380.     /**
  381.      * Para aceitar tanto em string quanto em double.
  382.      * @Groups("notaFiscalItem")
  383.      * @SerializedName("icmsAliquota")
  384.      * @return null|float
  385.      */
  386.     public function getIcmsAliquotaFormatted(): ?float
  387.     {
  388.         return (float)$this->icmsAliquota;
  389.     }
  390.     /**
  391.      * Para aceitar tanto em string quanto em double.
  392.      * @Groups("notaFiscalItem")
  393.      * @SerializedName("icmsAliquota")
  394.      * @param null|float $icmsAliquota
  395.      */
  396.     public function setIcmsAliquotaFormatted(?float $icmsAliquota)
  397.     {
  398.         $this->icmsAliquota $icmsAliquota;
  399.     }
  400.     /**
  401.      * Para aceitar tanto em string quanto em double.
  402.      * @Groups("notaFiscalItem")
  403.      * @SerializedName("pisValor")
  404.      * @return null|float
  405.      */
  406.     public function getPisValorFormatted(): ?float
  407.     {
  408.         return (float)$this->pisValor;
  409.     }
  410.     /**
  411.      * Para aceitar tanto em string quanto em double.
  412.      * @Groups("notaFiscalItem")
  413.      * @SerializedName("pisValor")
  414.      * @param null|float $pisValor
  415.      */
  416.     public function setPisValorFormatted(?float $pisValor)
  417.     {
  418.         $this->pisValor $pisValor;
  419.     }
  420.     /**
  421.      * Para aceitar tanto em string quanto em double.
  422.      * @Groups("notaFiscalItem")
  423.      * @SerializedName("pisValorBc")
  424.      * @return null|float
  425.      */
  426.     public function getPisValorBcFormatted(): ?float
  427.     {
  428.         return (float)$this->pisValorBc;
  429.     }
  430.     /**
  431.      * Para aceitar tanto em string quanto em double.
  432.      * @Groups("notaFiscalItem")
  433.      * @SerializedName("pisValorBc")
  434.      * @param null|float $pisValorBc
  435.      */
  436.     public function setPisValorBcFormatted(?float $pisValorBc)
  437.     {
  438.         $this->pisValorBc $pisValorBc;
  439.     }
  440.     /**
  441.      * Para aceitar tanto em string quanto em double.
  442.      * @Groups("notaFiscalItem")
  443.      * @SerializedName("pisAliquota")
  444.      * @return null|float
  445.      */
  446.     public function getPisAliquotaFormatted(): ?float
  447.     {
  448.         return (float)$this->pisAliquota;
  449.     }
  450.     /**
  451.      * Para aceitar tanto em string quanto em double.
  452.      * @Groups("notaFiscalItem")
  453.      * @SerializedName("pisAliquota")
  454.      * @param null|float $pisAliquota
  455.      */
  456.     public function setPisAliquotaFormatted(?float $pisAliquota)
  457.     {
  458.         $this->pisAliquota $pisAliquota;
  459.     }
  460.     /**
  461.      * Para aceitar tanto em string quanto em double.
  462.      * @Groups("notaFiscalItem")
  463.      * @SerializedName("cofinsValor")
  464.      * @return null|float
  465.      */
  466.     public function getCofinsValorFormatted(): ?float
  467.     {
  468.         return (float)$this->cofinsValor;
  469.     }
  470.     /**
  471.      * Para aceitar tanto em string quanto em double.
  472.      * @Groups("notaFiscalItem")
  473.      * @SerializedName("cofinsValor")
  474.      * @param null|float $cofinsValor
  475.      */
  476.     public function setCofinsValorFormatted(?float $cofinsValor)
  477.     {
  478.         $this->cofinsValor $cofinsValor;
  479.     }
  480.     /**
  481.      * Para aceitar tanto em string quanto em double.
  482.      * @Groups("notaFiscalItem")
  483.      * @SerializedName("cofinsValorBc")
  484.      * @return null|float
  485.      */
  486.     public function getCofinsValorBcFormatted(): ?float
  487.     {
  488.         return (float)$this->cofinsValorBc;
  489.     }
  490.     /**
  491.      * Para aceitar tanto em string quanto em double.
  492.      * @Groups("notaFiscalItem")
  493.      * @SerializedName("cofinsValorBc")
  494.      * @param null|float $cofinsValorBc
  495.      */
  496.     public function setCofinsValorBcFormatted(?float $cofinsValorBc)
  497.     {
  498.         $this->cofinsValorBc $cofinsValorBc;
  499.     }
  500.     /**
  501.      * Para aceitar tanto em string quanto em double.
  502.      * @Groups("notaFiscalItem")
  503.      * @SerializedName("cofinsAliquota")
  504.      * @return null|float
  505.      */
  506.     public function getCofinsAliquotaFormatted(): ?float
  507.     {
  508.         return (float)$this->cofinsAliquota;
  509.     }
  510.     /**
  511.      * Para aceitar tanto em string quanto em double.
  512.      * @Groups("notaFiscalItem")
  513.      * @SerializedName("cofinsAliquota")
  514.      * @param null|float $cofinsAliquota
  515.      */
  516.     public function setCofinsAliquotaFormatted(?float $cofinsAliquota)
  517.     {
  518.         $this->cofinsAliquota $cofinsAliquota;
  519.     }
  520.     public function calculaTotais(): void
  521.     {
  522.         if ($this->qtde === null || $this->valorUnit === null) {
  523.             return;
  524.         }
  525.         $valorDesconto = (float)$this->valorDesconto ?? 0.0;
  526.         if ((float)$this->valorDesconto !== $valorDesconto) {
  527.             $this->valorDesconto $valorDesconto;
  528.         }
  529.         $subtotal = (float)(bcmul($this->qtde$this->valorUnit2));
  530.         if ((float)$this->subtotal !== $subtotal) {
  531.             $this->subtotal $subtotal;
  532.         }
  533.         if ((float)$this->valorTotal !== (float)$this->subtotal) {
  534.             $this->valorTotal $this->subtotal;
  535.         }
  536.     }
  537.     
  538. }