<?php

// echo "<hr>";
// print_r($_POST);
// echo "<hr>";
// print_r($_POST);
// echo "<hr>";


include "ver_sessao.php";
include "conecta.php";
include "funcoes_fiscal.php";
// include "pdv_funcoes.php";


// date_default_timezone_set('America/Sao_Paulo');

/*** CACTUX *****************************************************************************\

NFCe 

\****************************************************************************************/

set_time_limit(0);

// LOG AGORA VAI SER UM ARQUIVO INTERNO DO SISTEMA DO CLIENTE.
define(LOG,$_SERVER[DOCUMENT_ROOT].$CONFIGURA[PATH]."LOG.TXT");
define(LOG_TESTE,$_SERVER[DOCUMENT_ROOT].$CONFIGURA[PATH]."LOG_TESTE.TXT");
define(LOCAL_REDE,$_SERVER[DOCUMENT_ROOT].$CONFIGURA[PATH]."xml_nfce/");
define(LOCAL,$_SERVER[DOCUMENT_ROOT].$CONFIGURA[PATH]."xml_nfce/");


//define(SERVIDOR_CACTUS,"http://".meu_ip().":8010/servidor_nfce/");
define(SERVIDOR_CACTUS,$CONFIGURA[SERVIDOR_CACTUS]);

define(NFE_CLIENTE,"$CONFIGURA[CLIENTE_NFE]");


// ----------------------------------------------------------------------------------------
//
// IF QUE FAZ O CONTROLE DA PARTE AUTOMATICA DA EMISSAO DO NFCE. FEITA A APRTIR DO PDV
//
// ----------------------------------------------------------------------------------------
if( $_GET[id_ordem_auto] ) {

	
	if( $_GET[acao_auto] == 'enviar' ) {
	
		$_POST[id] = $_GET[id_ordem_auto];
		$_POST[porcentagem_nota] = '100';
		$_POST[envio_automatico] = 1;
		
		enviar_nota();

	}
		
	if( $_GET[acao_auto] == 'retornar' ) {
		$_POST[id] = $_GET[id_ordem_auto];
		$_POST[envio_automatico] = 1;

		retorno();
	}

	if( $_GET[acao_auto] == 'imprimir' ) {

		$_POST[id] = $_GET[id_ordem_auto];

		$nNota = carregar('nota','','nota_nb_ordem',$_POST[id]);
		$_POST[numero_nota] = $nNota[nota_tx_chaveAcesso];

		$_POST[envio_automatico] = 1;
		imprime_danfe();
	}

	if( $_GET[acao_auto] == 'imprimir_contigencia' ) {

		$_POST[id] = $_GET[id_ordem_auto];

		$nNota = carregar('nota','','nota_nb_ordem',$_POST[id]);
		$_POST[numero_nota] = $nNota[nota_tx_chaveAcesso];

		$_POST[envio_automatico] = 1;
		imprime_danfe_contigencia();
	}

	if( $_GET[acao_auto] == 'cancelar' ) {

		$_POST[id] = $_GET[id_ordem_auto];

		$nNota = carregar('nota','','nota_nb_ordem',$_POST[id]);
		$_POST[numero_nota] = $nNota[nota_tx_chaveAcesso];

		$_POST[envio_automatico] = 1;
		cancela_nota();
	}
	
	exit;	
}



// ESSA FUNÇÃO SERVE APENAS PARA REMOVER O BASE 64
function abre_retorno_ecf(){

	$_POST[msg_status] = base64_decode($_POST[msg_status]);

	index();
	exit;
}




function modificar_venda(){
	index();
	exit();
}




function baixar_xml() {
	global $CACTUX_CONF;


	$a_ordem = carregar('empr_tx_cnpj|ordem,empresa',$_POST[id]);
	$cnpj = preg_replace("/[^0-9]/", "", $a_ordem[empr_tx_cnpj]);
	$pasta_empresa = $cnpj.'/';


	$a = carregar('nota','','nota_nb_ordem',"$_POST[id]");
	if($a[nota_tx_statusNota]=='NFe Autorizada'){
		if($a[nota_tx_emissao]!='' && $a[nota_tx_emissao]!='0000-00-00 00:00:00'){
			$pasta_xml = substr($a[nota_tx_emissao],0,4).substr($a[nota_tx_emissao],5,2).'/autorizada/';
		}
	}elseif($a[nota_tx_statusNota]=='NFe Inutilizada'){
		if($a[nota_tx_emissao]!='' && $a[nota_tx_emissao]!='0000-00-00 00:00:00'){
			$pasta_xml = substr($a[nota_tx_emissao],0,4).substr($a[nota_tx_emissao],5,2).'/inutilizado/';
			$sufixo = '-inu';
		}
	}else{
		if($a[nota_tx_emissao]!='' && $a[nota_tx_emissao]!='0000-00-00 00:00:00'){
			$pasta_xml = substr($a[nota_tx_emissao],0,4).substr($a[nota_tx_emissao],5,2).'/contingencia/';
		}
	}

	// header('Content-disposition: attachment; filename="'.$a[nota_tx_chaveAcesso].'-nfe.xml'.'"');
	// header('Content-type: "text/xml"; charset="utf8"');
	// readfile($_SERVER[DOCUMENT_ROOT].$CACTUX_CONF['path'].'xml_nfce'."/".$pasta_xml.$a[nota_tx_chaveAcesso].'-nfe.xml');

	// echo $_SERVER[DOCUMENT_ROOT].$CACTUX_CONF['path'].'xml_nfce'."/".$pasta_xml.$a[nota_tx_chaveAcesso].'-nfe.xml';
	chamar_pag($CACTUX_CONF['path'].'xml_nfce'."/".$pasta_empresa.$pasta_xml.$a[nota_tx_chaveAcesso].$sufixo.'-nfe.xml','','','');
	// readfile($_SERVER[DOCUMENT_ROOT].$CACTUX_CONF['path'].'xml_nfce'."/".$pasta_xml.$a[nota_tx_chaveAcesso].'-nfe.xml');
	exit;	
}




function getCurlValue($filename, $contentType, $postname) {

	// PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax
	// See: https://wiki.php.net/rfc/curl-file-upload
	if (function_exists('curl_file_create')) {
		return curl_file_create($filename, $contentType, $postname);
	}

//echo "asd";
//exit;

 
	// Use the old style if using an older version of PHP
	$value = "@{$filename};filename=" . $postname;
	if ($contentType) {
		$value .= ';type=' . $contentType;
	}
 
	return $value;
}


function nfe_recebe_log() {
		
		// ENDERECO DO SERVIDOR DE NFe CACTUS
		//$target_url = 'http://192.168.0.110/servidor_nfe/retorno.php';
		$target_url = SERVIDOR_CACTUS.'retorno.php?'.cactux_cookie::url_sistema();
		
		$data = array('cliente' => NFE_CLIENTE);
		$options = array(CURLOPT_URL => $target_url,CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data);
 
		$ch = curl_init();
		curl_setopt_array($ch, $options);
		$ret_curl = curl_exec($ch);
		curl_close($ch);

//$ret_curl = 'OK |NFE.IMPRIMIRDANFEPDF("c:\www\servidor_nfe\hortvida\24170109255518000140550010000000021100655243-nfe.xml") OK: Arquivo criado em: C:\ACBrMonitorPLUS\PDF\24170109255518000140550010000000021100655243-nfe.pdf | Fim';
		
//echo "!$ret_curl!<hr><br><br>";
		if( $ret_curl == ''  ) {
			set_status("ERRO 16: Impossível se comunicar com servidor CACTUS");
			return;
		}


		if( substr($ret_curl,0,2) != 'OK'  ) {
			if( get_status() == '' )
				set_status($ret_curl);
			return;
		}

		if( substr($ret_curl,-5) != '| Fim'  ) {
			set_status("ERRO 11: Mensagem incompleta!");
			return;
		}

		
		// SALVA O LOG VINDO DO SERVIDOR CACTUS NO CLIENTE HORTVIDA
		if (!$fp = fopen(LOG, 'w')) {
			set_status("ERRO 17: Não foi possível abrir o arquivo (".LOG.")");
			return;
		}

		// SALVA O LOG NO ARQUIVO
		fputs($fp,$ret_curl);
		fclose($fp);

		return;
}

function nfe_envia_xml($xml_aguardando,$xml_autorizado) {
	global $CONFIGURA;

	require_once "../spednfe/vendor/autoload.php";

	
	$config = [
		"atualizacao" => "2018-02-06 06:01:21",
		"tpAmb" => $CONFIGURA[AMBIENTE_NFE], // Se deixar o tpAmb como 2 você emitirá a nota em ambiente de homologação(teste) e as notas fiscais aqui não tem valor fiscal
		"razaosocial" => $CONFIGURA[NOME_IMPRESSAO],
		"siglaUF" => strtoupper($CONFIGURA[UF]),
		"cnpj" => trata_xml($CONFIGURA[CNPJ]),
		"schemes" => "PL_009_V4",
		"versao" => "4.00",
		"tokenIBPT" => "AAAAAAA",
		"CSC" => $CONFIGURA[CSC],
		"CSCid" => $CONFIGURA[CSCID]
	];

	// ENDERECO DO SERVIDOR DE NFe CACTUS
	// $target_url = SERVIDOR_CACTUS.'enviar.php';
	
	$arq_vez_caminho_completo = $xml_aguardando;
	// $arq_vez = basename($arq_vez_caminho_completo);
	// $md5_antes = md5_file($arq_vez_caminho_completo);
	$xml = file_get_contents($arq_vez_caminho_completo);


	//Assinar XML
	$configJson = json_encode($config);
	$certificadoDigital = file_get_contents($CONFIGURA[CERTIFICADO]);

	$cert = NFePHP\Common\Certificate::readPfx($certificadoDigital, $CONFIGURA[SENHA]);
	try {
		$tools = new NFePHP\NFe\Tools($configJson,$cert);
	} catch (\Exception $e) {
		// SE AS INFORMAÇÕES DA EMPRESA NÃO ESTIVEREM SIDO INFORMADAS
		return($e->getMessage());
	}
	$tools->model('65');

	$soap = new NFePHP\Common\Soap\SoapCurl($cert);
	$soap->timeout($CONFIGURA[TIMEOUT]);

	try {
		$xmlAssinado = $tools->signNFe($xml); // O conteúdo do XML assinado fica armazenado na variável $xmlAssinado
	} catch (\Exception $e) {
		//aqui você trata possíveis exceptions da assinatura
		$contJson = $tools->contingency->activate('RN', 'SERVIDOR SEFAZ FORA DO AR', $tipo = 'OFFLINE');
		$tools->contingency->load($contJson);

		file_put_contents($arq_vez_caminho_completo,$xml);
		return($e->getMessage());
	}

	//Enviar Lote
	try {
		$idLote = str_pad(100, 15, '0', STR_PAD_LEFT); // Identificador do lote
		$resp = $tools->sefazEnviaLote([$xmlAssinado], $idLote);

		$st = new NFePHP\NFe\Common\Standardize();
		$std = $st->toStd($resp);
		if ($std->cStat != 103) {
			//erro registrar e voltar
			return("[$std->cStat] $std->xMotivo");
		}
		$recibo = $std->infRec->nRec; // Vamos usar a variável $recibo para consultar o status da nota
	} catch (\Exception $e) {
		//aqui você trata possiveis exceptions do envio
		// exit($e->getMessage());
		
		$contJson = $tools->contingency->activate('RN', 'SERVIDOR SEFAZ FORA DO AR', $tipo = 'OFFLINE');
		$tools->contingency->load($contJson);

		file_put_contents($arq_vez_caminho_completo,$xmlAssinado);

		return $e->getMessage();
	}

	//Consultar Recibo
	try {
		$protocolo = $tools->sefazConsultaRecibo($recibo);
	} catch (\Exception $e) {
		//aqui você trata possíveis exceptions da consulta
		// exit($e->getMessage());
		return $e->getMessage();
	}

	//finalizar o processo
	try {
		$protocol = new NFePHP\NFe\Factories\Protocol();
		$xmlProtocolado = $protocol->add($xmlAssinado,$protocolo);

		file_put_contents($arq_vez_caminho_completo,$xmlProtocolado);
	} catch (\Exception $e) {
		//aqui você trata possíveis exceptions ao adicionar protocolo
		return $e->getMessage();
	}
	

	$stdCl = new NFePHP\NFe\Common\Standardize($protocolo);
	$arr = $stdCl->toArray();
	
	
	if(@array_key_exists('xMotivo', $arr))
		$notaStatus = $arr[protNFe][infProt][cStat];
	
	
	
	if($notaStatus=='100'){
		file_put_contents($xml_autorizado,$xmlProtocolado);
	}

	// if($notaStatus == '539'){
	// 	$motivoDuplicado = $arr[protNFe][infProt][xMotivo];
	// 	$numeroAntigo = substr($motivoDuplicado,71,44);
		
	// 	$consultaChave = $tools->sefazConsultaChave($numeroAntigo);
		
	// 	$stdCl2 = new NFePHP\NFe\Common\Standardize($consultaChave);
	// 	$arr_consulta = $stdCl2->toArray();

	// 	if($arr_consulta[protNFe][infProt][cStat] == '100'){
	// 		echo "<hr>";
	// 		echo $consultaChave;
	// 		echo "<hr>";
	// 		$xmlProtocolado = $protocol->add($xmlAssinado,$consultaChave);
	// 		file_put_contents($arq_vez_caminho_completo,$xmlProtocolado);
	// 		echo $xmlProtocolado;
	// 		echo "<hr>";

	// 	}
		
	// 	echo "<pre>";
	// 	print_r($arr_consulta);
	// 	echo "</pre>";
	// }
		

	return $arr;

	exit;





	//NOTE: The top level key in the array is important, as some apis will insist that it is 'file'.
	$data = array('file' => base64_encode($arq),'nome' => $arq_vez, 'md5' => $md5_antes,'cliente' => NFE_CLIENTE);

	$options = array( CURLOPT_URL => $target_url, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $data, CURLOPT_TIMEOUT => 5);
	$ch = curl_init();
	curl_setopt_array($ch, $options);
	$ret_curl = curl_exec($ch);
	curl_close($ch);



	$erro = 1;
	
	// SE O SERVIDOR RETORNOU DIZENDO QUE GRAVOU, VERIFICA SE O MD5 EH IQUAL
	if( substr($ret_curl,0,2) == "OK" ) {
		$md5_depois = trim(substr($ret_curl,3));

		if( $md5_antes != $md5_depois ) {
			$erro = 1;
			$ret_curl = "ERRO 12: arquivo corrompido no servidor!";
		} else {
			$erro = 0;
			$ret_curl = "NFe Enviada";
		}
	}

	if( substr($ret_curl,0,4) == "ERRO" ) {
		$erro=0;
	}		

	// VERIFICA SE HOUVE ERRO NO ENVIO
	if( $erro == 1 ) {
		$ret_curl = "ERRO 10: Erro ao enviar o xml";
	}
	

	return $ret_curl;	
}

function limpa_log_retorno() {

	// NAO A FUNCAO DE LIMPAR O ARQUIVO DE RETORNO AGORA É NO SERVIDOR CACTUS NFe E NAO MAS NO CLIENTE
	
}

function exclui_pedido(){
	
	//remover('ordem',$_POST[id]);
	//volta_estoquePedido();
	

}

function exclui_venda(){

	$sql_movimento = selecionar('movimento','movi_tx_status',"!inativo"," AND movi_nb_ordem = '$_POST[id]'");
	if(num_linhas($sql_movimento)>0){
		$a_mov = carrega_array($sql_movimento);

		atualizar('movimento','movi_tx_status','inativo',$a_mov[0]);
		atualizar('ordem',array('orde_tx_status','orde_tx_statusNota'),array('Cancelado','Venda Cancelada'),$_POST[id]);

		$sql_baixa = selecionar('orpr,ordem,produto','orpr_tx_status','ativo'," AND orde_nb_id = '$_POST[id]'");
		while($a_baixa=carrega_array($sql_baixa)){
			$a_prod = carregar('prod_tx_qtde|produto',$a_baixa[prod_nb_id]);
			atualizar('produto',array('prod_tx_qtde'),array($a_prod[prod_tx_qtde]+$a_baixa[orpr_tx_qtde]),$a_baixa[prod_nb_id]);
		}	

	}

	index();
	exit;
}

function volta_estoquePedido(){
	
	$sql = selecionar('orpr,ordem','orde_nb_id,orpr_tx_status',"$_POST[id],ativo");
	
	while( $a = carrega_array($sql) ){
		
		$prod = carregar('produto',$a[orpr_nb_produto]);
		
		if( $a[orpr_tx_forma] == 'Unidade' ) {
			
			$qtde = ($prod[NOME_QTDE]+$a[orpr_tx_qtde]);
			$qtdecx = $prod[NOME_QTDE]+($a[orpr_tx_qtde]*$prod[prod_tx_embalagem]); 
			
		}else{
			
			$qtde = $prod[NOME_QTDE]+($a[orpr_tx_qtde]*$prod[prod_tx_embalagem]);
			$qtdecx = $prod[prod_tx_embalagem]+$a[orpr_tx_qtde];
			
		}
		
		$campos =array(NOME_QTDE);
		$valores=array($qtde);
		atualizar('produto',$campos,$valores,$prod[prod_nb_id]);
		
	}
	
	layout_pedido_cliente();
	exit;
	
}

function dv($key_nfe){


	$base = 9;
	$result = 0;
	$sum = 0;
	$factor = 2;

	for ($i = strlen($key_nfe); $i > 0; $i--) {
		$numbers[$i] = substr($key_nfe,$i-1,1);
		$partial[$i] = $numbers[$i] * $factor;
		
		$sum += $partial[$i];
		if ($factor == $base) {
			$factor = 1;
		}
		$factor++;
	}
	
	if ($result == 0){
		$sum *= 10;
		$digit = $sum % 11;
	if ($digit == 10){
		$digit = 0;
	}
	
	return $digit;
	
	} elseif ($result == 1){
		$rest = $sum % 11;
		return $rest;
	}
	
}

function gera_numeroNota(){
	
	$ordem = $_POST[id];
	$a = carregar('ordem',$ordem); 
	$loja = carregar('empresa',$a[orde_nb_empresa]);
	$nota = carregar('nota','','nota_nb_ordem',$ordem);
	$cidade = carregar('cidade',$loja[empr_nb_cidade]);
	// print_r($loja);
	
	//	SE A NOTA JÁ EXISTIR, ENTAO SÓ FAZ RETORNAR AS INFORMACOES
	// SENAO CRIA UMA NOVA
	// if( $nota[nota_tx_chaveAcesso] > 0 && $nota[nota_tx_chaveAcesso] != '' ) {
	// 	return $nota[nota_tx_chaveAcesso];
	// }
	
	
	$uf = $cidade[cida_tx_codUf];//02
	// $aamm = date('y').date('m');//04
	$aamm = substr($nota[nota_tx_emissao],2,2).substr($nota[nota_tx_emissao],5,2);
	$cnpj = str_replace(array('.','/','-'),array('','',''),$loja[empr_tx_cnpj]);//14

	$modelo = $nota[nota_tx_modelo];//02
	$serie = zeros($nota[nota_tx_serie],3);//03
	$numeroNf = zeros($nota[nota_tx_numero],9);//09
	$formaEmissao = $nota[nota_tx_formaEmissao];//01
	$codNum = rand(10000000,99999999);//08
	
	$num = $uf.$aamm.$cnpj.$modelo.$serie.$numeroNf.$formaEmissao.$codNum;
	$dv = dv($num);//01
	$numero = $num.$dv;
	
	$campos=array(nota_tx_chaveAcesso,nota_tx_codigoNumerico,nota_tx_dv);
	$valores=array($numero,$codNum,$dv);
	atualizar('nota',$campos,$valores,$nota[nota_nb_id]);
	
	return $numero;
	
	exit;
	
}

// ESSA FUNCAO ANTIGA RECEBIA SERVIA PARA TIRAR, POR EXMEPLO 80% DO VALOR DA NOTA
function acha_desconto_antigo($orpr){
	
	$a_orpr = carregar('orde_tx_valor,orpr_tx_valor,orpr_tx_desconto|orpr,ordem,produto',$orpr);
	
//	$a_orpr[orpr_tx_valor] = $a_orpr[orpr_tx_valor]*($_POST[porcentagem_nota]/100);
	$a_orpr[orde_tx_valor] = $a_orpr[orde_tx_valor]*($_POST[porcentagem_nota]/100);

	$totalOrdem = $a_orpr[orde_tx_valor];
	$valorProduto = $a_orpr[orpr_tx_valor];
	
	$desconto = $a_orpr[orde_tx_valor] - $a_orpr[orde_tx_valor];

	
	$pProd = (100*$valorProduto) / $totalOrdem;
	$vDesc = ($pProd/100)*$desconto;

	return valor(mostra_valor($vDesc));
	
}

// A FUNCAO NOVA SERVE PARA DILUIR O DESCONTO DADO NOS PRODUTOS
function acha_desconto($orpr,$primeiro_produto){
	
	$a_orpr = carregar('orde_tx_valor,orpr_tx_valor,orpr_tx_desconto|orpr,ordem,produto',$orpr);
	

	$totalOrdem = $a_orpr[orde_tx_valor];
	$valorProduto = $a_orpr[orpr_tx_valor];
	
	$desconto = $a_orpr[orde_tx_valor] - $a_orpr[orde_tx_valor];

	
	$pProd = (100*$valorProduto) / $totalOrdem;
	$vDesc = ($pProd/100)*$desconto;

	return valor(mostra_valor($vDesc));
}




