unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.ComCtrls;

type
  TForm2 = class(TForm)
    edtCNPJ: TLabeledEdit;
    edtCartao: TLabeledEdit;
    edtAutorizacao: TLabeledEdit;
    edtData: TDateTimePicker;
    LinkLabel1: TLinkLabel;
    edtUsuario: TLabeledEdit;
    edtSenha: TLabeledEdit;
    Button1: TButton;
    Button2: TButton;
    TimerResposta: TTimer;
    Bevel1: TBevel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Confirmação: TTabSheet;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure TimerRespostaTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    function LerINI(aArquivo, aSessao, aTag: string): string;
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses System.IniFiles;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
  arq: TStringList;
begin

  try
    arq := TStringList.Create;

    arq.Add('[RECUPERACAO]');
    arq.Add('CNPJ='          + edtCNPJ.Text);
    arq.Add('LOGIN='         + edtUsuario.Text);
    arq.Add('SENHA='         + edtSenha.Text);
    arq.Add('CARTAO='        + edtCartao.Text);
    arq.Add('AUTORIZACAOID=' + edtAutorizacao.Text);
    arq.Add('DATA='          + DateToStr(edtData.Date));
    arq.Add('AMBIENTE=0'); // 0 homologaão e 1 Produção


    arq.SaveToFile('.\temp.txt');
    CopyFile('.\temp.txt', pWideChar('c:\temp\funcional\INTPOS.001'), False);
    DeleteFile('.\temp.txt');

    TimerResposta.Enabled := True;

  finally
    FreeAndNil(arq);
  end;

end;

procedure TForm2.TimerRespostaTimer(Sender: TObject);
var
  I, iReceitas, iProdutos: Integer;
  bErro:                   Boolean;
  sAux:                    string;
const
  arqRetorno = 'c:\temp\funcional\INTPOS.002';
