TransWar File Browser

Path: C:\

<!DOCTYPE html>
<html lang="pt-br">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="x-ua-compatible" content="ie=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
    <title>Follow-Up</title>
    <link rel="icon" type="image/png" href="../images/favicon.ico">
    <link href="../css/estilo.css" rel="stylesheet" type="text/css" />
    <link rel="stylesheet" href="../css/redmond/jquery-ui-1.10.1.custom.css" />
    <link href="../css/bootstrap.min.css" rel="stylesheet">
    <link href="../css/bootstrap-theme.min.css" rel="stylesheet">
    <link href="../css/theme.css" rel="stylesheet">
    <link href="../css/signin.css" rel="stylesheet">
    <script src="../js/ie-emulation-modes-warning.js"></script>
    <script src='../js/jquery-1.10.2.min.js'></script>
    <script src='../js/jquery-ui.js' type='text/javascript'></script>
    <script src="../js/ie-emulation-modes-warning.js"></script>
    <script src="../js/ui.datepicker-pt-BR.js"></script>
  </head>
  <script type="text/javascript">
    window.onload = function() {
      document.getElementById('carga').style.display="block";
    }
  </script>
<body role="document"> 
  <div class="container">   
    <table width="100%"> 
      <tr> 
        <td width="40%" align="center"><img src="../images/logo03.png" height="88"  /></td> 
        <td width="60%" align="center">
          <div class="page-header">
            <h2><span class="label label-primary">&nbsp;&nbsp;Follow-Up&nbsp;&nbsp;</span></h2>
          </div>
        </td>
        <td>
          <img src="../images/atl.site.logo" width="200" height="50"  />
        </td> 
      </tr> 
      <tr> 
        <td height="30"  colspan="3" background="../images/top-menubg.gif" >&nbsp;&nbsp;<?php echo $dateadded; ?></td> 
      </tr> 
    </table> 
    <table class="table" align="center"  >
      <tr>
        <td align="center" >
          <div align="center" class="loading" id="carga" >
            <img class="imgloading" src="../images/tempo.gif" style="height:30; width:240">
          </div>
        </td>
      </tr>
    </table>
    </div>