function gera_xml(){
	global $CONFIGURA;
	//echo "Gerado xml".date("H:i:s");
	
	$ordem = $_POST[id];
	$a = carregar('ordem',$ordem); 

	$a[orde_tx_cpf] = str_replace(array('.','/','-'),array('','',''),$a[orde_tx_cpf]);

	$numeroNota = gera_numeroNota();
	
	//DADOS NOTA FISCAL
	$a_nota = carregar('nota','','nota_nb_ordem',$ordem);
	
	$nota[CodNumerico] = $a_nota[nota_tx_codigoNumerico];
	$nota[naturezaOperacao] = $a_nota[nota_tx_naturezaOperacao]; //VENDA DE MERCADORIA ADQUIRIDA OU RECEBIDA DE TERCEIROS
	$nota[modelo] = $a_nota[nota_tx_modelo];
	$nota[serie] = $a_nota[nota_tx_serie];
	$nota[numero] = $a_nota[nota_tx_numero];
	
	
	// $a_nota[nota_tx_emissao] ='2017-04-05 10:34:00';
	// $a_nota[nota_tx_emissao] = date('Y-m-d H:i:s');

	$nota[dataEmissao] = substr($a_nota[nota_tx_emissao],0,10).'T'.substr($a_nota[nota_tx_emissao],11).'-03:00';
	// $nota[dataEmissao] = '2018-05-15T16:48:00-02:00';

	$nota[data] = substr($a_nota[nota_tx_emissao],0,19);
	$nota[hora] = substr($a_nota[nota_tx_emissao],-8);
	$nota[tipoNota] = $a_nota[nota_tx_tipo];
	$nota[tipoImpressao] = $a_nota[nota_tx_tipoImpressao];//1-Retrato/ 2-Paisagem
	$nota[tipoEmissao] = $a_nota[nota_tx_formaEmissao];

	
	/*TIPOS DE EMISSAO
	1 – Normal – emissão normal;
	2 – Contingência FS – emissão	em contingência com impressão do DANFE em Formulário de Segurança;
	3 – Contingência SCAN – emissão em contingência no Sistema de Contingência do Ambiente Nacional – SCAN;
	4 – Contingência DPEC -	emissão em contingência com envio da Declaração Prévia de Emissão em Contingência – DPEC;
	5 – Contingência FS-DA - emissão em contingência com impressão do DANFE em Formulário de Segurança para Impressão de Documento Auxiliar de Documento Fiscal Eletrônico (FS-DA).
	*/
	
	$nota[dv] = $a_nota[nota_tx_dv];

	$nota[tipoAmbiente] = $CONFIGURA[AMBIENTE_NFE];
	
	switch( $a_nota[nota_tx_finalidadeEmissao] ){
		
		case 'NF-e normal': $nota[finalidade] = 1;	break;
		case 'NF-e complementar': $nota[finalidade] = 2;	break;
		case 'NF-e de ajuste': $nota[finalidade] = 3;	break;
		
	}

	// PARA A NFC-E
	$nota[indFinal] = 1;
	$nota[indPres] = 1;
	
	//0 - EMISSÃO DE NF-E COM APLICATIVO DO CONTRIBUINTE
	$nota[procEmissao] = 0;
	
	//VERSÃO DO APLICATIVO EMISSOR DE NFe
	$nota[verProcEmissao] = 'CACTUS 1.0';
	
	switch($a[orde_tx_forma]){//FALTA DEFINAR COMO VERIFICAR A FORMA DE PAGAMENTO
		
		case 'pagamento à vista':	$nota[indPagamento] = 0; break;
		case 'pagamento à prazo':	$nota[indPagamento] = 1; break;
		case 'outros':				$nota[indPagamento] = 2; break;
		default: $nota[indPagamento] = 0;
	}
	

	//$VALOR_IMPOSTO_SIMPLES = 5.47;
	//$VALOR_IMPOSTO_SIMPLES = 2.22; // 2013-01-23
	
//	$VALOR_IMPOSTO_SIMPLES = 5.47;
	
	//DADOS EMITENTE
	$loja = carregar('empresa',$a[orde_nb_empresa]);
	$bairro = carregar('bairro',$loja[empr_nb_bairro]);
	$cidade = carregar('cidade',$loja[empr_nb_cidade]);

	$cnpj = preg_replace("/[^0-9]/", "", $loja[empr_tx_cnpj]);
	$pasta_empresa = $cnpj.'/';

	$VALOR_IMPOSTO_SIMPLES = $loja[empr_tx_aliquota];
	
	
	if( trim($bairro[bair_tx_nome]) == '' )
		$bairro[bair_tx_nome] = 'Centro';
	
	//CÓDIGO DO MUNICÍPIO DE OCORRÊNCIA DO FATO GERADOR DO ISSQN	
	$nota[cMunFG] = $cidade[cida_tx_ibge];
	$nota[codUf] = $cidade[cida_tx_codUf];
	
	$emitente[cnpj] = str_replace(array('.','/','-'),array('','',''),$loja[empr_tx_cnpj]);
	$emitente[razao] = $loja[empr_tx_razao];
	$emitente[fantasia] = $loja[empr_tx_nome];
	$emitente[logradour] = $loja[empr_tx_endereco];
	$emitente[numero] = $loja[empr_tx_numero];
	$emitente[complemento] = $loja[empr_tx_complemento];
	$emitente[nomeBairro] = $loja[empr_tx_bairro];
	$emitente[codCidade] = $cidade[cida_tx_ibge];
	$emitente[nomeCidade] = str_replace('ó','o',$cidade[cida_tx_nome]);
	$emitente[uf] = $cidade[cida_tx_uf];
	$emitente[cep] = str_replace('-','',$loja[empr_tx_cep]);
	$emitente[codPais] = '1058';
	$emitente[nomePais] = 'Brasil';
	$emitente[inscEstadual] = $loja[empr_tx_estadual];
	$emitente[inscMunicipal] = $loja[empr_tx_municipal];
	$emitente[cnae] = $loja[empr_tx_cnae];
	
	switch( $loja[empr_tx_crt] ){
		
		case '1: Simples Nacional':	$emitente[crt] = '1';	break;
		case '2: Simples Nacional - excesso de sublimite da receita bruta':	$emitente[crt] = '2';	break;
		case '3: Regime Normal':		$emitente[crt] = '3';	break;
		default:	$emitente[crt] = '1';	break;
		
	}
	
	
	//DADOS DESTINATARIO
	$cliente = carregar('entidade',$a[orde_nb_entidade]);
	$bairro = carregar('bairro',$cliente[enti_nb_bairro]);
	$cidade = carregar('cidade',$cliente[enti_nb_cidade]);
	
	if( trim($bairro[bair_tx_nome]) == '' )
		$bairro[bair_tx_nome] = 'Centro';
	if( trim($cidade[cida_tx_ibge]) == '' ) {
		$cidade[cida_tx_ibge] = $cidade[cida_tx_ibge];
		$destinatario[nomeCidade] = $cidade[cida_tx_nome];
		$destinatario[uf] = $cidade[cida_tx_uf];
	}
	if( trim($cliente[enti_tx_endereco]) == '' )
		$cliente[enti_tx_endereco] = 'Rua não identificada';
	if( trim($cliente[enti_tx_numero]) == '' )
		$cliente[enti_tx_numero] = 'sem número';
		
	$destinatario[cnpj] = str_replace(array('.','/','-'),array('','',''),$cliente[enti_tx_cnpj]);
	if($cliente[enti_tx_razao] == '')
		$destinatario[razao] = $cliente[enti_tx_nome];//AQUI TEM QUE EXIBIR A RAZÃO SOCIAL DO CLIENTE MAS ESTA VAZIO NO BANCO DE DADOS
	else
		$destinatario[razao] = $cliente[enti_tx_razao];//AQUI TEM QUE EXIBIR A RAZÃO SOCIAL DO CLIENTE MAS ESTA VAZIO NO BANCO DE DADOS
	
	$destinatario[logradouro] = $cliente[enti_tx_endereco];
	$destinatario[numero] = $cliente[enti_tx_numero];
	$destinatario[nomeBairro] = $bairro[bair_tx_nome];
	$destinatario[codCidade] = $cidade[cida_tx_ibge];
	$destinatario[nomeCidade] =  $cidade[cida_tx_nome];
	$destinatario[uf] = $cidade[cida_tx_uf];
	$destinatario[cep] = str_replace('-','',$cliente[enti_tx_cep]);
	$destinatario[codPais] = '1058';
	$destinatario[nomePais] = 'Brasil';
	if($cliente[enti_tx_isentoICMS] == 'sim')
		$destinatario[inscEstadual] = 'ISENTO';
	else
		$destinatario[inscEstadual] = $cliente[enti_tx_estadual];
	$destinatario[email] = $cliente[enti_tx_email];
	
	// if( $nota[tipoAmbiente]==2 ){
		
	// 	$destinatario[razao] = 'NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL';
	// 	$destinatario[cnpj] = '99999999000191';
	// 	$destinatario[logradouro] = 'Rua';
	// 	$destinatario[numero] = '012';
	// 	$destinatario[nomeBairro] = 'Bairro';
	// 	$destinatario[codCidade] = '2408003';
	// 	$destinatario[nomeCidade] =  'Mossoro';
	// 	$destinatario[uf] = 'RN';
	// 	$destinatario[cep] = '59607600';
	// 	$destinatario[codPais] = '1058';
	// 	$destinatario[nomePais] = 'Brasil';
		
		
	// }
	
	$modFrete='9'; /* 9- sem frete*/

	if($a_nota[nota_tx_emissao]!='' && $a_nota[nota_tx_emissao]!='0000-00-00 00:00:00'){
		$pasta_xml0 = substr($a_nota[nota_tx_emissao],0,4).substr($a_nota[nota_tx_emissao],5,2);
		$pasta_xml = substr($a_nota[nota_tx_emissao],0,4).substr($a_nota[nota_tx_emissao],5,2).'/contingencia/';
		@mkdir(LOCAL.$pasta_empresa);
		@mkdir(LOCAL.$pasta_empresa.$pasta_xml0);
		@mkdir(LOCAL.$pasta_empresa.$pasta_xml);
	}else{
		@mkdir(LOCAL.$pasta_empresa);
		@mkdir(LOCAL.$pasta_empresa.date('Ym'));
		@mkdir(LOCAL.$pasta_empresa.date('Ym').'/contingencia');
		$pasta_xml = date('Ym').'/contingencia/';
	}

	$fp = fopen(LOCAL.$pasta_empresa.$pasta_xml.$numeroNota.'-nfe.xml','w');

	// fputs($fp,'<nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00">');
	fputs($fp,'<NFe xmlns="http://www.portalfiscal.inf.br/nfe">');
	
	fputs($fp,'<infNFe Id="NFe'.$numeroNota.'" versao="4.00">');
		
		fputs($fp,"<ide>");
			fputs($fp,"<cUF>".$nota[codUf]."</cUF>");
			fputs($fp,"<cNF>".trata_xml($nota[CodNumerico])."</cNF>");
			fputs($fp,"<natOp>".trata_xml($nota[naturezaOperacao])."</natOp>");
			// fputs($fp,"<indPag>".trata_xml($nota[indPagamento])."</indPag>");
			fputs($fp,"<mod>".trata_xml($nota[modelo])."</mod>");
			fputs($fp,"<serie>".trata_xml($nota[serie])."</serie>");
			fputs($fp,"<nNF>".trata_xml($nota[numero])."</nNF>");
			fputs($fp,"<dhEmi>".trata_xml($nota[dataEmissao])."</dhEmi>");
			// fputs($fp,"<dSaiEnt>".trata_xml($nota[data])."</dSaiEnt>");
			// fputs($fp,"<hSaiEnt>".trata_xml($nota[hora])."</hSaiEnt>");
			fputs($fp,"<tpNF>".trata_xml($nota[tipoNota])."</tpNF>");
			
			fputs($fp,"<idDest>1</idDest>"); // novo

			fputs($fp,"<cMunFG>".trata_xml($nota[cMunFG])."</cMunFG>");
			fputs($fp,"<tpImp>".trata_xml($nota[tipoImpressao])."</tpImp>");
			fputs($fp,"<tpEmis>".trata_xml($nota[tipoEmissao])."</tpEmis>");
			fputs($fp,"<cDV>".trata_xml($nota[dv])."</cDV>");
			fputs($fp,"<tpAmb>".trata_xml($nota[tipoAmbiente])."</tpAmb>");
			fputs($fp,"<finNFe>".trata_xml($nota[finalidade])."</finNFe>");
			fputs($fp,"<indFinal>".trata_xml($nota[indFinal])."</indFinal>");
			fputs($fp,"<indPres>".trata_xml($nota[indPres])."</indPres>");
			fputs($fp,"<procEmi>".trata_xml($nota[procEmissao])."</procEmi>");
			fputs($fp,"<verProc>".trata_xml($nota[verProcEmissao])."</verProc>");


		fputs($fp,"</ide>");
		
		fputs($fp,"<emit>");
			fputs($fp,"<CNPJ>".trata_xml($emitente[cnpj])."</CNPJ>");
			fputs($fp,"<xNome>".trata_xml($emitente[razao])."</xNome>");
			fputs($fp,"<xFant>".trata_xml($emitente[fantasia])."</xFant>");
			fputs($fp,"<enderEmit>");
				fputs($fp,"<xLgr>".trata_xml($emitente[logradour])."</xLgr>");
				fputs($fp,"<nro>".trata_xml($emitente[numero])."</nro>");
				fputs($fp,"<xCpl>".trata_xml($emitente[complemento])."</xCpl>");
				fputs($fp,"<xBairro>".trata_xml($emitente[nomeBairro])."</xBairro>");
				fputs($fp,"<cMun>".trata_xml($emitente[codCidade])."</cMun>");
				fputs($fp,"<xMun>".trata_xml($emitente[nomeCidade])."</xMun>");
				fputs($fp,"<UF>".trata_xml($emitente[uf])."</UF>");
				fputs($fp,"<CEP>".trata_xml($emitente[cep])."</CEP>");
				fputs($fp,"<cPais>".trata_xml($emitente[codPais])."</cPais>");
				fputs($fp,"<xPais>".trata_xml($emitente[nomePais])."</xPais>");
			fputs($fp,"</enderEmit>");
			fputs($fp,"<IE>".trata_xml($emitente[inscEstadual])."</IE>");
			fputs($fp,"<IM>".trata_xml($emitente[inscMunicipal])."</IM>");
			fputs($fp,"<CNAE>".trata_xml($emitente[cnae])."</CNAE>");
			fputs($fp,"<CRT>".trata_xml($emitente[crt])."</CRT>");
		fputs($fp,"</emit>");

		// SE NAO FOR CLIENTE DE BALCAO		
// 		if( $cliente[enti_nb_id] > 1 && $destinatario[cnpj] != '' ) {
		
// 			fputs($fp,"<dest>");
// 				if(strlen(trata_xml($destinatario[cnpj])) == 14)
// 					fputs($fp,"<CNPJ>".trata_xml($destinatario[cnpj])."</CNPJ>");
// 				elseif(strlen(trata_xml($destinatario[cnpj])) == 11)
// 					fputs($fp,"<CPF>".trata_xml($destinatario[cnpj])."</CPF>");

// 				fputs($fp,"<xNome>".trata_xml($destinatario[razao])."</xNome>");
// 				fputs($fp,"<indIEDest>9</indIEDest>");
// //				fputs($fp,"<email>".trata_xml($destinatario[email])."</email>");
// 			fputs($fp,"</dest>");
// 		}

		if( $a[orde_tx_cpf] != '' ) {
		
			fputs($fp,"<dest>");
				if(strlen(trata_xml($a[orde_tx_cpf])) == 14)
					fputs($fp,"<CNPJ>".trata_xml($a[orde_tx_cpf])."</CNPJ>");
				elseif(strlen(trata_xml($a[orde_tx_cpf])) == 11)
					fputs($fp,"<CPF>".trata_xml($a[orde_tx_cpf])."</CPF>");

				fputs($fp,"<xNome>".trata_xml($a[orde_tx_nome])."</xNome>");
				fputs($fp,"<indIEDest>9</indIEDest>");
//				fputs($fp,"<email>".trata_xml($destinatario[email])."</email>");
			fputs($fp,"</dest>");
		}

		fputs($fp,"<autXML>");
			fputs($fp,"<CNPJ>09255518000140</CNPJ>");
		fputs($fp,"</autXML>");


		if($loja[empr_tx_cpfContador]!=''){
			fputs($fp,"<autXML>");
				if(strlen($loja[empr_tx_cpfContador]) == 18)
					fputs($fp,"<CNPJ>".str_replace(array('/','-','.'),'',$loja[empr_tx_cpfContador])."</CNPJ>");
				else
					fputs($fp,"<CPF>".str_replace(array('/','-','.'),'',$loja[empr_tx_cpfContador])."</CPF>");

			fputs($fp,"</autXML>");
		}
		
		if($CONFIGURA[CATEGORIA_SERVICO]>0)
			$extra_cate = " AND prod_nb_categoria != '$CONFIGURA[CATEGORIA_SERVICO]'";


		// DEFINE QUAL O TIPO DE AGRUPAMENTO A SER UTILIZADO NA IMPRESSÃO
		if ($CONFIGURA[IMPRESSAO_AGRUPADA_POR_PRODUTO]=='SIM') {
			$agrupamento = " GROUP BY prod_nb_id ";
		} else {
			$agrupamento = "";
		}


		$sql = selecionar('orpr,ordem,produto','orde_tx_status,orpr_tx_status',"!inativo,ativo","  AND (prod_tx_servico != 'Sim' OR prod_tx_servico IS NULL) AND orpr_tx_qtde > '0' AND prod_nb_id >= 100 AND orde_nb_id = '$ordem' $extra_cate $agrupamento ORDER BY orpr_tx_valor ASC");
		
		$i = 0;
		while( $a = carrega_array($sql) ){//INICIO PRODUTOS
			
			$sql_tributacao = selecionar('tributacao,imposto','impo_tx_status,trib_tx_status','ativo,ativo'," AND impo_tx_codigo='$a[prod_tx_ncm]' AND impo_tx_tipo = 'ncm'");
			$a_trib = carrega_array($sql_tributacao);

			//$a_imposto = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_imposto]);
			//$a_origem = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_cstOrigem]);
			//$a_csosn = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_cstCsosn]);
			//$a_pis = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_cstPis]);
			//$a_cofins = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_cstCofins]);

			$a_imposto = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_imposto]);
			$a_origem  = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_cstOrigem]);
			$a_csosn   = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_cstCsosn]);
			$a_modbc   = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_modbc]);
			$a_pis     = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_cstPis]);
			$a_cofins  = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_cstCofins]);
			$a_ipi     = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_cstIpi]);
			$a_ipi2    = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_cenqIpi]);
			$a_ipiEnq  = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_ipiEnquadramento]);
			$a_ipicst  = carregar('impo_nb_id,impo_tx_codigo,impo_tx_nome|imposto',$a_trib[trib_nb_ipiCst]);
			

			++$ITEM_PRODUTO;


			unset($SPED);// LIMPA OS DADOS DO SPED A SEREM SALVOS

			$SPED[id_orpr]=$a[orpr_nb_id];
			$SPED[id_nota]=$a_nota[nota_nb_id];
			
			
			if( trim($a[prod_tx_unidade]) == '' )
				$a[prod_tx_unidade] = 'Un';

			//DADOS PRODUTO
			$produto[cod] = 			$a[prod_nb_id];
			$produto[ean] = 			$a[prod_tx_codbarras];

			require_once "../spednfe/vendor/autoload.php";

			try {
			    if (NFePHP\Gtin\Gtin::check($produto[ean])->isValid()) {
			        // echo "Valido";
			    }
			} catch (\Exception $e) {
			    $produto[ean] = '';
			}

			
			if( strlen($produto[ean]) != 13 )
				$produto[ean] = '';
			
			
			$produto[nome] = 			$a[prod_tx_nome];
			$produto[ncm] = 			$a[prod_tx_ncm];
			$produto[qtdComercial] = 	$a[orpr_tx_qtde];

			// -------------------------------------------------
			// MODIFICA O VALOR DO PRODUTO DE ACORDO COM A PORCENTAGEM ESCOLHIDA
			// -------------------------------------------------
			$a[orpr_tx_valor] = $a[orpr_tx_valor]*($_POST[porcentagem_nota]/100);



			$produto[valorUnComercial] =$a[orpr_tx_valor];
			

			$produto[cfop] = 			$a_trib[trib_tx_cfopInterno];
			//$produto[cfop] = 			'5929'; 	// PRA NAO PAGAR O IMPOSTO 2X QUE JAH FOI PAGO NO ECF
			$produto[unidade] = 		$a[prod_tx_unidade];
			$produto[valor] = 			$a[orpr_tx_valor]*$a[orpr_tx_qtde];
			$produto[unTributaria] = 	$a[prod_tx_unidade];
			if( $produto[unTributaria] == '' )
				$produto[unTributaria]='0';
				
			$produto[qtdTributaria]=	$a[orpr_tx_qtde];
			$produto[valorUnTributaria]=$a[orpr_tx_valor];
//			if( substr($produto[cfop],0,2) == '54' )
//				$produto[indTot] = 0;
//			else
				$produto[indTot] = 1;
			
			switch( $a[prod_tx_origem] ){
				
				case 'Nacional': 									$produto[origem] = 0; break;
				case 'Estrangeira - Importação Direta':				$produto[origem] = 1; break;
				case 'Estrangeira - Adquirida no Mercado Interno':	$produto[origem] = 2; break;
				default:		 									$produto[origem] = 0; break;
				
			}
			
			$produto[cst] = $a_cst[cst_tx_codigo];
			
			switch($a[prod_tx_situacaoTributariaPIS]){
				
				case 'Operação Tributável (base de cálculo = valor da operação alíquota normal (cumulativo/não cumulativo))': $produto[CSTPIS] = 01; $break;
				case 'Operação Tributável (base de cálculo = valor da operação (alíquota diferenciada))': $produto[CSTPIS] = 02; $break;
				
			}
			
			$produto[pAliquotaPIS] = 	$a[prod_tx_pis1];
			$produto[vBCPIS] = 			$a[orpr_tx_valor]*$a[orpr_tx_qtde];
			$produto[rAliquotaPIS] = 	valor(mostra_valor($produto[vBCPIS]*($a[prod_tx_pis1]/100)));
			$produto[pAliquotaCOFINS] = $a[prod_tx_cofins1];
			$produto[vBCCOFINS] = 		$a[orpr_tx_valor]*$a[orpr_tx_qtde];
			$produto[rAliquotaCOFINS] = valor(mostra_valor($produto[vBCCOFINS]*($a[prod_tx_cofins1]/100)));
			$produto[vBC] = 			($a[orpr_tx_valor]*$a[orpr_tx_qtde])-$a[orpr_tx_desconto];
			$produto[pICMS] = 			$a[prod_tx_icms1]; //prod_tx_aliquotaICMS
			$produto[vICMS] = 			valor(mostra_valor($produto[vBC]*($a[prod_tx_icms1]/100)));
			$produto[extipi] = 			$a[prod_tx_extipi];
			//$produto[vDesc] = 			acha_desconto($a[orpr_nb_id],$ITEM_PRODUTO);

			// SE TIVER DESCONTO GERAL A SER DADO
			if( $a[orde_tx_desconto] > 0 ) {
				
				// SE NAO FOI DADO O DESCONTO AINDA
				if( $DESCONTO_NO_FINAL_REALIZADO != 1 ) {
				
					// SE O VALOR DO PRODUTO FOR MAIOR QUE O VALOR DO DESCONTO, ENTAO DA O DESCONTO
					if( $produto[valor] > $a[orde_tx_desconto] ) {
					
						$a[orpr_tx_desconto] += $a[orde_tx_desconto];
						$DESCONTO_NO_FINAL_REALIZADO = 1;
					}
				
				}
			
			}
			
			$produto[vDesc] = 			$a[orpr_tx_desconto];
			$produto[vOutro] = 			$produto[valor]*(0.1);
			
			$DESCONTO_TOTAL += $a[orpr_tx_desconto];

