618 lines
22 KiB
C++
618 lines
22 KiB
C++
//---------------------------------------------------------------------------
|
|
|
|
#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;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|