src/Controller/DashboardController.php line 616

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\AtualizacaoEstoque;
  4. use App\Entity\ContagemRequisicoesBling;
  5. use App\Entity\EstoqueMinimo;
  6. use App\Entity\SincronizacaoEstoque;
  7. use App\Entity\SincronizacaoProdutos;
  8. use App\Entity\ProcessoAtualizacao;
  9. use App\Entity\DuplicidadeEstoque;
  10. use App\Entity\EntregaPedido;
  11. use App\Entity\ProdutoBling;
  12. use App\Repository\AtualizacaoEstoqueRepository;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  16. use App\Entity\PacoteAtualizacoes;
  17. use App\Entity\DemandaPedido;
  18. use Symfony\Component\HttpFoundation\JsonResponse;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Contracts\HttpClient\HttpClientInterface;
  21. class DashboardController extends BaseController
  22. {
  23.    
  24.     /**
  25.      * @Route("/proposta/{codigo}/{tipo}", name="link_proposta")
  26.      */
  27.     public function propostaLink(Request $request$codigo$tipoHttpClientInterface $client)
  28.     {
  29.         $dados = [];
  30.         
  31.         $proposta $this->getProposta($codigo$client$tipo);
  32.         
  33.         if($proposta===false){
  34.             exit('proposta nao localizada');
  35.         }
  36.         
  37.         $file = ($tipo==1) ? 'proposta' 'proposta-revenda';
  38.         
  39.         return $this->render('app_externo/telas/'.$file.'.html.twig', ['dados'=>$proposta'com_obs'=>false]);
  40.     }
  41.     
  42.     /**
  43.      * @Route("/pedido/{codigo}", name="segunda_via_pedido")
  44.      */
  45.     public function segundaViaPedido(Request $request$codigoHttpClientInterface $client)
  46.     {
  47.         $pedidoLocal $this->getDoctrine()->getRepository(EntregaPedido::class)->findOneBy(['pedido'=>$codigo]);
  48.         $pedidoReplace str_replace('-Assistência',''$codigo);
  49.         if(!$pedidoLocal instanceof EntregaPedido) {
  50.             
  51.             $linkNf $this->getNotaFiscalLink($pedidoReplace$client);
  52.             if($linkNf!=''){
  53.                 header("Location: " $linkNf);
  54.                 exit;
  55.             }
  56.             exit('Este link não corresponde à uma NF e nem pedido.');
  57.         }
  58.         
  59.         $dados $this->getPedido(trim($pedidoReplace), $clienttrue);
  60.         
  61.         $assinaturaAceitePedido '';
  62.         $assinadoAt '';
  63.         $demanda $this->getDoctrine()->getRepository(DemandaPedido::class)->findOneBy(['pedido'=>$pedidoLocal]);
  64.         if($demanda instanceof DemandaPedido){
  65.             if($demanda->getAssinatura()!=null){
  66.                 $assinaturaAceitePedido $demanda->getAssinatura();
  67.                 $assinadoAt = [
  68.                     'dia' => $demanda->getAssinadoAt()->format('d'),
  69.                     'mes' => $demanda->getAssinadoAt()->format('m'),
  70.                     'ano' => $demanda->getAssinadoAt()->format('Y')
  71.                 ];
  72.             }
  73.         }
  74.         
  75.         return $this->render('app_externo/telas/pedido.html.twig', ['dados'=>$dados'com_obs'=>false'assinatura'=>$assinaturaAceitePedido'assinadoAt'=>$assinadoAt]);
  76.     }
  77.     
  78.     private function getProposta($numero$client$tipo) {
  79.         
  80.         $response $client->request(
  81.             'GET',
  82.             SincronizacaoController::URL_API_BLING '/propostacomercial/'.$numero.'/json/',
  83.             [
  84.                 'query' => [
  85.                     'apikey' => SincronizacaoController::KEY_API_POLLO
  86.                 ]
  87.             ]
  88.         );
  89.         $statusCode $response->getStatusCode();
  90.         
  91.         $dados = [
  92.             'telefone' =>'',
  93.             'endereco' => '',
  94.             'numeroNf' => '',
  95.             'numeroPedido' => $numero,
  96.             'isUrgente' => 'Não',
  97.             'assistencia' => 'Não',
  98.             'contato' => ''
  99.             'periodosEntrega' => 'Qualquer Horário',
  100.             'entregarHoje' => 'Se Possível Hoje',
  101.             'vendedor' => '',
  102.             'embalagem' => 'Desmontado',
  103.             'exigeLadoBalcao' => false// Qual lado do balcão
  104.             'cnpj' => '',
  105.             'frete' =>'',
  106.             'aosCuidadosDe' => ''
  107.         ];
  108.         if ($statusCode == SincronizacaoController::HTTP_STATUS_CODE_OK) {
  109.             $content $response->toArray();
  110.             if(isset($content['retorno'])){
  111.                 if(isset($content['retorno']['propostascomerciais'])){
  112.                     if(count($content['retorno']['propostascomerciais']) > 0) {
  113.                         if(isset($content['retorno']['propostascomerciais'][0])){
  114.                             
  115.                             $proposta $content['retorno']['propostascomerciais'][0]['propostacomercial'];
  116.                             
  117.                             //print_r($proposta); exit;
  118.                             
  119.                                                         
  120.                             if(!empty($proposta['cliente']['endereco'])){
  121.                                 
  122.                                     $dados['endereco'] = $proposta['cliente']['endereco'] . ',  ' 
  123.                                                          $proposta['cliente']['numero'] . ',  ' 
  124.                                                          $proposta['cliente']['complemento'] . ',  ' 
  125.                                                          $proposta['cliente']['bairro'] . ',  ' 
  126.                                                          $proposta['cliente']['cidade'] . '/' 
  127.                                                          $proposta['cliente']['uf'] . ',  ' 
  128.                                                          $proposta['cliente']['cep'] . ',  ';
  129.                                                          
  130.                                     $dados['contato'] = $proposta['cliente']['nome'];
  131.                             }
  132.                             
  133.                             $telefones = [];
  134.                             if(isset($proposta['cliente']['celular'])){
  135.                                 if($proposta['cliente']['celular']!=""){
  136.                                     $telefone $proposta['cliente']['celular'];
  137.                                     $telefone '55'.$telefone;
  138.                                     $telefones[] = preg_replace('/\D/'''$telefone);
  139.                                     
  140.                                 }
  141.                             }
  142.                             
  143.                             if(isset($proposta['cliente']['fone'])){
  144.                                 if($proposta['cliente']['fone']!=""){
  145.                                     $telefone $proposta['cliente']['fone'];
  146.                                     $telefone '55'.$telefone;
  147.                                     $telefones[] = preg_replace('/\D/'''$telefone);
  148.                                 }
  149.                             }
  150.                             
  151.                             $dados['telefone'] = implode(' - '$telefones);
  152.                             
  153.                             
  154.                             $dados['vendedor'] =  $proposta['vendedor'];
  155.                             $dados['aosCuidadosDe'] =  $proposta['aosCuidadosDe'];
  156.                             $dados['cnpj'] = '';
  157.                             $dados['nome'] = $proposta['cliente']['nome'];
  158.                             $dados['totalvenda'] = '';
  159.                             $dados['itens'] = [];
  160.                             
  161.                             if($proposta['cliente']['cpfCnpj']){
  162.                                 $dados['cnpj'] = $proposta['cliente']['cpfCnpj'];
  163.                             }
  164.                             
  165.                             $dataPedido = \DateTime::createFromFormat('Y-m-d'$proposta['data']);
  166.                             $dados['data'] = $dataPedido->format('d/m/Y');
  167.                             
  168.                             $totalItens 0;
  169.                             $totalItensTotal 0;
  170.                             $valorSubTotal 0;
  171.                             $descontosItens 0;
  172.                             if(!empty($proposta['itens'])){
  173.                                 foreach ($proposta['itens'] as $item) {
  174.                                     
  175.                                     if(in_array($item['item']['codigo'], $this->skusDebalcao())){
  176.                                         $dados['exigeLadoBalcao'] = true;
  177.                                     }
  178.                                     
  179.                                     $totalItens++;
  180.                                     $valorTotal $item['item']['quantidade'] * $item['item']['valorUnidade'];
  181.                                     $valorSubTotal += $valorTotal;
  182.                                     $totalItensTotal += $item['item']['quantidade'];
  183.                                     $descontosItens += $item['item']['descontoItem'];
  184.                                     
  185.                                     $img '';
  186.                                     $pathFile '/www/wwwroot/gestor.moveispollo.com.br/public/uploads/produtos/' $item['item']['codigo'] . '.jpg';
  187.                                     
  188.                                     if(file_exists($pathFile)){
  189.                                         $img 'https://polo.srvtmp.com.br/uploads/produtos/' $item['item']['codigo'] . '.jpg';
  190.                                     } else {
  191.                                         
  192.                                         $produtoBling $this->getProduto(SincronizacaoController::KEY_API_POLLO
  193.                                             $item['item']['codigo'], $client$xml=false);
  194.                                             
  195.                                         if(isset($produtoBling['retorno']['produtos'][0])){
  196.                                             if(isset($produtoBling['retorno']['produtos'][0]['produto']['imagem'][0])){
  197.                                                 $img $produtoBling['retorno']['produtos'][0]['produto']['imagem'][0]['link'];
  198.                                                 $img str_ireplace('\\','',$img);
  199.                                             }
  200.                                         }
  201.                                     }
  202.                         
  203.                                     $dados['itens'][] = [
  204.                                         'codigo' => $item['item']['codigo'],
  205.                                         'descricao' => $item['item']['descricao'],
  206.                                         'un' => $item['item']['un'],
  207.                                         'quantidade' => abs($item['item']['quantidade']),
  208.                                         'valorunidade' => number_format($item['item']['valorUnidade'], 2',''.'),
  209.                                         'valorTotal' => number_format($valorTotal2',''.'),
  210.                                         'img' => $img,
  211.                                         //'estruturas' => $this->getEstruturas($item['item']['codigo'])
  212.                                     ];
  213.                                 }
  214.                             }
  215.                             
  216.                             $totalComDesconto $proposta['subtotal'];
  217.                             
  218.                             // Definir o percentual de desconto
  219.                             $percentualDesconto = ($tipo==1) ? 10 5;
  220.                             
  221.                             // Calcular o valor com desconto
  222.                             $totalComDesconto $totalComDesconto - ($totalComDesconto $percentualDesconto 100);
  223.                             $totalComDesconto $totalComDesconto $proposta['valorFrete'];
  224.                             
  225.                             $dados['numero_itens'] = $totalItens;
  226.                             $dados['numero_itens_total'] = $totalItensTotal;
  227.                             $dados['descontos'] = number_format($descontosItens2',''.');
  228.                             $dados['valorTotalPedidoSemFrete'] = number_format($proposta['subtotal'], 2',''.');
  229.                             $dados['valorTotalPedido'] = number_format($proposta['totalOrcamento'], 2',''.');
  230.                             $dados['descontoGeral'] = $proposta['desconto'];
  231.                             $dados['frete'] = (isset($proposta['valorFrete'])) ? $proposta['valorFrete'] : '';
  232.                             $dados['valorTotalPedidoComDesconto'] = number_format($totalComDesconto2',''.');
  233.                             $dados['percentualDesconto'] = $percentualDesconto;
  234.                             //$dados['valorTotalComDesconto'] = number_format($content['retorno']['pedidos'][0]['pedido']['totalvenda'], 2, ',', '.');
  235.                             
  236.                             return $dados;
  237.                         }
  238.                     }
  239.                 }
  240.             }
  241.         } else {
  242.             return false;
  243.         }
  244.         return false;
  245.     }
  246.     
  247.     private function getPedido($numero$client$tipoPedido='pedido'$pedidoMake=null) {
  248.         
  249.         $response $client->request(
  250.             'GET',
  251.             SincronizacaoController::URL_API_BLING '/pedido/'.$numero.'/json/',
  252.             [
  253.                 'query' => [
  254.                     'apikey' => SincronizacaoController::KEY_API_POLLO
  255.                 ]
  256.             ]
  257.         );
  258.         $statusCode $response->getStatusCode();
  259.         $numeroNota '';
  260.         $dados = [
  261.             'telefone' =>'',
  262.             'endereco' => '',
  263.             'endereco_entrega' => '',
  264.             'tipo'     => $tipoPedido,
  265.             'numeroNf' => '',
  266.             'numeroPedido' => $numero,
  267.             'isUrgente' => 'Não',
  268.             'assistencia' => 'Não',
  269.             'contato' => ''
  270.             'periodosEntrega' => 'Qualquer Horário',
  271.             'entregarHoje' => 'Se Possível Hoje',
  272.             'vendedor' => '',
  273.             'embalagem' => 'Desmontado',
  274.             'exigeLadoBalcao' => false// Qual lado do balcão
  275.             'cnpj' => '',
  276.             'frete' =>''
  277.         ];
  278.         if ($statusCode == SincronizacaoController::HTTP_STATUS_CODE_OK) {
  279.             $content $response->toArray();
  280.             if(isset($content['retorno'])){
  281.                 if(isset($content['retorno']['pedidos'])){
  282.                     if(count($content['retorno']['pedidos']) > 0) {
  283.                         if(isset($content['retorno']['pedidos'][0])){
  284.                             
  285.                             $pedido $content['retorno']['pedidos'][0]['pedido'];
  286.                             
  287.                             if(!empty($content['retorno']['pedidos'][0]['pedido']['cliente']['endereco'])){
  288.                                 
  289.                                     $dados['endereco'] = $content['retorno']['pedidos'][0]['pedido']['cliente']['endereco'] . ',  ' 
  290.                                                          $content['retorno']['pedidos'][0]['pedido']['cliente']['numero'] . ',  ' 
  291.                                                          $content['retorno']['pedidos'][0]['pedido']['cliente']['complemento'] . ',  ' 
  292.                                                          $content['retorno']['pedidos'][0]['pedido']['cliente']['bairro'] . ',  ' 
  293.                                                          $content['retorno']['pedidos'][0]['pedido']['cliente']['cidade'] . '/' 
  294.                                                          $content['retorno']['pedidos'][0]['pedido']['cliente']['uf'] . ',  ' 
  295.                                                          $content['retorno']['pedidos'][0]['pedido']['cliente']['cep'] . ',  ';
  296.                                                          
  297.                                     $dados['contato'] = $content['retorno']['pedidos'][0]['pedido']['cliente']['nome'];
  298.                             }
  299.                             
  300.                             $telefones = [];
  301.                             if(isset($content['retorno']['pedidos'][0]['pedido']['cliente']['celular'])){
  302.                                 if($content['retorno']['pedidos'][0]['pedido']['cliente']['celular']!=""){
  303.                                     $telefone $content['retorno']['pedidos'][0]['pedido']['cliente']['celular'];
  304.                                     $telefone '55'.$telefone;
  305.                                     $telefones[] = preg_replace('/\D/'''$telefone);
  306.                                     
  307.                                 }
  308.                             }
  309.                             
  310.                             if(isset($content['retorno']['pedidos'][0]['pedido']['cliente']['fone'])){
  311.                                 if($content['retorno']['pedidos'][0]['pedido']['cliente']['fone']!=""){
  312.                                     $telefone $content['retorno']['pedidos'][0]['pedido']['cliente']['fone'];
  313.                                     $telefone '55'.$telefone;
  314.                                     $telefones[] = preg_replace('/\D/'''$telefone);
  315.                                 }
  316.                             }
  317.                             
  318.                             $dados['telefone'] = implode('|'$telefones);
  319.                             
  320.                             if(isset($content['retorno']['pedidos'][0]['pedido']['nota'])){
  321.                                 $dados['numeroNf'] = intval($content['retorno']['pedidos'][0]['pedido']['nota']['numero']);
  322.                             }
  323.                             
  324.                             $dados['vendedor'] =  $content['retorno']['pedidos'][0]['pedido']['vendedor'];
  325.                             
  326.                             $dados['cnpj'] = '';
  327.                             $dados['totalvenda'] = '';
  328.                             $dados['itens'] = [];
  329.                             
  330.                             if(!empty($content['retorno']['pedidos'][0]['pedido']['cliente']['cnpj'])){
  331.                                 $dados['cnpj'] = $content['retorno']['pedidos'][0]['pedido']['cliente']['cnpj'];
  332.                             }
  333.                             
  334.                             $dataPedido = \DateTime::createFromFormat('Y-m-d'$content['retorno']['pedidos'][0]['pedido']['data']);
  335.                             $dados['data'] = $dataPedido->format('d/m/Y');
  336.                             
  337.                             $totalItens 0;
  338.                             $totalItensTotal 0;
  339.                             $valorSubTotal 0;
  340.                             $descontosItens 0;
  341.                             if(!empty($content['retorno']['pedidos'][0]['pedido']['itens'])){
  342.                                 foreach ($content['retorno']['pedidos'][0]['pedido']['itens'] as $item) {
  343.                                     
  344.                                     if(in_array($item['item']['codigo'], $this->skusDebalcao())){
  345.                                         $dados['exigeLadoBalcao'] = true;
  346.                                     }
  347.                                     
  348.                                     $totalItens++;
  349.                                     $valorTotal $item['item']['quantidade'] * $item['item']['valorunidade'];
  350.                                     $valorSubTotal += $valorTotal;
  351.                                     $totalItensTotal += $item['item']['quantidade'];
  352.                                     $descontosItens += $item['item']['descontoItem'];
  353.                                     
  354.                                     $img '';
  355.                                     $pathFile '/www/wwwroot/gestor.moveispollo.com.br/public/uploads/produtos/' $item['item']['codigo'] . '.jpg';
  356.                                     
  357.                                     if(file_exists($pathFile)){
  358.                                         $img 'https://polo.srvtmp.com.br/uploads/produtos/' $item['item']['codigo'] . '.jpg';
  359.                                     } else {
  360.                                         
  361.                                         $produtoBling $this->getProduto(SincronizacaoController::KEY_API_POLLO
  362.                                             $item['item']['codigo'], $client$xml=false);
  363.                                             
  364.                                         if(isset($produtoBling['retorno']['produtos'][0])){
  365.                                             if(isset($produtoBling['retorno']['produtos'][0]['produto']['imagem'][0])){
  366.                                                 $img $produtoBling['retorno']['produtos'][0]['produto']['imagem'][0]['link'];
  367.                                                 $img str_ireplace('\\','',$img);
  368.                                             }
  369.                                         }
  370.                                     }
  371.                         
  372.                                     $dados['itens'][] = [
  373.                                         'codigo' => $item['item']['codigo'],
  374.                                         'descricao' => $item['item']['descricao'],
  375.                                         'un' => $item['item']['un'],
  376.                                         'quantidade' => abs($item['item']['quantidade']),
  377.                                         'valorunidade' => number_format($item['item']['valorunidade'], 2',''.'),
  378.                                         'valorTotal' => number_format($valorTotal2',''.'),
  379.                                         'img' => $img,
  380.                                         'estruturas' => $this->getEstruturas($item['item']['codigo'])
  381.                                     ];
  382.                                 }
  383.                             }
  384.                             
  385.                             $dados['parcelas'] = [];
  386.                             if(!empty($content['retorno']['pedidos'][0]['pedido']['parcelas'])){
  387.                                 foreach ($content['retorno']['pedidos'][0]['pedido']['parcelas'] as $parcela) {
  388.                                     
  389.                                     $dataVencimento = \DateTime::createFromFormat('Y-m-d'$parcela['parcela']['dataVencimento']);
  390.                                     
  391.                                     $dados['parcelas'][] = [
  392.                                         'valor' => number_format($parcela['parcela']['valor'], 2',''.'),
  393.                                         'dias' => '0',
  394.                                         'dataVencimento' => $dataVencimento->format('d/m/Y'),
  395.                                         'formaPagamento' => $parcela['parcela']['forma_pagamento']['descricao'],
  396.                                         'obs' => $parcela['parcela']['obs']
  397.                                     ];
  398.                                 }
  399.                             }
  400.             
  401.                             $dados['numero_itens'] = $totalItens;
  402.                             $dados['numero_itens_total'] = $totalItensTotal;
  403.                             $dados['descontos'] = number_format($descontosItens2',''.');
  404.                             $dados['valorTotalPedido'] = number_format($valorSubTotal2',''.');
  405.                             $dados['valorTotalComDesconto'] = number_format($content['retorno']['pedidos'][0]['pedido']['totalvenda'], 2',''.');
  406.                             
  407.                             
  408.                             $dados['obs'] = $content['retorno']['pedidos'][0]['pedido']['observacoes'];
  409.                             $dados['frete'] = (isset($content['retorno']['pedidos'][0]['pedido']['valorfrete'])) ? $content['retorno']['pedidos'][0]['pedido']['valorfrete'] : '';
  410.                             
  411.                             $dados['descontoGeral'] = $content['retorno']['pedidos'][0]['pedido']['desconto'];
  412.                             
  413.                             $pedidoEntrega $this->getDoctrine()->getRepository(EntregaPedido::class)->findOneBy(['pedido' => $numero]);
  414.                             $dados['showMaisPedidos'] = false;
  415.                             
  416.                             $dados['estruturas'] = $this->agrupaEstruturas($dados['itens']);
  417.                             
  418.                             if($pedidoEntrega instanceof EntregaPedido){
  419.                                 if($pedidoMake instanceof EntregaPedido){
  420.                                     $dados['mais_info'] = $this->makeProdutoData($pedidoMaketrue);
  421.                                 } else {
  422.                                     $dados['mais_info'] = $this->makeProdutoData($pedidoEntregatrue);
  423.                                 }
  424.                                 
  425.                                 $dados['showMaisPedidos'] = true;
  426.                             }
  427.                             
  428.                             if(!empty($content['retorno']['pedidos'][0]['pedido']['transporte'])){
  429.                                 
  430.                                 if(!empty($content['retorno']['pedidos'][0]['pedido']['transporte']['enderecoEntrega'])){    
  431.                                     
  432.                                         $dados['endereco_entrega'] = 
  433.                                             $content['retorno']['pedidos'][0]['pedido']['transporte']['enderecoEntrega']['endereco'] . ',  ' 
  434.                                             $content['retorno']['pedidos'][0]['pedido']['transporte']['enderecoEntrega']['numero'] . ',  ' 
  435.                                             $content['retorno']['pedidos'][0]['pedido']['transporte']['enderecoEntrega']['complemento'] . ',  ' .
  436.                                             $content['retorno']['pedidos'][0]['pedido']['transporte']['enderecoEntrega']['bairro'] . ',  ' 
  437.                                             $content['retorno']['pedidos'][0]['pedido']['transporte']['enderecoEntrega']['cidade'] . '/' 
  438.                                             $content['retorno']['pedidos'][0]['pedido']['transporte']['enderecoEntrega']['uf'] . ',  ' 
  439.                                             $content['retorno']['pedidos'][0]['pedido']['transporte']['enderecoEntrega']['cep'] . ',  ';
  440.                                 }
  441.                             }
  442.                             
  443.                             return $dados;
  444.                             
  445.                         }
  446.                     }
  447.                 }
  448.             }
  449.         } else {
  450.             exit('Erro em bucar pedido: ' $numero);
  451.         }
  452.         return false;
  453.     }
  454.     
  455.     public function agrupaEstruturas($itens) {
  456.         
  457.         $estruturas = [];
  458.         
  459.         foreach ($itens as $item) {
  460.             if(isset($item['estruturas']) && !empty($item['estruturas'])){
  461.             
  462.                 foreach ($item['estruturas'] as $estrutura) {
  463.                     
  464.                     $quantidade $estrutura->quantidade $item['quantidade'];
  465.                     
  466.                     $estruturas[] = [
  467.                         'nome' => $estrutura->nome,
  468.                         'codigo' => $estrutura->codigo,
  469.                         'quantidade' => $quantidade
  470.                     ];
  471.                 }
  472.             }
  473.         }
  474.         $itensAgrupados = array();
  475.         
  476.         // Iterar sobre os itens originais
  477.         foreach ($estruturas as $item) {
  478.             $codigo $item["codigo"];
  479.             $quantidade $item["quantidade"];
  480.         
  481.             // Se o código já existir no array $itensAgrupados, adicione a quantidade
  482.             if (isset($itensAgrupados[$codigo])) {
  483.                 $itensAgrupados[$codigo]["quantidade"] += $quantidade;
  484.             } else {
  485.                 // Se não, crie uma nova entrada no array
  486.                 $itensAgrupados[$codigo] = array(
  487.                     "nome" => $item["nome"],
  488.                     "codigo" => $codigo,
  489.                     "quantidade" => $quantidade
  490.                 );
  491.             }
  492.         }
  493.         
  494.         // Resultado final com itens agrupados e quantidades somadas
  495.         $resultadoFinal array_values($itensAgrupados);
  496.         return $resultadoFinal;
  497.     }
  498.     
  499.     public function getEstruturas($codigo){
  500.         
  501.         $produtoBling $this->getDoctrine()->getRepository(ProdutoBling::class)->findOneBy(['codigo' => $codigo]);
  502.         
  503.         if($produtoBling instanceof ProdutoBling) {
  504.             $estruturas json_decode($produtoBling->getEstrutura());
  505.             if(!empty($produtoBling->getEstrutura())){
  506.                 return (count($estruturas)>0) ? $estruturas '';
  507.             }
  508.             return '';
  509.         }
  510.         
  511.         return '';
  512.     }
  513.     
  514.     private function getNotaFiscalLink($numero$client) {
  515.         
  516.         $linkNf '';
  517.         
  518.         $response $client->request(
  519.             'GET',
  520.             SincronizacaoController::URL_API_BLING '/notafiscal/'.$numero.'/1/json/',
  521.             [
  522.                 'query' => [
  523.                     'apikey' => SincronizacaoController::KEY_API_POLLO
  524.                 ]
  525.             ]
  526.         );
  527.         $statusCode $response->getStatusCode();
  528.         if ($statusCode == SincronizacaoController::HTTP_STATUS_CODE_OK) {
  529.             $content $response->toArray();
  530.             if(isset($content['retorno'])){
  531.                 if(isset($content['retorno']['notasfiscais'])){
  532.                     if(count($content['retorno']['notasfiscais']) > 0) {
  533.                         $notafiscal $content['retorno']['notasfiscais'][0]['notafiscal'];
  534.                         $linkNf str_ireplace("\\",""$notafiscal['linkDanfe']);
  535.                     }
  536.                 }
  537.             }
  538.         }
  539.         
  540.         return $linkNf;
  541.     }
  542.     
  543.     /**
  544.      * @Route("/delete-duplicado", name="delete_duplicado")
  545.      */
  546.     public function deleteDuplicado(Request $request)
  547.     {
  548.         
  549.         $produtoDuplicado $this->getDoctrine()->getRepository(DuplicidadeEstoque::class)
  550.             ->find($request->get('id'));
  551.             
  552.         if($produtoDuplicado instanceof DuplicidadeEstoque){
  553.             $this->getDoctrine()->getManager()->remove($produtoDuplicado);
  554.             $this->getDoctrine()->getManager()->flush();    
  555.         }
  556.         
  557.         $response = new Response(
  558.             json_encode([]),
  559.             Response::HTTP_OK,
  560.             ['Content-type' => 'application/json']
  561.         );
  562.         return $response;
  563.     }
  564.     
  565.     /**
  566.      * @Route("/produtos-sendo-atualizados", name="produtos_sendo_atualizados")
  567.      */
  568.     public function produtosImportando()
  569.     {
  570.         $produtosPacoteAtualizando $this->getDoctrine()->getRepository(PacoteAtualizacoes::class)->findAll();
  571.         
  572.         $produtosPacoteAtualizandoArray = [];
  573.         
  574.         foreach($produtosPacoteAtualizando as $produto){
  575.             $produtosPacoteAtualizandoArray[] = [
  576.                 'codigo' => $produto->getCodigo(),
  577.                 'estoque' => $produto->getEstoque()
  578.             ];
  579.         }
  580.         
  581.         $response = new Response(
  582.             json_encode($produtosPacoteAtualizandoArray),
  583.             Response::HTTP_OK,
  584.             ['Content-type' => 'application/json']
  585.         );
  586.         return $response;
  587.     }
  588.     
  589.     /**
  590.      * @Route("/", name="dashboard")
  591.      */
  592.     public function index()
  593.     {
  594.         $produtosPacoteAtualizando $this->getDoctrine()->getRepository(PacoteAtualizacoes::class)->findAll();
  595.         
  596.         $produtosPacoteAtualizandoArray = [];
  597.         
  598.         foreach($produtosPacoteAtualizando as $produto){
  599.             $produtosPacoteAtualizandoArray[] = [
  600.                 'codigo' => $produto->getCodigo(),
  601.                 'estoque' => $produto->getEstoque(),
  602.                 'loja' => $produto->getLoja()
  603.             ];
  604.         }
  605.         
  606.        $produtosParaAtualizacao $this->getDoctrine()->getRepository(AtualizacaoEstoque::class)
  607.             ->getProdutosParaAtualizacao();
  608.             
  609.         $produtosDuplicados $this->getDoctrine()->getRepository(DuplicidadeEstoque::class)
  610.             ->findAll();
  611.         $estoquesMinimo $this->getDoctrine()->getRepository(EstoqueMinimo::class)
  612.             ->findAll();
  613.         $estoquMinimoArray = [];
  614.         foreach ($estoquesMinimo as $estoqueMinimo) {
  615.             $estoquMinimoArray[] = [
  616.                 'codigo'=>$estoqueMinimo->getCodigo(),
  617.                 'codigo_bling'=>$estoqueMinimo->getNumeroPedido(),
  618.                 'est' => $estoqueMinimo->getEstoque(),
  619.                 'min' => $estoqueMinimo->getEstoqueMinimoReal(),
  620.                 'max' => $estoqueMinimo->getEstoqueMinimo(),
  621.                 'pc' => $estoqueMinimo->getQuantidadePedido()
  622.                 ];
  623.         }
  624.         $estoqueMinimoBool false;
  625.         if(count($estoquesMinimo)>0){
  626.            $estoqueMinimoBool true;
  627.         }
  628.         return $this->render('dashboard/index.html.twig', [
  629.             'controller_name' => 'DashboardController',
  630.             'duplicados' => $produtosDuplicados,
  631.             'atualizacoesEstoqueNaFila' => $produtosParaAtualizacao,
  632.             'sinc_estoque' => $this->getDoctrine()->getRepository(SincronizacaoEstoque::class)->listSincEstoque(),
  633.             'sinc_prod' => $this->getDoctrine()->getRepository(SincronizacaoProdutos::class)->listSincProd(),
  634.             'totalRequisicoesHoje' => $this->getDoctrine()->getRepository(ContagemRequisicoesBling::class)->requisicoesHoje(),
  635.             'emAndamento' => $produtosPacoteAtualizandoArray,
  636.             'estoqueMinimo' => $estoquMinimoArray,
  637.             'estoqueMinimoBool' =>$estoqueMinimoBool
  638.         ]);
  639.     }
  640.     
  641.     /**
  642.      * @Route("/restart-import", name="restart_import")
  643.      */
  644.     public function reestartImport()
  645.     {
  646.         
  647.         // Parar todos os processos de importação
  648.         $processoAberto $this->getDoctrine()->getRepository(ProcessoAtualizacao::class)->findOneBy(['estaRodando'=>true]);
  649.         if($processoAberto instanceof ProcessoAtualizacao){
  650.             
  651.             $this->addFlash('success''Tinha um processo parado mas foi interrompido.');
  652.             
  653.             //$processoAberto->setFim(new \DateTime('now'));
  654.             //$processoAberto->setEstaRodando(false);
  655.             
  656.             //$this->getDoctrine()->getManager()->flush();
  657.             
  658.         } else {
  659.             $this->addFlash('success''Nenhum processo estava parado!');
  660.         }
  661.         
  662.         return $this->redirectToRoute('dashboard');
  663.     }
  664.     
  665.     private function getProduto($apiKeyStore$codigoProduto$client$xml=false) {
  666.         $format 'json';
  667.         if($xml){
  668.             $format 'xml';
  669.         }
  670.         $response $client->request(
  671.             'GET',
  672.             SincronizacaoController::URL_API_BLING '/produto/'.$codigoProduto.'/'.$format,
  673.             [
  674.                 'query' => [
  675.                     'apikey'  => $apiKeyStore,
  676.                     'estoque' => 'S',
  677.                     'imagem'  => 'S',
  678.                     'situacao' => 'A'
  679.                 ]
  680.             ]
  681.         );
  682.         $statusCode $response->getStatusCode();
  683.         if ($statusCode == SincronizacaoController::HTTP_STATUS_CODE_OK) {
  684.             if($xml){
  685.                 return $response->getContent();
  686.             }
  687.             $content $response->toArray();
  688.             return $content;
  689.         } else {
  690.             return [];
  691.         }
  692.         return [];
  693.     }
  694.     
  695.     
  696. }