//			$produto[vCredICMSSN]	= 	$produto[valor]*($VALOR_IMPOSTO_SIMPLES/100);
			//echo '<br>'.$produto[pICMS].'<br>';
			//echo $produto[vICMS].'<br>';
			
			fputs($fp,'<det nItem="'.$ITEM_PRODUTO.'">');
				fputs($fp,"<prod>");
					fputs($fp,"<cProd>".trata_xml($produto[cod])."</cProd>");
					
					if(trata_xml($produto[ean]) != '' && trata_xml($produto[ean] != '0'))
						fputs($fp,"<cEAN>".trata_xml($produto[ean])."</cEAN>");
					else
						fputs($fp,"<cEAN>".''."</cEAN>");

					
					if($CONFIGURA[AMBIENTE_NFE]=='1')
						fputs($fp,"<xProd>".trata_xml($produto[nome])."</xProd>");
					else
						fputs($fp,"<xProd>".'NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL'."</xProd>");

					fputs($fp,"<NCM>".trata_xml($produto[ncm])."</NCM>");
					
					if(trata_xml($produto[extipi]) != '' && trata_xml($produto[extipi] != '0'))
						fputs($fp,"<EXTIPI>".trata_xml($produto[extipi])."</EXTIPI>");

					// SALVA OS DADOS PARA O SPED
					$SPED[cfop]=trata_xml($produto[cfop]);

					fputs($fp,"<CFOP>".trata_xml($produto[cfop])."</CFOP>");
					fputs($fp,"<uCom>".trata_xml($produto[unidade])."</uCom>");
					fputs($fp,"<qCom>".trata_xml($produto[qtdComercial])."</qCom>");
					fputs($fp,"<vUnCom>".trata_xml($produto[valorUnComercial])."</vUnCom>");
					fputs($fp,"<vProd>".trata_xml_numero($produto[valor])."</vProd>");
					
					if(trata_xml($produto[ean]) != '' && trata_xml($produto[ean] != '0'))
						fputs($fp,"<cEANTrib>".trata_xml($produto[ean])."</cEANTrib>");
					else
						fputs($fp,"<cEANTrib>".''."</cEANTrib>");
					
					fputs($fp,"<uTrib>".trata_xml($produto[unTributaria])."</uTrib>");
					fputs($fp,"<qTrib>".trata_xml($produto[qtdTributaria])."</qTrib>");
					fputs($fp,"<vUnTrib>".trata_xml($produto[valorUnTributaria])."</vUnTrib>");
					if($produto[vDesc]>0)
						fputs($fp,"<vDesc>".trata_xml_numero($produto[vDesc])."</vDesc>");
					fputs($fp,"<indTot>".trata_xml($produto[indTot])."</indTot>");
					// fputs($fp,"<vOutro>0.00</vOutro>");
				fputs($fp,"</prod>");
				fputs($fp,"<imposto>");
				
				if($a[prod_tx_totalTributo]>0){
					fputs($fp,"<vTotTrib>".round((($produto[valor]*$a[prod_tx_totalTributo])/100),2)."</vTotTrib>");
					$total_trib+=round((($produto[valor]*$a[prod_tx_totalTributo])/100),2);
				}

				// ----------------------------------------------------------------------------------------------
				// 1 EH O SIMPLES NACIONAL O RESTO EH TRIBUTACAO NORMAL
				// ----------------------------------------------------------------------------------------------
				if( $emitente[crt] == 1 ) {


					fputs($fp,"<ICMS>");

						fputs($fp,"<ICMSSN".$a_csosn[impo_tx_codigo].">");
							fputs($fp,"<orig>".$a_origem[impo_tx_codigo]."</orig>");
							fputs($fp,"<CSOSN>".$a_csosn[impo_tx_codigo]."</CSOSN>");
							// fputs($fp,"<pCredSN>0</pCredSN>");
							// fputs($fp,"<vCredICMSSN>0</vCredICMSSN>");
//							fputs($fp,"<pCredSN>$VALOR_IMPOSTO_SIMPLES</pCredSN>");
//							fputs($fp,"<vCredICMSSN>".trata_xml($produto[vCredICMSSN])."</vCredICMSSN>");
						fputs($fp,"</ICMSSN".$a_csosn[impo_tx_codigo].">");					
					fputs($fp,"</ICMS>");

					// SALVA OS DADOS PARA O SPED
					$SPED[cst_icms]=$a_csosn[impo_tx_codigo];
					$SPED[cst_pis] =$a_pis[impo_tx_codigo];

					
					fputs($fp,"<PIS>");
						if($a_pis[impo_tx_codigo] == '04' || $a_pis[impo_tx_codigo] == '06' || $a_pis[impo_tx_codigo] == '07' || $a_pis[impo_tx_codigo] == '08' || $a_pis[impo_tx_codigo] == '09'){
							fputs($fp,"<PISNT>");
							fputs($fp,"<CST>".$a_pis[impo_tx_codigo]."</CST>");
						}else{
							fputs($fp,"<PISOutr>");
							
							fputs($fp,"<CST>".$a_pis[impo_tx_codigo]."</CST>");
							fputs($fp,"<vBC>".trata_xml_numero($produto[valor])."</vBC>");
							fputs($fp,"<pPIS>".$a_trib[trib_tx_aliquotaPis]."</pPIS>");
							$valor_pis = trata_xml_numero(($produto[valor])*($a_trib[trib_tx_aliquotaPis]/100));
							fputs($fp,"<vPIS>".$valor_pis."</vPIS>");
							$total_pis+=round($valor_pis,2);

							// SALVA OS DADOS PARA O SPED
							$SPED[aliquota_pis]=$a_trib[trib_tx_aliquotaPis];
							$SPED[valor_pis]   =$valor_pis;
						}

						if($a_pis[impo_tx_codigo] == '04' || $a_pis[impo_tx_codigo] == '06' || $a_pis[impo_tx_codigo] == '07' || $a_pis[impo_tx_codigo] == '08' || $a_pis[impo_tx_codigo] == '09')
							fputs($fp,"</PISNT>");
						else
							fputs($fp,"</PISOutr>");
					fputs($fp,"</PIS>");


					$valorBcCOFINS = 0;


					// SALVA OS DADOS PARA O SPED
					$SPED[cst_cofins]=$a_cofins[impo_tx_codigo];

					fputs($fp,"<COFINS>");
						if($a_cofins[impo_tx_codigo] == '04' || $a_cofins[impo_tx_codigo] == '06' || $a_cofins[impo_tx_codigo] == '07' || $a_cofins[impo_tx_codigo] == '08' || $a_cofins[impo_tx_codigo] == '09'){
							fputs($fp,"<COFINSNT>");
							fputs($fp,"<CST>".$a_cofins[impo_tx_codigo]."</CST>");
						}else{
							fputs($fp,"<COFINSOutr>");

							fputs($fp,"<CST>".$a_cofins[impo_tx_codigo]."</CST>");
							fputs($fp,"<vBC>".$valorBcCOFINS."</vBC>");
							fputs($fp,"<pCOFINS>".$a_trib[trib_tx_aliquotaCofins]."</pCOFINS>");
							fputs($fp,"<vCOFINS>0</vCOFINS>");

							// SALVA OS DADOS PARA O SPED
							$SPED[aliquota_cofins]=$a_trib[trib_tx_aliquotaCofins];
							$SPED[valor_cofins]   =0;
						}
						if($a_cofins[impo_tx_codigo] == '04' || $a_cofins[impo_tx_codigo] == '06' || $a_cofins[impo_tx_codigo] == '07' || $a_cofins[impo_tx_codigo] == '08' || $a_cofins[impo_tx_codigo] == '09')
							fputs($fp,"</COFINSNT>");
						else
							fputs($fp,"</COFINSOutr>");

					fputs($fp,"</COFINS>");

				} else {


					fputs($fp,"<ICMS>");
						fputs($fp,"<ICMS".$a_csosn[impo_tx_codigo].">");
							fputs($fp,"<orig>".trata_xml($a_origem[impo_tx_codigo])."</orig>");
							fputs($fp,"<CST>".trata_xml($a_csosn[impo_tx_codigo])."</CST>");
							// SE O CST FOR 60 NAO ADICIONA AS TAGS ABAIXO
							if( $a_csosn[impo_tx_codigo] != '60' ) {

								$pICMS = $a_trib[trib_tx_aliquotaIcms];
								//$vICMS = valor(mostra_valor($produto[vBC]*$pICMS/100));
								$vICMS=round(trata_xml_numero($produto[vBC])*($a_trib[trib_tx_aliquotaIcms]/100),2);
								$produto[vICMS] = $vICMS;
								$total_icms += $vICMS;
								//echo "ICMS PRODUTO=$vICMS -> TOTAL_ICMS=$total_icms<br>";			

								fputs($fp,"<modBC>".substr($a_trib[trib_tx_modbcIcms],0,1)."</modBC>");//VERIFICAR MODO BASE DE CALCULO
								fputs($fp,"<vBC>".trata_xml_numero($produto[vBC])."</vBC>");
								fputs($fp,"<pICMS>".trata_xml_numero($pICMS)."</pICMS>");
								fputs($fp,"<vICMS>".trata_xml_numero($vICMS)."</vICMS>");

								// SALVA OS DADOS PARA O SPED
								$SPED[cst_icms]     =trata_xml($a_origem[impo_tx_codigo]);
								$SPED[aliquota_icms]=trata_xml_numero($pICMS);
								$SPED[valor_icms]   =trata_xml_numero($produto[vICMS]);

							} else if ( $nota[finalidade]==4 ) {
								fputs($fp,"<modBC>".trata_xml(substr($a_trib[trib_tx_modbcIcms],0,1))."</modBC>");
								fputs($fp,"<vBC>".trata_xml_numero($produto[vBC])."</vBC>");
								fputs($fp,"<pICMS>".trata_xml_numero($produto[pICMS])."</pICMS>");
								fputs($fp,"<vICMS>".trata_xml_numero($produto[vICMS])."</vICMS>");

								// SALVA OS DADOS PARA O SPED
								$SPED[cst_icms]     =trata_xml($a_origem[impo_tx_codigo]);
								$SPED[aliquota_icms]=trata_xml_numero($produto[pICMS]);
								$SPED[valor_icms]   =trata_xml_numero($produto[vICMS]);
							}

						fputs($fp,"</ICMS".$a_csosn[impo_tx_codigo].">");
					fputs($fp,"</ICMS>");
			

					if ( $produto[IPIenq]!='' ) {
						// CRIA O IPI APENAS SE INFORMAR O ENQUADRAMENTO
						fputs($fp,"<IPI>");
							fputs($fp,"<cEnq>".trata_xml($produto[IPIenq])."</cEnq>");
							fputs($fp,"<IPITrib>");
								fputs($fp,"<CST>".trata_xml($produto[IPIcst])."</CST>");
								fputs($fp,"<vBC>".trata_xml_numero($produto[vBC])."</vBC>");
								fputs($fp,"<pIPI>".trata_xml_numero($produto[pIPI])."</pIPI>");
								$valor_ipi = $produto[vBC]*$produto[pIPI];
								fputs($fp,"<vIPI>".trata_xml_numero($valor_ipi)."</vIPI>");
								$total_ipi += $valor_ipi;
							fputs($fp,"</IPITrib>");
						fputs($fp,"</IPI>");

						// SALVA OS DADOS PARA GERAR O SPED
						$SPED[cst_ipi]     =trata_xml($produto[IPIcst]);
						$SPED[aliquota_ipi]=trata_xml_numero($produto[pIPI]);
						$SPED[valor_ipi]   =trata_xml_numero($valor_ipi);
					}

					// SALVA OS DADOS PARA O SPED
					$SPED[cst_pis]=$a_pis[impo_tx_codigo];

					fputs($fp,"<PIS>");
						if($a_pis[impo_tx_codigo] == '04' || $a_pis[impo_tx_codigo] == '06' || $a_pis[impo_tx_codigo] == '07' || $a_pis[impo_tx_codigo] == '08' || $a_pis[impo_tx_codigo] == '09'){
							fputs($fp,"<PISNT>");
							fputs($fp,"<CST>".$a_pis[impo_tx_codigo]."</CST>");
							fputs($fp,"</PISNT>");
						}else{
							fputs($fp,"<PISOutr>");
							fputs($fp,"<CST>".$a_pis[impo_tx_codigo]."</CST>");
							fputs($fp,"<vBC>".trata_xml_numero($produto[vBC])."</vBC>");
							fputs($fp,"<pPIS>".trata_xml_numero($a_trib[trib_tx_aliquotaPis])."</pPIS>");
							$valor_pis=round(trata_xml_numero($produto[vBC])*($a_trib[trib_tx_aliquotaPis]/100),2);
							fputs($fp,"<vPIS>".trata_xml_numero($valor_pis)."</vPIS>");
							$total_pis+=$valor_pis;
							fputs($fp,"</PISOutr>");

							// SALVA OS DADOS PARA O SPED
							$a_dados[aliquota_pis]=trata_xml_numero($a_trib[trib_tx_aliquotaPis]);
							$a_dados[valor_pis]   =$valor_pis;
						}							
					fputs($fp,"</PIS>");


					// SALVA OS DADOS PARA O SPED
					$SPED[cst_cofins]=$a_cofins[impo_tx_codigo];


					fputs($fp,"<COFINS>");
						if($a_cofins[impo_tx_codigo] == '04' || $a_cofins[impo_tx_codigo] == '06' || $a_cofins[impo_tx_codigo] == '07' || $a_cofins[impo_tx_codigo] == '08' || $a_cofins[impo_tx_codigo] == '09'){
							fputs($fp,"<COFINSNT>");
							fputs($fp,"<CST>".$a_cofins[impo_tx_codigo]."</CST>");
							fputs($fp,"</COFINSNT>");
						}else{
							fputs($fp,"<COFINSOutr>");
							fputs($fp,"<CST>".$a_cofins[impo_tx_codigo]."</CST>");
							fputs($fp,"<vBC>".trata_xml_numero($produto[vBC])."</vBC>");// NO DASERRA ESTE VALOR ESTA COMO ZERO
							fputs($fp,"<pCOFINS>".trata_xml_numero($a_trib[trib_tx_aliquotaCofins])."</pCOFINS>");
							
							$valor_cofins=round(trata_xml_numero($produto[vBC])*($a_trib[trib_tx_aliquotaCofins]/100),2);
							fputs($fp,"<vCOFINS>".trata_xml_numero($valor_cofins)."</vCOFINS>");
							$total_cofins+=$valor_cofins;
//echo "VALOR COFINS=$valor_cofins -> TOTAL COFINS=	$total_cofins<br>";

							fputs($fp,"</COFINSOutr>");

							// SALVA OS DADOS PARA O SPED
							$SPED[aliquota_cofins]=trata_xml_numero($a_trib[trib_tx_aliquotaCofins]);
							$SPED[valor_cofins]   =trata_xml_numero($valor_cofins);
						}							
					fputs($fp,"</COFINS>");					
					
				}	
				
				fputs($fp,"</imposto>");
			fputs($fp,"</det>");
			
			$produto[rAliquotaCONFIS] = $a[prod_tx_rAliquotaCONFIS];
			$produto[totalvBCICMS] += 	$produto[vBC];
			if( substr($produto[cfop],0,2) == '54' )
				$produto[total_substitui] += $produto[vBC];
			
			
			// 1 EH O SIMPLES NACIONAL O RESTO EH TRIBUTACAO NORMAL
			//if( $emitente[crt] == 1 ) 
			//	$produto[vBCST] += 			$produto[vCredICMSSN];
			//else
				$produto[vBCST] = '0.00';
			
			$produto[vST] += 			$a[prod_tx_pAliquotaICMSST];
			$produto[vProd] += 			trata_xml_numero($a[orpr_tx_valor]*$a[orpr_tx_qtde]);
			$produto[vFrete] += 		$a[frete];//NÃO DEFINIDO
			
			$produto[vIPI] += 		$a[VPIS];//NÃO DEFINIDO

			$produto[vPIS] += 		$produto[rAliquotaPIS];
			$produto[vCOFINS] += 	$total_cofins;
			//produto[vOutro] += 	$a[outro];//NÃO DEFINIDO
			$produto[vTotalICMS] += $produto[vICMS];
			$nota[vDesconto] += $produto[vDesc];
			// $nota[vAcrescimo] += $produto[vOutro];


			// SALVA OS DADOS DO SPED NO BANCO
			atualiza_sped($SPED);
			
		}//FIM PRODUTOS

		$sql_taxa = selecionar('orpr,ordem','orde_tx_status,orpr_tx_status',"!inativo,taxa"," AND orde_nb_id = '$ordem' ORDER BY orpr_tx_valor ASC");
		if(num_linhas($sql_taxa)>0){
			$a_taxa=carrega_array($sql_taxa);
			++$ITEM_PRODUTO;
			$valorTaxa = trata_xml_numero($produto[vProd] * ($a_taxa[orpr_tx_valor]/100));
			$produto[vProd] += $valorTaxa;

			fputs($fp,'<det nItem="'.$ITEM_PRODUTO.'">
				<prod>
					<cProd>001</cProd>
					<cEAN></cEAN>
					<xProd>TAXA</xProd>
					<NCM>00000000</NCM>
					<CFOP>5102</CFOP>
					<uCom>UN</uCom>
					<qCom>1.00</qCom>
					<vUnCom>'.$valorTaxa.'</vUnCom>
					<vProd>'.$valorTaxa.'</vProd>
					<cEANTrib/><uTrib>UN</uTrib>
					<qTrib>1.00</qTrib>
					<vUnTrib>'.$valorTaxa.'</vUnTrib>
					<indTot>1</indTot>
					<vDesc></vDesc>
					<vOutro>0.00</vOutro>
				</prod>
				<imposto>
				<ICMS><ICMSSN102>
				<orig>0</orig>
				<CSOSN>102</CSOSN>
				<pCredSN>0</pCredSN>
				<vCredICMSSN>0</vCredICMSSN>
				</ICMSSN102></ICMS>
				<PIS>
				<PISOutr>
					<CST>99</CST>
					<qBCProd>0.0000</qBCProd>
					<vAliqProd>0.0000</vAliqProd>
					<vPIS>0.00</vPIS>
				</PISOutr>
				</PIS>
				<COFINS><COFINSOutr><CST>99</CST><qBCProd>0.0000</qBCProd><vAliqProd>0.0000</vAliqProd><vCOFINS>0.00</vCOFINS></COFINSOutr></COFINS></imposto></det>');
		}

		$nota[totalNota] = trata_xml_numero($produto[vProd] - $nota[vDesconto]);
		
		
		// -------------------------------------------------------------------------------------------------------------------
		// SE FOR CFOP DE SUBSTITUICAO, NAO INCIDE SOBRE BASE DE CALCULO DO ICMS
		// -------------------------------------------------------------------------------------------------------------------
		$produto[totalvBCICMS] = $produto[totalvBCICMS]-$produto[total_substitui];
		
		fputs($fp,"<total>");
			fputs($fp,"<ICMSTot>");
			
				if( $emitente[crt] == 1 ) 
					fputs($fp,"<vBC>0.00</vBC>");
				else
					fputs($fp,"<vBC>".trata_xml_numero($produto[totalvBCICMS])."</vBC>");
				
				
				if( $emitente[crt] == 1 ) 
					fputs($fp,"<vICMS>0.00</vICMS>");
				else
					fputs($fp,"<vICMS>".trata_xml_numero($total_icms)."</vICMS>");
				
				fputs($fp,"<vICMSDeson>0.00</vICMSDeson>");
				fputs($fp,"<vFCP>0.00</vFCP>");
				
				fputs($fp,"<vBCST>".trata_xml_numero($produto[vBCST])."</vBCST>");
				fputs($fp,"<vST>".trata_xml($produto[vBCST])."</vST>");
				
				fputs($fp,"<vFCPST>0.00</vFCPST>");
				fputs($fp,"<vFCPSTRet>0.00</vFCPSTRet>");

				fputs($fp,"<vProd>".trata_xml_numero($produto[vProd])."</vProd>");
				fputs($fp,"<vFrete>".trata_xml($produto[vFrete])."</vFrete>");//NÃO DEFINIDO
				fputs($fp,"<vSeg>".trata_xml($produto[vSeguro])."</vSeg>");//NÃO DEFINIDO
				fputs($fp,"<vDesc>".trata_xml_numero($nota[vDesconto])."</vDesc>");//NÃO DEFINIDO
				//fputs($fp,"<vDesc>00</vDesc>");//NÃO DEFINIDO
				fputs($fp,"<vII>0.00</vII>");
				fputs($fp,"<vIPI>".trata_xml_numero($produto[vIPI])."</vIPI>");
				fputs($fp,"<vIPIDevol>0.00</vIPIDevol>");

				fputs($fp,"<vPIS>".trata_xml_numero($total_pis)."</vPIS>");
				fputs($fp,"<vCOFINS>".trata_xml_numero($total_cofins)."</vCOFINS>");
				fputs($fp,"<vOutro>0.00</vOutro>");
				// fputs($fp,"<vOutro>".trata_xml($nota[vAcrescimo])."</vOutro>");
				fputs($fp,"<vNF>".trata_xml_numero($nota[totalNota])."</vNF>");
				fputs($fp,"<vTotTrib>".trata_xml_numero($total_trib)."</vTotTrib>");
			fputs($fp,"</ICMSTot>");
		fputs($fp,"</total>");
		
		fputs($fp,"<transp>");
			fputs($fp,"<modFrete>".trata_xml($modFrete)."</modFrete>");
		fputs($fp,"</transp>");


		fputs($fp,"<pag>");

			$total_pago=0;
			$sql_pag = selecionar('form_nb_id,form_tx_sefaz,SUM(orpr_tx_qtde*orpr_tx_valor) as valor|orpr,ordem.forma','orpr_tx_status,orde_tx_status,orpr_nb_produto',"pagamento,!inativo,.form_nb_id"," AND orde_nb_id = '$ordem' GROUP BY orpr_nb_id ORDER BY orpr_nb_id DESC");
			while( $a_pag = carrega_array($sql_pag) ) {

				fputs($fp,"<detPag>");
					
					$forma_sefaz = substr($a_pag[form_tx_sefaz],0,2);
					fputs($fp,"<tPag>".trata_xml($forma_sefaz)."</tPag>");
					fputs($fp,"<vPag>".trata_xml_numero($a_pag[valor]*-1)."</vPag>");

					if($forma_sefaz=='03' || $forma_sefaz=='04'){
						fputs($fp,"<card>");
							fputs($fp,"<tpIntegra>2</tpIntegra>");
						fputs($fp,"</card>");
					}

					$total_pago += ($a_pag[valor]*-1);
						
				fputs($fp,"</detPag>");
			}

			
			$troco = $total_pago - trata_xml_numero($nota[totalNota]);
			
			if($troco > 0)
				fputs($fp,"<vTroco>".trata_xml_numero($troco)."</vTroco>");

		
		fputs($fp,"</pag>");


		$OBS_NOTA = "VALOR APROX DE IMPOSTOS: ";
		if( $OBS_NOTA != '' ) {
			fputs($fp,"<infAdic>");
			fputs($fp,"<infCpl>".trata_xml($OBS_NOTA)."</infCpl>");
			fputs($fp,"</infAdic>");
		}


	if( $emitente[crt] == 1 ) {
		
		$VALOR_CREDITO_ICMS = $nota[totalNota]*($VALOR_IMPOSTO_SIMPLES/100);
		
		//		//$OBS_NOTA  = "DOCUMENTO EMITIDO POR ME OPTANTE PELO SIMPLES NACIONAL.\r\n";
		//$OBS_NOTA .= "PERMITE O APROVEITAMENTO DE CRÉDITO DE ICMS DO VALOR R$ ".mostra_valor($VALOR_CREDITO_ICMS)." CORRESOONDENTE A ALIQUOTA DE ".$VALOR_IMPOSTO_SIMPLES."% NOS TERMOS DA LEI COMPLEMENTAR 126/2006.";
		// "I- DOCUMENTO EMITIDO POR ME OPTANTE PELO SIMPELS NACIONAL; II- ESTE DOCUMENTO NÃO GERA DIREITO A CREDITO FISCAL DE IPI, ICMS E ISS."
		
		// if( $OBS_NOTA != '' ) {
		// 	fputs($fp,"<infAdic>");
		// 	fputs($fp,"<infCpl>".trata_xml($OBS_NOTA)."</infCpl>"); 
		// 	fputs($fp,"</infAdic>");
		// }
		
	} else {
		
		
		
		
	}
	
	
	


	fputs($fp,"</infNFe>");
	fputs($fp,"</NFe>");
	// fputs($fp,"</nfeProc>");
	
	fclose($fp);
	
	return $numeroNota;
	
}

function trata_xml_numero($num,$casas_decimais=2){
	if($num=='')
		$num = 0.00;
	return number_format($num,$casas_decimais,'.','');
}


