vendor/crosiersource/crosierlib-radx/src/Entity/Financeiro/GrupoItem.php line 62

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\BooleanFilter;
  6. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
  7. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  8. use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
  9. use CrosierSource\CrosierLibBaseBundle\Doctrine\Annotations\EntityHandler;
  10. use CrosierSource\CrosierLibBaseBundle\Entity\EntityId;
  11. use CrosierSource\CrosierLibBaseBundle\Entity\EntityIdTrait;
  12. use DateTime;
  13. use Doctrine\Common\Collections\ArrayCollection;
  14. use Doctrine\ORM\Mapping as ORM;
  15. use Symfony\Component\Serializer\Annotation\Groups;
  16. use Symfony\Component\Serializer\Annotation\MaxDepth;
  17. /**
  18.  * Entidade que representa um 'item de um Grupo de Movimentações' (como a fatura
  19.  * de um mês do cartão de crédito, por exemplo).
  20.  *
  21.  * @ApiResource(
  22.  *     normalizationContext={"groups"={"grupoItem","entityId"},"enable_max_depth"=true},
  23.  *     denormalizationContext={"groups"={"grupoItem"},"enable_max_depth"=true},
  24.  *
  25.  *     itemOperations={
  26.  *          "get"={"path"="/fin/grupoItem/{id}", "security"="is_granted('ROLE_FINAN')"},
  27.  *          "put"={"path"="/fin/grupoItem/{id}", "security"="is_granted('ROLE_FINAN')"},
  28.  *          "delete"={"path"="/fin/grupoItem/{id}", "security"="is_granted('ROLE_FINAN_ADMIN')"}
  29.  *     },
  30.  *     collectionOperations={
  31.  *          "get"={"path"="/fin/grupoItem", "security"="is_granted('ROLE_FINAN')"},
  32.  *          "post"={"path"="/fin/grupoItem", "security"="is_granted('ROLE_FINAN')"}
  33.  *     },
  34.  *
  35.  *     attributes={
  36.  *          "pagination_items_per_page"=10,
  37.  *          "formats"={"jsonld", "csv"={"text/csv"}}
  38.  *     }
  39.  *
  40.  * )
  41.  * @ApiFilter(PropertyFilter::class)
  42.  *
  43.  * @ApiFilter(SearchFilter::class, properties={
  44.  *     "nome": "partial", 
  45.  *     "pai": "exact", 
  46.  *     "codigoGrupoItem": "exact", 
  47.  *     "id": "exact"
  48.  * })
  49.  * @ApiFilter(BooleanFilter::class, properties={"utilizado": "exact"})
  50.  * @ApiFilter(OrderFilter::class, properties={"id", "codigoGrupoItem", "nome", "updated", "dtVencto"}, arguments={"orderParameterName"="order"})
  51.  *
  52.  * @EntityHandler(entityHandlerClass="CrosierSource\CrosierLibRadxBundle\EntityHandler\Financeiro\GrupoItemEntityHandler")
  53.  *
  54.  * @ORM\Entity(repositoryClass="CrosierSource\CrosierLibRadxBundle\Repository\Financeiro\GrupoItemRepository")
  55.  * @ORM\Table(name="fin_grupo_item")
  56.  *
  57.  * @author Carlos Eduardo Pauluk
  58.  */
  59. class GrupoItem implements EntityId
  60. {
  61.     use EntityIdTrait;
  62.     /**
  63.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Financeiro\Grupo", inversedBy="itens")
  64.      * @ORM\JoinColumn(name="grupo_pai_id", nullable=true)
  65.      * @Groups("grupoItem")
  66.      * @MaxDepth(1)
  67.      */
  68.     public ?Grupo $pai null;
  69.     /**
  70.      * @ORM\Column(name="descricao", type="string", nullable=false, length=40)
  71.      * @Groups("grupoItem")
  72.      */
  73.     public ?string $descricao null;
  74.     /**
  75.      * Movimentações desta carteira não poderão ter suas datas alteradas para antes desta.
  76.      *
  77.      * @ORM\Column(name="dt_vencto", type="date", nullable=false)
  78.      * @Groups("grupoItem")
  79.      */
  80.     public ?DateTime $dtVencto null;
  81.     /**
  82.      * Para efeitos de navegação.
  83.      *
  84.      * @ORM\OneToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Financeiro\GrupoItem")
  85.      * @ORM\JoinColumn(name="anterior_id", referencedColumnName="id")
  86.      * @Groups("grupoItem")
  87.      * @MaxDepth(1)
  88.      */
  89.     public ?GrupoItem $anterior null;
  90.     /**
  91.      * Para efeitos de navegação.
  92.      *
  93.      * @ORM\OneToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Financeiro\GrupoItem")
  94.      * @ORM\JoinColumn(name="proximo_id", referencedColumnName="id")
  95.      * @Groups("grupoItem")
  96.      * @MaxDepth(1)
  97.      */
  98.     public ?GrupoItem $proximo null;
  99.     /**
  100.      * Utilizado para informar o limite disponível.
  101.      *
  102.      * @ORM\Column(name="valor_informado", type="decimal", nullable=true, precision=15, scale=2)
  103.      * @Groups("grupoItem")
  104.      */
  105.     public ?float $valorInformado null;
  106.     /**
  107.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Financeiro\Carteira")
  108.      * @ORM\JoinColumn(name="carteira_pagante_id", nullable=true)
  109.      * @Groups("grupoItem")
  110.      */
  111.     public ?Carteira $carteiraPagante null;
  112.     /**
  113.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Financeiro\Movimentacao")
  114.      * @ORM\JoinColumn(name="movimentacao_pagante_id", nullable=true)
  115.      * @Groups("grupoItem")
  116.      */
  117.     public ?Movimentacao $movimentacaoPagante null;
  118.     /**
  119.      * @ORM\Column(name="fechado", type="boolean", nullable=false)
  120.      * @Groups("grupoItem")
  121.      */
  122.     public ?bool $fechado false;
  123.     /**
  124.      *
  125.      * @ORM\OneToMany(targetEntity="Movimentacao", mappedBy="grupoItem")
  126.      *
  127.      * @var Movimentacao[]|ArrayCollection|null
  128.      */
  129.     public $movimentacoes null;
  130.     /**
  131.      */
  132.     public function __construct()
  133.     {
  134.         $this->movimentacoes = new ArrayCollection();
  135.     }
  136.     /**
  137.      * Método auxiliar para cálculo.
  138.      * @Groups("grupoItem")
  139.      */
  140.     public function getValorLanctos(): float
  141.     {
  142.         if ($this->movimentacoes && count($this->movimentacoes) > 0) {
  143.             $bdValor 0.0;
  144.             foreach ($this->movimentacoes as $m) {
  145.                 if (strpos($m->categoria->codigo0) === 1) {
  146.                     $bdValor += $m->valorTotal;
  147.                 } else {
  148.                     $bdValor -= $m->valorTotal;
  149.                 }
  150.             }
  151.             return abs($bdValor);
  152.         }
  153.         return 0.0;
  154.     }
  155.     /**
  156.      * Método auxiliar para view.
  157.      * @Groups("grupoItem")
  158.      */
  159.     public function getDiferenca(): ?float
  160.     {
  161.         return $this->getValorLanctos() - $this->valorInformado;
  162.     }
  163.     /**
  164.      * @return string
  165.      * @Groups("grupoItem")
  166.      */
  167.     public function getDescricaoMontada(): string
  168.     {
  169.         return $this->pai->descricao ' de ' $this->dtVencto->format('d/m/Y');
  170.     }
  171. }