vendor/crosiersource/crosierlib-radx/src/Entity/Financeiro/Categoria.php line 61

Open in your IDE?
  1. <?php
  2. namespace CrosierSource\CrosierLibRadxBundle\Entity\Financeiro;
  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 CrosierSource\CrosierLibBaseBundle\Utils\StringUtils\StringUtils;
  13. use Doctrine\Common\Collections\ArrayCollection;
  14. use Doctrine\ORM\Mapping as ORM;
  15. use Exception;
  16. use Symfony\Component\Serializer\Annotation\Groups;
  17. use Symfony\Component\Serializer\Annotation\MaxDepth;
  18. /**
  19.  *
  20.  * @ApiResource(
  21.  *     normalizationContext={"groups"={"categoria","entityId"},"enable_max_depth"=true},
  22.  *     denormalizationContext={"groups"={"categoria"},"enable_max_depth"=true},
  23.  *
  24.  *     itemOperations={
  25.  *          "get"={"path"="/fin/categoria/{id}", "security"="is_granted('ROLE_FINAN')"},
  26.  *          "put"={"path"="/fin/categoria/{id}", "security"="is_granted('ROLE_FINAN_MASTER')"},
  27.  *          "delete"={"path"="/fin/categoria/{id}", "security"="is_granted('ROLE_FINAN_MASTER')"}
  28.  *     },
  29.  *     collectionOperations={
  30.  *          "get"={"path"="/fin/categoria", "security"="is_granted('ROLE_FINAN')"},
  31.  *          "post"={"path"="/fin/categoria", "security"="is_granted('ROLE_FINAN_MASTER')"}
  32.  *     },
  33.  *
  34.  *     attributes={
  35.  *          "pagination_items_per_page"=10,
  36.  *          "formats"={"jsonld", "csv"={"text/csv"}}
  37.  *     }
  38.  *
  39.  * )
  40.  * @ApiFilter(PropertyFilter::class)
  41.  *
  42.  * @ApiFilter(SearchFilter::class, properties={
  43.  *     "codigo": "exact",
  44.  *     "codigoSuper": "exact",
  45.  *     "descricao": "partial",
  46.  *     "id": "exact",
  47.  *     "categoria": "exact"
  48.  * })
  49.  * @ApiFilter(OrderFilter::class, properties={"id", "codigoOrd", "descricao", "dtConsolidado", "updated"}, arguments={"orderParameterName"="order"})
  50.  *
  51.  * @EntityHandler(entityHandlerClass="CrosierSource\CrosierLibRadxBundle\EntityHandler\Financeiro\CategoriaEntityHandler")
  52.  *
  53.  * @ORM\Entity(repositoryClass="CrosierSource\CrosierLibRadxBundle\Repository\Financeiro\CategoriaRepository")
  54.  * @ORM\Table(name="fin_categoria")
  55.  *
  56.  * @author Carlos Eduardo Pauluk
  57.  */
  58. class Categoria implements EntityId
  59. {
  60.     use EntityIdTrait;
  61.     
  62.     /**
  63.      * @ORM\Id()
  64.      * @ORM\Column(type="bigint")
  65.      * @Groups("entityId")
  66.      */
  67.     private ?int $id null;
  68.     public const MASK '0.00.000.000.000';
  69.     /**
  70.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Financeiro\Categoria", inversedBy="subCategs")
  71.      * @ORM\JoinColumn(name="pai_id",nullable=true)
  72.      * @Groups("categoria")
  73.      * @MaxDepth(1)
  74.      */
  75.     public ?Categoria $pai null;
  76.     /**
  77.      * @ORM\OneToMany(
  78.      *      targetEntity="Categoria",
  79.      *      mappedBy="pai"
  80.      * )
  81.      * @Groups({"public"})
  82.      *
  83.      * @var Categoria[]|ArrayCollection|null
  84.      */
  85.     public $subCategs null;
  86.     /**
  87.      * @ORM\Column(name="descricao", type="string")
  88.      * @Groups("categoria")
  89.      */
  90.     public ?string $descricao null;
  91.     /**
  92.      * Para os casos onde a movimentação é importada automaticamente, define qual a descrição padrão.
  93.      *
  94.      * @ORM\Column(name="descricao_padrao_moviment", type="string")
  95.      */
  96.     public ?string $descricaoPadraoMoviment null;
  97.     /**
  98.      * @ORM\Column(name="codigo", type="bigint", nullable=false)
  99.      * @Groups("categoria")
  100.      */
  101.     public ?int $codigo null;
  102.     /**
  103.      * A fim de relatórios.
  104.      *
  105.      * @ORM\Column(name="totalizavel", type="boolean", nullable=false)
  106.      */
  107.     public ?bool $totalizavel false;
  108.     /**
  109.      * Informa se esta categoria necessita que o CentroCusto seja informado (ou se ele será automático).
  110.      *
  111.      * @ORM\Column(name="centro_custo_dif", type="boolean", nullable=false)
  112.      */
  113.     public ?bool $centroCustoDif false;
  114.     /**
  115.      * Informa quais ROLES possuem acesso as informações (categoria.descricao e movimentacao.descricao).
  116.      * Para mais de uma, informar separado por vírgula.
  117.      *
  118.      * @ORM\Column(name="roles_acess", type="string", nullable=true, length=2000)
  119.      */
  120.     public ?string $rolesAcess null;
  121.     /**
  122.      * Caso o usuário logado não possua nenhuma das "rolesAcess", então a descrição alternativa deve ser exibida.
  123.      *
  124.      * @ORM\Column(name="descricao_alternativa", type="string", nullable=true, length=200)
  125.      */
  126.     public ?string $descricaoAlternativa null;
  127.     /**
  128.      * Atalho para não precisar ficar fazendo parse.
  129.      *
  130.      * @ORM\Column(name="codigo_super", type="bigint", nullable=true)
  131.      * @Groups("categoria")
  132.      */
  133.     public ?int $codigoSuper null;
  134.     /**
  135.      * Atalho para não precisar ficar fazendo parse.
  136.      *
  137.      * @ORM\Column(name="codigo_ord", type="bigint", nullable=true)
  138.      * @Groups("categoria")
  139.      */
  140.     public ?int $codigoOrd null;
  141.     /**
  142.      *
  143.      * @ORM\Column(name="json_data", type="json")
  144.      * @var null|array
  145.      * @NotUppercase()
  146.      * @Groups("categoria")
  147.      */
  148.     public ?array $jsonData null;
  149.     
  150.     /**
  151.      */
  152.     public function __construct()
  153.     {
  154.         $this->subCategs = new ArrayCollection();
  155.     }
  156.     /**
  157.      * @return Categoria[]|ArrayCollection|null
  158.      */
  159.     public function getSubCategs()
  160.     {
  161.         return $this->subCategs;
  162.     }
  163.     /**
  164.      * @param Categoria[]|ArrayCollection|null $subCategs
  165.      * @return Categoria
  166.      */
  167.     public function setSubCategs($subCategs): Categoria
  168.     {
  169.         $this->subCategs $subCategs;
  170.         return $this;
  171.     }
  172.     /**
  173.      * Retorna a descrição de uma Categoria no formato codigo + descricao (Ex.:
  174.      * 2.01 - DESPESAS PESSOAIS).
  175.      * @Groups("categoria")
  176.      */
  177.     public function getDescricaoMontada(): ?string
  178.     {
  179.         return $this->getCodigoM() . ' - ' $this->descricao;
  180.     }
  181.     /**
  182.      *
  183.      * Retorna a descrição de uma Categoria no formato codigo + descricao (Ex.:
  184.      * 2.01 - DESPESAS PESSOAIS).
  185.      * @Groups("categoria")
  186.      * @return string|null
  187.      */
  188.     public function getDescricaoMontadaTree(): ?string
  189.     {
  190.         return str_pad('', (strlen($this->codigo) - 1) * 2'.') . ' ' $this->getCodigoM() . ' - ' $this->descricao;
  191.     }
  192.     /**
  193.      * @return string|null
  194.      * @Groups("categoria")
  195.      */
  196.     public function getCodigoM(): ?string
  197.     {
  198.         try {
  199.             return StringUtils::mascarar($this->codigoself::MASK);
  200.         } catch (Exception $e) {
  201.             return $this->codigo;
  202.         }
  203.     }
  204.     /**
  205.      * Retorna somente o último 'bloco' do código.
  206.      * @return string|null
  207.      */
  208.     public function getCodigoSufixo(): ?string
  209.     {
  210.         if ($this->codigo) {
  211.             if (!$this->pai) {
  212.                 return $this->codigo;
  213.             }
  214.             // else
  215.             // Se tem pai, é o restante do código, removendo a parte do pai:
  216.             return substr($this->pai->getCodigoM(), strlen($this->pai->getCodigoM()) + 1);
  217.         }
  218.         return null;
  219.     }
  220.     /**
  221.      * @return string
  222.      * @Groups("categoria")
  223.      */
  224.     public function getMascaraDoFilho(): ?string
  225.     {
  226.         if (!$this->codigo) {
  227.             return null;
  228.         }
  229.         $tam strlen($this->codigo);
  230.         if ($tam === 1) {
  231.             return '99';
  232.         } elseif ($tam <= 12) {
  233.             return '999';
  234.         } else {
  235.             return null;
  236.         }
  237.     }
  238. }