function trata_xml($string){
	$string = trim($string);
	$string = strtr($string ,"áéíóúâêôãõàèìòùç","ÁÉÍÓÚÂÊÔÃÕÀÈÌÒÙÇ");// O STRTOUPPERNÃO COMVERTE PARA MAIÚSCULO
	$string = strtoupper($string);
	$string = str_replace(array(Ç,Á,É,Í,Ó,Ú,Â,Ê,Î,Ô,Û,Ã,Õ,á,é,í,ó,ú,â,ê,î,ô,û,ã,õ),ARRAY(C,A,E,I,O,U,A,E,I,O,U,A,O,A,E,I,O,U,A,E,I,O,U,A,O),$string);
	
	$string = str_replace(array("<",">","&","\"","'","°","º","–","(",")"),ARRAY("&lt;","&rt;","&amp;","&quot;","&#39;","&#176;","&#186;","-","",""),$string);

	$string = utf8_encode($string);

	if($string == '')
		$string = 0;
	return $string;	
}



function ver_log(){
	
	$retorno = carregar('retornonota',$_POST[id]);
	echo $retorno[reto_tx_retorno];
	
}

function layout_log(){
	
	
	cabecalho('RELATÓRIO DE LOGS');
	cactux::abre_form();
	
	//CÓD  CLIENTE  EMPRESA  DATA  VALOR  Nº DE ITENS  SITUAÇÃO NOTA  
	
	$a = carregar('ordem,empresa,entidade',$_POST[id]);
	
	//TEXTOS
	$codVenda = cactux::texto('Cod. Venda',$a[orde_nb_id],2);
	$cliente = cactux::texto('Cliente',$a[enti_tx_nome],2);
	$empresa = cactux::texto('Empresa',$a[empr_tx_nome],2);
	
	//BOTOES
	$voltar = cactux::botao('Voltar',2,'voltar');
	$xml = cactux::botao('Baixar XML',2,'baixa_xml');
	
	cactux::abre_fieldset('FILTRO DE BUSCA');
	cactux::linha_fieldset($codVenda,$cliente,$empresa);
	cactux::fecha_fieldset();
	cactux::linha_fieldset($voltar,$xml);
	cactux::fecha_form();
	
	cactux::acao_botao('voltar','index');
	cactux::acao_botao('baixa_xml','baixar_xml','id',"$_POST[id]","",""," target=_blank");
	
	if( $_POST[nota] == '' )	
		return;
	
	$nota = carregar('nota','','nota_nb_ordem',$_POST[id]);
	
	$sql = selecionar('retornonota','reto_tx_status,reto_nb_nota',"ativo,$_POST[nota]"," $extra ORDER BY reto_nb_id DESC ");
	
	$cabecalho[] = array('COD','NOTA','CHAVE DE ACESSO','SITUAÇÃO','DATA','');
	$cabecalho[] = 'c,c,e,e';
	$cabecalho[] = '5%,5%,30%,,8%,2%';
	
	while( $a = carrega_array($sql) ){
		
		$icone = ".icone_modificar($a[0],'ver_log','','','','target=_blank','Ver LOG','cactus/imagens/imprimir.png')";
		
		$array = explode("\r\n",$a[reto_tx_retorno]);
		$array[0] = end(explode(" - ",$array[0]));
		$array[1] = end(explode(" - ",$array[1]));
		
		$valores[] = array($a[reto_nb_id],$a[reto_nb_nota],$a[reto_tx_chaveAcesso],$a[reto_tx_retorno],data($a[reto_tx_data],3),$icone);
		
	}
	
	grid::gerar($cabecalho,$valores);
	
	rodape();
	
}

function salva_log($numero=0){
	
	//CARREGA O ARQUIVO DE LOG
	$linha = file(LOG);
	$t_linha = count($linha);
	
	if( $numero == 0 ) {
		//ACHA O NUMERO DA CHAVE DE ACESSO E O ID DA NOTA
		$a_xml = explode("\"",$linha[0]);
		$arq_xml = $a_xml[1];
		$numeroNota = str_replace('-nfe.xml','',$arq_xml);
		$numeroNota = substr($numeroNota,-44);
		
		$a_nota = carregar('nota','','nota_tx_chaveAcesso',$numeroNota);
	} else {

		$a_nota = carregar('nota','','nota_tx_numero',$numero);
		$numeroNota = $a_nota[nota_tx_chaveAcesso];
	
	}
	$idNota = $a_nota[0];
	
	//$idNota = substr($numeroNota,25,9);
	
	//GRAVA OS VALORES DO LOG NO BANCO DE DADOS
	for( $i=0; $i!=$t_linha; $i++ ){
		
		$retorno .= $linha[$i].'<br>';
		
	}
//	echo $numeroNota;
//	exit;
	$campos = array(reto_nb_nota,reto_tx_chaveAcesso,reto_tx_retorno,reto_tx_data,reto_tx_status);
	$valores= array($idNota,$numeroNota,str_replace(',',';',$retorno),date('y-m-d H:i:s'),ativo);
	inserir('retornonota',$campos,$valores);
	
}

function salva_log_antigo(){
	
	//CARREGA O ARQUIVO DE LOG
	$linha = file(LOG);
	$t_linha = count($linha);
	
	//ACHA O NUMERO DA CHAVE DE ACESSO E O ID DA NOTA
	$a_xml = explode("\"",$linha[0]);
	$arq_xml = $a_xml[1];
	$numeroNota = str_replace('-nfe.xml','',$arq_xml);
	$numeroNota = substr($numeroNota,-44);
	
	$a_nota = carregar('nota','','nota_tx_chaveAcesso',$numeroNota);
	$idNota = $a_nota[0];
	
	//$idNota = substr($numeroNota,25,9);
	
	//GRAVA OS VALORES DO LOG NO BANCO DE DADOS
	for( $i=0; $i!=$t_linha; $i++ ){
		
		$retorno .= $linha[$i].'<br>';
		
	}
//	echo $numeroNota;
//	exit;
	$campos = array(reto_nb_nota,reto_tx_chaveAcesso,reto_tx_retorno,reto_tx_data,reto_tx_status);
	$valores= array($idNota,$numeroNota,str_replace(',',';',$retorno),date('y-m-d H:i:s'),ativo);
	inserir('retornonota',$campos,$valores);
	
}

function retorno($funcao_volta=0){
	@unlink(LOG);
	// ------------------------------------------------------------------------------------------
	//
	// NOVA FUNCAO QUE SE COMUNICA COM O SERVIDOR CACTUS E NAO DIRETAMENTE COM A SEFAZ
	//
	// ------------------------------------------------------------------------------------------
	nfe_recebe_log();

	
	if(	$fp = @fopen(LOG,"r") ) {

		
		salva_log();
		
		$RETORNOU = 1;
		fclose($fp);
		$retorno_log = file(LOG);
		
		// NA ULTIMA VERSAO DO ACBR ELE JOGA A DATA E HORA NA FRENTE DOS COMANDOS DE LOG, ENTAO VOU LIMPAR		
		//$a_ret0 = explode(" - ",$retorno_log[0]);
		//$retorno_log[0] = $a_ret0[1];
		//$a_ret1 = explode(" - ",$retorno_log[1]);
		//$retorno_log[1] = $a_ret1[1];
//		exit;

		// RENATO EM 2018-03-01
		// POR ALGUM MOTIVO A LINHA MUDOU. PASSOU A VIR 2X A DATA E HORA E POR ISSO ESTAVA SEM PEGAR O RETORNO CORRETAMENTE
		// AGORA MUDADOS O ALGORITMO E MESMO QUE MUDE ELE SEMPRE VAI PEGAR O COMANDO CORRETO
		$retorno_log[0] = end(explode(" - ",$retorno_log[0]));
		$retorno_log[1] = end(explode(" - ",$retorno_log[1]));
		
		
// print_r($retorno_log);
		// ----------------------------------------------------------------
		// TESTE SE EH RETORNO DE ENVIO DE EMAIL
		// ----------------------------------------------------------------
		if( substr($retorno_log[0],0,15) == 'NFE.EnviarEmail' || substr($retorno_log[0],0,19) == 'OK |NFE.EnviarEmail' ) {

			
			if( substr($retorno_log[1],0,3) == 'OK:' ) {
				$MSG_STATUS = "Email Enviado com sucesso!";
			} else  {
				$MSG_STATUS = "Falha ao enviar email!";
			}
			
			$ENTROU_RETORNO = 1;
			set_status($MSG_STATUS);
		} 
		
		// ----------------------------------------------------------------
		// TESTE SE EH RETORNO DE CANCELAMENTO
		// ----------------------------------------------------------------
//echo substr($retorno_log[0],0,15)."<hr>";
		if( substr($retorno_log[0],0,15) == 'NFE.CANCELARNFE' ) {
			
//echo substr($retorno_log[1],0,3)."<hr>";			
			if( substr($retorno_log[1],0,3) == 'OK:' ) {
				$MSG_STATUS = "NFe Cancelada";
			} else  {
				$MSG_STATUS = "$retorno_log[1]";
			}

			$ENTROU_RETORNO = 1;
			
			
			$chave = substr($retorno_log[0],17,44);
			$arquivo = substr($retorno_log[17],8);
//echo $chave."<hr>".$arquivo;			
//exit;
			$nota = carregar('nota','','nota_tx_chaveAcesso',$chave,'','','','',1);
//print_r($nota);
//echo "passou!<hr>";			
			if( $nota ) {
				if( $MSG_STATUS == "NFe Cancelada" ) {
					atualizar('ordem',orde_tx_statusNota,$MSG_STATUS,$nota[nota_nb_ordem]);
					atualizar('nota',array(nota_tx_statusNota,nota_tx_arquivo),array($MSG_STATUS,$arquivo),$nota[nota_nb_id]);
//					echo "atualizar('nota',array(nota_tx_statusNota,nota_tx_arquivo),array($MSG_STATUS,$arquivo),$nota[nota_nb_id]);";
				}
			}
			set_status("$MSG_STATUS");			
			
			
			
		} 


		// ----------------------------------------------------------------
		// TESTE SE EH RETORNO DE INUTILIZACAO
		// ----------------------------------------------------------------
		if( substr($retorno_log[0],0,17) == 'NFE.INUTILIZARNFE' ) {

			if( substr($retorno_log[1],0,3) == 'OK:' ) {
				$MSG_STATUS = "NFe Inutilizada";
			} else  {
				$MSG_STATUS = "$retorno_log[1]";
			}

			$ENTROU_RETORNO = 1;
			
			
			$numero_nota = substr(end(explode('","',$retorno_log[0])),0,-4);
			$arquivo = substr($retorno_log[11],8);
//echo $numero_nota."<hr>".$arquivo."<hr>";
			salva_log($numero_nota);			
			
			$nota = carregar('nota','','nota_tx_numero',$numero_nota,'','','','',1);

			if( $nota ) {
				if( $MSG_STATUS == "NFe Inutilizada" ) {
					atualizar('ordem',orde_tx_statusNota,$MSG_STATUS,$nota[nota_nb_ordem]);
					atualizar('nota',array(nota_tx_statusNota,nota_tx_arquivo),array($MSG_STATUS,$arquivo),$nota[nota_nb_id]);
//					echo "atualizar('nota',array(nota_tx_statusNota,nota_tx_arquivo),array($MSG_STATUS,$arquivo),$nota[nota_nb_id]);";
				}
			}
			set_status("$MSG_STATUS");			
			
			
			
		} 

//echo "<hr>FIM!";
//exit;
		
		// ----------------------------------------------------------------
		// TESTE SE EH RETORNO DE ENVIO NORMAL
		// ----------------------------------------------------------------
		
		if( $ENTROU_RETORNO != 1 ) {
			
			//echo $retorno_log[0];
			// print_r($retorno_log);
			
			
			$a_xml = explode("\"",$retorno_log[0]);
			$arq_xml = $a_xml[1];
			
			$numeroNota = str_replace('-nfe.xml','',$arq_xml);
			$numeroNota = substr($numeroNota,-44);
			
			// TESTA SE DEU ALGUM ERRO NO ARQUIVO (CASO SEJA UM ERRO DE VALIDACAO)
			if( substr($retorno_log[1],0,4) == 'ERRO' ) {
				
				$MSG_STATUS = "".$retorno_log[1]."";
				
			} else {
				
				$t_log = count($retorno_log);
				for($j=$t_log; $j>0; $j--) {
					
					if( substr($retorno_log[$j],0,7) == 'XMotivo' ) {
						
						if( substr($retorno_log[$j],8,24) == 'Autorizado o uso da NF-e' ) {
							$MSG_STATUS = "NFe Autorizada";
							$NOTA_ACEITA=1;
						} else {
							$MSG_STATUS = "".substr($retorno_log[$j],8)."";
						}
						
						break;
					}
					
				} // PERCORRE O ARQUIVO DE BAIXO PARA CIMA E PROCURA UM CAMPO XMOTIVO 
				  // DE BAIXO PARA CIMA PORQUE DENTRO DO ARQUIVO DE LOG TEM OS VARIOS PASOS, ENVIAR, ASSINAR E ETC, E O QUE IMPORTA EH O ULTIMO (RETORNO)
				  // SE FOR UM ERRO EXIBE NA TELA, CASO CONTRARIO PASSA
			}
			
			
			
			
			/**************************************************************************\
			****************************************************************************
			***													     ****
			***          INICIO DA PARTE DE PROTOCOLO DE AUTORIZACAO DO XML             ****
			***    												     ****
			****************************************************************************
			\**************************************************************************/
			
			
			//---------------------------------------------------------------------------------------------------------------
			// SE A NOTA FOI ACEITA, TENTA PROTOCOLAR O XML
			//---------------------------------------------------------------------------------------------------------------
			if( $NOTA_ACEITA == 1 ) {
//echo "<hr>NOTA ACEITA";				
				
				//---------------------------------------------------------------------------------------------------------------
				// VERIFICA SE O ARQUIVO FOI DE ENVIO OU DE ATUALIZACAO, PARA CARREGAR
				// AS VARIAVES CORRETAMENTE
				//---------------------------------------------------------------------------------------------------------------
				if( substr($retorno_log[0],0,13) == 'NFE.ENVIARNFE' ) {
					
					$DigVal = trim(substr($retorno_log[31],7));
					$NProt =  trim(substr($retorno_log[30],6));
					$DhRecbto =  trim(substr($retorno_log[29],9));
					$ChNFe = trim(substr($retorno_log[28],6));
					$CStat =  trim(substr($retorno_log[25],6));
					
					$TIPO_RETORNO = 1;
					
//					echo "ENTROU ENVIO<br>";
					
				}
				if( substr($retorno_log[0],0,16) == 'NFE.CONSULTARNFE' ) {
					
					$DigVal = trim(substr($retorno_log[12],7));
					$NProt =  trim(substr($retorno_log[11],6));
					$DhRecbto =  trim(substr($retorno_log[10],9));
					$ChNFe = trim(substr($retorno_log[9],6));
					$CStat =  trim(substr($retorno_log[6],6));
					
					$TIPO_RETORNO = 1;
					
//					echo "ENTROU ATUALIZA<br>";
				}
				
				//---------------------------------------------------------------------------------------------------------------
				// RESOLVE A DATA VINDA DO RETORNO PARA O PADRAO DO XML
				//---------------------------------------------------------------------------------------------------------------
				$data = explode(" ",$DhRecbto);
				$data2 = explode("/",$data[0]);
				$nova_data = $data2[2]."-".zeros($data2[1],2)."-".zeros($data2[0],2)."T".$data[1];
				
				//---------------------------------------------------------------------------------------------------------------
				// CRIA AS NOVAS LINHAS A SEREM INSERIDAS NO XML
				//---------------------------------------------------------------------------------------------------------------
				$inicio_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><nfeProc versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">";
				$fim_xml .= "<protNFe versao=\"2.00\"><infProt><tpAmb>1</tpAmb><verAplic>SVAN_4.01</verAplic>";
				$fim_xml .= "<chNFe>$ChNFe</chNFe>";
				$fim_xml .= "<dhRecbto>$nova_data</dhRecbto>";
				$fim_xml .= "<nProt>$NProt</nProt>";
				$fim_xml .= "<digVal>$DigVal</digVal>";
				$fim_xml .= "<cStat>$CStat</cStat>";
				$fim_xml .= "<xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></nfeProc>";
//echo "Abrindo arquivo".LOCAL.$numeroNota."-nfe.xml";			
				// CARREGA O XML ANTIGO
				$xml_antigo = file_get_contents(LOCAL.$numeroNota."-nfe.xml");
//echo "<hr>$xml_antigo<hr>";				
				//---------------------------------------------------------------------------------------------------------------
				// TESTA SE RETORNOU ALGUM NUMERO DE PROTOCOLO OU SE DEU ERRADO
				//---------------------------------------------------------------------------------------------------------------
				if( $NProt == '' ) {
					$ERRO_PROTOCOLO=1;
//					echo "NAO RETORNOU NUMERO DE PROTOCOLO!";
				}
				
				//---------------------------------------------------------------------------------------------------------------
				// TESTA SE O RETORNO EH DE ENVIO OU ATUALIZACAO
				//---------------------------------------------------------------------------------------------------------------
				if( $TIPO_RETORNO != 1) {
					$ERRO_PROTOCOLO=1;
//					echo "NAO EH DO TIPO CORRETO DE RETORNO!";
				}
				
				// ----------------------------------------------------------------------------------------------------
				// VERIFICA SE JAH NAO FOI PROCOTOLADO
				// ----------------------------------------------------------------------------------------------------
				if( strpos($xml_antigo,"<xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></nfeProc>") !== true ) {
					if( strpos($xml_antigo,"<xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></nfeProc>") > 0 )
						$ERRO_PROTOCOLO=1;
//					echo "O MONITOR JAH PROTOCOLOU AUTOMATICO! -> ".strpos($xml_antigo,"<xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></nfeProc>");
				}
				
				
				// ----------------------------------------------------------------------------------------------------
				// AQUI SIM FAZ O PROTOCOLO DO XML
				// ----------------------------------------------------------------------------------------------------
				if( $ERRO_PROTOCOLO != 1 ) {
					$fp = fopen(LOCAL.$numeroNota."-nfe.xml","w");
					fputs($fp,$inicio_xml.$xml_antigo.$fim_xml);
					fclose($fp);
					
					//$MSG_STATUS = "<font color=blue>NFe AUTORIZADA</font><BR>";
					
//					echo "XML PROTOCOLADO COM SUCESSO!";
				}
//					echo "PASSOU!";

			}
			
			
			$nota = carregar('nota','','nota_tx_chaveAcesso',$numeroNota);
//print_r($nota);			
//echo $MSG_STATUS;
			if( $nota ) {
				
				// SE A MSG ESTIVER EM BRANCO ENTAO NAO ATUALIZA
				if( trim($MSG_STATUS) != '' ) {
				
					// SE A NOTA JÁ FOI AUTORIZADA, ENTÃO NÃO PERMITE ATUALIZAR NADA POR CIMA, NENHUM ERRO
					if( $nota[nota_tx_statusNota] != 'NFe Autorizada' ) {
				
						atualizar('ordem',orde_tx_statusNota,$MSG_STATUS,$nota[nota_nb_ordem]);
						atualizar('nota',nota_tx_statusNota,$MSG_STATUS,$nota[nota_nb_id]);
					}
					
				}
				
			}
			set_status("$MSG_STATUS");
			
			// -----------------------------------------------------------------------------
			// SE NAO FOI UMA CHAMADA AUTOMATICA VINDA DO PDV SEGUE O FLUXO NORMAL
			// -----------------------------------------------------------------------------
			if( $_POST[envio_automatico] != 1 ) {
			
					if( $funcao_volta != 1 ) {
						index();
						exit;
					} else
						return;
					
			} else {
			// print_r($_POST);
//$MSG_STATUS = 'ERRO:!';
// echo "!$MSG_STATUS!";

					// SE TIVER VINDO DO PDV ENTAO APENAS EXIBE NA TELA	
					//javascript("window.parent.document.getElementById('div_msg_autorizando').innerHTML = '$MSG_STATUS';");

					javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = '$MSG_STATUS';");
					

					if( $_GET[tipo_auto] == 'cancelar' ) {
						
						javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'Sem retorno. Aguarde alguns instantes e tente novamente';");
						exit;
					}
					
					// SE NAO TIVER RETORNO, ESPERA 5 SEGUNDOS E TENTA NOVAMENTE
					if( $MSG_STATUS == '' ) {
						

						
						 javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'NFCe Enviada. Aguardando Autorização...<br><img src=../cactus/imagens/carregando.gif width=100px></div></center>';");
						 // javascript("setInterval(function(){window.parent.document.getElementById('form_atualizar').submit()},2500)");
						 javascript("setInterval(function(){window.parent.document.getElementById('form_atualizar_imprimir').submit()},1000)");		
						
					} else {

					javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = '$MSG_STATUS';");
						
						// SE TIVER
						if( $MSG_STATUS == 'NFe Autorizada' ) {
						
//							javascript("window.parent.document.getElementById('div_msg_imprimindo').innerHTML = 'Imprimindo...';");
							javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'NFCe Autorizada! Aguardando Impressão...';");
//							$link = "../emissao_nfce.php?acao_auto=imprimir&id_ordem_auto=$_POST[id]";
//							javascript("window.parent.document.getElementById('frame_nfce').src = '$link';");
							javascript("setInterval(function(){window.parent.document.getElementById('form_atualizar_imprimir').submit()},1000)");	
	
						} else {

							if( trim($MSG_STATUS) == 'ERRO:' ) {
						
								javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'Erro no retorno. Enviando NFCe novamente...';");
								javascript("setInterval(function(){window.parent.document.getElementById('form_atualizar_enviar').submit()},2000)");	

//								$link = "../emissao_nfce.php?acao_auto=enviar&id_ordem_auto=$_POST[id]";
//								javascript("window.parent.document.getElementById('frame_nfce').src = '$link';");
						
							} else {
	//							javascript("window.parent.document.getElementById('div_msg_imprimindo').innerHTML = 'Imprimindo em CONTIGÊNCIA...';");
								javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'Imprimindo em CONTIGÊNCIA...';");
//								$link = "../emissao_nfce.php?acao_auto=imprimir&id_ordem_auto=$_POST[id]";
//								javascript("window.parent.document.getElementById('frame_nfce').src = '$link';");
								javascript("setInterval(function(){window.parent.document.getElementById('form_atualizar_imprimir').submit()},1000)");	

							}						
						}
						
					}

					exit;
			}
			
		}
		
	} else {
		
//		$MSG_STATUS = "<B><font color=red>SEM RETORNO</b></font>";
//		set_status("$MSG_STATUS");
		
	}

//$MSG_STATUS = 'ERRO:!';

			// -----------------------------------------------------------------------------
			// SE NAO FOI UMA CHAMADA AUTOMATICA VINDA DO PDV SEGUE O FLUXO NORMAL
			// -----------------------------------------------------------------------------
			if( $_POST[envio_automatico] != 1 ) {
			
					if( $funcao_volta != 1 ) {
						index();
						exit;
					} else
						return;
					
			} else {
			
//$MSG_STATUS = 'ERRO:!';


					// SE TIVER VINDO DO PDV ENTAO APENAS EXIBE NA TELA	
					//javascript("window.parent.document.getElementById('div_msg_autorizando').innerHTML = '$MSG_STATUS';");


					if( $_GET[tipo_auto] == 'cancelar' ) {

						
						if( $MSG_STATUS == '' ) {

							javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'Sem retorno. Aguarde alguns instantes e tente novamente';");
							
						} else {

							javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = '".trim($MSG_STATUS)."';");
							
							if( trim($MSG_STATUS) == 'NFe Cancelada' ) {
								javascript("setInterval(function(){window.parent.document.getElementById('form_atualizar').submit()},2000)");	
							}
						}
						exit;
					}

					
					// SE NAO TIVER RETORNO, ESPERA 5 SEGUNDOS E TENTA NOVAMENTE
					if( $MSG_STATUS == '' ) {
					
						//javascript("window.parent.document.getElementById('div_msg_autorizando').innerHTML = 'Autorizando......';");
						javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'NFCe Enviada. Aguardando Autorização...<br><img src=../cactus/imagens/carregando.gif width=100px></div></center>';");
						javascript("setInterval(function(){window.parent.document.getElementById('form_atualizar').submit()},2500)");	
						
					} else {

					javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = '$MSG_STATUS';");
						
						// SE TIVER
						if( $MSG_STATUS == 'NFe Autorizada' ) {
						
//							javascript("window.parent.document.getElementById('div_msg_imprimindo').innerHTML = 'Imprimindo...';");
							javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'NFCe Autorizada! Aguardando Impressão...';");
//							$link = "../emissao_nfce.php?acao_auto=imprimir&id_ordem_auto=$_POST[id]";
//							javascript("window.parent.document.getElementById('frame_nfce').src = '$link';");
							javascript("setInterval(function(){window.parent.document.getElementById('form_atualizar_imprimir').submit()},1000)");	
	
						} else {
						
							if( trim($MSG_STATUS) == 'ERRO:' ) {
						
								javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'Enviando novamente';");
								javascript("setInterval(function(){window.parent.document.getElementById('form_atualizar_enviar').submit()},2000)");	
						
							} else {
	//							javascript("window.parent.document.getElementById('div_msg_imprimindo').innerHTML = 'Imprimindo em CONTIGÊNCIA...';");
								javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'Imprimindo em CONTIGÊNCIA...';");
//								$link = "../emissao_nfce.php?acao_auto=imprimir&id_ordem_auto=$_POST[id]";
//								javascript("window.parent.document.getElementById('frame_nfce').src = '$link';");
								javascript("setInterval(function(){window.parent.document.getElementById('form_atualizar_imprimir').submit()},1000)");	

							}						
						
						}
						
					}

					exit;
			}

	
}

