terça-feira, 4 de janeiro de 2011

TEF - Confirmando uma transação TEF

No passo anterior, realizamos uma venda de cupom fiscal com pagamento em cartão e fizemos nossa primeira transação TEF com impressão do comprovante. Agora, precisamos validar esta transação!

Vamos criar duas funções para isso:

- uma para confirmar a transação TEF (ConfirmaTransacao) e;
- outra para não confirmar a transação TEF (NaoConfirmaTransacao).

Ou seja, precisamos controlar estes dois processos, pois estaremos enfrentando situações onde a impressora passará por erros de comunicação (desligamentos) ou quedas de energia (veremos isso nas próximas edições).

Estaremos visualizando este código em dois exemplos básicos. Um desenvolvido em Delphi e outro em Visual Basic.

- Exemplo em Delphi

//////////////////////////////////////////////////////////
// Função: ConfirmaTransacao
// Objetivo: Confirmar a Transação TEF
// Parâmetros: não há
// Retorno: True para OK ou False para não OK
//////////////////////////////////////////////////////////
function ConfirmaTransacao: boolean;
var cLinhaArquivo, cConteudo: string;
    cArquivo: TextFile;
    lFlag : longbool;
begin
   cLinhaArquivo := '';
   cConteudo := '';
   AssignFile( cArquivo, 'C:\TEF_DIAL\RESP\INTPOS.001' );
   Reset( cArquivo );
   while not EOF( cArquivo ) do
      begin
         ReadLn( cArquivo, cLinhaArquivo );
         if ( copy( cLinhaArquivo, 1, 3 ) = '001' ) or
            ( copy( cLinhaArquivo, 1, 3 ) = '002' ) or
            ( copy( cLinhaArquivo, 1, 3 ) = '010' ) or
            ( copy( cLinhaArquivo, 1, 3 ) = '012' ) or
            ( copy( cLinhaArquivo, 1, 3 ) = '027' ) then
               cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
         if ( copy( cLinhaArquivo, 1, 3 ) = '999' ) then
            cConteudo := cConteudo + cLinhaArquivo;
      end;
   CloseFile( cArquivo );
   cConteudo := '000-000 = CNF' + #13 + #10 + cConteudo;
   AssignFile( cArquivo, 'INTPOS.001' );
   ReWrite( cArquivo );
   WriteLn( cArquivo, cConteudo );
   CloseFile( cArquivo );
   CopyFile( pchar( 'INTPOS.001' ),
             pchar( 'C:\TEF_DIAL\REQ\INTPOS.001' ), lFlag );
   DeleteFile( 'INTPOS.001' );
   if ( FileExists( 'C:\TEF_DIAL\RESP\INTPOS.STS' ) ) then
      DeleteFile( 'C:\TEF_DIAL\RESP\INTPOS.STS' );
   if ( FileExists( 'C:\TEF_DIAL\RESP\INTPOS.001' ) ) then
      DeleteFile( 'C:\TEF_DIAL\RESP\INTPOS.001' );
end;

//////////////////////////////////////////////////////////
// Função: NaoConfirmaTransacao
// Objetivo: Não Confirmar a Transação TEF
// Parâmetros: não há
// Retorno: True para OK ou False para não OK
//////////////////////////////////////////////////////////
function NaoConfirmaTransacao: boolean;
var cLinhaArquivo, cConteudo: string;
    cArquivo: TextFile;
   lFlag : longbool;
   cValor, cNomeRede, cNSU: string;
begin
   cLinhaArquivo := '';
   cConteudo := '';
   AssignFile( cArquivo, 'C:\TEF_DIAL\RESP\INTPOS.001' );
   Reset( cArquivo );
   while not EOF( cArquivo ) do
      begin
         ReadLn( cArquivo, cLinhaArquivo );
         if ( copy( cLinhaArquivo, 1, 3 ) = '001' ) then
            cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
         if ( copy( cLinhaArquivo, 1, 3 ) = '003' ) then
            cValor := copy( cLinhaArquivo, 11, Length( cLinhaArquivo ) - 10 );
         if ( copy( cLinhaArquivo, 1, 3 ) = '010' ) then
            begin
               cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
               cNomeRede := copy( cLinhaArquivo, 11,
                           Length( cLinhaArquivo ) - 10 );
            end;
         if ( copy( cLinhaArquivo, 1, 3 ) = '012' ) then
            begin
               cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
               cNSU := copy( cLinhaArquivo, 11, Length( cLinhaArquivo ) - 10 );
            end;
         if ( copy( cLinhaArquivo, 1, 3 ) = '027' ) then
            cConteudo := cConteudo + cLinhaArquivo + #13 + #10;
         if ( copy( cLinhaArquivo, 1, 3 ) = '999' ) then
            cConteudo := cConteudo + cLinhaArquivo;
      end;
   CloseFile( cArquivo );
   cConteudo := '000-000 = NCN' + #13 + #10 + cConteudo;
   AssignFile( cArquivo, 'INTPOS.001' );
   ReWrite( cArquivo );
   WriteLn( cArquivo, cConteudo );
   CloseFile( cArquivo );
   CopyFile( pchar( 'INTPOS.001' ),
             pchar( 'C:\TEF_DIAL\REQ\INTPOS.001' ), lFlag );
   DeleteFile( 'INTPOS.001' );
   if ( FileExists( 'C:\TEF_DIAL\RESP\INTPOS.STS' ) ) then
      DeleteFile( 'C:\TEF_DIAL\RESP\INTPOS.STS' );
   if ( FileExists( 'C:\TEF_DIAL\RESP\INTPOS.001' ) ) then
      DeleteFile( 'C:\TEF_DIAL\RESP\INTPOS.001' );

   Application.MessageBox( pchar( 'Cancelada a Transação' + #13 + #13 +
      'Rede: ' + cNomeRede + #13 + 'Doc Nº: ' + cNSU + #13 + 'Valor: ' +
      FormatFloat( '#,##0.00', StrToFloat( cValor ) / 100 ) ), 'Atenção',
      MB_IconInformation + MB_OK );
end;

Nenhum comentário:

Postar um comentário