| Server IP : 162.214.74.102 / Your IP : 216.73.217.103 Web Server : Apache System : Linux dedi-4363141.lrsys.com.br 3.10.0-1160.119.1.el7.tuxcare.els25.x86_64 #1 SMP Wed Oct 1 17:37:27 UTC 2025 x86_64 User : lrsys ( 1015) PHP Version : 5.6.40 Disable Function : exec,passthru,shell_exec,system MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/lrsys/public_html/lrsys_apps/imobles/application/plugins/modulo_fiscal/controllers/ |
Upload File : |
<?php
try {
_auth();
$ui->assign('_application_menu', 'modulo_fiscal');
$ui->assign('_title', $_L['Fiscal Module'] . ' - ' . $config['CompanyName']);
$ui->assign('_st', $_L['List NFC-e']);
$action = $routes['2'];
$user = User::_info();
switch ($action) {
case 'nfe':
$tipo = 'NFe';
break;
case 'nfce':
$tipo = 'NFCe';
break;
case 'nfse':
$tipo = 'NFSe';
break;
}
$id = $routes['3'];
$dadosPedido = ORM::for_table('sys_invoices')->find_one($id);
$dadosItemsPedidos = ORM::for_table('sys_invoiceitems')
->table_alias('s')
->select('s.id', 'item_id')
->select('s.invoiceid', 'item_invoiceid')
->select('s.userid', 'item_userid')
->select('s.type', 'item_type')
->select('s.relid', 'item_relid')
->select('s.description', 'item_description')
->select('s.qty', 'item_qty')
->select('s.amount', 'item_amount')
->select('s.discount', 'item_discount')
->select('s.taxed', 'item_taxed')
->select('s.taxamount', 'item_taxamount')
->select('s.total', 'item_total')
->select('s.duedate', 'item_duedate')
->select('s.paymentmethod', 'item_paymentmethod')
->select('s.notes', 'item_notes')
->select('u.initials', 'metric')
->select('i.*')
->left_outer_join('sys_items', array('i.id', '=', 's.sys_item_id'), 'i')
->left_outer_join('sys_items_unit', array('u.id', '=', 'i.unit_id'), 'u')
->where('invoiceid', $id)->order_by_asc('id')->find_many();
$listaConfigApp = ORM::for_table('app_fiscal_config')->find_many();
foreach ($listaConfigApp as $da) {
$dadosEmpresa[$da['key']] = $da['value'];
}
// Pego a URL de retorno
// TODO: TRATAR O REDIRECIONAMENTO APÓS A EMISSÃO DA NOTA
$url_retorno = U .'invoices/list/';
if(isset($routes['4']))
{
switch ($routes['4'])
{
case 'invoices':
$url_retorno = U .'invoices/list/';
break;
case 'scheduling':
$url_retorno = U .'invoices/list/';
break;
}
}
// Pego o estado do prestador
$stateCompany = ORM::for_table('state')->find_one($dadosEmpresa['company_state_id']);
$cUF = $stateCompany->code_state; //'52'; //codigo numerico do estado
$cityCompany = ORM::for_table('city')->find_one($dadosEmpresa['company_city_id']);
// pego os dados do PEDIDI original
$sysOrder = ORM::for_table('sys_orders')->find_one($dadosPedido->sys_orders_id);
// Pego os dados da Natureza da Operação
$naturaOperation = ORM::for_table('nature_operation')->find_one($sysOrder->nature_operation_id);
$dadosEmpresa['company_crt'] = $naturaOperation->crt;
// Pego os dados do tributo
$arr_tributos = json_decode($naturaOperation->params);
//dados cliente
$dadosCliente = ORM::for_table('crm_accounts')->find_one($dadosPedido->userid);
$dadosCidadeCliente = null;
$dadosEstadoCliente = null;
if ($dadosCliente->billing_address == 'Y') {
$address = ORM::for_table('crm_accounts_address')->where('crm_account_id', $dadosPedido->userid)->where('type_address', 'billing_address')->find_many();
} else {
$address = ORM::for_table('crm_accounts_address')->where('crm_account_id', $dadosPedido->userid)->where('type_address', 'tax_address')->find_many();
}
if (count($address) > 0) {
if($address[0]->state_id > 0)
{
$dadosEstadoCliente = ORM::for_table('state')->where('id', $address[0]->state_id)->find_many()->limit(1);
$dadosEstadoCliente = $dadosEstadoCliente[0];
}
if($address[0]->city_id > 0)
{
$dadosCidadeCliente = ORM::for_table('city')->where('id', $address[0]->city_id)->find_many()->limit(1);
$dadosCidadeCliente = $dadosCidadeCliente[0];
}
}
$msg = '';
if ($dadosCidadeCliente == null) {
$msg.=$_L['No Client City data found'].'<br/>';
}
if ($dadosEstadoCliente == null) {
$msg .= $_L['Not found Client State data'].'<br/>';
}
if ($dadosCliente == null) {
$msg .= $_L['Client data not found'].'<br/>';
}
if ($dadosEmpresa == null) {
$msg .= $_L['Company data not found'].'<br/>';
}
//TODO: verificar se realmente precisamos do método de pagamento
if ($dadosPedido->paymentmethod==0) {
// $msg .= str_replace('{id}',$dadosPedido->id,$_L['The payment method is not recorded on the invoice, <a href="'.U.'invoices/edit/{id}"> click here to report </a>'])."<br/>";
}
// TODO: verificar se precisa do bloco comentado abaixo
// if ($dadosEstadoCliente != null) {
// for ($i = 0; $i < count($dadosItemsPedidos); $i++) {
//
// if ($tipo == 'NFe') {
//
// //VERIFICA SE EXISTE REGRA PARA o ESTADO DO CLIENTE
// $busca = ORM::for_table('sys_items_taxation')
// ->table_alias('t')
// ->select("t.*")
// ->select('c.code_cfop')
// ->where('t.id_sys_items', $dadosItemsPedidos[$i]['id'])
// ->where('t.id_uf_state_destiny', $dadosEstadoCliente['id'])
// ->where('t.operation', 'Sale')
// ->where('t.comparation_condition_state', '=')
// ->left_outer_join('cfop', array('c.id', '=', 't.id_cfop'), 'c')
// ->find_one();
//
// if (!$busca) {
// //VERIFICA SE NÃO EXISTIR, PROCURA A REGRA GERAL PARA VENDA FORA DO ESTADO
// $busca = ORM::for_table('sys_items_taxation')
// ->table_alias('t')
// ->select("t.*")
// ->select('c.code_cfop')
// ->where('t.id_sys_items', $dadosItemsPedidos[$i]['id'])
// ->where('t.id_uf_state_destiny', $stateCompany->id)
// ->where('t.operation', 'Sale')
// ->where('t.comparation_condition_state', '!=')
// ->left_outer_join('cfop', array('c.id', '=', 't.id_cfop'), 'c')
// ->find_one();
// }
// //NFC-E Venda para mesmo estado, compra na loja com retirada na loja
// } else if ($tipo == 'NFCe') {
// $busca = ORM::for_table('sys_items_taxation')
// ->table_alias('t')
// ->select("t.*")
// ->select('c.code_cfop')
// ->where('t.id_sys_items', $dadosItemsPedidos[$i]['id'])
// ->where('t.id_uf_state_destiny', $stateCompany->id)
// ->where('t.operation', 'Sale')
// ->where('t.comparation_condition_state', '=')
// ->left_outer_join('cfop', array('c.id', '=', 't.id_cfop'), 'c')
// ->find_one();
// }
//
//
// if ($busca) {
// $dadosItemsPedidos[$i]['cfop'] = $busca['code_cfop'];
// $dadosItemsPedidos[$i]['cst_pis_cofins'] = $busca['cst_pis_cofins'];
// } else {
// $msg.= str_replace('{id}',$dadosItemsPedidos[$i]['id'], $_L['Item: {id} without taxation registered, <a href="'.U.'ps/taxation/{id}"> click here to report </a>'])."<br/>";
//
//
// }
// }
// }
if ($msg !== '') {
// r2(U . 'invoices/view/' . $id, 'e', $_L['Invoice'].": ". $id . '<br/>' . $msg);
}
/*
* VERIFICO SE É UM NFS-e
*/
if($tipo == 'NFSe')
{
$nota = ORM::for_table('app_fiscal_note')->where('invoice_id', $id)->find_many();
if(count($nota) > 0)
{
r2($url_retorno, 'n','Uma outra NFS para essa mesma fautra já foi emitida. <a href="'.U .'modulo_fiscal/nfse/list/">Clique aqui</a> para acessar as notas emitidas.');
}
// echo 'deu ruim';exit;
// Dados de configuração da NFS
$nNFS = $dadosEmpresa['note_number_nfse'];
$serie = $dadosEmpresa['note_series_nfse'];
// TAG Emitente
$xCNPJ = preg_replace('/\D/', '', $dadosEmpresa['company_cnpj']); //$nfeTools->aConfig['cnpj'];
$xNome = $dadosEmpresa['company_name']; // $nfeTools->aConfig['razaosocial'];
$xFant = $dadosEmpresa['company_fantasy_name']; //$nfeTools->aConfig['nomefantasia'];
$xIM = $dadosEmpresa['company_im']; //$nfeTools->aConfig['im'];
$CNAE = str_pad(preg_replace('/\D/', '', $dadosEmpresa['company_cnae']), 7, "0", STR_PAD_LEFT); // $nfeTools->aConfig['cnae'];
$CRT = $dadosEmpresa['company_crt']; //$nfeTools->aConfig['regime'];
// Dados do Tomador
$idEstrangeiro = '';
$xNome = $dadosCliente->account; //'Chinnon Santos - Tecnologia e Assessoria em Softwares';
$IE = empty($dadosCliente->ie) ? '' : $dadosCliente->ie; //opcional Inscrição Estadual do Destinatário;
$ISUF = ''; //opcional Obrigatório, nas operações que se beneficiam de incentivos fiscais existentes nas áreas sob controle da SUFRAMA.;
$IM = $dadosCliente->im; //opcional Campo opcional, pode ser informado na NF-e conjugada, com itens de produtos sujeitos ao ICMS e itens de serviços sujeitos ao ISSQN//'4128095';
$email = $dadosCliente->email_nfe; //'nfe@chinnonsantos.com';
//Endereço do destinatário
$xLgr = empty($address[0]->address) ? '' : $address[0]->address; //'Av. Rio de Janeiro';
$nro = empty($address[0]->number) ? '' : $address[0]->number; //'s/n';
$xCpl = empty($address[0]->complement) ? '' : $address[0]->complement; //'Qd. 38 Lt. 4,5 e 34';
$xBairro = empty($address[0]->neighborhood) ? '' : $address[0]->neighborhood; //'Jardim Pinheiros I';
$cMun = isset($dadosCidadeCliente->city_ibge)?str_pad(preg_replace('/\D/', '', $dadosCidadeCliente->city_ibge), 7, "0", STR_PAD_LEFT):''; //'5208707';
$xMun = isset($dadosCidadeCliente->city_name)?$dadosCidadeCliente->city_name:''; //'Goiânia';
$UF = isset($dadosEstadoCliente->uf_state)?$dadosEstadoCliente->uf_state:''; //'GO';
$cPais = 1058; //$dadosCliente->cd_country; // '1058';
$xPais = 'Brasil'; //$dadosCliente->country; //'Brasil';
$fone = (isset($dadosCliente->phone) && !empty($dadosCliente->phone))?preg_replace('/\D/', '', $dadosCliente->phone):''; //'6292779404';
$celular = (isset($dadosCliente->cell_phone) && !empty($dadosCliente->cell_phone))?preg_replace('/\D/', '', $dadosCliente->cell_phone):''; //'6292779404';
// Pego um CEP da cidade caso o CEP não esteja preenchido
$CEP_cliente = (isset($address[0]->zip) && !empty($address[0]->zip))?:''; //'74310010';
// var_dump($dadosCidadeCliente);exit;
if(isset($address[0]->zip) && !empty($address[0]->zip))
{
$CEP_cliente = preg_replace('/\D/', '', $address[0]->zip);
}
else
{
if($dadosCidadeCliente->id > 0)
{
$cep_aux = ORM::for_table('crm_accounts_address')->where('city_id', $dadosCidadeCliente->id)->where_raw('zip IS NOT NULL AND zip > 0')->find_one();
if(isset($cep_aux->zip) && $cep_aux->zip > 0)
{
$CEP_cliente = preg_replace('/\D/', '', $cep_aux->zip );
}
else
{
r2($url_retorno, 'e', 'Fatura: ' . $dadosPedido->id . '<br/> Dados Inválidos<br/>CEP do cliente não informado.</b>');
}
}
else
{
r2($url_retorno, 'e', 'Fatura: ' . $dadosPedido->id . '<br/> Dados Inválidos<br/>CEP do cliente não informado.</b>');
}
}
// #######################################
// TODO: PEGAR OS DADOS CHUMBADOS DO BANCO
// #######################################
$UnidadeGestora = $dadosEmpresa['unidadegestora_nfse'];
$ChaveDigital = $dadosEmpresa['note_chave_nfse'];
$PrestatorCpfCnpj = '<Cnpj>'.$xCNPJ.'</Cnpj>';
$InscricaoMunicipal = $xIM;
// var_dump($dadosCliente);exit;
// Pego os dados do Tomador (Cliente)
if ($dadosCliente->kind_of_person != 'E') {
if ($dadosCliente->kind_of_person == 'PJ') {
$CNPJ = preg_replace('/\D/', '', $dadosCliente->cpf_cnpj); //'23401454000170';
$nfse['DadosTomador']['CpfCnpj'] = $CNPJ?'<Cnpj>'.$CNPJ.'</Cnpj>':'';
} else {
$CPF = preg_replace('/\D/', '', $dadosCliente->cpf_cnpj);
$nfse['DadosTomador']['CpfCnpj'] = $CPF?'<Cpf>'.$CPF.'</Cpf>':'';
}
if(!$nfse['DadosTomador']['CpfCnpj'])
{
r2($url_retorno, 'e', 'Fatura: ' . $dadosPedido->id . '<br/> Dados Inválidos<br/>CPF/CNPJ do cliente não informado.</b>');
}
}
else
{
//TODO: tratar para estrangeiros
echo "NÃO HABILITADO PARA ESTRANGEIROS";exit;
}
$nfse['DadosTomador']['RazaoSocial'] = $dadosCliente->account;
$nfse['DadosTomador']['Logradouro'] = $xLgr.', '.$nro;
$nfse['DadosTomador']['Endereco'] = $xLgr;
$nfse['DadosTomador']['Numero'] = $nro;
$nfse['DadosTomador']['Complemento'] = $xCpl;
$nfse['DadosTomador']['Bairro'] = $xBairro;
$nfse['DadosTomador']['Municipio']['CodigoMunicipioIBGE'] = $cMun;
$nfse['DadosTomador']['Municipio']['Descricao'] = $xMun;
$nfse['DadosTomador']['Municipio']['Uf'] = $UF;
$nfse['DadosTomador']['Municipio']['Cep'] = $CEP_cliente;
$nfse['DadosTomador']['Contato']['Telefone'] = $fone;
$nfse['DadosTomador']['Contato']['Email'] = $email?'<Email>'.trim($email).'</Email>':'';
// Se o prestador do serviço é optante do simples
$CRT = $dadosEmpresa['company_crt']; // código do regime tributário
$optante_simples = 1;
if($CRT == 3)
{
$optante_simples = 1;
}
$nfse['OptanteSimplesNacional'] = 0;
// TODO: VERIFICAR OPÇÃO PARA MEI
// É optante do SIMEI? (Somente pode ser verdadeiro para contribuintes que sejam MEI – Microempreendedor individual).
$nfse['OptanteMEISimei'] = 0;
// Se imposto foi retido.
$nfse['ISSQNRetido'] = 0;
// Responsável pelo recolhimento do ISSQN junto à administração pública municipal. -1) Tomador do serviço. -2) Intermediário do serviço. -3) Prestador do serviço.
$nfse['ResponsavelISSQN']['Codigo'] = -3;
$nfse['ResponsavelISSQN']['Descricao'] = 'Prestador do serviço';
// TODO: CRIAR CAMPO NA CONFIGURAÇÃO PARA REGISTRO DA ATIVIDADE ECONOMICA
// Atividade econômica do serviço
$nfse['CodigoAtividadeEconomica'] = '86.3.0-5.02';
/*/* Código da exigibilidade do ISSQN
-1) Exigível.
-2) Não incidência.
-3) Isento.
-4) Exportação.
-5) Imune.
-6) Exigibilidade suspensa por decisão judicial.
-7) Exigibilidade suspensa por processo
administrativo.
-8) Fixo.
-9) Isento por lei específica
*
*/
$nfse['ExigibilidadeISSQN']['Codigo']= -1;
$nfse['ExigibilidadeISSQN']['Descricao']= 'Exigível';
// Município de incidência do ISSQN.
$cMun = $cityCompany->city_ibge; //'5200258';
$xMun = $cityCompany->city_name; //'Águas Lindas de Goiás';
$UF = str_pad($stateCompany->uf_state, 2, "0", STR_PAD_LEFT); //'GO';
$nfse['MunicipioIncidencia']['CodigoMunicipioIBGE'] = $cMun;
$nfse['MunicipioIncidencia']['Descricao'] = $xMun;
$nfse['MunicipioIncidencia']['Uf'] = $UF;
// ListaServico
$DadosServico = '';
$totalServico = 0.00;
foreach ($dadosItemsPedidos as $prod)
{
// var_dump($prod);exit;
// TODO: Calcular o desconto por item
$desconto = 0.00;
// Pego os dados do serviço
$DadosServico = '<DadosServico>
<Discriminacao>'.$prod->item_description.'</Discriminacao>
<CodigoCnae>86.3.0-5.02</CodigoCnae>
<ItemLei116>4.03</ItemLei116>
<Quantidade>'.$prod->item_qty.'</Quantidade>
<ValorServico>'.$prod->item_total.'</ValorServico>
<ValorDesconto>'.$desconto.'</ValorDesconto>
</DadosServico>';
$totalServico += $prod->item_total;
}
// $nfse['ListaServico']['DadosServico']['Discriminacao'] = 'FFF';
// $nfse['ListaServico']['DadosServico']['CodigoCnae'] = 'FFF';
// $nfse['ListaServico']['DadosServico']['ItemLei116'] = 'FF';
// $nfse['ListaServico']['DadosServico']['Quantidade'] = 'FF';
// $nfse['ListaServico']['DadosServico']['ValorServico'] = 'FF';
// $nfse['ListaServico']['DadosServico']['ValorDesconto'] = 'FF';
// ValorServicos
$nfse['ValorServicos'] = number_format($totalServico, 2, '.', '');
// ValorDescontos
$nfse['ValorDescontos'] = '0.00';
// ValorPis
$nfse['ValorPis'] = '0.00';
// ValorCofins
$nfse['ValorCofins'] = '0.00';
// ValorInss
$nfse['ValorInss'] = '0.00';
// ValorIrrf
$nfse['ValorIrrf'] = '0.00';
// ValorCsll
$nfse['ValorCsll'] = '0.00';
// ValorOutrasRetencoes
$nfse['ValorOutrasRetencoes'] = '0.00';
// ValorBaseCalculoISSQN
$nfse['ValorBaseCalculoISSQN'] = number_format($totalServico, 2, '.', '');
// AliquotaISSQN
$nfse['AliquotaISSQN'] = number_format($dadosEmpresa['aliq_issqn'],2,'.','');
// ValorISSQNCalculado
$nfse['ValorISSQNCalculado'] = number_format($totalServico*($nfse['AliquotaISSQN'])/100, 2, '.', '');
// PercAbatimento
$nfse['PercAbatimento'] = '0.00';
// ValorISSQNRecolher
$nfse['ValorISSQNRecolher'] = number_format($totalServico*($nfse['AliquotaISSQN'])/100, 2, '.', '');
// ValorDeducaoConstCivil
$nfse['ValorDeducaoConstCivil'] = '0.00';
// ValorLiquido
$nfse['ValorLiquido'] = number_format($totalServico, 2, '.', '');
// Versão
$nfse['Versao'] = '1.00';
// TODO: DEFINIR O PADRÃO DA NFSE NAS CONFIGURAÇÕES DO MÓDULO FISCAL
$padrao_nfse = 'ABRASF';
switch ($padrao_nfse)
{
case 'AGILI':
/// ######################################################################
// PADRÃO NFSE AGILI
/// ######################################################################
$xml = '<?xml version="1.0" encoding="utf-8" ?>
<GerarNfseEnvio xmlns="http://www.agili.com.br/nfse_v_1.00.xsd">
<UnidadeGestora>'.$UnidadeGestora.'</UnidadeGestora>
<DeclaracaoPrestacaoServico Id="rps000000000000001999">
<IdentificacaoPrestador>
<ChaveDigital>'.$ChaveDigital.'</ChaveDigital>
<CpfCnpj>
'.$PrestatorCpfCnpj.'
</CpfCnpj>
<InscricaoMunicipal>'.$InscricaoMunicipal.'</InscricaoMunicipal>
</IdentificacaoPrestador>
<DadosTomador>
<IdentificacaoTomador>
<CpfCnpj>
'.$nfse['DadosTomador']['CpfCnpj'].'
</CpfCnpj>
</IdentificacaoTomador>
<RazaoSocial>'.$nfse['DadosTomador']['RazaoSocial'].'</RazaoSocial>
<LocalEndereco>1</LocalEndereco>
<Endereco>
<TipoLogradouro>INFORMADO</TipoLogradouro>
<Logradouro>'.$nfse['DadosTomador']['Logradouro'].'</Logradouro>
<Municipio>
<CodigoMunicipioIBGE>'.$nfse['DadosTomador']['Municipio']['CodigoMunicipioIBGE'].'</CodigoMunicipioIBGE>
<Descricao>'.$nfse['DadosTomador']['Municipio']['Descricao'].'</Descricao>
<Uf>'.$nfse['DadosTomador']['Municipio']['Uf'].'</Uf>
</Municipio>
<Pais>
<CodigoPaisBacen>1058</CodigoPaisBacen>
<Descricao>BRASIL</Descricao>
</Pais>
<Cep>'.$nfse['DadosTomador']['Municipio']['Cep'].'</Cep>
</Endereco>
<Contato>
<Telefone>'.$nfse['DadosTomador']['Contato']['Telefone'].'</Telefone>
</Contato>
</DadosTomador>
<OptanteSimplesNacional>'.$nfse['OptanteSimplesNacional'].'</OptanteSimplesNacional>
<OptanteMEISimei>'.$nfse['OptanteMEISimei'].'</OptanteMEISimei>
<ISSQNRetido>'.$nfse['ISSQNRetido'].'</ISSQNRetido>
<ResponsavelISSQN>
<Codigo>'.$nfse['ResponsavelISSQN']['Codigo'].'</Codigo>
<Descricao>'.$nfse['ResponsavelISSQN']['Descricao'].'</Descricao>
</ResponsavelISSQN>
<CodigoAtividadeEconomica>'.$nfse['CodigoAtividadeEconomica'].'</CodigoAtividadeEconomica>
<ExigibilidadeISSQN>
<Codigo>'.$nfse['ExigibilidadeISSQN']['Codigo'].'</Codigo>
<Descricao>'.$nfse['ExigibilidadeISSQN']['Descricao'].'</Descricao>
</ExigibilidadeISSQN>
<MunicipioIncidencia>
<CodigoMunicipioIBGE>'.$nfse['MunicipioIncidencia']['CodigoMunicipioIBGE'].'</CodigoMunicipioIBGE>
<Descricao>'.$nfse['MunicipioIncidencia']['Descricao'].'</Descricao>
<Uf>'.$nfse['MunicipioIncidencia']['Uf'].' </Uf>
</MunicipioIncidencia>
<ValorServicos>'.$nfse['ValorServicos'].'</ValorServicos>
<ValorDescontos>'.$nfse['ValorDescontos'].'</ValorDescontos>
<ValorPis>'.$nfse['ValorPis'].'</ValorPis>
<ValorCofins>'.$nfse['ValorCofins'].'</ValorCofins>
<ValorInss>'.$nfse['ValorInss'].'</ValorInss>
<ValorIrrf>'.$nfse['ValorIrrf'].'</ValorIrrf>
<ValorCsll>'.$nfse['ValorCsll'].'</ValorCsll>
<ValorOutrasRetencoes>'.$nfse['ValorOutrasRetencoes'].'</ValorOutrasRetencoes>
<ValorBaseCalculoISSQN>'.$nfse['ValorBaseCalculoISSQN'].'</ValorBaseCalculoISSQN>
<AliquotaISSQN>'.$nfse['AliquotaISSQN'].'</AliquotaISSQN>
<ValorISSQNCalculado>'.$nfse['ValorISSQNCalculado'].'</ValorISSQNCalculado>
<PercAbatimento>'.$nfse['PercAbatimento'].'</PercAbatimento>
<ValorISSQNRecolher>'.$nfse['ValorISSQNRecolher'].'</ValorISSQNRecolher>
<ValorDeducaoConstCivil>'.$nfse['ValorDeducaoConstCivil'].'</ValorDeducaoConstCivil>
<ValorLiquido>'.$nfse['ValorLiquido'].'</ValorLiquido>
<ListaServico>
'.$DadosServico.'
</ListaServico>
<Versao>1.00</Versao>
</DeclaracaoPrestacaoServico>
</GerarNfseEnvio>';
//setting the curl parameters.
$ch = curl_init('http://fazenda.ariquemes.ro.gov.br/API/GerarNfse');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
if (curl_errno($ch))
{
// moving to display page to display curl errors
echo curl_errno($ch) ;
echo curl_error($ch);
return false;
}
else
{
//getting response from server
$response = curl_exec($ch);
curl_close($ch);
// $response = file_get_contents(getcwd() . "//application//plugins//modulo_fiscal//AGILI/retornoNFS.xml");
$xml_retorno = new SimpleXMLElement($response);
if (!isset($xml_retorno->Nfse->Numero)) {
r2($url_retorno, 'e', 'Fatura: ' . $dadosPedido->id . '<br/> Dados Inválidos<br/>' . $xml_retorno->ListaMensagemRetorno->MensagemRetorno->Mensagem.'<br><br><b>Envie o print dessa tela para o Webmaster.</b>');
echo "Dados Inválidos <br/> " . $xml_retorno->ListaMensagemRetorno->MensagemRetorno->Mensagem;
echo '<br><br><pre>';
echo '</pre><br><br><pre>';
echo "</pre><br>";
} elseif($xml_retorno->Nfse->SituacaoNfse->Codigo != -8) {
r2($url_retorno, 'e', 'Fatura: ' . $dadosPedido->id . '<br/> Dados Inválidos<br/>' . $xml_retorno->ListaMensagemRetorno->MensagemRetorno->Mensagem.'<br><br><b>Envie o print dessa tela para o Webmaster.</b>');
echo "Ocorreu um erro na emissão do NFS.<br/>Código da situação da NFS: " . $xml_retorno->Nfse->SituacaoNfse->Codigo;
echo '<br><br><pre>';
echo '</pre><br><br><pre>';
echo "</pre><br>";
} else {
// $aResposta = array();
$indSinc = '0'; //0=asíncrono, 1=síncrono
$pasta = date('Ym');
// TODO: verificar se precisa mesmo salvar o XML
$pathNFefile = getcwd() . "//application//plugins//modulo_fiscal//empresa//NFS-e//".$dadosEmpresa['note_environment']."//". "//enviadas//aprovadas//".$key."-nfse.xml";
// Salvo o XML
$xml_retorno->saveXML($pathNFefile);
//GRAVAR EMISSÃO DA NFE
$nota = ORM::for_table('app_fiscal_note')->create();
$nota->number_note = $xml_retorno->Nfse->Numero;
$nota->series = $dadosEmpresa['note_series_nfse'];
$nota->type = 'NFSe';
$nota->issuance_date = date('Y-m-d H:i:s',strtotime($xml_retorno->Nfse->DataEmissao));
$nota->amount = $dadosPedido->total;
$nota->account = $dadosCliente->account;
$nota->id_account = $dadosCliente->id;
$nota->key = $xml_retorno->Nfse->CodigoAutenticidade;
$nota->status = 'Emitido';
// $nota->receipt_number = $xml_retorno->Nfse->CodigoAutenticidade;
// $nota->protocol_number = $aRespostarecibo["aProt"][0]["nProt"];
$nota->pasta = $pasta;
$nota->code_status = $xml_retorno->Nfse->SituacaoNfse->Codigo;
$nota->invoice_id = $dadosPedido->id;
$nota->environment = $dadosEmpresa['note_environment'];
$nota->save();
//atualiza o numero da nota em ap_fiscal_config
$d = ORM::for_table('app_fiscal_config')->where('key', 'note_number_nfse')->find_one();
$d->value = intval($xml_retorno->Nfse->Numero) + 1;
$d->save();
_log('Nota Emitida' . " " . 'Nota Autorizada' . ' [ID: ' . $nota->id, $user['fullname'], $user['id']);
// $abre = $danfe->printDANFE("{$id}-danfe.pdf", 'D'); //I Abre o PDF no Navegador D- Download
r2($url_retorno, 's', 'Nota Emitida' . " Fatura: $dadosPedido->id | Nº Nota : " . $nota->number_note . " | Cod. Status: " . $nota->code_status . " | Status: " . $nota->status . " ");
}
}
break;
case 'ABRASF':
/// ######################################################################
// PADRÃO NFSE ABRASF
/// ######################################################################
// ListaServico
$DadosServico = '';
$totalServico = 0.00;
$desc_servico = null;
// var_dump($dadosEmpresa);exit;
// var_dump($dadosItemsPedidos[0]);exit;
// var_dump($dadosPedido['date']);exit;
foreach ($dadosItemsPedidos as $prod)
{
$desconto = $prod->item_discount?' | Desconto (un): '.$prod->item_discount:'';
$desc_servico .= mb_strtoupper($prod->item_description.' | Valor (un): R$ '.$prod->item_amount. $desconto . ' | qtd: '.$prod->item_qty. ' | total: R$ '.$prod->item_total);
$desc_servico .= '\s\n';
$totalServico += $prod->item_total;
}
$desc_servico = substr($desc_servico, 0, -4);
// Coloco o nome do Paciente na descrição do serviço
// $desc_servico = mb_strtoupper($desc_servico);
$desc_servico .= '\s\n\s\nATENDIMENTO REALIZADO PARA:\s\n'.mb_strtoupper($dadosCliente->account);
$desc_servico = substr($desc_servico, 0, 2000);
// ISS
$desconto = 0.00;
$iss_retido = number_format(($totalServico * $dadosEmpresa['aliq_iss'] / 100), 2,'.','');
//TODO: CEDDI
//Tipo serviço chumbado
$ItemListaServico = '04.03';
// Dados do Tomador
$nfse['DadosTomador']['RazaoSocial'] = mb_strtoupper($dadosCliente->account);
$nfse['DadosTomador']['Logradouro'] = $xLgr.', '.$nro;
$nfse['DadosTomador']['Endereco'] = $xLgr?'<Endereco>'.$xLgr.'</Endereco>':'';
$nfse['DadosTomador']['Numero'] = $nro?'<Numero>'.$nro.'</Numero>':'';
$nfse['DadosTomador']['Complemento'] = $xCpl?'<Complemento>'.$xCpl.'</Complemento>':'';
$nfse['DadosTomador']['Bairro'] = $xBairro?'<Bairro>'.$xBairro.'</Bairro>':'';
$nfse['DadosTomador']['Municipio']['CodigoMunicipioIBGE'] = $cMun?'<CodigoMunicipio>'.$cMun.'</CodigoMunicipio>':'';
// $nfse['DadosTomador']['Municipio']['Descricao'] = $xMun;
$nfse['DadosTomador']['Municipio']['Uf'] = $UF?'<Uf>'.$UF.'</Uf>':'';
$nfse['DadosTomador']['Municipio']['Cep'] = $CEP_cliente?'<Cep>'.$CEP_cliente.'</Cep>':'';
$nfse['DadosTomador']['Contato']['Telefone'] = $fone?'<Telefone>'.$fone.'</Telefone>':($celular?'<Telefone>'.$celular.'</Telefone>':'');
$nfse['DadosTomador']['Contato']['Email'] = $email?'<Email>'.trim($email).'</Email>':'';
// Monto XML
$xml = '<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ws="http://ws.issweb.fiorilli.com.br/"
xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soapenv:Header></soapenv:Header>
<soapenv:Body>
<ws:gerarNfse>
<GerarNfseEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">
<Rps xmlns="http://www.abrasf.org.br/nfse.xsd">
<InfDeclaracaoPrestacaoServico Id="'.$dadosPedido['id'].'">
<Rps>
<IdentificacaoRps>
<Numero>'.$dadosPedido['id'].'</Numero>
<Serie>'.$dadosEmpresa['note_series_nfse'].'</Serie>
<Tipo>1</Tipo>
</IdentificacaoRps>
<DataEmissao>'.date('Y-m-d').'</DataEmissao>
<Status>1</Status>
</Rps>
<Competencia>'.date('Y-m-d').'</Competencia>
<Servico>
<Valores>
<ValorServicos>'.$totalServico.'</ValorServicos>
<Aliquota>'.$dadosEmpresa['aliq_iss'].'</Aliquota>
</Valores>
<IssRetido>2</IssRetido>
<ResponsavelRetencao>1</ResponsavelRetencao>
<ItemListaServico>'.$ItemListaServico.'</ItemListaServico>
<Discriminacao>'.$desc_servico.'</Discriminacao>
<CodigoMunicipio>'.$cMun.'</CodigoMunicipio>
<CodigoPais>1058</CodigoPais>
<ExigibilidadeISS>1</ExigibilidadeISS>
<MunicipioIncidencia>'.$cMun.'</MunicipioIncidencia>
</Servico>
<Prestador>
<CpfCnpj>
'.$PrestatorCpfCnpj.'
</CpfCnpj>
<InscricaoMunicipal>'.$InscricaoMunicipal.'</InscricaoMunicipal>
</Prestador>
<Tomador>
<IdentificacaoTomador>
<CpfCnpj>
'.$nfse['DadosTomador']['CpfCnpj'].'
</CpfCnpj>
</IdentificacaoTomador>
<RazaoSocial>'.$nfse['DadosTomador']['RazaoSocial'].'</RazaoSocial>
<Endereco>
'.$nfse['DadosTomador']['Endereco'].'
'.$nfse['DadosTomador']['Numero'].'
'.$nfse['DadosTomador']['Complemento'].'
'.$nfse['DadosTomador']['Bairro'].'
'.$nfse['DadosTomador']['Municipio']['CodigoMunicipioIBGE'].'
'.$nfse['DadosTomador']['Municipio']['Uf'].'
'.$nfse['DadosTomador']['Municipio']['Cep'].'
</Endereco>
<Contato>
'.$nfse['DadosTomador']['Contato']['Telefone'].'
'.$nfse['DadosTomador']['Contato']['Email'].'
</Contato>
</Tomador>
<OptanteSimplesNacional>2</OptanteSimplesNacional>
<IncentivoFiscal>2</IncentivoFiscal>
</InfDeclaracaoPrestacaoServico>
</Rps>
</GerarNfseEnvio>
<username>'.$xCNPJ.'</username>
<password>'.$ChaveDigital.'</password>
</ws:gerarNfse>
</soapenv:Body>
</soapenv:Envelope>';
// RETIRO OS ACENTOS
// TODO: VERIFICAR COMO ENVIAR COM ACENTOS, LIGAR NA FIORILLI
$xml = trim($xml);
$aFind = array('&','á','à','ã','â','é','ê','í','ó','ô','õ','ú','ü',
'ç','Á','À','Ã','Â','É','Ê','Í','Ó','Ô','Õ','Ú','Ü','Ç');
$aSubs = array('e','a','a','a','a','e','e','i','o','o','o','u','u',
'c','A','A','A','A','E','E','I','O','O','O','U','U','C');
$xml = str_replace($aFind, $aSubs, $xml);
// header("Content-Type: application/xml") ;
// PEGO AS FERRAMENTAS DO NFEPHP PARA ASSINAR O XML
// ABRASF
require_once 'application/plugins/modulo_fiscal/nfephp/bootstrap.php';
require_once 'config_nota.php';
$nfeTools = new NFePHP\NFe\ToolsNFe(geraConfig($dadosEmpresa, $tipo));
$xml_assinada = $nfeTools->assinaDoc($xml, 'NFSe', 'InfDeclaracaoPrestacaoServico');
// echo $xml_assinada;exit;
// TODO: CEDDI | CURL NÃO ESTÁ HABILITADO NO SERVIDOR
// UTLIZAMOS UM MÉTODO ALTERNATIVO PARA HTTP REQUEST
$opts = array (
'http' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
. "Content-Length: " . strlen($xml_assinada) . "\r\n",
'content' => $xml_assinada
)
);
$fn = 'http://nfse.ariquemes.ro.gov.br:5660/IssWeb-ejb/IssWebWS/IssWebWS?wsdl';
$context = stream_context_create($opts);
$result = file_get_contents($fn,false,$context);
$xml_retorno_ws = utf8_encode($result);
$xml_retorno = preg_replace("/(<\/?)(\w+):([^>]*>)/", '$1$2$3', $xml_retorno_ws);
$xml_retorno = simplexml_load_string($xml_retorno);
if (!isset($xml_retorno->soapBody->ns3gerarNfseResponse->ns2GerarNfseResposta))
{
// moving to display page to display curl errors
r2($url_retorno, 'e', 'Fatura: ' . $dadosPedido->id . '<br/> Dados Inválidos<br/>' .
'Mensagem: '.$xml_retorno.'<br>'
. '<br><b>Envie o print dessa tela para o Webmaster.</b>');
}
else
{
if(isset($xml_retorno->soapBody->ns3gerarNfseResponse->ns2GerarNfseResposta->ns2ListaMensagemRetorno))
{
$correcao = $xml_retorno->soapBody->ns3gerarNfseResponse->ns2GerarNfseResposta->ns2ListaMensagemRetorno->ns2MensagemRetorno->ns2Correcao->__toString();
$codigo = $xml_retorno->soapBody->ns3gerarNfseResponse->ns2GerarNfseResposta->ns2ListaMensagemRetorno->ns2MensagemRetorno->ns2Codigo->__toString();
$mensagem = $xml_retorno->soapBody->ns3gerarNfseResponse->ns2GerarNfseResposta->ns2ListaMensagemRetorno->ns2MensagemRetorno->ns2Mensagem->__toString();
r2($url_retorno, 'e', 'Fatura: ' . $dadosPedido->id . '<br/> Dados Inválidos<br/>' .
'Código: '.$codigo.'<br>'.
'Mensagem: '.$mensagem.'<br>'.
'Correção: '.$correcao.'<br><br><b>Envie o print dessa tela para o Webmaster.</b>');
}
else
{
$xml_retorno = $xml_retorno->soapBody->ns3gerarNfseResponse->ns2GerarNfseResposta->ns2ListaNfse->ns2CompNfse->ns2Nfse->ns2InfNfse;
$attrs = $xml_retorno->attributes();
$key = $attrs->__toString();
// $aResposta = array();
$indSinc = '0'; //0=asíncrono, 1=síncrono
$pasta = date('Ym');
// TODO: verificar se precisa mesmo salvar o XML
$pathNFefile = getcwd() . "//application//plugins//modulo_fiscal//empresa//NFS-e//".$dadosEmpresa['note_environment']."//". "//enviadas//aprovadas//".$key."-nfse.xml";
$xml_retorno_ws = new SimpleXMLElement($xml_retorno_ws);
// Salvo o XML
$xml_retorno_ws->saveXML($pathNFefile);
//GRAVAR EMISSÃO DA NFE
$nota = ORM::for_table('app_fiscal_note')->create();
$nota->number_note = $xml_retorno->ns2Numero->__toString();
$nota->series = $dadosEmpresa['note_series_nfse'];
$nota->type = 'NFSe';
$nota->issuance_date = date('Y-m-d H:i:s',strtotime($xml_retorno->ns2DataEmissao->__toString()));
$nota->amount = $dadosPedido->total;
$nota->account = $dadosCliente->account;
$nota->id_account = $dadosCliente->id;
$nota->key = $key;
$nota->status = 'Emitido';
// $nota->receipt_number = $xml_retorno->Nfse->CodigoAutenticidade;
// $nota->protocol_number = $aRespostarecibo["aProt"][0]["nProt"];
$nota->pasta = $pasta;
$nota->code_status = 1;
$nota->invoice_id = $dadosPedido->id;
$nota->environment = $dadosEmpresa['note_environment'];
$nota->save();
//atualiza o numero da nota em ap_fiscal_config
$d = ORM::for_table('app_fiscal_config')->where('key', 'note_number_nfse')->find_one();
$d->value = intval($xml_retorno->ns2Numero->__toString()) + 1;
$d->save();
_log('Nota Emitida' . " " . 'Nota Autorizada' . ' [ID: ' . $nota->id, $user['fullname'], $user['id']);
// $abre = $danfe->printDANFE("{$id}-danfe.pdf", 'D'); //I Abre o PDF no Navegador D- Download
r2($url_retorno, 's', 'Nota Emitida' . " Fatura: $dadosPedido->id | Nº Nota : " . $nota->number_note . " | Cod. Status: " . $nota->code_status . " | Status: " . $nota->status . " ");
}
}
break;
}
/// ######################################################################
}
else
{
// error_reporting(E_ALL);
// ini_set('display_errors', 'On');
require_once 'application/plugins/modulo_fiscal/nfephp/bootstrap.php';
require_once 'config_nota.php';
//
//use NFePHP\NFe\MakeNFe;
//use NFePHP\NFe\ToolsNFe;
//use NFePHP\Common\Files\FilesFolders;
//use NFePHP\Extras\Danfe;
//use NFePHP\Extras\Danfce;
$nfe = new NFePHP\NFe\MakeNFe();
//$nfeTools = new ToolsNFe('../../config/config.json');
$nfeTools = new NFePHP\NFe\ToolsNFe(geraConfig($dadosEmpresa, $tipo));
//CARREGA O AMBIENTE
$tpAmb = $nfeTools->aConfig['tpAmb']; //1=Produção; 2=Homologação vem do config.php
//Dados da NFe - infNFe
$cNF = str_pad(rand(0, 99999999), 8, "0", STR_PAD_LEFT); //Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e para evitar acessos indevidos da NF-e. (v2.0)
if ($tipo == 'NFe') {
//NF-e
$nNF = $dadosEmpresa['note_number_nfe'];
$serie = $dadosEmpresa['note_series_nfe'];
$mod = 55; //modelo da NFe 55 ou 65 essa última NFCe
$dhSaiEnt = date("Y-m-d\TH:i:sP"); //Não informar este campo para a NFC-e.
if ($dadosEstadoCliente->id == $stateCompany->id) {
$idDest = '1'; //1=Operação interna; 2=Operação interestadual; 3=Operação com exterior.
$natOp = 'VENDA DENTRO DO ESTADO'; //natureza da operação
} else {
$idDest = '2'; //1=Operação interna; 2=Operação interestadual; 3=Operação com exterior.
$natOp = 'VENDA INTERESTADUAL'; //natureza da operação
}
$tpImp = '1'; //0=Sem geração de DANFE; 1=DANFE normal, Retrato; 2=DANFE normal, Paisagem;
//3=DANFE Simplificado; 4=DANFE NFC-e; 5=DANFE NFC-e em mensagem eletrônica
//(o envio de mensagem eletrônica pode ser feita de forma simultânea com a impressão do DANFE;
//usar o tpImp=5 quando esta for a única forma de disponibilização do DANFE).
$indPres = '9'; //0=Não se aplica (por exemplo, Nota Fiscal complementar ou de ajuste);
//1=Operação presencial;
//2=Operação não presencial, pela Internet;
//3=Operação não presencial, Teleatendimento;
//4=NFC-e em operação com entrega a domicílio;
//9=Operação não presencial, outros.
} elseif ($tipo == 'NFCe') {
//NFC-e
$nNF = $dadosEmpresa['note_number_nfce'];
$serie = $dadosEmpresa['note_series_nfce'];
$mod = 65; //modelo da NFe 55 ou 65 essa última NFCe
$dhSaiEnt = ''; //Não informar este campo para a NFC-e.
$natOp = 'Venda ao consumidor';
$idDest = '1';
$tpImp = '4'; //0=Sem geração de DANFE; 1=DANFE normal, Retrato; 2=DANFE normal, Paisagem;
//3=DANFE Simplificado; 4=DANFE NFC-e; 5=DANFE NFC-e em mensagem eletrônica
//(o envio de mensagem eletrônica pode ser feita de forma simultânea com a impressão do DANFE;
//usar o tpImp=5 quando esta for a única forma de disponibilização do DANFE).
$indPres = '1'; //0=Não se aplica (por exemplo, Nota Fiscal complementar ou de ajuste);
//1=Operação presencial;
//2=Operação não presencial, pela Internet;
//3=Operação não presencial, Teleatendimento;
//4=NFC-e em operação com entrega a domicílio;
//9=Operação não presencial, outros.
}
//TRATAR FORMA DE PAGAMENTO
$indPag = $dadosPedido->paymentcondition -1; //0=Pagamento à vista; 1=Pagamento a prazo; 2=Outros
$dhEmi = date("Y-m-d\TH:i:sP"); //Formato: “AAAA-MM-DDThh:mm:ssTZD” (UTC - Universal Coordinated Time).
$tpNF = '1'; ///0=Entrada; 1=Saída
// Município do Remetente
$cMunFG = $cityCompany->city_ibge; //'5200258';
// Tipo de NF
$tpEmis = '1'; //1=Emissão normal (não em contingência);
//2=Contingência FS-IA, com impressão do DANFE em formulário de segurança;
//3=Contingência SCAN (Sistema de Contingência do Ambiente Nacional);
//4=Contingência DPEC (Declaração Prévia da Emissão em Contingência);
//5=Contingência FS-DA, com impressão do DANFE em formulário de segurança;
//6=Contingência SVC-AN (SEFAZ Virtual de Contingência do AN);
//7=Contingência SVC-RS (SEFAZ Virtual de Contingência do RS);
//9=Contingência off-line da NFC-e (as demais opções de contingência são válidas também para a NFC-e);
//Nota: Para a NFC-e somente estão disponíveis e são válidas as opções de contingência 5 e 9.
// Finalidade
//1=NF-e normal; 2=NF-e complementar; 3=NF-e de ajuste; 4=Devolução/Retorno.
if($arr_tributos->CONFIG->devolucao == 'N')
{
$finNFe = '1';
}
else
{
$finNFe = '4';
}
// Consumidor Final
//0=Normal; 1=Consumidor final;
if($arr_tributos->CONFIG->consumidor == 'N')
{
$indFinal = '0';
}
else
{
$indFinal = '1';
}
$procEmi = '0'; //0=Emissão de NF-e com aplicativo do contribuinte;
//1=Emissão de NF-e avulsa pelo Fisco;
//2=Emissão de NF-e avulsa, pelo contribuinte com seu certificado digital, através do site do Fisco;
//3=Emissão NF-e pelo contribuinte com aplicativo fornecido pelo Fisco.
$verProc = '4.0.43'; //versão do aplicativo emissor
$dhCont = ''; //entrada em contingência AAAA-MM-DDThh:mm:ssTZD
$xJust = ''; //Justificativa da entrada em contingência
//Numero e versão da NFe (infNFe)
$ano = date('y', strtotime($dhEmi));
$mes = date('m', strtotime($dhEmi));
$cnpj = preg_replace('/\D/', '', $dadosEmpresa['company_cnpj']);
$chave = $nfe->montaChave($cUF, $ano, $mes, $cnpj, $mod, $serie, $nNF, $tpEmis, $cNF);
$versao = '3.10';
//Tag Inf NFE
$resp = $nfe->taginfNFe($chave, $versao);
//tag IDE
$cDV = substr($chave, -1); //Digito Verificador da Chave de Acesso da NF-e, o DV é calculado com a aplicação do algoritmo módulo 11 (base 2,9) da Chave de Acesso.
$resp = $nfe->tagide($cUF, $cNF, $natOp, $indPag, $mod, $serie, $nNF, $dhEmi, $dhSaiEnt, $tpNF, $idDest, $cMunFG, $tpImp, $tpEmis, $cDV, $tpAmb, $finNFe, $indFinal, $indPres, $procEmi, $verProc, $dhCont, $xJust);
// TAG Emitente
$CNPJ = preg_replace('/\D/', '', $dadosEmpresa['company_cnpj']); //$nfeTools->aConfig['cnpj'];
$CPF = ''; // Utilizado para CPF na nota
$xNome = $dadosEmpresa['company_name']; // $nfeTools->aConfig['razaosocial'];
$xFant = $dadosEmpresa['company_fantasy_name']; //$nfeTools->aConfig['nomefantasia'];
$IE = $dadosEmpresa['company_ie']; //$nfeTools->aConfig['ie'];
if ($tipo == 'NFe') {
$IEST = $dadosEmpresa['company_iest']; //$dadosEmpresa['company_iest']; //$nfeTools->aConfig['iest'];
} else {
$IEST = '';
}
$IM = $dadosEmpresa['company_im']; //$nfeTools->aConfig['im'];
$CNAE = str_pad(preg_replace('/\D/', '', $dadosEmpresa['company_cnae']), 7, "0", STR_PAD_LEFT); // $nfeTools->aConfig['cnae'];
$CRT = $dadosEmpresa['company_crt']; //$nfeTools->aConfig['regime'];
$resp = $nfe->tagemit($CNPJ, $CPF, $xNome, $xFant, $IE, $IEST, $IM, $CNAE, $CRT);
//Tag endereço do emitente
$xLgr = empty($dadosEmpresa['company_address']) ? 's/ endereco' : $dadosEmpresa['company_address']; //'Av. Rio de Janeiro';
$nro = empty($dadosEmpresa['company_number']) ? 's/n' : $dadosEmpresa['company_number']; //'s/n';
$xCpl = empty($dadosEmpresa['company_complement']) ? 's/c' : $dadosEmpresa['company_complement']; //'Qd. 38 Lt. 4,5 e 34';
$xBairro = empty($dadosEmpresa['company_neighborhood']) ? 's/ bairro' : $dadosEmpresa['company_neighborhood']; //'Jardim Pinheiros I';
$cMun = $cityCompany->city_ibge; //'5200258';
$xMun = $cityCompany->city_name; //'Águas Lindas de Goiás';
$UF = str_pad($stateCompany->uf_state, 2, "0", STR_PAD_LEFT); //'GO';
$CEP = str_pad(preg_replace('/\D/', '', $dadosEmpresa['company_zip']), 8, "0", STR_PAD_LEFT); //'72910000';
$cPais = $dadosEmpresa['company_code_country']; //'1058';
$xPais = $dadosEmpresa['company_country_name']; //'Brasil';
$fone = preg_replace('/\D/', '', $dadosEmpresa['company_phone']); //'6239324097';
$resp = $nfe->tagenderEmit($xLgr, $nro, $xCpl, $xBairro, $cMun, $xMun, $UF, $CEP, $cPais, $xPais, $fone);
//destinatário
$CNPJ = null;
$CPF = null;
if ($tipo == 'NFe') {
if ($dadosCliente->kind_of_person != 'E') {
if ($dadosCliente->kind_of_person == 'PJ') {
$CNPJ = str_pad(preg_replace('/\D/', '', $dadosCliente->cpf_cnpj), 14, "0", STR_PAD_LEFT); //'23401454000170';
$indIEDest = $dadosCliente->taxpayer; //1=Contribuinte ICMS (informar a IE do destinatário); 2=Contribuinte isento de Inscrição no cadastro de Contribuintes 9=Não Contribuinte, que pode ou não possuir Inscrição Estadual no Cadastro de Contribuintes do ICMS.
} else {
$CPF = str_pad(preg_replace('/\D/', '', $dadosCliente->cpf_cnpj), 11, "0", STR_PAD_LEFT);
$indIEDest = 9;
}
}
$idEstrangeiro = '';
$xNome = $dadosCliente->account; //'Chinnon Santos - Tecnologia e Assessoria em Softwares';
$IE = empty($dadosCliente->ie) ? '' : $dadosCliente->ie; //opcional Inscrição Estadual do Destinatário;
$ISUF = ''; //opcional Obrigatório, nas operações que se beneficiam de incentivos fiscais existentes nas áreas sob controle da SUFRAMA.;
$IM = $dadosCliente->im; //opcional Campo opcional, pode ser informado na NF-e conjugada, com itens de produtos sujeitos ao ICMS e itens de serviços sujeitos ao ISSQN//'4128095';
$email = $dadosCliente->email_nfe; //'nfe@chinnonsantos.com';
$resp = $nfe->tagdest($CNPJ, $CPF, $idEstrangeiro, $xNome, $indIEDest, $IE, $ISUF, $IM, $email);
//Endereço do destinatário
$xLgr = empty($address[0]->address) ? 's/ endereco' : $address[0]->address; //'Av. Rio de Janeiro';
$nro = empty($address[0]->number) ? 's/n' : $address[0]->number; //'s/n';
$xCpl = empty($address[0]->complement) ? 's/c' : $address[0]->complement; //'Qd. 38 Lt. 4,5 e 34';
$xBairro = empty($address[0]->neighborhood) ? 's/ bairro' : $address[0]->neighborhood; //'Jardim Pinheiros I';
$cMun = str_pad(preg_replace('/\D/', '', $dadosCidadeCliente->city_ibge), 7, "0", STR_PAD_LEFT); //'5208707';
$xMun = $dadosCidadeCliente->city_name; //'Goiânia';
$UF = $dadosEstadoCliente->uf_state; //'GO';
$CEP = str_pad(preg_replace('/\D/', '', $address[0]->zip), 8, "0", STR_PAD_LEFT); //'74310010';
$cPais = 1058; //$dadosCliente->cd_country; // '1058';
$xPais = 'Brasil'; //$dadosCliente->country; //'Brasil';
$fone = preg_replace('/\D/', '', $dadosCliente->phone); //'6292779404';
$resp = $nfe->tagenderDest($xLgr, $nro, $xCpl, $xBairro, $cMun, $xMun, $UF, $CEP, $cPais, $xPais, $fone);
} else {
if (count(preg_replace('/\D/', '', $dadosCliente->cpf_cnpj)) <= 11 && !empty($dadosCliente->cpf_cnpj)) {
$resp = $nfe->tagdest('', str_pad(preg_replace('/\D/', '', $dadosCliente->cpf_cnpj), 11, "0", STR_PAD_LEFT), '', '', '', '', '', '', '');
}
}
//Identificação do local de retirada (se diferente do emitente)
//$CNPJ = '12345678901234';
//$CPF = '';
//$xLgr = 'Rua Vanish';
//$nro = '000';
//$xCpl = 'Ghost';
//$xBairro = 'Assombrado';
//$cMun = '3509502';
//$xMun = 'Campinas';
//$UF = 'SP';
//$resp = $nfe->tagretirada($CNPJ, $CPF, $xLgr, $nro, $xCpl, $xBairro, $cMun, $xMun, $UF);
//Identificação do local de Entrega (se diferente do destinatário)
//$CNPJ = '12345678901234';
//$CPF = '';
//$xLgr = 'Viela Mixuruca';
//$nro = '2';
//$xCpl = 'Quabrada do malandro';
//$xBairro = 'Favela Mau Olhado';
//$cMun = '3509502';
//$xMun = 'Campinas';
//$UF = 'SP';
//$resp = $nfe->tagentrega($CNPJ, $CPF, $xLgr, $nro, $xCpl, $xBairro, $cMun, $xMun, $UF);
$somaCOFINS = 0;
$somaPIS = 0;
$somaICMS = 0;
$somaBCST = 0;
$somaISSQN = 0;
$somaProduto= 0;
$i = 1;
$valorDesconto = $dadosPedido->discount;
$pesoBruto = 0;
$pesoLiquido = 0;
$quantidadeTotal = 0;
//necessário para atribuir o valor do frete a um produto, para emitir a nota
$valorFreteproduto=(($dadosPedido->freight_by=='Sender' || $dadosPedido->freight_by=='Addressee' || $dadosPedido->freight_by=='The 3rd') && $dadosPedido->freight>0?number_format($dadosPedido->freight, 2, '.', ''):'');
// Valor dos impostos para cada Item do pedido
foreach ($dadosItemsPedidos as $prod)
{
// pego o peso do pedido e as quantidades
$pesoBruto += $prod->gross_weight;
$pesoLiquido += $prod->net_weight;
$quantidadeTotal += $prod->item_qty;
//calcula os descontos e aplica para cada ítem inicial
if ($valorDesconto > $prod->item_amount) {
$decontoProduto = $prod->item_amount;
$valorDesconto-=$prod->item_amount;
} else {
$decontoProduto = $valorDesconto;
$valorDesconto = 0;
if ($decontoProduto == 0) {
$decontoProduto = '';
}
}
$prod->nItem = $i++;
$nItem = $prod->nItem; //$prod['nItem'];
$cProd = $prod->id; //$prod['cProd'];
$cEAN = ''; // $prod->codigo_barras;//$prod['cEAN'];
$xProd = ($tpAmb == 1) ? $prod->description : "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"; //$prod['xProd']; VERIFICA AMBIENTE PARA NOME DO PRODUTO
$NCM = str_pad($prod->mercosur_nomenclature, 8, "0", STR_PAD_LEFT); //$prod['NCM'];
$uCom = $prod->metric; //$prod['uCom'];
$qCom = $prod->item_qty; //$prod['qCom'];Informar a quantidade de comercialização do produto (v2.0).
$vUnCom = $prod->item_amount; // $prod['vUnCom']; Valor Unitário de Comercialização
$vProd = $prod->item_total; //$prod['vProd']; Valor total dos produtos (vem do pedido)
$cEANTrib = ''; // $prod->codigo_barras;//$prod['cEANTrib'];
$uTrib = $prod->metric; //$prod['uTrib']; ];
$qTrib = $prod->item_qty; //$prod['qTrib' mesma informação segundo para venda de fardos que muda
$vUnTrib = $prod->item_amount; //$prod['vUnTrib']; mesma informação venda de fardos que muda
//
//// TRIBUTAÇÃO
//
//Atribui valor para os demais itens da nota como ''.
//TODO: Verificar se isto está certo.
$vFrete = $valorFreteproduto; // $prod['vFrete'];
$valorFreteproduto='';
$vSeg = ''; // $prod['vSeg'];
$vDesc = $decontoProduto; // $prod['vDesc'];
$vOutro = ''; // $prod['vOutro'];
// TODO: verificar se o indTot será sempre 1 (indica se o valor do produto deve entrar no valor total da NF)
// TODO: colocar o campo EXTIPI no cadastro do Produto
if ($prod->type == 'Product') {
$indTot = 1; // $prod['indTot'];
$EXTIPI = ''; //$prod['EXTIPI']; //Não Obrigatório Preencher de acordo com o código EX da TIPI. Em caso de serviço, não incluir a TAG.
} else {
$indTot = 0; //0;
$EXTIPI = ''; //$prod['EXTIPI']; //Não Obrigatório Preencher de acordo com o código EX da TIPI. Em caso de serviço, não incluir a TAG.
}
if ($tipo == 'NFCe') {
$indTot = 1; //NFC-e o valor é 1
}
//inicialmente serviço valor 0 e produto valor 1
//Quanto ao indTot, serve somente para indicar se o valor do item compõe o valor total da NFe. Na maioria dos casos compõe, mas existem casos como nota complementar ou de serviço que não compõe.
//0 o valor do item (vProd) não compõe o valor total da NF-e (vProd)
//1 o valor do item (vProd) compõe o valor total da NF-e (vProd)
$xPed = $dadosPedido->id; //$prod['xPed'];
$nItemPed = $prod->nItem; // $prod['nItemPed'];
$nFCI = ''; // $prod['nFCI'];
// var_dump(json_decode($arr_tributos->SIMPLES->exception[0]));exit;
###################################
// ICMS / SIMPLES / CFOP
###################################
$nItem = $prod->nItem;
$orig = '0';
// Verifico as exceções de tributação para ICMS/SIMPLES
$exception_aux = false;
if($CRT == 3)
{
$arr_expection = is_array($arr_tributos->ICMS->exception) ? $arr_tributos->ICMS->exception : array();
$CFOP = $arr_tributos->ICMS->cfop;
$cst = $arr_tributos->ICMS->st;
$pICMS = $arr_tributos->ICMS->aliquota ? number_format(str_replace(',', '.', $arr_tributos->ICMS->aliquota), 2, '.', '') : '0.00';
$modBCST = $arr_tributos->ICMS->icms_modBCST;
$pBCST = $arr_tributos->ICMS->icms_icms_st_base ? number_format(str_replace(',', '.', $arr_tributos->ICMS->icms_icms_st_base), 2, '.', '') : '0.00';
$pBC = $arr_tributos->ICMS->base ? number_format(str_replace(',', '.', $arr_tributos->ICMS->base), 2, '.', '') : '0.00';
$pICMSST = $arr_tributos->ICMS->icms_icms_st_alq ? number_format(str_replace(',', '.', $arr_tributos->ICMS->icms_icms_st_alq), 2, '.', '') : '0.00';
$pMVAST = $arr_tributos->ICMS->icms_icms_st_valor_adicionado ? number_format(str_replace(',', '.', $arr_tributos->ICMS->icms_icms_st_valor_adicionado), 2, '.', '') : '0.00';
}
else
{
$arr_expection = is_array($arr_tributos->SIMPLES->exception) ? $arr_tributos->SIMPLES->exception : array();
$CFOP = $arr_tributos->SIMPLES->cfop;
$csosn = $arr_tributos->SIMPLES->st;
$pICMS = number_format(str_replace(',', '.', $arr_tributos->SIMPLES->aliquota), 2, '.', '');
$modBCST = $arr_tributos->SIMPLES->icms_st_modBCST;
$pBCST = $arr_tributos->SIMPLES->icms_st_base ? number_format(str_replace(',', '.', $arr_tributos->SIMPLES->icms_st_base), 2, '.', '') : '0.00';
$pBC = $arr_tributos->SIMPLES->base ? number_format(str_replace(',', '.', $arr_tributos->SIMPLES->base), 2, '.', '') : '0.00';
$pICMSST = $arr_tributos->SIMPLES->icms_st_alq ? number_format(str_replace(',', '.', $arr_tributos->SIMPLES->icms_st_alq), 2, '.', '') : '0.00';
$pMVAST = $arr_tributos->SIMPLES->icms_st_valor_adicionado ? number_format(str_replace(',', '.', $arr_tributos->SIMPLES->icms_st_valor_adicionado), 2, '.', '') : '0.00';
$pCredSN = $arr_tributos->SIMPLES->alq_credito ? number_format(str_replace(',', '.', $arr_tributos->SIMPLES->alq_credito), 2, '.', '') : '0.00';
}
foreach ($arr_expection as $exception)
{
$exception_json = json_decode($exception);
// Pego as exceções para os DESTINOS
$ex_destino = array();
if(isset($exception_json->destino))
{
if(is_array($exception_json->destino))
{
$ex_destino = $exception_json->destino;
}
else
{
$ex_destino[] = $exception_json->destino;
}
}
if(in_array($dadosEstadoCliente->id, $ex_destino))
{
$exception_aux = true;
break;
}
// Pego as exceções para os NCM
$ex_ncm = array();
if(isset($exception_json->ncm))
{
if(is_array($exception_json->ncm))
{
$ex_ncm = $exception_json->ncm;
}
else
{
$ex_ncm[] = $exception_json->ncm;
}
}
foreach ($ex_ncm as $ncm_aux)
{
if($NCM == preg_replace("/[^0-9]/", "", $ncm_aux))
{
$exception_aux = true;
break;
}
}
// Pego as exceções para os PRODUTOS
$ex_product = array();
if(isset($exception_json->products))
{
if(is_array($exception_json->products))
{
$ex_product = $exception_json->products;
}
else
{
$ex_product[] = $exception_json->products;
}
}
if(in_array($prod->id, $ex_product))
{
$exception_aux = true;
break;
}
// Pego as exceções para os ORIGENS
$ex_origin = array();
if(isset($exception_json->origin))
{
if(is_array($exception_json->origin))
{
$ex_origin = $exception_json->origin;
}
else
{
$ex_origin[] = $exception_json->origin;
}
}
// TODO: verificar como tratar as origins, pois não temos esse dado no produto nem no pedido
}
// Verifico se foi encontrada alguma exceção compatível
if($exception_aux == true)
{
if($CRT == 3)
{
$CFOP = $exception_json->icms_cfop;
$cst = $exception_json->icms_st;
$pICMS = number_format(str_replace(',', '.', $exception_json->icms_aliquota), 2, '.', '');
$pICMSST = $exception_json->icms_icms_st_alq ? number_format(str_replace(',', '.', $exception_json->icms_icms_st_alq), 2, '.', '') : '0.00';
$pBC = number_format(str_replace(',', '.', $exception_json->icms_base), 2, '.', '');
$pBCST = number_format(str_replace(',', '.', $exception_json->icms_icms_st_base), 2, '.', '');
$modBCST = $exception_json->icms_icms_modBCST;
$pMVAST = $arr_tributos->ICMS->icms_icms_st_valor_adicionado ? number_format(str_replace(',', '.', $arr_tributos->ICMS->icms_icms_st_valor_adicionado), 2, '.', '') : '0.00';
}
else
{
$CFOP = $exception_json->simples_cfop;
$csosn = $exception_json->simples_st;
$pICMS = number_format(str_replace(',', '.', $exception_json->simples_aliquota), 2, '.', '');
$modBCST = $exception_json->simples_icms_st_modBCST;
$pBCST = number_format(str_replace(',', '.', $exception_json->simples_icms_st_base), 2, '.', '');
$pICMSST = number_format(str_replace(',', '.', $exception_json->simples_icms_st_alq), 2, '.', '');
$pBC = number_format(str_replace(',', '.', $exception_json->simples_base), 2, '.', '');
$pMVAST = $exception_json->SIMPLES->simples_icms_st_valor_adicionado ? number_format(str_replace(',', '.', $exception_json->SIMPLES->simples_icms_st_valor_adicionado), 2, '.', '') : '0.00';
$pCredSN = $exception_json->simples_alq_credito ? number_format(str_replace(',', '.', $exception_json->simples_alq_credito), 2, '.', '') : '0.00';
}
}
// Verifico se tem Substituição Tributária
$substituicao_tributaria = false;
if($CRT == 3)
{
switch ($cst)
{
case 10:
case 30:
case 60:
case 70:
case 90:
$substituicao_tributaria = true;
break;
}
}
else
{
switch ($csosn)
{
case 201:
case 202:
case 203:
case 500:
case 900:
$substituicao_tributaria = true;
break;
}
}
// TODO: aqui estamos considerando apenas os CFOPs de Venda de mercadorias
if($idDest == 1)
{
$CFOP = str_replace('?.', '5', $CFOP);
}
else
{
$CFOP = str_replace('?.', '6', $CFOP);
}
//TAG do Produto
$resp = $nfe->tagprod($nItem, $cProd, $cEAN, $xProd, $NCM, $EXTIPI, $CFOP, $uCom, $qCom, $vUnCom, $vProd, $cEANTrib, $uTrib, $qTrib, $vUnTrib, $vFrete, $vSeg, $vDesc, $vOutro, $indTot, $xPed, $nItemPed, $nFCI);
// Modalidade de determinação da BC do ICMS
// 0 - Margem Valor Agregado (%);
// 1 - Pauta (Valor);
// 2 - Preço Tabelado Máx. (valor);
// 3 - valor da operação
$modBC = '1';
// Percentual da Redução de Base de Cálculo (para CST 90 do ICMS)
$pRedBC = '';
//Base de cálculo do ICMS => $qTrib * $vUnTrib
$vBCICMS = number_format($qTrib * $vUnTrib * ($pBC/100),2, '.', '');
$vBCST = number_format($qTrib * $vUnTrib * ($pBCST/100),2, '.', '');
// Valor do ICMS
$vICMS = number_format($vBCICMS * ($pICMS/100), 2, '.', '');
// Valor do ICMSST
$vICMSST = number_format($vBCST * ($pICMSST/100), 2, '.', '');
// Partilha para venda interestadual
## TODO: verificar se é calculado também para SIMPLES
if($idDest == 2)
{
//
// TODO: fazer o cálculo da partilha do ICMS para operações Intre Estados.
// Levar em consideração o valor do ICMS para o destino de acordo com o ANO
// 2017 -> 60%, 2018 -> 80%, 2019 -> 100%
$vBCUFDest = $vBCICMS;
$pFCPUFDest = '0.00';
$pICMSUFDest = '17.00';
$pICMSInter = '12.00';
$pICMSInterPart = '60.00';
$vFCPUFDest = '0.00';
$vICMSUFDest = $vICMS*0.6;
$vICMSUFRemet = $vICMS*0.4;
$resp = $nfe->tagICMSUFDest($nItem, $vBCUFDest, $pFCPUFDest, $pICMSUFDest, $pICMSInter, $pICMSInterPart, $vFCPUFDest, $vICMSUFDest, $vICMSUFRemet);
}
### TODO: PEGAR OS VALORES ABAIXO DO ARR_TRIBUTOS
$vCredICMSSN = '';
$pRedBCST = '';
$vBCSTRet = $prod->item_total; // Pauta do Chope Claro 1000ml em GO R$ 8,59 x 0.660 Litros
$vICMSSTRet = ''; // = (Valor da Pauta * Alíquota ICMS ST) - Valor ICMS Próprio
$vICMSDeson = '';
$motDesICMS = '';
$pDif = '';
$vICMSDif = '';
$vICMSOp = '';
if($dadosEmpresa['company_crt'] == 3)
{
$resp = $nfe->tagICMS($nItem, $orig, $cst, $modBC, $pRedBC, $vBCICMS, $pICMS, $vICMS, $vICMSDeson, $motDesICMS, $modBCST, $pMVAST, $pRedBCST, $vBCST, $pICMSST, $vICMSST, $pDif, $vICMSDif, $vICMSOp, $vBCSTRet, $vICMSSTRet);
}
else
{
//ICMSSN - Tributação ICMS pelo Simples Nacional - CSOSN 500
$resp = $nfe->tagICMSSN($nItem, $orig, $csosn, $modBC, $vBCICMS, $pRedBC, $pICMS, $vICMS, $pCredSN, $vCredICMSSN, $modBCST, $pMVAST, $pRedBCST, $vBCST, $pICMSST, $vICMSST, $vBCSTRet, $vICMSSTRet);
}
###################################
# ISSQN
###################################
// Verifico as exceções de tributação para ISSQN
$exception_aux = false;
$arr_expection = is_array($arr_tributos->ISSQN->exception) ? $arr_tributos->ISSQN->exception : array();
$cst = $arr_tributos->ISSQN->st;
$vAliq = number_format(str_replace(',', '.', $arr_tributos->ISSQN->aliquota), 2, '.', '');
foreach ($arr_expection as $exception)
{
$exception_json = json_decode($exception);
// Pego as exceções para os DESTINOS
$ex_destino = array();
if(isset($exception_json->destino))
{
if(is_array($exception_json->destino))
{
$ex_destino = $exception_json->destino;
}
else
{
$ex_destino[] = $exception_json->destino;
}
}
if(in_array($dadosEstadoCliente->id, $ex_destino))
{
$exception_aux = true;
break;
}
// Pego as exceções para os NCM
$ex_ncm = array();
if(isset($exception_json->ncm))
{
if(is_array($exception_json->ncm))
{
$ex_ncm = $exception_json->ncm;
}
else
{
$ex_ncm[] = $exception_json->ncm;
}
}
foreach ($ex_ncm as $ncm_aux)
{
if($NCM == preg_replace("/[^0-9]/", "", $ncm_aux))
{
$exception_aux = true;
break;
}
}
// Pego as exceções para os PRODUTOS
$ex_product = array();
if(isset($exception_json->products))
{
if(is_array($exception_json->products))
{
$ex_product = $exception_json->products;
}
else
{
$ex_product[] = $exception_json->products;
}
}
if(in_array($prod->id, $ex_product))
{
$exception_aux = true;
break;
}
// Pego as exceções para os ORIGENS
$ex_origin = array();
if(isset($exception_json->origin))
{
if(is_array($exception_json->origin))
{
$ex_origin = $exception_json->origin;
}
else
{
$ex_origin[] = $exception_json->origin;
}
}
// TODO: verificar como tratar as origins, pois não temos esse dado no produto nem no pedido
}
// Verifico se foi encontrada alguma exceção compatível para o ISSQN
if($exception_aux == true)
{
$cst = $exception_json->issqn_st;
$vAliq = number_format(str_replace(',', '.', $exception_json->aliquota), 2, '.', '');
}
// TAG de for produto
$vISSQN = 0;
$ISSQN_Total = false;
if ($prod->type != 'Product')
{
$nItem = $prod->nItem;
$vBC = $qTrib * $vUnTrib;
$vISSQN = $vBC * ($vAliq/100);
$cMunFG = $cityCompany->city_ibge;
$cListServ = '16.01';
$vDeducao = '';
$vOutro = '';
$vDescIncond = '';
$vDescCond = '';
$vISSRet = '';
$indISS = '1';
$cServico = '';
$cMun = '';
$cPais = '';
$nProcesso = '';
$indIncentivo = '1';
$nfe->tagISSQN($nItem, $vBC, $vAliq, $vISSQN, $cMunFG, $cListServ, $vDeducao, $vOutro, $vDescIncond, $vDescCond, $vISSRet, $indISS, $cServico, $cMun, $cPais, $nProcesso, $indIncentivo);
// $nfe->tagISSQN($nProcesso, $vBC, $vAliq, $vISSQN, $cServico, $cListServ, $vDeducao, $vOutro, $vDescIncond, $vDescCond)
//de acordo com o identiificado cst 2 casas decimais 1 ou 2
$ISSQN_Total = true;
}
// TODO: É NECESSÁRIO SE CRIAR UM CST PARA O PIS E OUTRO PARA O COFINS
// $cst = '03';
###################################
# PIS
###################################
// Verifico as exceções de tributação para PIS
$exception_aux = false;
$arr_expection = is_array($arr_tributos->PIS->exception) ? $arr_tributos->PIS->exception : array();
$cst = $arr_tributos->PIS->st;
$pPIS = number_format(str_replace(',', '.', $arr_tributos->PIS->aliquota), 2, '.', '');
foreach ($arr_expection as $exception)
{
$exception_json = json_decode($exception);
// Pego as exceções para os DESTINOS
$ex_destino = array();
if(isset($exception_json->destino))
{
if(is_array($exception_json->destino))
{
$ex_destino = $exception_json->destino;
}
else
{
$ex_destino[] = $exception_json->destino;
}
}
if(in_array($dadosEstadoCliente->id, $ex_destino))
{
$exception_aux = true;
break;
}
// Pego as exceções para os NCM
$ex_ncm = array();
if(isset($exception_json->ncm))
{
if(is_array($exception_json->ncm))
{
$ex_ncm = $exception_json->ncm;
}
else
{
$ex_ncm[] = $exception_json->ncm;
}
}
foreach ($ex_ncm as $ncm_aux)
{
if($NCM == preg_replace("/[^0-9]/", "", $ncm_aux))
{
$exception_aux = true;
break;
}
}
// Pego as exceções para os PRODUTOS
$ex_product = array();
if(isset($exception_json->products))
{
if(is_array($exception_json->products))
{
$ex_product = $exception_json->products;
}
else
{
$ex_product[] = $exception_json->products;
}
}
if(in_array($prod->id, $ex_product))
{
$exception_aux = true;
break;
}
// Pego as exceções para os ORIGENS
$ex_origin = array();
if(isset($exception_json->origin))
{
if(is_array($exception_json->origin))
{
$ex_origin = $exception_json->origin;
}
else
{
$ex_origin[] = $exception_json->origin;
}
}
// TODO: verificar como tratar as origins, pois não temos esse dado no produto nem no pedido
}
// Verifico se foi encontrada alguma exceção compatível para o PIS
if($exception_aux == true)
{
$cst = $exception_json->pis_st;
$pPIS = number_format(str_replace(',', '.', $exception_json->pis_aliquota), 2, '.', '');
}
$nItem = $prod->nItem;
$vBC = number_format($qTrib * $vUnTrib, 2, '.', '');
$vPIS = number_format($vBC * ($pPIS/100), 2, '.', '');
$qBCProd = $qTrib;
$vAliqProd = $vPIS;
$resp = $nfe->tagPIS($nItem, $cst, $vBC, $pPIS, $vPIS, $qBCProd, $vAliqProd);
###################################
# COFINS
###################################
// Verifico as exceções de tributação para COFINS
$exception_aux = false;
$arr_expection = is_array($arr_tributos->COFINS->exception) ? $arr_tributos->COFINS->exception : array();
$cst = $arr_tributos->COFINS->st;
$pCOFINS = number_format(str_replace(',', '.', $arr_tributos->COFINS->aliquota), 2, '.', '');
foreach ($arr_expection as $exception)
{
$exception_json = json_decode($exception);
// Pego as exceções para os DESTINOS
$ex_destino = array();
if(isset($exception_json->destino))
{
if(is_array($exception_json->destino))
{
$ex_destino = $exception_json->destino;
}
else
{
$ex_destino[] = $exception_json->destino;
}
}
if(in_array($dadosEstadoCliente->id, $ex_destino))
{
$exception_aux = true;
break;
}
// Pego as exceções para os NCM
$ex_ncm = array();
if(isset($exception_json->ncm))
{
if(is_array($exception_json->ncm))
{
$ex_ncm = $exception_json->ncm;
}
else
{
$ex_ncm[] = $exception_json->ncm;
}
}
foreach ($ex_ncm as $ncm_aux)
{
if($NCM == preg_replace("/[^0-9]/", "", $ncm_aux))
{
$exception_aux = true;
break;
}
}
// Pego as exceções para os PRODUTOS
$ex_product = array();
if(isset($exception_json->products))
{
if(is_array($exception_json->products))
{
$ex_product = $exception_json->products;
}
else
{
$ex_product[] = $exception_json->products;
}
}
if(in_array($prod->id, $ex_product))
{
$exception_aux = true;
break;
}
// Pego as exceções para os ORIGENS
$ex_origin = array();
if(isset($exception_json->origin))
{
if(is_array($exception_json->origin))
{
$ex_origin = $exception_json->origin;
}
else
{
$ex_origin[] = $exception_json->origin;
}
}
// TODO: verificar como tratar as origins, pois não temos esse dado no produto nem no pedido
}
// Verifico se foi encontrada alguma exceção compatível para o COFINS
if($exception_aux == true)
{
$cst = $exception_json->cofins_st;
$pCOFINS = number_format(str_replace(',', '.', $exception_json->aliquota), 2, '.', '');
}
$nItem = $prod->nItem;
$vBC = number_format($qTrib * $vUnTrib, 2, '.', '');
$vCOFINS = number_format($vBC * ($pCOFINS/100), 2, '.', '');
$qBCProd = $qTrib;
$vAliqProd = $vCOFINS;
$resp = $nfe->tagCOFINS($nItem, $cst, $vBC, $pCOFINS, $vCOFINS, $qBCProd, $vAliqProd);
###################################
# IPI
###################################
// Verifico as exceções de tributação para IPI
$exception_aux = false;
$arr_expection = is_array($arr_tributos->IPI->exception) ? $arr_tributos->IPI->exception : array();
$cst = $arr_tributos->IPI->st;
$pIPI = number_format(str_replace(',', '.', $arr_tributos->IPI->aliquota), 2, '.', '');
$cEnq = $arr_tributos->IPI->c_enq;
foreach ($arr_expection as $exception)
{
$exception_json = json_decode($exception);
// Pego as exceções para os DESTINOS
$ex_destino = array();
if(isset($exception_json->destino))
{
if(is_array($exception_json->destino))
{
$ex_destino = $exception_json->destino;
}
else
{
$ex_destino[] = $exception_json->destino;
}
}
if(in_array($dadosEstadoCliente->id, $ex_destino))
{
$exception_aux = true;
break;
}
// Pego as exceções para os NCM
$ex_ncm = array();
if(isset($exception_json->ncm))
{
if(is_array($exception_json->ncm))
{
$ex_ncm = $exception_json->ncm;
}
else
{
$ex_ncm[] = $exception_json->ncm;
}
}
foreach ($ex_ncm as $ncm_aux)
{
if($NCM == preg_replace("/[^0-9]/", "", $ncm_aux))
{
$exception_aux = true;
break;
}
}
// Pego as exceções para os PRODUTOS
$ex_product = array();
if(isset($exception_json->products))
{
if(is_array($exception_json->products))
{
$ex_product = $exception_json->products;
}
else
{
$ex_product[] = $exception_json->products;
}
}
if(in_array($prod->id, $ex_product))
{
$exception_aux = true;
break;
}
// Pego as exceções para os ORIGENS
$ex_origin = array();
if(isset($exception_json->origin))
{
if(is_array($exception_json->origin))
{
$ex_origin = $exception_json->origin;
}
else
{
$ex_origin[] = $exception_json->origin;
}
}
// TODO: verificar como tratar as origins, pois não temos esse dado no produto nem no pedido
}
// Verifico se foi encontrada alguma exceção compatível para o COFINS
if($exception_aux == true)
{
$cst = $exception_json->ipi_st;
$pIPI = number_format(str_replace(',', '.', $exception_json->ipi_aliquota), 2, '.', '');
$cEnq = $exception_json->ipi_c_enq;
}
// verifico se a classe de enquadramento é nula
if($cEnq == null)
{
$cEnq = 0;
}
$nItem = $prod->nItem;
$clEnq = '';
$cnpjProd = '';
$cSelo = '';
$qSelo = '';
$vBC = number_format($qTrib * $vUnTrib, 2, '.', '');
$qUnid = '';
$vUnid = '';
$vIPI = number_format($vBC * ($pIPI/100), 2, '.', '');
$resp = $nfe->tagIPI($nItem, $cst, $clEnq, $cnpjProd, $cSelo, $qSelo, $cEnq, $vBC, $pIPI, $qUnid, $vUnid, $vIPI);
$nItem = $prod->nItem;
$vTotTrib_prod = number_format($vCOFINS + $vPIS + $vICMS + $vICMSST + $vISSQN,2 , '.', '');
$resp = $nfe->tagimposto($nItem, $vTotTrib_prod);
// Insiro a TAG de CEST cado tenha Substituição Tributária
if($substituicao_tributaria == true)
{
$resp = $nfe->tagCEST($nItem, preg_replace('/\D/', '', $prod->cest_code));
}
// SOMATÓRIOS DOS IMPOSTOS
$somaCOFINS += $vCOFINS;
$somaPIS += $vPIS;
$somaICMS += $vICMS;
$somaBCICMS += $vBCICMS;
$somaBCST += $vBCST;
$somaISSQN += $vISSQN;
$somaProduto += $prod->item_total;
}
//Inicialização de váriaveis não declaradas...
// $vII = isset($vII) ? $vII : 0;
// $vIPI = isset($vIPI) ? $vIPI : 0;
// $vIOF = isset($vIOF) ? $vIOF : 0;
// $vPIS = isset($vPIS) ? $vPIS : 0;
// $vCOFINS = isset($vCOFINS) ? $vCOFINS : 0;
// $vICMS = isset($vICMS) ? $vICMS : 0;
// $vBCST = isset($vBCST) ? $vBCST : 0;
// $vST = isset($vST) ? $vST : 0;
// $vISS = isset($vISS) ? $vISS : 0;
//total
$vBC = number_format($somaBCICMS, 2, '.', '');
$vICMS = number_format($somaICMS, 2, '.', '');
$vISS = number_format($somaISSQN, 2, '.', '');
$vICMSDeson = '0.00';
$vBCST = number_format($somaBCST, 2, '.', '');
$vST = '0.00';
$vProd = number_format($somaProduto, 2, '.', '');;//number_format($dadosPedido->subtotal, 2, '.', '');//0.00 //number_format($somaProduto, 2, '.', '');
$vFrete = (($dadosPedido->freight_by=='Sender' || $dadosPedido->freight_by=='Addressee' || $dadosPedido->freight_by=='The 3rd') && $dadosPedido->freight>0?number_format($dadosPedido->freight, 2, '.', ''):'0.00');
$vSeg = '0.00';
$vDesc = number_format($dadosPedido->discount, 2, '.', ''); //'0.00';
$vII = '0.00';
$vIPI = '0.00';
$vIOF = '0.00';
$vPIS = number_format($somaPIS, 2, '.', ''); // number_format($somaPIS, 2, '.', '');
$vCOFINS = number_format($somaCOFINS, 2, '.', ''); // number_format($somaCOFINS, 2, '.', '');
$vOutro = '0.00';
$vNF = number_format($vProd-$vDesc-$vICMSDeson+$vST+$vFrete+$vSeg+$vOutro+$vII+$vIPI, 2, '.', '');//number_format($vProd-$vDesc-$vICMSDeson+$vST+$vFrete+$vSeg+$vOutro+$vII+$vIPI, 2, '.', '');//$dadosPedido->total; //
$vTotTrib = number_format($vICMS + $vST + $vII + $vIPI + $vPIS + $vCOFINS + $vIOF + $vISS, 2, '.', '');
$resp = $nfe->tagICMSTot($vBC, $vICMS, $vICMSDeson, $vBCST, $vST, $vProd, $vFrete, $vSeg, $vDesc, $vII, $vIPI, $vPIS, $vCOFINS, $vOutro, $vNF, $vTotTrib);
$dCompet = date("Y-m-d");
$cRegTrib = $dadosEmpresa['company_crt'];
$vServ = $dadosPedido->subtotal;
//ISSQNTot
if($ISSQN_Total == true)
{
//$resp = $nfe->tagISSQNTot($vServ, $vBC, $vISS, $vPIS, $vCOFINS, $dCompet, $vDeducao, $vOutro, $vDescIncond, $vDescCond, $vISSRet, $cRegTrib);
$resp = $nfe->tagISSQNTot($vServ, '', '', '', '', $dCompet, '', '', '', '', '', $cRegTrib);
}
//frete
if($dadosPedido->freight_by!='Free shipping' && $dadosPedido->freight_by!=null && !empty($dadosPedido->freight_by)){
if($dadosPedido->freight_by!='Sender' ){
$modFrete = '0';
}else if($dadosPedido->freight_by!='Addressee' ){
$modFrete = '1';
}else if($dadosPedido->freight_by!='The 3rd' ){
$modFrete = '2';
}else{
$modFrete = '9';
}
}else{
$modFrete = '9'; //0=Por conta do emitente; 1=Por conta do destinatário/remetente; 2=Por conta de terceiros; 9=Sem Frete;
}
$resp = $nfe->tagtransp($modFrete);
// Defino o peso do pedido
$resp = $nfe->tagvol($quantidadeTotal,'N/A','N/A','N/A', number_format($pesoLiquido, 3, '.', ''),number_format($pesoBruto, 3, '.', ''));
//forma de pagamento, comentado, por nao estar emitindo nfc-e ainda
if ($tipo == 'NFCe') {
//NFC-e
//pagamento
$tPag = str_pad(empty($dadosPedido->paymentmethod) ? '01' : $dadosPedido->paymentmethod, 2, "0", STR_PAD_LEFT); //'01'; //Dinheiro
$vPag = $dadosPedido->total;
$rest = $nfe->tagpag($tPag, $vPag);
// $tPag = '02'; //Cheque
// $vPag = '10.00';
// $rest = $nfe->tagpag($tPag, $vPag);
}
//*************************************************************
//Grupo obrigatório para a NFC-e. Não informar para a NF-e.
//$tPag = '03'; //01=Dinheiro 02=Cheque 03=Cartão de Crédito 04=Cartão de Débito 05=Crédito Loja 10=Vale Alimentação 11=Vale Refeição 12=Vale Presente 13=Vale Combustível 99=Outros
//$vPag = '1452,33';
//$resp = $nfe->tagpag($tPag, $vPag);
//se a operação for com cartão de crédito essa informação é obrigatória
//$CNPJ = '31551765000143'; //CNPJ da operadora de cartão
//$tBand = '01'; //01=Visa 02=Mastercard 03=American Express 04=Sorocred 99=Outros
//$cAut = 'AB254FC79001'; //número da autorização da tranzação
//$resp = $nfe->tagcard($CNPJ, $tBand, $cAut);
//**************************************************************
// Calculo de carga tributária similar ao IBPT - Lei 12.741/12
$federal = number_format($vII + $vIPI + $vIOF + $vPIS + $vCOFINS, 2, '.', '');
$estadual = number_format($vICMS + $vST, 2, '.', '');
$municipal = number_format($vISS, 2, '.', '');
$totalT = number_format($federal + $estadual + $municipal, 2, '.', '');
$textoIBPT = "Valor Aprox. Tributos R$ {$totalT} (Federal: R$ {$federal}, Estadual: R$ {$estadual} e Municipal: R$ {$municipal}). ";
//Informações Adicionais
//$infAdFisco = "SAIDA COM SUSPENSAO DO IPI CONFORME ART 29 DA LEI 10.637";
$infAdFisco = $dadosEmpresa['note_obs_nf'];
$infCpl = " <br/> Fatura $dadosPedido->id " . ($totalT > 0 ? "| {$textoIBPT} " : '');
$resp = $nfe->taginfAdic($infAdFisco, $infCpl);
$resp = $nfe->montaNFe();
if ($resp) {
$xml = $nfe->getXML();
// header('Content-type: text/xml; charset=UTF-8');
// echo $xml;exit;
$filename = getcwd() . "//application//plugins//modulo_fiscal//empresa//NF-e//" . $dadosEmpresa['note_environment'] . "//entradas/{$chave}-nfe.xml";
file_put_contents($filename, $xml);
chmod($filename, 0755);
//assinar a nota
$xmlAssinada = $nfeTools->assina($xml);
$filenameAssinada = getcwd() . "//application//plugins//modulo_fiscal//empresa//NF-e//" . $dadosEmpresa['note_environment'] . "//assinada//{$chave}-nfe.xml";
file_put_contents($filenameAssinada, $xmlAssinada);
chmod($filenameAssinada, 0755);
if (!$nfeTools->validarXml($xmlAssinada) || sizeof($nfeTools->errors)) {
$msg.= "<h3>Erro ao validar XML</h3><br/>";
foreach ($nfeTools->errors as $erro) {
if (is_array($erro)) {
foreach ($erro as $err) {
$msg.= "$err <br>";
}
} else {
$msg.= "$erro <br>";
}
}
r2($url_retorno, 'e', 'Pedido: ' . $dadosPedido['id'] . '<br/> ' . $msg);
} else {
// Enviar Sefaz
if ($tipo == 'NFe') {
//NF-e
$nfeTools->setModelo('55');
} else {
//NFC-e
$nfeTools->setModelo('65');
}
$aResposta = array();
$idLote = '';
$indSinc = '0'; //indica sincronização 0 retorna nRec e codigo como 103 sucesso
$flagZip = false;
$retorno = $nfeTools->sefazEnviaLote($xmlAssinada, $tpAmb, $idLote, $aResposta, $indSinc, $flagZip);
// echo '<br><br><pre>';
//echo htmlspecialchars($nfesefaz->soapDebug);
// echo '</pre><br><br><pre>';
//lote recebido
if ($aResposta["cStat"] == 103) {
$aRespostarecibo = array();
$recibo = $aResposta["nRec"];
$retorno = $nfeTools->sefazConsultaRecibo($recibo, $tpAmb, $aRespostarecibo);
if ($aRespostarecibo["cStat"] == 104) {
sleep(3);//aguarda 3 segundos e tenta novamente recuperar os dados
//validação para caso esteja lento
$retorno = $nfeTools->sefazConsultaRecibo($recibo, $tpAmb, $aRespostarecibo);
}
if ($aRespostarecibo["cStat"] == 104) {
if ($aRespostarecibo["aProt"][0]["cStat"] == 539) {
r2($url_retorno, 'e', 'Pedido: ' . $dadosPedido['id'] . '<br/> Número de Nota já enviado, verificar numero da nota em configurações do módulo Fiscal <br/>' . $aRespostarecibo["aProt"][0]["xMotivo"]);
echo "Id de Nota já enviado, verificar numero da nota em configurações do módulo Fiscal <br/> " . $aRespostarecibo["aProt"][0]["xMotivo"];
echo "<br/>" . $aResposta["xMotivo"];
echo '<br><br><pre>';
echo htmlspecialchars($nfeTools->soapDebug);
echo '</pre><br><br><pre>';
print_r($aRespostarecibo);
echo "</pre><br>";
} else if ($aRespostarecibo["aProt"][0]["cStat"] == 100) {
// echo "nota Ok <br/>" .$aRespostarecibo["aProt"][0]["xMotivo"];
// echo "<br/>".$aResposta["xMotivo"];
// echo '<br><br><pre>';
// echo htmlspecialchars($nfeTools->soapDebug);
// echo '</pre><br><br><pre>';
// print_r($aRespostarecibo);
// echo "</pre><br>";
// $aResposta = array();
$indSinc = '0'; //0=asíncrono, 1=síncrono
$pasta = date('Ym');
$pathNFefile = $nfeTools->aConfig['pathNFeFiles'] . "//" . $dadosEmpresa['note_environment'] . "//assinada//{$chave}-nfe.xml";
if (!$indSinc) {
$pathProtfile = $nfeTools->aConfig['pathNFeFiles'] . "//" . $dadosEmpresa['note_environment'] . "//temporarias//" . $pasta . "//{$recibo}-retConsReciNFe.xml";
} else {
$pathProtfile = $nfeTools->aConfig['pathNFeFiles'] . "//" . $dadosEmpresa['note_environment'] . "//temporarias//" . $pasta . "//{$recibo}-retEnviNFe.xml";
}
$saveFile = true;
$retorno = $nfeTools->addProtocolo($pathNFefile, $pathProtfile, $saveFile);
// echo '<br><br><pre>';
// echo htmlspecialchars($retorno);
// echo "</pre><br>";
// $saida = isset($_REQUEST['o']) ? $_REQUEST['o'] : 'pdf'; //pdf ou html
//
// $ecoNFCe = false; //false = Não (NFC-e Completa); true = Sim (NFC-e Simplificada)
// $xmlProt = $nfeTools->aConfig['pathNFeFiles'] . "//" . $dadosEmpresa['note_environment'] . "//enviadas//aprovadas//" . $pasta . "//{$chave}-protNFe.xml";
// // Uso da nomeclatura '-danfce.pdf' para facilitar a diferenciação entre PDFs DANFE e DANFCE salvos na mesma pasta...
// $pdfDanfe = $nfeTools->aConfig['pathNFeFiles'] . "//" . $dadosEmpresa['note_environment'] . "//pdf//" . $pasta . "//{$chave}-danfe.pdf";
//cria a pasta para guardar a nfe
// if (!is_dir($nfeTools->aConfig['pathNFeFiles'] . "//" . $dadosEmpresa['note_environment'] . "//pdf//" . $pasta)) {
// if (!mkdir($nfeTools->aConfig['pathNFeFiles'] . "//" . $dadosEmpresa['note_environment'] . "//pdf//" . $pasta, 0777)) {
// throw new Exception\RuntimeException(
// "Não foi possivel criar o diretorio $folder. Verifique as permissões"
// );
// }
// }
// $docxml = NFePHP\Common\Files\FilesFolders::readFile($xmlProt);
//gera o danfe e salva
// if ($tipo == 'NFe') {
// $danfe = new NFePHP\Extras\Danfe($docxml, 'P', 'A4', $nfeTools->aConfig['aDocFormat']->pathLogoFile, 'I', '');
// $id = $danfe->montaDANFE();
// $salva = $danfe->printDANFE($pdfDanfe, 'F'); //Salva o PDF na pasta
// } else {
// $ecoNFCe = false; //false = Não (NFC-e Completa); true = Sim (NFC-e Simplificada)
// $docxml = NFePHP\Common\Files\FilesFolders::readFile($xmlProt);
// $danfce = new NFePHP\Extras\Danfce($docxml, '', 2);
// //ajuste para passar o danfce
// $id = $danfce->montaDANFCE($ecoNFCe, $nfeTools);
// $salva = $danfce->printDANFCE('pdf', $pdfDanfe, 'F'); //Salva na pasta pdf
// }
//GRAVAR EMISSÃO DA NFE
$nota = ORM::for_table('app_fiscal_note')->create();
$nota->number_note = ($tipo == 'NFe' ? $dadosEmpresa['note_number_nfe'] : $dadosEmpresa['note_number_nfce']);
$nota->series = ($tipo == 'NFe' ? $dadosEmpresa['note_series_nfe'] : $dadosEmpresa['note_series_nfce']);
$nota->type = ($tipo == 'NFe' ? 'NFe' : 'NFCe');
$nota->issuance_date = date('Y-m-d H:i:s',strtotime($dhEmi));
$nota->amount = $dadosPedido->total;
$nota->account = $dadosCliente->account;
$nota->id_account = $dadosCliente->id;
$nota->key = $chave;
$nota->status = 'Autorizada';
$nota->receipt_number = $recibo;
$nota->protocol_number = $aRespostarecibo["aProt"][0]["nProt"];
$nota->pasta = $pasta;
$nota->code_status = $aRespostarecibo["aProt"][0]["cStat"];
$nota->invoice_id = $dadosPedido->id;
$nota->environment = $dadosEmpresa['note_environment'];
$nota->save();
//atualiza o numero da nota em ap_fiscal_config
if ($tipo == 'NFe') {
$d = ORM::for_table('app_fiscal_config')->where('key', 'note_number_nfe')->find_one();
$d->value = $dadosEmpresa['note_number_nfe'] + 1;
$d->save();
$tpAmb = $nfeTools->aConfig['tpAmb'];;
$xJust = '';
$tpEvento = '210210'; //ciencia da operação
$aResposta = array();
$xml = $nfeTools->sefazManifesta($chave, $tpAmb, $xJust = '', $tpEvento , $aResposta);
} else {
$d = ORM::for_table('app_fiscal_config')->where('key', 'note_number_nfce')->find_one();
$d->value = $dadosEmpresa['note_number_nfce'] + 1;
$d->save();
}
_log($aResposta["xMotivo"].'<br/>Nota Emitida' . " " . 'Nota Autorizada' . ' [ID: ' . $nota->id, $user['fullname'], $user['id']);
// $abre = $danfe->printDANFE("{$id}-danfe.pdf", 'D'); //I Abre o PDF no Navegador D- Download
r2($url_retorno, 's', 'Nota Emitida' . " Fatura: $dadosPedido->id | Nº Nota : " . $nota->number_note . " | Cod. Status: " . $aRespostarecibo["aProt"][0]["cStat"] . " | Status: " . $aRespostarecibo["aProt"][0]["xMotivo"] . " ");
} else {
r2($url_retorno, 'e', 'Fatura: ' . $dadosPedido->id . '<br/> Dados Inválidos<br/>' . $aRespostarecibo["aProt"][0]["xMotivo"]);
echo "Dados Inválidos <br/> " . $aRespostarecibo["aProt"][0]["xMotivo"];
echo "<br/>" . $aResposta["xMotivo"];
echo '<br><br><pre>';
echo htmlspecialchars($nfeTools->soapDebug);
echo '</pre><br><br><pre>';
print_r($aRespostarecibo);
echo "</pre><br>";
}
} else {
// r2(U . 'invoices/list/', 'e', 'Fatura: ' . $dadosPedido->id . '<br/> Erro ao consultar Recibo<br/>' . $aResposta["xMotivo"]);
echo "Erro ao consultar Recibo<br/><br/><br/>";
echo "" . $aResposta["xMotivo"];
echo '<br><br><pre>';
echo htmlspecialchars($nfeTools->soapDebug);
echo '</pre><br><br><pre>';
print_r($aRespostarecibo);
echo "</pre><br>";
}
} else {
r2($url_retorno, 'e', 'Fatura: ' . $dadosPedido->id . '<br/> Erro ao enviar a SEFAZ<br/>' . $aResposta["xMotivo"]);
echo "Erro ao enviar a SEFAZ<br/><br/><br/>";
echo "<br/>" . $aResposta["xMotivo"];
echo '<br><br><pre>';
echo htmlspecialchars($nfeTools->soapDebug);
echo '</pre><br><br><pre>';
print_r($aResposta);
echo "</pre><br>";
}
}
} else {
header('Content-type: text/html; charset=UTF-8');
foreach ($nfe->erros as $err) {
echo 'tag: <' . $err['tag'] . '> ---- ' . $err['desc'] . '<br>';
}
}
}
} catch (Exception $e) {
r2($url_retorno, 'e', 'Fatura: ' . $id . '<br/>' . $e->getMessage());
}