function verifica_nota(){
	global $CONFIGURA;

	$a_ordem = carregar('orde_tx_status|ordem',$_POST[id]);
	
	if( substr($a_ordem[orde_tx_status],0,9) == 'devolucao')
		$tipo_nota = 55;
	else
		$tipo_nota = 65;
	
	$sql = selecionar('nota','nota_tx_status,nota_nb_ordem',"ativo,$_POST[id]");
	if( num_linhas($sql) == 0 ){

		//$numNota = ultimo_reg('nota')+1;
		
		//$sql2 = selecionar('nota,ordem','nota_tx_status,orde_nb_loja',"ativo,1");
		//$numNota = num_linhas($sql2)+1;

		if($CONFIGURA[SERIE]=='')
			$CONFIGURA[SERIE]=1;
		
//		$sql2 = selecionar('nota,ordem','nota_tx_status,orde_nb_empresa',"ativo,1","ORDER BY nota_tx_numero+1 DESC");
		$sql2 = selecionar('nota','nota_tx_modelo,nota_tx_status',"$tipo_nota,ativo"," AND nota_tx_serie = '$CONFIGURA[SERIE]' ORDER BY nota_tx_numero+1 DESC LIMIT 1");
		$a2 = carrega_array($sql2);
		$numNota = intval($a2[nota_tx_numero])+1;
		
		
		//$natureza = "Lançamento efetuado em decorrência de emissão de documento fiscal relativo a operação ou prestação também registrada em equipamento Emissor de Cupom Fiscal - ECF:  $_POST[cupom]";
		//$natureza = "Lançamento relativo a Cupom Fiscal:$_POST[cupom]";
		$natureza = "Venda de mercadoria adquirida ou recebida de terceiros";
		
		$campos = array(nota_nb_ordem,nota_tx_modelo,nota_tx_serie,nota_tx_numero,nota_tx_emissao,nota_tx_tipo,
		nota_tx_formaEmissao,nota_tx_finalidadeEmissao,nota_tx_tipoImpressao,nota_tx_naturezaOperacao,nota_tx_valor,
		nota_tx_icms,nota_tx_icmsst,nota_tx_status);
		
		// MODELO 55 É NFe
		// MODELO 65 É NFCe
		
		// TIPO IMPRESSAO 1 É RETRATO
		// TIPO IMPRESSAO 2 É PAISAGEM
		// TIPO IMPRESSAO 4 É QRCODE
		
		$valores= array($_POST[id],$tipo_nota,$CONFIGURA[SERIE],$numNota,date('Y-m-d H:i:s'),'1',
		'1','NF-e normal','4','Venda de mercadoria adquirida ou recebida de terceiros',$valor,$icms,$icmsst,'ativo');
		
		inserir('nota',$campos,$valores);
		
		$chave = gera_numeroNota();

		return ultimo_reg('nota');
		
	} else {
		
		//------------------------------------------------------------------------------------------
		// SE JAH OUVER UM ARQUIVO XML, ENTAO MOVE ELE PAR AUMA PASTA DE BACKUP
		//------------------------------------------------------------------------------------------
		$a = carrega_array($sql);
		// $arquivo_xml = LOCAL.$a[nota_tx_chaveAcesso]."-nfe.xml";
		// $destino = LOCAL."/antigos/".$a[nota_tx_chaveAcesso]."-nfe.xml";
		
		return $a[0];
		// @rename($arquivo_xml,$destino);
		
		
	}
	
}

function imprime_ordem(){


	cabecalho_css();
	
	$a = carregar('ordem,user',$_POST[id]);
	$id_ordem = $a[0];



	$cabeca[] = array('ITEM','CÓDIGO','NCM','DESCRIÇÃO','QTDE','VALOR UNIT','VALOR TOTAL');
	$cabeca[] = 'c,c,c,e,c,d,d';
	$cabeca[] = '5%,10%,10%,,10%,15%,15%';
	$cabeca[] = '100%';


	if ( $id_ordem=='' || $_POST[id]=='' )
		$id_ordem = 0;

	
	if( $_POST[id] != '' ) {

		echo "<table border=0 width=100% class=rel>";
		echo "<tr><td align=left><b>COMANDA: $a[orde_tx_comanda]</b></td><td align=right><b>ABERTURA: ".data($a[orde_tx_dataCadastro],3)."</b></td></tr>";
		echo "</table>";
		
		
		$item = 0;
		$linhas = 0;

		// LISTAGEM DOS PRODUTOS
		$sql = selecionar('sum(orpr_tx_qtde) as qtde,produto.*,orpr.*,orde_tx_comanda,orpr_nb_atendente|orpr,produto,ordem','orpr_tx_status,orde_nb_id',"ativo,$_POST[id]"," GROUP BY prod_nb_id ORDER BY orpr_nb_id ASC");
		while( $a = carrega_array($sql) ) {
			
			// NAO EXIBE SE A QUANTIDADE FOR 0 ( NO CASO DE TER LANCADO UM PRODUTO E DEPOIS CANCELADO)
			if( $a[qtde] == 0 )	
				continue;

			if(strlen($a[prod_tx_ncm]) < 8)
				$cor_ncm = 'red';
			else
				$cor_ncm = 'black';

			$valores[] = array( ++$item, $a[prod_tx_codbarras],'<font color='.$cor_ncm.'>'.$a[prod_tx_ncm].'</font>', $a[prod_tx_nome], mostra_valor($a[qtde]), mostra_valor($a[orpr_tx_valor]), mostra_valor($a[qtde]*$a[orpr_tx_valor]) );
			$total += $a[qtde]*$a[orpr_tx_valor];		
			
			$linhas++;

			
		}

		$sql_aten = selecionar('orpr_nb_atendente|orpr,produto,ordem','orpr_tx_status,orde_nb_id',"ativo,$_POST[id]"," ORDER BY orpr_nb_id DESC LIMIT 1");
		$a_ate=carrega_array($sql_aten);
		$id_atendente = $a_ate[0];


		$valores[] = array('','','','','','<b>SUB TOTAL:',mostra_valor($total));
		$linhas++;


		// LISTAGEM DA TAXA DE SERVIÇO
		$sql = selecionar('orpr_nb_id,orpr_tx_valor,orde_tx_comanda,orpr_nb_ordem|orpr,ordem','orpr_tx_status,orde_nb_id',"taxa,$_POST[id]","  GROUP BY orpr_nb_id ORDER BY orpr_nb_id DESC");
		while( $a = carrega_array($sql) ) {

			// OBTEM O VALOR A SER PAGO PELA COMISSÃO
			$v_comissao = $total*$a[orpr_tx_valor]/100;
				

			$valores[] = array( ++$item,'', '', "SUGESTÃO DE GORJETA ", mostra_valor(1), mostra_valor($v_comissao), mostra_valor($v_comissao) );

			// ADICIONA O VALOR DA COMISSÃO NA TOTAL A SER PAGO
			$total += $v_comissao;
			$linhas++;

			
		}

		$valores[] = array('','','','','','<b>TOTAL:',mostra_valor($total,1));

		// LISTAGEM DOS PAGAMENTOS
		$sql = selecionar('prod_tx_codbarras,prod_tx_nome,orpr_tx_valor,SUM(orpr_tx_qtde) as qtde,SUM(orpr_tx_qtde*orpr_tx_valor*(-1)) as valor|orpr,produto,ordem','orpr_tx_status',"pagamento"," AND orde_nb_id IN ($id_ordem) GROUP BY prod_nb_id ORDER BY orpr_nb_id DESC");
		while( $a = carrega_array($sql) ) {
			
			//echo "$a[prod_tx_nome]<br>QTDE: $a[orpr_tx_qtde] VALOR: $a[orpr_tx_valor]<br>";
			$valores[] = array('',$a[prod_tx_codbarras],'','&nbsp;','&nbsp;','<font color=green>'.$a[prod_tx_nome],'<font color=green>'.mostra_valor($a[valor]));
			// $total += $a[valor];
			$linhas++;
		}

		// $valores[] = array("<a href='javascript:onClick=faz_transferencia()' style='text-decoration:none; color:black;'><img src='../cactus/imagens/atualizar.png' border=0 width=20px></a>",'','','','<b>TOTAL:',mostra_valor($total));
		
		$linhas++;


	}




	echo"<form name=tabela_check>";
		grid::gerar($cabeca,$valores);
	echo"</form>";
}


function imprime_danfe(){
global $CACTUX_CONF,$CONFIGURA;

		// ENDERECO DO SERVIDOR DE NFe CACTUS
		$target_url = SERVIDOR_CACTUS.'imprimir.php?'.cactux_cookie::url_sistema();
		$data = array('cliente' => NFE_CLIENTE,'numero_nota' => $_POST[numero_nota]);
//echo $target_url;
		$options = array(CURLOPT_URL => $target_url,CURLOPT_RETURNTRANSFER => true,CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data);
 
		$ch = curl_init();
		curl_setopt_array($ch, $options);
		$ret_curl = curl_exec($ch);
		curl_close($ch);
		
//		echo "%$ret_curl%";
//exit;
		if( substr($ret_curl,0,2) != 'OK'  ) {
			echo "$ret_curl";
			exit;
		}

		if( substr($ret_curl,0,2) == 'OK'  ) {
				//set_status("DANFE Impresso com sucesso!");
				$danfe = substr($ret_curl,4,-5);
				//echo "<hr>".SERVIDOR_CACTUS.NFE_CLIENTE."/".$danfe."<hr>";
				javascript("window.parent.document.getElementById('botao_finalizar1').style.display = 'none';");
				javascript("window.parent.document.getElementById('botao_finalizar2').style.display = 'block';");
//				chamar_pag(SERVIDOR_CACTUS.NFE_CLIENTE."/".$danfe,'','','');
				
				// FAZ O DOWNLOAD DO PDF PARA A PASTA IMPRESSAO
				$ch = curl_init();
				$source = SERVIDOR_CACTUS.NFE_CLIENTE."/".$danfe;
				curl_setopt($ch, CURLOPT_URL, $source);
				curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
				$data = curl_exec ($ch);
				curl_close ($ch);
				
				// AQUI CHAMA A FUNCOA QUE TIRA O NOME DO ACBR
				
				$destination = $_SERVER[DOCUMENT_ROOT].$CACTUX_CONF['path']."impressao/pdf.pdf";
				$file = fopen($destination, "w+");
				fputs($file, $data);
				fclose($file);
			
				

				
		
				if($CONFIGURA[MODO_IMPRESSAO]=='POPUP'){
					$link = "pdv/pdv_imprime_pdf.php?".cactux_cookie::url_sistema()."&path=$CACTUX_CONF[path]impressao/pdf.pdf";	
					// $link = "$CACTUX_CONF[path]impressao/pdf.pdf";	
					
					$javascript = "<script>window.open('$link')</script>";
					echo $javascript;
					
					index();
					exit;
				}else{
					
					$arquivo_pdf = $_SERVER[DOCUMENT_ROOT].$CACTUX_CONF['path']."impressao/pdf.pdf";
					bat_imprime($arquivo_pdf);
					javascript("window.parent.document.form_finalizar.submit();");

				}

		}
	exit;


}

function imprime_danfe_contigencia(){
global $CACTUX_CONF;
montar_impressao_contigencia($_POST[id]);

define(PASTA_LOCAL,$_SERVER[DOCUMENT_ROOT].$CACTUX_CONF['path']);
$arquivo_pdf = PASTA_LOCAL.'impressao/conteudo_imprimir.pdf';
// bat_imprime($arquivo_pdf);

javascript("window.parent.document.form_finalizar.submit();");

exit;
		

		// ENDERECO DO SERVIDOR DE NFe CACTUS
		$target_url = SERVIDOR_CACTUS.'imprimir.php?'.cactux_cookie::url_sistema();
		$data = array('cliente' => NFE_CLIENTE,'numero_nota' => $_POST[numero_nota]);

		$options = array(CURLOPT_URL => $target_url,CURLOPT_RETURNTRANSFER => true,CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data);
 
		$ch = curl_init();
		curl_setopt_array($ch, $options);
		$ret_curl = curl_exec($ch);
		curl_close($ch);
		

		if( substr($ret_curl,0,2) != 'OK'  ) {
			echo "$ret_curl";
			exit;
		}

		if( substr($ret_curl,0,2) == 'OK'  ) {
				
				$danfe = substr($ret_curl,4,-5);
				
				javascript("window.parent.document.getElementById('botao_finalizar1').style.display = 'none';");
				javascript("window.parent.document.getElementById('botao_finalizar2').style.display = 'block';");
				
				// FAZ O DOWNLOAD DO PDF PARA A PASTA IMPRESSAO
				$ch = curl_init();
				$source = SERVIDOR_CACTUS.NFE_CLIENTE."/".$danfe;
				curl_setopt($ch, CURLOPT_URL, $source);
				curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
				$data = curl_exec ($ch);
				curl_close ($ch);
				
				// AQUI CHAMA A FUNCOA QUE TIRA O NOME DO ACBR
				
				$destination = $_SERVER[DOCUMENT_ROOT].$CACTUX_CONF['path']."impressao/pdf.pdf";
				$file = fopen($destination, "w+");
				fputs($file, $data);
				fclose($file);
				
				$arquivo_pdf = $_SERVER[DOCUMENT_ROOT].$CACTUX_CONF['path']."impressao/pdf.pdf";
				bat_imprime($arquivo_pdf);
				$link = "pdv/pdv_imprime_pdf.php?".cactux_cookie::url_sistema()."&path=$_SERVER[DOCUMENT_ROOT]$CACTUX_CONF[path]impressao/pdf.pdf";



		}
	exit;
}





function enviar_nota(){
	global $CONFIGURA;

	// print_r($_POST);
	// print_r($_GET);
	// print_r($_SERVER);


	$a_ordem = carregar('empr_tx_cnpj|ordem,empresa',$_POST[id]);
	$cnpj = preg_replace("/[^0-9]/", "", $a_ordem[empr_tx_cnpj]);
	$pasta_empresa = $cnpj.'/';

	// --------------------------------------------------------------------------------
	// VERIFICA SE A NOTA JÁ NÃO FOI AUTORIZADA PARA NAO ALTERAR MAIS NADA NELA
	// --------------------------------------------------------------------------------
	$sql = selecionar('nota','nota_nb_ordem',"$_POST[id]");
	if( num_linhas($sql) > 0 ) {

		$a_nota = carrega_array($sql);

		if($a_nota[nota_tx_chaveAcesso]!=''){
			require_once "../spednfe/vendor/autoload.php";

			$config = [
				"atualizacao" => "2018-02-06 06:01:21",
				"tpAmb" => $CONFIGURA[AMBIENTE_NFE], // Se deixar o tpAmb como 2 você emitirá a nota em ambiente de homologação(teste) e as notas fiscais aqui não tem valor fiscal
				"razaosocial" => $CONFIGURA[NOME_IMPRESSAO],
				"siglaUF" => strtoupper($CONFIGURA[UF]),
				"cnpj" => trata_xml($CONFIGURA[CNPJ]),
				"schemes" => "PL_009_V4",
				"versao" => "4.00",
				"tokenIBPT" => "AAAAAAA",
				"CSC" => $CONFIGURA[CSC],
				"CSCid" => $CONFIGURA[CSCID]
			];

			$configJson = json_encode($config);
			$certificadoDigital = file_get_contents($CONFIGURA[CERTIFICADO]);

			$cert = NFePHP\Common\Certificate::readPfx($certificadoDigital, $CONFIGURA[SENHA]);
			try {
				$tools = new NFePHP\NFe\Tools($configJson,$cert);
			} catch (\Exception $e) {
				// SE AS INFORMAÇÕES DA EMPRESA NÃO ESTIVEREM SIDO INFORMADAS
				set_status($e->getMessage());
				
				index();exit;
			}
			$tools->model('65');

			$consultaChave = $tools->sefazConsultaChave($a_nota[nota_tx_chaveAcesso]);
			$stdCl2 = new NFePHP\NFe\Common\Standardize($consultaChave);
			$arr_consulta = $stdCl2->toArray();


			/*
			ATENÇÃO: VERIFICAR SE É ISSO MESO, POIS VERIFIQUEI QUE A VARIÁVEL QUE ESTÁ SENDO UTILIZADA PARA COMPARAÇÃO O CONTEÚDO DO XML
					 CREIO QUE O CORRETO SERIA $arr_consulta[cStat] POIS ESSE É A SITUAÇÃO ATUAL DO XML NA SEFAZ
			*/
			if($arr_consulta[protNFe][infProt][cStat] == '100'){
				
				$pasta_xml = substr($a_nota[nota_tx_emissao],0,4).substr($a_nota[nota_tx_emissao],5,2).'/contingencia/';
				$pasta_xml2 = substr($a_nota[nota_tx_emissao],0,4).substr($a_nota[nota_tx_emissao],5,2).'/autorizada/';
				$arquivo_xml = LOCAL.$pasta_empresa.$pasta_xml.$a_nota[nota_tx_chaveAcesso]."-nfe.xml";
				$arquivo_xml_autorizado = LOCAL.$pasta_empresa.$pasta_xml2.$a_nota[nota_tx_chaveAcesso]."-nfe.xml";
				$xml = file_get_contents($arquivo_xml);

				$fp = fopen(LOCAL.$pasta_empresa.$pasta_xml2.$a_nota[nota_tx_chaveAcesso].'-nfe.xml','w');
				fclose($fp);

				try {
					$xmlAssinado = $tools->signNFe($xml); // O conteúdo do XML assinado fica armazenado na variável $xmlAssinado
				} catch (\Exception $e) {
					//aqui você trata possíveis exceptions da assinatura
					$contJson = $tools->contingency->activate('RN', 'SERVIDOR SEFAZ FORA DO AR', $tipo = 'OFFLINE');
					$tools->contingency->load($contJson);

					// ESSA LINHA DEVE FAZER ISSO MESO? POR QUE AQUI O PROCESSO DE ASSINATURA NÃO FUNCIONOU E A VARIAVÉL $xmlAssinado NÃO DEVE ESTAR PREENCHIDA
					file_put_contents($arquivo_xml_autorizado,$xmlAssinado);
					return($e->getMessage());
				}


				file_put_contents($arquivo_xml_autorizado,$xmlAssinado);
				$protocol = new NFePHP\NFe\Factories\Protocol();
				$xmlProtocolado = $protocol->add($xmlAssinado,$consultaChave);
				// echo $xmlProtocolado;
				// echo "<hr>";
				// echo $consultaChave;
				// echo "<hr>";
				// $xmlProtocolado = $protocol->add($xmlAssinado,$consultaChave);
				file_put_contents($arquivo_xml_autorizado,$xmlProtocolado);

				
				$MSG_STATUS = 'NFe Autorizada';

				atualizar('nota',nota_tx_statusNota,$MSG_STATUS,'','nota_nb_ordem',$_POST[id]);
				atualizar('ordem',orde_tx_statusNota,$MSG_STATUS,$_POST[id]);

				$campos = array(reto_nb_nota,reto_tx_chaveAcesso,reto_tx_data,reto_tx_status);
				$valores= array($a_nota[nota_nb_id],$a_nota[nota_tx_chaveAcesso],date('Y-m-d H:i:s'),ativo);
				inserir('retornonota',$campos,$valores);
				$id_ret=ultimo_reg('retornonota');
				// echo "UPDATE retorno SET reto_tx_retorno = '".$MSG_STATUS."' WHERE reto_nb_id = '$id_ret'";
				mysql_query("UPDATE retornonota SET reto_tx_retorno = \"".htmlentities($MSG_STATUS)."\" WHERE reto_nb_id = '$id_ret'") or die(mysql_error());

				index();
				exit;

			}
		}

		atualizar('nota','nota_tx_emissao',date("Y-m-d H:i:s"),$a_nota[0]);
		
		$sql = selecionar('nota','nota_nb_ordem',"$_POST[id]");
		$a_nota = carrega_array($sql);
		

		if( $a_nota[nota_tx_statusNota] == "NFe Autorizada" ) {
			
			set_status("ERRO: NFe já autorizada!");
			index();
			exit;
		}
	}
	$id_nota = verifica_nota();
	
	if($a_nota[nota_tx_emissao]!='' && $a_nota[nota_tx_emissao]!='0000-00-00 00:00:00'){
		$pasta_xml0 = substr($a_nota[nota_tx_emissao],0,4).substr($a_nota[nota_tx_emissao],5,2);
		$pasta_xml = substr($a_nota[nota_tx_emissao],0,4).substr($a_nota[nota_tx_emissao],5,2).'/contingencia/';
		$pasta_xml2 = substr($a_nota[nota_tx_emissao],0,4).substr($a_nota[nota_tx_emissao],5,2).'/autorizada/';
		@mkdir(LOCAL.$pasta_empresa);
		@mkdir(LOCAL.$pasta_empresa.$pasta_xml0);
		@mkdir(LOCAL.$pasta_empresa.$pasta_xml);
		@mkdir(LOCAL.$pasta_empresa.$pasta_xml2);

	}else{
		@mkdir(LOCAL.$pasta_empresa);
		@mkdir(LOCAL.$pasta_empresa.date('Ym'));
		@mkdir(LOCAL.$pasta_empresa.date('Ym').'/contingencia');
		@mkdir(LOCAL.$pasta_empresa.date('Ym').'/autorizada');
		$pasta_xml = date('Ym').'/contingencia/';
		$pasta_xml2 = date('Ym').'/autorizada/';
	}

	$numeroNota = gera_xml();
	$arquivo_xml = LOCAL.$pasta_empresa.$pasta_xml.$numeroNota."-nfe.xml";
	$arquivo_xml_rede = LOCAL_REDE.$pasta_empresa.$pasta_xml2.$numeroNota."-nfe.xml";
	


	limpa_log_retorno();
	
	if(	$fp = fopen($arquivo_xml,"r") ) {	


		// ------------------------------------------------------------------------------------------
		//
		// NOVA FUNCAO QUE SE COMUNICA COM O SERVIDOR CACTUS E NAO DIRETAMENTE COM A SEFAZ
		//
		// ------------------------------------------------------------------------------------------
		$MSG_STATUS = nfe_envia_xml($arquivo_xml,$arquivo_xml_rede);		

	} else {
		
		$MSG_STATUS = "ERRO: XML NÃO LOCALIZADO";
		
	}
	// var_dump($MSG_STATUS[protNFe][infProt][xMotivo]);exit;
	if(@array_key_exists('xMotivo', $MSG_STATUS)){
		
		$notaStatus = $MSG_STATUS[protNFe][infProt][cStat];
		$MSG_STATUS = $MSG_STATUS[protNFe][infProt][cStat].' - '.$MSG_STATUS[protNFe][infProt][xMotivo];
	}


	if( @trim($MSG_STATUS) != '' ) {

		
		$a_nota = carregar('nota',$id_nota);

		if($notaStatus=='100'){
			$MSG_STATUS = 'NFe Autorizada';
			$arquivo_impressao = $arquivo_xml_rede;

			// AQUI CONFIRMA SE O XML FOI GERADO CORRETAMENTE
			if ( file_exists($arquivo_xml_rede) && filesize($arquivo_xml_rede)>0 ) {//LOCALIZOU O ARQUIVO XML NA PASTA AUTORIZADA
				$xml = simplexml_load_file($arquivo_xml_rede);
	    		$situacao = $xml->protNFe->infProt->xMotivo;
	    		if ( $situacao!='Autorizado o uso da NF-e' ) {// O ARQUIVO XML ENCONTRADO NÃO ESTÁ AUTORIZADO
	    			$MSG_STATUS = 'NFe Autorizada: XLM não autorizado pela SEFAZ';
	    			$arquivo_impressao = $arquivo_xml;
	    		}
			} else {// NÃO LOCALIZOU O ARQUIVO XML
    			$MSG_STATUS = 'NFe Autorizada: Falha ao gerar o arquivo xml';
    			$arquivo_impressao = $arquivo_xml;
			}

			if ( $MSG_STATUS=='NFe Autorizada' ) {
				// SE ESTIVER OK, ATIVA OS SPEDS
				ativa_sped($id_nota);
			}

		}else{
			$arquivo_impressao = $arquivo_xml;
		}


		atualizar('nota',nota_tx_statusNota,$MSG_STATUS,'','nota_nb_ordem',$_POST[id]);
		atualizar('ordem',orde_tx_statusNota,$MSG_STATUS,$_POST[id]);

		$campos = array(reto_nb_nota,reto_tx_chaveAcesso,reto_tx_data,reto_tx_status);
		$valores= array($a_nota[nota_nb_id],$a_nota[nota_tx_chaveAcesso],date('Y-m-d H:i:s'),ativo);
		inserir('retornonota',$campos,$valores,1);
		$id_ret=ultimo_reg('retornonota');
		// echo "UPDATE retorno SET reto_tx_retorno = '".$MSG_STATUS."' WHERE reto_nb_id = '$id_ret'";
		mysql_query("UPDATE retornonota SET reto_tx_retorno = \"".htmlentities($MSG_STATUS)."\" WHERE reto_nb_id = '$id_ret'") or die(mysql_error());
	}
	set_status("Enviando pedido $_POST[id]: ".substr($MSG_STATUS,0,100));
	
	
	
	if( $_POST[envio_automatico] != 1 ) {
	
		index();
		exit;
		
	} else {
		
		
	
		monta_impressao($arquivo_impressao);
		/*
		// A IMPRESSÃO AGORA É FEITA EXCLUSIVAMENTO NO PDV
		if($CONFIGURA[IMPRESSAO_COMPROVANTE]=='SIM'){
			$_POST[id_ordem_finalizar] = $_POST[id];
			montar_impressao_comanda();
		}
		*/
		javascript("window.parent.document.form_finalizar.submit();");
		index();
		exit;
		

		// javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = '$MSG_STATUS';");

		// if( $MSG_STATUS == 'NFe Enviada' ) {
		
		// 	javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'NFCe Enviada. Aguardando Autorização...<br><img src=../cactus/imagens/carregando.gif width=100px></div></center>';");
		// 	javascript("setInterval(function(){window.parent.document.getElementById('form_atualizar').submit()},2500)");
			
		// } else {



		// 	javascript("window.parent.document.getElementById('botao_finalizar1').style.display = 'none';");
		// 	javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'Erro ao enviar. Imprimindo em CONTIGÊNCIA...<br><img src=../cactus/imagens/carregando.gif width=100px></div></center>';");
		// 	$link = "../emissao_nfce.php?acao_auto=imprimir_contigencia&id_ordem_auto=$_POST[id]";
		// 	javascript("window.parent.document.getElementById('frame_nfce').src = '$link';");
		
		// }
		// exit;

	}
}





