unit Ex_ConfereEncerrantes;
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TFrmTotais = class(TForm)
    GroupBoxEncerrantes: TGroupBox;
    ChBoxBico1: TCheckBox;
    EdtTotBiA: TEdit;
    CbBoxMabA: TComboBox;
    CbBoxBoA: TComboBox;
    CbBoxBiA: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    EdtTotBiB: TEdit;
    CbBoxBiB: TComboBox;
    CbBoxBoB: TComboBox;
    CbBoxMabB: TComboBox;
    ChBoxBico2: TCheckBox;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    EdtTotBiC: TEdit;
    CbBoxBiC: TComboBox;
    CbBoxBoC: TComboBox;
    CbBoxMabC: TComboBox;
    ChBoxBico3: TCheckBox;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    EdtTotBiD: TEdit;
    CbBoxBiD: TComboBox;
    CbBoxBoD: TComboBox;
    CbBoxMabD: TComboBox;
    ChBoxBico4: TCheckBox;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    EdtTotBiE: TEdit;
    CbBoxBiE: TComboBox;
    CbBoxBoE: TComboBox;
    CbBoxMabE: TComboBox;
    ChBoxBico5: TCheckBox;
    BtnSolicitaTotais: TButton;
    BtnCancelaTotais: TButton;
    BtnExit: TButton;
    TimerTotalizador: TTimer;
    procedure BtnExitClick(Sender: TObject);
    procedure TimerTotalizadorTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BtnSolicitaTotaisClick(Sender: TObject);
    procedure BtnCancelaTotaisClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
//-------- Variáveis Globais --------------------------------
  	Cmd_Mab:Byte;					          // Var que conterá o número da Mab do Cmd
    Cmd_Bo:Byte;					          // Var que conterá o número da Bomba do Cmd
    Cmd_Bi:Byte;					          // Var que conterá o número do Bico do Cmd
    Segundos:Byte;					        // Var que conterá o número de segundos
    SolicitacaoAtiva:Byte;			    // Var para indicar se a solicitação está ativa.
    CmdEncerrantes:Byte;			      // Var para indicar que o cmd foi solicitado.
    BicoApelido:Byte;   			      // Var para indicar o número de bicos solicitados o encerrante
    MaxBicoApelido:Byte;			      // Var para indicar o número máximo de bicos para solicitar encerrante
//--- Funções Globais
    procedure ObtemEnderecos();     // Obtem endereços de Solicitação
    procedure EscreveTotais(); // Escreve nos edit os encerrantes de cada bico
end;
var
  FrmTotais: TFrmTotais;

implementation
uses Ex_Integracao_Delphi;// Add Form Principal
{$R *.dfm}
//------------------------------------------------------------------------------
procedure TFrmTotais.FormCreate(Sender: TObject);
begin
//--- Inicialização de Objetos
TimerTotalizador.Enabled := false;
//--- Inicialização de Variáveis
CmdEncerrantes 			:= 0;
SolicitacaoAtiva 		:= 0;
Segundos				    := 0;

//--- Inicialização de Objetos
TimerTotalizador.Enabled := false;

CbBoxMabA.ItemIndex  := 1;
CbBoxBoA.ItemIndex  := 1;
CbBoxBiA.ItemIndex  := 1;

CbBoxMabB.ItemIndex  := 1;
CbBoxBoB.ItemIndex  := 2;
CbBoxBiB.ItemIndex  := 1;

CbBoxMabC.ItemIndex  := 1;
CbBoxBoC.ItemIndex  := 3;
CbBoxBiC.ItemIndex  := 1;

CbBoxMabD.ItemIndex  := 1;
CbBoxBoD.ItemIndex  := 4;
CbBoxBiD.ItemIndex  := 1;

CbBoxMabE.ItemIndex  := 1;
CbBoxBoE.ItemIndex  := 5;
CbBoxBiE.ItemIndex  := 1;