</body>
<p class="copyright" align="center">&copy; Copyright 2018 TransWar - Todos os direitos reservados. Versão 1.0</p> 
<br />
<script src="../js/docs.min.js"></script>
<script src="../js/ie10-viewport-bug-workaround.js"></script>
</html>
<?php
  ini_set('max_execution_time',259200); 
  ini_set ('memory_limit','-1');
  date_default_timezone_set('America/Sao_Paulo');
  $DT=date('d-m-Y_G\hi\ms\s');
  $hoje = date("d-m-Y");
  $now = date("Y-m-d");
  $d1 = strtotime($hoje); 
  $arq='fup_temp_'.$DT.'.csv';
  $fptemp = fopen('Arquivos/'.$arq, 'w+');
  fwrite($fptemp,''.PHP_EOL);
  fwrite($fptemp,''.PHP_EOL);
  fwrite($fptemp,''.PHP_EOL);
  fwrite($fptemp,''.PHP_EOL);
  fwrite($fptemp,''.PHP_EOL);
  fwrite($fptemp,''.PHP_EOL);
  fwrite($fptemp,'FOLLOW-UP'.PHP_EOL);
  fwrite($fptemp,'Chave de Acesso,Transportadora,NF,Qtde Palete,Qtde Volume,Fornecedor,Data Rec/Coleta,TASK/FCA,Tipo de Frete,ID,Agendamento,Status da Carga,Dias Armazenados,Valor da Coleta,Coleta,Peso Bruto,Valor da NF,Observações'.PHP_EOL);
  function Limpa($str){
    $str=trim($str);
    $str=str_replace('\\', '-', $str);
    $str=str_replace(' - ', '-', $str);
    $str=str_replace(' ', '-', $str);
    $str = iconv( "UTF-8" , "ASCII//TRANSLIT//IGNORE" , $str );
    $str = preg_replace( array( '/[ ]/' , '/[^A-Za-z0-9\-]/' ) , array( '' , '' ) , $str );
    return $str;
  }
  require_once("conecta_Agendas.php");
  require_once("RequestAPI.php");
  $l=0;
  $nfs = $cls = $vgn = $vgc = '';
  $lin=8;$lin2=0;
  $errosAPI=0;
  $totalNFs=0;
  $query="SELECT  g.ds_Agenda
    ,Convert(varchar(10), g.dt_Solicitacao,103) as c03    
    ,Convert(varchar(10), g.dt_Retorno,103) as c04    
    ,Convert(varchar(10), g.dt_Agendamento,103) as c05    
    ,Convert(varchar(10), g.dt_Saida,103) as c06   
    ,Convert(varchar(10), g.dt_Chegada,103) as c15
    ,f.nr_Paletes as paletes
    ,f.nr_NotaFiscal as nrNF
    ,f.ds_ChaveNFe as chave
    ,f.nr_Coleta as coleta
    ,f.nr_Task as task
    ,g.ds_ID as ds_ID
    ,g.tp_Carga as tp_carga
    ,g.ds_Status as stateCall
    ,Convert(varchar(10), f.dt_Coleta,103) as c09
    ,Convert(varchar(10), f.dt_Coleta,105) as c09a
    ,g.nr_Manifesto as id_Manifesto
    ,CAST(f.nr_NotaFiscal as INT) as ordemNF
    FROM tbdAgendaNFs AS f
    left JOIN tbdAgenda AS g ON  f.id_Agenda = g.id_Agenda
    WHERE  f.id_Agenda='0' or g.dt_Saida is null
    order by ordemNF";
  $result = sqlsrv_query( $conn, $query, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
  $num = sqlsrv_num_rows($result);

  if($num>=1) {
   
    while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) 
   
    {
      $nf = trim($row['nrNF']);

      if ($row['task'] === null or $row['task'] == ''){
        $task = 'FCA';
      }else{
        $task = trim($row['task']);
      }
      if ($row['c09'] === null or $row['c09'] == ''){
        $dtcoleta = '';
      }else{
        $dtcoleta = $row['c09'];
      }
      if ($row['coleta'] === null or $row['coleta'] == ''){
        $coleta = '';
      }else{
        $coleta = trim($row['coleta']);
      }
      if ($row['c09a'] === null or $row['c09a'] == ''){
        $formula = 0;
      }else{
        $d2 = strtotime($row['c09a']);$formula = ($d1 - $d2) /86400;
      }

      $manifesto = $row['id_Manifesto'];
      $paletes = $row['paletes'];
      $chave = trim($row['chave']);
      $ds_ID = $row['ds_ID'];
      $Agendamento = $row['c05'];

      if(trim($row['tp_carga']) == 'DEDICADA SEM COLETA' or trim($row['tp_carga']) == 'DEDICADA COM COLETA'){
        $carga='DEDICADA';
      }else{
        if(trim($row['tp_carga']) == 'CONSOLIDAÇÃO'){
          $carga='CONSOLIDADA';
        }else{
          $carga=trim($row['tp_carga']);
        }
      }      

      $status='Aguard Consolid';
      $tw='TRANS WAR';


      if ($row['c05']<>''){
        $status='Agendada';
      }else{
          if($row['ds_Agenda']<>''){
              $status=$row['ds_Agenda'];
          }else{
              $status='Aguard Consolid';
          }
      }
      if($row['c06']<>''){
        $status='Entregue';
      }else{ 
        if($row['c15']<>''){
              $status='Na Porta';
        }else{
          if($manifesto <> '' && $row['stateCall'] !== 'Finalizado'){
            $status='Em Transito';
          }else{
            if($row['c04']<>''){
              $status='Agendada';
            }else{ 
              if($row['c03']<>''){
                  $status='Agenda Solicitada';
              }
            }
          }
        }
      }

      $vlColeta=0;
      if ($status!='Entregue'){
        $nfs.= $vgn.$nf;
        if($vgn==''){$vgn=',';}
        if($coleta!=''){
          $cls.=$vgc.$coleta;
          if($vgc==''){$vgc=',';}
        }
        $fup[$nf][1] = $chave;
        $fup[$nf][2] = $tw;
        $fup[$nf][3] = $nf;
        $fup[$nf][4] = $paletes;
        $fup[$nf][7] = $dtcoleta;
        $fup[$nf][8] = $task;
        $fup[$nf][9] = $carga;
        $fup[$nf][10] = $ds_ID;
        $fup[$nf][11] = $Agendamento;
        $fup[$nf][12] = $status;
        $fup[$nf][13] = $formula;
        $fup[$nf][15] = $coleta;
      }
    }

  }
  function pega($ch, $co){
    $rsp = array(5=>'', 6=>'', 14=>'', 16=>'', 17=>'');
    $cte = '';
    $maxTentativas = 3;

    //****** ROTINA PARA PEGAR DADOS DA NOTA FISCAL ********
    $sucesso = false;
    for($tentativa = 1; $tentativa <= $maxTentativas; $tentativa++){
      $url = "https://transwar.lannister.emitir.me/nfs/search?key=".$ch;
      $dataResponse = new RequestAPI();
      $resposta = $dataResponse->getResponse($url);

      if(!$resposta || !isset($resposta[1]) || $resposta[1] == ''){
        echo ("<script>console.log('ERRO NF Chave: ".$ch." - Tentativa ".$tentativa."/$maxTentativas - Resposta vazia');</script>");
        if($tentativa < $maxTentativas){ sleep($tentativa * 5); }
        continue;
      }

      $resta = $resposta[0];
      if($resta !== '' && intval($resta) <= 5){
        echo ("<script>console.log('Rate limit baixo (".$resta."), aguardando 15s...');</script>");
        sleep(15);
      }

      $data = json_decode($resposta[1], true);
      if($data === null || !is_array($data)){
        echo ("<script>console.log('ERRO NF Chave: ".$ch." - Tentativa ".$tentativa."/$maxTentativas - JSON invalido');</script>");
        if($tentativa < $maxTentativas){ sleep($tentativa * 5); }
        continue;
      }

      if(isset($data['success']) && $data['success'] == 1){
        if(isset($data['data'][0]['qtd'])){$rsp[5] = intval($data['data'][0]['qtd']);}
        if(isset($data['data'][0]['issuer']['name'])){$rsp[6] = Limpa($data['data'][0]['issuer']['name']);}
        if(isset($data['data'][0]['weight'])){$rsp[16] = $data['data'][0]['weight'];}
        if(isset($data['data'][0]['total'])){$rsp[17] = $data['data'][0]['total'];}
        if(isset($data['data'][0]['cte']['id'])){$cte = $data['data'][0]['cte']['id'];}
        $sucesso = true;
        echo ("<script>console.log('OK NF Chave: ".$ch." - Resta: ".$resta."');</script>");
        break;
      } else {
        echo ("<script>console.log('ERRO NF Chave: ".$ch." - Tentativa ".$tentativa."/$maxTentativas - success!=1');</script>");
        if($tentativa < $maxTentativas){ sleep($tentativa * 5); }
      }
    }
    if(!$sucesso){
      echo ("<script>console.log('FALHA TOTAL NF Chave: ".$ch." apos $maxTentativas tentativas');</script>");
    }
    //****** FIM DA ROTINA  ********

    //****** ROTINA PARA PEGAR DADOS DA COLETA  ********
    if($co != '' && $cte != ''){
      for($tentativa = 1; $tentativa <= $maxTentativas; $tentativa++){
        $url = "https://transwar.lannister.emitir.me/ctes/search?id=".$cte;
        $dataResponse = new RequestAPI();
        $resposta = $dataResponse->getResponse($url);

        if(!$resposta || !isset($resposta[1]) || $resposta[1] == ''){
          if($tentativa < $maxTentativas){ sleep($tentativa * 5); }
          continue;
        }

        $resta = $resposta[0];
        if($resta !== '' && intval($resta) <= 5){ sleep(15); }

        $data = json_decode($resposta[1], true);
        if($data !== null && is_array($data) && isset($data['success']) && $data['success'] == 1){
          if(isset($data['data'][0]['totals']['components']['collect_rate'])){
            $rsp[14] = $data['data'][0]['totals']['components']['collect_rate'];
          }
          break;
        } else {
          if($tentativa < $maxTentativas){ sleep($tentativa * 5); }
        }
      }
    }
    //****** FIM DA ROTINA  ********
    return array($rsp, $sucesso);
  }

  if(!isset($fup) || !is_array($fup) || count($fup) == 0){
    fclose($fptemp);
    unlink('Arquivos/'.$arq);
    echo "<script language='JavaScript'>alert('Nenhum registro encontrado no banco de dados para gerar o FUP.\nVerifique se existem agendas pendentes.');location.href='FUP.php';</script>";
  } else {
    $totalNFs = count($fup);
    foreach($fup as $nf => $y){
      $lin2++;
      $resultado = pega($fup[$nf][1], $fup[$nf][15]);
      $pega = $resultado[0];
      $apiOk = $resultado[1];
      if(!$apiOk){ $errosAPI++; }

      $linha2[$lin2][1] = $fup[$nf][1];
      $linha2[$lin2][2] = $fup[$nf][2];
      $linha2[$lin2][3] = $fup[$nf][3];
      $linha2[$lin2][4] = $fup[$nf][4];
      $linha2[$lin2][5] = $pega[5];
      $linha2[$lin2][6] = $pega[6];
      $linha2[$lin2][7] = $fup[$nf][7];
      $linha2[$lin2][8] = $fup[$nf][8];
      $linha2[$lin2][9] = $fup[$nf][9];
      $linha2[$lin2][10] = $fup[$nf][10];
      $linha2[$lin2][11] = $fup[$nf][11];
      $linha2[$lin2][12] = $fup[$nf][12];
      $linha2[$lin2][13] = $fup[$nf][13];
      $linha2[$lin2][14] = $pega[14];
      $linha2[$lin2][15] = $fup[$nf][15];
      $linha2[$lin2][16] = $pega[16];
      $linha2[$lin2][17] = $pega[17];
      $lin++;$linha = $fup[$nf][1].','.$fup[$nf][2].','.$fup[$nf][3].','.$fup[$nf][4].','.$pega[5].','.$pega[6].','.$fup[$nf][7].','.$fup[$nf][8].','.$fup[$nf][9].','.$fup[$nf][10].','.$fup[$nf][11].','.$fup[$nf][12].','.$fup[$nf][13].','.$pega[14].','.$fup[$nf][15].','.$pega[16].','.$pega[17].','.PHP_EOL;
      fwrite($fptemp, $linha);
    }

    fclose($fptemp);

    // Verificar se houve muitos erros na API
    if($errosAPI > 0){
      $pctErro = round(($errosAPI / $totalNFs) * 100);
      echo "<script>console.log('RESUMO: $errosAPI de $totalNFs NFs falharam na API ($pctErro%)');</script>";
      if($errosAPI == $totalNFs){
        // Todas as NFs falharam - não gerar arquivo
        unlink('Arquivos/'.$arq);
        echo "<script language='JavaScript'>alert('ERRO: A API não retornou dados para nenhuma das $totalNFs notas fiscais.\nO serviço pode estar indisponível.\nTente novamente em alguns minutos.');location.href='FUP.php';</script>";
      } else {
        // Algumas falharam - gerar com aviso
        echo "<script language='JavaScript'>alert('ATENÇÃO: $errosAPI de $totalNFs notas fiscais não retornaram dados da API.\nO arquivo será gerado com dados parciais.');location.href='geraFUP.php?arq=".$arq."&lin=".$lin."';</script>";
      }
    } else {
      echo "<script language='JavaScript'>location.href='geraFUP.php?arq=".$arq."&lin=".$lin."';</script>";
    }
  }
?>