function monta_impressao($xml){

	global $CONFIGURA;
	require_once "../spednfe/vendor/autoload.php";
	$stdCl = new NFePHP\NFe\Common\Standardize($protocolo);


	$fp = fopen("fpdf17/log_gera_pdf.txt","a");
	fputs($fp,date("[Y-m-d H:i:s]")." Iniciando impressao (NFCE) (ORDEM: $_POST[id]) ($CONFIGURA[NOME_SISTEMA])\r\n");
	
	// use NFePHP\DA\NFe\Danfce;
	$docxml = file_get_contents($xml);
	fputs($fp,date("[Y-m-d H:i:s]")." carregou o arquivo xml\r\n");

	// IDENIFICA SE ESTA EM UTF8
	$codificacao = mb_detect_encoding($docxml.'x', 'UTF-8, ISO-8859-1');
	if ($codificacao!='UTF-8') {
		$docxml = utf8_encode($docxml);
	}

	// $pathLogo = $_SERVER[DOCUMENT_ROOT].$CONFIGURA[PATH].'/galeria/logo.jpg';//use somente imagens JPEG
	// echo "!$pathLogo!";exit;
	$danfce = new NFePHP\DA\NFe\Danfce($docxml, $pathLogo, 0);
	$id = $danfce->monta();
	$pdf = $danfce->render();


	$ID_USER = $_SESSION[user_nb_id];

	// VERIFICA SE EXISTE UM CAIXA ABERTO PARA INICIAR AS VENDAS
	if($_SESSION[pdv]!='')
		$sql_pdv = selecionar('caixa,pdv,user','caix_tx_status,pdv_nb_id',"aberto,$_SESSION[pdv]"," LIMIT 1 ");
	elseif($_SESSION[reabrir]=='Sim')
		$sql_pdv = selecionar('caixa,pdv,user','caix_tx_status',"aberto"," LIMIT 1 ");
	else
		$sql_pdv = selecionar('caixa,pdv,user','caix_tx_status,caix_nb_user',"aberto,$_SESSION[user_nb_id]"," LIMIT 1 ");
	$a_pdv = carrega_array($sql_pdv);

	$arquivo_impressao_pdf = $_SERVER[DOCUMENT_ROOT].$CONFIGURA[PATH].'impressao/'.'pdf_'.$a_pdv[pdv_nb_id].'_'.$ID_USER.'.pdf';


	// header('Content-Type: application/pdf');
	// echo '<hr>'.$arquivo_impressao_pdf;exit;
	fputs($fp,date("[Y-m-d H:i:s]")." chamou file_put_contents($arquivo_impressao_pdf,ARQUIVO_PDF_AQUI)\r\n");
	file_put_contents($arquivo_impressao_pdf,$pdf);

	fputs($fp,date("[Y-m-d H:i:s]")." chamou id_impressora()\r\n");
	$id_impressora = id_impressora();
	

	fputs($fp,date("[Y-m-d H:i:s]")." chamou bat_imprime($arquivo_impressao_pdf,$id_impressora)\r\n");
	bat_imprime($arquivo_impressao_pdf,$id_impressora);


	// A IMPRESSÃO TAMBÉM É FEITA NA IMPRESSÃO DO CUPOM (gera_pdf.php)
	/*
	if ( $CONFIGURA[IMPRESSAO_COMPROVANTE]!='SIM' ) {
		fputs($fp,date("[Y-m-d H:i:s]")." entrou na impressao do cartao\r\n");
		$sql_pagamento = selecionar('prod_nb_id,orpr_tx_valor,SUM(orpr_tx_qtde) as qtde,SUM(orpr_tx_qtde*orpr_tx_valor) as valor,orpr_tx_retornoLojista,orpr_tx_retornoCliente,orpr_nb_id|orpr,produto,ordem','orpr_tx_status',"pagamento"," AND orde_nb_id IN ($_POST[id]) GROUP BY prod_nb_id ORDER BY orpr_nb_id DESC");
		while( $a_pag = carrega_array($sql_pagamento) ) {

			if($a_pag[orpr_tx_retornoCliente]!=''){
				fputs($fp,date("[Y-m-d H:i:s]")." chamou montar_impressao_cartaoCliente($a_pag[orpr_nb_id],$id_impressora)\r\n");
				montar_impressao_cartaoCliente($a_pag[orpr_nb_id],$id_impressora);
			}

			if($a_pag[orpr_tx_retornoLojista]!=''){
				fputs($fp,date("[Y-m-d H:i:s]")." chamou montar_impressao_cartaoLojista($a_pag[orpr_nb_id],$id_impressora)\r\n");
				montar_impressao_cartaoLojista($a_pag[orpr_nb_id],$id_impressora);
			}
			$pag++;
		}
	}
	*/

	fputs($fp,date("[Y-m-d H:i:s]")." FIM\r\n");
	fputs($fp,"\r\n");
	
}

function impressao_nfe(){
	global $CONFIGURA;


	$a_ordem = carregar('empr_tx_cnpj|ordem,empresa',$_POST[id]);
	$cnpj = preg_replace("/[^0-9]/", "", $a_ordem[empr_tx_cnpj]);
	$pasta_empresa = $cnpj.'/';


	$sql = selecionar('nota','nota_nb_ordem',"$_POST[id]");
	if( num_linhas($sql) > 0 ) {
		$a_nota = carrega_array($sql);
	}else{
		// echo "ERRO: Nota não cadastrada!";
		$_POST[id_ordem_finalizar] = $_POST[id];
		montar_impressao_comanda();
		impressao_cartao();
		index();
		exit;
	}

	if($a_nota[nota_tx_statusNota] == 'NFe Autorizada'){
		$pasta_xml = substr($a_nota[nota_tx_emissao],0,4).substr($a_nota[nota_tx_emissao],5,2).'/autorizada/';
	}else{
		$pasta_xml = substr($a_nota[nota_tx_emissao],0,4).substr($a_nota[nota_tx_emissao],5,2).'/contingencia/';
	}
	$arquivo_xml = LOCAL.$pasta_empresa.$pasta_xml.$_POST[numero_nota]."-nfe.xml";

	if ( file_exists($arquivo_xml) ) {
		// SE LOCALIZAR O XML, MANDA IMPRIMIR
		monta_impressao($arquivo_xml);

	} else {
		// SE NÃO LOCALIZAR O XML, GERA O LOG E MANDA IMPRIMIR O CUPOM
		$fp = fopen("fpdf17/log_gera_pdf.txt","a");
		fputs($fp,date("[Y-m-d H:i:s]")." Arquivo XML nao localizado (NFCE) (ORDEM: $_POST[id]) ($CONFIGURA[NOME_SISTEMA])\r\n");
		fputs($fp,date("[Y-m-d H:i:s]")." Arquivo XML: ($arquivo_xml)\r\n");

		$_POST[id_ordem_finalizar] = $_POST[id];
		montar_impressao_comanda();
		impressao_cartao();
		set_status('ATENÇÃO: XML da nota não localizado!');
		index();
		exit;
	}


	// if($CONFIGURA[IMPRESSAO_COMPROVANTE]=='SIM'){
	// 	montar_impressao_comanda();
	// }

	$_POST[id_ordem_finalizar]=$_POST[id];
	impressao_cartao();


	index();
	exit;
}



function impressao_cartao(){

	// LISTA APENAS OS RECEBIMENTOS EM CARTÃO QUE EXISTIREM
	$extra_cartao  = " AND (orpr_tx_retornoCliente!='' OR orpr_tx_retornoLojista!='') ";
	$sql_pagamento = selecionar('prod_nb_id,orpr_tx_valor,SUM(orpr_tx_qtde) as qtde,SUM(orpr_tx_qtde*orpr_tx_valor) as valor,orpr_tx_retornoLojista,orpr_tx_retornoCliente,orpr_nb_id|orpr,produto,ordem','orpr_tx_status',"pagamento"," AND orde_nb_id IN ($_POST[id_ordem_finalizar]) $extra_cartao GROUP BY prod_nb_id ORDER BY orpr_nb_id DESC");
	while( $a_pag = carrega_array($sql_pagamento) ) {

		if($a_pag[orpr_tx_retornoCliente]!=''){
			fputs($fp,date("[Y-m-d H:i:s]")." chamou montar_impressao_cartaoCliente($a_pag[orpr_nb_id],$id_impressora)\r\n");
			montar_impressao_cartaoCliente($a_pag[orpr_nb_id],$id_impressora);
		}

		if($a_pag[orpr_tx_retornoLojista]!=''){
			fputs($fp,date("[Y-m-d H:i:s]")." chamou montar_impressao_cartaoLojista($a_pag[orpr_nb_id],$id_impressora)\r\n");
			montar_impressao_cartaoLojista($a_pag[orpr_nb_id],$id_impressora);
		}
	}
}



function cancela_nota(){
	global $CONFIGURA;

	// echo "<pre>";
	// print_r($CONFIGURA);
	// echo "</pre>";exit;

	require_once "../spednfe/vendor/autoload.php";
	
	$a = carregar('ordem,entidade,empresa',$_POST[id]);
	$nota = carregar('nota','','nota_nb_ordem',$a[orde_nb_id]);
	
	$cnpj = preg_replace("/[^0-9]/", "", $a[empr_tx_cnpj]);
	$pasta_empresa = $cnpj.'/';


	if($nota[nota_tx_emissao]!='' && $nota[nota_tx_emissao]!='0000-00-00 00:00:00')
		$pasta_xml = substr($nota[nota_tx_emissao],0,4).substr($nota[nota_tx_emissao],5,2).'/autorizada/';
	else
		return "ERRO: Arquivo XML não localizado";
		
	

	$arquivo_xml = file_get_contents(LOCAL.$pasta_empresa.$pasta_xml.$nota[nota_tx_chaveAcesso].'-nfe.xml');
	

	$stdXml = new NFePHP\NFe\Common\Standardize($arquivo_xml);
	$arr = $stdXml->toArray();

	$nProt = $arr[protNFe][infProt][nProt];
	// echo "!$nProt!";
	

	try {

		$config = [
		   "atualizacao" => "2018-02-06 06:01:21",
		   "tpAmb" => $CONFIGURA[AMBIENTE_NFE], // Se deixar o tpAmb como 2 você emitirá a nota em ambiente de homologação(teste) e as notas fiscais aqui não tem valor fiscal
		   "razaosocial" => $CONFIGURA[NOME_IMPRESSAO],
		   "siglaUF" => strtoupper($CONFIGURA[UF]),
		   "cnpj" => trata_xml($CONFIGURA[CNPJ]),
		   "schemes" => "PL_009_V4",
		   "versao" => "4.00",
		   "tokenIBPT" => "AAAAAAA",
		   "CSC" => $CONFIGURA[CSC],
		   "CSCid" => $CONFIGURA[CSCID]
		];

		//Assinar XML
		$configJson = json_encode($config);
		$certificadoDigital = file_get_contents($CONFIGURA[CERTIFICADO]);

		$cert = NFePHP\Common\Certificate::readPfx($certificadoDigital, $CONFIGURA[SENHA]);
		$tools = new NFePHP\NFe\Tools($configJson,$cert);
		$tools->model('65');

		$chave = $nota[nota_tx_chaveAcesso];
		$xJust = 'Cliente retornou os produtos';
		// $nProt = $nota[nota_tx_codigoNumerico];
		// echo "<pre>";
		// 		print_r($nota);
		// echo "</pre>";
		$response = $tools->sefazCancela($chave, $xJust, $nProt);

		$stdCl = new NFePHP\NFe\Common\Standardize($response);


		
		//nesse caso o $arr irá conter uma representação em array do XML
		// $arr = $stdCl->toArray();
		$std = $stdCl->toStd();

		
		$xMotivo = $std->retEvento->infEvento->xMotivo;
		$cStat = $std->retEvento->infEvento->cStat;
		//verifique se o evento foi processado
		if ($std->cStat != 128) {
			$erro = 'ERRO 1: '.$cStat.' -> '.$xMotivo;
		} else {
			$cStat = $std->retEvento->infEvento->cStat;
			if ($cStat == '101' || $cStat == '155' || $cStat == '135') {
				//SUCESSO PROTOCOLAR A SOLICITAÇÂO ANTES DE GUARDAR
				$xml = NFePHP\NFe\Complements::toAuthorize($tools->lastRequest, $response);
				//grave o XML protocolado

				if($nota[nota_tx_emissao]!='' && $nota[nota_tx_emissao]!='0000-00-00 00:00:00'){
					$pasta_xml0 = substr($nota[nota_tx_emissao],0,4).substr($nota[nota_tx_emissao],5,2);
					$pasta_xml = substr($nota[nota_tx_emissao],0,4).substr($nota[nota_tx_emissao],5,2).'/cancelado/';
					@mkdir(LOCAL.$pasta_empresa);
					@mkdir(LOCAL.$pasta_empresa.$pasta_xml0);
					@mkdir(LOCAL.$pasta_empresa.$pasta_xml);
				}
				@file_put_contents(LOCAL.$pasta_empresa.$pasta_xml.$nota[nota_tx_chaveAcesso].'-can-nfe.xml',$xml);

			} else {
				$erro = 'ERRO 2: '.$cStat.' -> '.$xMotivo;
			}
		}    
	} catch (\Exception $e) {
		$erro = $e->getMessage();
	}

	if($erro == ''){

		$sql_movimento = selecionar('movimento','movi_tx_status',"!inativo"," AND movi_nb_ordem = '$_POST[id]'");
		if(num_linhas($sql_movimento)>0){
			$a_mov = carrega_array($sql_movimento);

			atualizar('movimento','movi_tx_status','inativo',$a_mov[0]);
			atualizar('ordem','orde_tx_status','Cancelado',$_POST[id]);

			$sql_baixa = selecionar('orpr,ordem,produto','orpr_tx_status','ativo'," AND orde_nb_id = '$_POST[id]'");
			while($a_baixa=carrega_array($sql_baixa)){
				$a_prod = carregar('prod_tx_qtde|produto',$a_baixa[prod_nb_id]);
				atualizar('produto',array('prod_tx_qtde'),array($a_prod[prod_tx_qtde]+$a_baixa[orpr_tx_qtde]),$a_baixa[prod_nb_id]);
			}	

		}

		atualizar('ordem',orde_tx_statusNota,'NFe Cancelada',$nota[nota_nb_ordem]);
		atualizar('nota',nota_tx_statusNota,'NFe Cancelada',$nota[nota_nb_id]);
	}

	set_status($erro);
	index();
	exit;


	// REMOVE O ARQUIVO DE LOG
	// unlink(LOG);


	// ENDERECO DO SERVIDOR DE NFe CACTUS
	$target_url = SERVIDOR_CACTUS.'cancelar.php?'.cactux_cookie::url_sistema();
	$data = array('cliente' => NFE_CLIENTE,'chave_acesso' => $nota[nota_tx_chaveAcesso], 'cnpj' => $cnpj);

	$options = array(CURLOPT_URL => $target_url,CURLOPT_RETURNTRANSFER => true,CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data);

	$ch = curl_init();
	curl_setopt_array($ch, $options);
	$ret_curl = curl_exec($ch);
	curl_close($ch);
	
//	echo "%%$ret_curl%%";

	$sql_movimento = selecionar('movimento','movi_tx_status',"!inativo"," AND movi_nb_ordem = '$_POST[id]'");
	if(num_linhas($sql_movimento)>0){
		$a_mov = carrega_array($sql_movimento);

		atualizar('movimento','movi_tx_status','inativo',$a_mov[0]);
		atualizar('ordem','orde_tx_status','Cancelado',$_POST[id]);

		$sql_baixa = selecionar('orpr,ordem,produto','orpr_tx_status','ativo'," AND orde_nb_id = '$_POST[id]'");
		while($a_baixa=carrega_array($sql_baixa)){
			$a_prod = carregar('prod_tx_qtde|produto',$a_baixa[prod_nb_id]);
			atualizar('produto',array('prod_tx_qtde'),array($a_prod[prod_tx_qtde]+$a_baixa[orpr_tx_qtde]),$a_baixa[prod_nb_id]);
		}	

	}


	if( get_status() == '' )
		set_status($ret_curl);

	if( trim($ret_curl) == 'Evento registrado e vinculado a NF-e' ) {
		retorno();
		exit;
	}

	if( $_POST[envio_automatico] != 1 ) {
	
		index();
		exit;
		
	} else {
		
		javascript("window.parent.document.getElementById('div_msg_nfe').innerHTML = 'Cancelamento enviado, atualize em alguns instantes';");

		
	}
	
	exit;
	
	if( substr($ret_curl,0,3) == 'OK:' ) {
		$MSG_STATUS = "NFe Cancelada";
	} else  {
		$MSG_STATUS = "$ret_curl";
	}
	
	$ENTROU_RETORNO = 1;
	

	if( $nota ) {
		if( $MSG_STATUS == "NFe Cancelada" ) {
			atualizar('ordem',orde_tx_statusNota,$MSG_STATUS,$nota[nota_nb_ordem]);
			atualizar('nota',nota_tx_statusNota,$MSG_STATUS,$nota[nota_nb_id]);
		}
	}
	
	set_status("$MSG_STATUS");			


	index();
	exit;
	

	
	$cnpj = str_replace(array(".","-","/"),array("","",""),$a[orde_tx_cnpj]);
	

	
	// CRIA O ARQUIVO COM O COMANDO DE CONSULTAR
	$fp = fopen(ARQUIVO,"w");
	fputs($fp,"NFE.CANCELARNFE(\"".$nota[nota_tx_chaveAcesso]."\",\"Cliente retornou os produtos!,$cnpj\")");
	fclose($fp);

	
	set_status("Cancelamento de NFe enviado!");
	
	exclui_pedido();
	
	index();
	exit;
	
}


