CtrlMstr/TStatus.cpp
2021-09-12 22:02:01 +02:00

329 lines
10 KiB
C++

//---------------------------------------------------------------------------
#include <io.h>
#include <vcl.h>
#pragma hdrstop
#include "TStatus.h"
#include "CtrlPPal.h"
#include "CtrlElemento.h"
#include "FichasClientes.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CoolForm"
#pragma link "DigitNum"
#pragma link "FormularioREUSABLE"
#pragma resource "*.dfm"
TStatus *Status;
#define Comienzo TbElementosCFG->FieldByName("Comienzo")->AsDateTime
#define pTiempo TbElementosCFG->FieldByName("Tiempo")->AsDateTime
//---------------------------------------------------------------------------
__fastcall TStatus::TStatus(TComponent* Owner)
: TFormREUSABLE(Owner)
{
// CtrlPPal->TbElementosCFG->FieldByName("NumElement")->AsString + " --";
TbPrecios->Active = true;
TbHistorial ->Active = true;
TbElementosCFG->Active = true;
// TiempoPedido->DateTime = 0;
// TiempoPedido->Time = 0;
ltime2Click( 0 );
}
//---------------------------------------------------------------------------
void __fastcall TStatus::SetElement( TElemento *Elto )
{
Elemento = Elto;
Terminal->Caption = "Terminal número: -- " + AnsiString( Elemento->NumElemento ) + " --";
if ( CtrlPPal->ServerHook ) return;
if ( ! TbElementosCFG->Locate( "NumElement", Elemento->NumElemento, TLocateOptions() << loCaseInsensitive ) )
ShowMessage( "ERROR, EL TERMINAL NO SE ENCONTRO!!\nAPPLICATION MALFUNTIONNNN Granted" );
// if ( ! TbElementosCFG->FieldByName( "Activo" )->AsBoolean )
if ( Elemento->StatusCode == FREE )
{
MasTiempo->Visible = false;
Label2->Caption = "&Tiempo que pide:";
Label4->Caption = "&Tipo de Conexión:";
PrecioAcumulado = 0;
ActivarTerminal->Visible = true;
ActivarTerminal->Enabled = true;
TipoConexion->Enabled = true;
// TiempoPedido->Enabled = true;
Edit1->Enabled = true;
Edit2->Enabled = true;
SetCliente->Enabled = true;
TbElementosCFG->Edit();
Comienzo = TDateTime::CurrentTime();
TbElementosCFG->Post();
} else {
// El terminal está ocupado
unsigned short Hour, Min, Sec, MSec;
Label4->Caption = AnsiString(PrecioAcumulado) + " acumuladas.";
pTiempo.DecodeTime( &Hour, &Min, &Sec, &MSec );
Edit1->Text = AnsiString( Hour );
Edit2->Text = AnsiString( Min );
Label3->Caption = Elemento->NCliente;
// TiempoPedido->Time = pTiempo;
// TiempoPedidoChange( 0 );
MasTiempo->Visible = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TStatus::Time1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
ltime1Click( Sender );
}
//---------------------------------------------------------------------------
void __fastcall TStatus::Time2MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
ltime2Click( Sender );
}
//---------------------------------------------------------------------------
void __fastcall TStatus::Time3MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
ltime3Click( Sender );
}
//---------------------------------------------------------------------------
void __fastcall TStatus::ltime1Click(TObject *Sender)
{
unsigned short nullValue, h, m;
Time1 -> Brush -> Color = clRed;
Time2 -> Brush -> Color = clBlack;
Time3 -> Brush -> Color = clBlack;
Comienzo.DecodeTime( &h, &m, &nullValue, &nullValue );
Dig1->Value = h;
Dig2->Value = m;
}
//---------------------------------------------------------------------------
void __fastcall TStatus::ltime2Click(TObject *Sender)
{
TDateTime lleva; unsigned short nullValue, h, m;
Time1 -> Brush -> Color = clBlack;
Time2 -> Brush -> Color = clRed;
Time3 -> Brush -> Color = clBlack;
lleva = TDateTime::CurrentTime() - Comienzo;
lleva.DecodeTime( &h, &m, &nullValue, &nullValue );
Dig1->Value = h;
Dig2->Value = m;
}
//---------------------------------------------------------------------------
void __fastcall TStatus::ltime3Click(TObject *Sender)
{
TDateTime Queda; unsigned short nullValue, h, m;
Time1 -> Brush -> Color = clBlack;
Time2 -> Brush -> Color = clBlack;
Time3 -> Brush -> Color = clRed;
Queda = ( pTiempo + Comienzo ) - TDateTime::CurrentTime();
Queda.DecodeTime( &h, &m, &nullValue, &nullValue );
Dig1->Value = h;
Dig2->Value = m + 1;
}
//---------------------------------------------------------------------------
void __fastcall TStatus::ActivarTerminalClick(TObject *Sender)
{
int HorasP = Edit1->Text.ToInt();
int MinutP = Edit2->Text.ToInt();
// Una vez asignado el terminal a una persona, ya no le puede ser reasignado
// tiempo, ni puede cambiarse el usuario propietario de él.
// Abrimos la tabla de ventas de mi otro programa
// Insertamos esto como venta: (Cliente | [TipoConexion+Tiempo] | 1und | PrecioConexionTotal)
// Cerramos la tabla
if ( HorasP == 0 && MinutP == 0 )
return;
// Comprobamos que no se le asigne mas tiempo del que dispone en el bono
if ( idCliente > 0 && ClienteUsaBono &&
( HorasP > TBonoH ||
(HorasP ==TBonoH && MinutP > TBonoM)
)
)
{
ShowMessage ( "Atención, al cliente: \n" + Label3->Caption + "\nsolo le quedan " + TBonoH +":"+TBonoM + " disponible.\nNo puedo asignar mas tiempo." );
return;
}
// Desactivamos los controles...
TipoConexion->Enabled = false;
// TiempoPedido->Enabled = false;
Edit1->Enabled = false;
Edit2->Enabled = false;
ActivarTerminal->Enabled = false;
ActivarTerminal->Visible = false;
if ( ! CtrlPPal->ServerHook )
{
// Activamos el terminal
TbElementosCFG ->Edit();
TbElementosCFG ->FieldByName( "Activo" )->AsBoolean = true;
Comienzo = TDateTime::CurrentTime();
pTiempo = EncodeTime( HorasP, MinutP, 0, 0 );
TbElementosCFG ->Post();
}
ltime2Click( 0 );
int idtc;
switch ( TipoConexion->ItemIndex )
{
// Internet
case 0: idtc = 0; break;
// Juegos
case 1: idtc = 1; break;
// Otros
case 2: idtc = 3; break;
// Otros
case 3: idtc = 2; break;
default: idtc = 2; break;
}
//////// ACTIVAMOS REALMENTE EL TERMINAL ///////////////////////////////////
Currency PrecioConexion;
if ( idCliente > 0 && ClienteUsaBono )
PrecioConexion = -1;
else
PrecioConexion = TbPrecios->FieldByName("Precio")->AsCurrency;
CtrlPPal->SetActiveTimeElement( Elemento, pTiempo, idCliente, idtc, PrecioConexion );
PrecioAcumulado += PrecioConexion;
Close();
}
//---------------------------------------------------------------------------
void __fastcall TStatus::TiempoPedidoChange(TObject *Sender)
{
TDateTime TiempoPedido;
/*
if ( TiempoPedido->Time > EncodeTime( 5, 0, 0, 0 ) )
TiempoPedido->Time = EncodeTime( 5, 0, 0, 0 );
*/
try {
if ( Edit1->Text.ToInt() < 0 || Edit1->Text.ToInt() > 5 ) Edit1->Text = "0";
} catch(...) { Edit1->Text = "0";
Edit1->SelStart= 0;
Edit1->SelLength= 1;
}
try {
if ( Edit2->Text.ToInt() < 0 || Edit2->Text.ToInt() >59 ) Edit2->Text = "0";
} catch(...) { Edit2->Text = "0";
Edit2->SelStart= 0;
Edit2->SelLength= 1;
}
TiempoPedido = EncodeTime( Edit1->Text.ToInt(), Edit2->Text.ToInt(), 0, 0 );
// Buscamos en la tabla de precios, al 1º que tenga un tiempo superior o igual
// al que nos pide el cliente...
TbPrecios->First();
while( !TbPrecios->Eof && TbPrecios->FieldByName("Tiempo")->AsDateTime < TiempoPedido )//->Time )
TbPrecios->Next();
// Actualizamos el precio
int Number = (TbPrecios->FieldByName("Precio")->AsCurrency)*100;
Precio->Value = Number / 100;
PrecioDec->Value = Number % 100;
}
//---------------------------------------------------------------------------
void __fastcall TStatus::TbPreciosBeforeOpen(TDataSet *DataSet)
{
// Si la tabla no existe, la creamos
if ( access( (TbPrecios -> TableName).c_str(), 0 ) != 0 )
{
// Usamos la propiedad FielDefs para definir
// las columnas que contendrá la tabla
TbPrecios -> FieldDefs -> Clear();
TbPrecios -> FieldDefs -> Add("Tiempo", ftTime, 0, false );
TbPrecios -> FieldDefs -> Add("Precio", ftCurrency, 0, false );
TbPrecios -> IndexDefs -> Clear();
TbPrecios -> IndexDefs -> Add("Primary", "Tiempo", TIndexOptions() << ixPrimary << ixUnique );
// Creamos la base...
TbPrecios -> CreateTable();
}
}
//---------------------------------------------------------------------------
void __fastcall TStatus::SetClienteClick(TObject *Sender)
{
TFClientes *Ficha;
ClienteUsaBono = false;
Ficha = new TFClientes(this);
if ( Ficha -> ShowModal() == mrOk )
{
idCliente = CtrlPPal->TbPersonas->FieldByName("CodCliente1")->AsInteger;
TBonoH = CtrlPPal->TbPersonas->FieldByName("TiempoH")->AsInteger;
TBonoM = CtrlPPal->TbPersonas->FieldByName("TiempoM")->AsInteger;
Label3->Caption = CtrlPPal->TbPersonas->FieldByName("Nombre")->AsString + " " + CtrlPPal->TbPersonas->FieldByName("Apellidos")->AsString;
ClienteUsaBono =((TBonoH > 0) || (TBonoM > 0));
} else {
idCliente = 0;
Label3->Caption = "Anonimo";
}
delete Ficha;
if ( ClienteUsaBono )
{
Precio->Visible = false;
PrecioDec->Visible = false;
UBono1->Visible = true;
UBono2->Caption = AnsiString(TBonoH) + " : " + AnsiString(TBonoM);
UBono2->Visible = true;
} else {
Precio->Visible = true;
PrecioDec->Visible = true;
UBono1->Visible = false;
UBono2->Visible = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TStatus::Button1Click(TObject *Sender)
{
ModalResult = mrCancel;
}
//---------------------------------------------------------------------------
void __fastcall TStatus::MasTiempoClick(TObject *Sender)
{
MasTiempo->Visible = false;
ActivarTerminal->Visible = true;
ActivarTerminal->Enabled = true;
TipoConexion->Enabled = true;
Label2->Caption = "&Tiempo que añade:";
Edit1->Enabled = true;
Edit2->Enabled = true;
SetCliente->Enabled = true;
TbElementosCFG->Edit();
Comienzo = TDateTime::CurrentTime();
TbElementosCFG->Post(); //
}
//---------------------------------------------------------------------------