<?php


function consulta_chave($numeroNota) {
	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" => "RN",
		"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
		return($e->getMessage());
	}
	$tools->model('65');

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


	$consultaChave = $tools->sefazConsultaChave($numeroNota);
	$stdCl2 = new NFePHP\NFe\Common\Standardize($consultaChave);
	$arr_consulta = $stdCl2->toArray();

	return $arr_consulta;
	exit;

}


function nfe_envia_xml($xml_aguardando,$xml_autorizado,$chave='') {
	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" => "RN",
		"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);
		echo "ERRO contingency:".$e->getMessage();
		$tools->contingency->deactivate();
	}


	//Enviar Lote
	// echo "!$chave!";exit;
	if($chave==''){
		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
				echo("[$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
			// echo ($e->getMessage());
			// exit;
			// 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);

			echo "ERRO contingency2:".$e->getMessage();
			$tools->contingency->deactivate();

		}

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

		$std2 = new NFePHP\NFe\Common\Standardize($protocolo);
		$a_recibo = $std2->toArray();
		$statusRecibo = $a_recibo[protNFe][infProt][cStat];

		// echo"<pre>";
		// print_R($a_recibo);
		// echo"<pre>";
		if($statusRecibo!='100'){
			$protocolo = $protocoloRecibo;
		}
		
	}else{
		// $protocolo = consulta_chave($chave);

		$protocolo = $tools->sefazConsultaChave($chave);
		// $stdCl2 = new NFePHP\NFe\Common\Standardize($consultaChave);
		// $arr_consulta = $stdCl2->toArray();

		echo "<hr>$chave - <pre>";
		var_dump($protocolo);
		echo "</pre>";
	}

	

	

	//finalizar o processo
	if($protocolo!=''){
		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
			echo "ERRO $chave protocol:".$e->getMessage();
		}
	}
	

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


}

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 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); 
	// PROCURA SE A ORDEM ESTA NA TABELA ORDEM(TEMPORARIA) OU EM ORDEM_CONSOLIDADA
	if( $a[orde_nb_id] == '' ) 
		$a = carregar('ordem',$_POST[id]);

	$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
	
	if($nota[nota_tx_codigoNumerico] > 0){
		$codNum = $nota[nota_tx_codigoNumerico];//08
	}else{
		$codNum = '1'.str_pad($nota[nota_nb_id],7,'0',STR_PAD_LEFT);//08
		// $codNum = rand(10000000,99999999);//08
	}
	// $codNum = zeros($nota[nota_tx_numero],8);
	
	$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;
	
}

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

	if ($_POST[tabela]=='sim') {
		$a = carregar('ordem',$ordem);
		$ORDEM_CONSOLIDADA = 'SIM';
	} else {
		$a = carregar('ordem',$ordem);
		$ORDEM_CONSOLIDADA = 'NAO';
	}
	if ( intval($a[orde_nb_id])==0 ) {
		set_status('ERRO: Falha ao carregar o registro da nota!');
		index();
		exit;
	}

	$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 = " GROUP BY orpr_nb_id ";
		}

		$colunas_soma = "SUM(orpr_tx_qtde) AS orpr_tx_qtde,SUM(orpr_tx_desconto) AS orpr_tx_desconto";


		// AQUI FAZ A CONFERENCIA SE ESTA CONSOLIDADA OU NAO A ORDEM
		// if( $ORDEM_CONSOLIDADA == 'NAO' )
			$sql = selecionar('orpr.*,ordem.*,produto.*,'.$colunas_soma.'|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");
		// else
		// 	$sql = selecionar('orpr.*,ordem_consolidada.*,produto.*,'.$colunas_soma.'|orpr_consolidada,ordem_consolidada,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,!inativo'," 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]+$a[orpr_tx_descontoRealGeral]);
			$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[orpr_tx_desconto]+$a[orpr_tx_descontoRealGeral]) > 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[orpr_tx_desconto]+$a[orpr_tx_descontoRealGeral]) ) {
					
						// $a[orpr_tx_desconto] += ($a[orpr_tx_desconto]+$a[orpr_tx_descontoRealGeral]);
						$DESCONTO_NO_FINAL_REALIZADO = 1;
					}
				
				}
			
			}
			
			$produto[vDesc] = 			($a[orpr_tx_desconto]+$a[orpr_tx_descontoRealGeral]);
			$produto[vOutro] = 			$produto[valor]*(0.1);
			
			$DESCONTO_TOTAL += ($a[orpr_tx_desconto]+$a[orpr_tx_descontoRealGeral]);