function consultar_nota(){

	$a = carregar('ordem,entidade',$_POST[id]);
	$nota = carregar('nota','','nota_nb_ordem',$a[orde_nb_id]);

	// REMOVE O ARQUIVO DE LOG
	unlink(LOG);


	// ENDERECO DO SERVIDOR DE NFe CACTUS
	$target_url = SERVIDOR_CACTUS.'consultar.php?'.cactux_cookie::url_sistema();
	$data = array('cliente' => NFE_CLIENTE,'chave_acesso' => $nota[nota_tx_chaveAcesso], 'email' => $a[orde_tx_email]);

	$options = array(CURLOPT_URL => $target_url,CURLOPT_RETURNTRANSFER => true,CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data);

	$ch = curl_init();
	curl_setopt_array($ch, $options);
	$ret_curl = curl_exec($ch);
	curl_close($ch);
	


	if( get_status() == '' )
		set_status($ret_curl);

	retorno(1);
	index();
	exit;
	


}


function envia_email(){
	
	
	$a = carregar('ordem,entidade',$_POST[id]);
	$nota = carregar('nota','','nota_nb_ordem',$a[orde_nb_id]);
	
	
	if( $a[enti_tx_email] == '' ) {
		set_status("ERRO: E-mail não cadastrado!");
		index();
		exit;
	}


	// ENDERECO DO SERVIDOR DE NFe CACTUS
	$target_url = SERVIDOR_CACTUS.'email.php?'.cactux_cookie::url_sistema();
	$data = array('cliente' => NFE_CLIENTE,'chave_acesso' => $nota[nota_tx_chaveAcesso], 'email' => $a[enti_tx_email]);
	$options = array(CURLOPT_URL => $target_url,CURLOPT_RETURNTRANSFER => true,CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data);

	$ch = curl_init();
	curl_setopt_array($ch, $options);
	$ret_curl = curl_exec($ch);
	curl_close($ch);
	
//		echo "%$ret_curl%";

	if( get_status() == '' )
		set_status($ret_curl);

	index();
	exit;
	


}


function atualiza_status(){

	$nota = carregar('nota','','nota_nb_ordem',$_POST[id]);
	
	// REMOVE O ARQUIVO DE LOG
	unlink(LOG);


	// ENDERECO DO SERVIDOR DE NFe CACTUS
	$target_url = SERVIDOR_CACTUS.'consultar.php?'.cactux_cookie::url_sistema();
	$data = array('cliente' => NFE_CLIENTE,'chave_acesso' => $nota[nota_tx_chaveAcesso]);

	$options = array(CURLOPT_URL => $target_url,CURLOPT_RETURNTRANSFER => true,CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data);

	$ch = curl_init();
	curl_setopt_array($ch, $options);
	$ret_curl = curl_exec($ch);
	curl_close($ch);
	
//		echo "%$ret_curl%";

	if( get_status() == '' )
		set_status($ret_curl);

	index();
	exit;


}

function imprime_cupom() {
global $CACTUX_CONF;

$_POST[id_ordem_finalizar] = $_POST[id];

	define(PASTA_LOCAL,$_SERVER[DOCUMENT_ROOT].$CACTUX_CONF['path']);
	
	$arquivo_pdf = PASTA_LOCAL.'impressao/conteudo_imprimir.pdf';
	$arquivo_bat = PASTA_LOCAL.'impressao/imprimir.bat';


	montar_impressao_comanda();


	// bat_imprime($arquivo_pdf);
	
	
	set_status("Comanda $_POST[id] impressa com sucesso!");
	
	index();
	exit;

}

function imprime_cupom_tela() {
	global $CACTUX_CONF;


	$_POST[id_ordem_finalizar] = $_POST[id];

	define(PASTA_LOCAL,$_SERVER[DOCUMENT_ROOT].$CACTUX_CONF['path']);
	
	$arquivo_pdf = PASTA_LOCAL.'impressao/conteudo_imprimir.pdf';
	$arquivo_bat = PASTA_LOCAL.'impressao/imprimir.bat';

	montar_impressao_comanda();

	// $link = $CACTUX_CONF[path]."pdv/pdv_imprime_pdf.php?path=../impressao/conteudo_imprimir.pdf?".time();	
	// chamar_pag($link,'','','');
	
	index();
	exit;

}


function inutilizar_nota(){
	// print_r($_POST);exit;
	global $CONFIGURA;

	// echo "<pre>";
	// print_r($CONFIGURA);
	// echo "</pre>";exit;

	$a = carregar('ordem,entidade,empresa',$_POST[id]);
	$nota = carregar('nota','','nota_nb_ordem',$a[orde_nb_id]);
	
	// $cnpj = str_replace(array(".","-","/"),array("","",""),$a[empr_tx_cnpj]);
	$cnpj = preg_replace("/[^0-9]/", "", $a[empr_tx_cnpj]);
	$pasta_empresa = $cnpj.'/';

	$justificativa = "Numeração de NF Não utilizada";
	$ano = substr($nota[nota_tx_emissao],0,4);
	$modelo = $nota[nota_tx_modelo];
	$serie = $nota[nota_tx_serie];
	$inicial = $nota[nota_tx_numero];
	$final = $nota[nota_tx_numero];
	// REMOVE O ARQUIVO DE LOG
	// unlink(LOG);

	if($nota[nota_tx_emissao]!='' && $nota[nota_tx_emissao]!='0000-00-00 00:00:00'){
		$pasta_xml0 = substr($nota[nota_tx_emissao],0,4).substr($nota[nota_tx_emissao],5,2);
		$pasta_xml = substr($nota[nota_tx_emissao],0,4).substr($nota[nota_tx_emissao],5,2).'/contingencia/';
		$pasta_xml2 = substr($nota[nota_tx_emissao],0,4).substr($nota[nota_tx_emissao],5,2).'/inutilizado/';
		@mkdir(LOCAL.$pasta_empresa);
		@mkdir(LOCAL.$pasta_empresa.$pasta_xml0);
		@mkdir(LOCAL.$pasta_empresa.$pasta_xml);
		@mkdir(LOCAL.$pasta_empresa.$pasta_xml2);
	}else{
		$pasta_xml = date('Ym').'/contingencia/';
		$pasta_xml2 = date('Ym').'/inutilizado/';
		@mkdir(LOCAL.$pasta_empresa);
		@mkdir(LOCAL.$pasta_empresa.date('Ym'));
		@mkdir(LOCAL.$pasta_empresa.date('Ym').'/contingencia');
		@mkdir(LOCAL.$pasta_empresa.date('Ym').'/inutilizado');
	}

	$arquivo_xml_aguardando  = LOCAL.$pasta_empresa.$pasta_xml.$nota[nota_tx_chaveAcesso]."-nfe.xml";
	$arquivo_xml_inutilizado = LOCAL.$pasta_empresa.$pasta_xml2.$nota[nota_tx_chaveAcesso]."-inu-nfe.xml";


	// // ENDERECO DO SERVIDOR DE NFe CACTUS
	// $target_url = SERVIDOR_CACTUS.'inutilizar.php';
	// $data = array('cliente' => NFE_CLIENTE,'numero' => $nota[nota_tx_numero], 'cnpj' => $cnpj, 'justificativa' => $justificativa, 'ano' => $ano, 'modelo' => $modelo, 'serie' => $serie, 'inicial' => $inicial, 'final' => $final);

	// $options = array(CURLOPT_URL => $target_url,CURLOPT_RETURNTRANSFER => true,CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data);

	// $ch = curl_init();
	// curl_setopt_array($ch, $options);
	// $ret_curl = curl_exec($ch);
	// curl_close($ch);
	require_once "../spednfe/vendor/autoload.php";

	try {

		$config = [
		   "atualizacao" => "2018-02-06 06:01:21",
		   "tpAmb" => $CONFIGURA[AMBIENTE_NFE], // Se deixar o tpAmb como 2 você emitirá a nota em ambiente de homologação(teste) e as notas fiscais aqui não tem valor fiscal
		   "razaosocial" => $CONFIGURA[NOME_IMPRESSAO],
		   "siglaUF" => strtoupper($CONFIGURA[UF]),
		   "cnpj" => trata_xml($CONFIGURA[CNPJ]),
		   "schemes" => "PL_009_V4",
		   "versao" => "4.00",
		   "tokenIBPT" => "AAAAAAA",
		   "CSC" => $CONFIGURA[CSC],
		   "CSCid" => $CONFIGURA[CSCID]
		];

		//Assinar XML
		$configJson = json_encode($config);
		$certificadoDigital = file_get_contents($CONFIGURA[CERTIFICADO]);

		$cert = NFePHP\Common\Certificate::readPfx($certificadoDigital, $CONFIGURA[SENHA]);
		$tools = new NFePHP\NFe\Tools($configJson,$cert);
		$tools->model('65');

		$soap = new NFePHP\Common\Soap\SoapCurl($cert);
		$soap->timeout($CONFIGURA[TIMEOUT]);

		$xJust = 'Erro de digitação dos números sequencias das notas';
		$response = $tools->sefazInutiliza($serie, $inicial, $final, $xJust);

		$xml = NFePHP\NFe\Complements::toAuthorize($tools->lastRequest, $response);
				
		// copy($arquivo_xml_aguardando,$arquivo_xml_inutilizado);
		
		unlink($arquivo_xml_aguardando);
		

		if($nota[nota_tx_emissao]!='' && $nota[nota_tx_emissao]!='0000-00-00 00:00:00'){
			$pasta_xml = substr($nota[nota_tx_emissao],0,4).substr($nota[nota_tx_emissao],5,2).'/inutilizado/';
			@mkdir(LOCAL.$pasta_empresa.$pasta_xml);
			$fp = fopen(LOCAL.$pasta_empresa.$pasta_xml.$nota[nota_tx_chaveAcesso].'-inu-nfe.xml','w');
		}
		file_put_contents(LOCAL.$pasta_empresa.$pasta_xml.$nota[nota_tx_chaveAcesso].'-inu-nfe.xml',$xml);

		//você pode padronizar os dados de retorno atraves da classe abaixo
		//de forma a facilitar a extração dos dados do XML
		//NOTA: mas lembre-se que esse XML muitas vezes será necessário, 
		//      quando houver a necessidade de protocolos
		$stdCl = new NFePHP\NFe\Common\Standardize($response);
		
		//nesse caso o $arr irá conter uma representação em array do XML
		$arr = $stdCl->toArray();
		
		
	} catch (\Exception $e) {
		echo $e->getMessage();
	}

	
	// print_r($arr);
	// exit;
	
	if($arr[infInut][cStat] == '102'){
		
		$sql_movimento = selecionar('movimento','movi_tx_status',"!inativo"," AND movi_nb_ordem = '$_POST[id]'");
		if(num_linhas($sql_movimento)>0){
			$a_mov = carrega_array($sql_movimento);

			atualizar('movimento','movi_tx_status','inativo',$a_mov[0]);
			atualizar('ordem','orde_tx_status','Cancelado',$_POST[id]);

			$sql_baixa = selecionar('orpr,ordem,produto','orpr_tx_status','ativo'," AND orde_nb_id = '$_POST[id]'");
			while($a_baixa=carrega_array($sql_baixa)){
				$a_prod = carregar('prod_tx_qtde|produto',$a_baixa[prod_nb_id]);
				atualizar('produto',array('prod_tx_qtde'),array($a_prod[prod_tx_qtde]+$a_baixa[orpr_tx_qtde]),$a_baixa[prod_nb_id]);
			}	

		}

		atualizar('ordem',orde_tx_statusNota,"NFe Inutilizada",$nota[nota_nb_ordem]);
		atualizar('nota',array(nota_tx_statusNota),array("NFe Inutilizada"),$nota[nota_nb_id]);



	}


	// if( get_status() == '' )
	// 	set_status($ret_curl);

	// if( trim($ret_curl) == 'Inutilizacao de numero homologado' ) {
	// 	retorno();
	// 	exit;
	// }
	set_status($arr[infInut][xMotivo]);
	
	index();
	exit;
}

function cadastra_estorno(){

	if($_POST[id_orpr]){
		$extra = " AND orpr_nb_id = '$_POST[id_orpr]'";
	}

	$sql = selecionar("orpr,produto","orpr_nb_ordem","$_POST[id]"," $extra AND (orpr_tx_status='pagamento') AND (orpr_tx_retornoCliente != '' AND orpr_tx_retornoCliente IS NOT NULL) ORDER BY orpr_nb_id  DESC ");
	$a=carrega_array($sql);

	atualizar('orpr',array(orpr_tx_estornoLojista,orpr_tx_estornoCliente),array($_POST[responseLojista],$_POST[responseCliente]),$a[orpr_nb_id]);

	if($_POST[responseLojista]!=''){
		montar_impressao_estornoLojista($a[orpr_nb_id],$id_impressora);
	}

	if($_POST[responseCliente]!=''){
		montar_impressao_estornoCliente($a[orpr_nb_id],$id_impressora);
	}

	index();
	exit;
}


function checaRetonoMultiplus(){
	global $CONFIGURA;
	$curl = curl_init();

	curl_setopt_array($curl,
		array(
			CURLOPT_URL => "http://web1.multipluscard.com.br/MultiplusCardApi/api/Servicos/GetVendasTEF/",
			CURLOPT_RETURNTRANSFER => true,
			CURLOPT_ENCODING => "",
			CURLOPT_MAXREDIRS => 10,
			CURLOPT_TIMEOUT => 30,
			CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
			CURLOPT_CUSTOMREQUEST => "GET",
			CURLOPT_HTTPHEADER => array(
				"Accept: */*",
				"Cache-Control: no-cache",
				"Connection: keep-alive",
				"HASH: $_GET[response]",
				"Host: web1.multipluscard.com.br",
				"TOKEN: ".$CONFIGURA[TOKEN_MULTIPLUS],
				"accept-encoding: gzip, deflate",
				"cache-control: no-cache"
			),
		)
	);

	$retorno = curl_exec($curl);
	$err = curl_error($curl);

	curl_close($curl);

	if ($err) {
		echo "cURL Error #:" . $err;
	} else {
		$retorno = utf8_decode($retorno);
		
		$a_ret = explode("¬",$retorno);
		
		for($i = 0;$i < count($a_ret);$i++){
			$linha = $a_ret[$i];
			$a_retorno[substr($linha,0,7)] = substr($linha,10);
		}


		// echo "<pre>";
		// print_r($a_retorno);
		// echo "</pre>";

		//VENDA APROVADA
		if($a_retorno['015-000'] != '' && $a_retorno['016-000'] != '' && $a_retorno['022-000'] != '' && $a_retorno['023-000'] != '' && $a_retorno['027-000'] != ''){
	

			$nFinalizacao = '027-000';
			$nLinhasImpressao = $a_retorno['028-000'];
			for($j=1;$j<=$nLinhasImpressao;$j++){
				$index=str_pad($j,3,0,STR_PAD_LEFT);
				$impressao.=substr($a_retorno['029-'.$index],1,-1)."\n";

			}

			// echo $impressao;

			echo "<script>

				// alert(window.parent.window.parent.cadastro.responseCliente.value);
				window.parent.window.parent.cadastro.responseCliente.value=".json_encode($impressao).";
				window.parent.window.parent.cadastro.responseLojista.value=".json_encode($impressao).";
				window.parent.window.parent.cadastro.id_orpr.value='$_GET[id_orpr]';
				window.parent.window.parent.cadastro.submit();

			</script>";

		}

	}
	
	exit;
}

function abreWebserviceMultiplus(){
	global $CONFIGURA;
	// print_r($CONFIGURA);

	$a_orpr = carregar('orpr',$_GET[id_orpr]);
	$a_retorno = explode("DOC=",$a_orpr[orpr_tx_retornoCliente]);
	$a_linha = explode(" ",$a_retorno[1]);
	
	
	$nsu = $a_linha[0];
	$dataTransacao = $a_linha[4];
	$horaTransacao = $a_linha[5];
	
	$a_retorno2 = explode("\n",$a_orpr[orpr_tx_retornoCliente]);
	$nomeRede = trim($a_retorno2[1]);

	$a_retorno3 = explode("CONTROLE ",$a_orpr[orpr_tx_retornoCliente]);
	$a_linha2 = explode(" ",$a_retorno3[1]);
	$codigoControle = trim($a_linha2[0]);

	
	$index = count($a_retorno2)-2;
	$data = str_replace('/','',substr($a_retorno2[$index],0,10));
	$hora = str_replace(':','',substr($a_retorno2[$index],12,8));
		
	$valor = str_replace(array(",","."), '',$a_orpr[orpr_tx_valor]);

	// echo "!$nsu!";exit;
	// echo "!$horaTransacao!";exit;

	$cont[] = "000-000 = CNC";
	$cont[] = "001-000 = 1";
	// $cont[] = "002-000 = 123456";
	$cont[] = "003-000 = $valor";
	$cont[] = "010-000 = $nomeRede";
	$cont[] = "012-000 = $nsu";
	$cont[] = "022-000 = $data";
	$cont[] = "023-000 = $hora";
	$cont[] = "800-007 = $codigoControle";
	$cont[] = "999-999 = 0";
	echo "<pre>";
	print_r($cont);
	echo "</pre>";
	// exit;
	



	$conteudo = implode("¬",$cont);

	$curl = curl_init();
	curl_setopt_array($curl, 
		array(
			CURLOPT_URL => "http://web1.multipluscard.com.br/MultiplusCardApi/api/Servicos/SetVendaTEF/",
			CURLOPT_RETURNTRANSFER => true,
			CURLOPT_ENCODING => "",
			CURLOPT_MAXREDIRS => 10,
			CURLOPT_TIMEOUT => 30,
			CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
			CURLOPT_CUSTOMREQUEST => "POST",
			CURLOPT_HTTPHEADER => array(
				"Accept: */*",
				"CNPJ: ".$CONFIGURA[CNPJ],
				"CONTEUDO: $conteudo",
				"Cache-Control: no-cache",
				"Connection: keep-alive",
				"Host: web1.multipluscard.com.br",
				"PDV: ".str_pad($_GET[pdv], 3,'0',STR_PAD_LEFT),
				"TOKEN: ".$CONFIGURA[TOKEN_MULTIPLUS],
				"accept-encoding: gzip, deflate",
				"cache-control: no-cache",
				"content-length: 0"
			),
		)
	);

	$response = curl_exec($curl);
	$err = curl_error($curl);
	
	curl_close($curl);

	if ($err) {
		echo "cURL Error #:" . $err;
	} else {

		echo "<iframe id=frameChecaMultiplus></iframe>";

		javascript("
			setInterval(function(){
				document.getElementById('frameChecaMultiplus').src=\"emissao_nfce.php?".cactux_cookie::url_sistema()."&acao=checaRetonoMultiplus&response=$response&id_orpr=$_GET[id_orpr]\";
			},3000);
		");
	}
	exit;

}

function excluir_cartao(){
// print_r($_POST);
// print_r($_SESSION);
	$or = carregar('ordem,entidade,caixa.pdv',$_POST[id],'caix_nb_pdv','.pdv_nb_id');
	// print_r($or);

	$sql_forma = selecionar('orpr,forma','orpr_tx_status,orpr_nb_ordem',"!inativo,$or[orde_nb_id]"," AND form_tx_pinpad !='Não' LIMIT 1 ");
	$a_forma   = carrega_array($sql_forma);

	if($a_forma[form_tx_pinpad]=='Cappta'){
		?>
	   	<script type="text/javascript" src="https://s3.amazonaws.com/cappta.api/v2/dist/cappta-checkout.js"></script>
		<script src="cappta/js/sample-payments.js"></script>
		<?
	}	

	cabecalho('',2);


	

	//CAMPOS
	$tx_pedido = cactux::texto('Pedido:',$_POST[id],2);	

	$tx_data = cactux::texto('Data:',data($or[orde_tx_data],1),2);
	$tx_forn = cactux::texto('Cliente:',$or[enti_nb_id]." - ".$or[enti_tx_nome],3);
	$tx_cnpj = cactux::texto('CNPJ/CPF:',$or[enti_tx_cnpj],2);
	$tx_valor = cactux::texto('Valor:',"<div id=div_sub_total>".mostra_valor(valor_venda($or[orde_nb_id],1))."</div>",1);


	if($a_forma[form_tx_pinpad]=='Cappta'){
		$checkout = cactux::combo('Checkout:','checkout',array(),'',2,'id="checkoutList"');
		$checkoutInfo = cactux::textarea('PDV ATUAL:','active-checkout','',4,6,'id="active-checkout" readonly');
		$response = cactux::textarea('Retorno:','response','',4,6,'id="response" readonly');

		$estornar = cactux::botao('Estornar',2,'estornar',"onclick=remover();");

	}else{

	}
	
	$voltar = cactux::botao('Voltar',2,'voltar');


	cactux::abre_form();
	cactux::abre_fieldset('Estorno');
	cactux::linha_fieldset($tx_pedido,$tx_data,$tx_forn,$tx_cnpj,$tx_valor);
	cactux::fecha_fieldset();


	if($a_forma[form_tx_pinpad]=='Multiplus'){
		echo "<iframe style='display:none' align=left id=frameMultiplus></iframe>";
	}else{
		cactux::abre_fieldset('Dados PDV');
		cactux::linha_fieldset($checkout,$checkoutInfo,$response);
		cactux::fecha_fieldset();
	}

	echo "<input type=hidden name=id id=id value=$_POST[id]>";
	echo "<input type=hidden name=acao id=acao value=cadastra_estorno>";
	echo "<input type=hidden name=sistemacactus id=sistemacactus value='$_POST[sistemacactus]'>";
	echo "<input type=hidden name=administrativePassword id=administrativePassword>";
	echo "<input type=hidden name=administrativeCode id=administrativeCode>";
	echo "<input type=hidden name=responseCliente id=responseCliente />";
	echo "<input type=hidden name=responseLojista id=responseLojista />";
	echo "<input type=hidden name=id_orpr id=id_orpr />";

	cactux::linha_fieldset($estornar,$voltar);
	cactux::fecha_form();

	cactux::acao_botao('voltar','index');

	$sql = selecionar("orpr,produto","orpr_nb_ordem","$_POST[id]"," AND (orpr_tx_status='pagamento') AND (orpr_tx_retornoCliente != '' AND orpr_tx_retornoCliente IS NOT NULL) ORDER BY orpr_nb_id  DESC ");
	// $a=carrega_array($sql);
	while ($a=carrega_array($sql)) {
		if($a_forma[form_tx_pinpad]=='Multiplus'){
			$excluir = "<a href=javascript:abreMultiplus2($a[orpr_nb_id]); title='Estornar Valor'><img src='cactus/imagens/excluir.png' border=0></a>";
		}else{
			$excluir = "<a href=javascript:showPopup(); title='Estornar Valor'><img src='cactus/imagens/excluir.png' border=0></a>";
		}

		$valores[] = array($a[orpr_nb_id],data($a[orpr_tx_data],3),$a[prod_tx_nome],mostra_valor($a[orpr_tx_valor]),$excluir);
	}

	$cabecalho[] = array('CÓD','DATA','FORMA DE PAGAMENTO','VALOR','');
	$cabecalho[] = 'c,c,c,c,c,c';
	$cabecalho[] = '5%,20%,,15%,2%';
	$cabecalho[] = '50%';

	grid::gerar($cabecalho,$valores);

	rodape();


	$controle = explode("CONTROLE= ",$a[orpr_tx_retornoCliente]);
	$controle = substr($controle[1],0,11);
	?>



	<div id="popup">
	    <div>Enter Password:</div>
	    <input id="pass" type="password"/>

	    <td class="tamanho_1 lblbutton">
	    	<input style="width:100%" type="submit" value="Voltar" class="button" tabindex="4">
	    </td>
	    <button onclick="cancel()">Cancelar</button>    
	    <button onclick="done()">Confirmar</button>    
	</div>

	<style type="text/css">
		#popup {
			width:160px;
			height:80px;
			padding:20px;
			background-color:gray;    
			position:absolute;
			top:100px;
			left:100px;
			display:none;
		}
	</style>

	<script type="text/javascript">

		function abreMultiplus2(id_orpr){
			document.getElementById('frameMultiplus').src="emissao_nfce.php?<?=cactux_cookie::url_sistema()?>&acao=abreWebserviceMultiplus&pdv=<?=$or[pdv_nb_id]?>&id_orpr="+id_orpr;
		}
		
		function remover(){
			var pass = prompt("-------------------ESTORNO-------------------\nVENDA: <?=$_POST[id]?>\nCONTROLE: <?="$controle"?>\nVALOR: <?=mostra_valor($a[orpr_tx_valor],1)?>\nSENHA ADMINISTRADOR:");
			if (pass == null || pass == "") {
				alert("User cancelled the prompt.");
			} else {
				document.getElementById('administrativePassword').value=pass;
				document.getElementById('administrativeCode').value='<?="$controle"?>';
				paymentReversal();
				// document.cadastro.submit();
				// alert("Hello " + pass + "! How are you today?");
			}
		}

	

		function done() { 
		    document.getElementById("popup").style.display = "none";
		    var password = document.getElementById("pass").value;

		    //DO STUFF WITH PASSWORD HERE
		};

		function cancel() { 
		     document.getElementById("popup").style.display = "none";
		};

		function showPopup() {
		     document.getElementById("popup").style.display = "block";
		}
	</script>


	<?
}






