Boa tarde pessoal
Estou passando por um problema na homologação do Sitef com múltiplos cartões, teste 38:
- Valor da transação: 100,00
- Para esta transação a aplicação deve estar pronta para realizar o pagamento no cartão novamente, passar o restante em dinheiro ou cancelar toda a venda.
- Realizar uma transação de Crédito magnético com uma parte do valor da venda
- Selecionar a opção á vista
- Realizar o pagamento do restante do valor com cartão de Débito
- Desativar o SiTef
- Selecionar a opção á vista
- Após o retorno da mensagem para a aplicação, ativar o SiTef, fechar o restante do valor da venda em dinheiro e concluir a venda normalmente.
- A CliSiTef retornará o timeout do SiTef
- A aplicação deverá exibir a mensagem retornada para o operador e retornar para a tela de pagamentos, permitindo que o operador selecione cartão novamente, outra forma de pagamento ou cancele a venda.
- Verificar comandos de mensagem retornados.
- A transação será autorizada
- Há impressão de cupom.
Obtive a seguinte resposta deles:
Automação enviando uma função Finaliza para cada operação em uma venda de múltiplos cartões. Em uma venda de múltiplos cartões, deve ser enviado o mesmo número de CupomFiscal para todas as operações dentro da venda de múltiplos. Essas transações ficarão pendentes até a automação identificar que atingiu o valor total da venda, e então, enviará apenas uma função Finaliza com o mesmo número de CupomFiscal para confirmar todas as operações anteriores dentro da venda de múltiplos.
E quando houver desligamento da automação durante uma venda de múltiplos, quando a automação voltar ela deverá obter as transações pendentes e cancelar todas elas.
Analisando a AcbrTefD, função ConfirmarTransacoesPendentes percebi que é realmente enviada uma confirmação para cada transação:
procedure TACBrTEFD.ConfirmarTransacoesPendentes(ApagarRespostasPendentes: Boolean);
var
HouveConfirmacao: Boolean;
I : Integer;
begin
fTefClass.GravaLog( 'ConfirmarTransacoesPendentes' );
HouveConfirmacao := False;
I := 0;
while I < RespostasPendentes.Count do
begin
try
with RespostasPendentes do
begin
GPAtual := TipoGP; // Seleciona a Classe do GP
if not CNFEnviado then
begin
CNF( Rede, NSU, Finalizacao, DocumentoVinculado );
CNFEnviado := True;
HouveConfirmacao := True;
end;
if ApagarRespostasPendentes then
begin
ApagaEVerifica( ArqRespPendente );
ApagaEVerifica( ArqBackup );
end;
Inc( I ) ;
end;
except
{ Exceção Muda... Fica em Loop até conseguir confirmar e apagar Backup }
end;
end ;
try
if HouveConfirmacao and Assigned( fOnDepoisConfirmarTransacoes ) then
fOnDepoisConfirmarTransacoes( RespostasPendentes );
finally
if ApagarRespostasPendentes then
RespostasPendentes.Clear;
end;
end;
Alguém já passou por essa situação ? Teria que mudar esse código ?
Obrigado!