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"> Follow-Up </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" > <?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">© 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>";
}
}
?>