EdtTotBiA.Text      := '0,00';
EdtTotBiB.Text      := '0,00';
EdtTotBiC.Text      := '0,00';
EdtTotBiD.Text      := '0,00';
EdtTotBiE.Text      := '0,00';
end;
//------------------------------------------------------------------------------
procedure TFrmTotais.BtnExitClick(Sender: TObject);
begin
  TimerTotalizador.Enabled := false;
  FrmMain.Display('Fechou Form Solicitação de Encerrantes');
  Close;
end;
//------------------------------------------------------------------------------
procedure TFrmTotais.ObtemEnderecos();
begin
  case (BicoApelido) of // Para este caso, Bico 1 começa em zero
    0://Bico Apelido, Bico 1
    begin
      Cmd_Mab:= CbBoxMabA.ItemIndex;
      Cmd_Bo := CbBoxBoA.ItemIndex;
      Cmd_Bi := CbBoxBiA.ItemIndex;
    end;

    1://Bico Apelido, Bico 2
    begin
      Cmd_Mab:= CbBoxMabB.ItemIndex;
      Cmd_Bo := CbBoxBoB.ItemIndex;
      Cmd_Bi := CbBoxBiB.ItemIndex;
    end;

    2://Bico Apelido, Bico 3
    begin
      Cmd_Mab:= CbBoxMabC.ItemIndex;
      Cmd_Bo := CbBoxBoC.ItemIndex;
      Cmd_Bi := CbBoxBiC.ItemIndex;
    end;

    3://Bico Apelido, Bico 4
    begin
      Cmd_Mab:= CbBoxMabD.ItemIndex;
      Cmd_Bo := CbBoxBoD.ItemIndex;
      Cmd_Bi := CbBoxBiD.ItemIndex;
    end;

    4://Bico Apelido, Bico 4
    begin
      Cmd_Mab:= CbBoxMabE.ItemIndex;
      Cmd_Bo := CbBoxBoE.ItemIndex;
      Cmd_Bi := CbBoxBiE.ItemIndex;
    end;
  end;
end;
//------------------------------------------------------------------------------
procedure TFrmTotais.EscreveTotais();
var tot :string;
begin

    Case (FrmMain.RespCdTot[Cmd_Mab,Cmd_Bo,Cmd_Bi]) of
      1:
        tot := Format('%8.1f',[FrmMain.RespTotal[Cmd_Mab,Cmd_Bo,Cmd_Bi] / 10]);

      2:
        tot := Format('%8.2f' ,[FrmMain.RespTotal[Cmd_Mab,Cmd_Bo,Cmd_Bi]/ 100]);

      3:
        tot := Format('%8.3f' ,[FrmMain.RespTotal[Cmd_Mab,Cmd_Bo,Cmd_Bi] / 1000]);
    End;

    case (BicoApelido) of
      1:
        EdtTotBiA.Text := tot;

      2:
        EdtTotBiB.Text := tot;

      3:
        EdtTotBiC.Text := tot;

      4:
        EdtTotBiD.Text := tot;

      5:
        EdtTotBiE.Text := tot;
    end;