begin

  if FileExists(arqRetorno) then
  begin
    TimerResposta.Enabled := False;
    // VERIFICA SE É UM ERRO
    bErro := ((LerINI(arqRetorno, 'AUTORIZACAO', 'MENSAGEMOPERADOR') <> '') or ((LerINI(arqRetorno, 'CONFIRMACAO', 'MENSAGEMOPERADOR') <> '')));

    if bErro then // é um arquivo de erro
    begin
      ShowMessage(LerINI(arqRetorno, 'AUTORIZACAO', 'MENSAGEMOPERADOR') + LerINI(arqRetorno, 'CONFIRMACAO', 'MENSAGEMOPERADOR'));
      DeleteFile(arqRetorno);
      Exit;

    end
    else if LerINI(arqRetorno, 'AUTORIZACAO', 'CNPJ') <> '' then // é uma recuperacao
    begin
      Memo1.Lines.Clear;
      Memo1.Lines.Add('-------------------- CABECALHO -----------------------');
      Memo1.Lines.Add('Data Hora   .: ' + LerINI(arqRetorno, 'AUTORIZACAO', 'DATA'));
      Memo1.Lines.Add('AutorizacaoID: ' + LerINI(arqRetorno, 'AUTORIZACAO', 'AUTORIZACAOID'));
      Memo1.Lines.Add('Valor Total..: ' + LerINI(arqRetorno, 'AUTORIZACAO', 'VALORTOTAL'));
      Memo1.Lines.Add('Pagto A Vista: ' + LerINI(arqRetorno, 'AUTORIZACAO', 'PAGAMENTOAVISTA'));
      Memo1.Lines.Add('Pafto Outros.: ' + LerINI(arqRetorno, 'AUTORIZACAO', 'PAGAMENTOCARTAOOUTRO'));
      Memo1.Lines.Add('Qtde Itens...: ' + LerINI(arqRetorno, 'AUTORIZACAO', 'TOTALPRODUTOS'));
      Memo1.Lines.Add('');

      // verifico quanto produtos tem e varro todos

      iProdutos := StrToInt(LerINI(arqRetorno, 'AUTORIZACAO', 'TOTALPRODUTOS'));
      iReceitas := StrToInt(LerINI(arqRetorno, 'AUTORIZACAO', 'TOTALRECEITAS'));

      Memo1.Lines.Add('-------------------- PRODUTOS -----------------------');
      for I := 0 to iProdutos - 1 do
      begin

        Memo1.Lines.Add('EAN.: '       + LerINI(arqRetorno, 'PRODUTO' + IntToStr(I), 'EAN'));
        Memo1.Lines.Add('Descricao.: ' + LerINI(arqRetorno, 'PRODUTO' + IntToStr(I), 'DESCRICAO'));
        Memo1.Lines.Add('PMC.......: ' + LerINI(arqRetorno, 'PRODUTO' + IntToStr(I), 'PMC'));
        Memo1.Lines.Add('Preço Unit: ' + LerINI(arqRetorno, 'PRODUTO' + IntToStr(I), 'PRECOUNITARIO'));
        Memo1.Lines.Add('Quantidade: ' + LerINI(arqRetorno, 'PRODUTO' + IntToStr(I), 'QUANTIDADE'));
        Memo1.Lines.Add('');

      end;

      if iReceitas > 0 then
      begin
        Memo1.Lines.Add('-------------------- RECEITAS -----------------------');
        for I := 0 to iReceitas - 1 do
        begin
          Memo1.Lines.Add('DATA....: '    + LerINI(arqRetorno, 'RECEITA' + IntToStr(I), 'DATA'));
          Memo1.Lines.Add('QTDE....: '    + LerINI(arqRetorno, 'RECEITA' + IntToStr(I), 'QUANTIDADE'));
          Memo1.Lines.Add('Conselho: '    + LerINI(arqRetorno, 'RECEITA' + IntToStr(I), 'CONSELHO'));
          Memo1.Lines.Add('Registro: '    + LerINI(arqRetorno, 'RECEITA' + IntToStr(I), 'REGISTRO'));
          Memo1.Lines.Add('UF Conselho: ' + LerINI(arqRetorno, 'RECEITA' + IntToStr(I), 'UFCONSELHO'));
          Memo1.Lines.Add('');
        end;
      end;

    end
    else if LerINI(arqRetorno, 'CONFIRMACAO', 'CNPJ') <> '' then // É UMA CONFIRMACAO
    begin

      Memo2.Lines.Clear;

      Memo2.Lines.Add('-------------------[CONFIRMACAO]-----------------------------');
      Memo2.Lines.Add('CNPJ   .: '            + LerINI(arqRetorno, 'CONFIRMACAO', 'CNPJ'));
      Memo2.Lines.Add('LOGIN   .: '           + LerINI(arqRetorno, 'CONFIRMACAO', 'LOGIN'));
      Memo2.Lines.Add('SENHA   .: '           + LerINI(arqRetorno, 'CONFIRMACAO', 'SENHA'));
      Memo2.Lines.Add('AUTORIZACAOID   .: '   + LerINI(arqRetorno, 'CONFIRMACAO', 'AUTORIZACAOID'));
      Memo2.Lines.Add('CARDBALANCE   .: '     + LerINI(arqRetorno, 'CONFIRMACAO', 'CARDBALANCE'));
      Memo2.Lines.Add('CARDPAIDVALUE   .: '   + LerINI(arqRetorno, 'CONFIRMACAO', 'CARDPAIDVALUE'));
      Memo2.Lines.Add('PAGAMENTOAVISTA   .: ' + LerINI(arqRetorno, 'CONFIRMACAO', 'PAGAMENTOAVISTA'));
      Memo2.Lines.Add('DATAVENDA   .: '       + LerINI(arqRetorno, 'CONFIRMACAO', 'DATAVENDA'));
      Memo2.Lines.Add('VALORTOTAL   .: '      + LerINI(arqRetorno, 'CONFIRMACAO', 'VALORTOTAL'));
      Memo2.Lines.Add('STATUS   .: '          + LerINI(arqRetorno, 'CONFIRMACAO', 'STAUTUS'));
      Memo2.Lines.Add('STATUSCODE   .: '      + LerINI(arqRetorno, 'CONFIRMACAO', 'STATUSCODE'));
      Memo2.Lines.Add('STATUSMENSAGEM   .: '  + LerINI(arqRetorno, 'CONFIRMACAO', 'STATUSMENSAGEM'));
      Memo2.Lines.Add('TOTALPRODUTOS   .: '   + LerINI(arqRetorno, 'CONFIRMACAO', 'TOTALPRODUTOS'));
      Memo2.Lines.Add('RECIBO   .: '          + LerINI(arqRetorno, 'CONFIRMACAO', 'RECIBO'));
      Memo2.Lines.Add('');

      Memo2.Lines.Add('PRODUTOS');
      iProdutos := StrToInt(LerINI(arqRetorno, 'CONFIRMACAO', 'TOTALPRODUTOS'));

      // percorrendo os prodrutos
      for I := 0 to iProdutos - 1 do
      begin
        Memo2.Lines.Add('[PRODUTO.: '   + LerINI(arqRetorno, 'PRODUTO' + IntToStr(I), 'EAN'));
        Memo2.Lines.Add('EAN.: '        + LerINI(arqRetorno, 'PRODUTO' + IntToStr(I), 'EAN'));
        Memo2.Lines.Add('DESCRICAO.: '  + LerINI(arqRetorno, 'PRODUTO' + IntToStr(I), 'DESCRICAO'));
        Memo2.Lines.Add('QUANTIDADE.: ' + LerINI(arqRetorno, 'PRODUTO' + IntToStr(I), 'QUANTIDADE'));
      end;

    end;
    // DeleteFile(arqRetorno);
  end;

end;

procedure TForm2.Button2Click(Sender: TObject);
var
  arq: TStringList;
begin

  try
    arq := TStringList.Create;

    arq.Add('[CONFIRMACAO]');
    arq.Add('CNPJ='          + edtCNPJ.Text);
    arq.Add('LOGIN='         + edtUsuario.Text);
    arq.Add('SENHA='         + edtSenha.Text);
    arq.Add('CARTAO='        + edtCartao.Text);
    arq.Add('AUTORIZACAOID=' + edtAutorizacao.Text);
    arq.Add('DATA='          + DateToStr(edtData.Date));
    arq.Add('AMBIENTE=0'); // 0 homologaão e 1 Produção


    arq.SaveToFile('.\temp.txt');
    CopyFile('.\temp.txt', pWideChar('c:\temp\funcional\INTPOS.001'), False);
    DeleteFile('.\temp.txt');

    TimerResposta.Enabled := True;

  finally
    FreeAndNil(arq);
  end;

end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  edtData.Date := now;
end;

function TForm2.LerINI(aArquivo, aSessao, aTag: string): string;
var
  ArqIni: TIniFile;
begin

  ArqIni := TIniFile.Create(aArquivo);
  try
    Result := ArqIni.ReadString(aSessao, aTag, '');
  finally
    ArqIni.Free;
  end;

end;

end.
