src/Controller/Api/v1/TransactionItemApiController.php line 416

Open in your IDE?
  1. <?php
  2. namespace EADPlataforma\Controller\Api\v1;
  3. use OpenApi\Annotations as OA;
  4. use Nelmio\ApiDocBundle\Annotation\Model;
  5. use Nelmio\ApiDocBundle\Annotation\Security;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use EADPlataforma\Controller\Api\AbstractApiController;
  9. use EADPlataforma\Entity\User;
  10. use EADPlataforma\Entity\UserSubscription;
  11. use EADPlataforma\Entity\Product;
  12. use EADPlataforma\Entity\ProductOffer;
  13. use EADPlataforma\Entity\ProductCoupon;
  14. use EADPlataforma\Entity\Transaction;
  15. use EADPlataforma\Entity\TransactionItem;
  16. use EADPlataforma\Entity\UserCheckoutInfo;
  17. use EADPlataforma\Entity\City;
  18. use EADPlataforma\Entity\State;
  19. use EADPlataforma\Enum\TransactionItemEnum;
  20. use EADPlataforma\Enum\UserLogEnum;
  21. use EADPlataforma\Enum\ErrorEnum;
  22. use EADPlataforma\Enum\UserPermissionEnum;
  23. use EADPlataforma\Enum\TrashEnum;
  24. class TransactionItemApiController extends AbstractApiController {
  25.     public function getEntityClass(){
  26.         return TransactionItem::class;
  27.     }
  28.     /**
  29.      * Listagem dos pagamentos das assinaturas do EAD.
  30.      *
  31.      *
  32.      * @Route("/api/1/payment", methods={"GET"})
  33.      * @OA\Response(
  34.      *     response=200,
  35.      *     description="Retorna os pagamentos dos planos cadastrados no EAD.",
  36.      *     @OA\JsonContent(
  37.      *         type="object",
  38.      *         @OA\Property(property="assinatura_id", type="integer", example=1, description="Id da assinatura cadastrada no EAD."),
  39.      *         @OA\Property(property="transacao_id", type="string", example="", description="Id da transação cadastrada no EAD."),
  40.      *         @OA\Property(property="status", type="integer", example="", description="Status da transação."),
  41.      *         @OA\Property(property="data_compra", type="datetime", example="", description="Data e hora do pedido."),
  42.      *         @OA\Property(property="data_conclusao", type="datetime", example="", description="Data e hora da conclusão do processamento do pedido."),
  43.      *         @OA\Property(property="plano_id", type="integer", example=1, description="Id do plano cadastrado no EAD."),
  44.      *         @OA\Property(property="valor_pago", type="float", example=1, description="Valor pago pelo aluno."),
  45.      *         @OA\Property(property="aluno_id", type="integer", example=1, description="Id do aluno cadastrado no EAD."),
  46.      *         @OA\Property(property="nome", type="string", example="", description="Nome do aluno cadastrado no EAD."),
  47.      *         @OA\Property(property="email", type="integer", example="", description="E-mail do aluno cadastrado no EAD.")
  48.      *     )
  49.      * )
  50.      * 
  51.      * @OA\Response(
  52.      *     response=204,
  53.      *     description="No content"
  54.      * )
  55.      * 
  56.      * @OA\Response(
  57.      *     response=401,
  58.      *     description="Token not found",
  59.      *     @OA\JsonContent(
  60.      *         type="object",
  61.      *         @OA\Property(property="http_status", type="integer", example=401, description="Token not found"),
  62.      *         @OA\Property(property="message", type="string", example="Token not found")
  63.      *     )
  64.      * )
  65.      * 
  66.      * @OA\Response(
  67.      *     response=429,
  68.      *     description="Too many requests",
  69.      *     @OA\JsonContent(
  70.      *         type="object",
  71.      *         @OA\Property(property="http_status", type="integer", example=429, description="Too many requests"),
  72.      *         @OA\Property(property="message", type="string", example="Too many requests")
  73.      *     )
  74.      * )
  75.      * 
  76.      * @OA\Response(
  77.      *     response=500,
  78.      *     description="Internal Server Error",
  79.      *     @OA\JsonContent(
  80.      *         type="object",
  81.      *         @OA\Property(property="http_status", type="integer", example=500, description="Internal Server Error"),
  82.      *         @OA\Property(property="message", type="string", example="Internal Server Error")
  83.      *     )
  84.      * )
  85.      * 
  86.      * @OA\Parameter(
  87.      *     name="id",
  88.      *     in="query",
  89.      *     description="Assinatura Id",
  90.      *     @OA\Schema(type="integer")
  91.      * )
  92.      * 
  93.      * @OA\Parameter(
  94.      *     name="usuario_id",
  95.      *     in="query",
  96.      *     description="Usuário Id",
  97.      *     @OA\Schema(type="integer")
  98.      * )
  99.      * 
  100.      * @OA\Parameter(
  101.      *     name="plano_id",
  102.      *     in="query",
  103.      *     description="Plano Id",
  104.      *     @OA\Schema(type="integer")
  105.      * )
  106.      * 
  107.      * @OA\Parameter(
  108.      *     name="data_inicio",
  109.      *     in="query",
  110.      *     description="Data inicial última compra (yyyy-mm-dd)",
  111.      *     @OA\Schema(type="string")
  112.      * )
  113.      * 
  114.      * @OA\Parameter(
  115.      *     name="data_fim",
  116.      *     in="query",
  117.      *     description="Data final última compra (yyyy-mm-dd)",
  118.      *     @OA\Schema(type="string")
  119.      * )
  120.      * 
  121.      * @OA\Parameter(
  122.      *     name="paginate",
  123.      *     in="query",
  124.      *     description="Informaçoes para paginação",
  125.      *     @OA\Schema(type="integer")
  126.      * )
  127.      * 
  128.      * @OA\Parameter(
  129.      *      name="limit",
  130.      *      in="query",
  131.      *      description="Número máximo de dados retornados por página, valor padrão 1000",
  132.      *      @OA\Schema(type="integer")
  133.      * )
  134.      * 
  135.      * @OA\Parameter(
  136.      *      name="offset",
  137.      *      in="query",
  138.      *      description="Indica o início da leitura, caso não informado valor padrão será 0",
  139.      *      @OA\Schema(type="integer")
  140.      * )
  141.      * 
  142.      * @OA\Tag(name="Assinaturas")
  143.      * @Security(name="Bearer")
  144.      * 
  145.     */
  146.     public function getUserPayment(Request $request)
  147.     {
  148.        
  149.         $this->requestUtil->setRequest($request)->setData();
  150.         $columns = [
  151.             "us.id AS assinatura_id",
  152.             "t.hash AS transacao_id",
  153.             "t.status",
  154.             "DATE_FORMAT(t.dateRegister, '%Y-%m-%d %H:%i:%s') AS data_compra"
  155.             "DATE_FORMAT(t.dateApprove, '%Y-%m-%d %H:%i:%s') AS data_conclusao",
  156.             "p.id AS plano_id",
  157.             "t.amount AS valor_pago",
  158.             "u.id AS aluno_id",
  159.             "u.name AS nome",
  160.             "u.email"
  161.         ];
  162.         $transactionClass Transaction::class;
  163.         $productClass Product::class;
  164.         $userClass User::class;
  165.         $userSubscription UserSubscription::class;
  166.         
  167.         $joins = [
  168.             "{$productClass} AS p" => "p.id = ti.product AND p.type = 2",
  169.             "{$transactionClass} AS t" => "t.id = ti.transaction AND t.deleted = 0",
  170.             "{$userClass} AS u" => "u.id = t.user",
  171.             "{$userSubscription} AS us" => "us.user = t.user AND us.product = ti.product"
  172.         ];
  173.         $id $request->get('id');
  174.         $userId $request->get('usuario_id');
  175.         $productId $request->get('plano_id');
  176.         $dateStart $request->get('data_inicio');
  177.         $dateEnd $request->get('data_fim');
  178.         $paginate $request->get('paginate');
  179.         $limit = (int)$request->get('limit');
  180.         $offset = (int)$request->get('offset');
  181.         $filter = [
  182.             "ti.deleted" => 0,
  183.             "ti.type" => 2
  184.         ];
  185.         if(empty($limit) || $limit 1000){
  186.             $limit 1000;
  187.         }
  188.         if(empty($offset)){
  189.             $offset 0;
  190.         }
  191.         if(!empty($id)){
  192.             $filter["us.id"] = $id;
  193.         }
  194.         if(!empty($userId)){
  195.             $filter["t.user"] = $userId;
  196.         }
  197.         if(!empty($productId)){
  198.             $filter["ti.product"] = $productId;
  199.         }
  200.         if(empty($dateStart) && !empty($dateEnd)){
  201.             $dateStart date('Y-m-d'strtotime("-1 day",strtotime($dateEnd)));  
  202.         }
  203.         if(empty($dateEnd) && !empty($dateStart)){
  204.             $dateEnd date('Y-m-d'strtotime("+1 day",strtotime($dateStart))); 
  205.         }
  206.         $dateStart date('Y-m-d 00:00:00'strtotime($dateStart));
  207.         $dateEnd date('Y-m-d 23:59:59'strtotime($dateEnd));
  208.         
  209.         if(!empty($dateStart) && !empty($dateEnd)){
  210.             $filter["whereText"] = "t.dateRegister BETWEEN '{$dateStart}' AND '{$dateEnd}'"
  211.         }
  212.         $order = ["ti.id" => "ASC"];
  213.         $data $this->repository->paginate("ti"null$columns$joins$filter$order$limit$offset);
  214.         if(count($data['rows']) == 0){
  215.             return $this->eadResponse(nullErrorEnum::NO_CONTENTnull);
  216.         }
  217.         if($paginate == 1){
  218.             unset($data['searchText']);
  219.             return $this->json($data);
  220.         }
  221.         return $this->json($data['rows']);
  222.     }
  223.     /**
  224.      * Listagem de vendas dos cursos do EAD.
  225.      *
  226.      * @Route("/api/1/sales", methods={"GET"})
  227.      * @OA\Response(
  228.      *     response=200,
  229.      *     description="Retorna as vendas do EAD.",
  230.      *     @OA\JsonContent(
  231.      *         type="object",
  232.      *         @OA\Property(property="vendas_id", type="integer", example=1, description="Id da venda cadastrada no EAD."),
  233.      *         @OA\Property(property="transacao_id", type="string", example="", description="Id da transação cadastrada no EAD."),
  234.      *         @OA\Property(property="produto_id", type="integer", example="", description="Id do curso ou plano no EAD."),
  235.      *         @OA\Property(property="valor", type="float", example="", description="Valor da transação."),
  236.      *         @OA\Property(property="valor_liquido", type="float", example="", description="Valor da transação sem as taxas."),
  237.      *         @OA\Property(property="taxas", type="float", example="", description="Taxas cobradas da transação."),
  238.      *         @OA\Property(property="cupom", type="string", example="", description="Cupom utilizado na transação."),
  239.      *         @OA\Property(property="lucro_ead", type="float", example="", description="Lucro do EAD na transação."),
  240.      *         @OA\Property(property="nome_afiliado", type="string", example="Somente Hotmart, Eduzz, Provi, Braip, Monetizze, Kiwify, DigitalManagerGuru, AppMax, Doppus, Ticto, Abmex, PerfectPay, Evermart, HeroSpark, Yampi, CartPanda e Kirvano.", description="Nome do afiliado que indicou a venda."),
  241.      *         @OA\Property(property="lucro_afiliado", type="float", example="Somente Hotmart, Eduzz, Provi, Braip, Monetizze, Kiwify, DigitalManagerGuru, AppMax, Doppus, Ticto, Abmex, PerfectPay, Evermart, HeroSpark, Yampi, CartPanda e Kirvano.", description="Lucro do afiliado na transação."),
  242.      *         @OA\Property(property="data_transacao", type="datetime", example="", description="Data da trasanção."),
  243.      *         @OA\Property(property="data_conclusao", type="datetime", example="", description="Data que pagamento foi recebido."),
  244.      *         @OA\Property(property="tipo_pagamento", type="integer", example="", description="Forma utilizada de pagamento(1-Cartão de crédito / 2-Boleto)."),
  245.      *         @OA\Property(property="status_transacao", type="integer", example="", description="1-Aguardando Pagamento / 2-Aprovado / 3-Cancelado / 4-Em disputa / 5-Reembolso em andamento / 6-Reembolso / 7-Chargeback / 8-Completo"),
  246.      *         @OA\Property(property="aluno_id", type="integer", example="", description="Id do aluno cadastrado no EAD."),
  247.      *         @OA\Property(property="nome_aluno", type="string", example="", description="Nome do aluno."),
  248.      *         @OA\Property(property="email", type="string", example="", description="E-mail do aluno."),
  249.      *         @OA\Property(property="faturamento_nome", type="string", example="", description="Nome utilizado na compra."),
  250.      *         @OA\Property(property="faturamento_email", type="string", example="", description="E-mail utilizado na compra."),
  251.      *         @OA\Property(property="faturamento_documento", type="string", example="", description="Documento utilizado na compra."),
  252.      *         @OA\Property(property="faturamento_telefone", type="string", example="", description="Telefone utilizado na compra."),
  253.      *         @OA\Property(property="faturamento_endereco", type="string", example="", description="Endereço utilizado na compra."),
  254.      *         @OA\Property(property="faturamento_numero", type="string", example="", description="Número utilizado na compra."),
  255.      *         @OA\Property(property="faturamento_complemento", type="string", example="", description="Complemento utilizado na compra."),
  256.      *         @OA\Property(property="faturamento_bairro", type="string", example="", description="Bairro utilizado na compra."),
  257.      *         @OA\Property(property="faturamento_cep", type="string", example="", description="CEP utilizado na compra."),
  258.      *         @OA\Property(property="faturamento_cidade", type="string", example="", description="Cidade utilizado na compra."),
  259.      *         @OA\Property(property="faturamento_uf", type="string", example="", description="UF utilizado na compra."),
  260.      *         @OA\Property(property="vendedor_id", type="integer", example="", description="Id do vendedor cadastrado no EAD."),
  261.      *         @OA\Property(property="nome_vendedor", type="string", example="", description="Nome do professor(a) do curso."),
  262.      *         @OA\Property(property="tipo_venda", type="integer", example="", description="Tipo da venda(1-Vendas / 2-Assinaturas)."),
  263.      *         @OA\Property(property="gateway", type="string", example="", description="1-Manual / 2-PagSeguro / 3-Paypal / 4-Hotmart / 5-Eduzz / 6-EAD Checkout / 7-Provi / 8-Braip / 9-Monetizze / 9-Kiwify / 10-DigitalManagerGuru / 11-AppMax / 12-Doppus / 13-Ticto / 14-MercadoPago / 15-Abmex / 16-PerfectPay / 17-Evermart / 18-HeroSpark / 19-Yampi / 20-CartPanda / 21-Kirvano"),
  264.      *         @OA\Property(property="origem", type="integer", example="", description="1-Carrinho Padrão / 2-Carrinho customizado / 3-Página de chekcout / 4-Recorrência / 5-Manual / 6-Cobrança / 7-Compra com um clique / 8-Externo"),
  265.      *         @OA\Property(property="utms_url", type="application/json", example="", description="UTM's URL")
  266.      *     )
  267.      * )
  268.      * 
  269.      * @OA\Response(
  270.      *     response=204,
  271.      *     description="No content"
  272.      * )
  273.      * 
  274.      * @OA\Response(
  275.      *     response=401,
  276.      *     description="Token not found",
  277.      *     @OA\JsonContent(
  278.      *         type="object",
  279.      *         @OA\Property(property="http_status", type="integer", example=401, description="Token not found"),
  280.      *         @OA\Property(property="message", type="string", example="Token not found")
  281.      *     )
  282.      * )
  283.      * 
  284.      * @OA\Response(
  285.      *     response=429,
  286.      *     description="Too many requests",
  287.      *     @OA\JsonContent(
  288.      *         type="object",
  289.      *         @OA\Property(property="http_status", type="integer", example=429, description="Too many requests"),
  290.      *         @OA\Property(property="message", type="string", example="Too many requests")
  291.      *     )
  292.      * )
  293.      * 
  294.      * @OA\Response(
  295.      *     response=500,
  296.      *     description="Internal Server Error",
  297.      *     @OA\JsonContent(
  298.      *         type="object",
  299.      *         @OA\Property(property="http_status", type="integer", example=500, description="Internal Server Error"),
  300.      *         @OA\Property(property="message", type="string", example="Internal Server Error")
  301.      *     )
  302.      * )
  303.      * 
  304.      * @OA\Parameter(
  305.      *     name="id",
  306.      *     in="query",
  307.      *     description="Venda Id, se enviar venda id não é necessário envio do código da transação",
  308.      *     @OA\Schema(type="integer")
  309.      * )
  310.      * 
  311.      * @OA\Parameter(
  312.      *     name="curso",
  313.      *     in="query",
  314.      *     description="Produto Id",
  315.      *     @OA\Schema(type="integer")
  316.      * )
  317.      * 
  318.      * @OA\Parameter(
  319.      *     name="transacao",
  320.      *     in="query",
  321.      *     description="Código da Transação, se enviar código da transação não é necessário envio da venda id",
  322.      *     @OA\Schema(type="integer")
  323.      * )
  324.      * 
  325.      * @OA\Parameter(
  326.      *     name="aluno_id",
  327.      *     in="query",
  328.      *     description="Aluno Id",
  329.      *     @OA\Schema(type="integer")
  330.      * )
  331.      * 
  332.      * @OA\Parameter(
  333.      *     name="vendedor_id",
  334.      *     in="query",
  335.      *     description="Vendedor Id",
  336.      *     @OA\Schema(type="integer")
  337.      * )
  338.      * 
  339.      * @OA\Parameter(
  340.      *     name="cupom",
  341.      *     in="query",
  342.      *     description="Cupom aplicado",
  343.      *     @OA\Schema(type="string")
  344.      * )
  345.      * 
  346.      * @OA\Parameter(
  347.      *     name="status",
  348.      *     in="query",
  349.      *     description="1 - Aguardando Pagamento, 2 - Confirmado, 3 - Cancelado, 4 - Em distputa, 5 - Estorno em andamento, 6 - Reembolso, 7 - Chargeback",
  350.      *     @OA\Schema(type="integer")
  351.      * )
  352.      * 
  353.      * @OA\Parameter(
  354.      *     name="data_inicio",
  355.      *     in="query",
  356.      *     description="Data inicial início da transação (yyyy-mm-dd)",
  357.      *     @OA\Schema(type="string")
  358.      * )
  359.      * 
  360.       * @OA\Parameter(
  361.      *     name="data_fim",
  362.      *     in="query",
  363.      *     description="Data final início da transação (yyyy-mm-dd)",
  364.      *     @OA\Schema(type="string")
  365.      * )
  366.      * 
  367.      * @OA\Parameter(
  368.      *     name="paginate",
  369.      *     in="query",
  370.      *     description="Informaçoes para paginação",
  371.      *     @OA\Schema(type="integer")
  372.      * )
  373.      * 
  374.      * @OA\Parameter(
  375.      *      name="limit",
  376.      *      in="query",
  377.      *      description="Maximum number of data returned per page, default value 1000",
  378.      *      @OA\Schema(type="integer")
  379.      * )
  380.      * 
  381.      * @OA\Parameter(
  382.      *      name="offset",
  383.      *      in="query",
  384.      *      description="Indicates the start of reading, if not informed default value will be 0",
  385.      *      @OA\Schema(type="integer")
  386.      * )
  387.      * 
  388.      * @OA\Tag(name="Transações")
  389.      * @Security(name="Bearer")
  390.      * 
  391.     */
  392.     public function getTransactionItem(Request $request)
  393.     {
  394.        
  395.         $this->requestUtil->setRequest($request)->setData();
  396.         $columns = [
  397.             "ti.id AS vendas_id",
  398.             "t.hash AS transacao_id",
  399.             "p.id AS produto_id",
  400.             "ti.amount AS valor_pago",
  401.             "ti.netAmount AS valor_liquido",
  402.             "ti.feeAmount AS taxas",
  403.             "ti.couponKey AS cupom",
  404.             "ti.commissionAmount AS comissao_professor",
  405.             "ti.commissionPercent AS porcentagem_professor",
  406.             "ti.affiliateName AS nome_afiliado",
  407.             "ti.affiliateCommission AS comissao_afiliado",
  408.             "ti.netFinalAmount AS lucro_ead",
  409.             "DATE_FORMAT(t.dateRegister, '%Y-%m-%d %H:%i:%s') AS data_transacao"
  410.             "DATE_FORMAT(t.dateApprove, '%Y-%m-%d %H:%i:%s') AS data_conclusao",
  411.             "t.paymentMethod AS tipo_pagamento",
  412.             "t.status AS status_transacao",
  413.             "u.id AS aluno_id",
  414.             "u.name AS nome",
  415.             "u.email",
  416.             "uci.name AS faturamento_nome",
  417.             "uci.email AS faturamento_email",
  418.             "uci.document AS faturamento_documento",
  419.             "uci.phone AS faturamento_telefone",
  420.             "uci.address AS faturamento_endereco",
  421.             "uci.addressNumber AS faturamento_numero",
  422.             "uci.addressComplement AS faturamento_complemento",
  423.             "uci.addressNeighborhood AS faturamento_bairro",
  424.             "uci.zipCode AS faturamento_cep",
  425.             "c.name AS faturamento_cidade",
  426.             "s.uf AS faturamento_uf",
  427.             "uv.id AS vendedor_id",
  428.             "uv.name AS nome_vendedor",
  429.             "ti.type AS tipo_venda",
  430.             "t.gateway",
  431.             "t.origin AS origem",
  432.             "ti.utmsUrl AS utms_url"
  433.         ];
  434.         $transactionClass Transaction::class;
  435.         $productClass Product::class;
  436.         $productCouponClass ProductCoupon::class;
  437.         $userClass User::class;
  438.         $userCheckoutInfoClass UserCheckoutInfo::class;
  439.         $cityClass City::class;
  440.         $stateClass State::class;
  441.         
  442.         $joins = [
  443.             "{$productClass} AS p" => "p.id = ti.product",
  444.             "{$transactionClass} AS t" => "t.id = ti.transaction AND t.deleted = 0",
  445.             "{$userClass} AS u" => "u.id = t.user",
  446.             "{$userClass} AS uv" => "uv.id = ti.userSeller",
  447.             "{$userCheckoutInfoClass} AS uci" => ["LEFT""uci.id = t.userCheckoutInfo"],
  448.             "{$cityClass} AS c" => ["LEFT""c.id = uci.city"],
  449.             "{$stateClass} AS s" => ["LEFT""s.id = uci.state"]
  450.         ];
  451.         $transactionItemId $request->get('id');
  452.         $productId $request->get('curso');
  453.         $transactionHash $request->get('transacao');
  454.         $userId $request->get('aluno_id');
  455.         $userSeller $request->get('vendedor_id');
  456.         $transactionStatus $request->get('status');
  457.         $transactionStart $request->get('data_inicio');
  458.         $transactionEnd $request->get('data_fim');
  459.         $paginate $request->get('paginate');
  460.         $limit = (int)$request->get('limit');
  461.         $offset = (int)$request->get('offset');
  462.         $filter = [
  463.             "t.user" => [ "!="],
  464.             "ti.deleted" => 0
  465.         ];
  466.         if(empty($limit) || $limit 1000){
  467.             $limit 1000;
  468.         }
  469.         if(empty($offset)){
  470.             $offset 0;
  471.         }
  472.         if(!empty($userId)){
  473.             $filter["t.user"] = $userId;
  474.         }
  475.         if(!empty($transactionHash)){
  476.             $filter["t.hash"] = $transactionHash;
  477.         }
  478.         if(!empty($transactionStatus)){
  479.             $filter["t.status"] = $transactionStatus;
  480.         }
  481.         if(!empty($transactionStatus)){
  482.             $filter["t.status"] = $transactionStatus;
  483.         }
  484.         if(empty($transactionStart) && !empty($transactionEnd)){
  485.             $transactionStart date('Y-m-d'strtotime("-1 day",strtotime($transactionEnd)));  
  486.         }
  487.         if(empty($transactionEnd) && !empty($transactionStart)){
  488.             $transactionEnd date('Y-m-d'strtotime("+1 day",strtotime($transactionStart))); 
  489.         }
  490.         
  491.         if(!empty($transactionStart) && !empty($transactionEnd)){
  492.             $filter["whereText"] = " DATE_FORMAT(t.dateRegister, '%Y-%m-%d') BETWEEN '{$transactionStart}' AND '{$transactionEnd}'"
  493.         }
  494.         
  495.         if(!empty($productId)){
  496.             $filter["ti.product"] = $productId;
  497.         }
  498.         if(!empty($transactionItemId)){
  499.             $filter["ti.id"] = $transactionItemId;
  500.         }
  501.         if(!empty($userSeller)){
  502.             $filter["ti.userSeller"] = $userSeller;
  503.         }
  504.         $order = ["ti.id" => "ASC"];
  505.         $data $this->repository->paginate(
  506.             "ti"
  507.             null
  508.             $columns
  509.             $joins
  510.             $filter
  511.             $order
  512.             $limit
  513.             $offset
  514.         );
  515.         if(count($data['rows']) == 0){
  516.             return $this->eadResponse(nullErrorEnum::NO_CONTENTnull);
  517.         }
  518.         if($paginate == 1){
  519.             unset($data['searchText']);
  520.             return $this->json($data);
  521.         }
  522.         
  523.         return $this->json($data['rows']);
  524.     }
  525.     /**
  526.      * Excluir uma transação do EAD.
  527.      *
  528.      * @Route("/api/1/sales/{id}", methods={"DELETE"})
  529.      * @OA\Response(
  530.      *     response=200,
  531.      *     description="Success",
  532.      *     @OA\JsonContent(
  533.      *         type="object",
  534.      *         @OA\Property(property="http_status", type="integer", example=200, description="Success"),
  535.      *         @OA\Property(property="message", type="string", example="Success"),
  536.      *         @OA\Property(property="data", nullable=true, type="application/json", example="null"),  
  537.      *     )
  538.      * )
  539.      * 
  540.      * @OA\Response(
  541.      *     response=401,
  542.      *     description="Token not found",
  543.      *     @OA\JsonContent(
  544.      *         type="object",
  545.      *         @OA\Property(property="http_status", type="integer", example=401, description="Token not found"),
  546.      *         @OA\Property(property="message", type="string", example="Token not found")
  547.      *     )
  548.      * )
  549.      * 
  550.      * @OA\Response(
  551.      *     response=404,
  552.      *     description="Not found",
  553.      *     @OA\JsonContent(
  554.      *         type="object",
  555.      *         @OA\Property(property="http_status", type="integer", example=404, description="Not found"),
  556.      *         @OA\Property(property="message", type="string", example="Not found"),
  557.      *         @OA\Property(
  558.      *              property="data", 
  559.      *              type="array", 
  560.      *              collectionFormat="multi", 
  561.      *              @OA\Items(
  562.      *                  type="string",
  563.      *                  example="field"
  564.      *              )
  565.      *         ),
  566.      *     )
  567.      * )
  568.      * 
  569.      * @OA\Response(
  570.      *     response=429,
  571.      *     description="Too many requests",
  572.      *     @OA\JsonContent(
  573.      *         type="object",
  574.      *         @OA\Property(property="http_status", type="integer", example=429, description="Too many requests"),
  575.      *         @OA\Property(property="message", type="string", example="Too many requests")
  576.      *     )
  577.      * )
  578.      * 
  579.      * @OA\Response(
  580.      *     response=500,
  581.      *     description="Internal Server Error",
  582.      *     @OA\JsonContent(
  583.      *         type="object",
  584.      *         @OA\Property(property="http_status", type="integer", example=500, description="Internal Server Error"),
  585.      *         @OA\Property(property="message", type="string", example="Internal Server Error")
  586.      *     )
  587.      * )
  588.      * 
  589.      * @OA\Parameter(
  590.      *     name="id",
  591.      *     in="path",
  592.      *     description="Transação Id",
  593.      *     required=true,
  594.      *     @OA\Schema(type="string")
  595.      * )
  596.      * 
  597.      * @OA\Tag(name="Transações")
  598.      * @Security(name="Bearer")
  599.      * 
  600.     */
  601.     public function deleteTransaction(Request $request)
  602.     {
  603.         $this->requestUtil->setRequest($request)->setData();
  604.         $transactionId $request->get('id');
  605.         $transaction $this->em->getRepository(Transaction::class)->findOneBy([
  606.             "id" => $transactionId,
  607.             "deleted" => TransactionItemEnum::ITEM_NO_DELETED
  608.         ]);
  609.         if (!$transaction) {
  610.             return $this->eadResponse(nullErrorEnum::NOT_FOUNDErrorEnum::MESSAGE_NOT_FOUND);
  611.         }
  612.         $this->em->getRepository(Transaction::class)->delete($transactionTrashEnum::TRANSACTION);
  613.         $this->userLogService->logDelete(
  614.             "transaction"
  615.             $transaction->getId(), 
  616.             null
  617.             UserLogEnum::ORIGIN_CLIENT_API
  618.         );
  619.         return $this->eadResponse(nullErrorEnum::SUCCESSErrorEnum::MESSAGE_SUCCESS);
  620.     }
  621. }