//--------------------------------------------------------------------------- #include #include #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(); // } //---------------------------------------------------------------------------