<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
require_once 'api/nfephp/bootstrap.php';
require_once 'inc/usuario.php';

use NFePHP\NFe\ToolsNFe;

$nfe = new ToolsNFe('api/nfephp/config/config.json'); 
$nfe->setModelo('55');

$ultNSU = 0; // se estiver como zero irá retornar os dados dos ultimos 15 dias até o limite de 50 registros
             // se for diferente de zero irá retornar a partir desse numero os dados dos
             // últimos 15 dias até o limite de 50 registros

$numNSU = 0; // se estiver como zero irá usar o ultNSU
             // se for diferente de zero não importa o que está contido em ultNSU será retornado apenas
             // os dados deste NSU em particular

$tpAmb = '1';// esses dados somente existirão em ambiente de produção pois em ambiente de testes
             // não existem dados de eventos, nem de NFe emitidas para o seu CNPJ

$cnpj = ''; // deixando vazio irá pegar o CNPJ default do config
            // se for colocado um CNPJ tenha certeza que o certificado está autorizado a
            // baixar os dados desse CNPJ pois se não estiver autorizado haverá uma
            // mensagem de erro da SEFAZ

//array que irá conter os dados de retorno da SEFAZ
$aResposta = array();

//essa rotina deve rá ser repetida a cada hora até que o maxNSU retornado esteja contido no NSU da mensagem
//se estiver já foram baixadas todas as referencias a NFe, CTe e outros eventos da NFe e não a mais nada a buscar
//outro detalhe é que não adianta tentar buscar dados muito antigos o sistema irá informar que 
//nada foi encontrado, porque a SEFAZ não mantêm os NSU em base de dados por muito tempo, em 
//geral são mantidos apenas os dados dos últimos 15 dias.
//Os dados são retornados em formato ZIP dento do xml, mas no array os dados 
//já são retornados descompactados para serem lidos


/*
$aResposta = Array ( 
'bStat' => '1', 
'versao'=> '1.00', 
'cStat' => '138' ,
'xMotivo'=> 'Documento(s) localizado(s)', 
'dhResp' => '2018-08-02T11:03:07',
'ultNSU' => '000000000000034', 
'maxNSU' => '000000000000034',
'aDoc' => Array ( 
	        Array ( 
	        	   'NSU' => '000000000000034',
				'schema'  => 'resNFe_v1.00.xsd', 
	               'doc'  => '3518070576109800011355001000002769100011175805761098000113KRYPTUS SEGURANCA DA INFORMACAO S.A.2449422081102018-07-23T11:39:00-03:00111390.00B/HNu4JOwi2nDpEr2W23piFIps8=2018-07-23T11:40:28-03:001351804890917021' 
	           ) 
	)
);
*/

$a_incluir = array();

try{
	$xml = $nfe->sefazDistDFe('AN', $tpAmb, $cnpj, $ultNSU, $numNSU, $aResposta);

	/* Salva uma cópia do último xml de entradas automáticas */	
	$filename = "xml/xml_entrada.txt";
	file_put_contents($filename, $xml);
			chmod($filename, 0777);

	$todos_documentos = $aResposta['aDoc']; 
	
		if($aResposta['cStat']=='138' && count($todos_documentos)>0){
			foreach ($aResposta['aDoc'] as $key => $documento) {

      			$xml_doc = simplexml_load_string($documento['doc']);
				$tmp_array = 
				array(
					'NSU'  => $documento['NSU'],
					'chave'=> $xml_doc->chNFe,
					'numNf'=> substr(substr($xml_doc->chNFe, -9),0, 8), 
					'cnpj' => $xml_doc->CNPJ,    
					'razao'=> $xml_doc->xNome,   
					'dhRecbto'=> $xml_doc->dhRecbto,
					'aProt'=> $xml_doc->nProt,	 
					'vNF'  => $xml_doc->vNF,      
					'tpNF' => $xml_doc->tpNF
				);
				array_push($a_incluir, $tmp_array);
			}
		}
}catch (Exception $e) {
    $msg_erro = "Houve um erro ao ler o XML: " . $arquivo . " - " . $e -> getMessage() . "\n";
    // addError($msg_erro);
    echo $msg_erro;
  }

  $p_registros_atualizados = 0;

if(count($a_incluir)>0){
  $usuario_entrada = getLoggedUser();
  $id_usuario=$usuario_entrada['id'];
  $id_unidade=$usuario_entrada['unidade'];
  $id_status_xml_importado = 2;
  $cd_status_nfe = '138';
  $ds_status_nfe = 'Documento(s) localizado(s)';
  $id_tipo_ambiente = 1;
  $st_tipo_entrada  = 0;
  $st_ativo = 1;
  $vl_total_nfe=0;

  foreach ($a_incluir as $key => $registro) {
  	$ds_chave= $registro['chave'];
	$ds_numnf= $registro['numNf'];
	$ds_numnsu = $registro['NSU'];
	$ds_xml_cnpj   = $registro['cnpj'] ;
	$ds_xml_razao  = $registro['razao'];
	$vl_total_nfe  = $registro['vNF'];

	$originalDate=$registro['dhRecbto'];
    // $dh_emissao=date("d-m-Y H:i:s", strtotime($originalDate));
    $dh_emissao=date("Y-m-d H:i:s", strtotime($originalDate));
	$ds_recibo_sefaz = $registro['aProt'];
	$ds_xml = '';
	$ds_infcpl='';


	$consulta  = "CALL pr_incluir_xml_entrada_sefaz(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

    $stmt = mysqli_prepare($conexao, $consulta);
            mysqli_stmt_bind_param($stmt, 'ssssssssssssssssss', 
            	$st_ativo, $id_unidade, $id_usuario, $id_status_xml_importado, 
            	$id_tipo_ambiente, $st_tipo_entrada, 
                $ds_chave, $ds_numnf, $dh_emissao, $vl_total_nfe, 
                $ds_xml_cnpj, $ds_xml_razao, $ds_numnsu, $ds_recibo_sefaz,
            	$ds_xml, $ds_infcpl, $cd_status_nfe, $ds_status_nfe);
            
            mysqli_stmt_execute($stmt);
            
            $result = mysqli_stmt_get_result($stmt);

            /*
            if($result -> num_rows > 0){
              
              $row = mysqli_fetch_array($result, MYSQLI_NUM); // MYSQLI_NUM ou MYSQLI_ASSOC
			  // $p_id_cliente = $row[0] ; // . ";"
			  $p_registros_atualizados += $row[0];
            }
            */
            $p_registros_atualizados ++;
            mysqli_stmt_close($stmt);
  }
}

 addMessage("Incluídos ou Atualizados : $p_registros_atualizados XML automáticos da Sefaz");

  header("location:erpc_nfecode_importacao_painel.php");

/*
echo '<br>nfe->soapDebug:<br><PRE>';
echo htmlspecialchars($nfe->soapDebug);
echo '</PRE>aResposta:<BR>';
print_r($aResposta);
echo "<br>";
*/
?>