<?php 
DEFINE('Aplicativo_Versao','17.10.31');
DEFINE('SoftHouse_CNPJ','07.167.915/0001-35');
REQUIRE_ONCE('./config.inc');
REQUIRE('./global/db_conexao.inc');
REQUIRE_ONCE('./global/funcoes.inc');
REQUIRE_ONCE('./global/funcoes_comp.inc');
REQUIRE_ONCE('./global/funcoes_acbr.inc');
DEFINE('Pular_Linha',CHR(13).CHR(10));
$s_Modulo = @$_POST['Mod'];
$s_AcaoMd = @$_POST['Acao'];
$s_DB_Prm = @$_POST['DBPrm'];
$s_CodEmp = @$_POST['CodEmp'];
$v_PmAcao = @$_POST['PmAcao'];
$vRetorno = 0;
$sCodErro = '';
$sModulo    = '[CALLEXT]';
$sSubModulo = $s_Modulo;
$sAcao      = $s_AcaoMd;
$R_CadFuncionario = '';
MYSQL_SELECT_DB($s_DB_Prm) Or $sCodErro='100, Erro ao selecionar base de dados (DBPrm)';
If (EMPTY($sCodErro)) {
$Dados_Empresa = MYSQL_QUERY("SELECT * FROM cad_empresa WHERE EMP_CODIGO='".$s_CodEmp."';");
$Dados_Empresa = MYSQL_FETCH_ARRAY($Dados_Empresa) Or $sCodErro='101, Erro ao capturar dados da empresa no banco de dado (CodEmp)';
}
If ( EMPTY($sCodErro) &&(!EMPTY($v_PmAcao)) ) {
EVAL('$v_PmAcao='.$v_PmAcao.';');
$vRetErro=ERROR_GET_LAST();
If ( ISSET($vRetErro['line']) &&(@$vRetErro['line']+0)<5 ) {
$sCodErro='102, Erro de sintaxe na captura dos parametros (PmAcao)';
}
}
If ( EMPTY($sCodErro) ) {
If ( !Liberacao_Sistema() ) {
$sCodErro='103, Cópia não licenciada para este computador.';
}
}
If (EMPTY($sCodErro)) {
$sData_Trabalho = SQLVarConfig('DATA_DE_TRABALHO');
SWITCH ($s_Modulo) {
CASE 'FAT_GERAL':                
$vRetorno = Modulo_Fat_Geral($s_AcaoMd,$v_PmAcao);
BREAK;
CASE 'CAIXA_FUN':                
$vRetorno = Modulo_Caixa_Fun($s_AcaoMd,$v_PmAcao);
BREAK;
CASE 'FISCAL':                   
$vRetorno = Modulo_Fiscal($s_AcaoMd,$v_PmAcao);
BREAK;
CASE 'SISTEMA':                  
$vRetorno = Modulo_Sistema($s_AcaoMd,$v_PmAcao);
BREAK;
DEFAULT:
$sCodErro='500, Modulo desconhecido (Mod)';
}
}
If ( !EMPTY($sCodErro) ) {
Info_Evento($sCodErro,1);
}
$sRetorno = 'CALLEXT_ECOOK'.Pular_Linha.
'VER='.Aplicativo_Versao.Pular_Linha.
'DATA_HORA='.DATE('Y-m-d H:i:s').Pular_Linha.
'ERRO='.$sCodErro.Pular_Linha.
'RETORNO='.VAR_EXPORT($vRetorno,True);
HEADER('Content-Type: text/plain charset=utf-8');
HEADER('Content-Length: '.STRLEN($sRetorno));
ECHO $sRetorno;
EXIT;
Function Modulo_Fat_Geral($s_AcaoMd,$vDados) {
Global $Dados_Empresa,$sCodErro,$sData_Trabalho,$R_CadFuncionario;
$aR_FatGeral = MYSQL_QUERY('SELECT * FROM fat_geral WHERE FAT_CODIGOI='.(@$vDados['FAT_CODIGOI']+0).';');
If ( !$aR_FatGeral = MYSQL_FETCH_ARRAY($aR_FatGeral) ) {
$sCodErro = '200, Codigo do registro FAT_GERAL nao encontrado ('.(@$vDados['FAT_CODIGOI']+0).')';
Return -2;
}
$aR_Operador = MYSQL_QUERY('SELECT * FROM cad_funcionario WHERE FUN_CODIGO='.(@$vDados['FUN_CODIGOI']+0).';');
If ( !$aR_Operador = MYSQL_FETCH_OBJECT($aR_Operador) ) {
$sCodErro = '220, Erro: Codigo do funcionario nao encontrado ('.(@$vDados['FUN_CODIGOI']+0).')';
Return -2;
}
$R_CadFuncionario = $aR_Operador;
SWITCH ($s_AcaoMd) {
CASE 'RECCNT':
If ( @$aR_FatGeral->FAT_CANCELA <>0 ) {
$sCodErro = '201, Comanda já cancelada.';
Return -2;
}
$nSeqCaixa = PuxarCaixaAberto(@$vDados['FUN_CODIGOI']+0);
If ( $nSeqCaixa==0 ) {
$sCodErro = '202, Não é permitido receber com caixa fechado.';
Return -2;
}
If ( @$vDados['EMITIR_FISCAL'] ) {
$nTipoFiscal = Terminal_e_Fiscal(@$vDados['IP_CLIENTE']);
If ( EMPTY($vDados['IP_CLIENTE']) Or $nTipoFiscal==0 Or $nTipoFiscal==1 ) {
$sCodErro = '230, Este terminal não está configurado para emitir cupom fiscal.';
Return -2;
}
$ImpFiscal = New ComACBR();
$ImpFiscal->Host_IP         = $vDados['IP_CLIENTE'];
$ImpFiscal->Host_Porta      = 3434;
$ImpFiscal->sECF_CNPJ       = $Dados_Empresa['EMP_N_CNPJ'];
$ImpFiscal->sECF_CNPJ_S     = SoftHouse_CNPJ;
$ImpFiscal->sSAT_Assinatura = SQLVarConfig('FISCAL_SAT_ASSINATURA');
$ImpFiscal->nTimeOutECF     = 10;
If ( $nTipoFiscal==1 ) {
$ImpFiscal->nTipo_EmissoFiscal = Acbr_EmissorFiscal_ECF;
}ElseIf ( $nTipoFiscal==2 ) {
$ImpFiscal->nTipo_EmissoFiscal = Acbr_EmissorFiscal_SAT;
}
SET_TIME_LIMIT(120);
$ImpFiscal->Conectar();
If ( $ImpFiscal->nCod_Erro==Acbr_ERRO_Conexao_TCP OR $ImpFiscal->nCod_Erro==Acbr_ERRO_Resposta ) {
$sCodErro = '231, Erro ACBR: Não foi possível conectar ao Emissor Fiscal. '.$ImpFiscal->Host_IP;
Return -2;
}ElseIf ( $ImpFiscal->nCod_Erro==Acbr_ERRO_ECFLinha ) {
$sCodErro = '232, Erro ACBR: A impressora não está em linha.';
Return -2;
}ElseIf ( $ImpFiscal->nCod_Erro==Acbr_ERRO_SAT_Inicializacao ) {
$sRet_Javs .= Info_Evento('ERRO: Erro ao inicializar o SAT. '.$ImpFiscal->sACBR_Erro,1,'ERRO - SAT');
$sCodErro = '232, Erro ACBR: Erro ao inicializar o SAT. '.$ImpFiscal->sACBR_Erro;
Return -2;
}ElseIf ( $ImpFiscal->nCod_Erro==Acbr_ERRO_CNPJ ) {
$sCodErro = '233, CNPJ do ECF (Impressora) é diferente do sistema.<br>CNPJ do sistema: '.($ImpFiscal->sECF_CNPJ).', CNPJ do ECF:'.$ImpFiscal->sECF_CNPJ_E;
Return -2;
}ElseIf ( $ImpFiscal->nCod_Erro==Acbr_ERRO_Reducao_Z ) {
$sCodErro = '234, Erro ACBR: Impressora precisa tirar Redução Z.';
Return -2;
}ElseIf ( $ImpFiscal->nCod_Erro>0 ) {
$sCodErro = '235, Erro ACBR: '.(EMPTY($ImpFiscal->sACBR_Erro) ?$ImpFiscal->sACBR_Erro : 'ERRO: Desconhecido');
Return -2;
}ElseIf ( $ImpFiscal->nCod_Erro==0 ) {
}
}
If ( !ISSET($vDados['FAT_PAGAMTS']) Or EMPTY($vDados['FAT_PAGAMTS']) ) {
$sCodErro = '202, Erro: Não há pagamentos em memória para efetuar a operação.';
Return -2;
}
$aCadastro_MPG  = ARRAY();
$Rows = MYSQL_QUERY('SELECT * FROM cad_modalidade_pag WHERE MPG_MOS_REC=1 AND MPG_TRAVADO=0 ORDER BY MPG_P_TROCO ASC;');
While ($Row = MYSQL_FETCH_ARRAY($Rows)) {
$aCadastro_MPG[$Row['MPG_CODIGOI']] = $Row;
}
If ( COUNT($aCadastro_MPG)==0 ) {
$sCodErro = '203, Erro: Não modalidade de pagamento disponível em cadastro.';
Return -2;
}
$nTotal_Prazo = 0;
$nTotal_Receb = 0;
$aPagamentos = ARRAY();
$aCadastro_MPGInd  = ARRAY();
ForEach ( $vDados['FAT_PAGAMTS'] As $nIndice_MPG =>$nValor_MPG ) {
If ( !ISSET( $aCadastro_MPG[$nIndice_MPG] ) ) {
$sCodErro = '204, Erro: Código de modalidade inválido ('.$nIndice_MPG.').';
Return -2;
}
If ( $nValor_MPG==0 ) {CONTINUE;}
$aRegistro_MPG = $aCadastro_MPG[$nIndice_MPG];
$sIndiceECF = $aRegistro_MPG['MPG_IND_ECF'];
If ( @$ImpFiscal->nTipo_EmissoFiscal = Acbr_EmissorFiscal_SAT ) {
$sIndiceECF = $aRegistro_MPG['MPG_IND_SAT'];
}
$aCadastro_MPGInd[$sIndiceECF] = $aRegistro_MPG;
If ( !ISSET($aPagamentos[$sIndiceECF]) ) {$aPagamentos[$sIndiceECF] = 0;}
$aPagamentos[$sIndiceECF] += $nValor_MPG;
$nTotal_Receb += $nValor_MPG;
If ( $aRegistro_MPG['MPG_FIN_CTR'] ) {
$nTotal_Prazo += $nValor_MPG;
}
}
If ( $nTotal_Receb <$aR_FatGeral['FAT_TOT_REC'] ) {
$sCodErro = '205, Erro: Está faltando '.FormatoMoeda($aR_FatGeral['FAT_TOT_REC']-$nTotal_Receb).' para completar o recebimento).';
Return -2;
}
$nTroco_Receb = $nTotal_Receb -$aR_FatGeral['FAT_TOT_REC'];
MYSQL_QUERY('SET AUTOCOMMIT=0;');
MYSQL_QUERY('START TRANSACTION;');
ForEach ( $vDados['FAT_PAGAMTS'] As $nIndice_MPG =>$nValor_MPG ) {
If ( $nValor_MPG==0 ) {CONTINUE;}
$nCodSeqMov = SQLVarConfig('MOV_MOD_PAG_SEQCOD',True)+0;
SQLVarConfigG('MOV_MOD_PAG_SEQCOD',$nCodSeqMov+1);
$sSQLQuery =
'INSERT INTO mov_modalidade_pag(MOV_CODIGOI) VALUES ('.$nCodSeqMov.'); ';
MYSQL_QUERY($sSQLQuery)     Or $sCodErro='5000, ERRO SQL: '.MYSQL_ERROR().', '.$sSQLQuery;
If ( !EMPTY($sCodErro) ) {MYSQL_QUERY('ROLLBACK;');Return -2;}
$sSQLQuery =          
'UPDATE mov_modalidade_pag SET '.
"MOV_REGDATA='".DATE('Y-m-d H:i:s')."',".
"MOV_CFATGER='".$vDados['FAT_CODIGOI']."',".
"MOV_MPGCODI='".$nIndice_MPG."',".
"MOV_VALORMV='".$nValor_MPG."'".
' WHERE MOV_CODIGOI='.$nCodSeqMov.'; ';
MYSQL_QUERY($sSQLQuery)     Or $sCodErro='5000, ERRO SQL: '.MYSQL_ERROR().', '.$sSQLQuery;
If ( !EMPTY($sCodErro) ) {MYSQL_QUERY('ROLLBACK;');Return -2;}
}
If ( $nTroco_Receb>0 ) {
$nCodSeqMov = SQLVarConfig('MOV_MOD_PAG_SEQCOD',True)+0;
SQLVarConfigG('MOV_MOD_PAG_SEQCOD',$nCodSeqMov+1);
$sSQLQuery =             
'INSERT INTO mov_modalidade_pag(MOV_CODIGOI) VALUES ('.$nCodSeqMov.'); ';
MYSQL_QUERY($sSQLQuery)     Or $sCodErro='5000, ERRO SQL: '.MYSQL_ERROR().', '.$sSQLQuery;
If ( !EMPTY($sCodErro) ) {MYSQL_QUERY('ROLLBACK;');Return -2;}
$sSQLQuery =             
'UPDATE mov_modalidade_pag SET '.
"MOV_REGDATA='".DATE('Y-m-d H:i:s')."',".
"MOV_CFATGER='".$vDados['FAT_CODIGOI']."',".
"MOV_MPGCODI='0',".
"MOV_VALORMV='".$nTroco_Receb."'".
' WHERE MOV_CODIGOI='.$nCodSeqMov.'; ';
MYSQL_QUERY($sSQLQuery)     Or $sCodErro='5000, ERRO SQL: '.MYSQL_ERROR().', '.$sSQLQuery;
If ( !EMPTY($sCodErro) ) {MYSQL_QUERY('ROLLBACK;');Return -2;}
}
$sSQLQuery =
'UPDATE fat_geral SET '.
"FAT_REC_FUN='".$vDados['FUN_CODIGOI']."',".
"FAT_SQCAIXA='".$nSeqCaixa."',".
'FAT_RCFORMA=1'.
' WHERE FAT_CODIGOI='.$vDados['FAT_CODIGOI'].';'.
'';
MYSQL_QUERY($sSQLQuery)     Or $sCodErro='5000, ERRO SQL: '.MYSQL_ERROR().', '.$sSQLQuery;
If ( !EMPTY($sCodErro) ) {MYSQL_QUERY('ROLLBACK;');Return -2;}
If ( @$vDados['EMITIR_FISCAL'] ) {
$sCfe_NCaixa  = ( $R_CadFuncionario->FUN_CODIGO>999 ?999 : $R_CadFuncionario->FUN_CODIGO );
$sCli_CPFCNPJ = Somente_Numeros(@$vDados['CPF']);
$sCli_Municip = '';
$sCli_Estado_ = '';
If ( $ImpFiscal->nTipo_EmissoFiscal = Acbr_EmissorFiscal_SAT ) {
$sSQLQuery = 'SELECT * FROM cad_cidade WHERE CID_CODIGO='.$Dados_Empresa['EMP_CODCID'].';';
$Row = MYSQL_QUERY($sSQLQuery) Or $sCodErro='5000, ERRO SQL: '.MYSQL_ERROR().', '.$sSQLQuery;
If ( !EMPTY($sCodErro) ) {MYSQL_QUERY('ROLLBACK;');Return -2;}
If ( $Row = MYSQL_FETCH_OBJECT($Row) ) {
$sCli_Municip = $Row->CID_NOMECD;
$sCli_Estado_ = $Row->CID_ESTADO;
}
}
$nValorAcre = (@$aR_FatGeral['FAT_TAXASVR']+0) +(@$aR_FatGeral['FAT_TAXACVR']+0);
$nValorDesc = (@$aR_FatGeral['FAT_VALDESC']+0);
$sTexto_CFe =
'[infCFe]'.Pular_Linha.
'versao=0.06'.Pular_Linha.
'[Identificacao]'.Pular_Linha.
'CNPJ={CNPJ-SOFTHOUSE}'.Pular_Linha.
'signAC={ASSINATURA-PADRAO}'.Pular_Linha.
'numeroCaixa='.$sCfe_NCaixa.Pular_Linha.
'[Emitente]'.Pular_Linha.
'CNPJ={CNPJ-EMITENTE}'.Pular_Linha.
'IE='.$Dados_Empresa['EMP_NUMIES'].Pular_Linha.
'IM='.Pular_Linha.
'indRatISSQN=N'.Pular_Linha.
'[Destinatario]'.Pular_Linha.
'CNPJCPF='.$sCli_CPFCNPJ.Pular_Linha.
'xNome='.Pular_Linha.
'[Entrega]'.Pular_Linha.
'xLgr='.Pular_Linha.
'nro='.Pular_Linha.
'xCpl='.Pular_Linha.
'xBairro='.Pular_Linha.
'xMun='.$sCli_Municip.Pular_Linha.
'';
$sSQLQuery =
'SELECT fati.*, '.
'prd1.*, '.
"COALESCE(prd2.ITE_DESCRIC,'') AS ITE_DESCRIC2, ".
"COALESCE(prd3.ITE_DESCRIC,'') AS ITE_DESCRIC3, ".
"COALESCE(prd4.ITE_DESCRIC,'') AS ITE_DESCRIC4, ".
'orig.*, trbu.*, icms.* '.
'FROM fat_item                AS fati '.
'LEFT JOIN cad_produto        AS prd1 ON fati.FAT_CODITE1=prd1.ITE_CODIGOI '.
'LEFT JOIN cad_produto        AS prd2 ON fati.FAT_CODITE2=prd2.ITE_CODIGOI '.
'LEFT JOIN cad_produto        AS prd3 ON fati.FAT_CODITE3=prd3.ITE_CODIGOI '.
'LEFT JOIN cad_produto        AS prd4 ON fati.FAT_CODITE4=prd4.ITE_CODIGOI '.
'LEFT JOIN cad_produto_origem AS orig ON orig.ORI_CODIGO =prd1.ITE_COD_ORI '.
'LEFT JOIN cad_tributacao     AS trbu ON trbu.TRB_CODIGOI=prd1.ITE_FISCAL_TRIB '.
'LEFT JOIN cad_cst            AS icms ON icms.CST_CODIGOI=trbu.TRB_COD_CST '.
'WHERE fati.FAT_CFATGER='.$vDados['FAT_CODIGOI'].' '.
';';
$Rows_Itens = MYSQL_QUERY($sSQLQuery) Or $sCodErro='5000, ERRO SQL: '.MYSQL_ERROR().', '.$sSQLQuery;
If ( !EMPTY($sCodErro) ) {MYSQL_QUERY('ROLLBACK;');Return -2;}
$nSubTotal = 0;
$nImpTotal = 0;
$nCnt_Item = 0;
$aLista_dos_Itens = ARRAY();
While ( $oItem = MYSQL_FETCH_OBJECT($Rows_Itens) ) {
If ( !EMPTY($oItem->FAT_CANITEM) ) {
Continue;
}
$nCnt_Item++;
$nCodigoP = $oItem->FAT_CODITE1;
$sCodigos = $oItem->FAT_CODITE1.(EMPTY($oItem->FAT_CODITE2) ?'': ' '.$oItem->FAT_CODITE2).(EMPTY($oItem->FAT_CODITE3) ?'': ' '.$oItem->FAT_CODITE3).(EMPTY($oItem->FAT_CODITE4) ?'': ' '.$oItem->FAT_CODITE4);
$sDescric = $oItem->ITE_DESCRIC.(EMPTY($oItem->ITE_DESCRIC2) ?'': ','.$oItem->ITE_DESCRIC2).(EMPTY($oItem->ITE_DESCRIC3) ?'': ','.$oItem->ITE_DESCRIC3).(EMPTY($oItem->ITE_DESCRIC4) ?'': ','.$oItem->ITE_DESCRIC4);
$sUnidade = ( EMPTY($oItem->ITE_SIG_UNIDADE) ?'UN': $oItem->ITE_SIG_UNIDADE );
$nQtdItem = $oItem->FAT_QTD_ITE;
$sCod_NCM = $oItem->ITE_COD_NCM;
$sFatPreT = $oItem->FAT_PRE_TIP;
$sC_F_O_P = $oItem->TRB_COD_CFO+0;
$nCod_Ori = $oItem->ORI_TIPCAL+0;
$nCstICMS = $oItem->CST_CODFISC+0;
$nAlqICMS = $oItem->TRB_I_C_M_S+0;
$nCst_PIS = $oItem->TRB_COD_PIS+0;
$nAlq_PIS = $oItem->TRB_PER_PIS+0;
$nCst_CFN = $oItem->TRB_COD_CFN+0;
$nAlq_CFN = $oItem->TRB_PER_CFN+0;
If ( EMPTY($sCod_NCM) ) {
$sCodErro = '234, Produto faltando NCM. '.$nCodigoP.'-'.$sDescric;
MYSQL_QUERY('ROLLBACK;');Return -2;
}
If ( EMPTY($sC_F_O_P) ) {
$sCodErro = '234, C.F.O.P. do produto está em falta. '.$nCodigoP.'-'.$sDescric;
MYSQL_QUERY('ROLLBACK;');Return -2;
}
If ( $nCstICMS==0 ) {
$sCodErro = '234, CST do ICMS está em falto no produto. '.$nCodigoP.'-'.$sDescric;
MYSQL_QUERY('ROLLBACK;');Return -2;
}
If ( $nCst_PIS==0 ) {
$sCodErro = '234, CST do PIS está em falto no produto. '.$nCodigoP.'-'.$sDescric;
MYSQL_QUERY('ROLLBACK;');Return -2;
}
If ( $nCst_CFN==0 ) {
$sCodErro = '234, CST do COFINS está em falto no produto. '.$nCodigoP.'-'.$sDescric;
MYSQL_QUERY('ROLLBACK;');Return -2;
}
$nFSI_Pre_Tot = $oItem->FAT_PRE_TOT;
$nFat_Pre_Unt = $nFSI_Pre_Tot / $nQtdItem;
$nSubTotal   += $nFSI_Pre_Tot;
$nFSI_Imp_Tot = CalcularIBPT($nCodigoP,$nFSI_Pre_Tot);
$nImpTotal   += $nFSI_Imp_Tot;
$sTexto_CFe .=
'[Produto'.Str_Zero($nCnt_Item,3).']'.Pular_Linha.
'cProd='.$sCodigos.Pular_Linha.
'xProd='.RemoveAcentos($sDescric).Pular_Linha.
'cEAN='.Pular_Linha.
'NCM='.$sCod_NCM.Pular_Linha.
'CFOP='.$sC_F_O_P.Pular_Linha.
'uCom='.$sUnidade.Pular_Linha.
'Combustivel=0'.Pular_Linha.
'qCom='.NUMBER_FORMAT($nQtdItem,3,',','').Pular_Linha.
'vUnCom='.FormatoMoeda($nFat_Pre_Unt).Pular_Linha.
'indRegra=A'.Pular_Linha.
'vDesc=0'.Pular_Linha.
'vOutro=0'.Pular_Linha.
'vItem12741='.FormatoMoeda($nFSI_Imp_Tot).Pular_Linha.
'[ICMS'.Str_Zero($nCnt_Item,3).']'.Pular_Linha.
'Orig='.$nCod_Ori.Pular_Linha.
'CST='.$nCstICMS.Pular_Linha.
'[PIS'.Str_Zero($nCnt_Item,3).']'.Pular_Linha.
'CST='.Str_Zero($nCst_PIS,2).Pular_Linha.
'PISAliq='.$nAlq_PIS.Pular_Linha.
'[COFINS'.Str_Zero($nCnt_Item,3).']'.Pular_Linha.
'CST='.Str_Zero($nCst_CFN,2).Pular_Linha.
'COFINSAliq='.$nAlq_CFN.Pular_Linha.
'';
$aDados_Item =
ARRAY(
'FSI_CODITEM'=>$sCodigos      ,
'FSI_DESITEM'=>$sDescric      ,
'FSI_COD_EAN'=>'',
'FSI_ALIQUOT'=>$nAlqICMS      ,
'FSI_QTD_ITE'=>$nQtdItem      ,
'FSI_PRE_TOT'=>$nFSI_Pre_Tot  ,
'FSI_IMP_TOT'=>$nFSI_Imp_Tot  ,
'FSI_PRE_TIP'=>$sFatPreT      ,
'FSI_UNIDADE'=>$sUnidade      ,
'FSI_COD_NCM'=>$sCod_NCM      ,
'FSI_COD_CFO'=>$sC_F_O_P      ,
'FSI_PIS_CST'=>$nCst_PIS      ,
'FSI_PIS_ALQ'=>$nAlq_PIS      ,
'FSI_CFN_CST'=>$nCst_CFN      ,
'FSI_CFN_ALQ'=>$nAlq_CFN      ,
'FSI_ORIGEM_'=>$nCod_Ori      ,
'FSI_ICM_CST'=>$nCstICMS        
);
$aLista_dos_Itens[$oItem->FAT_CODIGOI] = $aDados_Item;
}
$nValor_Desc_Acre = $nValorAcre -$nValorDesc;
If ( $nValor_Desc_Acre>0 ) {
$sTexto_CFe .=
'[DescAcrEntr]'.Pular_Linha.
'vAcresSubtot='.FormatoMoeda($nValor_Desc_Acre).Pular_Linha.
'';
}ElseIf ( $nValor_Desc_Acre<0 ) {
$sTexto_CFe .=
'[DescAcrEntr]'.Pular_Linha.
'vDescSubtot='.FormatoMoeda(-$nValor_Desc_Acre).Pular_Linha.
'';
}
$sTexto_CFe .=
'[Total]'.Pular_Linha.
'vCFeLei12741='.FormatoMoeda($nImpTotal).Pular_Linha.
'';
ASORT($aPagamentos);
$nCnt_Pag = 0;
$sFSC_Rec_Mod = '';
ForEach ( $aPagamentos As $sIndiceECF=>$nValorPagM ) {
If ($nValorPagM==0) {CONTINUE;}
$nCnt_Pag++;
$sFSC_Rec_Mod .= $sIndiceECF.','.$aCadastro_MPGInd[$sIndiceECF]['MPG_DESCRIC'].','.$nValorPagM.';';
$sTexto_CFe .=
'[Pagto'.Str_Zero($nCnt_Pag,3).']'.Pular_Linha.
'cMP='.Str_Zero($sIndiceECF,2).Pular_Linha.
'vMP='.FormatoMoeda($nValorPagM).Pular_Linha.
'';
}
$nTotal_Liq = ($nSubTotal+($nValorAcre-$nValorDesc));
If ( $ImpFiscal->SAT_CriarEnviarCfe($sTexto_CFe) ) {
$aSAT_Resposta = EXPLODE('|',$ImpFiscal->sACBR_Resposta);
$sCfe_ArquvXML = SUBSTR($aSAT_Resposta[11],STRPOS($aSAT_Resposta[11],CHR(13).CHR(10).'Arquivo=')+10 ) ;
$sCfe_ArquvXML = SUBSTR($sCfe_ArquvXML,0,STRPOS($sCfe_ArquvXML,'.xml')+4) ;
$sCfe_TextoXML = SUBSTR($aSAT_Resposta[11],STRPOS($aSAT_Resposta[11],CHR(13).CHR(10).'XML=')+6 ) ;
$bAmbienteDsv  =(ExtXML( $sCfe_TextoXML          ,'tpAmb')+0)==2;
$nFSC_Cod_COO  = ExtXML( $sCfe_TextoXML          ,'nCFe')+0;
$sFSC_ECF_Ser  = ExtXML( $sCfe_TextoXML          ,'nserieSAT');
$sFSC_ECF_Mod  = 'SAT.CFe '.ExtXML($sCfe_TextoXML,'mod');
$sFSC_DT_Real  = ExtXML($sCfe_TextoXML,'dEmi').' '.ExtXML($sCfe_TextoXML,'hEmi');
$sFSC_DT_Real  = SUBSTR($sFSC_DT_Real,0,4).'-'.SUBSTR($sFSC_DT_Real,4,2).'-'.SUBSTR($sFSC_DT_Real,6,2).' '.
SUBSTR($sFSC_DT_Real,9,2).':'.SUBSTR($sFSC_DT_Real,11,2).'-'.SUBSTR($sFSC_DT_Real,13,2);
$ImpFiscal->SAT_ImprimirExtratoVenda($sCfe_ArquvXML);
$sSQLQuery =
'INSERT INTO fiscal_cfe('.
'CFE_TXT_XML,CFE_ARQ_XML'.
') VALUES ('.
SQL_Bin($sCfe_TextoXML).','.
SQL_Bin($sCfe_ArquvXML).' '.
');';
MYSQL_QUERY($sSQLQuery) Or $sCodErro='5000, ERRO SQL: '.MYSQL_ERROR().', '.$sSQLQuery;
If ( !EMPTY($sCodErro) ) {MYSQL_QUERY('ROLLBACK;');Return -2;}
$nFSC_Cod_CFE = MYSQL_INSERT_ID();
$nFSC_CodigoI = SQLVarConfig('FISCAL_GERAL_SEQCOD',True)+0;
SQLVarConfigG('FISCAL_GERAL_SEQCOD',$nFSC_CodigoI+1);
$sSQLQuery =
'INSERT INTO fiscal_geral('.
'FSC_CODIGOI,FSC_COD_EMP,FSC_CREGIME,FSC_CFATGER,FSC_COD_FUN,FSC_DT_REAL,FSC_DT_TRAB,FSC_NOMECLI,FSC_CPF_CLI,'.
'FSC_ENDECLI,FSC_COD_COO,FSC_ECF_SER,FSC_ECF_MOD,FSC_COD_CFE,FSC_SBTOTAL,FSC_ACRESCI,FSC_DESCONT,FSC_REC_MOD,'.
'FSC_TOT_LIQ'.
') VALUES ('.
$nFSC_CodigoI.','.
$Dados_Empresa['EMP_CODIGO'].','.
$Dados_Empresa['EMP_REGIME'].','.
(@$vDados['FAT_CODIGOI']+0).','.
$R_CadFuncionario->FUN_CODIGO.','.
"'".$sFSC_DT_Real."',".
"'".$sData_Trabalho."',".
"'',".
"'".$sCli_CPFCNPJ."',".
"'',".
"'".$nFSC_Cod_COO."',".
"'".$sFSC_ECF_Ser."',".
"'".$sFSC_ECF_Mod."',".
$nFSC_Cod_CFE.','.
"'".$nSubTotal."',".
"'".$nValorAcre."',".
"'".$nValorDesc."',".
"'".$sFSC_Rec_Mod."',".
"'".$nTotal_Liq."'".
'); ';
MYSQL_QUERY($sSQLQuery) Or $sCodErro='5000, ERRO SQL: '.MYSQL_ERROR().', '.$sSQLQuery;
If ( !EMPTY($sCodErro) ) {MYSQL_QUERY('ROLLBACK;');Return -2;}
ForEach ($aLista_dos_Itens As $aDados_Item) {
$nFSI_Imp_Tot = CalcularIBPT($nCodigoP,$aDados_Item['FSI_PRE_TOT']);
$nFSI_CodigoI = SQLVarConfig('FISCAL_ITEM_SEQCOD',True)+0;
SQLVarConfigG('FISCAL_ITEM_SEQCOD',$nFSI_CodigoI+1);
$sSQLQuery =
'INSERT INTO fiscal_item('.
'FSI_CODIGOI,FSI_CODFISC,FSI_CODITEM,FSI_DESITEM,FSI_ALIQUOT,FSI_COD_ECF,FSI_QTD_ITE,FSI_PRE_TOT,'.
'FSI_IMP_TOT,FSI_PRE_TIP,FSI_UNIDADE,FSI_COD_NCM,FSI_COD_CFO,FSI_PIS_CST,FSI_PIS_ALQ,FSI_CFN_CST,'.
'FSI_CFN_ALQ,FSI_ORIGEM_,FSI_COD_EAN,FSI_ICM_CST'.
') VALUES ('.
$nFSI_CodigoI.','.
$nFSC_CodigoI.','.
SQL_Bin($aDados_Item['FSI_CODITEM']).','.
SQL_Bin($aDados_Item['FSI_DESITEM']).','.
"'".($aDados_Item['FSI_ALIQUOT']+0)."',".
"'',".
"'".($aDados_Item['FSI_QTD_ITE']+0)."',".
"'".($aDados_Item['FSI_PRE_TOT']+0)."',".
"'".($aDados_Item['FSI_IMP_TOT']+0)."',".
"'".($aDados_Item['FSI_PRE_TIP']+0)."',".
"'".$aDados_Item['FSI_UNIDADE']   ."',".
"'".$aDados_Item['FSI_COD_NCM']   ."',".
"'".($aDados_Item['FSI_COD_CFO']+0)."',".
"'".($aDados_Item['FSI_PIS_CST']+0)."',".
"'".($aDados_Item['FSI_PIS_ALQ']+0)."',".
"'".($aDados_Item['FSI_CFN_CST']+0)."',".
"'".($aDados_Item['FSI_CFN_ALQ']+0)."',".
"'".($aDados_Item['FSI_ORIGEM_']+0)."',".
"'".$aDados_Item['FSI_COD_EAN']   ."',".
"'".($aDados_Item['FSI_ICM_CST']+0)."' ".
');';
MYSQL_QUERY($sSQLQuery) Or $sCodErro='5000, ERRO SQL: '.MYSQL_ERROR().', '.$sSQLQuery;
If ( !EMPTY($sCodErro) ) {MYSQL_QUERY('ROLLBACK;');Return -2;}
}
}Else {
$sCodErro = '210, ACBR SAT - Cfe rejeitada. '.$ImpFiscal->sACBR_Erro;
MYSQL_QUERY('ROLLBACK;');
Return -2;
}
}
MYSQL_QUERY('COMMIT;');
Info_Evento('Conta do local '.$aR_FatGeral['FAT_NUM_MES'].' recebida '.(@$vDados['EMITIR_FISCAL'] ?'e cupom fiscal emitido ('.@$nFSC_Cod_COO.') ': '').'com sucesso.',0);
Return ARRAY( 'RECEBIDO'=>1,'TROCO'=>$nTroco_Receb,'SEQCAIXA'=>$nSeqCaixa,'FSC_CODIGOI='.(@$nFSC_CodigoI+0),'CFE_AMBHOM'=>(@$bAmbienteDsv+0) );
BREAK;
CASE 'CNT_TEXTO':
Return MontaCupom_Rec('fat_geral.FAT_CODIGOI='.$vDados['FAT_CODIGOI'],True,True);
BREAK;
CASE 'CNT_IMPRIMIR':
Return GerarImp_Cupom($vDados['FAT_CODIGOI'],SQLVarConfig('GARCOM_CLIPPER_ARQ_EXPORTA2'));
BREAK;
}
Return -1;
}
Function Modulo_Caixa_Fun($s_AcaoMd,$vDados) {
Global $Dados_Empresa,$sCodErro,$sData_Trabalho;
SWITCH ($s_AcaoMd) {
CASE 'PUXAR_SEQ':
$nSeqCaixa = PuxarCaixaAberto(@$vDados+0);
Return $nSeqCaixa;
BREAK;
CASE 'ABRIR':
$nSeqCaixa = PuxarCaixaAberto(@$vDados+0);
If ( $nSeqCaixa>0 ) {
$sCodErro = '302, Erro: Caixa já está aberto.';
Return -1;
}
$nSeqCaixa = SQLVarConfig('MOV_CAIXA_SEQCOD')+0;
SQLVarConfigG('MOV_CAIXA_SEQCOD',$nSeqCaixa+1);
$sSQLQuery =
'INSERT INTO mov_caixa('.
'MVC_SQCAIXA, MVC_COD_FUN, MVC_DATAFIC, MVC_DATAMOV, MVC_TIPOMOV, MVC_VALORMV'.
') VALUES ('.
$nSeqCaixa.','.
(@$vDados+0).','.
"'".$sData_Trabalho."',".
"'".DATE('Y-m-d H:i:s')."',".
'0,'.
'0'.
'); ';
MYSQL_QUERY($sSQLQuery) or die(MYSQL_ERROR().' '.$sSQLQuery);
Return $nSeqCaixa;
BREAK;
CASE 'FECHAR':
$nSeqCaixa = PuxarCaixaAberto(@$vDados+0);
If ( $nSeqCaixa==0 ) {
$sCodErro = '312, Erro: Caixa já está fechado.';
Return -1;
}
$sSQLQuery =
'INSERT INTO mov_caixa('.
'MVC_SQCAIXA, MVC_COD_FUN, MVC_DATAFIC, MVC_DATAMOV, MVC_TIPOMOV, MVC_VALORMV'.
') VALUES ('.
$nSeqCaixa.','.
(@$vDados+0).','.
"'".$sData_Trabalho."',".
"'".DATE('Y-m-d H:i:s')."',".
'1,'.
'0'.
'); ';
MYSQL_QUERY($sSQLQuery) or die(MYSQL_ERROR().' '.$sSQLQuery);
Return 0;
BREAK;
CASE 'OPE_CRDDEB':
$nSeqCaixa = PuxarCaixaAberto(@$vDados['FUN_CODIGOI']+0);
If ( $nSeqCaixa==0 ) {
$sCodErro = '312, Erro: Caixa já está fechado.';
Return -1;
}
$sSQLQuery =
'INSERT INTO mov_caixa('.
'MVC_SQCAIXA, MVC_COD_FUN, MVC_DATAFIC, MVC_DATAMOV, MVC_TIPOMOV, MVC_VALORMV, MVC_PARAMET'.
') VALUES ('.
$nSeqCaixa.','.
(@$vDados['FUN_CODIGOI']+0).','.
"'".$sData_Trabalho."',".
"'".DATE('Y-m-d H:i:s')."',".
(@$vDados['MVC_CREDITO'] ?'3': '2').','.
"'".(@$vDados['MVC_VALORMV']+0)."',".
SQL_Bin(@$vDados['MVC_PARAMET']).
');';
MYSQL_QUERY($sSQLQuery) or die(MYSQL_ERROR().' '.$sSQLQuery);
Return 0;
BREAK;
}
Return -1;
}
Function Modulo_Fiscal($s_AcaoMd,$vDados) {
Global $Dados_Empresa,$sCodErro,$sData_Trabalho;
SWITCH ($s_AcaoMd) {
CASE 'TIPO_TERMINAL':
$nTipoFiscal = Terminal_e_Fiscal(@$vDados['IP_CLIENTE']);
Return $nTipoFiscal;
BREAK;
}
Return -1;
}
Function Modulo_Sistema($s_AcaoMd,$vDados) {
Global $Dados_Empresa,$sCodErro,$sData_Trabalho;
$sChaveS = '(- SIMSOFT -) :: (-SOFTWARE-)';
$sPar_Imp = '';
$dDta_Hoj = Date( 'Y-m-d');
$nDta_Hoj = (DATE('w',STRTOTIME($dDta_Hoj))+0);
$nDta_Hoj = Str_Zero($nDta_Hoj,2);
If ($nDta_Hoj=='01'OR $nDta_Hoj=='03'OR $nDta_Hoj=='05'OR $nDta_Hoj=='07'OR $nDta_Hoj=='09') {
$bDia_Par = True;
}Else {
$bDia_Par = False;
}
$sPar_Imp = ($bDia_Par ?'01':'02');
SWITCH ($s_AcaoMd) {
CASE 'VER_LICENCA':
$nDia_Uso = SQLVarConfig('CFG_T_D_U');
If ( STRLEN($nDia_Uso)>10 ) {
$nDia_Uso = LibSiS_DEC($nDia_Uso,$sChaveS)+0;
}
$dDta_Ins = SQLVarConfig('CFG_T_D_I');
If ( STRLEN($dDta_Ins)>10 ) {
$nDta_Ins = STRTOTIME(LibSiS_DEC($dDta_Ins,$sChaveS));
$dDta_Ins = DATE('d/m/Y',$nDta_Ins);
}
$nDta_Exp = $nDta_Ins +( $nDia_Uso * 24 * 60 * 60 );
$dDta_Exp = DATE('d/m/Y',$nDta_Exp);
$nDia_Rst = ($nDta_Exp / (24 * 60 * 60)) -(MKTIME(0,0,0) / (24 * 60 * 60));
$sChaveIt = LibSiS_DEC(SQLVarConfig('CFG_CHVINT'),$sChaveS);
Return 'DATA_INS='.$dDta_Ins.';DATA_EXP='.$dDta_Exp.';DIAS_RESTANTE='.$nDia_Rst.';CHAVE_INT='.$sChaveIt.';TIPO_CHVDIA='.$sPar_Imp.';';
BREAK;
CASE 'REGISTRAR_LICENCA':
$sResultado = G_CHAVEINT( $Dados_Empresa['EMP_CODIGO'],NULL ,NULL ,12 ,2 ,TRIM($vDados),0);
SWITCH ($sResultado) {
CASE 'A':
$sCodErro = '140, Esta chave não pertence a este cliente, verifique.';
BREAK;
CASE 'B':
$sCodErro = '141, Seu computador está com a data atrazada. A liberação da chave não será permitida.';
BREAK;
CASE 'C':
$sCodErro = '142, Chave já expirou.';
BREAK;
CASE 'D':
$sCodErro = '143, Chave Inválida.';
BREAK;
DEFAULT:
Return 'CHAVE REGISTRADA COM SUCESSO';
}
BREAK;
CASE 'REG_CHAVE_MANUAL':
$_Sen_Ins = STRTOUPPER(TRIM($vDados));
$_Sen_Ins = CRIP_SENHA( 2,$_Sen_Ins ,0 ,$bDia_Par );
If (STRLEN($_Sen_Ins)>0 AND STRLEN($_Sen_Ins)==4) {
$_Dia_Uso = $_Sen_Ins;
$_Tmp_Uso = LibSiS_ENC( $_Dia_Uso,$sChaveS);
$_Tmp_Ins = LibSiS_ENC( Date('Y-m-d'),$sChaveS);
SQLVarConfigG('CFG_T_D_U',$_Tmp_Uso);
SQLVarConfigG('CFG_T_D_I',$_Tmp_Ins);
Return 'CHAVE REGISTRADA COM SUCESSO';
}Else {
$sCodErro = '150, Esta chave é inválida.';
}
BREAK;
}
Return -1;
}
Function LibSis_ENC($decrypted,$password,$salt='!kQm*fF3pXe1Kbm%9') {
$key = hash('SHA256',$salt .$password,true);
srand();$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),MCRYPT_RAND);
if (strlen($iv_base64 = rtrim(base64_encode($iv),'=')) != 22) return false;
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$decrypted .md5($decrypted),MCRYPT_MODE_CBC,$iv));
return $iv_base64 .$encrypted;
}
Function LibSiS_DEC($encrypted,$password,$salt='!kQm*fF3pXe1Kbm%9') {
$key = hash('SHA256',$salt .$password,true);
$iv = base64_decode(substr($encrypted,0,22) .'==');
$encrypted = substr($encrypted,22);
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,base64_decode($encrypted),MCRYPT_MODE_CBC,$iv),"\0\4");
$hash = substr($decrypted,-32);
$decrypted = substr($decrypted,0,-32);
if (md5($decrypted) != $hash) return false;
return $decrypted;
}
Function Liberacao_Sistema( $nOpcaoAcao=0 ) {
$sSerial = SHELL_EXEC('vol');
$sSerial = SUBSTR($sSerial,STRPOS($sSerial,'volume '.CHR(130).' ')+9,9);
$sChaveS = '(- SIMSOFT -) :: (-SOFTWARE-)';
If ( $nOpcaoAcao==0 ) {
$sChave_Sistema = SQLVarConfig('SISTEMA_LIC_LIB');
$aChaves = EXPLODE(';',$sChave_Sistema.';');
ForEach ($aChaves As $sChave_Sistema) {
If ( STRLEN($sChave_Sistema)>10 ) {
$sChave_Sistema = LibSiS_DEC($sChave_Sistema,$sChaveS);
}Else {
$sChave_Sistema = '';
}
$aTMP = EXPLODE(';',$sChave_Sistema);
$bLiberado = False;
ForEach ( $aTMP as $sTMP ) {
If ( SUBSTR($sTMP,0,10)=='SERIAL_HD=') {
$bLiberado = ( SUBSTR($sTMP,10)==$sSerial );
}
}
If ($bLiberado) {BREAK;}
}
Return $bLiberado;
}ElseIf ( $nOpcaoAcao==1 ) {
$sChave_Sistema =
'LIC_SERIE='.GeraChave(20).';'.
'DATA_HORA='.DATE('d/m/Y H:i:s').';'.
'SERIAL_HD='.$sSerial.';'.
'';
$sChave_Sistema = LibSiS_ENC($sChave_Sistema,$sChaveS);
$sChave_SistemaA = SQLVarConfig('SISTEMA_LIC_LIB');
If ( STRLEN($sChave_SistemaA)>10 ) {
$sChave_Sistema = $sChave_SistemaA.';'.$sChave_Sistema;
}
Return SQLVarConfigG('SISTEMA_LIC_LIB',$sChave_Sistema);
}ElseIf ( $nOpcaoAcao==3 ) {
Return SQLVarConfigG('SISTEMA_LIC_LIB','');
}
}
?>
