//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "U_ObtemTotais.h"
#include "U_Main_Ex_Integracao.h"// Include Main
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFrmTotais *FrmTotais;
//---------------------------------------------------------------------------
__fastcall TFrmTotais::TFrmTotais(TComponent* Owner)
	: TForm(Owner)
{
FrmTotais->TimerTotalizador->Enabled  	= false;// Timer exemplo obtem totais das bombas
}
//---------------------------------------------------------------------------
void __fastcall TFrmTotais::FormCreate(TObject *Sender)
{
//--- Inicialização de Objetos
CbBoxSlA->ItemIndex  	= 1;
CbBoxBoA->ItemIndex  	= 1;
CbBoxBiA->ItemIndex  	= 1;

CbBoxSlB->ItemIndex  	= 1;
CbBoxBoB->ItemIndex  	= 1;
CbBoxBiB->ItemIndex  	= 2;

CbBoxSlC->ItemIndex  	= 1;
CbBoxBoC->ItemIndex  	= 1;
CbBoxBiC->ItemIndex  	= 3;

CbBoxSlD->ItemIndex  	= 1;
CbBoxBoD->ItemIndex  	= 1;
CbBoxBiD->ItemIndex  	= 4;

CbBoxSlE->ItemIndex  	= 1;
CbBoxBoE->ItemIndex  	= 2;
CbBoxBiE->ItemIndex  	= 1;

EdtTotBiA->Text 		= "0,00";
EdtTotBiB->Text 		= "0,00";
EdtTotBiC->Text 		= "0,00";
EdtTotBiD->Text 		= "0,00";
EdtTotBiE->Text 		= "0,00";

//--- Inicialização de Variáveis
memset(FlagObtemTotal,false,sizeof(FlagObtemTotal));
CmdEncerrantes 			= false;
SolicitacaoAtiva 		= false;
Segundos				= 0;
}
//---------------------------------------------------------------------------
void __fastcall TFrmTotais::BtnExitClick(TObject *Sender)
{
	TimerTotalizador->Enabled = false;
	FrmMain->Display("Fechou Form Obtem Encerrantes");
	Close();
}
//---------------------------------------------------------------------------
void __fastcall TFrmTotais::ObtemEnderecos()
{
	switch(BicoApelido)
	{
		case 0:// Bico 1 Apelido
				Cmd_Sl = CbBoxSlA->ItemIndex;
				Cmd_Bo = CbBoxBoA->ItemIndex;
				Cmd_Bi = CbBoxBiA->ItemIndex;
		break;

		case 1:// Bico 2 Apelido
				Cmd_Sl = CbBoxSlB->ItemIndex;
				Cmd_Bo = CbBoxBoB->ItemIndex;
				Cmd_Bi = CbBoxBiB->ItemIndex;
		break;

		case 2:// Bico 3 Apelido
				Cmd_Sl = CbBoxSlC->ItemIndex;
				Cmd_Bo = CbBoxBoC->ItemIndex;
				Cmd_Bi = CbBoxBiC->ItemIndex;
		break;

		case 3:// Bico 4 Apelido
				Cmd_Sl = CbBoxSlD->ItemIndex;
				Cmd_Bo = CbBoxBoD->ItemIndex;
				Cmd_Bi = CbBoxBiD->ItemIndex;
		break;

		case 4:// Bico 5 Apelido
				Cmd_Sl = CbBoxSlE->ItemIndex;
				Cmd_Bo = CbBoxBoE->ItemIndex;
				Cmd_Bi = CbBoxBiE->ItemIndex;
		break;
	}
}
//---------------------------------------------------------------------------
void __fastcall TFrmTotais::EscreveTotais()
{
unsigned char 	TmpTotal[10];
char 			RespTotal[10];

	memset(TmpTotal,0x00,sizeof(TmpTotal)); // Inicializa Var
	memset(RespTotal,0x00,sizeof(RespTotal)); // Inicializa Var

	if(FrmMain->RespTotais[Cmd_Sl][Cmd_Bo][Cmd_Bi] != 0)
	{
		ltoa(FrmMain->RespTotais[Cmd_Sl][Cmd_Bo][Cmd_Bi], TmpTotal,10);
		strcpy(RespTotal,TmpTotal);
		switch(FrmMain->RespCdTot[Cmd_Sl][Cmd_Bo][Cmd_Bi])
		{
			case 0:
				// sem casa decimal, ou seja, sem vírgula.
			break;

			case 1:
				RespTotal[strlen(TmpTotal)-1] = ',';
				RespTotal[strlen(TmpTotal)] = TmpTotal[strlen(TmpTotal) - 1];
			break;

			case 2:
				RespTotal[strlen(TmpTotal)-2] = ',';
				RespTotal[strlen(TmpTotal)-1] = TmpTotal[strlen(TmpTotal) - 2];
				RespTotal[strlen(TmpTotal)] = TmpTotal[strlen(TmpTotal) - 1];
			break;

			case 3:
				RespTotal[strlen(TmpTotal)-3] = ',';
				RespTotal[strlen(TmpTotal)-2] = TmpTotal[strlen(TmpTotal) - 3];
				RespTotal[strlen(TmpTotal)-1] = TmpTotal[strlen(TmpTotal) - 2];
				RespTotal[strlen(TmpTotal)] = TmpTotal[strlen(TmpTotal) - 1];
			break;
		}
	}
	else
		strcpy(RespTotal,"0,00");

	switch(BicoApelido)// Como já foi incrementado começa em 1
	{
		case 1:// Bico 1 Apelido
			EdtTotBiA->Text = AnsiString(RespTotal);
		break;

		case 2:// Bico 2 Apelido
			EdtTotBiB->Text = AnsiString(RespTotal);
		break;

		case 3:// Bico 3 Apelido
			EdtTotBiC->Text = AnsiString(RespTotal);
		break;

		case 4:// Bico 4 Apelido
			EdtTotBiD->Text = AnsiString(RespTotal);
		break;

		case 5:// Bico 5 Apelido
			EdtTotBiE->Text = AnsiString(RespTotal);
		break;
	}

}
//---------------------------------------------------------------------------
void __fastcall TFrmTotais::TimerTotalizadorTimer(TObject *Sender)
{
	if(SolicitacaoAtiva == true)
	{
		if(CmdEncerrantes == true)
		{
			CmdEncerrantes = false;	// Limpa Comando
            ObtemEnderecos();	// Obtem endereços para solicitação
			if(FrmMain->Cesna->FcmSolicitaTotalizador(Cmd_Sl,Cmd_Bo,Cmd_Bi) != 1)
			{
				FrmMain->Display("Sl: " + AnsiString(Cmd_Sl) + " Bo: " + AnsiString(Cmd_Bo) + " Bi: " + AnsiString(Cmd_Bi) + " Erro Solicita Total");
				TimerTotalizador->Enabled = false;// Se alguma solicitação deu errado finaliza
            	return;
			}
			else
			{
				FlagObtemTotal[Cmd_Bo] = true;// Seta flag Obtem Total indicando a solicitação.
				BicoApelido++;
				Segundos = 0;
				FrmMain->Display("Sl: " + AnsiString(Cmd_Sl) + " Bo: " + AnsiString(Cmd_Bo) + " Bi: "+ AnsiString(Cmd_Bi) + " OK Solicita Total");
			}
		}
		else
		{
			if((FlagObtemTotal[Cmd_Bo] != false) && (Segundos <= 10))// Testa se recebeu ou Tempo maior igual a +- 5 segundos
			{
				Segundos++;
				return;
			}
			else
			{
				if((FlagObtemTotal[Cmd_Bo] == true) || (Segundos >= 10))
				{
					FrmMain->Display("Sl: " + AnsiString(Cmd_Sl) + " Bo: " + AnsiString(Cmd_Bo) + " Bi: "+ AnsiString(Cmd_Bi) + " Erro - Não obteve Encerrante");
					if(BicoApelido == MaxBicoApelido)// Verifica se tem mais solicitações
						TimerTotalizador->Enabled  = false;//Se não desliga timer.
					else
						CmdEncerrantes = true;
				}
				else
				{
					FrmMain->Display("Sl: " + AnsiString(Cmd_Sl) + " Bo: " + AnsiString(Cmd_Bo) + " Bi: "+ AnsiString(Cmd_Bi) + " OK - Obteve Encerrante");
                    EscreveTotais();
					if(BicoApelido == MaxBicoApelido)// Verifica se tem mais solicitações
						TimerTotalizador->Enabled  = false;//Se não desliga timer.
					else
						CmdEncerrantes = true;
                }
			}
		}
	}
}
//---------------------------------------------------------------------------
void __fastcall TFrmTotais::BtnSolicitaTotaisClick(TObject *Sender)
{
MaxBicoApelido = 0; //Zera número máximo de bicos.

	if(ChBoxBico1->Checked == 1)// Analisa dados para bico 1
	{
		if((CbBoxSlA->ItemIndex < 1) || (CbBoxSlA->ItemIndex > 4))
		{
			ShowMessage("ERROR\nValor SL do Bico 1 está fora do range.\nValores devem ser de 1 a 4");
			return;
		}

		if((CbBoxBoA->ItemIndex < 1) || (CbBoxBoA->ItemIndex > 16))
		{
			ShowMessage("ERROR\nValor BO do Bico 1 está fora do range.\nValores devem ser de 1 a 16");
			return;
		}

		if((CbBoxBiA->ItemIndex < 1) || (CbBoxBiA->ItemIndex > 4))
		{
			ShowMessage("ERROR\nValor BI do Bico 1 está fora do range.\nValores devem ser de 1 a 4");
			return;
		}
		MaxBicoApelido++;// Se dados ok incrementa max bico
	}

	if(ChBoxBico2->Checked == 1)// Analisa dados para bico 2
	{
		if((CbBoxSlB->ItemIndex < 1) || (CbBoxSlB->ItemIndex > 4))
		{
			ShowMessage("ERROR\nValor SL do Bico 2 está fora do range.\nValores devem ser de 1 a 4");
			return;
		}

		if((CbBoxBoB->ItemIndex < 1) || (CbBoxBoB->ItemIndex > 16))
		{
			ShowMessage("ERROR\nValor BO do Bico 2 está fora do range.\nValores devem ser de 1 a 16");
			return;
		}

		if((CbBoxBiB->ItemIndex < 1) || (CbBoxBiB->ItemIndex > 4))
		{
			ShowMessage("ERROR\nValor BI do Bico 2 está fora do range.\nValores devem ser de 1 a 4");
			return;
		}
		MaxBicoApelido++;// Se dados ok incrementa max bico
	}

	if(ChBoxBico3->Checked == 1)// Analisa dados para bico 3
	{
		if((CbBoxSlC->ItemIndex < 1) || (CbBoxSlC->ItemIndex > 4))
		{
			ShowMessage("ERROR\nValor SL do Bico 3 está fora do range.\nValores devem ser de 1 a 4");
			return;
		}

		if((CbBoxBoC->ItemIndex < 1) || (CbBoxBoC->ItemIndex > 16))
		{
			ShowMessage("ERROR\nValor BO do Bico 3 está fora do range.\nValores devem ser de 1 a 16");
			return;
		}

		if((CbBoxBiC->ItemIndex < 1) || (CbBoxBiC->ItemIndex > 4))
		{
			ShowMessage("ERROR\nValor BI do Bico 3 está fora do range.\nValores devem ser de 1 a 4");
			return;
		}
		MaxBicoApelido++;// Se dados ok incrementa max bico
	}

	if(ChBoxBico4->Checked == 1)// Analisa dados para bico 4
	{
		if((CbBoxSlD->ItemIndex < 1) || (CbBoxSlD->ItemIndex > 4))
		{
			ShowMessage("ERROR\nValor SL do Bico 4 está fora do range.\nValores devem ser de 1 a 4");
			return;
		}

		if((CbBoxBoD->ItemIndex < 1) || (CbBoxBoD->ItemIndex > 16))
		{
			ShowMessage("ERROR\nValor BO do Bico 4 está fora do range.\nValores devem ser de 1 a 16");
			return;
		}

		if((CbBoxBiD->ItemIndex < 1) || (CbBoxBiD->ItemIndex > 4))
		{
			ShowMessage("ERROR\nValor BI do Bico 5 está fora do range.\nValores devem ser de 1 a 4");
			return;
		}
		MaxBicoApelido++;// Se dados ok incrementa max bico
	}

	if(ChBoxBico5->Checked == 1)// Analisa dados para bico 5
	{
		if((CbBoxSlE->ItemIndex < 1) || (CbBoxSlE->ItemIndex > 4))
		{
			ShowMessage("ERROR\nValor SL do Bico 5 está fora do range.\nValores devem ser de 1 a 4");
			return;
		}

		if((CbBoxBoE->ItemIndex < 1) || (CbBoxBoE->ItemIndex > 16))
		{
			ShowMessage("ERROR\nValor BO do Bico 5 está fora do range.\nValores devem ser de 1 a 16");
			return;
		}

		if((CbBoxBiE->ItemIndex < 1) || (CbBoxBiE->ItemIndex > 4))
		{
			ShowMessage("ERROR\nValor BI do Bico 5 está fora do range.\nValores devem ser de 1 a 4");
			return;
		}
		MaxBicoApelido++;// Se dados ok incrementa max bico
	}
	if(MaxBicoApelido != 0)
	{
		BicoApelido					= 0;	// Limpa bicos para solicitação
		SolicitacaoAtiva			= true;	// Habilita Solicitação
		CmdEncerrantes				= true;	// Habilita Cmd Totalizador
		TimerTotalizador->Enabled 	= true;	// Habilita Timer de Conferencia
	}
}
//---------------------------------------------------------------------------
void __fastcall TFrmTotais::BtnCancelaTotaisClick(TObject *Sender)
{
	CmdEncerrantes				= false;	// Desabilita Cmd Totalizador
	SolicitacaoAtiva			= false;	// Desabilita Solicitação
	TimerTotalizador->Enabled 	= false;    // Desliga Timer
	FrmMain->Display("Cancelou Solicitação de Encerrantes");
}
//---------------------------------------------------------------------------