end;
//------------------------------------------------------------------------------
procedure TFrmTotais.TimerTotalizadorTimer(Sender: TObject);
begin
  if(SolicitacaoAtiva = 1)Then
  begin
      if(CmdEncerrantes = 1)Then
      begin
          CmdEncerrantes := 0;  // Limpa Indicador de Comando
          ObtemEnderecos();     // Obtem Endereços para Solicitação
          if(FrmMain.Cesna.FcmSolicitaTotalizador(Cmd_Mab,Cmd_Bo,Cmd_Bi) <> 1)Then
          begin
              FrmMain.Display('Mab: ' + IntToStr(Cmd_Mab) + ' Bo: ' + IntToStr(Cmd_Bo) + ' Bi: ' + IntToStr(Cmd_Bi) + ' Erro - FcmSolicitaTotalizador - Conferência');
              TimerTotalizador.Enabled := false;
              Exit;
          end
          else
          begin
              FrmMain.FlagObtemTotal[Cmd_Bo] := true;// Seta Flag indicando a solicitação.
              inc(BicoApelido);
              Segundos :=0;
              FrmMain.Display('Mab: ' + IntToStr(Cmd_Mab) + ' Bo: ' + IntToStr(Cmd_Bo) + ' Bi: ' + IntToStr(Cmd_Bi) + ' OK - Solicita Totalizador');
          end;
      end
      else
      begin
          if((FrmMain.FlagObtemTotal[Cmd_Bo] <> false) and (Segundos <= 10))Then
          begin
            inc(Segundos);
            Exit;
          end
          else
          begin
              if((FrmMain.FlagObtemTotal[Cmd_Bo] = true) or (Segundos >= 10))Then
              begin
                  FrmMain.Display('Mab: ' + IntToStr(Cmd_Mab) + ' Bo: ' + IntToStr(Cmd_Bo) + ' Bi: ' + IntToStr(Cmd_Bi) + ' Erro - Não Obteve Encerrante');
                  if(BicoApelido = MaxBicoApelido)Then    // Verifica se tem mais solicitações
                  begin
                      TimerTotalizador.Enabled := false;  // Se não tem mais, então desliga timer.
                  end
                  else
                  begin
                      CmdEncerrantes := 1;
                  end;
              end
              else
              begin
                  FrmMain.Display('Mab: ' + IntToStr(Cmd_Mab  ) + ' Bo: ' + IntToStr(Cmd_Bo) + ' Bi: ' + IntToStr(Cmd_Bi) + ' OK - Obteve Encerrante');
                  EscreveTotais;
                  if(BicoApelido = MaxBicoApelido)Then    // Verifica se tem mais solicitações
                  begin
                      TimerTotalizador.Enabled := false;  // Se não tem mais, então desliga timer.
                  end
                  else
                  begin
                      CmdEncerrantes := 1;
                  end;
              end;
          end;
      end;
  end;