function chama_pagina_ecf(){

	if ( $_POST[novo_cliente]==1 || $_POST[novo_cliente]=='' ) {
		set_status('ATENÇÃO: Selecione um cliente!');
		layout_seleciona_cliente();
		exit;
	}

	atualizar('ordem',array(orde_nb_entidade),array($_POST[novo_cliente]),$_POST[id]);


	chamar_pag('emissao_nfe.php','acao,id,nota,porcentagem_nota,busca_nota_ecf,busca_voltapagina',"layout_enviar_nota,$_POST[id],$_POST[nota],100,sim,emissao_nfce.php");
	exit;
}






function layout_seleciona_cliente(){

	cabecalho('Emissão NFC-e');


	cactux::abre_form();

	
	$a = carregar('ordem,empresa,entidade',$_POST[id]);
	
	//TEXTOS
	$tx_codVenda= cactux::texto('Cod. Venda',$a[orde_nb_id],2);
	$tx_cliente = cactux::texto('Cliente',$a[enti_tx_nome],2);
	$tx_empresa = cactux::texto('Empresa',$a[empr_tx_nome],2);

	$cliente = cactux::combo_net('!Cliente:','novo_cliente',$a[enti_nb_id],$a[enti_tx_nome],4,array('combonet/busca_div.php?c=entidade','combonet/busca_net.php?c=entidade'));

	//BOTOES
	$gravar = cactux::botao_submit('Gravar',2,'chama_pagina_ecf','id,nota',"$_POST[id],$_POST[nota]");
	$voltar = cactux::botao('Voltar',2,'voltar');
	$status = cactux::msg_status();

	cactux::abre_fieldset('Dados da Venda');
	cactux::linha_fieldset($tx_codVenda,$tx_cliente,$tx_empresa);
	cactux::linha_fieldset($cliente);
	cactux::fecha_fieldset();
	cactux::linha_fieldset($voltar,$gravar,$status);
	cactux::fecha_form();	
	cactux::acao_botao('voltar','index');


	rodape();	
}






function index(){

	global $CONFIGURA;
	
	// PRIMEIRA COISA QUE FAZ AO ENTRAR É CHECAR SE HA RETORNO
	// if( !$_POST[acao] )
	// 	retorno(1);


	cabecalho('Emissão NFC-e',2);

	?><script src="jquery.min.js" type="text/javascript"></script>
	<script type="text/javascript" src="jquery.blockUI.js"></script><?
	
	if($_POST[busca_cod]!=''){
		$extra .= " AND orde_nb_id = '$_POST[busca_cod]' ";
	}
	if($_POST[busca_numeronf]!=''){
		$extra .= " AND nota_tx_numero LIKE '%$_POST[busca_numeronf]' AND orde_nb_id=nota_nb_ordem";
		$tabela_extra = '.nota';
	}

	if($_POST[busca_situa]=='NFe Contingência'){
		$extra .= " AND nota_tx_statusNota NOT IN ('NFe Autorizada','NFe Cancelada','NFe Enviada','NFe Inutilizada','NFe Denegada') AND orde_nb_id=nota_nb_ordem";
		$tabela_extra = '.nota';
	}elseif($_POST[busca_situa]!=''){
		$extra .= " AND nota_tx_statusNota = '$_POST[busca_situa]' AND orde_nb_id=nota_nb_ordem";
		$tabela_extra = '.nota';
	}
	
	if($_POST[busca_filtro]=='Venda'){
		if($_POST[busca_inicio]!=''){
			$d1 = gera_data($_POST[busca_inicio],1).' 00:00:00';
			$extra .= " AND orde_tx_data >= '$d1' ";
		}
		
		if($_POST[busca_fim]!=''){
			$d2 = gera_data($_POST[busca_fim],1).' 23:59:59';
			$extra .= " AND orde_tx_data <= '$d2' ";
		}
	}elseif($_POST[busca_filtro]=='Emissão'){
		$extra .= " AND orde_nb_id=nota_nb_ordem";
		$tabela_extra = '.nota';
		if($_POST[busca_inicio]!=''){
			$d1 = gera_data($_POST[busca_inicio],1).' 00:00:00';
			$extra .= " AND nota_tx_emissao >= '$d1' ";
		}
		
		if($_POST[busca_fim]!=''){
			$d2 = gera_data($_POST[busca_fim],1).' 23:59:59';
			$extra .= " AND nota_tx_emissao <= '$d2' ";
		}
	}
	
	if($_POST[busca_cliente]!=''){
		$extra .= " AND enti_tx_nome LIKE '%$_POST[busca_cliente]%' ";
	}
	
	$extra .= " AND orde_tx_status IN('encerrado','entregue','devolucao compra','devolucao finalizada','NF Cancelada','Venda Cancelada','Cancelado') ";

	// $extra .= " AND orde_nb_empresa=1";

	if($CONFIGURA[CATEGORIA_SERVICO]>0)
		$extra_cate = " AND prod_nb_categoria != '$CONFIGURA[CATEGORIA_SERVICO]'";

	if($_SESSION[user_tx_nivel] != 'Administrador' && $_SESSION[user_tx_nivel] != 'Gerente'){
		$extra_limite = " LIMIT 10";
		$BUSCA[0] = selecionar('ordem,empresa,entidade.orpr.produto'.$tabela_extra,'orde_tx_status',"!inativo"," AND orpr_nb_produto = prod_nb_id AND orpr_nb_ordem = orde_nb_id $extra $extra_cate GROUP BY orde_nb_id ORDER BY orde_nb_id DESC $extra_limite");
		
	}else{
		$sql = selecionar('ordem,empresa,entidade'.$tabela_extra,'orde_tx_status',"!inativo"," $extra $extra_cate GROUP BY orde_nb_id ORDER BY orde_nb_id DESC",1);
		$BUSCA = grid::gerar_paginacao($sql);
	}
	
	cactux::abre_form();
	
	//CAMPOS
	$cod = cactux::campo('Código','busca_cod',$_POST[busca_cod],1);
	$inicio = cactux::campo('Data Inicio','busca_inicio',$_POST[busca_inicio],1,MASCARA_DATA);
	$fim = cactux::campo('Data Final','busca_fim',$_POST[busca_fim],1,MASCARA_DATA);
	$filtro = cactux::combo('Filtro','busca_filtro',array('Venda','Emissão'),$_POST[busca_filtro],2);
	$cliente = cactux::campo('Cliente','busca_cliente',$_POST[busca_cliente],2);
	$numero = cactux::campo('Número','busca_numeronf',$_POST[busca_numeronf],1);
	$situa = cactux::combo('Situação','busca_situa',array('','NFe Contingência','NFe Autorizada','NFe Cancelada','NFe Inutilizada','NFe Denegada'),$_POST[busca_situa],2);
	
	//BOTOES
	$buscar = cactux::botao_submit_busca('Buscar',2,'index');
	// $atualizar = cactux::botao('Atualizar Retorno',2,'atualizar');
	$status = cactux::msg_status('',6);
	
	cactux::abre_fieldset('Filtro de Busca');
	cactux::linha_fieldset($cod,$inicio,$fim,$filtro,$cliente,$numero,$situa);
	cactux::linha_fieldset($buscar,$atualizar,$status);
	if ( $CONFIGURA[AMBIENTE_NFE]==2 ) {
		$texto = cactux::texto("AMBIENTE DE HOMOLOGAÇÃO",'',10);
		cactux::linha_fieldset($texto);
	}
	cactux::fecha_fieldset();
	cactux::fecha_form();
	
	cactux::acao_botao('atualizar','retorno');
	
	$cabecalho[] = array('CÓD','CLIENTE','EMPRESA','DATA VENDA','VALOR','Nº DE ITENS','SITUAÇÃO','TIPO','N° NOTA','DATA&nbsp;EMISSÃO','','','','','','','','');
	$cabecalho[] = 'c,e,e,c,c,c,c,c,c,c,c';
	$cabecalho[] = '5%,,10%,7%,6%,8%,9%,7%,8%,2%,2%,2%,2%,2%,2%,2%,2%,2%,2%';
	
	
	
	switch( $_POST[busca_situa] ){
		
		case 'Autorizada':
			$situacao = 'NFe Autorizada';
		break;
		case 'Cancelada':
			$situacao = 'NFe Cancelada';
		break;		
	}


	while( $a = carrega_array($BUSCA[0]) ){
		
		$nNota = carregar('nota','','nota_nb_ordem',$a[orde_nb_id]);
		$numero_nota = $nNota[nota_tx_chaveAcesso];
		if( $nNota[nota_tx_numero] != '' )
			$exibe_numero_nota = zeros($nNota[nota_tx_numero],9);
		else
			$exibe_numero_nota = '';
			
		$stNota = $nNota[nota_tx_statusNota];

		if($nNota[nota_tx_modelo]=='65'){
			$tipo = 'NFCe';
		}elseif($nNota[nota_tx_modelo]=='55'){
			$tipo = 'NFe';
		}else{
			$tipo = '';
		}
		
		
		if(substr($a[orde_tx_status],0,9) == 'devolucao' )
			$tipo_devolucao = "<font color=red>&nbsp; ($a[orde_tx_tipo])</font>";
		else	
			$tipo_devolucao = '';
		
		$statusNota = $nNota[nota_tx_statusNota];
		
		switch( $statusNota ) {
			case '':				$statusNota = "";	break;
			case 'NFe Autorizada':	$statusNota = "<font color=blue>".$statusNota;	break;
			case 'NFe Cancelada':	$statusNota = "<font color=green>".$statusNota;	break;
			case 'NFe Enviada':		$statusNota = "<font color=black>".$statusNota;	break;
			case 'NFe Inutilizada':	$statusNota = "<font color=purple>".$statusNota;	break;
			default:				$statusNota = "<font color=red>NFe Contingência";	break;
		}
		
		//Nº DE ITENS
		// $itens = selecionar('orpr','orpr_tx_status,orpr_nb_ordem',"ativo,$a[orde_nb_id]");
		// $itens = num_linhas($itens);

		$itensCartao = selecionar('orpr','orpr_tx_status,orpr_nb_ordem',"pagamento,$a[orde_nb_id]"," AND (orpr_tx_retornoCliente != '' AND orpr_tx_retornoCliente IS NOT NULL) LIMIT 1");
		$numItensCartao = num_linhas($itensCartao);
		
		$a_clie = carregar('entidade',$a[orde_nb_entidade]);
		$cliente = $a_clie[enti_tx_nome].$tipo_devolucao;

		if($a[orde_tx_statusNota] == 'Venda Cancelada'){
			$nNota[nota_tx_statusNota] = 'Venda Cancelada';
			$statusNota = "<font color=green>".'Venda Cancelada';
		}

		// CRIA UM HAS PARA PASSAR PELO GET
		$hash_orde = md5($a[orde_nb_id].'.senha.cactus');


		$icone_7 = ".icone_modificar($a[orde_nb_id],'layout_seleciona_cliente','nota','$nNota[nota_nb_id]','','','Nota Referenciada','cactus/imagens/nfe.png')";

		$sql_nota_ecf = selecionar('nota','nota_nb_ordem,nota_tx_ecf',"$a[orde_nb_id],Sim"," LIMIT 1 ");
		if ( num_linhas($sql_nota_ecf)>0 ) {
			$icone_7 = '';
			$nNota_ecf = carrega_array($sql_nota_ecf);

			$cliente .= " <font color=blue><b>(NOTA&nbsp;REFERENCIADA:&nbsp;$nNota_ecf[nota_tx_numero])</b></font>";

			// if ( $nNota_ecf[nota_tx_statusNota]=='NFe Autorizada' )
			// 	$icone_7 = ".icone_modificar($a[orde_nb_id],'impressao_nfe','numero_nota','$numero_nota','emissao_nfe.php?id=$a[orde_nb_id]&acao=impressao_nfe&numero_nota=$nNota_ecf[nota_tx_chaveAcesso]&h=$hash_orde','target=_blank','DANFE','cactus/imagens/print.png')";
		}

		$icone_6 = ".icone_modificar($a[orde_nb_id],'gera_devolucao','nota,busca_voltapagina','$nNota[nota_nb_id],emissao_nfce.php','devolucao.php','','Devolução','cactus/imagens/devolucao.png')";


		switch( $nNota[nota_tx_statusNota] ) {
		case "NFe Autorizada":
					// CONSULTAR NOTA
					$icone_5 = ".icone_modificar($a[orde_nb_id],'layout_log','nota','$nNota[nota_nb_id]','','','Ver LOG','cactus/imagens/imprimir.png')";
					//$icone_5 = ".icone_modificar($a[orde_nb_id],'consultar_nota','id_nota','$nNota[nota_nb_id]','','','Consultar Nota','cactus/imagens/atualizar.png')";
					// LOGS
					$icone_4 = '';
					// IMPRIMIR DANFE
					$icone_3 = ".icone_modificar($a[orde_nb_id],'impressao_nfe','numero_nota','$numero_nota','','','Imprimir Danfe','cactus/imagens/print.png')";
					// ENVIAR EMAIL
					$icone_2 = ".icone_modificar($a[orde_nb_id],'envia_email','numero_nota','$numero_nota','','','Enviar E-mail','cactus/imagens/email.png')";
					// CANCELAR A NOTA
					$icone_1 = "<a href=javascript:cancela_nota($a[orde_nb_id],'$numero_nota','$a[orde_nb_empresa]') title='Cancelar NFe'><img src='cactus/imagens/excluir.png' border=0></a>";
				break;
		case "NFe Inutilizada":
					$icone_7 = '';
					$icone_5 = ".icone_modificar($a[orde_nb_id],'layout_log','nota','$nNota[nota_nb_id]','','','Ver LOG','cactus/imagens/imprimir.png')";
					$icone_4 = "";
					$icone_3 = "";
					$icone_2 = "";
					$icone_1 = '';
					// LOGS
				break;
		case "NFe Cancelada":
					$icone_7 = '';
					$icone_5 = '';
					$icone_4 = "";
					$icone_3 = "";
					$icone_2 = "";
					// LOGS
					$icone_1 = "";
				break;
		case "Venda Cancelada":
					$icone_7 = '';
					$icone_5 = '';
					$icone_4 = "";
					$icone_3 = "";
					$icone_2 = "";
					// LOGS
					$icone_1 = "";
				break;
		default:
					// ECF
					if( $nNota[nota_tx_statusNota] == "" )
						$icone_7 = '';
					// LOGS
					$icone_5 = ".icone_modificar($a[orde_nb_id],'layout_log','nota','$nNota[nota_nb_id]','','','Ver LOG','cactus/imagens/imprimir.png')";
					// CONSULTAR NOTA
					//$icone_5 = ".icone_modificar($a[orde_nb_id],'consultar_nota','id_nota','$nNota[nota_nb_id]','','','Consultar Nota','cactus/imagens/atualizar.png')";
					
					// ENVIAR A NOTA
					$icone_4 = "<a href=javascript:envia_nota('$a[orde_nb_id]','$a[orde_nb_empresa]') title='Enviar NFe'><img src='cactus/imagens/download.png' border=0 alt='Enviar NFe'></a>";
					// IMPRIMIR
					
					if( $nNota[nota_tx_statusNota] == "" )
						$icone_3 = ".icone_modificar($a[orde_nb_id],'impressao_nfe','id_ordem_finalizar','$a[orde_nb_id]','','  ','Imprimir CUPOM','cactus/imagens/print.png')";
					else
						$icone_3 = ".icone_modificar($a[orde_nb_id],'impressao_nfe','numero_nota','$numero_nota','','','Imprimir DANFE','cactus/imagens/print.png')";
//					$icone_3 = ".icone_modificar($a[orde_nb_id],'imprimir','','','relatorios/pedido.php',' target=_blank ','Imprimir','cactus/imagens/print.png')";
					// MODIFICAR A VENDA
					$icone_2 = ".icone_modificar($a[orde_nb_id],'modificar_venda','','','','','Modificar Venda')";
					// EXCLUIR A VENDA ou INUTILIZAR A NOTA
					if( $nNota[nota_tx_statusNota] == "" )
						$icone_1 = ".icone_excluir($a[orde_nb_id],'exclui_venda')";
					else
						$icone_1 = "<a href=javascript:inutiliza_nota($a[orde_nb_id],'$nNota[nota_tx_numero]','$a[orde_nb_empresa]') title='Inutilizar NFe'><img src='cactus/imagens/excluir.png' border=0></a>";

				break;		
		}

		if ( $tipo=='NFe' ) {
			// NÃO PODE LISTAR NFe
			$icone_7='';
			$icone_6='';
			$icone_5='';
			$icone_4='';
			$icone_3='';
			$icone_2='';
			$icone_1='';
		} else {

			if ( $a[orde_tx_tipo]!='Devolução Venda' && $a[orde_tx_tipo]!='Devolução Compra' ) {
				// SE NÃO FOR UMA NOTA DE DEVOLUÇÃO
				if ( $nNota[nota_tx_chaveAcesso]!='' ) {
					// VERIFICA SE FOI GERADA ALGUMA DEVOLUÇÃO
					$sql_devolucao = selecionar('ordem','orde_tx_status,orde_tx_chaveReferenciada1',"!inativo,$nNota[nota_tx_chaveAcesso]"," AND (orde_tx_tipo='Devolução Venda' OR orde_tx_tipo='Devolução Compra') LIMIT 1 ");
					if ( num_linhas($sql_devolucao)>0 ) {
						$icone_6 = '';// NÃO EXIBE O ICONE DE DEVOLUÇÃO
					}
				}
			} else {
				// SE JÁ FOR UMA NOTA DE DEVOLUÇÃO, NÃO EXIBE O ÍCONE DE DEVOLUÇÃO
				$icone_6 = '';
			}
		}

		// if($_SESSION[user_tx_nivel] != 'Administrador' && $_SESSION[user_tx_nivel] != 'Gerente')
		// 	$icone_1 = '';


		if($numItensCartao > 0)
			$excluir_cartao = ".icone_modificar($a[orde_nb_id],'excluir_cartao','','','','','Estornar Cartão','cactus/imagens/cancela_cartao.png')";
		else
			$excluir_cartao = '';
		// $excluir_cartao = "<a href=javascript:inutiliza_nota($a[orde_nb_id],'$nNota[nota_tx_numero]') title='Inutilizar NFe'><img src='cactus/imagens/excluir.png' border=0></a>";
		// $excluir_cartao = "<a href=javascript:inutiliza_nota($a[orde_nb_id],'$nNota[nota_tx_numero]') title='Inutilizar NFe'><img src='cactus/imagens/excluir.png' border=0></a>";

		$icone_comanda = ".icone_modificar($a[orde_nb_id],'imprime_cupom_tela','','','','','Imprimir VENDA','cactus/imagens/imprimir2.png')";
		// $icone_6 = ".icone_modificar($a[orde_nb_id],'consultar_nota','id_nota','$nNota[nota_nb_id]','','','Consultar Nota','cactus/imagens/atualizar.png')";
	
		if ( $a[orde_nb_empresa]>0 ) {
			$a_empresa    = carregar('empresa',$a[orde_nb_empresa]);
			$nome_empresa = $a_empresa[empr_tx_nome];
		} else {
			$nome_empresa = '';
		}


		$valores[] = array($a[orde_nb_id],$cliente,$nome_empresa,data($a[orde_tx_data],3),
		mostra_valor($a[orde_tx_valorTotal]),$itens,$statusNota,$tipo,$exibe_numero_nota,data($nNota[nota_tx_emissao],3),$icone_7,$icone_6,$icone_5,$icone_4,$icone_3,$icone_2,$excluir_cartao,$icone_1);
		//$envia_nota);		
	}
	
	grid::gerar($cabecalho,$valores);

	if($_SESSION[user_tx_nivel] != 'Administrador' && $_SESSION[user_tx_nivel] != 'Gerente')
		echo"";
	else
		grid::paginar($BUSCA);
	
	
	cactux::acao_botao('form_envia_nota','enviar_nota','id,porcentagem_nota,busca_empresa_configura',"0,0,0");
	cactux::acao_botao('form_cancela_nota','cancela_nota','id,numero_nota,busca_empresa_configura',"0,0,0");
	cactux::acao_botao('form_inutiliza_nota','inutilizar_nota','id,numero_nota,busca_empresa_configura',"0,0,0");

	

	// javascript("
	// 	window.document.form_envia_nota.onsubmit = function(){
	// 		alert();
	// 		$.blockUI({ message: \"<h1>Processando...</h1>\" });
	// 		alert();
	// 	};
	// ");
	
	javascript("
	
	function envia_nota(id,id_empresa) {
		/*
		var erro=0;

		
		var porcentagem = prompt('Entre com a porcentagem do valor:','100');
		if( porcentagem == null || porcentagem == '') {
			alert('ERRO: Preencha todos os dados!');
			erro = 1;
		}
		if( erro == 0 ) {
			//alert(porcentagem);
			
			window.document.form_envia_nota.id.value=id;
			window.document.form_envia_nota.porcentagem_nota.value=porcentagem;
			window.document.form_envia_nota.submit();
			
		}
		
		*/
			$.blockUI({ message: \"<h1>Processando...</h1>\" });
		
			window.document.form_envia_nota.id.value=id;
			window.document.form_envia_nota.busca_empresa_configura.value=id_empresa;
			window.document.form_envia_nota.porcentagem_nota.value=100;
			window.document.form_envia_nota.submit();
	}
	
	function cancela_nota(id,num,id_empresa) {
			
			if( confirm('Deseja realmente cancelar a NFe?') ) {
				window.document.form_cancela_nota.id.value=id;
				window.document.form_cancela_nota.busca_empresa_configura.value=id_empresa;
				window.document.form_cancela_nota.numero_nota.value=num;
				window.document.form_cancela_nota.submit();
			}
	}	

	function inutiliza_nota(id,num,id_empresa) {
			
			if( confirm('Deseja realmente inutilizar a NFe?') ) {
				window.document.form_inutiliza_nota.id.value=id;
				window.document.form_inutiliza_nota.busca_empresa_configura.value=id_empresa;
				window.document.form_inutiliza_nota.numero_nota.value=num;
				window.document.form_inutiliza_nota.submit();
			}
	}	
	
	");

	
	rodape();
	
}

controle();
?>