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

#include <vcl.h>
#pragma hdrstop
#include <inifiles.hpp>

#include "capg_abonados.h"
#include "crd_ctrl.h"
#include "capg_qrLabonados.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 isSettingData = false;
 PageControl1->ActivePage = TabSheet1;
 PageControl2->ActivePage = TabSheet3;

 TbTAbonados->Active = true;
 TbAbonados->Active = true;

 TbVehiculos->Active = true;
 TbCards->Active = true;
 TbFacturas->Active = true;
 SelIndex->ItemIndex = 0;

  TIniFile *ini;
  ini = new TIniFile( ExtractFileDir( Application->ExeName ) +  "\\CAP.INI"  );
  // Cargamos los importes del periodo (Mes/biM/triM/Anual)
  ImportesPeriodo[0] = ini->ReadFloat(  "CAP_g", "ImporteMensual", 0.0 );
  ImportesPeriodo[1] = ini->ReadFloat(  "CAP_g", "ImporteBimestral", 0.0 );
  ImportesPeriodo[2] = ini->ReadFloat(  "CAP_g", "ImporteTrimestral", 0.0 );
  ImportesPeriodo[3] = ini->ReadFloat(  "CAP_g", "ImporteAnual", 0.0 );

  cfgPWD = ini->ReadString(  "CAP_g", "cfgPWD", "default" );
  delete ini;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::TbAbonadosBeforeOpen(TDataSet *DataSet)
{
 if ( !FileExists( TbAbonados -> TableName ) )
 {
	 // Usamos la propiedad FielDefs para definir
	 // las columnas que contendrá la tabla
     TbAbonados -> FieldDefs -> Clear();

      /********************\
     |*    Datos Básicos   *|
      \********************/
  	 TbAbonados -> FieldDefs -> Add("ida",       ftAutoInc,  0, false );
  	 TbAbonados -> FieldDefs -> Add("dni",       ftString,   20, false );
  	 TbAbonados -> FieldDefs -> Add("nombre",    ftString,   20, false );
  	 TbAbonados -> FieldDefs -> Add("apellidos", ftString,   40, false );

  	 TbAbonados -> FieldDefs -> Add("direccion", ftString,  40, false );
  	 TbAbonados -> FieldDefs -> Add("localidad", ftString,  20, false );
  	 TbAbonados -> FieldDefs -> Add("provincia", ftString,  20, false );
  	 TbAbonados -> FieldDefs -> Add("cp",        ftInteger,  0, false );

  	 TbAbonados -> FieldDefs -> Add("telefono1", ftString,  20, false );
  	 TbAbonados -> FieldDefs -> Add("telefono2", ftString,  20, false );

   	 TbAbonados -> FieldDefs -> Add("tipoa",     ftInteger,   0, false );
   	 TbAbonados -> FieldDefs -> Add("estado",     ftInteger,   0, false );

   	 TbAbonados -> FieldDefs -> Add("vip",       ftBoolean,   0, false );
   	 TbAbonados -> FieldDefs -> Add("dentro",    ftBoolean,   0, false );

   	 TbAbonados -> FieldDefs -> Add("falta",     ftDate,   0, false );
   	 TbAbonados -> FieldDefs -> Add("fperiodo",  ftInteger,  0, false );

     TbAbonados -> IndexDefs-> Clear();

	 TbAbonados->IndexDefs->Add("Primary", "ida", TIndexOptions() << ixPrimary << ixUnique);

	 // Creamos la base...
	 TbAbonados -> CreateTable();
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TbVehiculosBeforeOpen(TDataSet *DataSet)
{
 if ( !FileExists( TbVehiculos -> TableName ) )
 {
	 // Usamos la propiedad FielDefs para definir
	 // las columnas que contendrá la tabla
     TbVehiculos -> FieldDefs -> Clear();

      /********************\
     |*    Datos Básicos   *|
      \********************/
  	 TbVehiculos -> FieldDefs -> Add("idc",       ftAutoInc,  0, false );
  	 TbVehiculos -> FieldDefs -> Add("ida",       ftInteger,  0, false );
         /** CDA se compone como:   (idCard)+(ida)*100
                donde idCard va desde 0 .. 99
         */
  	 TbVehiculos -> FieldDefs -> Add("idCard",    ftInteger,  0, false );


  	 TbVehiculos -> FieldDefs -> Add("matricula", ftString,  10, false );
  	 TbVehiculos -> FieldDefs -> Add("color",     ftString,  15, false );
  	 TbVehiculos -> FieldDefs -> Add("modelo",    ftString,  40, false );
  	 TbVehiculos -> FieldDefs -> Add("idplaza",   ftString,   5, false );

     TbVehiculos -> IndexDefs-> Clear();

	 TbVehiculos->IndexDefs->Add("Primary",   "idc", TIndexOptions() << ixPrimary << ixUnique);
	 TbVehiculos->IndexDefs->Add("iAbonados", "ida;idCard", TIndexOptions() << ixCaseInsensitive );
	 TbVehiculos->IndexDefs->Add("iCards",    "idCard", TIndexOptions() << ixCaseInsensitive );
         // Creamos la base...
	 TbVehiculos -> CreateTable();
 }
}
//---------------------------------------------------------------------------



void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
{
  PageControl1->ActivePage = TabSheet2;
  PageControl2->ActivePage = TabSheet3;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BuscadorKeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
  TbAbonados->Locate( SelIndex->Items->Strings[SelIndex->ItemIndex], Buscador->Text, TLocateOptions() << loCaseInsensitive << loPartialKey );
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
  //
  TbBusqMatriculas->Active = true;
  if ( TbBusqMatriculas->Locate( "matricula", Buscador->Text, TLocateOptions() << loCaseInsensitive << loPartialKey ) )
  {
    if ( TbAbonados->Locate( "ida", TbBusqMatriculas->FieldByName("ida")->AsInteger,  TLocateOptions() << loCaseInsensitive << loPartialKey ) )
    {
     PageControl1->ActivePage = TabSheet2;
    }
  }
  TbBusqMatriculas->Active = false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::TbAbonadosBeforeDelete(TDataSet *DataSet)
{
  if ( Application->MessageBox("¿Eliminar al abonado actual?", "CAP: Eliminación", MB_OKCANCEL) != IDOK)
  {
    Abort();
    return;
  }
  // Eliminamos todos los vehiculos de este ABONADO
  while (1)
  {
   try {
        // Finalmente ELIMINAMOS al vehiculo
        TbVehiculos->Delete();
   } catch(...) {
        break;
   }
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TbCardsBeforeOpen(TDataSet *DataSet)
{
 if ( !FileExists( TbCards -> TableName ) )
 {
	 // Usamos la propiedad FielDefs para definir
	 // las columnas que contendrá la tabla
     TbCards -> FieldDefs -> Clear();

      /********************\
     |*    Datos Básicos   *|
      \********************/
  	 TbCards -> FieldDefs -> Add("id",       ftAutoInc,  0, false );
  	 TbCards -> FieldDefs -> Add("idowner",  ftInteger,  0, false );
  	 TbCards -> FieldDefs -> Add("idh",      ftInteger,  0, false );

         // idCARD se forma de la siguiente manera:
         //    (32 bits)   bit 0      (1)  Indica Abonado=0 ú Ocasional=1
         // En los abonados:
         //                bit 1..5   (5)  Número de version   (vCard)
         //                bit 6..32 (28) ID poseedor tarjeta (idowner)
         // No Abonados:
         //                bit 1..32  (31) ID cliente ocacional
  	 TbCards -> FieldDefs -> Add("idCard",   ftInteger,  0, false );
  	 TbCards -> FieldDefs -> Add("vCard",    ftInteger,  0, false );
         TbCards -> FieldDefs -> Add("fechaM",   ftDate,     0, false );
  	 TbCards -> FieldDefs -> Add("acceso",   ftBoolean,  0, false );
  	 TbCards -> FieldDefs -> Add("vip",      ftBoolean,  0, false );
  	 TbCards -> FieldDefs -> Add("msg",      ftString,  32, false );

     TbCards -> IndexDefs-> Clear();

	 TbCards->IndexDefs->Add("Primary", "id", TIndexOptions() << ixPrimary << ixUnique);
	 TbCards->IndexDefs->Add("iOwner",  "idowner", TIndexOptions() << ixCaseInsensitive );
	 TbCards->IndexDefs->Add("iCards",  "idCard", TIndexOptions() << ixCaseInsensitive << ixUnique );
         // Creamos la base...
	 TbCards -> CreateTable();
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid2DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
 if ( Column->ID == 4 )
 {
   if ( TbVehiculos->FieldByName("idCard")->AsInteger > 0 )
   {
      DBGrid2 -> Canvas -> StretchDraw( Rect, CardOK->Picture->Graphic );
   }
 } else {
   DBGrid2 -> DefaultDrawColumnCell( Rect, DataCol, Column, State );
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::TbVehiculosBeforeDelete(TDataSet *DataSet)
{
 // Eliminamos la TARJETA asociada a este VEHICULO
 if ( TbCards->Locate( "id", TbVehiculos->FieldByName("idCard")->AsInteger, TLocateOptions() << loCaseInsensitive << loPartialKey ) )
 {
   TbCards->Delete();
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::DBGrid2DblClick(TObject *Sender)
{
 if ( DBGrid2->SelectedIndex == 4 )
 {
   if ( TbVehiculos->State == dsEdit || TbVehiculos->State == dsInsert )
     TbVehiculos->Post();

   int idCard, idCardA;
   // Abrimos el editor de TARJETA
   TCardCtrl *CCard;
   CCard = new TCardCtrl(this);
   if ( TbVehiculos->FieldByName("idCard")->IsNull )
        idCardA = -1;
   else
        idCardA = TbVehiculos->FieldByName("idCard")->AsInteger;
   idCard = CCard->LocateCard( idCardA,
                               TbVehiculos->FieldByName("idc")->AsInteger );
   if ( idCard != idCardA )
   {
     TbVehiculos->Edit();
     TbVehiculos->FieldByName("idCard")->AsInteger = idCard;
     TbVehiculos->Post();
   }
   CCard->ShowModal();
   delete CCard;
 }
}
//---------------------------------------------------------------------------


void __fastcall TForm1::DsAbonadosUpdateData(TObject *Sender)
{
  int idc; bool acceso; AnsiString msg;
  // Propagamos los cambios de tarjeta a todos sus vehiculos
  acceso = false;
  switch( TbAbonados->FieldByName("estado")->AsInteger )
  {
   // ALTA
   case 0:
  //########################
  //########################
           if ( TbTAbonados->Locate( "idta", TbAbonados->FieldByName("tipoa")->AsInteger, TLocateOptions() << loCaseInsensitive << loPartialKey ) )
                acceso = TbTAbonados->FieldByName("acceso")->AsBoolean;
           else
                acceso = false;
           msg = TbTAbonados->FieldByName("msg")->AsString;
           break;
   // Sancionado
   case 1:
        msg = "   SANCIONADO    Pase por CAJA";
        break;
   // Baja temporal
   case 2:
        msg = " BAJA ImPagado   Pase por CAJA";
        break;
   // Baja definitiva
   case 3:
             //123456789ABCDEF-123456789ABCDEF-
        msg = "BAJA DEFINITIVA  Pase por CAJA";
        break;
   default:
        msg = "Por favor,         Pase por CAJA";
        break;
  }

  TbVehiculos->First();
  while ( !TbVehiculos->Eof )
  {
    idc = TbVehiculos->FieldByName("idCard")->AsInteger;
    if ( TbCards->Locate( "id", idc, TLocateOptions() << loCaseInsensitive << loPartialKey ) )
    {
     TbCards->Edit();
     TbCards->FieldByName("idh")->AsInteger = TbAbonados->FieldByName("tipoa")->AsInteger;
     TbCards->FieldByName("acceso")->AsBoolean = acceso;
     TbCards->FieldByName("vip")->AsBoolean    = TbAbonados->FieldByName("vip")->AsBoolean;
     TbCards->FieldByName("msg")->AsString     = msg;
     TbCards->Post();
    }
    TbVehiculos->Next();
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 if ( TbAbonados->State == dsEdit || TbAbonados->State == dsInsert )
     TbAbonados->Post();
 if ( TbVehiculos->State == dsEdit || TbVehiculos->State == dsInsert )
     TbVehiculos->Post();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::PageControl2Change(TObject *Sender)
{
 if ( TbAbonados->State == dsEdit || TbAbonados->State == dsInsert )
     TbAbonados->Post();
 if ( TbVehiculos->State == dsEdit || TbVehiculos->State == dsInsert )
     TbVehiculos->Post();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::PageControl1Change(TObject *Sender)
{
 if ( TbAbonados->State == dsEdit || TbAbonados->State == dsInsert )
     TbAbonados->Post();
 if ( TbVehiculos->State == dsEdit || TbVehiculos->State == dsInsert )
     TbVehiculos->Post();
}
//---------------------------------------------------------------------------



void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
   TbAbonados->Edit();
   TbAbonados->FieldByName("estado")->AsInteger = ComboBox1->ItemIndex;
   TbAbonados->Post();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::DsAbonadosDataChange(TObject *Sender,
      TField *Field)
{
 if ( isSettingData ) return;
 ComboBox1->ItemIndex = TbAbonados->FieldByName("estado")->AsInteger;
 ComboBox2->ItemIndex = TbAbonados->FieldByName("fperiodo")->AsInteger;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::AvanzaCampo(TObject *Sender, char &Key)
{
 if ( Key != VK_RETURN ) return;

 try {
        TbAbonados->Post();
 } catch(...) {
  // Nothing
 }
 if ( Sender == (TObject *)DBEdit1 ) DBEdit2->SetFocus();
 else
 if ( Sender == (TObject *)DBEdit2 ) DBEdit6->SetFocus();
 else
 if ( Sender == (TObject *)DBEdit6 ) DBEdit3->SetFocus();
 else
 if ( Sender == (TObject *)DBEdit3 ) DBEdit4->SetFocus();
 else
 if ( Sender == (TObject *)DBEdit4 ) DBEdit5->SetFocus();
 else
 if ( Sender == (TObject *)DBEdit5 ) DBEdit7->SetFocus();
 else
 if ( Sender == (TObject *)DBEdit7 ) DBEdit8->SetFocus();
 else
 if ( Sender == (TObject *)DBEdit8 ) DBEdit9->SetFocus();
 else
 if ( Sender == (TObject *)DBEdit9 ) DBLookupComboBox2->SetFocus();
 else
 if ( Sender == (TObject *)DBLookupComboBox2 ) ComboBox1->SetFocus();
 else
 if ( Sender == (TObject *)ComboBox1 ) ComboBox2->SetFocus();
 else
 if ( Sender == (TObject *)ComboBox2 ) DBEdit1->SetFocus();
/*
 else
 if ( Sender == (TObject *)DBEdit11 ) DBEdit1->SetFocus();
*/
}
//---------------------------------------------------------------------------

void __fastcall TForm1::TbAbonadosNewRecord(TDataSet *DataSet)
{
 TbAbonados->FieldByName("fAlta")->AsDateTime = TDateTime::CurrentDate();
 TbAbonados->FieldByName("fInicio")->AsDateTime = TDateTime::CurrentDate();
 TbAbonados->FieldByName("estado")->AsInteger = 0;
 TbAbonados->FieldByName("fPeriodo")->AsInteger = 0;        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{
   isSettingData = true;
   TbAbonados->Edit();
   TbAbonados->FieldByName("fperiodo")->AsInteger = ComboBox2->ItemIndex;
   TbAbonados->Post();
   isSettingData = false;
}
//---------------------------------------------------------------------------
TDateTime __fastcall TForm1::DiasEnPeriodoDesde( TDateTime fechaE )
{
 TDateTime NuevaFechaS;
 unsigned short YY, MM, DD;
 fechaE.DecodeDate( &YY, &MM, &DD );
        // Le asignamos un nuevo periodo...
        switch( TbAbonados->FieldByName("fperiodo")->AsInteger )
        {
         case 0:        // Mensual
               NuevaFechaS = EncodeDate( (MM==12)?(YY+1):YY, (MM==12)?1:(MM+1), 1 );
         break;
         case 1:        // BiMestral
               NuevaFechaS = EncodeDate( (MM>=11)?(YY+1):YY, (MM==11)?1:( (MM==12)?2:(MM+2) ), 1 );
         break;
         case 2:        // TriMestral
               NuevaFechaS = EncodeDate( (MM>=10)?(YY+1):YY, (MM==10)?1:( (MM==11)?2:( (MM==12)? 3: (MM+3) )), 1 );
         break;
         case 3:        // Anual
               NuevaFechaS = EncodeDate( YY+1, MM+1, 1 );
         break;
         default:
               NuevaFechaS = fechaE + 15;
         break;
       }
 return NuevaFechaS;
}
//---------------------------------------------------------------------------
Currency __fastcall TForm1::ImporteDelPeriodo()
{
 if ( TbAbonados->FieldByName("fperiodo")->AsInteger >= 0 &&
      TbAbonados->FieldByName("fperiodo")->AsInteger <= 3 )

              return ImportesPeriodo[ TbAbonados->FieldByName("fperiodo" )->AsInteger ];

 return 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RenovarAbonoClick(TObject *Sender)
{
  bool firstTime;
  TDateTime AntS = AntS.CurrentDate();

  // No es la primera vez que renueva
  if ( TbFacturas->RecordCount > 0 )
  {
    TbFacturas->Last();                // Ordenado al reves, asi que esta es la última factura
    // Si la última factura no esta pagada
    if ( ! TbFacturas->FieldByName("pagado")->AsBoolean )
    {
      // Pero esta aun vigente
      if ( TbFacturas->FieldByName("fechaS")->AsDateTime < TDateTime::CurrentDate() )
      {
        TDateTime NuevaFechaS = DiasEnPeriodoDesde( TbFacturas->FieldByName("fechaE")->AsDateTime );

       if ( NuevaFechaS >= TDateTime::CurrentDate() )
       {
         TbFacturas->Edit();
         TbFacturas->FieldByName("fechaS")->AsDateTime = NuevaFechaS;
         TbFacturas->FieldByName("importe")->AsInteger = ImporteDelPeriodo();
         TbFacturas->Post();
       }
      } else {
       // Última factura impagada / Fuera del periodo
       ShowMessage( "Imposible renovar periodo de Abono. Aun tiene facturas pendientes, (expiradas)." );
      }
    } else {      // La última factura esta abonada...
                  // Preparamos un periodo nuevo, para el mes siguiente
      AntS = TbFacturas->FieldByName( "fechaS" )->AsDateTime;
      firstTime = true;

    }
  } else {
    // Como es la primera vez que se emite un recibo
    firstTime = true;           // Realizar nuevo abono para el periodo en curso
  }

  // Primera vez que se emite un recibo, ó el periodo del recibo
  // esta dentro del mes en curso...
  if ( firstTime )
  {
      TbFacturas->Insert();
      TbFacturas->FieldByName("pagado")->AsBoolean = false;
      // Si aun no ha expirado el periodo (ya pagado actual)
      if ( AntS > TDateTime::CurrentDate() )
      {
        // Preparamos el nuevo periodo a partir de "fechaS"
        TbFacturas->FieldByName("fechaE")->AsDateTime = AntS;
      } else {
        // Preparamos a partir del dia actual...
        TbFacturas->FieldByName("fechaE")->AsDateTime = TDateTime::CurrentDate();
      }
      TbFacturas->FieldByName("fechaS")->AsDateTime = DiasEnPeriodoDesde( TbFacturas->FieldByName("fechaE")->AsDateTime );
      TbFacturas->FieldByName("importe")->AsCurrency = ImporteDelPeriodo();
      TbFacturas->Post();
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TbFacturasBeforeOpen(TDataSet *DataSet)
{
 if ( !FileExists( TbFacturas -> TableName ) )
 {
	 // Usamos la propiedad FielDefs para definir
	 // las columnas que contendrá la tabla
     TbFacturas -> FieldDefs -> Clear();

      /********************\
     |*    Datos Básicos   *|
      \********************/
  	 TbFacturas -> FieldDefs -> Add("id",       ftAutoInc,  0, false );
  	 TbFacturas -> FieldDefs -> Add("idc",      ftInteger,  0, false );
  	 TbFacturas -> FieldDefs -> Add("fechaE",   ftDate,      0, false );
  	 TbFacturas -> FieldDefs -> Add("fechaS",   ftDate,      0, false );
  	 TbFacturas -> FieldDefs -> Add("horaE",    ftTime,      0, false );
  	 TbFacturas -> FieldDefs -> Add("horaS",    ftTime,      0, false );
  	 TbFacturas -> FieldDefs -> Add("importe",  ftCurrency,  0, false );
  	 TbFacturas -> FieldDefs -> Add("pagado",   ftBoolean,   0, false );
  	 TbFacturas -> FieldDefs -> Add("fechaP",   ftDate,      0, false );

     TbFacturas -> IndexDefs-> Clear();

	 TbFacturas->IndexDefs->Add("Primary", "id", TIndexOptions() << ixPrimary << ixUnique);
	 TbFacturas->IndexDefs->Add("iOwner",  "idc", TIndexOptions() << ixCaseInsensitive );
	 TbFacturas->IndexDefs->Add("iExpira", "fechaS", TIndexOptions() << ixCaseInsensitive << ixDescending );
         // Creamos la base...
	 TbFacturas -> CreateTable();
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid3DblClick(TObject *Sender)
{
 // Confirmar abono de factura...
 if ( ! TbFacturas->FieldByName("pagado")->AsBoolean )
 {
  AnsiString NewString = TbFacturas->FieldByName("importe")->AsString;
//  Label1->Caption = NewString;
  if (InputQuery("Abono de la factura: "+TbFacturas->FieldByName("id")->AsString, "Importe:", NewString))
  {
    try { // NewString has been changed by the user, who clicked ok
        bool ConAcceso;
        Currency importe = NewString.ToDouble();
        TbFacturas->Edit();
        TbFacturas->FieldByName("importe")->AsCurrency = importe;
        TbFacturas->FieldByName("pagado")->AsBoolean = true;
        TbFacturas->FieldByName("fechaP")->AsDateTime = TDateTime::CurrentDate();
        TbFacturas->Post();
        TbAbonados->Edit();

        TbAbonados->FieldByName("estado")->AsInteger = 0;
        ConAcceso = (  TDateTime::CurrentDate() <= TbFacturas->FieldByName("fechaS")->AsDateTime );

        TbAbonados->Post();


          // Actualizamos la fecha maxima disponible de todas sus tarjetas
          TbVehiculos->First();
          int idc;
          while ( !TbVehiculos->Eof )
          {
            idc = TbVehiculos->FieldByName("idCard")->AsInteger;
            if ( TbCards->Locate( "id", idc, TLocateOptions() << loCaseInsensitive << loPartialKey ) )
            {
             TbCards->Edit();
             TbCards->FieldByName("fechaM")->AsDateTime = TbFacturas->FieldByName("fechaS")->AsDateTime;
             TbCards->FieldByName("acceso")->AsBoolean  = true;
             TbCards->Post();
            }
            TbVehiculos->Next();
          }
    } catch (...) {
     ShowMessage( "El importe introducido no es correcto" );
    }
  }
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
 if ( TbFacturas->FieldByName("pagado")->AsBoolean == false )
 {
  TbFacturas->Delete();
 } else {
  AnsiString PWD;
  if ( InputQuery("Password administrativo", "Password:", PWD ) && PWD == cfgPWD )
    TbFacturas->Delete();
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
 TqrLAbonados *qr;
 qr = new TqrLAbonados(this);
 qr->QuickRep1->Preview();
 delete qr;
}
//---------------------------------------------------------------------------