end;
//------------------------------------------------------------------------------
procedure TFrmTotais.BtnSolicitaTotaisClick(Sender: TObject);
begin
MaxBicoApelido := 0;// Zera Número máximo de Bicos

    if(ChBoxBico1.Checked = true)Then
    begin
        if((CbBoxMabA.ItemIndex < 1) or (CbBoxMabA.ItemIndex > 32))Then
        begin
            ShowMessage('ERROR\nValor Mab do Bico 1 está fora do range.\nValores devem se de 1 a 32');
            Exit;
        end;

        if((CbBoxBoA.ItemIndex < 1) or (CbBoxBoA.ItemIndex > 4))Then
        begin
            ShowMessage('ERROR\nValor BO do Bico 1 está fora do range.\nValores devem se de 1 a 4');
            Exit;
        end;

        if((CbBoxBiA.ItemIndex < 1) or (CbBoxBiA.ItemIndex > 4))Then
        begin
            ShowMessage('ERROR\nValor BI do Bico 1 está fora do range.\nValores devem se de 1 a 4');
            Exit;
        end;
        inc(MaxBicoApelido);
    end;

    if(ChBoxBico2.Checked = true)Then
    begin
        if((CbBoxMabB.ItemIndex < 1) or (CbBoxMabB.ItemIndex > 32))Then
        begin
            ShowMessage('ERROR\nValor Mab do Bico 2 está fora do range.\nValores devem se de 1 a 32');
            Exit;
        end;

        if((CbBoxBoB.ItemIndex < 1) or (CbBoxBoB.ItemIndex > 4))Then
        begin
            ShowMessage('ERROR\nValor BO do Bico 2 está fora do range.\nValores devem se de 1 a 4');
            Exit;
        end;

        if((CbBoxBiB.ItemIndex < 1) or (CbBoxBiB.ItemIndex > 4))Then
        begin
            ShowMessage('ERROR\nValor BI do Bico 2 está fora do range.\nValores devem se de 1 a 4');
            Exit;
        end;
        inc(MaxBicoApelido);
    end;

    if(ChBoxBico3.Checked = true)Then
    begin
        if((CbBoxMabC.ItemIndex < 1) or (CbBoxMabC.ItemIndex > 32))Then
        begin
            ShowMessage('ERROR\nValor Mab do Bico 3 está fora do range.\nValores devem se de 1 a 32');
            Exit;
        end;

        if((CbBoxBoC.ItemIndex < 1) or (CbBoxBoC.ItemIndex > 4))Then
        begin
            ShowMessage('ERROR\nValor BO do Bico 3 está fora do range.\nValores devem se de 1 a 4');
            Exit;
        end;

        if((CbBoxBiC.ItemIndex < 1) or (CbBoxBiC.ItemIndex > 4))Then
        begin
            ShowMessage('ERROR\nValor BI do Bico 3 está fora do range.\nValores devem se de 1 a 4');
            Exit;
        end;
        inc(MaxBicoApelido);
    end;

    if(ChBoxBico4.Checked = true)Then
    begin
        if((CbBoxMabD.ItemIndex < 1) or (CbBoxMabD.ItemIndex > 32))Then
        begin
            ShowMessage('ERROR\nValor Mab do Bico 4 está fora do range.\nValores devem se de 1 a 32');
            Exit;
        end;

        if((CbBoxBoD.ItemIndex < 1) or (CbBoxBoD.ItemIndex > 4))Then
        begin
            ShowMessage('ERROR\nValor BO do Bico 4 está fora do range.\nValores devem se de 1 a 4');
            Exit;
        end;

        if((CbBoxBiD.ItemIndex < 1) or (CbBoxBiD.ItemIndex > 4))Then
        begin
            ShowMessage('ERROR\nValor BI do Bico 5 está fora do range.\nValores devem se de 1 a 4');
            Exit;
        end;
        inc(MaxBicoApelido);
    end;

    if(ChBoxBico5.Checked = true)Then
    begin
        if((CbBoxMabE.ItemIndex < 1) or (CbBoxMabE.ItemIndex > 32))Then
        begin
            ShowMessage('ERROR\nValor Mab do Bico 5 está fora do range.\nValores devem se de 1 a 32');
            Exit;
        end;

        if((CbBoxBoE.ItemIndex < 1) or (CbBoxBoE.ItemIndex > 4))Then
        begin
            ShowMessage('ERROR\nValor BO do Bico 5 está fora do range.\nValores devem se de 1 a 4');
            Exit;
        end;

        if((CbBoxBiE.ItemIndex < 1) or (CbBoxBiE.ItemIndex > 4))Then
        begin
            ShowMessage('ERROR\nValor BI do Bico 5 está fora do range.\nValores devem se de 1 a 4');
            Exit;
        end;
        inc(MaxBicoApelido);
    end;

    if(MaxBicoApelido <> 0)Then
    begin
        BicoApelido               := 0;     // Limpa Bicos para Solicitação
        SolicitacaoAtiva          := 1;     // Habilita Solicitação
        CmdEncerrantes            := 1;     // Habilita Cmd Totalizador
        TimerTotalizador.Enabled  := true;  // Habilita Timer de Solicitação
    end;
end;
//------------------------------------------------------------------------------
procedure TFrmTotais.BtnCancelaTotaisClick(Sender: TObject);
begin
    CmdEncerrantes            := 0;     // Desabilita Cmd Totalizador
    SolicitacaoAtiva          := 0;     // Desabilita Solicitação
    TimerTotalizador.Enabled  := false; // Desabilita Timer de Solicitação
    FrmMain.Display('Solicitação Obtem Encerrantes - Cancelada');
end;
//------------------------------------------------------------------------------
end.
