vendor/crosiersource/crosierlib-radx/src/Entity/Vendas/Venda.php line 53

Open in your IDE?
  1. <?php
  2. namespace CrosierSource\CrosierLibRadxBundle\Entity\Vendas;
  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\CrosierLibRadxBundle\Entity\CRM\Cliente;
  13. use CrosierSource\CrosierLibRadxBundle\Entity\RH\Colaborador;
  14. use DateTime;
  15. use Doctrine\Common\Collections\ArrayCollection;
  16. use Doctrine\ORM\Mapping as ORM;
  17. use Symfony\Component\Serializer\Annotation\Groups;
  18. /**
  19.  * @ApiResource(
  20.  *     normalizationContext={"groups"={"venda","entityId"},"enable_max_depth"=true},
  21.  *     denormalizationContext={"groups"={"venda"},"enable_max_depth"=true},
  22.  *
  23.  *     itemOperations={
  24.  *          "get"={"path"="/ven/venda/{id}", "security"="is_granted('ROLE_VENDAS')"},
  25.  *          "put"={"path"="/ven/venda/{id}", "security"="is_granted('ROLE_VENDAS')"},
  26.  *          "delete"={"path"="/ven/venda/{id}", "security"="is_granted('ROLE_ADMIN')"}
  27.  *     },
  28.  *     collectionOperations={
  29.  *          "get"={"path"="/ven/venda", "security"="is_granted('ROLE_VENDAS')"},
  30.  *          "post"={"path"="/ven/venda", "security"="is_granted('ROLE_VENDAS')"}
  31.  *     },
  32.  *
  33.  *     attributes={
  34.  *          "pagination_items_per_page"=10,
  35.  *          "formats"={"jsonld", "csv"={"text/csv"}}
  36.  *     }
  37.  * )
  38.  * @ApiFilter(PropertyFilter::class)
  39.  *
  40.  * @ApiFilter(SearchFilter::class, properties={"nome": "partial", "documento": "exact", "id": "exact"})
  41.  * @ApiFilter(OrderFilter::class, properties={"id", "documento", "nome", "updated"}, arguments={"orderParameterName"="order"})
  42.  *
  43.  * @EntityHandler(entityHandlerClass="CrosierSource\CrosierLibRadxBundle\EntityHandler\Vendas\VendaEntityHandler")
  44.  *
  45.  * @ORM\Entity(repositoryClass="CrosierSource\CrosierLibRadxBundle\Repository\Vendas\VendaRepository")
  46.  * @ORM\Table(name="ven_venda")
  47.  *
  48.  * @author Carlos Eduardo Pauluk
  49.  */
  50. class Venda implements EntityId
  51. {
  52.     use EntityIdTrait;
  53.     /**
  54.      *
  55.      * @ORM\Column(name="dt_venda", type="datetime", nullable=false)
  56.      * @Groups("venda")
  57.      *
  58.      * @var null|DateTime
  59.      */
  60.     public ?DateTime $dtVenda null;
  61.     /**
  62.      *
  63.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\CRM\Cliente")
  64.      * @ORM\JoinColumn(name="cliente_id")
  65.      * @Groups("venda")
  66.      *
  67.      * @var null|Cliente
  68.      */
  69.     public ?Cliente $cliente null;
  70.     /**
  71.      *
  72.      * @ORM\ManyToOne(targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\RH\Colaborador")
  73.      * @ORM\JoinColumn(name="vendedor_id")
  74.      * @Groups("venda")
  75.      *
  76.      * @var null|Colaborador
  77.      */
  78.     public ?Colaborador $vendedor null;
  79.     /**
  80.      *
  81.      * @ORM\Column(name="subtotal", type="decimal")
  82.      * @Groups("venda")
  83.      *
  84.      * @var null|float
  85.      */
  86.     public ?float $subtotal null;
  87.     /**
  88.      *
  89.      * @ORM\Column(name="desconto", type="decimal")
  90.      * @Groups("venda")
  91.      *
  92.      * @var null|float
  93.      */
  94.     public ?float $desconto null;
  95.     /**
  96.      *
  97.      * @ORM\Column(name="valor_total", type="decimal")
  98.      * @Groups("venda")
  99.      *
  100.      * @var null|float
  101.      */
  102.     public ?float $valorTotal null;
  103.     /**
  104.      *
  105.      * @ORM\Column(name="status", type="string")
  106.      * @Groups("venda")
  107.      *
  108.      * @var null|string
  109.      */
  110.     public ?string $status null;
  111.     /**
  112.      *
  113.      * @ORM\Column(name="json_data", type="json")
  114.      * @var null|array
  115.      * @NotUppercase()
  116.      * @Groups("venda")
  117.      */
  118.     public ?array $jsonData null;
  119.     /**
  120.      *
  121.      * @var null|VendaItem[]|ArrayCollection
  122.      *
  123.      * @ORM\OneToMany(
  124.      *      targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Vendas\VendaItem",
  125.      *      cascade={"all"},
  126.      *      mappedBy="venda",
  127.      *      orphanRemoval=true)
  128.      * @ORM\OrderBy({"ordem" = "ASC"})
  129.      * @Groups("venda")
  130.      */
  131.     public $itens;
  132.     /**
  133.      *
  134.      * @var null|VendaPagto[]|ArrayCollection
  135.      *
  136.      * @ORM\OneToMany(
  137.      *      targetEntity="CrosierSource\CrosierLibRadxBundle\Entity\Vendas\VendaPagto",
  138.      *      cascade={"refresh"},
  139.      *      mappedBy="venda",
  140.      *      orphanRemoval=true)
  141.      * @Groups("venda")
  142.      */
  143.     public $pagtos;
  144.     public function __construct()
  145.     {
  146.         $this->itens = new ArrayCollection();
  147.         $this->pagtos = new ArrayCollection();
  148.     }
  149.     /**
  150.      * @param VendaItem|null $i
  151.      */
  152.     public function addItem(?VendaItem $i): void
  153.     {
  154.         $i->venda $this;
  155.         if (!$this->itens->contains($i)) {
  156.             $this->itens->add($i);
  157.         }
  158.     }
  159.     /**
  160.      * @param VendaPagto|null $pagto
  161.      */
  162.     public function addPagto(?VendaPagto $pagto): void
  163.     {
  164.         $pagto->venda $this;
  165.         if (!$this->pagtos->contains($pagto)) {
  166.             $this->pagtos->add($pagto);
  167.         }
  168.     }
  169.     /**
  170.      *
  171.      */
  172.     public function recalcularTotais()
  173.     {
  174.         $subtotal 0.0;
  175.         $descontos 0.0;
  176.         $valorTotal 0.0;
  177.         foreach ($this->itens as $item) {
  178.             $subtotal bcadd($subtotal$item->subtotal2);
  179.             $descontos bcadd($descontos$item->desconto2);
  180.             $valorTotal bcadd($valorTotal$item->total2);
  181.         }
  182.         $this->subtotal $subtotal;
  183.         $this->desconto $descontos;
  184.         $this->valorTotal $valorTotal;
  185.     }
  186.     public function getTotalPagtos(): float
  187.     {
  188.         $totalPagtos 0.0;
  189.         /** @var VendaPagto $pagto */
  190.         foreach ($this->pagtos as $pagto) {
  191.             $totalPagtos bcadd($totalPagtos$pagto->valorPagto2);
  192.         }
  193.         return (float)$totalPagtos;
  194.     }
  195. }