//			$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[vBC]*$a[prod_tx_totalTributo])/100),2)."</vTotTrib>");
					$total_trib+=round((($produto[vBC]*$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[vBC])."</vBC>");
							fputs($fp,"<pPIS>".$a_trib[trib_tx_aliquotaPis]."</pPIS>");
							$valor_pis = trata_xml_numero(($produto[vBC])*($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];

			if ( strtolower($a[prod_tx_taxaServico])=='sim' ){
				$total_contabiliza_taxa += trata_xml_numero($a[orpr_tx_valor]*$a[orpr_tx_qtde]);
			}


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

		// AQUI FAZ A CONFERENCIA SE ESTA CONSOLIDADA OU NAO A ORDEM
		// if( $ORDEM_CONSOLIDADA == 'NAO' )
			$sql_taxa = selecionar('orpr,ordem','orde_tx_status,orpr_tx_status',"!inativo,taxa"," AND orde_nb_id = '$ordem' ORDER BY orpr_tx_valor ASC");
		// else
		// 	$sql_taxa = selecionar('orpr_consolidada,ordem_consolidada','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){
			if ( $total_contabiliza_taxa>0 ) {
				$a_taxa=carrega_array($sql_taxa);
				++$ITEM_PRODUTO;
				$valorTaxa = trata_xml_numero($total_contabiliza_taxa * ($a_taxa[orpr_tx_valor]/100));
				$produto[vProd] += $valorTaxa;


				if ($CONFIGURA[TEXTO_TAXA_SERVICO]!='')
					$texto_taxa_servico = $CONFIGURA[TEXTO_TAXA_SERVICO];
				else
					$texto_taxa_servico = 'Taxa de Serviço';


			fputs($fp,'<det nItem="'.$ITEM_PRODUTO.'">
				<prod>
					<cProd>001</cProd>
					<cEAN></cEAN>
					<xProd>'.strtoupper(trata_xml($texto_taxa_servico)).'</xProd>
					<NCM>00000000</NCM>
					<CFOP>5102</CFOP>
					<uCom>UN</uCom>
					<qCom>1.00</qCom>
					<vUnCom>'.$valorTaxa.'</vUnCom>
					<vProd>'.$valorTaxa.'</vProd>
					<cEANTrib></cEANTrib>
					<uTrib>UN</uTrib>
					<qTrib>1.00</qTrib>
					<vUnTrib>'.$valorTaxa.'</vUnTrib>
					<indTot>1</indTot>
				</prod>
				<imposto>
				<ICMS><ICMSSN102>
				<orig>0</orig>
				<CSOSN>102</CSOSN>
				</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;

			// AQUI FAZ A CONFERENCIA SE ESTA CONSOLIDADA OU NAO A ORDEM
			// if( $ORDEM_CONSOLIDADA == 'NAO' )
				$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");
			// else
			// 	$sql_pag = selecionar('form_nb_id,form_tx_sefaz,SUM(orpr_tx_qtde*orpr_tx_valor) as valor|orpr_consolidada,ordem_consolidada.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 enviar_nota($id_ordem){
	global $CONFIGURA;

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

	@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_contingencia = date('Ym').'/contingencia/';
	$pasta_autorizada = date('Ym').'/autorizada/';

	// echo "!$id_ordem!";exit;
	$sql = selecionar('nota','nota_tx_status,nota_nb_ordem',"ativo,$id_ordem","LIMIT 1");
	$a_nota = carrega_array($sql);
	//atualiza a data e hora de emissao da nota
	atualizar('nota','nota_tx_emissao',date('Y-m-d H:i:s'),$a_nota[0]);

	
	$xml = @simplexml_load_file(LOCAL.$pasta_empresa.$pasta_contingencia.$a_nota[nota_tx_chaveAcesso]."-nfe.xml");
	$situacaoXmlPrevia = $xml->protNFe->infProt->cStat;
	
	if($situacaoXmlPrevia != '100'){ //VERIFICA SE A NOTA POR ALGUM MOTIVO JA FOI ALTORIZADA
		$numeroNota = gera_xml();
	}else{
		$numeroNota = $a_nota[nota_tx_chaveAcesso];
	}
	
	$arquivo_xml_contingencia = LOCAL.$pasta_empresa.$pasta_contingencia.$numeroNota."-nfe.xml";
	$arquivo_xml_autorizado = LOCAL_REDE.$pasta_empresa.$pasta_autorizada.$numeroNota."-nfe.xml";

	if(	$fp = fopen($arquivo_xml_contingencia,"r")) {
		if($situacaoXmlPrevia != '100'){
			nfe_envia_xml($arquivo_xml_contingencia,$arquivo_xml_autorizado);
		}
		
		$a_status = consulta_chave($numeroNota);

		// $novaConsulta = $tools->sefazConsultaChave($numeroNota);
		// $stdNovaConsulta = new NFePHP\NFe\Common\Standardize($a_status);
		// $arr_novaConsulta = $stdNovaConsulta->toArray();
		// echo $a_status[protNFe][infProt][cStat];
	
		// echo "<hr>STATUS";
		// echo "<pre>";
		// print_r($a_status);
		// echo "</pre>";
		// exit;

	} else {
		$MSG_STATUS = "ERRO: XML NÃO LOCALIZADO";
	}

	$notaStatus = $a_status[protNFe][infProt][cStat];
	$MSG_STATUS = $a_status[protNFe][infProt][cStat].' - '.$a_status[protNFe][infProt][xMotivo];
	
	if($notaStatus=='' && $MSG_STATUS == ' - '){
		$notaStatus = $a_status[cStat];
		$MSG_STATUS = $a_status[cStat].' - '.$a_status[xMotivo];
		$ERRO_XML = "ERRO XML - ";
	}

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

		
		$a_nota = carregar('nota',$id_nota);
		$xml = simplexml_load_file($arquivo_xml_contingencia);
		$situacao = $xml->protNFe->infProt->cStat;
		


		if($notaStatus=='100' && $notaStatus!=$situacao){
			// IF QUE VERIFICA SE O STATUS SEFAZ ESTA APROVADO (100) MAS O XML NÃO - DEVE TENTAR ASSINAR E PROTOCOLAR O XML
			$numeroNota = gera_xml();
			nfe_envia_xml($arquivo_xml_contingencia,$arquivo_xml_autorizado,$numeroNota);
			$a_status = consulta_chave($numeroNota);

			// echo "OK!1";
			// echo "<hr>$notaStatus=='100' && $notaStatus!=$situacao";
			
			
			$notaStatus = $a_status[protNFe][infProt][cStat];
			$MSG_STATUS = $a_status[protNFe][infProt][cStat].' - '.$a_status[protNFe][infProt][xMotivo];
			$xml = simplexml_load_file($arquivo_xml_contingencia);
			$situacao = $xml->protNFe->infProt->cStat;

		}elseif($situacao!='100' && $notaStatus==$situacao){
			// ACREDITO QUE ESSE CASO NAO OCORRA - XML PROTOCOLADO COM NOTA NAO AUTORIZADA NA SEFAZ
			$numeroNota = gera_xml();
			nfe_envia_xml($arquivo_xml_contingencia,$arquivo_xml_autorizado,$numeroNota);
			$a_status = consulta_chave($numeroNota);

			// echo "OK!2";
			
			$notaStatus = $a_status[protNFe][infProt][cStat];
			$MSG_STATUS = $ERRO_XML.$a_status[protNFe][infProt][cStat].' - '.$a_status[protNFe][infProt][xMotivo];
			$xml = simplexml_load_file($arquivo_xml_contingencia);
			$situacao = $xml->protNFe->infProt->cStat;

		}else{
			$xml = simplexml_load_file($arquivo_xml_contingencia);
			$MSG_STATUS = $ERRO_XML.$xml->protNFe->infProt->cStat." - ".$xml->protNFe->infProt->xMotivo;
		
			$arquivo_impressao = $arquivo_xml_contingencia;
		}

		// IF QUE VERIFICA SE O STATUS DA NOTA E APROVACAO ESTA OK PARA ENVIAR O ARQUIVO
		if($notaStatus=='100' && $notaStatus==$situacao){
			//esse caso também resolve o problema caso nao esteja autorizado na base de dados
			file_put_contents($arquivo_xml_autorizado,file_get_contents($arquivo_xml_contingencia));

			$xml = simplexml_load_file($arquivo_xml_autorizado);
			$situacaoAutorizada = $xml->protNFe->infProt->cStat;

			// echo "<hr>$notaStatus=='100' && $notaStatus==$situacao";

			//SOMENTE SE O ARQUIVO ESTIVER ASSINADO E PROTOCOLADO COM STATUS 100 (AUTORIZADO) NA PASTA AUTORIZADA PASSA O STATUS PARA ATUALIZAR NA TABELA
			if($situacaoAutorizada == '100'){
				$MSG_STATUS = 'NFe Autorizada';
				$arquivo_impressao = $arquivo_xml_autorizado;
				unlink($arquivo_xml_contingencia);
			}


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

		}


		atualizar('nota',nota_tx_statusNota,$MSG_STATUS,'','nota_nb_ordem',$_POST[id]);
		// ATUI ATUALIZA AS 2 TABELAS PORQUE NAO TEM PROBLEMA. SE O ID NAO TIVER NA TABELA ELE SIMPLESMENTE NAO FAZ NADA
		atualizar('ordem',orde_tx_statusNota,$MSG_STATUS,$_POST[id]);
		// atualizar('ordem_consolidada',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());
	}


}