vendor/crosiersource/crosierlib-radx/src/Entity/Financeiro/Carteira.php line 80

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\Doctrine\Annotations\NotUppercase;
  11. use CrosierSource\CrosierLibBaseBundle\Entity\EntityId;
  12. use CrosierSource\CrosierLibBaseBundle\Entity\EntityIdTrait;
  13. use CrosierSource\CrosierLibBaseBundle\Entity\Security\User;
  14. use DateTime;
  15. use Doctrine\ORM\Mapping as ORM;
  16. use Symfony\Component\Serializer\Annotation\Groups;
  17. use Symfony\Component\Serializer\Annotation\MaxDepth;
  18. use Symfony\Component\Serializer\Annotation\SerializedName;
  19. /**
  20.  * Entidade 'Carteira'.
  21.  *
  22.  * @ApiResource(
  23.  *     normalizationContext={"groups"={"carteira","operadoraCartao","entityId","user"},"enable_max_depth"=true},
  24.  *     denormalizationContext={"groups"={"carteira"},"enable_max_depth"=true},
  25.  *
  26.  *     itemOperations={
  27.  *          "get"={"path"="/fin/carteira/{id}", "security"="is_granted('ROLE_FINAN')"},
  28.  *          "put"={"path"="/fin/carteira/{id}", "security"="is_granted('ROLE_FINAN_ADMIN')"},
  29.  *          "delete"={"path"="/fin/carteira/{id}", "security"="is_granted('ROLE_FINAN_ADMIN')"}
  30.  *     },
  31.  *     collectionOperations={
  32.  *          "get"={"path"="/fin/carteira", "security"="is_granted('ROLE_FINAN')"},
  33.  *          "post"={"path"="/fin/carteira", "security"="is_granted('ROLE_FINAN_ADMIN')"}
  34.  *     },
  35.  *
  36.  *     attributes={
  37.  *          "pagination_items_per_page"=10,
  38.  *          "formats"={"jsonld", "csv"={"text/csv"}}
  39.  *     }
  40.  *
  41.  * )
  42.  * @ApiFilter(PropertyFilter::class)
  43.  *
  44.  * @ApiFilter(BooleanFilter::class, properties={
  45.  *     "atual",
  46.  *     "caixa",
  47.  *     "concreta",
  48.  *     "abertas",
  49.  *     "caixaStatus",
  50.  *     "cheque",
  51.  *     "destinoDeSangrias"
  52.  * })
  53.  *
  54.  * @ApiFilter(SearchFilter::class, properties={
  55.  *     "codigo": "exact",
  56.  *     "descricao": "partial",
  57.  *     "caixaResponsavel": "exact",
  58.  *     "id": "exact",
  59.  *     "operadoraCartao": "exact"})
  60.  *
  61.  * @ApiFilter(OrderFilter::class, properties={
  62.  *     "id",
  63.  *     "codigo",
  64.  *     "descricao",
  65.  *     "dtConsolidado",
  66.  *     "atual",
  67.  *     "updated"
  68.  * }, arguments={"orderParameterName"="order"})
  69.  *
  70.  * @EntityHandler(entityHandlerClass="CrosierSource\CrosierLibRadxBundle\EntityHandler\Financeiro\CarteiraEntityHandler")
  71.  *
  72.  * @ORM\Entity(repositoryClass="CrosierSource\CrosierLibRadxBundle\Repository\Financeiro\CarteiraRepository")
  73.  * @ORM\Table(name="fin_carteira")
  74.  *
  75.  * @author Carlos Eduardo Pauluk
  76.  */
  77. class Carteira implements EntityId
  78. {
  79.     use EntityIdTrait;
  80.     /**
  81.      *
  82.      * @ORM\Column(name="codigo", type="integer", nullable=false)
  83.      * @Groups("carteira")
  84.      */
  85.     public ?int $codigo null;
  86.     /**
  87.      *
  88.      * @ORM\Column(name="descricao", type="string", nullable=false, length=40)
  89.      * @Groups("carteira")
  90.      */
  91.     public ?string $descricao null;
  92.     /**
  93.      * Movimentações desta carteira não poderão ter suas datas alteradas para antes desta.
  94.      *
  95.      * @ORM\Column(name="dt_consolidado", type="datetime", nullable=false)
  96.      * @Groups("carteira")
  97.      */
  98.     public ?DateTime $dtConsolidado null;
  99.     /**
  100.      * Uma Carteira concreta é aquela em que podem ser efetuados créditos e
  101.      * débitos (status 'REALIZADA'), como uma conta corrente ou um caixa.
  102.      *
  103.      * Um Grupo de Movimentação só pode estar vinculado à uma Carteira concreta.
  104.      * Uma movimentação que contenha um grupo de movimentação, precisa ter sua
  105.      * carteira igual a carteira do grupo de movimentação.
  106.      *
  107.      *
  108.      * @ORM\Column(name="concreta", type="boolean", nullable=false)
  109.      * @Groups("carteira")
  110.      */
  111.     public ?bool $concreta false;
  112.     /**
  113.      * Informa se esta carteira pode conter movimentações com status ABERTA.
  114.      *
  115.      * @ORM\Column(name="abertas", type="boolean", nullable=false)
  116.      * @Groups("carteira")
  117.      */
  118.     public ?bool $abertas false;
  119.     /**
  120.      * Informa se esta carteira é um caixa (ex.: caixa a vista, caixa a prazo).
  121.      *
  122.      * @ORM\Column(name="caixa", type="boolean", nullable=false)
  123.      * @Groups("carteira")
  124.      */
  125.     public ?bool $caixa false;
  126.     /**
  127.      * Informa se esta carteira pode receber sangrias.
  128.      *
  129.      * @ORM\Column(name="destino_sangrias", type="boolean", nullable=false)
  130.      * @Groups("carteira")
  131.      */
  132.     public ?bool $destinoDeSangrias false;
  133.     /**
  134.      * ABERTO / FECHADO / null
  135.      * @ORM\Column(name="caixa_status", type="string", nullable=true, length=20)
  136.      * @Groups("carteira")
  137.      * @var null|string
  138.      */
  139.     public ?string $caixaStatus '';
  140.     /**
  141.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibBaseBundle\Entity\Security\User")
  142.      * @ORM\JoinColumn(name="caixa_responsavel_id")
  143.      * @MaxDepth(2)
  144.      * @Groups("carteira")
  145.      * @var User|null
  146.      */
  147.     public ?User $caixaResponsavel null;
  148.     /**
  149.      * @ORM\Column(name="caixa_dt_ultima_operacao", type="datetime", nullable=true)
  150.      * @Groups("carteira")
  151.      * @var null|\DateTime
  152.      */
  153.     public ?\DateTime $caixaDtUltimaOperacao null;
  154.     /**
  155.      * Informa se esta carteira possui talão de cheques.
  156.      *
  157.      * @ORM\Column(name="cheque", type="boolean", nullable=false)
  158.      * @Groups("carteira")
  159.      */
  160.     public ?bool $cheque false;
  161.     /**
  162.      * No caso da Carteira ser uma conta de banco, informa qual.
  163.      *
  164.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Financeiro\Banco")
  165.      * @ORM\JoinColumn(nullable=true)
  166.      * @Groups("carteira")
  167.      */
  168.     public ?Banco $banco null;
  169.     /**
  170.      * Código da agência (sem o dígito verificador).
  171.      *
  172.      * @ORM\Column(name="agencia", type="string", nullable=true, length=30)
  173.      * @Groups("carteira")
  174.      */
  175.     public ?string $agencia null;
  176.     /**
  177.      * Número da conta no banco (não segue um padrão).
  178.      *
  179.      * @ORM\Column(name="conta", type="string", nullable=true, length=30)
  180.      * @Groups("carteira")
  181.      */
  182.     public ?string $conta null;
  183.     /**
  184.      * Utilizado para informar o limite disponível.
  185.      *
  186.      * @ORM\Column(name="limite", type="decimal", nullable=true, precision=15, scale=2)
  187.      *
  188.      */
  189.     public ?float $limite null;
  190.     /**
  191.      *
  192.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Financeiro\OperadoraCartao")
  193.      * @ORM\JoinColumn(name="operadora_cartao_id", nullable=true)
  194.      *
  195.      * @Groups("carteira")
  196.      * @MaxDepth(1)
  197.      */
  198.     public ?OperadoraCartao $operadoraCartao null;
  199.     /**
  200.      * Informa se esta carteira está atualmente em utilização.
  201.      *
  202.      * @ORM\Column(name="atual", type="boolean", nullable=false)
  203.      * @Groups("carteira")
  204.      */
  205.     public ?bool $atual false;
  206.     
  207.     /**
  208.      *
  209.      * @ORM\Column(name="json_data", type="json")
  210.      * @var null|array
  211.      * @NotUppercase()
  212.      * @Groups("carteira")
  213.      */
  214.     public ?array $jsonData null;
  215.     public function getCodigo(bool $format false)
  216.     {
  217.         if ($format) {
  218.             return str_pad($this->codigo3'0'STR_PAD_LEFT);
  219.         }
  220.         return $this->codigo;
  221.     }
  222.     /**
  223.      * @return string
  224.      * @Groups("carteira")
  225.      */
  226.     public function getDescricaoMontada(): string
  227.     {
  228.         return $this->getCodigo(true) . ' - ' $this->descricao;
  229.     }
  230.     /**
  231.      * Para aceitar tanto em string quanto em double.
  232.      * @Groups({"carteira"})
  233.      * @SerializedName("limite")
  234.      * @return float
  235.      */
  236.     public function getLimiteFormatted(): float
  237.     {
  238.         return (float)$this->limite;
  239.     }
  240.     /**
  241.      * Para aceitar tanto em string quanto em double.
  242.      * @Groups("carteira")
  243.      * @SerializedName("limite")
  244.      * @param float $limite
  245.      */
  246.     public function setLimiteFormatted(float $limite)
  247.     {
  248.         $this->limite $limite;
  249.     }
  250. }