commit 4d943d773de7036e51a51e1c717acca4cdb3bb65 Author: jdg Date: Wed Sep 1 18:53:06 2021 +0200 first commit (2002-04-24) diff --git a/-cap.rar b/-cap.rar new file mode 100644 index 0000000..a94feb6 Binary files /dev/null and b/-cap.rar differ diff --git a/2003-01-17-malo-cap.rar b/2003-01-17-malo-cap.rar new file mode 100644 index 0000000..3b229a1 Binary files /dev/null and b/2003-01-17-malo-cap.rar differ diff --git a/LM2000_vcl/LM2000.cpp b/LM2000_vcl/LM2000.cpp new file mode 100644 index 0000000..3c25a00 --- /dev/null +++ b/LM2000_vcl/LM2000.cpp @@ -0,0 +1,1009 @@ +// #define PRUEBAS_SIN_VCL + + +//--------------------------------------------------------------------------- +#include "stdlib.h" +#include "stdio.h" +#include "conio.h" +#include "windows.h" +#define _verbose ACTIVA_EXPLICACION_PROCESOS +#include "LM2000.h" + +#ifndef PRUEBAS_SIN_VCL + +#include +#pragma hdrstop + +//#include "stdafx.h" + +#pragma package(smart_init) +//--------------------------------------------------------------------------- +// ValidCtrCheck is used to assure that the components created do not have +// any pure virtual functions. +// + +static inline void ValidCtrCheck(TLm2000 *) +{ + new TLm2000(NULL); +} +//--------------------------------------------------------------------------- +__fastcall TLm2000::TLm2000(TComponent* Owner) + : TComponent(Owner) +#else +void __fastcall TLm2000::printfv( AnsiString msg ) +{ + printf( "%s\n", msg.c_str() ); +} + +__fastcall TLm2000::TLm2000(void) +#endif +{ + LM_opened = false; +} +//----------------------------------------------------------------------------- +/** + Construtor de clase, que inicializa los parámetros de comunicación +*/ +__fastcall TLm2000::~TLm2000(void) +{ + // Si el puerto aun sigue abierto, lo cerramos... + if ( LM_opened ) + CierraPuerto(); +} +//--------------------------------------------------------------------------- +#ifndef PRUEBAS_SIN_VCL +namespace Lm2000 +{ + void __fastcall PACKAGE Register() + { + TComponentClass classes[1] = {__classid(TLm2000)}; + RegisterComponents("JD soft.", classes, 0); + } +} +#endif +//--------------------------------------------------------------------------- +#define ENTER_CARD_MEMORY "A" +// B: solo se usa por compatibilidad -[ NO IMPLEMENTADO ]- +#define CARD_NOT_VALID "C" + #define RTF_MOTIVE_NOT_STANDARD 0 + #define RTF_CARD_CODE_UNKNOWN 1 + #define RTF_MAGNETIC_CARD_EXPIRED 2 + #define RTF_PERIOD_NOT_VALID 3 + #define RTF_ANTIPASSBACK_ERROR 4 + #define RTF_CARD_VERSION_NOT_VALID 5 + #define RTF_CREDIT_INSUFFICIENT 6 +#define DELETE_CARD_MEMORY "D" +#define CONFIGURE_MEMORY "E" + #define FMC_LONG_CODES 1 + #define FMC_PIN 2 + #define FMC_EXPIRATION 4 + #define FMC_PREFIX_FREE 8 + #define FMC_MINI_MEMORY 16 + #define FMC_CARD_REVISION 32 +#define WRITE_CHARS_ON_BAND "F" +#define READ_CHARS_ON_BAND "F?" +// G: CONFIGURA PREFIJOS -[ NO IMPLEMENTADO ]- +#define PROGRAMMING_PERIODS "H" +#define SIMPLE_INTERROGATION "I" +#define PROGRAM_OPERATION_PARAMETERS "J" +#define RESET_CLOCK "K" +// L: Configura los tipos de usuarios -[ NO IMPLEMENTADO ]- +#define CARD_VALID "R" +// S: Sustituido por 'C' -[ NO IMPLEMENTADO ]- +#define DELETE_ALL_CARD_MEMORY "T" +#define PASSAGE_OPENING "P" +#define SHOW_NEXT_TRANSIT "U" +#define SET_TIME "V" + +// Secuencia de lectura correcta de tarjetas +#define INITIALIZE_READING "O?" +#define READ_CARD_MEMORY "A?" +#define SHOW_NEXT_MESSAGE "N?" + +// B?: Inicializa la lectura de mensajes personales +// -[ NO IMPLEMENTADO ]- + +// Secuencia de lectura de mensajes personales +// -[ NO IMPLEMENTADO ]- +#define INITIALIZE_READING_CM "B?" +#define READ_PERSONAL_MESSAGE "Y?" +#define SHOW_NEXT_PMESSAGE "D?" + + +#define REINITILIZE_TRANSIS_M "C?" + +#define READ_MEMORY_CFG "E?" +// F?: Lee cfg caracteres de la banda -[ NO IMPLEMENTADO ]- +#define READ_PREFIXES "G?" +// H?: Lee periodos +#define READ_OPERATION_CFG "J?" + + +#define READ_FIRMWARE "I?" +#define READ_TIMER(X) "b?,X" + + +#define READ_SYSTEM_MESSAGE "X?" + +//----------------------------------------------------------------------------- +/** + Abre el puerto de comunicación "lpszrPortName" + Esta función debe ser llamada antes de cualquier otra comunicación; +*/ +int __fastcall TLm2000::AbrePuerto(LPTSTR lpszPortName) +{ + DWORD dwError; + DCB PortDCB; + COMMTIMEOUTS CommTimeouts; + + // Antes de abrir, cerramos si asi procede + if ( LM_opened ) return true; + + LM_opened = false; + + // Open the serial port. + LM_handle = CreateFile (lpszPortName, // Pointer to the name of the port + GENERIC_READ | GENERIC_WRITE, + // Access (read/write) mode + 0, // Share mode + NULL, // Pointer to the security attribute + OPEN_EXISTING,// How to open the serial port + 0, // Port attributes + NULL); // Handle to port with attribute + // to copy + + // If it fails to open the port, return FALSE. + if ( LM_handle == INVALID_HANDLE_VALUE ) + { + dwError = GetLastError (); + return false; + } else { + LM_opened = true; + } + + PortDCB.DCBlength = sizeof (DCB); + + // Get the default port setting information. + GetCommState (LM_handle, &PortDCB); + + // Change the DCB structure settings. + PortDCB.BaudRate = 9600; // Current baud + PortDCB.fBinary = TRUE; // Binary mode; no EOF check + PortDCB.fParity = TRUE; // Enable parity checking. + PortDCB.fOutxCtsFlow = FALSE; // No CTS output flow control + PortDCB.fOutxDsrFlow = FALSE; // No DSR output flow control + PortDCB.fDtrControl = DTR_CONTROL_ENABLE; + // DTR flow control type + PortDCB.fDsrSensitivity = FALSE; // DSR sensitivity + PortDCB.fTXContinueOnXoff = TRUE; // XOFF continues Tx + PortDCB.fOutX = FALSE; // No XON/XOFF out flow control + PortDCB.fInX = FALSE; // No XON/XOFF in flow control + PortDCB.fErrorChar = FALSE; // Disable error replacement. + PortDCB.fNull = FALSE; // Disable null stripping. + PortDCB.fRtsControl = RTS_CONTROL_ENABLE; + // RTS flow control + PortDCB.fAbortOnError = FALSE; // Do not abort reads/writes on + // error. + PortDCB.ByteSize = 8; // Number of bits/bytes, 4-8 + PortDCB.Parity = NOPARITY; // 0-4=no,odd,even,mark,space + PortDCB.StopBits = ONESTOPBIT; // 0,1,2 = 1, 1.5, 2 + + // Configure the port according to the specifications of the DCB + // structure. + if (!SetCommState (LM_handle, &PortDCB)) + { + // Could not configure the serial port. + dwError = GetLastError (); + (printfv)( Format("Unable to configure the serial port\n%s\n", ARRAYOFCONST(("dwError")) ) ); + return FALSE; + } + + + // Retrieve the time-out parameters for all read and write operations + // on the port. + GetCommTimeouts (LM_handle, &CommTimeouts); + + // Change the COMMTIMEOUTS structure settings. + CommTimeouts.ReadIntervalTimeout = MAXDWORD; + +/// CommTimeouts.ReadTotalTimeoutMultiplier = 0; + CommTimeouts.ReadTotalTimeoutMultiplier = 5000; + CommTimeouts.ReadTotalTimeoutConstant = 1000; + CommTimeouts.WriteTotalTimeoutMultiplier = 10; + CommTimeouts.WriteTotalTimeoutConstant = 1000; + + // Set the time-out parameters for all read and write operations + // on the port. + if (!SetCommTimeouts (LM_handle, &CommTimeouts)) + { + // Could not set the time-out parameters. + dwError = GetLastError (); + (printfv)( Format( "Unable to set the time-out parameters: %s", ARRAYOFCONST(("dwError")) ) ); + return FALSE; + } + + // Direct the port to perform extended functions SETDTR and SETRTS. + // SETDTR: Sends the DTR (data-terminal-ready) signal. + // SETRTS: Sends the RTS (request-to-send) signal. + EscapeCommFunction (LM_handle, SETDTR); + EscapeCommFunction (LM_handle, SETRTS); + + return LM_opened; +}; +//----------------------------------------------------------------------------- +/** + Cierra el puerto, (siempre que este abierto) y libera los recursos pedidos +*/ +void __fastcall TLm2000::CierraPuerto(void) +{ + if ( LM_opened ) + { + CloseHandle( LM_handle ); + } +}; +//----------------------------------------------------------------------------- +/** + Dada una cadena de entrada, genera el CheckSum de comprobación necesario, + devolviendo este al final. +*/ +int __fastcall TLm2000::GeneraChecksum( char *cadena ) +{ + int CHK, i; + CHK = 0; + for ( i=0; cadena[i] != NULL; i++ ) + { + CHK += cadena[i]; + } + + return ( CHK - ( (CHK / 10000)*10000 ) ); +} +//----------------------------------------------------------------------------- +/** + NO SE PARA QUE ERA ESTO +*/ +/* +int __fastcall:tieneRespuesta( char *CMD ) +{ + int dev = -1; + + if ( strcmp( CMD, READ_FIRMWARE ) == 0 ) dev = 1; + + return dev; +} +*/ +//----------------------------------------------------------------------------- +/** + ObtenerRespuesta + Lee del puerto los datos pendientes del buffer + (solo lee lo que expulse el LM) +*/ +char * __fastcall TLm2000::ObtenerRespuesta( char *rcv ) +{ + char buf[80], enviar[80]; + DWORD CHK, chkF = 0; + int i = 0; + DWORD dwCommModemStatus; + + if ( LM_opened ) + { + +/* +03-02-2002 ELIMINADO PARA EVITAR QUEDAR COLGADO A LA ESPERA DEL LEGO + Esperemos que los TIME-OUTS funcienen BIEN sin esto. + // Specify a set of events to be monitored for the port. + SetCommMask (LM_handle, EV_RXCHAR | EV_CTS | EV_DSR | EV_RLSD | EV_RING); + // Wait for an event to occur for the port. + WaitCommEvent (LM_handle, &dwCommModemStatus, 0); + // Re-specify the set of events to be monitored for the port. + SetCommMask (LM_handle, EV_RXCHAR | EV_CTS | EV_DSR | EV_RING); +*/ + // Recogemos la respuesta del lector + while( i < 75 ) + { + ReadFile( LM_handle, &(rcv[i]), 1, &CHK, NULL ); + if ( CHK == 1 ) + { + if ( rcv[i] == 13 ) break; else i++; + } else { +// if ( CHK == 0 ) + if ( (++chkF) >= 10 ) + { + sprintf( rcv, "ERROR: Respuesta fuera de tiempo" ); + return rcv; + } + } + } + rcv[i+1] = '\0'; + + // Verificamos la respuesta del lector + if ( i > 10 && i < 75) + { + char *ptr; + // Generamos nuestro CHECKSUM de la respuesta + strcpy( buf, rcv ); buf[ i - 4 ] = '\0'; + CHK = GeneraChecksum( buf ); + // Aislamos el CHECKSUM de la respuesta + strcpy( buf, rcv ); ptr = buf + i - 4; buf[ i ] = '\0'; + // Comparamos los CHECKSUM + sprintf( enviar, "%04d", CHK ); + if ( strcmp( enviar, ptr ) != 0 ) + { + strcpy( enviar, rcv ); + sprintf( rcv, "ERROR CHECKSUM: (%04d) - %s", CHK, enviar ); + } + } else + sprintf( rcv, "ERROR: Respuesta de longitud incorrecta" ); + } else { + sprintf( rcv, "ERROR: LM no abierto" ); + } + + #ifdef _verbose + (printfv)( Format("Recibido: %s\n", ARRAYOFCONST((rcv)) ) ); + #endif + + return rcv; +}; +//----------------------------------------------------------------------------- +/** + Envia el comando CMD al lector ID, devolviendo la respuesta 'rcv' +*/ +char * __fastcall TLm2000::EnviarComando( char *CMD, int ID, char *rcv ) +{ + char buf[80], enviar[80]; + DWORD CHK; + if ( LM_opened ) + { + sprintf( buf, "L%03d:%s,", ID, CMD ); + CHK = GeneraChecksum( buf ); + sprintf( enviar, "%s%04d\r", buf, CHK ); + + #ifdef _verbose + (printfv)( Format("\nEnviado: %s\n", ARRAYOFCONST((enviar)) ) ); + #endif + + WriteFile( LM_handle, enviar, strlen(enviar), &CHK, NULL ); + + ObtenerRespuesta( rcv ); + + } else + sprintf( rcv, "ERROR: LM no abierto" ); + + return rcv; +} +//----------------------------------------------------------------------------- +/** + Procesa el transito devuelto tras una llamada a CMD=I +*/ +void __fastcall TLm2000::ProcesaTransito( char *FGT, char *TPT, char *CDT, char *O, char *DTT, char *CTT, char *ETT ) +{ + #ifdef _verbose + (printfv)( Format("\nFGT %s\nTPT: %s\nCDT: %s\nO: %s\nDTT: %s\nCTT: %s\nETT: %s\n", ARRAYOFCONST((FGT, TPT, CDT, O, DTT, CTT, ETT)) ) ); + #endif +#ifndef PRUEBAS_SIN_VCL + if ( FOnProcesaTransito ) (FOnProcesaTransito)( FGT, TPT, CDT, O, DTT, CTT, ETT ); +#endif +} +//----------------------------------------------------------------------------- +/** + Dada una cadena de parámetros delimitados por coma ',', obtiene y de vuelve + en 'prm' el parametro 'narg'-esimo. +*/ +char * __fastcall TLm2000::ObtenerParametro( char *cadena, int narg, char *prm ) +{ + int i; + char *inicio, *fin; + + inicio = cadena; + fin = cadena; + + // Delimitación del parámetro + for ( i=0; *fin != '\0' && i < narg; fin++ ) + { + // Si es el comienzo de un nuevo parametro... + if ( *fin == ',' ) + { + i++; + if ( i < narg ) + inicio = (fin + 1); + } + } + + // Longitud del parametro + i = fin - inicio - 1; + // Copia aislada del parámetro + strncpy( prm, inicio, i ); + prm[ i ] = '\0'; + + return prm; +} +//----------------------------------------------------------------------------- +/** + Esta es la función que debe ser redefinida... +*/ +// bool BuscaTarjeta( int FGA, int TPA, int CDA, int *TPR, int *PNR, char *message ) +// { +// bool enc = false; +// +// #ifdef _verbose +// (printfv)( "Localizando tarjeta: (%d)-%d-%d", FGA, TPA, CDA ); +// #endif +// // Localizamos la tarjeta +// if ( /* LOCALIZADA */ 1 ) +// { +// *TPR = 0; +// *PNR = 0; +// sprintf( message, "ACCESO PERMITIDOwww.infdj.com" ); +// enc = true; +// } else { +// sprintf( message, "ACCESO DENEGADOwww.infdj.com" ); +// enc = false; +// } +// +// return enc; +// } +// +//----------------------------------------------------------------------------- +/** + Procesa una tarjeta despues de un SIMPLE_INTERROGATION +*/ +bool __fastcall TLm2000::ProcesaTarjeta( int ID, char *msg ) +{ + char buff[80], rcv[80]; + char message[80]; + int FGA, TPA, CDA, TPR, PNR; + #ifdef _verbose + (printfv)( Format("ProcesaTarjeta: %s", ARRAYOFCONST((msg)) ) ); + #endif + + // Obtenemos los datos de la tarjeta + FGA = atoi( ObtenerParametro( msg, 2, buff ) ); + TPA = atoi( ObtenerParametro( msg, 3, buff ) ); + CDA = atoi( ObtenerParametro( msg, 4, buff ) ); + + + // La cotejamos con nuestra base de datos ( CDA ) +#ifdef PRUEBAS_SIN_VCL + if ( 1 ) +#else + if ( (FOnBuscaTarjeta) && (FOnBuscaTarjeta)( ID, FGA, TPA, CDA, &TPR, &PNR, message ) ) +#endif + { + // ¿Tiene permiso? + sprintf( buff, "%s, %d, %d,%s", CARD_VALID, TPR, PNR, message ); + EnviarComando( buff, ID, rcv ); + + if ( rcv[5] == 'X' ) + { + // Necesitamos esperar a que se libere la linea de comunicación + Sleep( 1000 ); + PassageOpening( ID, (FGA & 0x0008) ? 1 : 2 ); + } + + } else { + // Si no esta... + sprintf( buff, "%s, %d,%s", CARD_NOT_VALID, RTF_MOTIVE_NOT_STANDARD, message ); + EnviarComando( buff, ID, rcv ); + } + + return ( rcv[5] == 'X' ); + +} +//----------------------------------------------------------------------------- +/** + Realiza una InterrogaciónSimple +*/ +char * __fastcall TLm2000::SimpleInterrogation( int ID, char *rcv ) +{ + char prm[7][20]; + + + EnviarComando( SIMPLE_INTERROGATION, ID, rcv ); + + // Tratamos las posibles respuestas a una Interrogación Simple + switch( rcv[5] ) + { + // Transit to download + case 'T': + #ifdef _verbose + (printfv)( "Transit to download\n" ); + #endif + ProcesaTransito( ObtenerParametro( rcv, 2, prm[0] ), + ObtenerParametro( rcv, 3, prm[1] ), + ObtenerParametro( rcv, 4, prm[2] ), + ObtenerParametro( rcv, 5, prm[3] ), + ObtenerParametro( rcv, 6, prm[4] ), + ObtenerParametro( rcv, 7, prm[5] ), + ObtenerParametro( rcv, 8, prm[6] ) ); + EnviarComando( SHOW_NEXT_TRANSIT, ID, rcv ); + break; + // Information to Request + case 'H': + #ifdef _verbose + (printfv)( "Information to Request\n" ); + #endif + ProcesaTarjeta( ID, rcv ); + break; + // Alarm + case 'A': + #ifdef _verbose + (printfv)( "Alarm\n" ); + #endif + break; + // No information to communicate + case 'R': + #ifdef _verbose + (printfv)( "No information to communicate\n" ); + #endif + break; + // -- error -- + default: + #ifdef _verbose + (printfv)( "ERROR: SimpleInterrogration ERROR de RESPUESTA\n" ); + #endif + break; + } + + return rcv; + +} +//----------------------------------------------------------------------------- +/** + Lee una tarjeta de la memoria del lector +*/ +bool __fastcall TLm2000::ReadCardMemory( int ID, TCard *CRD ) +{ + bool hay_mas_tarjetas = false; + char buff[80], rcv[80]; + + EnviarComando( READ_CARD_MEMORY, ID, rcv ); + if ( rcv[0] != 'E' ) + { + hay_mas_tarjetas = !( rcv[5] == 'X' && rcv[7] == '1' ); + if ( hay_mas_tarjetas ) + { + // Procesamos los parámetros + CRD->FLG = atol( ObtenerParametro( rcv, 2, buff ) ); // FLG + CRD->TYP = atol( ObtenerParametro( rcv, 3, buff ) ); // TYP + CRD->CDA = atol( ObtenerParametro( rcv, 4, buff ) ); // CDA + CRD->PIN = atol( ObtenerParametro( rcv, 5, buff ) ); // PIN + CRD->GIS = atol( ObtenerParametro( rcv, 6, buff ) ); // GIS + CRD->MES = atol( ObtenerParametro( rcv, 7, buff ) ); // MES + CRD->ANS = atol( ObtenerParametro( rcv, 8, buff ) ); // ANS + CRD->ORS = atol( ObtenerParametro( rcv, 9, buff ) ); // ORS + CRD->MIS = atol( ObtenerParametro( rcv, 10, buff ) ); // MIS + CRD->SES = atol( ObtenerParametro( rcv, 11, buff ) ); // SES + CRD->REV = atol( ObtenerParametro( rcv, 12, buff ) ); // REV + CRD->CRD = atol( ObtenerParametro( rcv, 13, buff ) ); // CRD + #ifdef _verbose + (printfv)( Format("FLG: %ld\nTYP: %ld\nCDA: %ld\nPIN: %ld\nGIS: %ld\nMES: %ld\nANS: %ld\nORS: %ld\nMIS: %ld\nSES: %ld\nREV: %ld\nCRD: %ld\n", ARRAYOFCONST((CRD->FLG, CRD->TYP, CRD->CDA, CRD->PIN, CRD->GIS, CRD->MES, CRD->ANS, CRD->ORS, CRD->MIS, CRD->SES, CRD->REV, CRD->CRD)) ) ); + (printfv)( "CARD_FLAG\n--------\n" ); + int nFLAG = CRD->FLG; + (printfv)( Format("EXTERNAL READER: %s\nINTERNAL READER: %s\nFROM LEFT TO RIGHT: %s\nFROM RIGHT TO LEFT %s\n",ARRAYOFCONST(( (nFLAG & 0x08) ? "SI":"NO", + (nFLAG & 0x04) ? "SI":"NO", + (nFLAG & 0x02) ? "SI":"NO", + (nFLAG & 0x01) ? "SI":"NO")) ) ); + #endif + } + } else { + #ifdef _verbose + (printfv)( Format("ERROR READ_CARD_MEMORY: %s\n", ARRAYOFCONST((rcv)) ) ); + #endif + } + + return hay_mas_tarjetas; +} +//----------------------------------------------------------------------------- +/** + Debe devolver la lista de tarjetas de la memoria completa + (No implento el parametro de salida de momento) +*/ +void __fastcall TLm2000::ReadEntireCardMemory( int ID ) +{ + char rcv[80]; + TCard CRD; + + EnviarComando( INITIALIZE_READING, ID, rcv ); + if ( rcv[0] != 'E' ) + { + while( ReadCardMemory( ID, &CRD ) ) + { + // Procesar Tarjeta + ///***/// + EnviarComando( SHOW_NEXT_MESSAGE, ID, rcv ); + }; + } else { + #ifdef _verbose + (printfv)( Format("ERROR FIRST_CARD: %s\n", ARRAYOFCONST((rcv)) ) ); + #endif + } +} +// ############################################################################# +// ############################################################################# +// ############################################################################# +// ############################################################################# +// ############################################################################# +// ############################################################################# +// ############################################################################# +//----------------------------------------------------------------------------- +/** + Introducimos tarjetas en la Memoria +*/ +int __fastcall TLm2000::EnterCardMemory( int ID, TCard *CRD ) +{ + int dev; + char enviar[80], rcv[80]; + + sprintf( enviar, "%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", ENTER_CARD_MEMORY, + CRD->FLG, CRD->TYP, CRD->CDA, CRD->PIN, CRD->GIS, CRD->MES, + CRD->ANS, CRD->ORS, CRD->MIS, CRD->SES, CRD->REV, CRD->CRD ); + + EnviarComando( enviar, ID, rcv ); + + if ( rcv[5] == 'X' ) + { + dev = atol( ObtenerParametro( rcv, 2, enviar ) ); + } else + if ( rcv[5] == 'E' ) + { + switch( rcv[7] ) + { + case '6': + dev = -6; + #ifdef _verbose + (printfv)( Format("ERROR EnterCardMemory Memory full: %s", ARRAYOFCONST((rcv)) ) ); + #endif + break; + case '8': + dev = -8; + #ifdef _verbose + (printfv)( Format("ERROR EnterCardMemory Card code below acceptable minimum: %s", ARRAYOFCONST((rcv)) ) ); + #endif + break; + default: + #ifdef _verbose + (printfv)( Format("ERROR EnterCardMemory (SIN IDENTIFICAR): %s", ARRAYOFCONST((rcv)) ) ); + #endif + } + + } + return dev; +} +//----------------------------------------------------------------------------- +/** + Elimina del LM'ID' la tarjeta TIP/COD +*/ +int __fastcall TLm2000::DeleteCardMemory( int ID, int TIP, int COD ) +{ + int dev; + char enviar[80], rcv[80]; + sprintf( enviar, "%s,0,%d,%d", DELETE_CARD_MEMORY, TIP, COD ); + EnviarComando( enviar, ID, rcv ); + + if ( rcv[5] == 'X' ) + dev = atoi( ObtenerParametro( rcv, 2, enviar ) ); + else + dev = 0; + + return dev; +} +//----------------------------------------------------------------------------- +/** + Elimina TODAS las tarjetas de la memoria +*/ +int __fastcall TLm2000::DeleteAllCardMemory( int ID, int TIP ) +{ + return DeleteCardMemory( ID, TIP, TIP ); +} +//----------------------------------------------------------------------------- +/** + Lee la configuración del Lector ID +*/ +RMem * __fastcall TLm2000::ReadMemoryCFG( int ID, RMem *mem ) +{ + char rcv[80], prm[80]; + + EnviarComando( READ_MEMORY_CFG, ID, rcv ); + + mem->FMC = atoi( ObtenerParametro( rcv, 2, prm ) ); + mem->MAC = atoi( ObtenerParametro( rcv, 3, prm ) ); + mem->LFN = atoi( ObtenerParametro( rcv, 4, prm ) ); + mem->NCR = atoi( ObtenerParametro( rcv, 5, prm ) ); + mem->CMN = atoi( ObtenerParametro( rcv, 6, prm ) ); + mem->CMX = atoi( ObtenerParametro( rcv, 7, prm ) ); + mem->NBN = atoi( ObtenerParametro( rcv, 8, prm ) ); + mem->NMP = atoi( ObtenerParametro( rcv, 9, prm ) ); + mem->NFA = atoi( ObtenerParametro( rcv, 10, prm ) ); + mem->RMS = atoi( ObtenerParametro( rcv, 11, prm ) ); + mem->MCA = atoi( ObtenerParametro( rcv, 12, prm ) ); + mem->MCR = atoi( ObtenerParametro( rcv, 13, prm ) ); + + #ifdef _verbose + (printfv)( Format("%s\n", ARRAYOFCONST((rcv)) ) ); + (printfv)( Format("FMC: %d\nMAC: %d\nLFN: %d\nNCR: %d\nCMN: %d\nCMX: %d\nNBN: %d\nNMP: %d\nNFA: %d\nRMS: %d\nMCA: %d\nMCR: %d\n", ARRAYOFCONST(( + mem->FMC, mem->MAC, mem->LFN, mem->NCR, mem->CMN, mem->CMX, + mem->NBN, mem->NMP, mem->NFA, mem->RMS, mem->MCA, mem->MCR)) ) ); + #endif + + return mem; +} +//----------------------------------------------------------------------------- +/** + Configura el Lector ID +*/ +bool __fastcall TLm2000::ConfigureMemory( int ID, RMem *mem ) +{ + bool dev; + char enviar[80], rcv[80]; + // Verificamos que todos los parámetros sean correctos + if ( ((mem->FMC) & ( FMC_LONG_CODES + FMC_MINI_MEMORY )) ) + { + #ifdef _verbose + (printfv)( "Error ConfigureMemory: FMC_LONG_CODES y FMC_MINI_MEMORY son incompatibles" ); + #endif + dev = false; + } else { + // Configuramos la memoria + sprintf( enviar, "%s,%s,,%s,,%s,%s,%s,%s,%s,%s,%s,%s", CONFIGURE_MEMORY, + mem->FMC, mem->LFN, /*mem->NCR, */ mem->CMN, mem->CMX, mem->NBN, + mem->NMP, mem->NFA, mem->RMS, mem->MCA, mem->MCR ); + EnviarComando( enviar, ID, rcv ); + if ( rcv[5] == 'E' ) + { + #ifdef _verbose + (printfv)( "ERROR ConfigureMemory: MEMORY IS FULL ó PAMARETERS ARE INCORRECT" ); + #endif + dev = false; + } + if ( rcv[5] == 'X' ) + { + int resp = atoi( ObtenerParametro( rcv, 2, enviar ) ); + #ifdef _verbose + (printfv)( "ConfigureMemory: " ); + switch( resp ) + { + case 0: (printfv)( "Memory not affected" ); break; + case 1: (printfv)( "Transit memory" ); break; + case 2: (printfv)( "Transit memory + personal messages memory" ); break; + case 3: (printfv)( "Transit memory + personal messages memory + periods" ); break; + default: + (printfv)( Format("Card Memory [ %d ]", ARRAYOFCONST((resp)) ) ); break; + } + dev = true; + #endif + } + } + return dev; +} +//----------------------------------------------------------------------------- +/** + Programación de los Periodos +*/ +bool __fastcall TLm2000::ProgrammingPeriods( int ID, int NFS, int PBN, char *StarTime, char *EndTime, int GIF ) +{ + char enviar[80], rcv[80]; + + sprintf( enviar, "%s,%d,%d,%s,%s,%d", PROGRAMMING_PERIODS, NFS, PBN, StarTime, EndTime, GIF ); + EnviarComando( enviar, ID, rcv ); + + #ifdef _verbose + if ( rcv[5] == 'E' ) + (printfv)( Format("ERROR ProgrammingPeriods Arguments incorrect: %s", ARRAYOFCONST((rcv)) ) ); + #endif + + return ( rcv[5] == 'X' ); +} +//----------------------------------------------------------------------------- +/** + Configura el número de caracteres en la banda +*/ +bool __fastcall TLm2000::SetCharsOnBand( int ID, CAB *cab ) +{ + char enviar[80], rcv[80]; + + sprintf( enviar, "%s,%d,%d,%d,%d,%d,%d,%d,%d", WRITE_CHARS_ON_BAND, cab->GAP, cab->LEP, cab->GAC, cab->LEC, cab->GAR, cab->LER, cab->GDI, cab->GDF ); + EnviarComando( enviar, ID, rcv ); + + #ifdef _verbose + if ( rcv[5] == 'E' ) + (printfv)( Format("ERROR SetCharsOnBand: %s", ARRAYOFCONST((rcv)) ) ); + #endif + + return ( rcv[5] == 'X' ); +} +//----------------------------------------------------------------------------- +/** + Parametros de operacion del programa +*/ +bool __fastcall TLm2000::ProgramOperationParameters( int ID, POP *pop ) +{ + char enviar[80], rcv[80]; + + sprintf( enviar, "%s,%d,%d,%d,%d,%d,%d,%d,%d", PROGRAM_OPERATION_PARAMETERS, pop->BKN, pop->BKP, pop->PRN, pop->MCL, pop->MCK, pop->ENF, pop->SNV, pop->ENI ); + EnviarComando( enviar, ID, rcv ); + + return ( rcv[5] == 'X' ); +} +//----------------------------------------------------------------------------- +/** + Activar los reles de salida + 1 Internal Reader + 2 External Reader + 3 Output 1 + 4 Output 2 +*/ +bool __fastcall TLm2000::PassageOpening( int ID, int Passage ) +{ + char enviar[80], rcv[80]; + + sprintf( enviar, "%s,%d", PASSAGE_OPENING, Passage ); + EnviarComando( enviar, ID, rcv ); + + return ( rcv[5] == 'X' ); +} +//----------------------------------------------------------------------------- +/** + Reconfigura el reloj +*/ +bool __fastcall TLm2000::ResetClock( int ID, RClock *clock ) +{ + int err; + char enviar[80], rcv[80]; + + sprintf( enviar, "%s,%d,%d,%d,%d,%d,%d", RESET_CLOCK, clock->GIA, clock->MEA, clock->ANA, clock->ORA, clock->MIA, clock->SEA ); + EnviarComando( enviar, ID, rcv ); + + #ifdef _verbose + if ( rcv[5] == 'E' ) + { + err = atoi( ObtenerParametro( rcv, 2, enviar ) ); + (printfv)( Format( "ERROR ResetClock: %s", ARRAYOFCONST(( (err == 0) ? "Date incorrect" : "Time incorrect")) ) ); + } + #endif + + + return ( rcv[5] == 'X' ); +} +//----------------------------------------------------------------------------- +/** + Lee los caracteres en la banda +*/ +bool __fastcall TLm2000::GetCharsOnBand( int ID, CAB *cab ) +{ + int dev; + char enviar[80], rcv[80]; + + sprintf( enviar, "%s", READ_CHARS_ON_BAND ); + EnviarComando( enviar, ID, rcv ); + + if ( rcv[5] != 'E' ) + { + dev = true; + cab->GAP = atoi( ObtenerParametro( rcv, 2, enviar ) ); + cab->LEP = atoi( ObtenerParametro( rcv, 3, enviar ) ); + cab->GAC = atoi( ObtenerParametro( rcv, 4, enviar ) ); + cab->LEC = atoi( ObtenerParametro( rcv, 5, enviar ) ); + cab->GAR = atoi( ObtenerParametro( rcv, 6, enviar ) ); + cab->LER = atoi( ObtenerParametro( rcv, 7, enviar ) ); + cab->GDI = atoi( ObtenerParametro( rcv, 8, enviar ) ); + cab->GDF = atoi( ObtenerParametro( rcv, 9, enviar ) ); + #ifdef _verbose + (printfv)( Format("ReadCharsOnBand: %d", ARRAYOFCONST((dev)) ) ); + #endif + } else { + dev = false; + #ifdef _verbose + (printfv)( Format("ERROR ReadCharsOnBand: %s", ARRAYOFCONST((rcv)) ) ); + #endif + } + + return dev; + +} +//----------------------------------------------------------------------------- +/** + Lee los prefijos activos +*/ +int __fastcall TLm2000::ReadingPrefixes( int ID, int NPR ) +{ + int dev; + char enviar[80], rcv[80]; + + sprintf( enviar, "%s,%d", READ_PREFIXES, NPR ); + EnviarComando( enviar, ID, rcv ); + + if ( rcv[5] != 'E' ) + { + dev = atoi( ObtenerParametro( rcv, 2, enviar ) ); + #ifdef _verbose + (printfv)( Format("ReadingPrefixes: %d", ARRAYOFCONST((dev)) ) ); + #endif + } else { + dev = -1; + #ifdef _verbose + (printfv)( Format("ERROR ReadingPrefixes: NPR argument", ARRAYOFCONST((dev)) ) ); + #endif + } + + return dev; +} +//----------------------------------------------------------------------------- +/** + Lee los mensajes personales +*/ +bool __fastcall TLm2000::ReadPersonalMessage( int ID ) +{ + char rcv[80], prm[80]; + int TPM, CDM, MSU; + + EnviarComando( READ_PERSONAL_MESSAGE, ID, rcv ); + + TPM = atoi( ObtenerParametro( rcv, 2, prm ) ); + CDM = atoi( ObtenerParametro( rcv, 3, prm ) ); + MSU = atoi( ObtenerParametro( rcv, 4, prm ) ); + + #ifdef _verbose + (printfv)( Format("TPM: %d\nCDM: %d\nMSU: %d\n-------\n", ARRAYOFCONST((TPM, CDM, MSU)) ) ); + #endif + + return ( rcv[5] != 'X' ); +} +//----------------------------------------------------------------------------- +/** + Lee todos los mensajes personales +*/ +void __fastcall TLm2000::ReadAllPersonalMessage( int ID ) +{ + char rcv[80]; + + EnviarComando( INITIALIZE_READING_CM, ID, rcv ); + + if ( rcv[5] == 'X' ) + { + while( ReadPersonalMessage( ID ) ) + { + EnviarComando( SHOW_NEXT_PMESSAGE, ID, rcv ); + }; + } +} + +//----------------------------------------------------------------------------- +/** + N.P.I de lo que hace esto +*/ +void __fastcall TLm2000::SetTime( int ID, TSD *tsd ) +{ + char enviar[80], rcv[80]; + + sprintf( enviar, "%s,%d,%d,%d,%d,%d,%d,%d,", SET_TIME, tsd->CHN, tsd->GSL, tsd->MMS, tsd->ASL, tsd->HSL, tsd->MSL, tsd->SSL ); + EnviarComando( enviar, ID, rcv ); + + if ( rcv[5] == 'X' ) + { +/* + while( ReadPersonalMessage( ID ) ) + { + EnviarComando( SHOW_NEXT_PMESSAGE, ID, rcv ); + }; +*/ + } +} +//----------------------------------------------------------------------------- +/** + Lee los mensajes del sistema +*/ +char * __fastcall TLm2000::ReadSystemMessages( int ID, int IDmsg, char *rcv ) +{ + char enviar[80]; + + sprintf( enviar, "%s,%d,", READ_SYSTEM_MESSAGE, IDmsg ); + EnviarComando( enviar, ID, rcv ); + + if ( rcv[5] == 'E' ) + { + #ifdef _verbose + sprintf( rcv, "ERROR ReadSystemMessage: IDmsg fuera de RANGO" ); + #endif + + } + return rcv; +} diff --git a/LM2000_vcl/LM2000.dcr b/LM2000_vcl/LM2000.dcr new file mode 100644 index 0000000..c1a964a Binary files /dev/null and b/LM2000_vcl/LM2000.dcr differ diff --git a/LM2000_vcl/LM2000.h b/LM2000_vcl/LM2000.h new file mode 100644 index 0000000..ca57aec --- /dev/null +++ b/LM2000_vcl/LM2000.h @@ -0,0 +1,180 @@ +// #define PRUEBAS_SIN_VCL + +//--------------------------------------------------------------------------- + +#ifndef LM2000H +#define LM2000H +//--------------------------------------------------------------------------- +#include +#include +#include +#include +//--------------------------------------------------------------------------- +/** Estructura que define a una tarjeta */ +typedef struct +{ + int FLG; // Enabling flag + int TYP; // Card Type + int CDA; // Card Code + int PIN; // PIN + int GIS; // Expiration day + int MES; // Expiration month + int ANS; // Expiration year + int ORS; // Expiration hour + int MIS; // Expiration minute + int SES; // Expiration second + int REV; // Revision + int CRD; // Credit +} TCard; + +/** Estructura que define el modo de lectura/escritura */ +typedef struct +{ + int FMC; // Card memory flag + int MAC; // + int LFN; // Operation logic + int NCR; // Cards in memory + int CMN; // Minimum code + int CMX; // Maximum code + int NBN; // Number of bands + int NMP; // Number of messages + int NFA; // Number of periods + int RMS; // Lines in messages + int MCA; // Motive mode + int MCR; // Credit mode +} RMem; + +/** Program Operation Parameters */ +typedef struct +{ + int BKN; // Network block + int BKP; // Printer block + int PRN; // Print mode + int MCL; // Mode for requesting information from P.C. + int MCK; // Card control mode + int ENF; // Enabling of keyboard functions + int SNV; // Anomaly memorization mode + int ENI; // Number of intrusions per apparatus block +} POP; + +/** Configuracion de fecha/hora */ +typedef struct +{ + int GIA; // Day + int MEA; // Month + int ANA; // Year + int ORA; // Hour + int MIA; // Minute + int SEA; // Second +} RClock; + +/** Estructura TSD */ +typedef struct +{ + int CHN; + int GSL; + int MMS; + int ASL; + int HSL; + int MSL; + int SSL; +} TSD; + +/** Caracteres en la Banda */ +typedef struct +{ + int GAP; // Number of empty characters preceding prefix + int LEP; // Length of prefix in characters + int GAC; // Number of empty characters preceding code + int LEC; // Length of code in characters + int GAR; // Number of empty characters preceding revision + int LER; // Number of characters containing number of revision + int GDI; // Number of empty characters preceding validity start date + int GDF; // Number of empty characters preceding validity end date +} CAB; + +/** LM2000 + Clase que encapsula las funciones necesarias para comunicarse con el LM2000 +*/ +#ifdef PRUEBAS_SIN_VCL +class PACKAGE TLm2000 +#else +class PACKAGE TLm2000 : public TComponent +#endif +{ +private: + int __fastcall GeneraChecksum( char *cadena ); + char * __fastcall ObtenerRespuesta( char *rcv ); + char * __fastcall EnviarComando( char *CMD, int ID, char *rcv ); + char * __fastcall ObtenerParametro( char *cadena, int narg, char *prm ); + bool __fastcall ProcesaTarjeta( int ID, char *msg ); + + /** Manejador que apunta al Puerto donde dialogamos */ + HANDLE LM_handle; + /** Indica si estamos en comunicación actualmente */ + bool LM_opened; + + void __fastcall ProcesaTransito( char *FGT, char *TPT, char *CDT, char *O, char *DTT, char *CTT, char *ETT ); + +#ifndef PRUEBAS_SIN_VCL + typedef bool __fastcall (__closure *Tprintfv)( AnsiString msg ); + typedef bool __fastcall (__closure *TBuscaTarjeta)( int ID, int FGA, int TPA, int CDA, int *TPR, int *PNR, char *message ); + typedef void __fastcall (__closure *TOnProcesaTransito)( char *FGT, char *TPT, char *CDT, char *O, char *DTT, char *CTT, char *ETT ); + Tprintfv printfv; + TBuscaTarjeta FOnBuscaTarjeta; + TOnProcesaTransito FOnProcesaTransito; +#else + void __fastcall printfv( AnsiString msg ); +#endif + +protected: +public: +#ifdef PRUEBAS_SIN_VCL + __fastcall TLm2000(void); +#else + __fastcall TLm2000(TComponent* Owner); +#endif + __fastcall ~TLm2000(void); + + void __fastcall CierraPuerto(void); + int __fastcall AbrePuerto(LPTSTR lpszPortName); + + /** El 'polling' debe llamar continuamente a esta función para conocer + el estado de los dispositivos 'ID' */ + char * __fastcall SimpleInterrogation( int ID, char *rcv ); + + // LECTURA DE MEMORIA + bool __fastcall ReadCardMemory( int ID, TCard *CRD ); + void __fastcall ReadEntireCardMemory( int ID ); + // ESCRITURA DE MEMORIA + int __fastcall EnterCardMemory( int ID, TCard *CRD ); + int __fastcall DeleteCardMemory( int ID, int TIP, int COD ); + int __fastcall DeleteAllCardMemory( int ID, int TIP ); + // CONFIGURACION LM2000 + bool __fastcall ConfigureMemory( int ID, RMem *mem ); + RMem * __fastcall ReadMemoryCFG( int ID, RMem *mem ); + bool __fastcall ProgrammingPeriods( int ID, int NFS, int PBN, char *StarTime, char *EndTime, int GIF ); + bool __fastcall ResetClock( int ID, RClock *clock ); + int __fastcall ReadingPrefixes( int ID, int NPR ); + bool __fastcall ReadPersonalMessage( int ID ); + void __fastcall ReadAllPersonalMessage( int ID ); + void __fastcall SetTime( int ID, TSD *tsd ); + char * __fastcall ReadSystemMessages( int ID, int IDmsg, char *rcv ); + bool __fastcall ProgramOperationParameters( int ID, POP *pop ); + bool __fastcall SetCharsOnBand( int ID, CAB *cab ); + bool __fastcall GetCharsOnBand( int ID, CAB *cab ); + bool __fastcall PassageOpening( int ID, int Passage ); + + /* Llamadas que deben ser sobrecargadas CALLBACK*/ +// void __fastcall ProcesaTransito( char *FGT, char *TPT, char *CDT, char *O, char *DTT, char *CTT, char *ETT ); +// bool __fastcall BuscaTarjeta( int FGA, int TPA, int CDA, int *TPR, int *PNR, char *message ); +#ifndef PRUEBAS_SIN_VCL +__published: + __property Tprintfv OnVerboseMessage = {read=printfv, write=printfv }; + __property TOnProcesaTransito OnProcesaTransito = {read=FOnProcesaTransito, write=FOnProcesaTransito }; + __property TBuscaTarjeta OnBuscaTarjeta = {read=FOnBuscaTarjeta, write=FOnBuscaTarjeta }; +#endif +}; +//--------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/LM2000_vcl/LM2000_vcl.bpi b/LM2000_vcl/LM2000_vcl.bpi new file mode 100644 index 0000000..c410c42 Binary files /dev/null and b/LM2000_vcl/LM2000_vcl.bpi differ diff --git a/LM2000_vcl/LM2000_vcl.bpk b/LM2000_vcl/LM2000_vcl.bpk new file mode 100644 index 0000000..84b14d5 --- /dev/null +++ b/LM2000_vcl/LM2000_vcl.bpk @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=3 +Item0=..\cap_control;$(BCB)\include;$(BCB)\include\vcl +Item1=..\cap_control;$(BCB)\include;$(BCB)\include\vcl;C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl +Item2=;..\cap_control;$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=3 +Item0=..\cap_control;$(BCB)\lib\obj;$(BCB)\lib +Item1=..\cap_control;$(BCB)\lib\obj;$(BCB)\lib;C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl +Item2=;..\cap_control;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[HistoryLists\hlIntOutputDir] +Count=1 +Item0=..\obj + +[HistoryLists\hlFinalOutputDir] +Count=3 +Item0=..\LM2000_vcl +Item1=C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl\ +Item2=C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl + +[HistoryLists\hIBPIOutputDir] +Count=3 +Item0=..\LM2000_vcl +Item1=C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl\ +Item2=C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + +[Linker] +LibPrefix= +LibSuffix= +LibVersion= + + \ No newline at end of file diff --git a/LM2000_vcl/LM2000_vcl.bpl b/LM2000_vcl/LM2000_vcl.bpl new file mode 100644 index 0000000..830b0a7 Binary files /dev/null and b/LM2000_vcl/LM2000_vcl.bpl differ diff --git a/LM2000_vcl/LM2000_vcl.cpp b/LM2000_vcl/LM2000_vcl.cpp new file mode 100644 index 0000000..dbfd9d0 --- /dev/null +++ b/LM2000_vcl/LM2000_vcl.cpp @@ -0,0 +1,16 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/LM2000_vcl/LM2000_vcl.lib b/LM2000_vcl/LM2000_vcl.lib new file mode 100644 index 0000000..f4ad1fe Binary files /dev/null and b/LM2000_vcl/LM2000_vcl.lib differ diff --git a/LM2000_vcl/LM2000_vcl.res b/LM2000_vcl/LM2000_vcl.res new file mode 100644 index 0000000..2dadd02 Binary files /dev/null and b/LM2000_vcl/LM2000_vcl.res differ diff --git a/LM2000_vcl/LM2000_vcl.tds b/LM2000_vcl/LM2000_vcl.tds new file mode 100644 index 0000000..cdea9a3 Binary files /dev/null and b/LM2000_vcl/LM2000_vcl.tds differ diff --git a/LM2000_vcl/cleanup.bat b/LM2000_vcl/cleanup.bat new file mode 100644 index 0000000..42ad5b0 --- /dev/null +++ b/LM2000_vcl/cleanup.bat @@ -0,0 +1,8 @@ +del *.~* +del *.tds +del *.obj + +del *.ilc +del *.ild +del *.ilf +del *.ils \ No newline at end of file diff --git a/Modificaci_n Propuesta.doc b/Modificaci_n Propuesta.doc new file mode 100644 index 0000000..728627d Binary files /dev/null and b/Modificaci_n Propuesta.doc differ diff --git a/PROGRAMA CAP 1.doc b/PROGRAMA CAP 1.doc new file mode 100644 index 0000000..d7a208a Binary files /dev/null and b/PROGRAMA CAP 1.doc differ diff --git a/Test/TestLM.bpr b/Test/TestLM.bpr new file mode 100644 index 0000000..5c8da46 --- /dev/null +++ b/Test/TestLM.bpr @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/Test/TestLM.cpp b/Test/TestLM.cpp new file mode 100644 index 0000000..067e770 --- /dev/null +++ b/Test/TestLM.cpp @@ -0,0 +1,22 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("TestLM.res"); +USEFORM("test.cpp", Form1); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TForm1), &Form1); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/Test/TestLM.exe b/Test/TestLM.exe new file mode 100644 index 0000000..5bdd91b Binary files /dev/null and b/Test/TestLM.exe differ diff --git a/Test/TestLM.res b/Test/TestLM.res new file mode 100644 index 0000000..1392cb0 Binary files /dev/null and b/Test/TestLM.res differ diff --git a/Test/test.cpp b/Test/test.cpp new file mode 100644 index 0000000..d89c95b --- /dev/null +++ b/Test/test.cpp @@ -0,0 +1,59 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "test.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "LM2000" +#pragma resource "*.dfm" +TForm1 *Form1; +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ + Lm2000->AbrePuerto("COM1"); + +} +//--------------------------------------------------------------------------- + +bool __fastcall TForm1::Lm2000BuscaTarjeta(int ID, int FGA, int TPA, + int CDA, int *TPR, int *PNR, char *message) +{ + return CheckBox1->Checked; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::FormDestroy(TObject *Sender) +{ + Lm2000->CierraPuerto(); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button1Click(TObject *Sender) +{ + Lm2000->PassageOpening( 1, 1 ); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button2Click(TObject *Sender) +{ + Lm2000->PassageOpening( 1, 2 ); + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button3Click(TObject *Sender) +{ + Lm2000->PassageOpening( 1, 3 ); + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button4Click(TObject *Sender) +{ + Lm2000->PassageOpening( 1, 4 ); + +} +//--------------------------------------------------------------------------- +bool __fastcall TForm1::Lm2000VerboseMessage(AnsiString msg) +{ + return true; +} +//--------------------------------------------------------------------------- diff --git a/Test/test.dfm b/Test/test.dfm new file mode 100644 index 0000000..b796e03 --- /dev/null +++ b/Test/test.dfm @@ -0,0 +1,67 @@ +object Form1: TForm1 + Left = 197 + Top = 174 + Width = 425 + Height = 320 + Caption = 'Form1' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object Button1: TButton + Left = 8 + Top = 8 + Width = 193 + Height = 113 + Caption = 'Salida por defecto, del cabezal 1' + TabOrder = 0 + OnClick = Button1Click + end + object Button2: TButton + Left = 8 + Top = 136 + Width = 193 + Height = 113 + Caption = 'Salida por defecto, del cabezal 2' + TabOrder = 1 + OnClick = Button2Click + end + object Button3: TButton + Left = 216 + Top = 8 + Width = 193 + Height = 113 + Caption = 'Salida 1' + TabOrder = 2 + OnClick = Button3Click + end + object Button4: TButton + Left = 216 + Top = 136 + Width = 193 + Height = 113 + Caption = 'Salida 2' + TabOrder = 3 + OnClick = Button4Click + end + object CheckBox1: TCheckBox + Left = 8 + Top = 264 + Width = 145 + Height = 17 + Caption = 'Las tarjetas son corectas' + TabOrder = 4 + end + object Lm2000: TLm2000 + OnVerboseMessage = Lm2000VerboseMessage + OnBuscaTarjeta = Lm2000BuscaTarjeta + Left = 376 + Top = 16 + end +end diff --git a/Test/test.h b/Test/test.h new file mode 100644 index 0000000..9d7b355 --- /dev/null +++ b/Test/test.h @@ -0,0 +1,36 @@ +//--------------------------------------------------------------------------- + +#ifndef testH +#define testH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include "LM2000.h" +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TButton *Button1; + TButton *Button2; + TButton *Button3; + TButton *Button4; + TLm2000 *Lm2000; + TCheckBox *CheckBox1; + bool __fastcall Lm2000BuscaTarjeta(int ID, int FGA, int TPA, + int CDA, int *TPR, int *PNR, char *message); + void __fastcall FormDestroy(TObject *Sender); + void __fastcall Button1Click(TObject *Sender); + void __fastcall Button2Click(TObject *Sender); + void __fastcall Button3Click(TObject *Sender); + void __fastcall Button4Click(TObject *Sender); + bool __fastcall Lm2000VerboseMessage(AnsiString msg); +private: // User declarations +public: // User declarations + __fastcall TForm1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/ZT-2000/CardWriter.bpf b/ZT-2000/CardWriter.bpf new file mode 100644 index 0000000..1d47e15 --- /dev/null +++ b/ZT-2000/CardWriter.bpf @@ -0,0 +1,5 @@ +USEUNIT("ZT2000.cpp"); +//--------------------------------------------------------------------------- +This file is used by the project manager only and should be treated like the project file + + main \ No newline at end of file diff --git a/ZT-2000/CardWriter.bpr b/ZT-2000/CardWriter.bpr new file mode 100644 index 0000000..cb1354d --- /dev/null +++ b/ZT-2000/CardWriter.bpr @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=4 +Item0=$(BCB)\include;$(BCB)\include\vcl;..\..\VCLs\lib;C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl +Item1=$(BCB)\include;$(BCB)\include\vcl;..\..\VCLs\lib +Item2=$(BCB)\include;$(BCB)\include\vcl;C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\lib +Item3=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=3 +Item0=..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib;C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl +Item1=..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib +Item2=..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib;C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/ZT-2000/CardWriter.exe b/ZT-2000/CardWriter.exe new file mode 100644 index 0000000..5d4c576 Binary files /dev/null and b/ZT-2000/CardWriter.exe differ diff --git a/ZT-2000/ZT2000.cpp b/ZT-2000/ZT2000.cpp new file mode 100644 index 0000000..611295f --- /dev/null +++ b/ZT-2000/ZT2000.cpp @@ -0,0 +1,359 @@ +//--------------------------------------------------------------------------- + +#pragma hdrstop + +//--------------------------------------------------------------------------- + +#pragma argsused +#include "stdio.h" +//#include "cstring.h" +#include "stdlib.h" +#include "conio.h" +#include "windows.h" + +#define _verbose ACTIVA_EXPLICACION_PROCESOS + +HANDLE LM_handle; +bool LM_opened = false; + +int AbrePuerto(LPTSTR lpszPortName) +{ + DWORD dwError; + DCB PortDCB; + COMMTIMEOUTS CommTimeouts; + + if ( LM_opened ) return true; + + LM_opened = false; + + // Open the serial port. + LM_handle = CreateFile (lpszPortName, // Pointer to the name of the port + GENERIC_READ | GENERIC_WRITE, + // Access (read/write) mode + 0, // Share mode + NULL, // Pointer to the security attribute + OPEN_EXISTING,// How to open the serial port + 0, // Port attributes + NULL); // Handle to port with attribute + // to copy + + // If it fails to open the port, return FALSE. + if ( LM_handle == INVALID_HANDLE_VALUE ) + { + dwError = GetLastError (); + return false; + } else { + LM_opened = true; + } + + PortDCB.DCBlength = sizeof (DCB); + + // Get the default port setting information. + GetCommState (LM_handle, &PortDCB); + + // Change the DCB structure settings. + PortDCB.BaudRate = 9600; // Current baud + PortDCB.fBinary = TRUE; // Binary mode; no EOF check + PortDCB.fParity = TRUE; // Enable parity checking. + PortDCB.fOutxCtsFlow = FALSE; // No CTS output flow control + PortDCB.fOutxDsrFlow = FALSE; // No DSR output flow control + PortDCB.fDtrControl = DTR_CONTROL_ENABLE; + // DTR flow control type + PortDCB.fDsrSensitivity = FALSE; // DSR sensitivity + PortDCB.fTXContinueOnXoff = TRUE; // XOFF continues Tx + PortDCB.fOutX = FALSE; // No XON/XOFF out flow control + PortDCB.fInX = FALSE; // No XON/XOFF in flow control + PortDCB.fErrorChar = FALSE; // Disable error replacement. + PortDCB.fNull = FALSE; // Disable null stripping. + PortDCB.fRtsControl = RTS_CONTROL_ENABLE; + // RTS flow control + PortDCB.fAbortOnError = FALSE; // Do not abort reads/writes on + // error. + PortDCB.ByteSize = 7; // Number of bits/bytes, 4-8 + /* + PortDCB.ByteSize = 8; // Number of bits/bytes, 4-8 + */ + PortDCB.Parity = EVENPARITY; // 0-4=no,odd,even,mark,space + PortDCB.StopBits = 0; // 0,1,2 = 1, 1.5, 2 + + // Configure the port according to the specifications of the DCB + // structure. + if (!SetCommState (LM_handle, &PortDCB)) + { + // Could not configure the serial port. + printf( "Unable to configure the serial port\n%s\n" ); + dwError = GetLastError (); + return FALSE; + } + + + // Retrieve the time-out parameters for all read and write operations + // on the port. + GetCommTimeouts (LM_handle, &CommTimeouts); + + // Change the COMMTIMEOUTS structure settings. + CommTimeouts.ReadIntervalTimeout = MAXDWORD; + +// CommTimeouts.ReadTotalTimeoutMultiplier = 0; + CommTimeouts.ReadTotalTimeoutMultiplier = 1000; + + CommTimeouts.ReadTotalTimeoutConstant = 1000; + CommTimeouts.WriteTotalTimeoutMultiplier = 10; + CommTimeouts.WriteTotalTimeoutConstant = 1000; + + // Set the time-out parameters for all read and write operations + // on the port. + if (!SetCommTimeouts (LM_handle, &CommTimeouts)) + { + // Could not set the time-out parameters. + printf( "Unable to set the time-out parameters" ); + dwError = GetLastError (); + return FALSE; + } + + // Direct the port to perform extended functions SETDTR and SETRTS. + // SETDTR: Sends the DTR (data-terminal-ready) signal. + // SETRTS: Sends the RTS (request-to-send) signal. + EscapeCommFunction (LM_handle, SETDTR); + EscapeCommFunction (LM_handle, SETRTS); + + return LM_opened; +}; + +void CierraPuerto(void) +{ + if ( LM_opened ) + { + CloseHandle( LM_handle ); + } +}; + +// ObtenerRespuesta +// Lee del puerto los datos pendientes del buffer +// (solo lee lo que expulse el LM) +// +// +char *ObtenerRespuesta( char *rcv ) +{ + bool waitingResp = true; + DWORD CHK, chkF = 0; + int i = 0; + DWORD dwCommModemStatus; + + if ( LM_opened ) + { +/* + // Specify a set of events to be monitored for the port. + SetCommMask (LM_handle, EV_RXCHAR | EV_CTS | EV_DSR | EV_RLSD | EV_RING); + // Wait for an event to occur for the port. + WaitCommEvent (LM_handle, &dwCommModemStatus, 0); + // Re-specify the set of events to be monitored for the port. + SetCommMask (LM_handle, EV_RXCHAR | EV_CTS | EV_DSR | EV_RING); +*/ + // Recogemos la respuesta del lector + while( i < 75 ) + { + ReadFile( LM_handle, &(rcv[i]), 1, &CHK, NULL ); + if ( CHK == 1 ) + { + if ( waitingResp ) + { + if ( rcv[i] != 0x06) waitingResp = false; + // ACK + // printf( "Esperando a la tarjeta\n" ); + } + + if ( rcv[i] == 13 ) break; else { + if ( !waitingResp || i==0 ) i++; + } + } else + if ( CHK == 0 ) + { + chkF++; + if ( chkF == 20 ) + { + sprintf( rcv, "ERROR: Respuesta fuera de tiempo" ); + return rcv; + } + } + } + rcv[i+1] = '\0'; + + } else { + sprintf( rcv, "ERROR: LM no abierto" ); + } + + #ifdef _verbose + printf( "Recibido: %s\n", rcv ); + #endif + + return rcv; +}; + + + + +// EnviarComando +// Envia el comando CMD al lector ID, devolviendo la respuesta 'rcv' +// +// +// +char *EnviaCMD1( char *CMD, char *rcv, char mlen ) +{ + DWORD CHK; + if ( LM_opened ) + { + + #ifdef _verbose + printf( "Enviado: %s\n", CMD ); + #endif + WriteFile( LM_handle, CMD, strlen(CMD)+mlen, &CHK, NULL ); + + ObtenerRespuesta( rcv ); + } else + sprintf( rcv, "ERROR: LM no abierto" ); + + return rcv; +} +char *EnviaCMD( char *CMD, char *rcv ) +{ + EnviaCMD1( CMD, rcv, 0 ); + return rcv; +} + +#define ZT_ClearCommand "/CL0/" +// #define ZT_ReadCommand "/RD3/" + #define ZT_ReadCommand "/RD1/" + #define ZT_WriteCommand "/WR1/" +#define ACK 0x06 +#define STX 0x02 +#define NAK 0x15 +#define ETX 0x03 +#define EOT 0x04 +#define CR 0x0D + + +char CalculaBCC( char *cadena ) +{ + int i, dev=0; + for ( i=0; cadena[i] != ETX; i++ ) + { + dev ^= cadena[i]; + } + dev ^= cadena[i]; + + return dev; +} + + +char *LeeTarjeta( char *rcv ) +{ + // Leemos una tarjeta + char buff[3]; + EnviaCMD( ZT_ReadCommand, rcv ); + if ( rcv[0] == ACK && rcv[1] == 0x0D ) + { + // Ahora si se ha recibido Leemos la tarjeta que pasemos + ObtenerRespuesta( rcv ); + // Vemos si es la tarjeta o un error + if ( rcv[0] == STX && rcv[1] == '/' && rcv[2] == 'E' && rcv[3] == 'R' ) + { + //es un error + #ifdef _verbose + printf( "Error: %d", rcv[1] ); + #endif + } else { + char len = 0; + while( rcv[len]!=CR )len++; + + char BCC = CalculaBCC( &rcv[1] ), + BCCr = rcv[ len-1 ]; + if ( BCC != BCCr ) + { + printf( "Error: BCC recibido es incorrecto BCC(%x) != R(%x)\n", BCC, BCCr ); + } + } + buff[0] = ACK; buff[1] = '\0'; + EnviaCMD( buff, rcv ); + } else { + sprintf( rcv, "ERROR: Commando no aceptado\n"); + } + return rcv; +} + +char *EscribeTarjeta( char *datos, char *rcv ) +{ + // Leemos una tarjeta + char env[140], buff[140], BCC; + EnviaCMD( ZT_WriteCommand, rcv ); + if ( rcv[0] == ACK && rcv[1] == CR ) + { + sprintf( env, "%s%c", datos, ETX ); + BCC = CalculaBCC( env ); + sprintf( buff, "%c%s%c", STX, env, BCC ); + if ( BCC ) + EnviaCMD( buff, rcv ); + else + EnviaCMD1( buff, rcv, 1 ); + + if ( rcv[0] == ACK && rcv[1] == CR ) + { + // Ahora si se ha recibido Leemos la tarjeta que pasemos + ObtenerRespuesta( rcv ); + // Vemos si es la tarjeta o un error + if ( !(rcv[0] == EOT && rcv[1] == CR) ) + { + //es un error + sprintf( rcv, "Error: %s\n", rcv ); + #ifdef _verbose + printf( "Error: %s\n", rcv ); + #endif + } + buff[0] = ACK; buff[1] = CR; buff[2] = '\0'; + EnviaCMD( buff, rcv ); + } else { + sprintf( rcv, "ERROR: No se recibio respuesta despues de los datos\n" ); + } + } else { + sprintf( rcv, "ERROR: Commando no aceptado\n"); + } + return rcv; +} +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +int main(int argc, char* argv[]) +{ + printf("Pruebas con LM2000 JD soft (c)\n"); + printf("------------------\n"); + + AbrePuerto("COM1:"); + + char rcv[80]; + + // Inicializamos el ZT-2300 + EnviaCMD( ZT_ClearCommand, rcv ); + if ( rcv[0] == 'E' ) + { + printf( "\nError durante la comunicación" ); + } else { +/* + do{ + LeeTarjeta( rcv ); + } while ( getch() != 13 ); +*/ + LeeTarjeta( rcv ); + printf("\n\n\n%s\n\n", rcv ); +// EscribeTarjeta( "123456789123465789765132156484513216", rcv ); + } + printf( "\n\n FIN DEL PROGRAMA \n\n" ); + getch(); + + CierraPuerto(); + return 0; +} + + diff --git a/bin/CAP.INI b/bin/CAP.INI new file mode 100644 index 0000000..99815f5 --- /dev/null +++ b/bin/CAP.INI @@ -0,0 +1,105 @@ +[CAP_c] +PuertoLego=0 +IDsLegoE=1; +IDsLegoS=1; +historial=1 + +[CAP_w] +PuertoEscritor=1 + +[CAP_g] +ImporteMensual=10,00 +ImporteBimestral=20,00 +ImporteTrimestral=30,00 +ImporteAnual=40,00 + +precioMinuto=0,13 +precioInicial=0,30 + + +[parking] +Capacidad=1000 +MsgParking_lleno=El parking esta lleno + +[db] +host=. +login=NO_ES_SQL +pwd=NO_ES_SQL + +[horas] +sobrecargar=1 +verL=0 +desdeL=00:00 +hastaL=00:00 +verM=1 +desdeM=00:00 +hastaM=00:00 +verX=1 +desdeX=00:00 +hastaX=00:00 +verJ=1 +desdeJ=13:00 +hastaJ=13:15 +verV=1 +desdeV=12:45 +hastaV=00:00 +verS=0 +desdeS=00:00 +hastaS=21:54 +verD=0 +desdeD=00:00 +hastaD=00:00 + + + +# Leyendas +# -------------------- - - - - +# [fechaE] Fecha Entrada +# [fechaS] Fecha Salida +# [idt] Número de ticket +# [pvp] PVP +# [mm] Minutos facturados +# +# [r] Empieza la linea en ROJO +# [n] Empieza la linea en NEGRO +# [L] Alineación a la izquierda +# [R] Alineación a la derecha +# [C] Centrado +# [F] Doble tamaño de fuente +# [F1] Doble Doble tamaño de fuente +# [f] Tamaño sencillo de fuente +# [fd] Avance y Corte del ticket (si esta disponible) + +[ticketE] +cab1={F}Control Acceso{f} +cab2={r}Parking de prueba +cab3={n}-------------------------- +cab4= +cab5={R}Fecha: {fechaE} +cab6={L}Num Ticket: +cab7={r}{F1}{C}{idt} +cab8={f}{L}{n} +cab9=-------------------------- +cab10={C}Recuerde que la presentación +cab11=de este ticket es imprescindible +cab12=para realizar la retirada de su +cab13=vehiculo. +cab14= + + +[ticketS] +cab1={F}{C}Control Acceso +cab2={r}{f}Parking de prueba +cab3={n}-------------------------- +cab4=Ticket: {idt} +cab5=Entrada: {fechaE} +cab6=Salida: {fechaS} +cab7=Tiempo Facturado: +cab8={r}{R}{mm} minutos +cab9={L}{n}Total: +cab10={R}{F}{pvp} Euros +cab11={f}{C}{n}-------------------------- +cab12={C}Gracias por su visita. +cab13= + + diff --git a/bin/Historial.log b/bin/Historial.log new file mode 100644 index 0000000..6538970 --- /dev/null +++ b/bin/Historial.log @@ -0,0 +1,5 @@ +23/06/2005 21:00:39 :: Fin de sesión +23/06/2005 21:00:39 :: E( 1)-ERROR: Respuesta fuera de tiempo +23/06/2005 20:59:38 :: Inicio de la sesión +22/06/2005 21:24:39 :: Fin de sesión +22/06/2005 21:24:39 :: E( 1)-ERROR: Respuesta fuera de tiempo diff --git a/bin/Portada.obj b/bin/Portada.obj new file mode 100644 index 0000000..57a3bf0 Binary files /dev/null and b/bin/Portada.obj differ diff --git a/bin/Project1.exe b/bin/Project1.exe new file mode 100644 index 0000000..ea0ef7f Binary files /dev/null and b/bin/Project1.exe differ diff --git a/bin/Project1.obj b/bin/Project1.obj new file mode 100644 index 0000000..76fb8a6 Binary files /dev/null and b/bin/Project1.obj differ diff --git a/bin/Unit4.obj b/bin/Unit4.obj new file mode 100644 index 0000000..5a98f7f Binary files /dev/null and b/bin/Unit4.obj differ diff --git a/bin/cap.exe b/bin/cap.exe new file mode 100644 index 0000000..915c0f7 Binary files /dev/null and b/bin/cap.exe differ diff --git a/bin/cap_cb5.exe b/bin/cap_cb5.exe new file mode 100644 index 0000000..e8ad6b2 Binary files /dev/null and b/bin/cap_cb5.exe differ diff --git a/bin/capg.exe b/bin/capg.exe new file mode 100644 index 0000000..aa5961d Binary files /dev/null and b/bin/capg.exe differ diff --git a/bin/capg.tds b/bin/capg.tds new file mode 100644 index 0000000..d523efd Binary files /dev/null and b/bin/capg.tds differ diff --git a/bin/capg_abonados.obj b/bin/capg_abonados.obj new file mode 100644 index 0000000..f4b02d1 Binary files /dev/null and b/bin/capg_abonados.obj differ diff --git a/bin/capg_gfact.obj b/bin/capg_gfact.obj new file mode 100644 index 0000000..0ee66cb Binary files /dev/null and b/bin/capg_gfact.obj differ diff --git a/bin/capg_ifact.obj b/bin/capg_ifact.obj new file mode 100644 index 0000000..d656f7a Binary files /dev/null and b/bin/capg_ifact.obj differ diff --git a/bin/capg_menu.obj b/bin/capg_menu.obj new file mode 100644 index 0000000..b25cd59 Binary files /dev/null and b/bin/capg_menu.obj differ diff --git a/bin/capg_qrLabonados.obj b/bin/capg_qrLabonados.obj new file mode 100644 index 0000000..e4ede78 Binary files /dev/null and b/bin/capg_qrLabonados.obj differ diff --git a/bin/capg_tabonados.obj b/bin/capg_tabonados.obj new file mode 100644 index 0000000..4b167b7 Binary files /dev/null and b/bin/capg_tabonados.obj differ diff --git a/bin/capg_tarifas.obj b/bin/capg_tarifas.obj new file mode 100644 index 0000000..a3eaf38 Binary files /dev/null and b/bin/capg_tarifas.obj differ diff --git a/bin/crd_ctrl.obj b/bin/crd_ctrl.obj new file mode 100644 index 0000000..de34a50 Binary files /dev/null and b/bin/crd_ctrl.obj differ diff --git a/bin/datos/DBDWORK.INI b/bin/datos/DBDWORK.INI new file mode 100644 index 0000000..d3f5a12 --- /dev/null +++ b/bin/datos/DBDWORK.INI @@ -0,0 +1 @@ + diff --git a/bin/datos/NuevoImagen de mapa de bits.bmp b/bin/datos/NuevoImagen de mapa de bits.bmp new file mode 100644 index 0000000..65da487 Binary files /dev/null and b/bin/datos/NuevoImagen de mapa de bits.bmp differ diff --git a/bin/datos/PARADOX.LCK b/bin/datos/PARADOX.LCK new file mode 100644 index 0000000..1b0fc28 Binary files /dev/null and b/bin/datos/PARADOX.LCK differ diff --git a/bin/datos/PDOXUSRS.LCK b/bin/datos/PDOXUSRS.LCK new file mode 100644 index 0000000..eba165f Binary files /dev/null and b/bin/datos/PDOXUSRS.LCK differ diff --git a/bin/datos/TbFacturas.PX b/bin/datos/TbFacturas.PX new file mode 100644 index 0000000..a111a8d Binary files /dev/null and b/bin/datos/TbFacturas.PX differ diff --git a/bin/datos/TbFacturas.XG0 b/bin/datos/TbFacturas.XG0 new file mode 100644 index 0000000..8fe1078 Binary files /dev/null and b/bin/datos/TbFacturas.XG0 differ diff --git a/bin/datos/TbFacturas.XG1 b/bin/datos/TbFacturas.XG1 new file mode 100644 index 0000000..974b743 Binary files /dev/null and b/bin/datos/TbFacturas.XG1 differ diff --git a/bin/datos/TbFacturas.YG0 b/bin/datos/TbFacturas.YG0 new file mode 100644 index 0000000..ea14510 Binary files /dev/null and b/bin/datos/TbFacturas.YG0 differ diff --git a/bin/datos/TbFacturas.YG1 b/bin/datos/TbFacturas.YG1 new file mode 100644 index 0000000..14be1c0 Binary files /dev/null and b/bin/datos/TbFacturas.YG1 differ diff --git a/bin/datos/TbFacturas.db b/bin/datos/TbFacturas.db new file mode 100644 index 0000000..b4bf341 Binary files /dev/null and b/bin/datos/TbFacturas.db differ diff --git a/bin/datos/abonados.PX b/bin/datos/abonados.PX new file mode 100644 index 0000000..4e3f68b Binary files /dev/null and b/bin/datos/abonados.PX differ diff --git a/bin/datos/abonados.db b/bin/datos/abonados.db new file mode 100644 index 0000000..3aae7e8 Binary files /dev/null and b/bin/datos/abonados.db differ diff --git a/bin/datos/accesos.DB b/bin/datos/accesos.DB new file mode 100644 index 0000000..b7991fa Binary files /dev/null and b/bin/datos/accesos.DB differ diff --git a/bin/datos/accesos.PX b/bin/datos/accesos.PX new file mode 100644 index 0000000..8679f63 Binary files /dev/null and b/bin/datos/accesos.PX differ diff --git a/bin/datos/accesos.XG0 b/bin/datos/accesos.XG0 new file mode 100644 index 0000000..7407879 Binary files /dev/null and b/bin/datos/accesos.XG0 differ diff --git a/bin/datos/accesos.YG0 b/bin/datos/accesos.YG0 new file mode 100644 index 0000000..d856063 Binary files /dev/null and b/bin/datos/accesos.YG0 differ diff --git a/bin/datos/cards.PX b/bin/datos/cards.PX new file mode 100644 index 0000000..fd612a2 Binary files /dev/null and b/bin/datos/cards.PX differ diff --git a/bin/datos/cards.XG0 b/bin/datos/cards.XG0 new file mode 100644 index 0000000..e1d0b3e Binary files /dev/null and b/bin/datos/cards.XG0 differ diff --git a/bin/datos/cards.XG1 b/bin/datos/cards.XG1 new file mode 100644 index 0000000..5cb4c79 Binary files /dev/null and b/bin/datos/cards.XG1 differ diff --git a/bin/datos/cards.YG0 b/bin/datos/cards.YG0 new file mode 100644 index 0000000..5aefc25 Binary files /dev/null and b/bin/datos/cards.YG0 differ diff --git a/bin/datos/cards.YG1 b/bin/datos/cards.YG1 new file mode 100644 index 0000000..7bfb9fc Binary files /dev/null and b/bin/datos/cards.YG1 differ diff --git a/bin/datos/cards.db b/bin/datos/cards.db new file mode 100644 index 0000000..436169b Binary files /dev/null and b/bin/datos/cards.db differ diff --git a/bin/datos/contadores.PX b/bin/datos/contadores.PX new file mode 100644 index 0000000..b7a6f6c Binary files /dev/null and b/bin/datos/contadores.PX differ diff --git a/bin/datos/contadores.db b/bin/datos/contadores.db new file mode 100644 index 0000000..e9d9d81 Binary files /dev/null and b/bin/datos/contadores.db differ diff --git a/bin/datos/datos.rar b/bin/datos/datos.rar new file mode 100644 index 0000000..d5b1ee3 Binary files /dev/null and b/bin/datos/datos.rar differ diff --git a/bin/datos/historial.PX b/bin/datos/historial.PX new file mode 100644 index 0000000..5341fde Binary files /dev/null and b/bin/datos/historial.PX differ diff --git a/bin/datos/historial.XG0 b/bin/datos/historial.XG0 new file mode 100644 index 0000000..c01d7cd Binary files /dev/null and b/bin/datos/historial.XG0 differ diff --git a/bin/datos/historial.YG0 b/bin/datos/historial.YG0 new file mode 100644 index 0000000..04fe1a1 Binary files /dev/null and b/bin/datos/historial.YG0 differ diff --git a/bin/datos/historial.db b/bin/datos/historial.db new file mode 100644 index 0000000..1d99c0b Binary files /dev/null and b/bin/datos/historial.db differ diff --git a/bin/datos/precios.PX b/bin/datos/precios.PX new file mode 100644 index 0000000..aacf6d3 Binary files /dev/null and b/bin/datos/precios.PX differ diff --git a/bin/datos/precios.XG0 b/bin/datos/precios.XG0 new file mode 100644 index 0000000..cfdc461 Binary files /dev/null and b/bin/datos/precios.XG0 differ diff --git a/bin/datos/precios.YG0 b/bin/datos/precios.YG0 new file mode 100644 index 0000000..a56897c Binary files /dev/null and b/bin/datos/precios.YG0 differ diff --git a/bin/datos/precios.db b/bin/datos/precios.db new file mode 100644 index 0000000..e4f3279 Binary files /dev/null and b/bin/datos/precios.db differ diff --git a/bin/datos/tabonados.PX b/bin/datos/tabonados.PX new file mode 100644 index 0000000..7cd6146 Binary files /dev/null and b/bin/datos/tabonados.PX differ diff --git a/bin/datos/tabonados.db b/bin/datos/tabonados.db new file mode 100644 index 0000000..9c30354 Binary files /dev/null and b/bin/datos/tabonados.db differ diff --git a/bin/datos/vehiculos.PX b/bin/datos/vehiculos.PX new file mode 100644 index 0000000..06d09d1 Binary files /dev/null and b/bin/datos/vehiculos.PX differ diff --git a/bin/datos/vehiculos.XG0 b/bin/datos/vehiculos.XG0 new file mode 100644 index 0000000..b324346 Binary files /dev/null and b/bin/datos/vehiculos.XG0 differ diff --git a/bin/datos/vehiculos.XG1 b/bin/datos/vehiculos.XG1 new file mode 100644 index 0000000..e82dfd2 Binary files /dev/null and b/bin/datos/vehiculos.XG1 differ diff --git a/bin/datos/vehiculos.YG0 b/bin/datos/vehiculos.YG0 new file mode 100644 index 0000000..9a469ec Binary files /dev/null and b/bin/datos/vehiculos.YG0 differ diff --git a/bin/datos/vehiculos.YG1 b/bin/datos/vehiculos.YG1 new file mode 100644 index 0000000..4eb7616 Binary files /dev/null and b/bin/datos/vehiculos.YG1 differ diff --git a/bin/datos/vehiculos.db b/bin/datos/vehiculos.db new file mode 100644 index 0000000..679a7be Binary files /dev/null and b/bin/datos/vehiculos.db differ diff --git a/bin/portada.jpg b/bin/portada.jpg new file mode 100644 index 0000000..b7f2f73 Binary files /dev/null and b/bin/portada.jpg differ diff --git a/bin/snd/card_acceso_denegado_antipassback.wav b/bin/snd/card_acceso_denegado_antipassback.wav new file mode 100644 index 0000000..94fce3b Binary files /dev/null and b/bin/snd/card_acceso_denegado_antipassback.wav differ diff --git a/bin/snd/card_acceso_denegado_entrada.wav b/bin/snd/card_acceso_denegado_entrada.wav new file mode 100644 index 0000000..3e3b288 Binary files /dev/null and b/bin/snd/card_acceso_denegado_entrada.wav differ diff --git a/bin/snd/card_acceso_denegado_salida.wav b/bin/snd/card_acceso_denegado_salida.wav new file mode 100644 index 0000000..9172876 Binary files /dev/null and b/bin/snd/card_acceso_denegado_salida.wav differ diff --git a/bin/snd/card_acceso_denegado_salida_pagar.wav b/bin/snd/card_acceso_denegado_salida_pagar.wav new file mode 100644 index 0000000..2fa47dd Binary files /dev/null and b/bin/snd/card_acceso_denegado_salida_pagar.wav differ diff --git a/bin/snd/card_acceso_permitido_entrada.wav b/bin/snd/card_acceso_permitido_entrada.wav new file mode 100644 index 0000000..a2ed941 Binary files /dev/null and b/bin/snd/card_acceso_permitido_entrada.wav differ diff --git a/bin/snd/card_acceso_permitido_salida.wav b/bin/snd/card_acceso_permitido_salida.wav new file mode 100644 index 0000000..35278ff Binary files /dev/null and b/bin/snd/card_acceso_permitido_salida.wav differ diff --git a/bin/snd/card_no_encontrado.wav b/bin/snd/card_no_encontrado.wav new file mode 100644 index 0000000..f2ed823 Binary files /dev/null and b/bin/snd/card_no_encontrado.wav differ diff --git a/bin/snd/card_verify_error.wav b/bin/snd/card_verify_error.wav new file mode 100644 index 0000000..5ecb2ef Binary files /dev/null and b/bin/snd/card_verify_error.wav differ diff --git a/bin/snd/card_verify_ok.wav b/bin/snd/card_verify_ok.wav new file mode 100644 index 0000000..bc05091 Binary files /dev/null and b/bin/snd/card_verify_ok.wav differ diff --git a/bin/snd/fuera_de_hora.wav b/bin/snd/fuera_de_hora.wav new file mode 100644 index 0000000..b853683 Binary files /dev/null and b/bin/snd/fuera_de_hora.wav differ diff --git a/bin/snd/inserta_card_grabar.wav b/bin/snd/inserta_card_grabar.wav new file mode 100644 index 0000000..0ede07f Binary files /dev/null and b/bin/snd/inserta_card_grabar.wav differ diff --git a/bin/snd/inserta_card_leer.wav b/bin/snd/inserta_card_leer.wav new file mode 100644 index 0000000..138758d Binary files /dev/null and b/bin/snd/inserta_card_leer.wav differ diff --git a/bin/snd/parking_lleno.wav b/bin/snd/parking_lleno.wav new file mode 100644 index 0000000..7f2eaaf Binary files /dev/null and b/bin/snd/parking_lleno.wav differ diff --git a/bin/tickets.obj b/bin/tickets.obj new file mode 100644 index 0000000..1c3e0e9 Binary files /dev/null and b/bin/tickets.obj differ diff --git a/cap.bpg b/cap.bpg new file mode 100644 index 0000000..83a1e9b --- /dev/null +++ b/cap.bpg @@ -0,0 +1,46 @@ +#------------------------------------------------------------------------------ +VERSION = BWS.01 +#------------------------------------------------------------------------------ +!ifndef ROOT +ROOT = $(MAKEDIR)\.. +!endif +#------------------------------------------------------------------------------ +MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** +DCC = $(ROOT)\bin\dcc32.exe $** +BRCC = $(ROOT)\bin\brcc32.exe $** +#------------------------------------------------------------------------------ +PROJECTS = cap.exe LM2000_vcl.bpl CardWriter.exe CheckSUM.exe cap_cb5.exe \ + capg.exe +#------------------------------------------------------------------------------ +default: $(PROJECTS) +#------------------------------------------------------------------------------ + +cap.exe: cap_control\cap.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + +LM2000_vcl.bpl: LM2000_vcl\LM2000_vcl.bpk + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + +CardWriter.exe: ZT-2000\CardWriter.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + +CheckSUM.exe: checksum_gen\CheckSUM.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + +capg.exe: cap_gestion\capg.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + +cap_cb5.exe: cap_control_CB5\cap_cb5.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + +capg.exe: cap_gestion\capg.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + + diff --git a/cap_control/CAP.INI b/cap_control/CAP.INI new file mode 100644 index 0000000..dc77a0a --- /dev/null +++ b/cap_control/CAP.INI @@ -0,0 +1,7 @@ +[CAP_c] +PuertoLego=0 +IDsLego=1;2; + +[parking] +Capacidad=1000 +MsgParking_lleno=El parking esta lleno diff --git a/cap_control/LEGO_COMM.cpp b/cap_control/LEGO_COMM.cpp new file mode 100644 index 0000000..a0b3d40 --- /dev/null +++ b/cap_control/LEGO_COMM.cpp @@ -0,0 +1,389 @@ +//--------------------------------------------------------------------------- + +#include +#include +#pragma hdrstop + +#include +// #include + +#include "LEGO_COMM.h" +#include "TPropiedades.h" +#pragma package(smart_init) +#pragma link "LM2000" +//--------------------------------------------------------------------------- + +// Important: Methods and properties of objects in VCL can only be +// used in a method called using Synchronize, for example: +// +// Synchronize(UpdateCaption); +// +// where UpdateCaption could look like: +// +// void __fastcall Unit1::UpdateCaption() +// { +// Form1->Caption = "Updated in a thread"; +// } +//--------------------------------------------------------------------------- +__fastcall CheckLEGOs::CheckLEGOs(bool CreateSuspended) + : TThread(CreateSuspended) +{ + Lm2000 = new TLm2000(Propiedades->Owner); + Lm2000->OnBuscaTarjeta = Lm2000BuscaTarjeta; + Lm2000->OnVerboseMessage = Lm2000VerboseMessage; + TbSession = new TSession(Propiedades->Owner); + +} +//--------------------------------------------------------------------------- +void __fastcall CheckLEGOs::SetDB( AnsiString Host, AnsiString Login, AnsiString PWD ) +{ + // Asignamos los nuevos valores + DB_host = Host; + DB_login = Login; + DB_pwd = PWD; + + TbSession->Active = false; + TbSession->SessionName = "AccesosCAP"; + TbSession->Active = true; + + // Activamos los cambios + TbCards = new TTable(Propiedades->Owner); + TbCards->TableName = DB_host + "\\datos\\Cards.db"; + TbCards->SessionName = "AccesosCAP"; + + TbHistorial = new TTable(Propiedades->Owner); + TbHistorial->TableName = DB_host + "\\datos\\historial.db"; +// TbHistorial->BeforeOpen = TbHistorialBeforeOpen; + TbHistorial->SessionName = "AccesosCAP"; + TbHistorial->Active = true; // Tabla de eventos del sistema + + TbAccesos = new TTable(Propiedades->Owner); + TbAccesos->TableName = DB_host + "\\datos\\accesos.db"; + TbAccesos->SessionName = "AccesosCAP"; +// TbAccesos->BeforeOpen = TbAccesosBeforeOpen; + TbAccesos->Active = true; // Tabla de eventos del sistema + crdDENTRO = TbAccesos->RecordCount; + TbAccesos->Active = false; // Tabla de eventos del sistema + Propiedades->Ocupacion->Value = crdDENTRO; +} +//--------------------------------------------------------------------------- +void __fastcall CheckLEGOs::SetPuerto( AnsiString pCOM ) +{ + Puerto = pCOM; +} +//--------------------------------------------------------------------------- +void __fastcall CheckLEGOs::SetDiasCortesia( int nDias ) +{ + DiasDeCortesia = nDias; +} +//--------------------------------------------------------------------------- +/* +void __fastcall CheckLEGOs::TbHistorialBeforeOpen(TDataSet *DataSet) +{ + if ( !FileExists( TbHistorial->TableName ) ) + { + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbHistorial -> FieldDefs -> Clear(); + + TbHistorial -> FieldDefs -> Add("id", ftAutoInc, 0, false ); + TbHistorial -> FieldDefs -> Add("idCard", ftInteger, 0, false ); + TbHistorial -> FieldDefs -> Add("fechaE", ftDate, 0, false ); + TbHistorial -> FieldDefs -> Add("horaE", ftTime, 0, false ); + TbHistorial -> FieldDefs -> Add("fechaS", ftDate, 0, false ); + TbHistorial -> FieldDefs -> Add("horaS", ftTime, 0, false ); + + TbHistorial -> IndexDefs-> Clear(); + + TbHistorial->IndexDefs->Add("Primary", "id", TIndexOptions() << ixPrimary << ixUnique); + TbHistorial->IndexDefs->Add("iAccesos", "idCard;fechaE;horaE", TIndexOptions() << ixCaseInsensitive ); + // Creamos la base... + TbHistorial -> CreateTable(); + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + " :: Iniciando sistema por primera vez..." ); + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + " :: Generación de ficheros auxiliares concluido" ); + } +} +*/ +//--------------------------------------------------------------------------- +/* +void __fastcall CheckLEGOs::TbAccesosBeforeOpen(TDataSet *DataSet) +{ + if ( !FileExists( TbAccesos->TableName ) ) + { + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbAccesos -> FieldDefs -> Clear(); + + TbAccesos -> FieldDefs -> Add("id", ftAutoInc, 0, false ); + TbAccesos -> FieldDefs -> Add("idCard", ftInteger, 0, false ); + TbAccesos -> FieldDefs -> Add("fechaE", ftDate, 0, false ); + TbAccesos -> FieldDefs -> Add("horaE", ftTime, 0, false ); + TbAccesos -> FieldDefs -> Add("puedeSalir", ftBoolean, 0, false ); + + TbAccesos -> IndexDefs-> Clear(); + + TbAccesos->IndexDefs->Add("Primary", "id", TIndexOptions() << ixPrimary << ixUnique); + TbAccesos->IndexDefs->Add("iAccesos", "idCard;fechaE;horaE", TIndexOptions() << ixCaseInsensitive ); + // Creamos la base... + TbAccesos -> CreateTable(); + } +} +*/ +//--------------------------------------------------------------------------- +void __fastcall CheckLEGOs::SetLegoID(int nLe, int *Le, int nLs, int *Ls) +{ + int i; + + nLEGOSe = nLe; + if ( IDe ) delete [] IDe; + IDe = new int[nLe]; + for ( i=0; iProgramOperationParameters( 1, &pop ); + Lm2000->SetCharsOnBand( 1, &cab2 ); +*/ + Lm2000->CierraPuerto(); + Lm2000->AbrePuerto( Puerto.c_str() ); + + //---- Place thread code here ---- + while( !Terminated ) + { + //nothing; + for ( i=0; i< nLEGOSe; i++ ) + { + Propiedades->StatusBar1->Panels->Items[1]->Text = (j++); + Lm2000->SimpleInterrogation( IDe[i], rcv ); + if ( rcv[5] == ':' ) + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + Format( " :: E(%03d)-%s", ARRAYOFCONST(( IDe[i], rcv )) ) ); + } + + if ( Terminated ) break; +/* + if ( Clipboard()->HasFormat(CF_TEXT) ) + { + if ( Clipboard()->AsText.SubString(1,7) == "JDsoft:" ) + { + CB = Clipboard()->AsText; + // Abrir barrera + if ( CB[8] == 'O' ) + ShowMessage("Abrir barrera nº " + CB.SubString(9,CB.Length()) ); + // Cerrar barrera + if ( CB[8] == 'C' ) + ShowMessage("Cerrar barrera nº " + CB.SubString(9,CB.Length()) ); + Clipboard()->Clear(); + } + } +*/ + + for ( i=0; i< nLEGOSs; i++ ) + { + Propiedades->StatusBar1->Panels->Items[1]->Text = (j++); + Lm2000->SimpleInterrogation( IDs[i], rcv ); + if ( rcv[5] == ':' ) + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + Format( " :: S(%03d)-%s", ARRAYOFCONST(( IDs[i], rcv )) ) ); + } + + } + Lm2000->CierraPuerto(); +} +//--------------------------------------------------------------------------- +bool __fastcall CheckLEGOs::Lm2000VerboseMessage(AnsiString msg) +{ + if ( msg[3] != 'n' && msg[9] != ':' ) + Propiedades->StatusBar1->Panels->Items[0]->Text = msg; + return true; +} +//--------------------------------------------------------------------------- +/* +bool __fastcall CheckLEGOs::EsEntrada( int ID ) +{ + bool dev = false; + for ( int i=0; inLEGOSe; i++ ) + { + if ( Propiedades->IDe[i] == ID ) + { + dev = true; + break; + } + } + return dev; +} +*/ +// El lector EXTERNO será siempre la SALIDA +#define EsEntrada( X ) (X & 0x0008) +//--------------------------------------------------------------------------- +bool __fastcall CheckLEGOs::RetiraPermisoSalida(void) +{ + TbAccesos->Active = true; + + TbAccesos->First(); + while( !TbAccesos->Eof ) + { + // Si es abonado, denegamos su permiso a salir + if ( (TbAccesos->FieldByName("idCard")->AsInteger & 0x0001)==0 ) + { + if ( TbAccesos->FieldByName("PuedeSalir")->AsBoolean ) + { + TbAccesos->Edit(); + TbAccesos->FieldByName("fechaE")->AsDateTime = TDateTime::CurrentDate(); + TbAccesos->FieldByName("horaE")->AsDateTime = TDateTime::CurrentTime(); + TbAccesos->FieldByName("PuedeSalir")->AsBoolean = false; + TbAccesos->Post(); + } + } + TbAccesos->Next(); + } + TbAccesos->Active = false; +} + +bool __fastcall CheckLEGOs::Lm2000BuscaTarjeta(int ID, int FGA, int TPA, + int CDA, int *TPR, int *PNR, char *message) +{ + bool dev = false;//, horaOK = true; + *TPR = 0; + *PNR = 0; + + +// Distinguimos entre ENTRAR y SALIR +// 27-mar-2002 Cambiada la funcion es entrada +// if ( EsEntrada( ID ) ) + if ( EsEntrada( FGA ) ) + { + // E N T R A D A + // Comprueba si esta dentro del horario... + if ( Propiedades->CheckHorario() ) + { + sndPlaySound("snd\\fuera_de_hora.wav", SND_ASYNC | SND_FILENAME); + sprintf( message, "-FUERA DE TIEMPOPase por caja" ); + dev = false; + } else { + + // Verificamos que el aforo no este lleno + if ( crdDENTRO >= maxDENTRO ) + { + sndPlaySound("snd\\parking_lleno.wav", SND_ASYNC | SND_FILENAME); + sprintf( message, "-AFORO COMPLETO-por favor espere" ); + dev = false; + } else { + // El aforo NO ESTA LLENO + TbCards->Active = true; +// TbCards->Refresh(); + // Buscamos si existe esa tarjeta... + dev = false; TbCards->First(); + while( !TbCards->Eof ) + { + if ( TbCards->FieldByName("idCard")->AsInteger == CDA ) + { dev = true; break;} else TbCards->Next(); + } + + if ( dev ) + { + TbAccesos->Active = true; // Tabla de tarjetas dentro del complejo + dev = false; TbAccesos->First(); + while( !TbAccesos->Eof ) + { + if ( TbAccesos->FieldByName("idCard")->AsInteger == CDA ) + { dev = true; break;} else TbAccesos->Next(); + } + // Si ya ha entrado y no es un VIP + if ( dev && ! TbCards->FieldByName( "vip" ) -> AsBoolean ) + { + sndPlaySound("snd\\card_acceso_denegado_antipassback.wav", SND_ASYNC | SND_FILENAME); + sprintf( message, "-YA ESTA DENTRO-" ); + dev = false; + } else { + dev = false; + bool acceso = TbCards->FieldByName( "acceso" )->AsBoolean; + // Comprobamos los permisos + if ( acceso && + TDateTime::CurrentDate() <= (TbCards->FieldByName( "fechaM" )->AsDateTime + DiasDeCortesia) + ) + { + TbAccesos->Insert(); + TbAccesos->FieldByName("idCard")->AsInteger = CDA; + TbAccesos->FieldByName("fechaE")->AsDateTime = TDateTime::CurrentDate(); + TbAccesos->FieldByName("horaE")->AsDateTime = TDateTime::CurrentTime(); + TbAccesos->FieldByName("PuedeSalir")->AsBoolean = true; + TbAccesos->Post(); + + crdDENTRO++; + Propiedades->Ocupacion->Value = crdDENTRO; + dev = true; + sndPlaySound("snd\\card_acceso_permitido_entrada.wav", SND_ASYNC | SND_FILENAME); + } else { + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + Format( " :: V(%03d)-%d-%d-%d Valida Hasta: %s %s", ARRAYOFCONST(( ID, FGA, TPA, CDA, TbCards->FieldByName( "fechaM" )->AsString, acceso ? "CON ACCESO":"SIN ACCESO" )) ) ); + sndPlaySound("snd\\card_acceso_denegado_entrada.wav", SND_ASYNC | SND_FILENAME); + } + sprintf( message, TbCards->FieldByName("msg")->AsString.c_str() ); + } + TbAccesos->Active = false; // Tabla de tarjetas dentro del complejo + } else { + sprintf( message, "-ACCESO DENEGADO-tarjeta no vale" ); + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + Format( " :: V(%03d)-%d-%d-%d", ARRAYOFCONST(( ID, FGA, TPA, CDA )) ) ); + sndPlaySound("snd\\card_no_encontrado.wav", SND_ASYNC | SND_FILENAME); + } + TbCards->Active = false; + } + } + } else { + // S A L I D A + TbAccesos->Active = true; // Tabla de tarjetas dentro del complejo + + dev = false; TbAccesos->First(); + while( !TbAccesos->Eof ) + { + if ( TbAccesos->FieldByName("idCard")->AsInteger == CDA ) + { dev = true; break;} else TbAccesos->Next(); + } + + if ( dev ) + { + if ( TbAccesos->FieldByName("PuedeSalir")->AsBoolean ) + { + // Movemos esta ficha al historial... + TbHistorial->Insert(); + TbHistorial->FieldByName("idCard")->AsInteger = CDA; + TbHistorial->FieldByName("fechaE")->AsDateTime = TbAccesos->FieldByName("fechaE")->AsDateTime; + TbHistorial->FieldByName("horaE")->AsDateTime = TbAccesos->FieldByName("horaE")->AsDateTime; + TbHistorial->FieldByName("fechaS")->AsDateTime = TDateTime::CurrentDate(); + TbHistorial->FieldByName("horaS")->AsDateTime = TDateTime::CurrentTime(); + TbAccesos->Delete(); + sprintf( message, "-ACCESO PERMITIDO- Vuelva pronto" ); + sndPlaySound("snd\\card_acceso_permitido_salida.wav", SND_ASYNC | SND_FILENAME); + crdDENTRO--; + Propiedades->Ocupacion->Value = crdDENTRO; + dev = true; + } else { + sprintf( message, "-ACCESO DENEGADO-Pase por caja" ); + sndPlaySound("snd\\card_acceso_denegado_salida_pagar.wav", SND_ASYNC | SND_FILENAME); + dev = false; + } + } else { + sprintf( message, "-ACCESO DENEGADO- NO HA ENTRADO " ); + sndPlaySound("snd\\card_acceso_denegado_salida.wav", SND_ASYNC | SND_FILENAME); + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + Format( " :: V(%03d)-%d-%d-%d", ARRAYOFCONST(( ID, FGA, TPA, CDA )) ) ); + dev = false; + } + TbAccesos->Active = false; // Tabla de tarjetas dentro del complejo + } + return dev; +} +//--------------------------------------------------------------------------- + diff --git a/cap_control/LEGO_COMM.h b/cap_control/LEGO_COMM.h new file mode 100644 index 0000000..09fc9b9 --- /dev/null +++ b/cap_control/LEGO_COMM.h @@ -0,0 +1,46 @@ +//--------------------------------------------------------------------------- + +#ifndef LEGO_COMMH +#define LEGO_COMMH +//--------------------------------------------------------------------------- +#include +#include +#include "LM2000.h" +//--------------------------------------------------------------------------- +class CheckLEGOs : public TThread +{ +private: + TLm2000 *Lm2000; + TSession *TbSession; + TTable *TbCards; + TTable *TbHistorial; + TTable *TbAccesos; + void __fastcall TbHistorialBeforeOpen(TDataSet *DataSet); + void __fastcall TbAccesosBeforeOpen(TDataSet *DataSet); + + bool __fastcall EsEntrada( int ID ); + + bool __fastcall Lm2000VerboseMessage(AnsiString msg); + bool __fastcall Lm2000BuscaTarjeta(int ID, int FGA, int TPA, + int CDA, int *TPR, int *PNR, char *message); + + AnsiString Puerto; + AnsiString DB_host, DB_login, DB_pwd; + + int nLEGOSe, nLEGOSs, *IDe, *IDs, DiasDeCortesia; +protected: + void __fastcall Execute(); +public: + __fastcall CheckLEGOs(bool CreateSuspended); + void __fastcall SetPuerto( AnsiString pCOM ); + void __fastcall SetDB( AnsiString Host, AnsiString Login, AnsiString PWD ); + void __fastcall SetLegoID(int nLe, int *Le, int nLs, int *Ls); + void __fastcall SetDiasCortesia( int nDias ); + bool __fastcall RetiraPermisoSalida(void); + + + int crdDENTRO, maxDENTRO; +}; +//--------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/cap_control/ListInit.cpp b/cap_control/ListInit.cpp new file mode 100644 index 0000000..06900f1 --- /dev/null +++ b/cap_control/ListInit.cpp @@ -0,0 +1,23 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "ListInit.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TAcercaDe *AcercaDe; +//--------------------------------------------------------------------------- +__fastcall TAcercaDe::TAcercaDe(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- +void __fastcall TAcercaDe::Timer1Timer(TObject *Sender) +{ + Timer1->Enabled = false; + Close(); +} +//--------------------------------------------------------------------------- + diff --git a/cap_control/ListInit.dfm b/cap_control/ListInit.dfm new file mode 100644 index 0000000..293a4e0 --- /dev/null +++ b/cap_control/ListInit.dfm @@ -0,0 +1,985 @@ +object AcercaDe: TAcercaDe + Left = 403 + Top = 318 + BorderIcons = [] + BorderStyle = bsDialog + ClientHeight = 127 + ClientWidth = 359 + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsStayOnTop + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 13 + object Image1: TImage + Left = 112 + Top = 8 + Width = 153 + Height = 57 + Picture.Data = { + 0A544A504547496D6167650E600000FFD8FFE000104A46494600010101004800 + 480000FFDB0043000503040404030504040405050506070C08070707070F0B0B + 090C110F1212110F111113161C1713141A1511111821181A1D1D1F1F1F131722 + 24221E241C1E1F1EFFDB0043010505050706070E08080E1E1411141E1E1E1E1E + 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E + 1E1E1E1E1E1E1E1E1E1E1E1E1EFFC00011080105028003012200021101031101 + FFC4001D000100020301010101000000000000000000060704050803010209FF + C400511000010303020304070702020509050900010002030405110621071231 + 13224151081452617191A115324281C1D1F016B1236217728292E12425334355 + 7493A2F126376373D2273435364553B2B3C2FFC4001A01010002030100000000 + 0000000000000000020301040506FFC400331100020201020502040504030101 + 00000000010203110421051213315115412261719114325281B12333A1D142C1 + E124F1FFDA000C03010002110311003F00ECB444401111004444011110044440 + 111100444401111004444011110044440117C7B9AC69739C1A07524AADB89BC5 + FD37A3E96561AA64F58D0796261C9CFE9D56545BEC61C947764FEE971A3B652B + EA6B676431B0124B9C06CB9C78C3E90CDA7964B56921DBCE0969946E3F2F3553 + EADD7DAD789372920A79268285EEC363612063F5524D05C2F868F96AEEA39A43 + BE1DB92AD8C37C259657994FB6C8F2B56BEE2A56D29A86C8E23AFDD1FB29A7A3 + CF11B54DEF5FCF68BE5407C6C6F4C01BE47B96EEB4D2DAEC152218638D8C8CE3 + 6EAAA0E02DDFFF00B5BACA868C03CD93F985BD451276F4A6B7C127B23B7D92B5 + DE2BF6A3764B97AC01DE52189D96AD1BA9753C3249E4FDA22C1BCDDA82D146FA + AAFA86431B064971C6CA932672F2A9A9A7A6617CF332368F173B0B9CB893E923 + 4B492BE874C406A6507979FC33FCCAA92EBAAF89BADA42D7544F041267BACC81 + 82AC55FEA7821CF9EC76857EAFD39454EE9EA2ED4CD8DBD4F3745A7FF4A7A1BF + EDDA6FFC46FEEB93EDBC2BD415B48456DCE66876E439F8CADC5BF8394822E5A9 + B83C387938EEAF8550976527F433B9D31FE94F437FDBB4DFF88DFDD0714F4312 + 07DBB4BBFF00F11BFBAE70FF0043B6BFFB465FF78AC2B9F06E9DED0CA5B83F3E + 65E42B1E9E0BBC646773ADE935569EAA85934376A6731E32D3CFD56CE9EB296A + 1A1D0D444F07A61C171157709F50D34019457599C474E57F458B0C3C53D3B235 + D4774AB74710C005C48F97455BAE9ED96BEA86E77722E2AB2F1C78976191B1DC + A94D5339B2ECB77C7E4A7FA5BD2868A7ABF57BE5AE4A6F0E603207F658FC367F + 249331CD8EE74B22E4DD67E91F7CA8D426974A52892986C1C41CBBEAB5959C7A + E2551C5DB4B6D01A37DDAEFDD41519EF2482927BA3B15150DC15F481B5EAB70B + 6DF4B282E00868E6380F3EECABD609E39A36C91BC39AE19041EAA16552AFB994 + F27A2222ACC84444011110044440111100444401111004444011110044440111 + 1004444011110044440111100444401111004444011110044440111100444401 + 11100444401111004444011179D44F153C46599ED631A3249407A2D3EA6D4B68 + D3D412565CAAE28991824E5CAAEE2FF1D2C9A5E0928ED72B2B2B8820061C869E + 9BE1734D7D76B4E25DD9D356CF38A77BBBACC9E503DC158A18DE456E79DA258F + C54F482B95DE69ED1A4E37B63396F6C3A9F879280E93D0378D4B5C6E37B9657F + 39E671792AC0D0DC38B7D9636CB58C124C37C7EEA7D1C6C8D8191B1AC60E8D68 + C05BDA7D1597F6DA21431BCB7669B4E69AB658E06C74B0B5CF03EF91FD96EFC7 + 27AA215DED3E96BD3AF85126F244B8B15C68347543C1FBF90AB2F476A771AAAD + B99EAF7E013FCF7ADEFA46DD7B0B4C544C761CE1E1EF593C0DB7BA9F4CD317B4 + 074879B3EE547098ABB5565AFB22BB5E160E85D18F739ADCA9FD37DC1F0507D1 + B062369C29CC386C793B00172B8A34ED78270EC6BB55DFE834E59E6B95C266C5 + 144D2492B8B38AFC45BE712751BADF6C9258ADED7E1AD69EA3CCFF003F7533F4 + ADD5F5B75D44CD2946E3D931C0481BE2EF2FCB2BE70B34552DA6DB15654440CC + E19008F1F35A3545C9A8C56ECC38F3BDFB1AFD05C30A3A285955726F3BDDBE0E + E4AB268E8E9A92311D340C89A3C86EB2117A1D370DAEA5CD3DD92CF83E2FCC92 + 471B0BE47B2368F171C2D2EAED4947A7E89D34CF6997196B495485E3575FF545 + CCC3406511B8E07295AFA9E27C8F9294671E4BB2E3AC74FD087096B9A5EDEAD0 + 56A8713B4C6E44921C752157B63D04F96A44D76AA79CEE5ADEF1FD94A21D0F60 + 113A36D3543B9875E703F42B35E978ADCB992697CF0883B208925BF889A6AA9F + 8F5B1181E2E5BAA3D4763AF1CB15642E1EF3D557553C37B4CB116412D4439DF2 + 5808FEEB4959C35BC529325AEB9B26370D0FE53F238545D4710ABFB90CAFA27F + C05645FB9744D6BB456B497D3412F30EA00FD145EF5C34D3F5FCCE6C22379E98 + 1B05568B96B5D333E2A1B501AD3F8C1FEEA53A738B81CF10DD62C11B1763F55A + 2ADAA5B590C7D0B090E98E1BDB6CF5DEB2E0C7B4741D4952BB9DAA82E14869E7 + A58C348C021BB858F65D456ABC303E92A99CC7F0B8ADB104750BA7A4D2E92C8B + 49E5BFB98794503C46E1954D0541B8DA0B9AE69E60F629670238E573B2DD63D3 + 9AC2571872191CEF3D3E27F5FF00D45A12319244E8A4607B1C305A5533C5BE1C + 89C3AE16D610E079816F507F9FCF3D6BA99E95F2CB783318C9DA16BB8D3D7D33 + 2A29E46C91BC64105670395C29C31E336A7E1F98ED57B824AAA18C8682ECE5A1 + 75870E3897A73595BE39A82B6313380E688B87303F05A9669F6E686E827E49DA + 2F8D7070C82BEAD5241111004444011110044440111100444401111004444011 + 1100444401111004444011110044440111100444401111004444011110044440 + 1111004444011110045E3575305242E9AA256C6C68C92E38542F18BD202DD641 + 25B74E96D5D674E669CB47CBAA9462E5D88CA4A3DCB735AEB3B1E94B73EAEE75 + 91C7CA36693B92B93F8A5C6BD43AD2B24B569D6C94F46E25A5CDEAE0A272C1AC + 788D7615775967746F3B34F403E0AD8D17A0ED962818E9626C9301D31B7E6AEA + AB72972D6B2C86253EFB2203A2785F535EF6DC2F1239C49E625FBAB86CD69A2B + 4D3B61A385ACC0C176372B380000000007403A05F57734BC3230F8ADDD93D96C + 8227C162B6E3402A042E9839F9C72B7CD6E5FABAA85F131832900C90078AFD4D + CBDA1E4180BC2B2514F473CEEE91C64ACDB72543B3E431B9CEBC70AC7DD35A43 + 6F61FF00AD0DC7E6AECE1FD00A6A1A4A76B400C60185425339D7CE2B8772F68C + 8E42495D37A3A9B323303A2708874B472B1FB94D9BCB059FA5A0E585BB782DED + DA614D69A898B83792373B246DB027F4587628B9206FC162F125A4E87BA38388 + 7329DC463CF18FD5798D54F9ED65CBB1C7D65826D4BC53AAABA8EFB44C5D93D3 + AABB406B406B061AD1803DCAAAE0951491DD2E754F1CD8791956B0E8BA5C1EA4 + DCAC61EC82F1AC9DB4D4B2D43FEEC6D2E2BD94538AB5EFB768EA999BF8B65D1E + 216BAE86D0451DADEFF51AA357FD9EC739CD2FC6C76EAACED25A6E9ADB491C71 + C40BF00B9D8DC955DF04ED7EBD74AABC4ECE63CD8692BA134E5A8CCF6F755FC2 + 741569AA5A9B165FB7FB289C9C9E118F6BB2BE6C7754A6DFA60B80CB3E8A5760 + B231AC692C0A514D411B1A3BA16BEB78D4B9B11251AC80374B3797EE7D178546 + 96DB667D159E29983C02FCBE9233F842E62E316A7DC9F4D14ED7E9A73A2746F8 + 9B2467AB1ED0E1F22ABED57C2BB45C5AF74303A8273F8A31961FCBA85D353DB6 + 378FBA16AABAC51BC1EE056CB5B46A76BA39F9FB91E46BB1C5378D1FAB748CC6 + A29BB4969C1DA488F337C3E4B7BA4B8AB554AE6D2DDD84B46C4B974ADCB4E603 + B95BB1EA08C83F10AAFD71C2AB3DD83DEC83D46A4F49236F74F4EA3F65AB3D03 + FCDA7967F924A78FCC67D93515AAF1135F4952C0E3F81C56D5CD0410E6820F50 + 46C573B5FB4A6AAD1551DBC7DA3A9C1EECB192587F6531E1DF124D43D96FBAEC + EE9927759AF884E1FD3BD657F926B0F744B357686B4DF607010B22948F2D8AA5 + AF9A4F52E86BA8B8D9279E2313B98729382BA5237B248DB246F0F63865AE1E2B + CAB2929EAE23154C4D9587C08E8B627A1CAEAE99FEC3EA453845E91ED2F82CFA + BE2304FB37B73D0FC7F9F25D2F65BC505DE8D95543531CF13C021CD702B90388 + 7C2BA6AF8DF556D680E1BE1A30428768BD7BACF85B756432C93545BC3B0E8DE4 + 90067C3C9684946C7CB25CB231BA3FA0237455EF0B389F60D716D8E5A2AA60A8 + 0D1DA44E3820AB01AE0E19056AD95CA0F0CCA793F4888AB32111100444401111 + 0044440111100444401111004444011110044440111100444401111004444011 + 1100444401111004444011110044440144F5EEBDB0E90B7C95371AC8C3C03CAC + E61971F70516E3AF15683445A64A78646C97195A447183D3DE7DCB942968F547 + 122F2EAEB9544F246F764024E3195628A4B322B726DE2249F899C60D4FAF2BA4 + B6D8FB5A7A124B7BA482E1EF5F740F0BDCF736E17825CE279B2FDC953AD1FA22 + D7618184C4C92603CB6054B3F985D1D3682CBF796D10A2A3BBEE635BA8696DF4 + E20A485B1B00EA06E564A2FC4B2471466495ED631BB9712BB91853A587844B76 + 7ED6BEF378B7DA61749593B5A40C86677506D7FC4DA0B3C2F868A4064E9CDE2A + 9AABB8EA8D6F5BCB036510B9DBBF7C61732CD75BA897250B6F261B51EE4E75DF + 195913DD4944F0C19C774ACAE0E5CEA750DD995321716039CFB9575AE386B05A + B4FC75F2D539D54E3839F156CFA3A5A7D4EC0EA970EF16E01F35A1A8D1594DAA + 16776621629F62D7CE493E6A3BC47AF16FD255529772978C02A45E0AA9F489BA + 7AAD8A3A36BB0E73771E795D6E252E5A156BDF624BC908E06D11ACD415B747B7 + 3DE21A7F9F92EA3D154DBB0E1515C07B5FAB69D8E52C21D33B98FBD74868BA6C + 31870BA37E34FA18C3E450B79138B6C7CB105ACE237FF91EEFFF007677E8B754 + ADE5605A8E20C2FA8D15778A3FBC691F8FC867F45E324F32363B2398F833347F + F3B339817194E1586A9FE094820D4770A599FDE7B8E067C7757005DEE0D2F825 + 1F998614278D8D73F424AD68C9E62A6CB4DACE845C34D5653F2E5DC9CC16CF13 + 8B7A778F608AAFD1F67654DA24A6E46B5F1C9838EA574AE8EA06F2B096AE41E1 + 1DD7FA6B8872DB2ABB91543F9413E795DA5A35CC740C208390A776AFA9A28F2F + B1528E244C28A16B231B2CA5F887EE05FB5E524DB7B97844451017C7341F05F5 + 1018D35331E37016AABED11CA0F742DF2F85A0ABABBA507B330D64ADEF5A6A39 + 629237C2C92378C3D8E6E4382E6EE31F0CAA6C133AF9668DFEA9CD97B5BD623F + B2ED29E998F072028FDEEC74D554F2C1510B6586561648C236734ADA9DF1D4C7 + 13EFECC872B8EE8E57E106B5337FCD9719771B0C9F1F356D0DF18DF3D150FC62 + D1959C3ED622A2939BD4E5776903C0D8B73D15ABC33BEB2FB6289EE7E6563403 + BA9F0FD54A99F23ECFF927B359248F6BA3761C30546758E91B76A0A678922636 + 623638D8A90DE2E51D1B982A1A4870D8AF94D34551089A1707B0F8F92DBEA53A + DF82C5890EC7345DEC9A978777AFB4ACD34D072BF98B5A4E08CAE95E0571D6DB + AA6386D17570A6B9B5A010E380F3EEFE7EEB1EF369A2BB533A0AC883C1180EC6 + E173FF0011B43DC74EDD85D6CC5F1BE3773B1D1ECB52C84A97D3BBB7B3318F74 + 7F402199B234169041F15EAB96F80BC7AF5C9E0D39A9FF00C0AA003192BB60F3 + D3F9FC0BA6E8AAA3A889B246F0E6B86410569DD4386EBB194F264A222A0C8444 + 4011110044440111100444401111004444011110044440111100444401111004 + 444011110044440111100444401111005A5D6B7B834FE9DAAB94EE0D6C519775 + F2FE63F35BA5467A5B5F8D169165B6291C1D51261E33B600CFEAB28C339DAA0D + 7F1235F4D5D55CCF88C9B0F003C95E7A7ACD4B65A16535331A1C061CE0144782 + D65650D84573D804B2F4DBCD582BB1C3348AC7D59F65D8C6147B0445ACD4578A + 6B3503AAAA5C06DDD07C5767517C6887348C2593DEEB70A5B751BEA6AA46B5AD + 19033B9542F12B89D555F3BA82DBCD9CE0062D2EB7D6776D4F797505B1CF7071 + C777A0526E1C70F85BCFAEDD1A26A97EE01DF0B97A7D35FC4ECCBDA3FE1119D8 + A3B223BA434057DEA66DC6F8F70638F3061572E9ED3F4F450B20A4A76C6D03C0 + 2DD59ED0E90B5AD660780014EEC3A776697317A45F86E1B0C43BF928C396ECE7 + 6E3AFF0082EA0B5B4F7DFDE23E27656470E6805BF4952C41BCA5E3242AD389B2 + 8BE7184D24597C504A1807B82BA28A21051C3037A47180BCCD737AAD73B1FD49 + E99620DF93DB6C8CAE74E3D5C0DCF55434109E60640D0D5D07729C5350544E71 + DC8C95CCB6E89DA8B8A5CCE25CC8A4E6F9157EA13BF590A97B1749E225F3C39B + 73696D9474ED6E031836579694A7E585BB782AC746D2F7D800D8602B86C30F24 + 2DF82DBE3B6A5F02F62AA91B88C61ABCEBE0153453D33BA4B1B987F3185EC3A2 + F8EE8BC91B0707BDD3692E2BD553CE4C78A87348E9E2AF7A79995103278CE592 + 3438285FA60E8F928EF34FAB28A3223A8DA523C1E162F07F53C774B4B28267FF + 008D18DB3E7E4B7743A8E85D97D9985BA2C25F1C1AE05AE19691823DCBEA2F53 + 38AB22D3ECC89CE9C6ED35516ABE36ED40C702C773B5CDF9ABD7D1C788506A5B + 3474F3BDACAC80063D84EE5354D920BE5AE4A5918D3260F213FD9738D4B2EBC3 + 4D6B1DCA90C8C89B266468E8467A2F3F0E6D3CDD13ECFB092CEE8FE88514A1F1 + 839594AB4E11EBEB5EAEB1C1554950C327280F613B83E2AC889E1CD5CFBEA75C + 892793F6888A8321111004444017E258C39BD17ED13B02B7E3568C8755E8AABA + 4ECC1AAA7699A9CE37C81B85CAFC23BBCF63D52FB5CE4B5BCE5B82BBAE6603BE + 32B8B78F9613A578B0EA8A6672433CA26663C9C72A7279DC8AD9E0B335E523AA + EC8E9E2DDD18E6DBC954D60D7935A6EBEA933FFC22EE570276572DB24159A7A1 + 0F21E658403F25CA9C54B65C29F564B0D132471E627B815BA84D353F2B248EA8 + B4D7D35C68D9534CF0E6386E33D17AD651D35642E86AA26C8C70F11D173D70C3 + 59DC2C753151DC0BF94F75C1DE1EE2BA1682AA2ACA38EA6170731E33B787B975 + 349A98EA63D1BBF630FE4507C61D0725AAA45D2DA0B5CD3CEC7315BDE8D5C638 + 6E9490E9BBD4BD9D7C23918E79FBE07EBFCF86EAE96FA7B9523E96A581CC70D8 + 9F05CE7C48D355DA475132F16A0E63A17F38737C77CAD79D6F4D3E959F95F666 + 1ACEE8FE82D2CED9580839C8590A94F47CE2543AC34E45DB4AD15B080D9599DF + E2AE5A7943DA082B4EFA1D6FE4653C9EC888B5CC844440111100444401111004 + 4440111100444401111004444011110044440111100444401111004444011110 + 04444017387A5F6277DAA178CB435C7FF39FD9747AE6FF004B6FFEF76BFF00E5 + BBFF00EC7292ECCC3EE8F7D2D4ECA6D3D45147D3B3056CD60D87FF00C128BFF9 + 41672F59A04969E3830FB9E7512C7042F9A5388D832E2B9CB8C7ACAA6F17436B + A2717F33B95A1BE0ADCE30DE0DA74ABF94F2BA5CEEA9AE1069F75DEEB2DF2B5A + 5C03BB995A1D29EBF59D35D9119CB9512DE17E8D86D9431D5CF17355CA32491B + 856DD8AD0E99CDEEAF3D3F6B32BDB86ECACFD37656B1AD25ABD16AB535E86AE9 + D65108659E3A7AC2D635A4B16FAFAF82C9A66BAE1261A2081CECFBF0B75494CD + 8D8000AAFF004A2BDFD93C389E9DA795D52E0C041F9AF1B7EAE77CF765B62518 + 339CB86B13AF9C44ABB9CB9701297737E6AF2CE493E6AB1E02DACC16896E2E1D + E97C7CF2ACDF05D0E110DA5632515CB1488BF142E02DFA46A5F9C178202A7F81 + 3426AAE95B737B739760152BF48DBA761698A89AEC39C3C3C72BD781F6BF55D3 + 7038B70E94F313E6B6F8447ADAC9DCFB2236BDB05DFA2A97769C2B4EDB1F2C4D + 559515D6DBA72D2EB8DCE76430C632492A07A87D272DD4B51EAF63B73EAC0382 + EF03F0EAB4F8A395D6BC0834B63A59172D8F498BC1191A79FF00CFF657E65F49 + BBB44C2F769F7803F9ECAE57E165E57DCB798E84D7BA768F5469BABB2D6B4164 + CC3C8EF61FE0570E5CE8EEBC39D7135254C6F67652907C88CEC55F5A77D2774F + 56F24378A3968E476C4E361FCF82FD71529B48F156C3EB766AEA67DD616E6378 + 7005E3C1AEF7ACCB4B663B648F3619E3A46F905FAD6CAA89C3B4C779BFAADCAE + 6FD337CBA68ABE9A2AB0F8D8C7F2B9AEF0DD5F9A7EF94379A364F4D2B79C8CB9 + 995D1E1DAF515D3B1FD19268DA289EBED234DA928DE0C6DF58C6C71F794B1175 + 355A58EA6387DFD9984F072FB46A8E17DFDB596E9A56C2D7E5F1EFCA47C175B7 + 05B8C364D6741140EA86C35ED68ED2279C1CA886A7D3B417FA6747551B7B4C6C + EC75F8AA135768ABE690BA9BA59649607B1DCCD31923FB2E14D4AB7D2BD7D18C + 7BA3FA0F148D7B410410BF6B94B83BE916D8CD3D9757466198619DB9E87E3FCF + 92E9CB25E282EF46CAAA1A98E789E321CD702B52DA250DD6E8CA793628837454 + 190888802222004642E67F4CC641DBDA9F196FAD76783E78C95D29553329E9DF + 348406B064E4AE2BE34EA476B4E288A4A677690D3BC46D70E9869595D8C3EE8B + 1F4273FF004C517699E6E5F1550F179DEABC48A4EC4728748D0E03C77578DAA0 + 34F6EA5A7C00591805501C58AF655F13292303BCD99A081F15D8AE2B34465F33 + 12ECCDCF10B497AEDBC5EADD1E2A18D0E9D8D18C8F687EABF5C21D66FA5A9FB2 + EE32120F74655B7A6285B341182D0E0580107A118E8A9DE34E8C9B486A18AED6 + F63851D41ED187D93E2D56F1BD1C34FA87655B27FE195D5278C32F2690E6820E + 411907CC2D2EB2B1C17CB3CB4EF6032069E53E7EE5ABE186A26DF2C4C6BDC3B5 + 88631EE52F071B85743975FA6C3FCCBF92CECCE66D1F75AFE1B7122225EE8E8E + 5939646E76C65773E92BC4571B7C35113C399234105723FA4369D6181B748198 + 3F7B6F02ACEF464D55F69690A7A7924CC94FFE191F0E8B4A983BAA9425DE261E + CCE908DDCCD5FA5836E9C49103959CB9538F2BC130888A202222008888022220 + 0888802222008888022220088880222200888802222008888022220088880222 + 200888802E6BF4CB8AA218AD558C04478734BBC3EF13FA85D28A15C64D1B16B6 + D1B536BD854B01929C9F6BCBF3595E0C3F2523C30BE4175D39047DA03346DE99 + DC852D5CDD62AFB9683D52FA3AD6491767272B9AEDB1BABFB4FDEA8EF542CA9A + 691BCC4779995D9E1BAD50FE94FB7B06B24338F96F9EE1A59BD8B490C041506F + 47EBC42F6C964A92D64D1BBBA0ED957A5D68A3B8DBE6A39402D91B819F02B9A7 + 5EE95BB692D41F6B5BB9E3746FE6CB7C55B56A25A1D5B97B488CE3CC8EC4D1F6 + D696B1D85635BE9DB1C6301501E8F1C53B6EA4A08E8ABA5653DC6201AE638E39 + BDE3F9FF001E85A491AF8C1690410B5B89DB2B279F6310583DC6CB94BD302F52 + 565FE82C50BB61DE700739C9DBE817535C276D3514D3B8E03184E7C970F6A3AE + 9758F19279DA79A264F86E3A000E02E64764D91B776A25ABA0E845BF4B5241CB + CAE73798ADE8DC80BF313045132268C0634342F0B9D4B692DF5150E380C8CE3E + 2BD255FF00CFA3CFCBF92CF739E78E15CEBAEB48682339CCA063F3570E946416 + 7B1C2E94B638E188139D80C0546DA1A6FF00C53327DF644F2EDD4FB8BD7A7D0D + A22B4D392D927C671E5E0A7A0B168F87CAE7DDEC8A6CDE58445F5F6ABBCEBCBE + 7D95465ECA18DD80D6F43EF3FCFD5585A0386D6CA0A18E6B8421D2119E52372B + 1F831A4A3A4A0173AB8C39EEDC64752ACF0B97A5D34B592E7B3F2FF25918A823 + 05966B4B1818DB7C181E6D5E75560B354C7D9CB6F8797FCA30B668BAEF87E9F1 + 8E5259657FA8785962B935C606089E7A0230AB6B9681D4DA5EB8D5D9A79D8D6E + FDD27185D12BE100B4B5C039A7A8232169DBC2DC77A65FB3194FB9C8FAE6EB76 + AC1DA5CE377ACC6305E5BB9C6562F0FF005E56D96E2CED6577640F9F45D39A9F + 44592F70BF9A0645211E5B1543EBBE13575BA77CD4711ECF39C01B15C4BA9B2A + 9626B7248BDB466B4B6EA1A56112B19311E27EF294AE34B5565DB4ED53407491 + 969FBA7A2B9F41715592B23A3B96FE1971DC2DDD27129D3F0CF7461AC9722F0A + CA5A7AC88C555136561F03E0BCADD71A2B842D9292A19202338CEEB317714A8D + 5C31DCC6E8A9B885C2BA6AF63EA6DAD01FD4068C10A17A7355710786756194F3 + 4D351B0EF13F2461746AD7DDECF6EBA4463ACA663891F780DD732DD05B4EF53C + AF036664F0CBD23B4EDF1ACA5BD9FB3EAFA1E73DD27E2AECB3DEED776A76CF41 + 5B0CEC70C82D78395C7DAAB83D4953CF3DB5C0487A01B10A274B41C46D133836 + AAEAA11B0E43398907F25A128D72789AE5637477F22E36B0FA44EB7B339B15EE + D86A18C18270413FCF829FD07A51584D3C66B6DB3C4F23BDB74FAA87E15BFCAD + 31CC7452F3A89A2A788CB33DAC6346492B9E6F1E941626C120B6514D34A3EEF7 + 763FCF82AAF58717B5E6B689F45430CB4B4F2641E407241F7AADD2E3F9B630E7 + E0B27D22B8D4CA6649A734D4C24A87E59248C39E5F70F7FF003E15D70674C54C + B5C6F3728C971EF65CBC387FC34A99AA5B72BC17176724BD5CF4B053D152B618 + 58D8E260FE12AFA28EABCF68AEEC4535BB3C6F35B1DBEDD3D5C8400C69C7C573 + 55B263A878AAD9437B4647264953CE376B363299D6CA194389DB63D4AD370334 + EC9031F76AB61134C7BB9F25D4E1D17ABD6A925F0AFE111B1E160E86D19103C8 + 31B05BFE236908755687ADB6BA30E9DB19969CE370F03A0F88581A269CE5A70A + CCA38F1134E3A2CF19B336344611D8E1CE15564D60D60FB6D492D05E5A5A55FB + B781C8F055071FEC674B7161D554EDE4867904CCF81569D96715369A59F9B98B + A3193EF5A7C26CE5B9C3C977746A78876C6DCF4B55445A09634B82ADBD19A696 + 82FF0071A4ED0F661DD3C3C55BB7F71165AC1E71154BF031E59ABAE7FEB7EA57 + 4B4D4AFC7C97945763D8EC6D3555DA42DDFC1495872D502D1B39746CDD4EA039 + 605C5D7D7C96B2707947A2222D12411110044440111100444401111004444011 + 11004444011110044440111100444401111004444011110044440179CCDCB765 + E88770B29E014A71D385947AC607D751B63A7BBB07DEE826F71F22B9829AB2FF + 00A12FA68EB59345D93F0E63BC177ED7D28958410AB0E26E80B56A7A37C55F4E + 04C1B88EA1A3BEDF8F985B0AA56ACC7B90CB8FD0AF7466B3B75FE9DB99191CD8 + C104F52B71A92CB497AB73E0A8602797BAEC2A2F58687D4BA12E06A600F92979 + B2C9A304B5C3DFE4A49A1B8A4476745751BF4CB8AB23A87CBD2B9657F944BBAC + A221AC787D77D3B70FB52CD24B139AEE66BA338560F09FD226BECBD95A75840F + 735A437B7C741EF5635254DB6F7420B0C7346E1BB4EEA17ACB86169BB44F929D + 8D8DE467042B173463B7C513182CDE25F15B4ECFC2FAAAFB55C62925A88F9236 + 87778123FBEEA8AE03DB1D535D537899B9249702541EF9C3BBCD0D5FAB36594C + 00E437C15EDC35B48B4E978632DE57BF73E6AAAA0AEB6308ADB246317CDCCC93 + 288F166E22DFA3E73CD83203B7B94B8AA63D23EF019491DB98EC3B007E657678 + A4B15C6B5EEC92341C03B67ACD6D5DD1C399EF7F2B49595A85B2DFB890DA5239 + A38E4E503C3014A782F6CF54D2909C61CF8DD267F2256B78634124DC40ABA894 + 7386127EA5438C2E9D34D2BC67EE535ACCDB2DEA0A6651D1434B18C363681F9F + 8AF62E68FBCE6B7E270B0EFB718AD36F96B66C6183201F12B9F2FF00AFEEB79D + 46EA7B6C9213CD801B955CF56F4C95352CB5DCB9E3BB3A437C671B1F108B9FA2 + D59ACACB3345576C5ADF07B4852DB0F16A9E57361B9C018E3B737458AF8C6F8B + 23F63382D445ADB55EED97289AFA5AB8C93F849DD6C57529D55572F8191C1F57 + E64632461648C6BD87AB5C3217E915B6570B1624B20826B0E1BDAEF4D7CB031B + 1CA77E5548EABD0F76B25438C70C858D3D42EA958F5B494D5B0986AA16C8D231 + B8DC2E26A784B5F155F62499C9D63D6378B0D4868964C34EE09570E8CE2DD0D6 + B590DC480EE99270535CF09E8EB6392A6DE073F5C0EA1515A9F49DEECB50F3D8 + C9CA0F56EC5723E3A65E1993AFAD977B6DC981D47571BF3E04E0ACF391D42E2A + D3BAAAF96DA86C6CA89001E055B1A7B8A17DA48DBDBB7B767BD7469E2D6C369A + C98C17E2F8F6B5E30F6B5E3C9C32AB7B57166D93605753BA23F88818523A3D77 + A66A62ED3D7C47E41C42DDF51D2DAB1621866CEB74FD9AB4FF00CA2DF13BE030 + B4B70E1EE9AAC76F4618DF2016E28751596AF262B8C38F325644D77B4C51979B + 953903C8AAE51E1F2DF381B91CA1E1CE99A4979DB4BCC3C410A454166B5D00C5 + 2D144CC742464AD5556B6D394F1973AE0D716F5682A2B7BE2CD0C20B2DB0195D + E0719544ACD0D7F963CCC6E59355510D24266A891B1B1BE27F4554F123899043 + 4F250DB4F338ED969DCA895DAFBAAF54D418A164AD63BCB2B67A5B40B187B6BA + 8334B9CF29DC6546B8EA7884FA75476F9765F5312928F722DA674A57EA6BA32E + B5CF78843B3DEF157E698B608DB1451B30D68006CBC2C566644C64504418C1D0 + 00AC6D2F6420B496FD17A8AEAAB8651CB9CC9F766BEF37937DA4A83B38DA4853 + 68598600B06D548218C0C2D98D82F1BACBFAB36CD88AC239AFD33E9220CB4D60 + 21B2969613BE700FFC57CE1E92ED1F40F2724B3F45AAF4B9BEC371D49416581C + D7889AD071E049CADFE93A5F53D3945003B08F2ADE1C9FE2621763DEFEDCD96B + 0F9445523C1438D5B73FF5BF52ADED7D5C2DFA5AAE62EE52E6F28F7AA7380AE9 + 2A2FF71A9E53C8E775F9AEE68E6A5C45E3D960859F94EADD12EEE315894BFF00 + 461575A247758AC5A5FF00A30B93C5BFBACCD7D8F64445C92C08888022220088 + 8802222008888022220088880222200888802222008888022220088880222200 + 88880222200888801190B0AB291B2B482166A1DD4A3271794082DFEC11CF0C91 + BE16491BC10E63DA083F92A1788DC19A7AA925ACB0E29A7C97181C7BA7FD53FA + 2EAE9E06BC6085A3BA59E399A7B80ADF8DD5DCB96D5FBFB95B8B4F28E1B8AE1A + AB44DC4D355B278C46705AE055A9A3F8956DBA44C82B1E2398EC4956AEADD1D4 + 374A6753DC2899531F8730EF37E07C173DF13385559A7A927BE595F24B490905 + EDE8F8FE3EEF7A84F4F669FF00A95BCAF3FECCA9E7665CE1947571364E58A667 + 507195E843461AC686B5A3000F054EF022F974B8D53A0A995EE8D8705A55C47A + 9C745D2E1938DD27271F897B927D8FAD1970F9AE65E38D53A5D5CC92A838C0C9 + 3BD8F2CAE99DC1C8510D63A12D7A85AE73A36B263EED8ACF11AEDEA46D8ACA46 + 3BAC1AFE196A0B15C2D3C949551B7B3A7702D2704774AC0E11B9AFD5D722C707 + 0E5EA3F35566B8D1D72D13DA54524AF89AEC8C8711B2977A335666BAA05449CF + 2C84F8AD1D6EBDEAED849AC608C21CA4AFD216E4EA3D39D9424F7B390142382D + A72265BBED59E20E9E539048E8A5FE9214AF758192440B88DCAC5E035632E9A7 + 6284E39E13CA42EB70555BD4CE53EE88DD9C13982D26AE1ECE6899330FE191BC + C3EAA39A978556AB8832D335D4137B812CFDC7D55DBA6ECEC7C4D25A16F67D3F + 1B99F702B3886A34B74DAB22B3E7B3231835D8E2FBD697D5BA4A7F588448FA70 + 769233CCD3D16FF497152A298B696ECC25A36CB9748DCF4DECE0D6020F504641 + F885556B9E135AEE81F2D2C6282AB0482D1DC71C788F05C6B340D7C7A7967F92 + 6AC6BF31BCB15EEDF78A76CB493B3247DC2775B33B1C1D973A5D6C7ABB4355F3 + 72CBD803DD7B776386FD0FE4A57A478AFF00729AEECF764FEEA7A7E29654F96D + 59FE4B309F62E0458167BAD0DD6012D14ED7E7F0E7759EBB94EA2BB9660C8E02 + D75E2CD6EBA40E8EAE9D8E24639C0DD6C5162FD3577AC4D04CA3F5A708DCD7BE + B2DAD6BC75D82800ADB8699AEECAB6804B4ED3DE6B99905757FC168350E93B45 + EA2736A29D8D7BBF100B87770DB2997343E244BB951586B742EA4E48CC429273 + D5A1F8DFE054A64E1CD8EAA8C7ABD7D447E2D1D9E41FCC1510D6BC20A9A47BAA + ED65C31B82C5A5D3DAD356E8EAA14D7285F574CD3821E0E71F157D16686DF86D + AF0FE595FF00856E335D996141C37A681BCADB8FFE472FDBB87D01041B88C1FF + 00E1B96FB44712749EA291B4F34A28EA0EDCB26D92ACCA2B1D256C624A592399 + A7C5A72B7FF05C3B19C3FB91E69948D270DAD90C8E7CD5934B91D18CFDF0B674 + 5A2AC94A3FC3A274AEF390FE815C834B0F63E8BDA1D2C33F73E8A70AB8657BF2 + E7EAD986E6CACE8ECFCAD0C8A16C6D1D035B80B7D6CB048F70CB0AB068F4CB1A + 4659F45BDA1B2471E3B815B6F19AEB8F2D4B0BE46156DF722D61D3A1BCA5CC53 + 6B65BD90B077566535232303002CA6B405E6F55AE9DEF72E8C523E31A1A147F8 + 83A968F4C69BAAB8D5C81A18C3819DC9F2595AAF515B74E5AA6AFB8544713236 + 93B95C5DC57E225EB895A90DBEDE5EDB731F86B4743EF3FCFDD694639DD894B1 + B2EE62D99F59AEB88D2DD672E7B1D2970CF4EAAFA8A311C6C89836680D18512E + 18E966582D2D7C91E2A1E3CBA2DBEAFBE4161B549532387685A794797BD74B46 + D69E12BE5F44492DB0561E907A9DB0D27D9703F27EEE01EA5647016D0FA3B132 + 791A43E77736EAAFCD46B6D78D0439D035FCCECF92E92D216F6C2C8608DB86B0 + 00176781D0E319EA26516CB2F05A5A2E2C31BB29ED38C3028B695A6E485BB296 + 4630D5C1E23673DACB60B63F4888B9E4C2222008888022220088880222200888 + 80222200888802222008888022220088880222200888802222008BE39CD68CB8 + 8007892B5D537EB353BCC735C69DAE1E1CC98C83648A1F55C4CD154D50E825BD + D307B0E08E76EDF55E5FE94F43FF00DB94DFEFB7F756746CFD2FEC63289AA2D2 + 69BD5562D45CFF006457C555C9F7B91C0E3E456ED41C5C5E1A3217E5CC0E5FA4 + 58060D551324072D0A97F496AC8EC7A25F4CC20495AFC63C703FF557B120024F + 40B917D296FAFBDEBBA7B240E259072C65A0E707C55CAD928B8E484965A31B81 + 36A34F6B9AE2E6E1D2F438F3566AD5693A06DB74FD25306E0F20715B5EBB2F41 + C2EBE9D1CCFDCCB3CAA278608CC9348D8D83C5C545AF7C42B0DAF21B376D20E8 + 01504E39EA39A3B9C76DA59CB07DD3CA7AAC0D31A1E29E1655DCA67C86401DC8 + DDFEAB4BADACD6CF9285B7CBFED86E31EE69B8B5ACAAB55D13E1A7A690B46EDC + 0587E8F1592D06A7E5A86B9A5CEC00E571596C341425A69ADF09C78BDBCC7EAA + B9D7D4634BEBD8E7822EC607B9B2B1A06C03B7C7D551ADE197E8E319DAD6FE08 + C2C4DE11737126D6DBB6989E30D0E735B90A87E0CDEDDA575EC969AE7F674F3B + F039B600E574369FAE8EEB63827C8707B30E1F92A378DBA225A5AB376A2690EC + F3B4B54EBB9D3646E5DA5FC9292CA3B0F48CB1494D1BD8E0E69008214B98C6B9 + BD172AFA36716A9AAA9E2D3F7B984359080D6B9E7EFF00FC7F9F0EA2B754C73C + 2D7B1C1CD23620AAF5D06E5CEBB33113F53D2B1E37685A8B859E395A7B814857 + E64E46B4B9E4340EA4AD4AEF9C1ECC93592B4BDE9B64913E37C2D92370EF31ED + CB4FE4A9CD77C1FB7D7BA49ED6D143524E790FFD1B8EFD0F82E80D43ACB48DAE + A0D35C2EF4D14BEC978FDD46AAF5A685AB90451DEA94BDE70073B77FAAEAC65F + 888E2D87EFEE55CB8794CE4FA8A7D5DA1AB79268E7646D39077E523DC54EF48F + 1569EA7929EEADE57F4E63B1579DE74E535751F2BE08EA69E419E47B7208FD3F + 254CEB8E0DD34E5F516471A69BAF62F3DD3F03F3EAB5A7A2B2BF8E979FE492B3 + 1DC9E5B6E149718849473B65046700EEB2D7384553AB343D798AA619D8D69E8E + 07FBAB2349714682E01905C7FC397A73742B634FC5A51F86D59F993C163A2F1A + 2AAA6AC88494B332569F23BAF65DAAAFAED5983C91C0F023C0F505696F5A5ECD + 7563854D2303CFE2685BA455DFA3AAEFCCB7339293D55C1CEFBEAAD6FC386E39 + 362B4169B9F123424B8A5A89E581A73C8FDC61745AF1A9A5A7A9616D4411CA0F + B4D5CE970FBEAFED4B2BC31B320BA3FD2524A77329B53DA5CD2362F60FDFF757 + 0E99E32680BC801B738A07F948797FBAAC6F3C3ED3B72E62FA611B8F90C850CB + A705A9DCF2FB7D5F667AECEC15A96292FEED6D7D063C1D7F6FBC596B0034D5F4 + D267C9E16CE37C2E6F33246380F10E0570B8D03AE2CD23AA2DD74A960030395E + 566DAAE1C62B753C94F1D75448D778BCF31FAAD670A65DA4D7D50DD1DA55B75B + 6D1C464A8AC858D1D7BE155DC45E3AE96D3B492328AA5959558EEB63703BEFE2 + 17393B4FF12AFE1D0DC6E7565A4E795CF385B6B0F07DA1ED9AEB505EEEA798E4 + A82AE39C472C8BE77F2235A9F54EB2E27DD48924963A32EEEC6DCF281F056570 + D741535869D9355461D3E3201FEEA4DA7F4FDB2CD0865240D040FBC46EB13576 + AEB758A95EE7CCC74C06CDCABFA2ABF8AFDBE44A315133B52DE692CB42FA8A87 + B4103BADF35CE9AEF51DDF56DC8D35073B98E7E365FBD53A96EBAC2EA29E06C8 + 6271F03E0AC1D11A5A0B5533098C3A770CB9C47F3F9F4DAD2696EE2372DB115F + 6488CE6A28FCF0CF4AB2D341199616FAD3C65EE574E90B612E692D5A5D396974 + 8F69E5569E9BB60898D3CB85E83886A2BD2D2A9AFB229845B7966EAD14E2289A + 31E0B683A2F38181AD017A2F1364F9A5936504445032111472FDAF34658B985D + 7535AE9DEC3CAE8CD435CF69F7B5B923E4B2937D86091A055B5571DB84D4F14A + F9B5A513046D738E62977C0CE077373E40649F05FAD3BC72E155F5B9B76B1A37 + FF0089D99EDA2961C3B1919ED1ADC0F79DB63E454FA36633CAFEC4B95E338D8B + 1D178525652D653475349511544120E664913C39AE1E608D885EC082A0D6089F + 51116004444011110044519E216BAD35A12CEEB9EA2B8329DB83D9C40E6494F9 + 347EBD101265A6AED57A5E8657435BA92CF4B234E1CC9ABA36107DE0B9726EAF + E2F71178B371367D1B4B3592C6F7723E719CB9A73BB9DE3B676F1C74CAFCC3C0 + EB6C96D1F6CDEEBAAEE0E197BFB5380703DC7C73BECB734FA39DDBA5B186CEAF + 835A68FA899B0C1AAEC52C8F21AD632E1139CE27A0003B75BDE61E6B8A2A780D + 6EF5091D6DBCD5C15CC1CD138C848277C0C63CF1E7F02A45E8D1C51D5943AC1F + C35D56F7D5085AE14D3487BF186B4BB19F1690318F8636EB65BA0941E3063275 + B028B5B455EC980C382D831D90B4A70707864B27E91114004444011110044440 + 16B751DEA86C36B96E17099B1431B4B89270B64B973D2E756D5CD5B0699A09B2 + C7E0CA1A7AE7A0FE79ACA4624F1D8D171578F37BBE5D24B4E92E6653E7944ADE + A7C3F250DB468DD69A86A3D7ABAE3541CFDCB8BCA98F0BB4251D15BE3AFAC873 + 33B7008EAACA680D686B406B47403A2E8E934B6DFBC7E1441471BB2A0A3E0E3F + D60BEB6E2F7F3753CEBF778E155BA8692694D64DDC617025C7055B33CB1C10BE + 694E18C6F338AA1B889AD6E375BBC96CB64A48279435A7E8B3AB82D3CB92326D + FD496362C2F43798515EAEF4E65739A0E0733B3ED2EA9827120C82B917D1CECB + 76D3D57555771387541181F3FDD74FE9EA974B1B492ADD5E91AAE336BD88C65B + 92345F19F757D5C72C355AB2E705A6C1575B50FE464713893F92E2DD39DA6ADE + 274F7193BECED8BB3E1D55BDE96DADBD4EDACD3B4727F8D3FDF03AE3FE27FB28 + 6704EC0EB75A4D7CCDC4928DB3EF5642B73928AF722BB963600D8741B0F82C7B + 8D5368A827AB710046C2467CD7BF40AB5E38EA66DAACAEA38E4C3DC3BDBF8AF4 + 5AFB15142AE3DDEC1792A1B8CD26AAE24B2300BD8D932EF11D574158AD9CCC8E + 26B7668002A8381365965927BCD4B32E95DDC246EBA4747DB83DCD25ABA9C3E3 + F82D1733EECD797C5232ACBA739DA0967D142FD23F41C955A420BD51C1CD3D09 + 2C970DC9E42720FF0070AFCB4D0B1910EE859373A0A6ABA19E8EA621241330B2 + 4611D415E6F5DAE96A1B832D50C6E8E37E0A6AC6C40DAEBA6C636192AD8BAD0D + 2DD689D4F3B43D8E1B1EB854CF1B387774D05A95D70A06BDD6E95E5F0CCD1B0D + FA15BDE1971069EA606515CE4E47B76049DC2D4A2E504EBB17C2FF00C16279EC + 44B881C30AEA0AB75C6D25ED703CCD7316D7877C71D5DA2E68EDFA829E4ACA56 + 77798FDE036574433D3D54598A48E663BC8E73F92D2DE34658AEC499E918D27A + 9685B4AAB22BFA6D4A21A32AA3D2874E368C1A6A39A49CB721B8F155BEABE3AE + B6D5024A5B352BE9627EC1CD0738F8A9753F0A34BC72091B1608F3016D8DBF48 + E9B83B47321E668CE365AD6663FF001488B837DD949DA3425F2FB57EBF7DAC98 + 3A43925CE3BAC6D73A5A974DDE6DA29AAA479748D27BEA63AEF8A96DA7259410 + B399A30DE51D15776A8753EBCD494F336291B0324E6E67670A5A7539CE3CB966 + 1E22B0776E968E39F4D506772610BE5CACB1CAD3860581A2A67C56AA5A579C98 + E30D2A63100F60C8565D39D16BC3F7329651556A5D274F5D4CFA7ACA58EA6220 + 8E57B738EBD0F51D552BACF8331BA47D4586630BF24F6329C79F477C975C54D1 + 324072D0B4374B147203DC56F5A8D4ED6ADFCAEE4795C7B1C5723B5A68EA9114 + F1D4B434FE20718F7152ED39C5A6B9CD82EB1631B1711FAABE2F5A65B246E8A4 + 8592C673963DA1C3E45565A9B85963AB73DF1D2BE8A5393CD16EDCFC0FEEB0F8 + 758BE2A259FF000C2B31F991B6B4EA9B25CD80D3D6B1A4F838ADD3087B799843 + 879B4E551F74E185F6DF2992D356D9C039018E2D77C8AC16DCB5CE9E9047332A + 30D3D1CD2B2B5DAAD3BC5ABEE4D38CBB17FA2A72D5C55B9C4E11D7D097E3EF1C + 2DF50715ED153286C9492463C700ADA8718ADFE68B43058A8A16EE2469FF0001 + 38FF0064FECBF3FE922C3E737FBA7F657FAA69FC8C136FCCAFA1CE1D1C542871 + 234FE37139FF0064FECB555BC59B74523A2A7A27C8EFC2482A99F12D37E9CFEC + 670CB27BCE3B124AC0B9DDEDB6D6975655323C78672554375E24EA2B97345434 + AE881DB60B4C74FEA9BFC825AF95F1C47A979207C96A4B885B6BE4A238FA6EC6 + CBB92AD6DC52631CEA4B4778BB6C8392A0B6FB25F3555676F707BE3889CF7BCB + DCA6967D03414D2472C999A46F52E1B29DDBAD24901B1803DC174349C06CB1F5 + 354F957F9FFC2995DEC88E697D2F476D85B1C5034BBDA23753FB0D95D239B96A + D9D8F4F39C5A4B3E8A7F64B23226B4962E9EA75F4E92BE952B09108C1C9E598D + A76CAD89AD25AA5F49008D800094D4ED8DA000B246CBC7EA7532BA5966C46380 + 88B45AEF5659345E9CA8BEDFAA9B052C23619EFCAEF06347893FF13B2D526967 + 646E6AAA29E929DF53553C504318E67C923C35AD1E649D82A178A7E939A574E4 + 8FB6E9684DFEE7F7416822169DBF37788F0FCD53FA9753F10B8EB7F114667B36 + 94649DC6C790DC6DE3B733B07EBE03A4C747F0BF4A69285D58E8993CB08E792A + 26DF18E524E4F4E84E7C3CD6F697473B973630BE662584F0451D73E35F15A37B + EE37796CD6B906D030F66D7376232D68DFAF523F35B2B3704AC34EF64F79B8D5 + DC6A1AECB8BDE40774D8819F7F8FEEB4D73E32DD6B2FF2DA34458DF5D046397B + AC71DC75386BBA7F3DC34741C4ED6FA36E9FFB616991D4B527BAE2DC06E47811 + B788CFE8BA35D54423CCE2DAF38D88F37B169D570B341CE7BD66696918C12EF9 + FDE58370E0CE88ABB74949474D2D0CD21C89237B8004038D893D32A7361AA8EF + 368A6B9D2B98E86A19CEDC3874F2DBC568F5B6BED31A3687D62B6A9B55525CE6 + 36088F310F19EE9C6C0E40C8EA33D16E595E9631CC92C327153716D7621FE8FD + 7FBDE86E2FCFC3C96EAEAEB4CEC7C839CE794B585C08F23B007F5C02BAC6DF73 + 64E061D95C43C379AE7A8F8B32EBAF5134542C6BD8C0EC8E6CB4B401E677C9FD + 360BA7B495CA491CD0492B5E7C39CF4FD56B1DFEDEC53CFF00160B56378705FB + 5856D90BE204ACD5E7A71E5782D0888A20222AE7D21388B0F0E3404F728DCD37 + 2A9CC342C3B9E7C6EEC78E323F321652CB32964D3F1F78DF66E1BD2BADD481B7 + 1D432B7FC3A666E22C8D8BF1E3EEFCFC81A034D68AD4FC48BDC5AC78895B2CF0 + 4CEE78A91CE3D36C6DE031F41B6010567F06345B6E714FAD75A44FAEBA5738C9 + 136A3BD80EDF9B7EA4E7C7E3BE411636A7BCD3E9CD3B557395A0450464B5B9C6 + FE5D0AECE93411E5EAD9D883643F59F14B48F0E2A60D3F0DB449D9B705918C76 + 631F03D739FCFC49389668DD476CD6169FB56D0FFF0000920876C5A479FCC7CD + 50FC29B2C1ABEE978D5FA86963AB8EA5CF8618E468C65C3BC70318C03B7BCE46 + E17ABB466A8D22DB8CFA7B51C5416A7F7899642C2D1D7C075F0DBF521752AA35 + 7D35745662FDBC221CF1CE0B2B8AFC4FB4E8C8BD5291ECAFB9BC10228DD9E43B + FDEC7BFC3AFC36CD7DC1CA3BED4EB93AF3503D9465EC70858FC35D20734B7206 + DB60E73E3F9922B4B44E5973FF009A2864D41797BF9454CAC2E8984EC39187EF + 1DC105DF0E5DB2AD2D09C2FD4777AD7DF35C5C676C5D99708B9F2EDC0C0F1C0D + FA7BB185455745D8A73F89AF65D97D5869BD91D3DA3EF22A434B256BC67196BB + 2158B41273C60AE4EF473BD36A3525F69296679B7D3498A76B8F405C7DE7C3F5 + F3DFA82C956D7C6D195A7C4211B12B20B66661B6C6F5111710B0222200888802 + 22203CEA9E63A695E3AB5848F92E3BE2A442EBC73A864A4E1B545A0786D9FD97 + 61D5B5CFA5958D197398401EFC2E40D73FFBF7ACFF00BE3BF552C6C0B3238DB1 + 46C898006B1A1A005FA5F02FABD951150AE297820C89715AE9F66E919DCD761C + FCFC9529C1CB3BEE778A8BD5412435E7973E6AD1E3D534B2E95ED230795A0E54 + 5FD1FAAE96AED0FA36604D13FBC3C56970D8576EBA6EDF6216E705C5A6295EE9 + 1B80ADDD3503991372144747DB010D25AAC7B7D388E300051E35AB53972A15C4 + CC60EEAD2EB6D4149A6F4FD4DCAAE40C6C6C247C967DE2E54969A092B2B26645 + 146D2E25C70365C6FC77E29556BABD7D83660E3431BF1CCDFC67A67E1FCF879C + 8C73B9394B1B7B91E9EB2AF889C4892BE405D0F6BDD1E00780F92BE68A9A3A3A + 38A962003636E36F350DE146968EC969654CACFF001DE36C8DFE2A6CE7068249 + 000EA4AEC70CA52CDF3ECBB19C6160F2AFA98E8E8E5AA9480C8DB9F895CBBAEA + E151ABB5B3282271730C9BE3CB2ACBE35EB9829681D6FA29413820E0F52A27C1 + 2D3D2CB3C97CAC8CF3CA7B9956E9A12E23AC4FFE288D92E545B3A1ECF1D0D0D3 + D1C4CC06340574690A0E48DA70A13A4ADE5F234F2AB66C54A2289BB782E971AD + 4A8C7A71EC8AEB8FB9B7A6606B02F478C8468C05F578F6F2F26C119D5B65A3BB + DB26A0B852B2A69651DE63874F783E057316BCE074D4B5AFABD3B580B32488A4 + 3CAE1EE07C575F4D187B4E547EF36864ED3DDEAB6E9E959F0D841A6B74719C56 + DE2058A6EC9B1D4803A641231EE5208750EBC8E26B391DB0F18CABDEE9A7A463 + 9C62E66FFAA70B453D8EAC138925FF0078AEA55C2299EEADC7EDFF00A43A925E + C53D72BEEBDA880B5AD783E18610B452E9CD5D781DA57CD246C775E67615EC6C + B59D39E5FF0078AF8CD3D29764B095B10E07A74F33B72BE9FF00A63AB2F05476 + 5E1D5B63631D5A1D512839391B2B334B5AA2A40C8A969DB1B06DDD0A4343A69E + 48CB3E8A5766D3C2320967D16FF5749A2AF9695FBFB90E57279665E97A77B58D + C82A694C30C1F05816EA26C2D030B66D180BC9EAEEEACF26C4560FABF2F6070E + 8BF48B50918351451C80E5A169EBEC71C80F702932F85A0ABEBD44EB7B330D26 + 56F71D32D7670CFA28F57E9C95A0B704B7D92323E455C7253B1DD405873DB627 + FE10BAB4F179A5896E8ADD699425CB4951CBCDDADB299C4F53D9E33F2216964D + 0D6563B3F6596F9F2BF1FA2E84A9B1C4FF00C03E4B5D3E9C8DD9EE05B51D5E8E + CFCF5AFB11E492ECCA29DA2B4B8EB6EAECF8FF008C3F65F83A334A8FFF004EAE + FF00C61FB2BAE5D30C3F83E8B1DDA59B9FB83E4A715C31FF00C3FCBFF63E3F25 + 312E8FD3AD19A7B7D503FE79863FB2FB1693B431E246DA9AE78F17BB23F4572F + F4B37D81F25FB66976FB1F457467C360B6AD18C4DFB95453595B19CC14B145FE + A316C69AC72BC8CB49568C1A65831DC1F25B1A5B046DC7702B7D629A562A8A5F + 45831D36FB95D5B74D3DC4659F452CB469B6B304B3E8A5D4D6B8A3C7742DB46D + E5635A3C000B91AAE33659B22C8D691A6B7DAE3880EE85B68A26B06005E88B8D + 65B29BCB2C4B011115664F8F7358C2F7B835AD19249C00170FF10750DC78DBC6 + 836E8A49069AB54858D8B9800581C3271BF78F8F5F0F01B761711E4745C3CD49 + 23490E65A6A9C08F022272E4CF462860FE9BB856085C2A24A9773C9BEFD31FDC + FCD6E68B4DD6B167B1252E58B4BB96DD34349434105BEDF4F1D3D340C0D6318D + C63F9FCDD4278FF25C62E15D5FD94D7BA5738097906486EFEEF30DFA79A9BAFA + 447244F8668DB244F1CAF6B86411E217A7B6AE7ADC23B15147F036E1A759A520 + A1B54F18B838735635FDD95CFF00D40F0C7C76254F6FDA5A0D51649ED95ACE68 + E5196BB192C70E8E1EFF00DCAD06B1E09586E550EAFD3F5525AEA8EFCAD3DD2E + C0F7E46E3DFD7F25168E2E32E85A80CA3A975E29410035E3B5C81BE002323F2C + 2B21C45D54AAACAF1EDB6E8A9D7BE519757C38E2550583EC9B3EA9653D3B090D + 8DCF706B987AB5DB1DBC7183BFC495FBD1DC2CA6B5C0D9F50BDB7ABA170719A5 + 0E7363181DC1CC4F300EE63920673B8D82DADBB8F8CA69FD4B5AE959EDD20716 + BE5A7CE1BEEE577FF5056B6959AC5AB2DCCB9D8EB22ABA7775E5FBCC3E4E1E07 + F8163457E92BCC94567EFF00FE1294ECE5E4CEC466D96C7E5AC6461AD6EC0018 + 002B1348DB64639A4B4AD95AB4EB0107942A538FD57AC2F9A8868BD395CCB6D0 + B599A97364E52F1CE5A4B8F5236CE3FBAAF5FC515CB9224615E0B535AF1CF87D + A222753D45D05CABDBB0A6A221FBE3C5DF77DC71923C956B3FA4FEADBA569669 + 8D001D086E40A8ED247786F9696F9F928BF0E3845A728266D7DC6A9978AE690E + 7733B201EE9E87AEE0FECAD86434F0B58C8696289AC686B406F40061726BE1AE + CF8A5B7F92F4F0431FE917C4FA681D5759C3FA56D2C7FF0048E6C330207C4BB0 + AD1E18F1DF48EB2D3B5B729E6169A9B7C4E9AB29677E5CD6346EE6F4E6F2C633 + 920788CE963735BB18A32D3D47200B9E78E1C30ABAAD614751A5A99F0415F206 + CCC8F66824FC3001FD0F41B08EAB41D38F325930996DD57A5356CF2D6D458F45 + C95B6DA790B44E5EECE33804E06012AABD73AD2F7C71E2458FD62C335B6D546C + 6B5D0993981209739F93E277F0E800DFC6E2D17A42874B695A6B2454ED908687 + 4E4B73CCF2064FD3E9E6B730410D333922A66443DC0856D5C2F2949EC32208A3 + A7A68A9A26B591C4C0D6B5A0003E4AA8F4A1ADB845A362B75BE09257543B2FE4 + 3E1EF1F123FDDF95B3D4AF57C0EA987926839E21ED0385D3BEAEA54E09E0C1CE + 7C33BE6A28349D352DBF46554B4F4ACC49282EDCF524E198F1FC86161EABBE5D + 78817FB7696A4B6D4D052B27E5A97B9C40712E03BC3C31E5BF8ABDA0AAAEB952 + D65BF4F4115352B5DC9255F2820F9866DB9C11BE7F3DDAE59F63B5515A28994F + 4D4F1B5D8EFBF182E3E24E31FCF21802AEAEA6E874B9FE1EDD88A8453C9E1A6B + 4B69ED3143152DA6DD131E1839E52DCB9C76EA7F21B745A7E3456D75BB8755B5 + 1471BDF2CA3B36F201B673E7EE0E52D2BF4F1DA533D92B43E103243BA2B654A5 + 5B847624730703F5ADCB4B52BAD8DD3353555D5951CEE943F1CDD035B800F424 + FCD75D70EAFD535D047EB9492D1CE581CE8A46905BF3EBF1542F1138ADA7ED05 + D6BD33430D75D5DDC6C8C6F308DD9C7E7FDBA75DC298F046A2FD4F696D56A294 + BABAA1DCE5AEFBCD6E1A003E5D3A2D6A612BAB752F894577C109622F2751222F + CBE4646DE67BB017962E3F48B5D3DE2922760BBEAB18EA4B7838E6FAAB969ED9 + 76883748A35FD5B49CB9C373E5941AB68F7E6E51F9AB3F057FE931924A8A3035 + 851970043467DEB369750534CEDB18F71589692E8EEE264DD2E3BD73FF00BF7A + CFFBE3BF55D7F04F1CCD0E63815C73C44AA8A978ED586538FF009638FF007546 + 31DC16A0E8BEAF8D707343DBF75C3217D5ECE89295716BC1066AB55DADB78B15 + 451B865C5A4B42E69B7D556F0F35D0A8735FEAAE7FF88D1D30BAAFE1D5447596 + 85B5EA263DEF6B5931F31B15CAD5D3651775EB59F26719582C1E176BFD317AA0 + 64D4F71858EC0E66B9D82148B56716347E9BA291F35CE19656B768D87249C2E4 + 9A8E0DDF69EADCEB6D5490C79DB95CB7167E0E5754BDAFB9D5BE423A873B2B9F + 7DB0B9F361E48F2C9763F3C53E2D6A2E2255BED5696490D0176006E72E1EF5BC + E14F0F63A085B5F708F9A43BF786E4FF003F9E730D31A0EC9A7E212BDB19737C + 4EC179EAED7965B2D3B9914AC748D1B01D02A1249FF5365E0CC618DFDCDF55CF + 4F470992691B146D1FCC2AAB88BC49823864A0B61E671DB2D3B950DD47AC6FDA + AAA4C144D93B3271DDCF45B8D29A123672D55CC99A6777837A80B6E11D4EBE4A + AAA3B78F65F5332928F723BA6749D4EA4A9170BA97F645DCC01FC5FCFE7BAEFD + 2B678E9E28A9A08F96360000017E6CB680D6B638A3E568E800561E97B2105AE7 + 37E8BD4534D5C2E86B3993EEFF00E91AEDB9B375A4AD9C8D692D53BA58831802 + C1B55188631B2F6AEB8C148DC170242F25AABA5A8B363622B08CF4515ABD5914 + 0E20B9BEE0B106B667577200A31E1FA892CA88E644D57E1EC0E1D1438EB461C9 + 6F272A7F5AC6EC72729595C3B51FA4CE51269E8637F568585259E271FB8169BF + AD63C632DE64FEB4881C3F932AE8E93571EC8C6C6D7EC58BD90BF4DB3440FDD0 + B4FF00D6918C1772617D3ACE33BB7930A7F87D6781B12086D9133F0859B15331 + 9D00512FEB58CE393953FAD63C632DE6554B45AA9774676266000BEA858D6B18 + 38796E53FAD58305DC9855FA76A3F48CA2688A1675A30E4B79309FD6B1BB1C9C + A53D3B51FA465134450BFEB58F18CB79906B58C1C3CB729E9DA8FD23289A2285 + FF005AB060BB930875A30E4B79309E9DA8FD2328999683E0BE18DA7C1437FAD6 + 37639394A0D6B18D9C5B94F4ED47E91944C0C2D3E017CEC19E414406B560C177 + 260A1D68CDC8E5C2CFA7EA7C0CA25FD833C82760CF20A2275A4648E5E55F3FAD + 63E5D8B7993D3F53E06513011347805FB0C03C14346B58C121C5B95F06B560C1 + 77260A7A76A7C0CA2698450B3AD19B91CB84FEB58C6E4B70563D3B51FA465134 + 45087EB8881382CC2CBA4D5D14E400E6FBC2C4B876A22B2E23392588B0286E70 + 550D9C0159E0AD4945C5E199C1AFD4D6E177D3B72B4993B315B492D397E33CBC + EC2DCE3F35C59A72F573E096A5AFD21AC2DCE36E9657490D4C6DC820F4734F8B + 4E3FF42083DC4EDC286710F49D9353D01A6BD5AE9EBA319E5ED1BDE6FC1C371D + 3C0ADAD1D8E32C6704595258356699BFB79AD776A7909CE185DDE3F91DFE9FAA + DCB007E4C6E6C807B272AB0D65C04B2C75124D60ADADB53C92435A79D83DC06C + 47D54363B2F16B45B8BED95E2ED4CC04F661DCC40CF40D70EBF00BD2C5EA1473 + CBCCBE5FE887323A057DC9F71F7119550687E34C75976FB235750BAD95592D0E + 2D20647810727CFF00992ADE05AE01CD3969E854EABA36F6EE48D6DFF4FD9350 + 537AB5DADF0CCC3E25BB8E9D3CBA0E9854E69B8AA384BC70B75AADF702FB4DD6 + 5644E85CED8073B9707C320EE3F4E82F50325730F1F221ABB8AF4364B2C9CD53 + 90C7B8386C493E39F78F25A7AE50AF1625BE7EE3B977F137D2329AD45D62D0B0 + 32EB767F74D481CD1C44F8B47471F79DBE39507D1FA4356D6DCEB3596BEBDCF4 + F1CCC7CB3B448438823241C741B9DBDD8C29CF0F786B60D156F81CD89B57752C + 065A870CEE46E07BBDFD7AF4CE0413D26F51D532928B4D5BA77B66AB781235B9 + E9FB75F905AD2D372C7A935F4416C45EBE3D57DADC754E83AB70B553CC41A6E7 + 3CCE6B4E798B49208F3DCF53E0ACDE0AF107FAD2D6EA7AB608EE34DDD95BB77B + DF8FE7D703DB42D8E3D37A5A92D11E0CC1A1D50F1F8A43D7F21D3F2CF8AAFB43 + 38E94E3DDCAD1451B04155DF2D1D181C03F037F761742CD1CB4718599EFB35F5 + 2119F33C17FAAF78F1A8AE9A6F4AC35D6A21B3F3F287100E321E3F556191DE23 + DF854CFA505E0368ED7A721C3E6A8943DCDC1C81B81FDDDF2F9E756FFA4D7926 + 416F9AE789F6A8ADD555D3C4197120C382C25C0E0E700646C4755D29A7E5AC97 + 4D5BDF71DEADD10748797072464823DD9C7E4B9E6AA0378E2CD834E8676F4F6B + 8626CCD0720900171F96DF92E937E072B40C06B4058854ABD44E316DA585BF9F + 73116DACB31EE1570DBED7575F507FC38222F3F90C9FA02B9FADDAC3897AB28E + BFECB96165B7B57479CB1AE780065A36CEF9F86F83E4A7DE91B7DFB27411A189 + E04F5CF0C03C71D76FA7CFE5AFE18D9BECBD216EA42D02474625936C65CEDF7F + 7E303F257E9F4CB59A89426DF2C56F8F2C8CE7CAB62233717F5AE9534768AAB2 + 085921E588398E6F3EFB9DDDBF5F9939DC92AFCB256D657D9292AAE14E20A991 + 81CF60CEDF3DD50D2DB5BADB8EB1DBCE5D476901AFC03D5BD41C7F98E33EF0BA + 10B5B181134F7583942D7AABE4BE718C9B8AD9124DB5B9857FBA4564B2D55D66 + 00B69D85D82719C0CE33F4FCD50572E20F1135F50CD058E87D56DF2BCC2F959B + 646D91924E36FA1DF6534F499BE3ADFA3A2B4C0E226AE786E0788D89FEEDFE75 + FD70EECA2D3A56DF4019CAF1107C9B60F33B739F78CE3F25B1A7D37E36F9424D + A8C56F8F764672E55B1AAE1E70FEDFA700AA900ABB9BF792A1C33CA4F5E5CFF7 + EBF056A582925748DC02BD6C76674E5A795585A7F4F88C34967D16F6AB574692 + AE956B0915462E4F2C9F4F511C70F3B89C1240C0F1DFE5D142F525FCB39807E0 + 0F7AD8DEEA9D1D047E2E2D76F8E8398FEC3E4AABD5D5EF0D90825795E17A2575 + B867674DA673839B3CEF9AA64ED0B1B21EBE6B551DEEA24C9121DFDEA155758E + 92AB049EAA47658BB568C6F95EF2CD253A5AD651CDB25993489076F30FC4578D + 4D5CFB9E62B3BB0C8F05E52D217646CB9B1BA19DD11C334D35CE78F04BCECB3E + C9A9646CA1AE90E33E6B4F7D8844082A2F4B54F655E1A4F55D4A74F4EAEB7844 + AB9624933A2F4C5F8BB97BF90573FF00A54D92A2DBAD21D4948C3D855012730F + 07788561E91AB7F24649533D4561B7EB0D292DA2E630D2331498C98DD8EABC17 + 17D22A6CD8EAEA74AE30534543C34D5B4977B3C50D44ED64EC18193F45351B8C + F8798547EAAE14EB1D277174D6C63EA698B8F24B01C83D7AFC9675B2F5AE68E9 + 442E827C8EA0C44AD5D2EBECD32E56B28E6ECCB8B217DC1F22AA5FEA4D6BFF00 + EC4DFF0082562DD2F1AEEB21C46D981E9B3085B72E30DAC460305B15B74B7D03 + 4BAA6AE28F1E1CD92A217DE29DA2803A3A43DB49D36DD57834A6A7BA481F71A9 + 7C6C71FC6EC7D16FAD1A06DB4D875417D4BFCBA051855C435BF922F1F65F722E + 71891FBBEB6D4DA8AACC342D95AC71C000158B41A12EB72ABED6ED3BF9739209 + 56B5B2C5053ED4B4AC8874EE8521B7D8E4908EE15D3D3700AEAF8B533CFC97FB + 2A95ADF621DA6F4C52DB2010D34237EA48DCA995A6C8F908EE7D14A6CFA68EC4 + B14C6D5626440658B72EE254E961D3A5617C88A837BB349A634A3A66978E46F2 + 633CD9DF3FFA29AD05A5B4CD03B871E4B2E829DB4EC21A319C2C95E5355AEB2E + 93CBD8D88C5235B77AA3454C4B43738F3FF82AC352DF6A017BB2CC7FAC7F6539 + D6AF7358403E0A98D5933C736FE2BB7C0F4B1B30D909B663CD75AA9E72799A7F + 32BF4C9AA5F8DC7CD6A6DCEE69467C548228DA1A17A4BECAEA972244229B3E35 + F3E3191F35F43E669EBF5598C8416E72BF4200B53AEBC13C185CD2F5FD50BA57 + 6F9FAACD108CA7623CD3AEBC0C185CF2918CFD539E61B67EAB34C03CD3B0184E + BAF0306107CAD3B1FAA734BD7F559A200821194EBAF03061174AEDF3F54E7948 + C67EAB37B11E68601E69D75E060C2E7986D9FAA07CAD3B1FAACDEC06104013AE + BC0C185CD275C942E91DB92566884653B11E69D75E060C2E794ED929CF28DB25 + 6698079A760309D75E060C2E695A762539A4EB92B34401042329D75E060C2E69 + 481B94E7970464ACDEC02180275D781830B9E507A94E69078959BD80C2080275 + D7818308BA5CE72539A5206E566884653B009D75E060C2E7970464AF39E49797 + 193B2D89802FC3E9C1F15957ACF61823F51533301EF15E5477D961A800C87E6B + 3AF50362889CE541ABA5736AFBB90BABA3E96AB31C114DC5976697BFB9E1879C + AB161BFD0D2DA64AFB955C34B4D0379A49A5786B5A3DE4FBF654068DA8930DC9 + 502E3A576A2D5FC40B7E80A5AC920B606B2491B19C6496E4B8EE3240240F774E + A73E4B8D68210B363B16D2950AC279C4CF49E74D5B25838616C75CAB0BBB315D + 247919CE32C67CB05DFEEAAE68743F11F58D4CB7ED61A86A9B3C8DE66C45F976 + 3621BEE1B9DBC3C958FA0342D9745D188A8A9D8FAA2D02599C325C7C7EBFD87C + 54A83DC1E1D9DC745469B8772ACC9E3E9FECE636555E8EFAAAE149A86E5C3CD4 + F525D2C25CEA2ED483820F79A0FBF73D71907C49CDD53D9A29892D68551716F8 + 6B26A4AD8B5269EAB3437BA7C1E60E239F036DFC0EC3FE18C98E4F171EABA923 + B4CF79F5780F71D346E635F8E992E6F78FD5590B6DA33179CFF241C326A3D28A + 6B1BEF76BB1DB190D4DEE29F334B16EE8803F7091D4F5241E9F995766908AA21 + D2D6DA7A96E268E06B5E3DE1A07E8A0BC32E0F52E9BB89BCDF2A85757750F7F4 + 69F31E24F4F0DBE4462715F8BB4B6893EC6D2405C2E0FCC6E73073358771B79F + F6F8E76CAB5C66EEB7BBD92F7249616092F14F88162D29A62A8FAE325BA3D85B + 0C2C20B9A48EA7DDBFE7F322A9F45DA16DFB515CF555CA57C9581C793989277E + 6DF39F77D578E91E1CD656D44BA875817D4D64B99194AF25D82771CC0FF6F9F8 + 852AF45FACA436AB95B62A5647341377A4C6E46361D3FCA7E696E96EEAD765FB + 279C230A69E522E7712E2493925511E90623B5F1334EDEEA6077A9325617C9CB + 91B3C93F423E6AF65A4D77A62D9ABF4ECB6BB8C40BF1FE0C807798EF31FB78FC + 88DABE12714E3DD3CFD8C9ADA3B850416C92EF53551368638BB574DCC0B4B7C3 + 1E79F0F3CAAC78181DAAB8977AD5B514E4C2E91C627737DCC9D80DF718C8FE05 + 8D4BC13D5F255B2C153A865164E7E72D123B946F8E980338FF00D5581357693E + 0F69436CF590F9F9399918765D23B0067C71BFF6F12306AD5EB25A9946538F2C + 63BBCF923087293ABFDDADFA76CD3DE2ED3B608626E5B93BB8F801E676FEFE00 + 91CE9A5CD56B4D6D5BAEEF43928288974208D8F28C8C7C00CFCB3D57E68E2D5B + C58B8B6B6FB2CB496185E4B1A0603867EEB4789E9BEF8C0CE7002967131F4FA6 + B86F3D2504429D9206D2C0D66D8E6EBF300E4FBD6D6969767FF55AB108EE979F + 9919CBFE28F1F46EA465DF53DF754D4806574843011E649C8F963F3F9DE4D05C + F03C49509E08D81B61E1DD1348C4D523B67EFED60FF6E5FE6C26B33D94B4B2D5 + D43C450C6C739CF71C01804E56BE9B2ABE79777B9614371ADCDD47C5CB3E9F61 + 73A18087CCCCED8FBC48DFD9C7C9587515715A6CB5B7497943296074801E8481 + B0FCCE02ABF45BE3BF717EFB7A8A6754D3401CC82539F17728EBFE552EE344CE + A4E18D4B1A79455D4454E4FB892EFF00FCADED0CBA5A29DDEF26DFD8A67BCF07 + 87A30DB79E82EBA9E73CF3D5CC435C739C753F3CB7E47F3B81B82E1CC7033B95 + 17E1559E9ECBA02D705396BBB585B239C0632480EFD71F9293F83879B48FA2D2 + D2C5C6A4DF77B971CF9C4A7FF55F1BA86D61EC9A928F0F900DC600E620FBF721 + 5BF62A6ED6668C78AA775C691D53A47585C359D04D18A495C79B9803DD73C777 + 71D771D3E6AE8E18560BBDAA86E2E8C46678C3CB41CE0ADAE1B74614D91ED2CE + 5FFD14D89B922D4D276C688DA4B54DA9699B1B4602D469C8DAD81B81E0A40DE8 + BC9EBAF94EC792F8AC221BAA98E8E9E28F3D187FFE4E5566A481D2B5E15C3AB6 + 2E795A31FF0057FA955E5E285DCE7BAAFE15C415373523D5F0C8C254F2BF729D + ABA27B2AB2478A915925308046D85BAAFB336577306E0AC68AD32B3380BDE59A + DA3575AE67D8E4EAB845B09B70DD1B3F58763AAF09AADEDCF79650A094F50BCE + 6B648ECE173A2E8CEECD6F4EBFC11BBC48E9812772568E8EDEF92AB3CA7AA9AB + ECCE760159545686C4721992B7A3C468D2D6D459BDA4E0D394D4ACEC7EF4ED31 + 8831BE4AC7B1B4FAB869F1518B4503B981E5535B4405A00C2F03C5B882D45988 + 9D6D728461CABD8FCDCAD8E969439990483B8D943AE941726121953301F156BC + 5007533410B0EA6D91C9D5A15BA3E23D2494964F1F641393C14DCB4D7704FF00 + CA66F9AC492D55B2B8BA4925713D72E2AE27D8E227EE05F8FB062F607C975E3C + 6E11EC914BA8A861D3D213F70FC96D6874CBC91962B3E3B2443F005990DB2267 + E10ABB78F49AD8CAA882DBB4C018CB3E8A496FB1471E3B8148A3A6637C02F66B + 00F05C8BF895967B96282460D35047181DD0B3591B5A3A2FDA2E7CA6E5DC99F0 + 1EF91EE1FAAFABE01DF27DC3F55F5458343AAE93B680BC0CECAA0D536C710F3C + AAF9A889B2C658E19054375058F98B8866415DBE15C43F0EF0CB2B8466F0CA3E + 081D149823185B48253800A935C74EF2C85CD6AD7BACAE1D3AAF512D6E9EEF89 + 97AE1D37F94C46CE718CAFA673E6B2FECC201CE72BE0B6BBF12ABAB47925E997 + F8317B738EA9DB9F3595F66BB3EE436D767BA764EAD1E47A5DFE0C5139F34EDC + E7AACA36D38D8EEBEFD9A7072774EAD1E47A5DFE0C4339F34EDCE3AACA6DB5DF + 893ECD767DC9D5A3C8F4BBFC18BDB9F34139F35946DAECF74EC86DA71B1DD3AB + 4791E977F8317B739EA8673E6B2FECD38393BAF8DB6BBF127568F23D2EFF0006 + 2F6E71D53B73E6B2BECD767DC86DAECF74EC9D5A3C8F4BBFC18A273E69DB9CF5 + 5946DA71B1DD7DFB34E0E4EE9D5A3C8F4BBFC188673E69DB9F3594DB6BBF127D + 9AECFB93AB4791E977F8317B73E69DB9F35946DAEDB09F66BB1D774EAD1E47A5 + DFE0C5EDCE7AA76E7CD658B69F15F05B5DE29D5A3C8F4BBFC18BDB9F34EDCF9A + CAFB35D9F721B6BB6C27568F23D2EFF062F6E7CD794D3B87E22B3FECD763AEEB + E3ED65C005956E9FC8F4BBC8DDC66748C20925479F42F9AA73CB953B92CDD73B + AF4A6B3318E079375B95F12D3E9E2DC4DAD3F059CA49CD981A7284C0C6E46E55 + 67C74A6BEE92D776ED7D4103A6A2735B1CC43721843705A7E237F0F1C7457B5B + 6DCEE71DD5BEA9B2D25C6D72DBEBA963A9A699BCB24523721C3F9F25E4788F15 + 8DF6E11D5E214D7D055C7D8ACB476B7D3DAAE863A9A1B844D9DFF7A17B807E7C + 76C9FE7E78DE3AAA91B27666AE1E6CE3193FB2826ADF47FD3ECAB92AEC9595D6 + C73893CAD3CEC1EE0363F32543AAB837511C849D4F5C4F9F623FFA974F4DF89B + 629C527FBE0F2136A2F0CB86BAFB64B7547635B75A6A77E39807481B91F990A1 + 3A9F8DBA56D4D7C3452CD72A81F75ACCE339E993D3E47F68847C1EA19250FB8D + D6E35447B2433F7525B070FB4FDA0B5D496988CA3FEB251CEEF8EFB03F05B6B4 + 3ABB3F349457DD95BB57B1019EE7C4CE244BCAC2EB3DA1FD5C72C691B7E6EDDB + EFC1F2537D13A0ACBA65A258233577077DFAB9477BFD91E1FDFDEA6D4B6B99E4 + 0E52A4569D3B23DC0B987E4B62AD3E9747F1B7CD2F2CADCA5223F6FB5C93B877 + 4AA66D927FA29E34D6535C98E86D55C4BA393079435DBB4E7C7C01EBE3E2BAEE + CBA79AC00967D16B78A3C30D3DADEC4286F14C79E3C98678F0248CFB8F97B972 + 3887118EA24A29F67B16423CA435B79B449036A62B8C0E85FBB5C1D907F31B2F + 49AE76AA6A61555572A78603F8DCFC0F99C05535EFD1DCD092CA7D5D5C2207BA + DF57E9FF009D6A19C1A0D708ABB5157D5400EEC0CE4CFE792B62A86AAD8E6315 + F732E7146DF891C68A4A7CDAB46C6EAFAD7F74C81A4B4123C3DF93F4F1517D23 + C3DB8DF6E2DD41AF6796A25243A3A5738E7DDCC7C063031D7E1853FD2FA1ECD6 + 103ECEB7B5B2F4333FBCF3F9F87E58531B75A2595C32D2B769E1B083EAEA65CC + FC7B22B958DEC8C1A2A20591C1044D8E2600D6318DC35A07800A09C78B1CB555 + 7A6285CFECE196A1C5E4F41DE6004FCD5FBA7F4E9CB4B99F45BBD47A06C9A8ED + 4DA3BBD2F3B5A72D730E1CDF815A7C4F894250752ECCCC20D3C9426A2E2BE93D + 216EA7B7D1BCD7CF0C6D6B2288E71B37033BF81F7F4DD57D72BB711F89B1F2BF + 367B2C9D41CB03C6DF9BB71EFC1F257AD6706744D96B8D6D35A4D44CD1B7AC3B + B400F9E3183F9AF296D323E5C066DE030A1A2D34350B9AE97C3E16C4A736BB10 + 8D01A4A874D5B9B4342D2E738E6595C3BD23BF6F72F1F490A5745C268A4C118B + 94393FEC48AD8B269E7B9CD258A497ED056CD51A5E7B25DA12E825196B87563B + 070E1F32B67896B6A8D5D286CB182108BCE5957F0E6BE899A0AD92CB5F0F2B29 + DBCC79BEE80D19F960FC969F5C71774B69B67654B38B8D5F8321208F0F1E9E27 + CFA2F0BC7A35D35BE27320D5D5DD9784629B007FE758166E13E9CB0CBDA0A575 + 7D40FF00ADA9EF6FEE6F4F9E569E96BBF511518B49792D94D22095376E217139 + ED8A661B6D90B813CD96B5C36FCDDBB7DF83E4AF4E1E5232D141496F85CE7470 + 303039DD4AC7A2B548E2006607C14C34E59240F692D2BA6F4FA7D1D52C3CC9F7 + 6CA79A52658DA6652E85AA4ACFBAB4561A430C4D042DEB0602F0FAB69D8F06CC + 7B1ADBC41DABC1C7E1C28DD75B79F396A99CAC0F58D252B5DE0B4250CBC9D2D3 + 6ADD4B057F359B27207D178FD8BEE3F253F750B0F805F9F506FB2A71B6F8F693 + 3A2B8A79219F63FF0094A7D8FF00E52A67EAAFF61BF25F5B48EC8CB5B8F828F3 + DBFA998F51642BEC51EC2F586CCD073CAA69EA4DF657E9B46D1E08DD8FBC9907 + C5191DA2B6F2E3BAB79474DC98D965B29C0F05EEC600B11860D1BF56EC3EC630 + C017E9115A681F303C9303C97D440303C91110044440111100444400AF19A30F + 6E08057B214329E0D255DBE2767FC31BAD4545A599DA3014B9CC07C1793A069F + 0FA28BE6F666ED5AB70214FB38CFDC5F8366FF00229A9A569FC3F45F3D51BECF + D14313F26DAE26C85FD8C3D84FB187B0A69EA8DF67E89EA8DF67E89CB2F267D5 + 2442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59F91EA72217F630F613E + C61EC29A7AA37D9FA27AA37D9FA272CFC8F54910BFB187B09F630F614D3D51BE + CFD13D51BECFD13967E47A9C885FD8C3D84FB187B0A69EA8DF67E89EA8DF67E8 + 9CB3F23D52442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59791EA92217 + F630F613EC61EC29A7AA37D9FA27AA37D9FA272CFC8F53910BFB187B09F637F9 + 14D3D51BECFD13D51BECFD13967E47A9C885FD8C3D84FB187B0A69EA8DF67E89 + EA8DF67E89CB3F23D4E442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59F + 91EA92217F630F613EC61EC29A7AA37D9FA27AA37D9FA272CFC8F53910BFB187 + B09F637F914D3D51BECFD17DF541ECA72CFC8F54910AFB187B0BF4CB3341FB8A + 67EA83D94148D1F8563965E43E2922374B6CE523BAB6B4F44037185B36D381E0 + BD5B181E0B31860D4BB592B0D05C2D2C9987BA146EBB4C35EE2431588580F55F + 974119EA174E8D7594AC2673E4B98ABCE9419FB9F45ED0695008CB3E8AC8F558 + 7C97D14F10E816D3E316B5DC874D10CA1D371B08258B7D45698A203BA16DC46D + 1D02FD0002D3B75B659DD925148F18606B06C12A220F69185EE8B5799E724889 + DE6CAD9F3DD519A8D2C0BC9E4FA2B3DD1B5DD42FC1A688F50BA34713B2A584C8 + 38265694FA54070CB3E8B7B6DD3D1C6465814B853443A05FB6C6D1D02CDBC52D + B163214123068A82389A30D0B31D10E5C617A81845CE959293CB27834373B636 + 7CE5B95AB8F4F47CF9E41F25312D057CECDAB661ACB20B099171469A86D31C40 + 7742D9B606B5B8017B8002FAA89DD29BCB32960D05E2DC276918CA8AD4E990F9 + 09E4FA2B1DCC6BBA85F834F1792DBA35F652B088B82641A834D318412C0A4741 + 6A8E103BA16DDB0B1BD02FD800285DAEB2DEECCA8A479C31060C00BD51169B79 + 24130111601F303C97DC0F24440303C826079044401111004444011110044440 + 1111004444011110044440111100444401111004444011110044440111100444 + 4011110044440111100444401111004444011110044440111100444401111004 + 444011110044440111100444401111004444011110044440111101FFD9} + Stretch = True + end + object Image2: TImage + Left = 64 + Top = 64 + Width = 32 + Height = 32 + AutoSize = True + Picture.Data = { + 055449636F6E0000010004001010100000000000280100004600000010100000 + 00000000680500006E0100002020100000000000E8020000D606000020200000 + 00000000A8080000BE0900002800000010000000200000000100040000000000 + C000000000000000000000001000000000000000000000000000800000800000 + 00808000800000008000800080800000C0C0C000808080000000FF0000FF0000 + 00FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000000000000000 + 011111000000000009BB11000000000019B1B110001110001919B110091BB110 + 99BBB110011B9B1009911100091B9B1000119000099BB1100000000009911990 + 00000A00009009000AA00A000000000000000000000000000000000000000A00 + A0000000000AA000000000000000000000000000FFC7FFFFFF83FFFFFF01FFFF + FF01FFFFC301FFFF8101FFFF0001FFFF0083FFFF00FFFFFF81C3FFFF8189FFFF + FF9FFFFFFA7FFFFFF06FFFFFE3C7FFFFFFF3FFFF280000001000000020000000 + 0100080000000000400100000000000000000000000100000000000000A8FF00 + 00FF00000000FF000000B00000004F0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000FFFFFF00FEFEFEFE + FEFEFEFEFEFE050505FEFEFEFEFEFEFEFEFEFEFEFE0404040404FEFEFEFEFEFE + FEFEFEFE05020000000405FEFEFEFEFEFEFEFEFE04020004000404FEFEFE0303 + 0305FEFE04020402000404FEFE020300000303FE02020000000404FE05030300 + 0200030505020202040405FE0502030002000305FE0504040205FEFE05020200 + 00030305FEFEFEFEFEFEFEFEFE020202030202FEFEFE05050501FEFEFE050205 + 050205FEFE010105FE0105FEFEFEFEFEFEFEFEFEFE0505FEFEFEFEFEFEFEFEFE + FE05FE0505FEFEFEFEFEFEFEFEFEFEFE0501050501FEFE05FEFEFEFEFEFEFE01 + 0105FEFEFEFE050505FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0505FEFEFFC7FFFF + FF83FFFFFF01FFFFFF01FFFFC301FFFF8101FFFF0001FFFF0083FFFF00FFFFFF + 81C3FFFF8189FFFFFF9FFFFFFA7FFFFFF06FFFFFE3C7FFFFFFF3FFFF28000000 + 2000000040000000010004000000000080020000000000000000000010000000 + 0000000000000000000080000080000000808000800000008000800080800000 + C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000 + FFFFFF0000000000000000000000000000000000000000000000000000000111 + 11000000000000000000000000011111111100000000000000000000001191BB + 11111000000000000000000000991B11B111100000000000000000000919B911 + 1B11110000000000000000000199B1911B111100000000000000000009919B91 + 9B1111000000011111100000019991991B111100000011BBBB11100009919191 + 9B111100000991B11BB11100099999199B911100000119B111B1110000999BBB + BB911000009191B9191B11100099B9999B911000009999B9119B111000099911 + 99190000001991B9191B11100000010119000000009999B991BB919000000000 + 00000000009999B19BB11110000000000000000000999BBBB911911000000000 + 00000000000999B9919999000000000000AA000000099999099111000000AAA0 + 00AAA0000000999090199000000AAAA0000AA000000000000000000000AAAA00 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000A0000000000000000000000000000000AA000000 + 000000000000000000AA00000A0000000000000000000000AAAA000000000000 + 000000000000000AAAA000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FFFFF83FFFFFE00FFFFFC007FFFF8003FFFF8003FFFF0001FFFF0001 + FC1F0001F0070001E0030001C0010001C0018003800080038000C0078000E00F + 8000F83F8000FF7F8000FE0FC001F007C001E003E003C0C3F14781E3FF7FC1FF + FF9F7DFFFFC63DFFFFC21DFFFF001EFFFE07063FFC0FF01FFE1FFE0FFFFFFF0F + FFFFFF8F28000000200000004000000001000800000000008004000000000000 + 0000000000010000000000000000000000008000008000000080800080000000 + 8000800080800000C0C0C000C0DCC000F0CAA600D4F0FF00B1E2FF008ED4FF00 + 6BC6FF0048B8FF0025AAFF0000AAFF000092DC00007AB90000629600004A7300 + 00325000D4E3FF00B1C7FF008EABFF006B8FFF004873FF002557FF000055FF00 + 0049DC00003DB900003196000025730000195000D4D4FF00B1B1FF008E8EFF00 + 6B6BFF004848FF002525FF000000FF000000DC000000B9000000960000007300 + 00005000E3D4FF00C7B1FF00AB8EFF008F6BFF007348FF005725FF005500FF00 + 4900DC003D00B900310096002500730019005000F0D4FF00E2B1FF00D48EFF00 + C66BFF00B848FF00AA25FF00AA00FF009200DC007A00B900620096004A007300 + 32005000FFD4FF00FFB1FF00FF8EFF00FF6BFF00FF48FF00FF25FF00FF00FF00 + DC00DC00B900B900960096007300730050005000FFD4F000FFB1E200FF8ED400 + FF6BC600FF48B800FF25AA00FF00AA00DC009200B9007A009600620073004A00 + 50003200FFD4E300FFB1C700FF8EAB00FF6B8F00FF487300FF255700FF005500 + DC004900B9003D00960031007300250050001900FFD4D400FFB1B100FF8E8E00 + FF6B6B00FF484800FF252500FF000000DC000000B90000009600000073000000 + 50000000FFE3D400FFC7B100FFAB8E00FF8F6B00FF734800FF572500FF550000 + DC490000B93D0000963100007325000050190000FFF0D400FFE2B100FFD48E00 + FFC66B00FFB84800FFAA2500FFAA0000DC920000B97A000096620000734A0000 + 50320000FFFFD400FFFFB100FFFF8E00FFFF6B00FFFF4800FFFF2500FFFF0000 + DCDC0000B9B90000969600007373000050500000F0FFD400E2FFB100D4FF8E00 + C6FF6B00B8FF4800AAFF2500AAFF000092DC00007AB90000629600004A730000 + 32500000E3FFD400C7FFB100ABFF8E008FFF6B0073FF480057FF250055FF0000 + 49DC00003DB90000319600002573000019500000D4FFD400B1FFB1008EFF8E00 + 6BFF6B0048FF480025FF250000FF000000DC000000B900000096000000730000 + 00500000D4FFE300B1FFC7008EFFAB006BFF8F0048FF730025FF570000FF5500 + 00DC490000B93D00009631000073250000501900D4FFF000B1FFE2008EFFD400 + 6BFFC60048FFB80025FFAA0000FFAA0000DC920000B97A000096620000734A00 + 00503200D4FFFF00B1FFFF008EFFFF006BFFFF0048FFFF0025FFFF0000FFFF00 + 00DCDC0000B9B900009696000073730000505000F2F2F200E6E6E600DADADA00 + CECECE00C2C2C200B6B6B600AAAAAA009E9E9E0092929200868686007A7A7A00 + 6E6E6E0062626200565656004A4A4A003E3E3E0032323200262626001A1A1A00 + 0E0E0E00F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000 + FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 002A2D2A2D2A000000000000000000000000000000000000000000000000002D + 2A2D2A2D2A2D2A2D000000000000000000000000000000000000000000002D2A + 282ADADA2D2A2D2A2D0000000000000000000000000000000000000000002828 + 2ADA2A2DDA2D2A2D2A0000000000000000000000000000000000000000282D28 + DA282D2D2DDA2D2A2D2A000000000000000000000000000000000000002D2828 + DA2D282D2ADA2A2D2A2D0000000000000000000000000000000000000028282A + 28DA282A28DA2D2A2D2A000000000000002A2D2A2D2A2D0000000000002D2828 + 282D28282ADA2A2D2A2D0000000000002A2DDADADADA2A2D2A0000000028282A + 282A282A28DA2D2A2D2A000000000028282ADA2A2DDADA2A2D2A000000282828 + 28282A2828DA282D2A2D00000000002D2A28DA2D2A2DDA2D2A2D000000002828 + 28DADADADADA282A2D0000000000282A282ADA282D282DDA2D2A2D0000002828 + DA28282828DA282D2A000000000028282828DA282A2D28DA2A2D2A0000000028 + 28282D2D28282D280000000000002D28282ADA282D282DDA2D2A2D0000000000 + 002D002D2A28000000000000000028282828DA28282DDADA282D280000000000 + 000000000000000000000000000028282828DA2A28DADA2A2D2A2D0000000000 + 0000000000000000000000000000282828DADADADA282A2D282D2A0000000000 + 000000000000000000000000000000282828DA28282A28282828000000000000 + 000000000000B8B80000000000000028282828280028282D2A2D000000000000 + B8B8B8000000B8B8B8000000000000002828280028002D2828000000000000B8 + B8B8B800000000B8B8000000000000000000000000000000000000000000B8B8 + B8B8000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000B8000000 + 00000000000000000000000000000000000000000000000000000000B8B80000 + 00000000000000000000000000000000000000000000B8B80000000000B80000 + 0000000000000000000000000000000000000000B8B8B8B80000000000000000 + 00000000000000000000000000000000000000B8B8B8B8000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FFFFF83FFFFFE00FFFFFC007FFFF8003FFFF8003 + FFFF0001FFFF0001FC1F0001F0070001E0030001C0010001C001800380008003 + 8000C0078000E00F8000F83F8000FF7F8000FE0FC001F007C001E003E003C0C3 + F14781E3FF7FC1FFFF9F7DFFFFC63DFFFFC21DFFFF001EFFFE07063FFC0FF01F + FE1FFE0FFFFFFF0FFFFFFF8F} + end + object Label1: TLabel + Left = 99 + Top = 70 + Width = 211 + Height = 33 + Caption = 'Informática D.J.' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + end + object Label2: TLabel + Left = 67 + Top = 98 + Width = 228 + Height = 27 + Caption = 'w w w . i n f d j . c o m' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + Transparent = True + end + object Timer1: TTimer + Interval = 5000 + OnTimer = Timer1Timer + Left = 320 + Top = 16 + end +end diff --git a/cap_control/ListInit.h b/cap_control/ListInit.h new file mode 100644 index 0000000..3e20eb3 --- /dev/null +++ b/cap_control/ListInit.h @@ -0,0 +1,32 @@ +//--------------------------------------------------------------------------- + +#ifndef ListInitH +#define ListInitH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TAcercaDe : public TForm +{ +__published: // IDE-managed Components + TImage *Image1; + TImage *Image2; + TLabel *Label1; + TLabel *Label2; + TTimer *Timer1; + void __fastcall Timer1Timer(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TAcercaDe(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TAcercaDe *AcercaDe; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_control/ProjectGroup1.bpg b/cap_control/ProjectGroup1.bpg new file mode 100644 index 0000000..52a67d3 --- /dev/null +++ b/cap_control/ProjectGroup1.bpg @@ -0,0 +1,25 @@ +#------------------------------------------------------------------------------ +VERSION = BWS.01 +#------------------------------------------------------------------------------ +!ifndef ROOT +ROOT = $(MAKEDIR)\.. +!endif +#------------------------------------------------------------------------------ +MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** +DCC = $(ROOT)\bin\dcc32.exe $** +BRCC = $(ROOT)\bin\brcc32.exe $** +#------------------------------------------------------------------------------ +PROJECTS = cap.exe LM2000_vcl.bpl +#------------------------------------------------------------------------------ +default: $(PROJECTS) +#------------------------------------------------------------------------------ + +cap.exe: cap.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + +LM2000_vcl.bpl: ..\LM2000_vcl\LM2000_vcl.bpk + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + + diff --git a/cap_control/TPropiedades.cpp b/cap_control/TPropiedades.cpp new file mode 100644 index 0000000..1eab30f --- /dev/null +++ b/cap_control/TPropiedades.cpp @@ -0,0 +1,403 @@ +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#pragma hdrstop + +#include "TPropiedades.h" +#include "LEGO_COMM.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "DigitNum" +#pragma link "LM2000" +#pragma resource "*.dfm" +TPropiedades *Propiedades; +//--------------------------------------------------------------------------- +__fastcall TPropiedades::TPropiedades(TComponent* Owner) + : TForm(Owner) +{ + // Recuperar configuracion + // Recuperamos la configuración + TIniFile *ini; + ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\CAP.INI" ); + // General + ComboBox1->ItemIndex = ini->ReadInteger( "CAP_c", "PuertoLego", 0 ); + DireccionesE->Text = ini->ReadString( "CAP_c", "IDsLegoE", "1;" ); + DireccionesS->Text = ini->ReadString( "CAP_c", "IDsLegoS", "2;" ); + Historial->Checked = ini->ReadBool( "CAP_c", "historial", true ); + + + Capacidad->Text = ini->ReadInteger( "parking", "Capacidad", 1000 ); + MsgCapacidad->Text = ini->ReadString( "parking", "MsgParking_lleno", "El parking esta lleno" ); + ComboBox2->ItemIndex = ini->ReadInteger( "parking", "DiasDeCortesia", 0 ); + + DB_host->Text = ini->ReadString( "db", "host", "." ); + DB_login->Text = ini->ReadString( "db", "login", "NO_ES_SQL" ); + DB_pwd->Text = ini->ReadString( "db", "pwd", "NO_ES_SQL" ); + + /* Sobrecarga de franjas horarias */ + CheckBox1->Checked = ini->ReadBool( "horas", "sobrecargar", false ); + + verL->Checked = ini->ReadBool( "horas", "verL", false ); + desdeL->Text = ini->ReadString( "horas", "desdeL", "00:00" ); + hastaL->Text = ini->ReadString( "horas", "hastaL", "00:00" ); + + verM->Checked = ini->ReadBool( "horas", "verM", false ); + desdeM->Text = ini->ReadString( "horas", "desdeM", "00:00" ); + hastaM->Text = ini->ReadString( "horas", "hastaM", "00:00" ); + + verX->Checked = ini->ReadBool( "horas", "verX", false ); + desdeX->Text = ini->ReadString( "horas", "desdeX", "00:00" ); + hastaX->Text = ini->ReadString( "horas", "hastaX", "00:00" ); + + verJ->Checked = ini->ReadBool( "horas", "verJ", false ); + desdeJ->Text = ini->ReadString( "horas", "desdeJ", "00:00" ); + hastaJ->Text = ini->ReadString( "horas", "hastaJ", "00:00" ); + + verV->Checked = ini->ReadBool( "horas", "verV", false ); + desdeV->Text = ini->ReadString( "horas", "desdeV", "00:00" ); + hastaV->Text = ini->ReadString( "horas", "hastaV", "00:00" ); + + verS->Checked = ini->ReadBool( "horas", "verS", false ); + desdeS->Text = ini->ReadString( "horas", "desdeS", "00:00" ); + hastaS->Text = ini->ReadString( "horas", "hastaS", "00:00" ); + + verD->Checked = ini->ReadBool( "horas", "verD", false ); + desdeD->Text = ini->ReadString( "horas", "desdeD", "00:00" ); + hastaD->Text = ini->ReadString( "horas", "hastaD", "00:00" ); + + delete ini; + + StartEventRecorder("Historial.log"); + + // Hacer efectivos los cambios + bAplicarClick(0); + LEGO_COMM = new CheckLEGOs(true); + LEGO_COMM -> SetPuerto( ComboBox1->Items->Strings[ComboBox1->ItemIndex] ); + LEGO_COMM -> SetDB( DB_host->Text, DB_login->Text, DB_pwd->Text ); + LEGO_COMM -> SetDiasCortesia( ComboBox2->ItemIndex ); + LEGO_COMM -> SetLegoID( nLEGOSe, IDe, nLEGOSs, IDs ); + try { + LEGO_COMM -> maxDENTRO = Capacidad->Text.ToInt(); + }catch(...){ + LEGO_COMM -> maxDENTRO = 2000; + } + LEGO_COMM -> Resume(); +} +//--------------------------------------------------------------------------- +void __fastcall TPropiedades::StartEventRecorder(AnsiString opLOG) +{ + try { + // Cargamos todos los eventos anteriores + mHistorial->Lines->LoadFromFile( opLOG ); + // Si hay demasiados registros + if ( mHistorial->Lines->Count > 700 ) + { + for ( int i=0; i<100; i++ ) // Eliminamos las 100 últimas entradas + mHistorial->Lines->Delete( 3 ); + } + } catch(...) { + mHistorial->Lines->Clear(); // En caso de error, las eliminamos todas + } + //Fecha y hora del inicio de sesión + mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + " :: Inicio de la sesión" ); +} +//--------------------------------------------------------------------------- +void __fastcall TPropiedades::BorrarHistorialClick(TObject *Sender) +{ + mHistorial -> Lines -> Clear(); +} +//--------------------------------------------------------------------------- + +void __fastcall TPropiedades::FormDestroy(TObject *Sender) +{ + if ( Historial -> Checked ) + { + mHistorial -> Lines -> Insert( 0, TDateTime::CurrentDateTime().DateTimeString() + " :: Fin de sesión "); + mHistorial -> Lines -> SaveToFile( "Historial.log" ); + } +/* + // Desactivamos el HILO de ejecución y esperamos hasta que acabe + LEGO_COMM->Terminate(); + LEGO_COMM->WaitFor(); +*/ + delete IDe; + delete IDs; +} +//--------------------------------------------------------------------------- + +void __fastcall TPropiedades::mHistorialChange(TObject *Sender) +{ +/* + try { + if ( Historial -> Checked ) + mHistorial -> Lines -> SaveToFile("Historial.log"); + } catch(...) { + // do nothing + } +*/ +} +//--------------------------------------------------------------------------- +void __fastcall TPropiedades::ActivarAplicar(TObject *Sender) +{ + if ( ! bDesBlock->Visible ) + { + bAplicar->Enabled = true; + } +} +//--------------------------------------------------------------------------- + + + +void __fastcall TPropiedades::bDesBlockClick(TObject *Sender) +{ + ComboBox2->Enabled = true; + ComboBox1->Enabled = true; + DireccionesE->Enabled = true; + DireccionesS->Enabled = true; + Capacidad->Enabled = true; + MsgCapacidad->Enabled = true; + DB_host->Enabled = true; + DB_login->Enabled = true; + DB_pwd->Enabled = true; + + bDesBlock->Visible = false; + +} +//--------------------------------------------------------------------------- + +void __fastcall TPropiedades::bAplicarClick(TObject *Sender) +{ + if ( Sender ) + { + // Guardamos los cambios... + TIniFile *ini; + ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\CAP.INI" ); + // General + ini->WriteInteger( "CAP_c", "PuertoLego", ComboBox1->ItemIndex ); + ini->WriteString( "CAP_c", "IDsLegoE", DireccionesE->Text ); + ini->WriteString( "CAP_c", "IDsLegoS", DireccionesS->Text ); + ini->WriteBool( "CAP_c", "historial", Historial->Checked ); + + + try { + ini->WriteInteger( "parking", "Capacidad", Capacidad->Text.ToInt() ); + } catch(...) { + ini->WriteInteger( "parking", "Capacidad", 1000 ); + } + ini->WriteString( "parking", "MsgParking_lleno", MsgCapacidad->Text ); + ini->ReadInteger( "parking", "DiasDeCortesia", ComboBox2->ItemIndex ); + + ini->WriteString( "db", "host", DB_host->Text ); + ini->WriteString( "db", "login", DB_login->Text ); + ini->WriteString( "db", "pwd", DB_pwd->Text ); + + /* Sobrecarga de franjas horarias */ + ini->WriteBool( "horas", "sobrecargar", CheckBox1->Checked ); + + ini->WriteBool( "horas", "verL", verL->Checked ); + ini->WriteString( "horas", "desdeL", desdeL->Text ); + ini->WriteString( "horas", "hastaL", hastaL->Text ); + + ini->WriteBool( "horas", "verM", verM->Checked ); + ini->WriteString( "horas", "desdeM", desdeX->Text ); + ini->WriteString( "horas", "hastaM", hastaX->Text ); + + ini->WriteBool( "horas", "verX", verX->Checked ); + ini->WriteString( "horas", "desdeX", desdeX->Text ); + ini->WriteString( "horas", "hastaX", hastaX->Text ); + + ini->WriteBool( "horas", "verJ", verJ->Checked ); + ini->WriteString( "horas", "desdeJ", desdeJ->Text ); + ini->WriteString( "horas", "hastaJ", hastaJ->Text ); + + ini->WriteBool( "horas", "verV", verV->Checked ); + ini->WriteString( "horas", "desdeV", desdeV->Text ); + ini->WriteString( "horas", "hastaV", hastaV->Text ); + + ini->WriteBool( "horas", "verS", verS->Checked ); + ini->WriteString( "horas", "desdeS", desdeS->Text ); + ini->WriteString( "horas", "hastaS", hastaS->Text ); + + ini->WriteBool( "horas", "verD", verD->Checked ); + ini->WriteString( "horas", "desdeD", desdeD->Text ); + ini->WriteString( "horas", "hastaD", hastaD->Text ); + + + + + + + if ( LEGO_COMM ) + { + LEGO_COMM -> SetPuerto( ComboBox1->Items->Strings[ComboBox1->ItemIndex] ); + LEGO_COMM -> SetDB( DB_host->Text, DB_login->Text, DB_pwd->Text ); + LEGO_COMM -> SetDiasCortesia( ComboBox2->ItemIndex ); + try { + LEGO_COMM -> maxDENTRO = Capacidad->Text.ToInt(); + }catch(...){ + LEGO_COMM -> maxDENTRO = 2000; + } + } + + ini->UpdateFile(); + delete ini; + } + + // Hacemos efectivos los cambios... + ObtenDirLEGOS( DireccionesE->Text, nLEGOSe, &IDe ); + ObtenDirLEGOS( DireccionesS->Text, nLEGOSs, &IDs ); + if ( LEGO_COMM ) + { + LEGO_COMM -> SetLegoID( nLEGOSe, IDe, nLEGOSs, IDs ); + } + + ////////// HAY QUE FINALIZAR EL HILO Y COMENZAR CON OTRO NUEVO + bDesBlock->Visible = true; + ComboBox2->Enabled = false; + ComboBox1->Enabled = false; + DireccionesE->Enabled = false; + DireccionesS->Enabled = false; + Capacidad->Enabled = false; + MsgCapacidad->Enabled = false; + DB_host->Enabled = false; + DB_login->Enabled = false; + DB_pwd->Enabled = false; + bAplicar->Enabled = false; +} +//--------------------------------------------------------------------------- +void __fastcall TPropiedades::ObtenDirLEGOS(AnsiString cadena, int &nLEGOS, int **ID) +{ + char *pDir, buff[80], *pbuff; + nLEGOS = 0; int i = 1, j=0; + + while ( i <= cadena.Length() ) + { + if ( cadena[i] == ';' ) nLEGOS++; + i++; + } + + (*ID) = new int[nLEGOS]; + i = 1; pbuff = buff; + while ( i <= cadena.Length() ) + { + if ( cadena[i] == ';' ) + { + *pbuff = '\0'; + try { + (*ID)[j++] = AnsiString( buff ).ToInt(); + } catch(...) { + nLEGOS--; + ShowMessage( "La configuración de direcciones LEGO'S es incorrecta" ); + } + pbuff = buff; i++; + }else{ + *(pbuff++) = cadena[i]; + i++; + } + } +} +//--------------------------------------------------------------------------- +bool __fastcall TPropiedades::entreHora(AnsiString hLo, AnsiString hHi) +{ + bool dev = false; + try { + TDateTime hora; + hora = EncodeTime( (hLo.SubString(1,2)).ToInt(), (hLo.SubString(4,2)).ToInt(), 0, 0 ); + if ( TDateTime::CurrentTime() >= hora ) + { + hora = EncodeTime( (hHi.SubString(1,2)).ToInt(), (hHi.SubString(4,2)).ToInt(), 0, 0 ); + dev = ( TDateTime::CurrentTime() <= hora ); + } + } catch (...) { + return false; + } + return dev; +} +//--------------------------------------------------------------------------- +bool __fastcall TPropiedades::CheckHorario(void) +{ + bool dev = false; + if ( CheckBox1->Checked ) + { + switch ( TDateTime::CurrentDate().DayOfWeek() ) + { + // Domingo + case 1: + if ( verD->Checked ) + dev = entreHora( desdeD->Text, hastaD->Text ); + break; + // Lunes + case 2: + if ( verL->Checked ) + dev = entreHora( desdeL->Text, hastaL->Text ); + break; + // Martes + case 3: + if ( verM->Checked ) + dev = entreHora( desdeM->Text, hastaM->Text ); + break; + // Miercoles + case 4: + if ( verX->Checked ) + dev = entreHora( desdeX->Text, hastaX->Text ); + break; + // Jueves + case 5: + if ( verJ->Checked ) + dev = entreHora( desdeJ->Text, hastaJ->Text ); + break; + // Viernes + case 6: + if ( verV->Checked ) + dev = entreHora( desdeV->Text, hastaV->Text ); + break; + // Sabado + case 7: + if ( verS->Checked ) + dev = entreHora( desdeS->Text, hastaS->Text ); + break; + } + } + + return dev; +} + + +void __fastcall TPropiedades::Timer1Timer(TObject *Sender) +{ + static bool horaVista = false, firstTime = true, cH; + bool nH; + + nH = CheckHorario(); + + if ( firstTime ) { horaVista=false; firstTime = false; cH = nH; } + + if ( cH != nH ) { horaVista = false; cH = nH; } + + if ( !horaVista && cH ) // Si no hemos visto este cambio + { + horaVista = true; + sndPlaySound("snd\\fuera_de_hora.wav", SND_ASYNC | SND_FILENAME); + LEGO_COMM -> RetiraPermisoSalida(); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TPropiedades::Label1DblClick(TObject *Sender) +{ + AnsiString cantidad; + // Cambio del aforo + if ( InputQuery( "Forzar lleno de aforo", "Nuevo aforo:" , cantidad ) ) + { + try { + Ocupacion->Value = cantidad.ToInt(); + LEGO_COMM -> crdDENTRO = Ocupacion->Value; + } catch(...){ + //nothing + } + } +} +//--------------------------------------------------------------------------- + diff --git a/cap_control/TPropiedades.ddp b/cap_control/TPropiedades.ddp new file mode 100644 index 0000000..cdc0ee8 Binary files /dev/null and b/cap_control/TPropiedades.ddp differ diff --git a/cap_control/TPropiedades.dfm b/cap_control/TPropiedades.dfm new file mode 100644 index 0000000..03662d3 Binary files /dev/null and b/cap_control/TPropiedades.dfm differ diff --git a/cap_control/TPropiedades.h b/cap_control/TPropiedades.h new file mode 100644 index 0000000..5db55f3 --- /dev/null +++ b/cap_control/TPropiedades.h @@ -0,0 +1,100 @@ +//--------------------------------------------------------------------------- +#ifndef TPropiedadesH +#define TPropiedadesH +#include +#include +#include +#include +#include +#include +#include "DigitNum.h" +#include "LM2000.h" +#include "LEGO_COMM.h" +#include +#include +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +class TPropiedades : public TForm +{ +__published: // IDE-managed Components + TSpeedButton *BorrarHistorial; + TPageControl *PageControl1; + TTabSheet *TabSheet1; + TTabSheet *TabSheet2; + TTabSheet *TabSheet3; + TStatusBar *StatusBar1; + TBevel *Bevel4; + TDigitNum *Ocupacion; + TMemo *mHistorial; + TCheckBox *Historial; + TButton *bAceptar; + TButton *bCancelar; + TButton *bAplicar; + TLabel *Label1; + TPageControl *PageControl2; + TTabSheet *TabSheet4; + TTabSheet *TabSheet5; + TLabel *Label2; + TComboBox *ComboBox1; + TEdit *DireccionesE; + TEdit *DireccionesS; + TEdit *MsgCapacidad; + TEdit *Capacidad; + TLabel *Label3; + TLabel *Label5; + TComboBox *ComboBox2; + TEdit *DB_host; + TEdit *DB_login; + TEdit *DB_pwd; + TLabel *Label4; + TButton *bDesBlock; + TCheckBox *CheckBox1; + TCheckBox *verL; + TCheckBox *verM; + TCheckBox *verX; + TCheckBox *verJ; + TCheckBox *verV; + TCheckBox *verS; + TCheckBox *verD; + TBevel *Bevel3; + TBevel *Bevel5; + TMaskEdit *desdeL; + TMaskEdit *desdeM; + TMaskEdit *desdeX; + TMaskEdit *desdeS; + TMaskEdit *desdeD; + TMaskEdit *hastaL; + TMaskEdit *hastaM; + TMaskEdit *hastaX; + TMaskEdit *hastaS; + TMaskEdit *hastaD; + TMaskEdit *desdeJ; + TMaskEdit *hastaJ; + TMaskEdit *desdeV; + TMaskEdit *hastaV; + TTimer *Timer1; + + void __fastcall BorrarHistorialClick(TObject *Sender); + void __fastcall FormDestroy(TObject *Sender); + void __fastcall mHistorialChange(TObject *Sender); + void __fastcall ActivarAplicar(TObject *Sender); + void __fastcall bDesBlockClick(TObject *Sender); + void __fastcall bAplicarClick(TObject *Sender); + void __fastcall Timer1Timer(TObject *Sender); + void __fastcall Label1DblClick(TObject *Sender); +private: // User declarations + void __fastcall ObtenDirLEGOS(AnsiString cadena, int &nLEGOS, int **ID); + void __fastcall StartEventRecorder(AnsiString opLOG); +public: // User declarations + bool __fastcall CheckHorario(void); + bool __fastcall entreHora(AnsiString hLo, AnsiString hHi); + CheckLEGOs *LEGO_COMM; + int nLEGOSe, nLEGOSs; + int *IDe, *IDs; + __fastcall TPropiedades(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TPropiedades *Propiedades; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_control/cap.bpr b/cap_control/cap.bpr new file mode 100644 index 0000000..5de6dcb --- /dev/null +++ b/cap_control/cap.bpr @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName=JD soft +FileDescription=Módulo de control de acceso +FileVersion=1.0.0.0 +InternalName=cap +LegalCopyright= +LegalTrademarks= +OriginalFilename=cap +ProductName= +ProductVersion=1.0.0.0 +Comments= +url=www.infdj.com +e-mail=jd@infdj.com + +[HistoryLists\hlIncludePath] +Count=3 +Item0=..\lm2000_vcl;$(BCB)\include;$(BCB)\include\vcl;..\..\VCLs\include +Item1=$(BCB)\include;$(BCB)\include\vcl;..\..\VCLs\include +Item2=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=2 +Item0=..\lm2000_vcl;$(BCB)\Projects\Lib;..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib +Item1=$(BCB)\Projects\Lib;..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[HistoryLists\hlIntOutputDir] +Count=2 +Item0=..\obj +Item1=C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\obj + +[HistoryLists\hlFinalOutputDir] +Count=2 +Item0=..\bin\ +Item1=..\bin + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/cap_control/cap.cpp b/cap_control/cap.cpp new file mode 100644 index 0000000..f274a07 --- /dev/null +++ b/cap_control/cap.cpp @@ -0,0 +1,24 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +HINSTANCE g_hinst; +//--------------------------------------------------------------------------- +USEFORM("traymain.cpp", TrayMainForm); +USERES("cap.res"); +USEFORM("TPropiedades.cpp", Propiedades); +USEFORM("ListInit.cpp", AcercaDe); +USEUNIT("LEGO_COMM.cpp"); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE hInstance, LPSTR, int) +{ + Application->Initialize(); + g_hinst = hInstance; + Application->Title = "Control Acceso Parkings"; + Application->CreateForm(__classid(TTrayMainForm), &TrayMainForm); + Application->CreateForm(__classid(TPropiedades), &Propiedades); + Application->ShowMainForm = false; + Application->Run(); + return 0; +} +//--------------------------------------------------------------------------- diff --git a/cap_control/cap.res b/cap_control/cap.res new file mode 100644 index 0000000..4aec3da Binary files /dev/null and b/cap_control/cap.res differ diff --git a/cap_control/cleanup.bat b/cap_control/cleanup.bat new file mode 100644 index 0000000..42ad5b0 --- /dev/null +++ b/cap_control/cleanup.bat @@ -0,0 +1,8 @@ +del *.~* +del *.tds +del *.obj + +del *.ilc +del *.ild +del *.ilf +del *.ils \ No newline at end of file diff --git a/cap_control/control.ico b/cap_control/control.ico new file mode 100644 index 0000000..db708c0 Binary files /dev/null and b/cap_control/control.ico differ diff --git a/cap_control/tmp1.ico b/cap_control/tmp1.ico new file mode 100644 index 0000000..6cdc59c Binary files /dev/null and b/cap_control/tmp1.ico differ diff --git a/cap_control/tmp2.ico b/cap_control/tmp2.ico new file mode 100644 index 0000000..0270e87 Binary files /dev/null and b/cap_control/tmp2.ico differ diff --git a/cap_control/traymain.cpp b/cap_control/traymain.cpp new file mode 100644 index 0000000..f74955c --- /dev/null +++ b/cap_control/traymain.cpp @@ -0,0 +1,195 @@ +//---------------------------------------------------------------------------- +//Borland C++Builder +//Copyright (c) 1987, 1998 Borland International Inc. All Rights Reserved. +//---------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +#include +#include +#include +#pragma hdrstop + +#include "traymain.h" +#include "TPropiedades.h" +#include "ListInit.h" +//--------------------------------------------------------------------------- +#pragma link "LM2000" +#pragma resource "*.dfm" +TTrayMainForm *TrayMainForm; +//--------------------------------------------------------------------------- +__fastcall TTrayMainForm::TTrayMainForm(TComponent* Owner) + : TForm(Owner) +{ + Running = true; + TrayMessage(NIM_ADD); + TrayMessage(NIM_MODIFY); + + TAcercaDe *AcercaDe; + AcercaDe = new TAcercaDe(this); + AcercaDe->Show(); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::DrawItem(TMessage& Msg) +{ + IconDrawItem((LPDRAWITEMSTRUCT)Msg.LParam); + TForm::Dispatch(&Msg); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::MyNotify(TMessage& Msg) +{ + POINT MousePos; + + switch(Msg.LParam) + { + case WM_RBUTTONUP: + if ( GetCursorPos(&MousePos) ) + { + PopupMenu1->PopupComponent = Propiedades; + SetForegroundWindow(Handle); + PopupMenu1->Popup(MousePos.x, MousePos.y); + PopupMenu1->PopupComponent = 0; + } + else + Show(); + break; + case WM_LBUTTONDBLCLK: + Properties1Click(0); + break; +/* + case WM_LBUTTONUP: + Properties1Click(0); + break; +*/ + default: + break; + } + TForm::Dispatch(&Msg); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::FormDestroy(TObject *Sender) +{ + TrayMessage(NIM_DELETE); +} +//--------------------------------------------------------------------------- +bool __fastcall TTrayMainForm::TrayMessage(DWORD dwMessage) +{ + NOTIFYICONDATA tnd; + PSTR pszTip; + + pszTip = TipText(); + + tnd.cbSize = sizeof(NOTIFYICONDATA); + tnd.hWnd = Handle; + tnd.uID = IDC_MYICON; + tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; + tnd.uCallbackMessage = MYWM_NOTIFY; + + if (dwMessage == NIM_MODIFY) + { + tnd.hIcon = IconHandle(); + if (pszTip) + lstrcpyn(tnd.szTip, pszTip, sizeof(tnd.szTip)); + else + tnd.szTip[0] = '\0'; + } + else + { + tnd.hIcon = NULL; + tnd.szTip[0] = '\0'; + } + + return (Shell_NotifyIcon(dwMessage, &tnd)); +} +//--------------------------------------------------------------------------- +HANDLE __fastcall TTrayMainForm::IconHandle(void) +{ + if (Running) + return imagenOn -> Picture->Icon->Handle; + else + return imagenOFF -> Picture->Icon->Handle; +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::ToggleState(void) +{ + Running = !Running; + TrayMessage(NIM_MODIFY); + if ( Running ) + { + ToggleState1->Caption = "Desactivar"; + // Reanudamos el hilo + Propiedades->LEGO_COMM -> Resume(); + } else { + ToggleState1->Caption = "Activar"; + // Paramos al hilo + Propiedades->LEGO_COMM -> Suspend(); + } +} +//--------------------------------------------------------------------------- +PSTR __fastcall TTrayMainForm::TipText(void) +{ + if (Running) + return ("CAP-c esta ACTIVADO"); + else + return ("-- DESACTIVADO --"); +} +//--------------------------------------------------------------------------- +LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi) +{ + HICON hIcon; + + hIcon = (HICON)LoadImage(g_hinst, MAKEINTRESOURCE(lpdi->CtlID), IMAGE_ICON, + 16, 16, 0); + if (!hIcon) + return(FALSE); + + DrawIconEx(lpdi->hDC, lpdi->rcItem.left, lpdi->rcItem.top, hIcon, + 16, 16, 0, NULL, DI_NORMAL); + + return(TRUE); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::Properties1Click(TObject *Sender) +{ +// Show(); + Propiedades -> Visible = !(Propiedades->Visible); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::ToggleState1Click(TObject *Sender) +{ + ToggleState(); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::Shutdown1Click(TObject *Sender) +{ + // Desactivamos el HILO de ejecución y esperamos hasta que acabe + Propiedades->LEGO_COMM->Terminate(); + Propiedades->LEGO_COMM->WaitFor(); + + Close(); +} +//--------------------------------------------------------------------------- + + +void __fastcall TTrayMainForm::BSalirClick(TObject *Sender) +{ + Visible = false; +} +//--------------------------------------------------------------------------- + + +void __fastcall TTrayMainForm::FormCreate(TObject *Sender) +{ + Visible = false; +} +//--------------------------------------------------------------------------- + + +void __fastcall TTrayMainForm::Acercade1Click(TObject *Sender) +{ + TAcercaDe *AcercaDe; + AcercaDe = new TAcercaDe(this); + AcercaDe->ShowModal(); +} +//--------------------------------------------------------------------------- + + + diff --git a/cap_control/traymain.dfm b/cap_control/traymain.dfm new file mode 100644 index 0000000..9eb70fa Binary files /dev/null and b/cap_control/traymain.dfm differ diff --git a/cap_control/traymain.h b/cap_control/traymain.h new file mode 100644 index 0000000..b8a96ec --- /dev/null +++ b/cap_control/traymain.h @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------------- +//Borland C++Builder +//Copyright (c) 1987, 1998 Borland International Inc. All Rights Reserved. +//---------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +#ifndef traymainH +#define traymainH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include "LM2000.h" +#define MYWM_NOTIFY (WM_APP+100) +#define IDC_MYICON 1006 +extern HINSTANCE g_hinst; +LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi); +//--------------------------------------------------------------------------- +class TTrayMainForm : public TForm +{ +__published: + TPopupMenu *PopupMenu1; + TMenuItem *Properties1; + TMenuItem *ToggleState1; + TMenuItem *Shutdown1; + TMenuItem *N1; + TMenuItem *N2; + TMenuItem *Acercade1; + TImage *imagenOn; + TImage *imagenOFF; + TSpeedButton *BSalir; + TMenuItem *Estado1; + void __fastcall FormDestroy(TObject *Sender); + void __fastcall Properties1Click(TObject *Sender); + void __fastcall ToggleState1Click(TObject *Sender); + void __fastcall Shutdown1Click(TObject *Sender); + + + + void __fastcall BSalirClick(TObject *Sender); + + void __fastcall FormCreate(TObject *Sender); + void __fastcall Acercade1Click(TObject *Sender); +private: // private user declarations + void __fastcall DrawItem(TMessage& Msg); + void __fastcall MyNotify(TMessage& Msg); + bool __fastcall TrayMessage(DWORD dwMessage); + HANDLE __fastcall IconHandle(void); + void __fastcall ToggleState(void); + PSTR __fastcall TipText(void); + bool Running; +public: // public user declarations + virtual __fastcall TTrayMainForm(TComponent* Owner); +BEGIN_MESSAGE_MAP +MESSAGE_HANDLER(WM_DRAWITEM,TMessage,DrawItem) +MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,MyNotify) +END_MESSAGE_MAP(TForm) +}; +//--------------------------------------------------------------------------- +extern TTrayMainForm *TrayMainForm; +//--------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/cap_control_CB5/CAP.INI b/cap_control_CB5/CAP.INI new file mode 100644 index 0000000..dc77a0a --- /dev/null +++ b/cap_control_CB5/CAP.INI @@ -0,0 +1,7 @@ +[CAP_c] +PuertoLego=0 +IDsLego=1;2; + +[parking] +Capacidad=1000 +MsgParking_lleno=El parking esta lleno diff --git a/cap_control_CB5/LEGO_COMM.cpp b/cap_control_CB5/LEGO_COMM.cpp new file mode 100644 index 0000000..2ac11be --- /dev/null +++ b/cap_control_CB5/LEGO_COMM.cpp @@ -0,0 +1,426 @@ +//--------------------------------------------------------------------------- + +#include +#include +#pragma hdrstop + +#include +// #include + +#include "LEGO_COMM.h" +#include "TPropiedades.h" +#pragma package(smart_init) +#pragma link "LM2000" +//--------------------------------------------------------------------------- + +// Important: Methods and properties of objects in VCL can only be +// used in a method called using Synchronize, for example: +// +// Synchronize(UpdateCaption); +// +// where UpdateCaption could look like: +// +// void __fastcall Unit1::UpdateCaption() +// { +// Form1->Caption = "Updated in a thread"; +// } +//--------------------------------------------------------------------------- +__fastcall CheckLEGOs::CheckLEGOs(bool CreateSuspended) + : TThread(CreateSuspended) +{ + SetAntiPassBack(false); + Lm2000 = new TLm2000(Propiedades->Owner); + Lm2000->OnBuscaTarjeta = Lm2000BuscaTarjeta; + Lm2000->OnVerboseMessage = Lm2000VerboseMessage; + TbSession = new TSession(Propiedades->Owner); + +} +//--------------------------------------------------------------------------- +void __fastcall CheckLEGOs::SetDB( AnsiString Host, AnsiString Login, AnsiString PWD ) +{ + // Asignamos los nuevos valores + DB_host = Host; + DB_login = Login; + DB_pwd = PWD; + + TbSession->Active = false; + TbSession->SessionName = "AccesosCAP"; + TbSession->Active = true; + + // Activamos los cambios + TbCards = new TTable(Propiedades->Owner); + TbCards->TableName = DB_host + "\\datos\\Cards.db"; + TbCards->SessionName = "AccesosCAP"; + + TbHistorial = new TTable(Propiedades->Owner); + TbHistorial->TableName = DB_host + "\\datos\\historial.db"; +// TbHistorial->BeforeOpen = TbHistorialBeforeOpen; + TbHistorial->SessionName = "AccesosCAP"; + TbHistorial->Active = true; // Tabla de eventos del sistema + + TbAccesos = new TTable(Propiedades->Owner); + TbAccesos->TableName = DB_host + "\\datos\\accesos.db"; + TbAccesos->SessionName = "AccesosCAP"; +// TbAccesos->BeforeOpen = TbAccesosBeforeOpen; + TbAccesos->Active = true; // Tabla de eventos del sistema + crdDENTRO = TbAccesos->RecordCount; + TbAccesos->Active = false; // Tabla de eventos del sistema + Propiedades->Ocupacion->Value = crdDENTRO; +} +//--------------------------------------------------------------------------- +void __fastcall CheckLEGOs::SetPuerto( AnsiString pCOM ) +{ + Puerto = pCOM; +} +//--------------------------------------------------------------------------- +void __fastcall CheckLEGOs::SetDiasCortesia( int nDias ) +{ + DiasDeCortesia = nDias; +} +//--------------------------------------------------------------------------- +/* +void __fastcall CheckLEGOs::TbHistorialBeforeOpen(TDataSet *DataSet) +{ + if ( !FileExists( TbHistorial->TableName ) ) + { + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbHistorial -> FieldDefs -> Clear(); + + TbHistorial -> FieldDefs -> Add("id", ftAutoInc, 0, false ); + TbHistorial -> FieldDefs -> Add("idCard", ftInteger, 0, false ); + TbHistorial -> FieldDefs -> Add("fechaE", ftDate, 0, false ); + TbHistorial -> FieldDefs -> Add("horaE", ftTime, 0, false ); + TbHistorial -> FieldDefs -> Add("fechaS", ftDate, 0, false ); + TbHistorial -> FieldDefs -> Add("horaS", ftTime, 0, false ); + + TbHistorial -> IndexDefs-> Clear(); + + TbHistorial->IndexDefs->Add("Primary", "id", TIndexOptions() << ixPrimary << ixUnique); + TbHistorial->IndexDefs->Add("iAccesos", "idCard;fechaE;horaE", TIndexOptions() << ixCaseInsensitive ); + // Creamos la base... + TbHistorial -> CreateTable(); + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + " :: Iniciando sistema por primera vez..." ); + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + " :: Generación de ficheros auxiliares concluido" ); + } +} +*/ +//--------------------------------------------------------------------------- +/* +void __fastcall CheckLEGOs::TbAccesosBeforeOpen(TDataSet *DataSet) +{ + if ( !FileExists( TbAccesos->TableName ) ) + { + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbAccesos -> FieldDefs -> Clear(); + + TbAccesos -> FieldDefs -> Add("id", ftAutoInc, 0, false ); + TbAccesos -> FieldDefs -> Add("idCard", ftInteger, 0, false ); + TbAccesos -> FieldDefs -> Add("fechaE", ftDate, 0, false ); + TbAccesos -> FieldDefs -> Add("horaE", ftTime, 0, false ); + TbAccesos -> FieldDefs -> Add("puedeSalir", ftBoolean, 0, false ); + + TbAccesos -> IndexDefs-> Clear(); + + TbAccesos->IndexDefs->Add("Primary", "id", TIndexOptions() << ixPrimary << ixUnique); + TbAccesos->IndexDefs->Add("iAccesos", "idCard;fechaE;horaE", TIndexOptions() << ixCaseInsensitive ); + // Creamos la base... + TbAccesos -> CreateTable(); + } +} +*/ +//--------------------------------------------------------------------------- +void __fastcall CheckLEGOs::SetLegoID(int nLe, int *Le, int nLs, int *Ls) +{ + int i; + + nLEGOSe = nLe; + if ( IDe ) delete [] IDe; + IDe = new int[nLe]; + for ( i=0; iProgramOperationParameters( 1, &pop ); + Lm2000->SetCharsOnBand( 1, &cab2 ); +*/ + Lm2000->CierraPuerto(); + Lm2000->AbrePuerto( Puerto.c_str() ); + + //---- Place thread code here ---- + while( !Terminated ) + { + //nothing; + for ( i=0; i< nLEGOSe; i++ ) + { + Propiedades->StatusBar1->Panels->Items[1]->Text = (j++); + Lm2000->SimpleInterrogation( IDe[i], rcv ); + if ( rcv[5] == ':' ) + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + Format( " :: E(%03d)-%s", ARRAYOFCONST(( IDe[i], rcv )) ) ); + } + + if ( Terminated ) break; +/* + if ( Clipboard()->HasFormat(CF_TEXT) ) + { + if ( Clipboard()->AsText.SubString(1,7) == "JDsoft:" ) + { + CB = Clipboard()->AsText; + // Abrir barrera + if ( CB[8] == 'O' ) + ShowMessage("Abrir barrera nº " + CB.SubString(9,CB.Length()) ); + // Cerrar barrera + if ( CB[8] == 'C' ) + ShowMessage("Cerrar barrera nº " + CB.SubString(9,CB.Length()) ); + Clipboard()->Clear(); + } + } +*/ + + for ( i=0; i< nLEGOSs; i++ ) + { + Propiedades->StatusBar1->Panels->Items[1]->Text = (j++); + Lm2000->SimpleInterrogation( IDs[i], rcv ); + if ( rcv[5] == ':' ) + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + Format( " :: S(%03d)-%s", ARRAYOFCONST(( IDs[i], rcv )) ) ); + } + + } + Lm2000->CierraPuerto(); +} +//--------------------------------------------------------------------------- +bool __fastcall CheckLEGOs::Lm2000VerboseMessage(AnsiString msg) +{ + if ( msg[3] != 'n' && msg[9] != ':' ) + Propiedades->StatusBar1->Panels->Items[0]->Text = msg; + return true; +} +//--------------------------------------------------------------------------- +/* +bool __fastcall CheckLEGOs::EsEntrada( int ID ) +{ + bool dev = false; + for ( int i=0; inLEGOSe; i++ ) + { + if ( Propiedades->IDe[i] == ID ) + { + dev = true; + break; + } + } + return dev; +} +*/ +// El lector EXTERNO será siempre la SALIDA +#define EsEntrada( X ) (X & 0x0008) +//--------------------------------------------------------------------------- +void __fastcall CheckLEGOs::SetAntiPassBack(bool AP) +{ + AntiPassBack = AP; +} +//--------------------------------------------------------------------------- +bool __fastcall CheckLEGOs::RetiraPermisoSalida(void) +{ + TbAccesos->Active = true; + + TbAccesos->First(); + while( !TbAccesos->Eof ) + { + // Si es abonado, denegamos su permiso a salir + if ( (TbAccesos->FieldByName("idCard")->AsInteger & 0x0001)==0 ) + { + if ( TbAccesos->FieldByName("PuedeSalir")->AsBoolean ) + { + TbAccesos->Edit(); + TbAccesos->FieldByName("fechaE")->AsDateTime = TDateTime::CurrentDate(); + TbAccesos->FieldByName("horaE")->AsDateTime = TDateTime::CurrentTime(); + TbAccesos->FieldByName("PuedeSalir")->AsBoolean = false; + TbAccesos->Post(); + } + } + TbAccesos->Next(); + } + TbAccesos->Active = false; +} + +bool __fastcall CheckLEGOs::Lm2000BuscaTarjeta(int ID, int FGA, int TPA, + int CDA, int *TPR, int *PNR, char *message) +{ + bool dev = false;//, horaOK = true; + *TPR = 0; + *PNR = 0; + + +// Distinguimos entre ENTRAR y SALIR +// 27-mar-2002 Cambiada la funcion es entrada +// if ( EsEntrada( ID ) ) + if ( EsEntrada( FGA ) ) + { + // E N T R A D A +/* + // Comprueba si esta dentro del horario... + if ( Propiedades->CheckHorario() ) + { + sndPlaySound("snd\\fuera_de_hora.wav", SND_ASYNC | SND_FILENAME); + sprintf( message, "-FUERA DE TIEMPOPase por caja" ); + dev = false; + } else +*/ + { + + // Verificamos que el aforo no este lleno + if ( crdDENTRO >= maxDENTRO ) + { + sndPlaySound("snd\\parking_lleno.wav", SND_ASYNC | SND_FILENAME); + sprintf( message, "-AFORO COMPLETO-por favor espere" ); + dev = false; + } else { + // El aforo NO ESTA LLENO + TbCards->Active = true; +// TbCards->Refresh(); + // Buscamos si existe esa tarjeta... + dev = false; TbCards->First(); + while( !TbCards->Eof ) + { + if ( TbCards->FieldByName("idCard")->AsInteger == CDA ) + { dev = true; break;} else TbCards->Next(); + } + + if ( dev ) + { + TbAccesos->Active = true; // Tabla de tarjetas dentro del complejo + dev = false; TbAccesos->First(); + while( !TbAccesos->Eof ) + { + if ( TbAccesos->FieldByName("idCard")->AsInteger == CDA ) + { dev = true; break;} else TbAccesos->Next(); + } + // Si ya ha entrado y no es un VIP + if ( dev && AntiPassBack && ! TbCards->FieldByName( "vip" ) -> AsBoolean ) + { + sndPlaySound("snd\\card_acceso_denegado_antipassback.wav", SND_ASYNC | SND_FILENAME); + sprintf( message, "-YA ESTA DENTRO-" ); + dev = false; + } else { + dev = false; + bool acceso = TbCards->FieldByName( "acceso" )->AsBoolean; + // Comprobamos los permisos + if ( acceso && + TDateTime::CurrentDate() <= (TbCards->FieldByName( "fechaM" )->AsDateTime + DiasDeCortesia) + ) + { + TbAccesos->Insert(); + TbAccesos->FieldByName("idCard")->AsInteger = CDA; + TbAccesos->FieldByName("fechaE")->AsDateTime = TDateTime::CurrentDate(); + TbAccesos->FieldByName("horaE")->AsDateTime = TDateTime::CurrentTime(); + TbAccesos->FieldByName("PuedeSalir")->AsBoolean = true; + TbAccesos->Post(); + + crdDENTRO++; + Propiedades->Ocupacion->Value = crdDENTRO; + dev = true; + sndPlaySound("snd\\card_acceso_permitido_entrada.wav", SND_ASYNC | SND_FILENAME); + } else { + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + Format( " :: V(%03d)-%d-%d-%d Valida Hasta: %s %s", ARRAYOFCONST(( ID, FGA, TPA, CDA, TbCards->FieldByName( "fechaM" )->AsString, acceso ? "CON ACCESO":"SIN ACCESO" )) ) ); + sndPlaySound("snd\\card_acceso_denegado_entrada.wav", SND_ASYNC | SND_FILENAME); + } + sprintf( message, TbCards->FieldByName("msg")->AsString.c_str() ); + } + TbAccesos->Active = false; // Tabla de tarjetas dentro del complejo + } else { + sprintf( message, "-ACCESO DENEGADO-tarjeta no vale" ); + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + Format( " :: V(%03d)-%d-%d-%d", ARRAYOFCONST(( ID, FGA, TPA, CDA )) ) ); + sndPlaySound("snd\\card_no_encontrado.wav", SND_ASYNC | SND_FILENAME); + } + TbCards->Active = false; + } + } + } else { + // S A L I D A + TbAccesos->Active = true; // Tabla de tarjetas dentro del complejo + + + dev = false; TbAccesos->First(); + while( !TbAccesos->Eof ) + { + if ( TbAccesos->FieldByName("idCard")->AsInteger == CDA ) + { dev = true; break;} else TbAccesos->Next(); + } + + if ( !dev && !AntiPassBack ) + { + + TbCards->Active = true; + dev = false; TbCards->First(); + while( !TbCards->Eof ) + { + if ( TbCards->FieldByName("idCard")->AsInteger == CDA ) + { dev = true; break;} else TbCards->Next(); + } + TbCards->Active = false; + + if (dev) + { + TbHistorial->Insert(); + TbHistorial->FieldByName("idCard")->AsInteger = CDA; + TbHistorial->FieldByName("fechaS")->AsDateTime = TDateTime::CurrentDate(); + TbHistorial->FieldByName("horaS")->AsDateTime = TDateTime::CurrentTime(); + sprintf( message, "-ACCESO MULTIPLE PERMITIDO- Vuelva pronto" ); + sndPlaySound("snd\\card_acceso_permitido_salida.wav", SND_ASYNC | SND_FILENAME); + dev = true; + TbAccesos->Active = false; // Tabla de tarjetas dentro del complejo + return dev; + } + } + + + if ( dev ) + { + if ( TbAccesos->FieldByName("PuedeSalir")->AsBoolean ) + { + // Movemos esta ficha al historial... + TbHistorial->Insert(); + TbHistorial->FieldByName("idCard")->AsInteger = CDA; + TbHistorial->FieldByName("fechaE")->AsDateTime = TbAccesos->FieldByName("fechaE")->AsDateTime; + TbHistorial->FieldByName("horaE")->AsDateTime = TbAccesos->FieldByName("horaE")->AsDateTime; + TbHistorial->FieldByName("fechaS")->AsDateTime = TDateTime::CurrentDate(); + TbHistorial->FieldByName("horaS")->AsDateTime = TDateTime::CurrentTime(); + TbAccesos->Delete(); + sprintf( message, "-ACCESO PERMITIDO- Vuelva pronto" ); + sndPlaySound("snd\\card_acceso_permitido_salida.wav", SND_ASYNC | SND_FILENAME); + crdDENTRO--; + Propiedades->Ocupacion->Value = crdDENTRO; + dev = true; + } else { + sprintf( message, "-ACCESO DENEGADO-Pase por caja" ); + sndPlaySound("snd\\card_acceso_denegado_salida_pagar.wav", SND_ASYNC | SND_FILENAME); + dev = false; + } + } else { + sprintf( message, "-ACCESO DENEGADO- NO HA ENTRADO " ); + sndPlaySound("snd\\card_acceso_denegado_salida.wav", SND_ASYNC | SND_FILENAME); + Propiedades->mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + Format( " :: V(%03d)-%d-%d-%d", ARRAYOFCONST(( ID, FGA, TPA, CDA )) ) ); + dev = false; + } + TbAccesos->Active = false; // Tabla de tarjetas dentro del complejo + } + return dev; +} +//--------------------------------------------------------------------------- + diff --git a/cap_control_CB5/LEGO_COMM.h b/cap_control_CB5/LEGO_COMM.h new file mode 100644 index 0000000..9d58b8f --- /dev/null +++ b/cap_control_CB5/LEGO_COMM.h @@ -0,0 +1,46 @@ +//--------------------------------------------------------------------------- + +#ifndef LEGO_COMMH +#define LEGO_COMMH +//--------------------------------------------------------------------------- +#include +#include +#include "LM2000.h" +//--------------------------------------------------------------------------- +class CheckLEGOs : public TThread +{ +private: + TLm2000 *Lm2000; + TSession *TbSession; + TTable *TbCards; + TTable *TbHistorial; + TTable *TbAccesos; + void __fastcall TbHistorialBeforeOpen(TDataSet *DataSet); + void __fastcall TbAccesosBeforeOpen(TDataSet *DataSet); + + bool __fastcall EsEntrada( int ID ); + + bool __fastcall Lm2000VerboseMessage(AnsiString msg); + bool __fastcall Lm2000BuscaTarjeta(int ID, int FGA, int TPA, + int CDA, int *TPR, int *PNR, char *message); + + AnsiString Puerto; + AnsiString DB_host, DB_login, DB_pwd; + + int nLEGOSe, nLEGOSs, *IDe, *IDs, DiasDeCortesia; +protected: + void __fastcall Execute(); + bool AntiPassBack; +public: + __fastcall CheckLEGOs(bool CreateSuspended); + void __fastcall SetPuerto( AnsiString pCOM ); + void __fastcall SetDB( AnsiString Host, AnsiString Login, AnsiString PWD ); + void __fastcall SetLegoID(int nLe, int *Le, int nLs, int *Ls); + void __fastcall SetDiasCortesia( int nDias ); + bool __fastcall RetiraPermisoSalida(void); + void __fastcall SetAntiPassBack(bool AP); + int crdDENTRO, maxDENTRO; +}; +//--------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/cap_control_CB5/ListInit.cpp b/cap_control_CB5/ListInit.cpp new file mode 100644 index 0000000..06900f1 --- /dev/null +++ b/cap_control_CB5/ListInit.cpp @@ -0,0 +1,23 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "ListInit.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TAcercaDe *AcercaDe; +//--------------------------------------------------------------------------- +__fastcall TAcercaDe::TAcercaDe(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- +void __fastcall TAcercaDe::Timer1Timer(TObject *Sender) +{ + Timer1->Enabled = false; + Close(); +} +//--------------------------------------------------------------------------- + diff --git a/cap_control_CB5/ListInit.dfm b/cap_control_CB5/ListInit.dfm new file mode 100644 index 0000000..293a4e0 --- /dev/null +++ b/cap_control_CB5/ListInit.dfm @@ -0,0 +1,985 @@ +object AcercaDe: TAcercaDe + Left = 403 + Top = 318 + BorderIcons = [] + BorderStyle = bsDialog + ClientHeight = 127 + ClientWidth = 359 + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsStayOnTop + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 13 + object Image1: TImage + Left = 112 + Top = 8 + Width = 153 + Height = 57 + Picture.Data = { + 0A544A504547496D6167650E600000FFD8FFE000104A46494600010101004800 + 480000FFDB0043000503040404030504040405050506070C08070707070F0B0B + 090C110F1212110F111113161C1713141A1511111821181A1D1D1F1F1F131722 + 24221E241C1E1F1EFFDB0043010505050706070E08080E1E1411141E1E1E1E1E + 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E + 1E1E1E1E1E1E1E1E1E1E1E1E1EFFC00011080105028003012200021101031101 + FFC4001D000100020301010101000000000000000000060704050803010209FF + C400511000010303020304070702020509050900010002030405110621071231 + 13224151081452617191A115324281C1D1F016B1236217728292E12425334355 + 7493A2F126376373D2273435364553B2B3C2FFC4001A01010002030100000000 + 0000000000000000020301040506FFC400331100020201020502040504030101 + 00000000010203110421051213315115412261719114325281B12333A1D142C1 + E124F1FFDA000C03010002110311003F00ECB444401111004444011110044440 + 111100444401111004444011110044440117C7B9AC69739C1A07524AADB89BC5 + FD37A3E96561AA64F58D0796261C9CFE9D56545BEC61C947764FEE971A3B652B + EA6B676431B0124B9C06CB9C78C3E90CDA7964B56921DBCE0969946E3F2F3553 + EADD7DAD789372920A79268285EEC363612063F5524D05C2F868F96AEEA39A43 + BE1DB92AD8C37C259657994FB6C8F2B56BEE2A56D29A86C8E23AFDD1FB29A7A3 + CF11B54DEF5FCF68BE5407C6C6F4C01BE47B96EEB4D2DAEC152218638D8C8CE3 + 6EAAA0E02DDFFF00B5BACA868C03CD93F985BD451276F4A6B7C127B23B7D92B5 + DE2BF6A3764B97AC01DE52189D96AD1BA9753C3249E4FDA22C1BCDDA82D146FA + AAFA86431B064971C6CA932672F2A9A9A7A6617CF332368F173B0B9CB893E923 + 4B492BE874C406A6507979FC33FCCAA92EBAAF89BADA42D7544F041267BACC81 + 82AC55FEA7821CF9EC76857EAFD39454EE9EA2ED4CD8DBD4F3745A7FF4A7A1BF + EDDA6FFC46FEEB93EDBC2BD415B48456DCE66876E439F8CADC5BF8394822E5A9 + B83C387938EEAF8550976527F433B9D31FE94F437FDBB4DFF88DFDD0714F4312 + 07DBB4BBFF00F11BFBAE70FF0043B6BFFB465FF78AC2B9F06E9DED0CA5B83F3E + 65E42B1E9E0BBC646773ADE935569EAA85934376A6731E32D3CFD56CE9EB296A + 1A1D0D444F07A61C171157709F50D34019457599C474E57F458B0C3C53D3B235 + D4774AB74710C005C48F97455BAE9ED96BEA86E77722E2AB2F1C78976191B1DC + A94D5339B2ECB77C7E4A7FA5BD2868A7ABF57BE5AE4A6F0E603207F658FC367F + 249331CD8EE74B22E4DD67E91F7CA8D426974A52892986C1C41CBBEAB5959C7A + E2551C5DB4B6D01A37DDAEFDD41519EF2482927BA3B15150DC15F481B5EAB70B + 6DF4B282E00868E6380F3EECABD609E39A36C91BC39AE19041EAA16552AFB994 + F27A2222ACC84444011110044440111100444401111004444011110044440111 + 1004444011110044440111100444401111004444011110044440111100444401 + 11100444401111004444011179D44F153C46599ED631A3249407A2D3EA6D4B68 + D3D412565CAAE28991824E5CAAEE2FF1D2C9A5E0928ED72B2B2B8820061C869E + 9BE1734D7D76B4E25DD9D356CF38A77BBBACC9E503DC158A18DE456E79DA258F + C54F482B95DE69ED1A4E37B63396F6C3A9F879280E93D0378D4B5C6E37B9657F + 39E671792AC0D0DC38B7D9636CB58C124C37C7EEA7D1C6C8D8191B1AC60E8D68 + C05BDA7D1597F6DA21431BCB7669B4E69AB658E06C74B0B5CF03EF91FD96EFC7 + 27AA215DED3E96BD3AF85126F244B8B15C68347543C1FBF90AB2F476A771AAAD + B99EAF7E013FCF7ADEFA46DD7B0B4C544C761CE1E1EF593C0DB7BA9F4CD317B4 + 074879B3EE547098ABB5565AFB22BB5E160E85D18F739ADCA9FD37DC1F0507D1 + B062369C29CC386C793B00172B8A34ED78270EC6BB55DFE834E59E6B95C266C5 + 144D2492B8B38AFC45BE712751BADF6C9258ADED7E1AD69EA3CCFF003F7533F4 + ADD5F5B75D44CD2946E3D931C0481BE2EF2FCB2BE70B34552DA6DB15654440CC + E19008F1F35A3545C9A8C56ECC38F3BDFB1AFD05C30A3A285955726F3BDDBE0E + E4AB268E8E9A92311D340C89A3C86EB2117A1D370DAEA5CD3DD92CF83E2FCC92 + 471B0BE47B2368F171C2D2EAED4947A7E89D34CF6997196B495485E3575FF545 + CCC3406511B8E07295AFA9E27C8F9294671E4BB2E3AC74FD087096B9A5EDEAD0 + 56A8713B4C6E44921C752157B63D04F96A44D76AA79CEE5ADEF1FD94A21D0F60 + 113A36D3543B9875E703F42B35E978ADCB992697CF0883B208925BF889A6AA9F + 8F5B1181E2E5BAA3D4763AF1CB15642E1EF3D557553C37B4CB116412D4439DF2 + 5808FEEB4959C35BC529325AEB9B26370D0FE53F238545D4710ABFB90CAFA27F + C05645FB9744D6BB456B497D3412F30EA00FD145EF5C34D3F5FCCE6C22379E98 + 1B05568B96B5D333E2A1B501AD3F8C1FEEA53A738B81CF10DD62C11B1763F55A + 2ADAA5B590C7D0B090E98E1BDB6CF5DEB2E0C7B4741D4952BB9DAA82E14869E7 + A58C348C021BB858F65D456ABC303E92A99CC7F0B8ADB104750BA7A4D2E92C8B + 49E5BFB98794503C46E1954D0541B8DA0B9AE69E60F629670238E573B2DD63D3 + 9AC2571872191CEF3D3E27F5FF00D45A12319244E8A4607B1C305A5533C5BE1C + 89C3AE16D610E079816F507F9FCF3D6BA99E95F2CB783318C9DA16BB8D3D7D33 + 2A29E46C91BC64105670395C29C31E336A7E1F98ED57B824AAA18C8682ECE5A1 + 75870E3897A73595BE39A82B6313380E688B87303F05A9669F6E686E827E49DA + 2F8D7070C82BEAD5241111004444011110044440111100444401111004444011 + 1100444401111004444011110044440111100444401111004444011110044440 + 1111004444011110045E3575305242E9AA256C6C68C92E38542F18BD202DD641 + 25B74E96D5D674E669CB47CBAA9462E5D88CA4A3DCB735AEB3B1E94B73EAEE75 + 91C7CA36693B92B93F8A5C6BD43AD2B24B569D6C94F46E25A5CDEAE0A272C1AC + 788D7615775967746F3B34F403E0AD8D17A0ED962818E9626C9301D31B7E6AEA + AB72972D6B2C86253EFB2203A2785F535EF6DC2F1239C49E625FBAB86CD69A2B + 4D3B61A385ACC0C176372B380000000007403A05F57734BC3230F8ADDD93D96C + 8227C162B6E3402A042E9839F9C72B7CD6E5FABAA85F131832900C90078AFD4D + CBDA1E4180BC2B2514F473CEEE91C64ACDB72543B3E431B9CEBC70AC7DD35A43 + 6F61FF00AD0DC7E6AECE1FD00A6A1A4A76B400C60185425339D7CE2B8772F68C + 8E42495D37A3A9B323303A2708874B472B1FB94D9BCB059FA5A0E585BB782DED + DA614D69A898B83792373B246DB027F4587628B9206FC162F125A4E87BA38388 + 7329DC463CF18FD5798D54F9ED65CBB1C7D65826D4BC53AAABA8EFB44C5D93D3 + AABB406B406B061AD1803DCAAAE0951491DD2E754F1CD8791956B0E8BA5C1EA4 + DCAC61EC82F1AC9DB4D4B2D43FEEC6D2E2BD94538AB5EFB768EA999BF8B65D1E + 216BAE86D0451DADEFF51AA357FD9EC739CD2FC6C76EAACED25A6E9ADB491C71 + C40BF00B9D8DC955DF04ED7EBD74AABC4ECE63CD8692BA134E5A8CCF6F755FC2 + 741569AA5A9B165FB7FB289C9C9E118F6BB2BE6C7754A6DFA60B80CB3E8A5760 + B231AC692C0A514D411B1A3BA16BEB78D4B9B11251AC80374B3797EE7D178546 + 96DB667D159E29983C02FCBE9233F842E62E316A7DC9F4D14ED7E9A73A2746F8 + 9B2467AB1ED0E1F22ABED57C2BB45C5AF74303A8273F8A31961FCBA85D353DB6 + 378FBA16AABAC51BC1EE056CB5B46A76BA39F9FB91E46BB1C5378D1FAB748CC6 + A29BB4969C1DA488F337C3E4B7BA4B8AB554AE6D2DDD84B46C4B974ADCB4E603 + B95BB1EA08C83F10AAFD71C2AB3DD83DEC83D46A4F49236F74F4EA3F65AB3D03 + FCDA7967F924A78FCC67D93515AAF1135F4952C0E3F81C56D5CD0410E6820F50 + 46C573B5FB4A6AAD1551DBC7DA3A9C1EECB192587F6531E1DF124D43D96FBAEC + EE9927759AF884E1FD3BD657F926B0F744B357686B4DF607010B22948F2D8AA5 + AF9A4F52E86BA8B8D9279E2313B98729382BA5237B248DB246F0F63865AE1E2B + CAB2929EAE23154C4D9587C08E8B627A1CAEAE99FEC3EA453845E91ED2F82CFA + BE2304FB37B73D0FC7F9F25D2F65BC505DE8D95543531CF13C021CD702B90388 + 7C2BA6AF8DF556D680E1BE1A30428768BD7BACF85B756432C93545BC3B0E8DE4 + 90067C3C9684946C7CB25CB231BA3FA0237455EF0B389F60D716D8E5A2AA60A8 + 0D1DA44E3820AB01AE0E19056AD95CA0F0CCA793F4888AB32111100444401111 + 0044440111100444401111004444011110044440111100444401111004444011 + 1100444401111004444011110044440144F5EEBDB0E90B7C95371AC8C3C03CAC + E61971F70516E3AF15683445A64A78646C97195A447183D3DE7DCB942968F547 + 122F2EAEB9544F246F764024E3195628A4B322B726DE2249F899C60D4FAF2BA4 + B6D8FB5A7A124B7BA482E1EF5F740F0BDCF736E17825CE279B2FDC953AD1FA22 + D7618184C4C92603CB6054B3F985D1D3682CBF796D10A2A3BBEE635BA8696DF4 + E20A485B1B00EA06E564A2FC4B2471466495ED631BB9712BB91853A587844B76 + 7ED6BEF378B7DA61749593B5A40C86677506D7FC4DA0B3C2F868A4064E9CDE2A + 9AABB8EA8D6F5BCB036510B9DBBF7C61732CD75BA897250B6F261B51EE4E75DF + 195913DD4944F0C19C774ACAE0E5CEA750DD995321716039CFB9575AE386B05A + B4FC75F2D539D54E3839F156CFA3A5A7D4EC0EA970EF16E01F35A1A8D1594DAA + 16776621629F62D7CE493E6A3BC47AF16FD255529772978C02A45E0AA9F489BA + 7AAD8A3A36BB0E73771E795D6E252E5A156BDF624BC908E06D11ACD415B747B7 + 3DE21A7F9F92EA3D154DBB0E1515C07B5FAB69D8E52C21D33B98FBD74868BA6C + 31870BA37E34FA18C3E450B79138B6C7CB105ACE237FF91EEFFF007677E8B754 + ADE5605A8E20C2FA8D15778A3FBC691F8FC867F45E324F32363B2398F833347F + F3B339817194E1586A9FE094820D4770A599FDE7B8E067C7757005DEE0D2F825 + 1F998614278D8D73F424AD68C9E62A6CB4DACE845C34D5653F2E5DC9CC16CF13 + 8B7A778F608AAFD1F67654DA24A6E46B5F1C9838EA574AE8EA06F2B096AE41E1 + 1DD7FA6B8872DB2ABB91543F9413E795DA5A35CC740C208390A776AFA9A28F2F + B1528E244C28A16B231B2CA5F887EE05FB5E524DB7B97844451017C7341F05F5 + 1018D35331E37016AABED11CA0F742DF2F85A0ABABBA507B330D64ADEF5A6A39 + 629237C2C92378C3D8E6E4382E6EE31F0CAA6C133AF9668DFEA9CD97B5BD623F + B2ED29E998F072028FDEEC74D554F2C1510B6586561648C236734ADA9DF1D4C7 + 13EFECC872B8EE8E57E106B5337FCD9719771B0C9F1F356D0DF18DF3D150FC62 + D1959C3ED622A2939BD4E5776903C0D8B73D15ABC33BEB2FB6289EE7E6563403 + BA9F0FD54A99F23ECFF927B359248F6BA3761C30546758E91B76A0A678922636 + 623638D8A90DE2E51D1B982A1A4870D8AF94D34551089A1707B0F8F92DBEA53A + DF82C5890EC7345DEC9A978777AFB4ACD34D072BF98B5A4E08CAE95E0571D6DB + AA6386D17570A6B9B5A010E380F3EEFE7EEB1EF369A2BB533A0AC883C1180EC6 + E173FF0011B43DC74EDD85D6CC5F1BE3773B1D1ECB52C84A97D3BBB7B3318F74 + 7F402199B234169041F15EAB96F80BC7AF5C9E0D39A9FF00C0AA003192BB60F3 + D3F9FC0BA6E8AAA3A889B246F0E6B86410569DD4386EBB194F264A222A0C8444 + 4011110044440111100444401111004444011110044440111100444401111004 + 444011110044440111100444401111005A5D6B7B834FE9DAAB94EE0D6C519775 + F2FE63F35BA5467A5B5F8D169165B6291C1D51261E33B600CFEAB28C339DAA0D + 7F1235F4D5D55CCF88C9B0F003C95E7A7ACD4B65A16535331A1C061CE0144782 + D65650D84573D804B2F4DBCD582BB1C3348AC7D59F65D8C6147B0445ACD4578A + 6B3503AAAA5C06DDD07C5767517C6887348C2593DEEB70A5B751BEA6AA46B5AD + 19033B9542F12B89D555F3BA82DBCD9CE0062D2EB7D6776D4F797505B1CF7071 + C777A0526E1C70F85BCFAEDD1A26A97EE01DF0B97A7D35FC4ECCBDA3FE1119D8 + A3B223BA434057DEA66DC6F8F70638F3061572E9ED3F4F450B20A4A76C6D03C0 + 2DD59ED0E90B5AD660780014EEC3A776697317A45F86E1B0C43BF928C396ECE7 + 6E3AFF0082EA0B5B4F7DFDE23E27656470E6805BF4952C41BCA5E3242AD389B2 + 8BE7184D24597C504A1807B82BA28A21051C3037A47180BCCD737AAD73B1FD49 + E99620DF93DB6C8CAE74E3D5C0DCF55434109E60640D0D5D07729C5350544E71 + DC8C95CCB6E89DA8B8A5CCE25CC8A4E6F9157EA13BF590A97B1749E225F3C39B + 73696D9474ED6E031836579694A7E585BB782AC746D2F7D800D8602B86C30F24 + 2DF82DBE3B6A5F02F62AA91B88C61ABCEBE0153453D33BA4B1B987F3185EC3A2 + F8EE8BC91B0707BDD3692E2BD553CE4C78A87348E9E2AF7A79995103278CE592 + 3438285FA60E8F928EF34FAB28A3223A8DA523C1E162F07F53C774B4B28267FF + 008D18DB3E7E4B7743A8E85D97D9985BA2C25F1C1AE05AE19691823DCBEA2F53 + 38AB22D3ECC89CE9C6ED35516ABE36ED40C702C773B5CDF9ABD7D1C788506A5B + 3474F3BDACAC80063D84EE5354D920BE5AE4A5918D3260F213FD9738D4B2EBC3 + 4D6B1DCA90C8C89B266468E8467A2F3F0E6D3CDD13ECFB092CEE8FE88514A1F1 + 839594AB4E11EBEB5EAEB1C1554950C327280F613B83E2AC889E1CD5CFBEA75C + 892793F6888A8321111004444017E258C39BD17ED13B02B7E3568C8755E8AABA + 4ECC1AAA7699A9CE37C81B85CAFC23BBCF63D52FB5CE4B5BCE5B82BBAE6603BE + 32B8B78F9613A578B0EA8A6672433CA26663C9C72A7279DC8AD9E0B335E523AA + EC8E9E2DDD18E6DBC954D60D7935A6EBEA933FFC22EE570276572DB24159A7A1 + 0F21E658403F25CA9C54B65C29F564B0D132471E627B815BA84D353F2B248EA8 + B4D7D35C68D9534CF0E6386E33D17AD651D35642E86AA26C8C70F11D173D70C3 + 59DC2C753151DC0BF94F75C1DE1EE2BA1682AA2ACA38EA6170731E33B787B975 + 349A98EA63D1BBF630FE4507C61D0725AAA45D2DA0B5CD3CEC7315BDE8D5C638 + 6E9490E9BBD4BD9D7C23918E79FBE07EBFCF86EAE96FA7B9523E96A581CC70D8 + 9F05CE7C48D355DA475132F16A0E63A17F38737C77CAD79D6F4D3E959F95F666 + 1ACEE8FE82D2CED9580839C8590A94F47CE2543AC34E45DB4AD15B080D9599DF + E2AE5A7943DA082B4EFA1D6FE4653C9EC888B5CC844440111100444401111004 + 4440111100444401111004444011110044440111100444401111004444011110 + 04444017387A5F6277DAA178CB435C7FF39FD9747AE6FF004B6FFEF76BFF00E5 + BBFF00EC7292ECCC3EE8F7D2D4ECA6D3D45147D3B3056CD60D87FF00C128BFF9 + 41672F59A04969E3830FB9E7512C7042F9A5388D832E2B9CB8C7ACAA6F17436B + A2717F33B95A1BE0ADCE30DE0DA74ABF94F2BA5CEEA9AE1069F75DEEB2DF2B5A + 5C03BB995A1D29EBF59D35D9119CB9512DE17E8D86D9431D5CF17355CA32491B + 856DD8AD0E99CDEEAF3D3F6B32BDB86ECACFD37656B1AD25ABD16AB535E86AE9 + D65108659E3A7AC2D635A4B16FAFAF82C9A66BAE1261A2081CECFBF0B75494CD + 8D8000AAFF004A2BDFD93C389E9DA795D52E0C041F9AF1B7EAE77CF765B62518 + 339CB86B13AF9C44ABB9CB9701297737E6AF2CE493E6AB1E02DACC16896E2E1D + E97C7CF2ACDF05D0E110DA5632515CB1488BF142E02DFA46A5F9C178202A7F81 + 3426AAE95B737B739760152BF48DBA761698A89AEC39C3C3C72BD781F6BF55D3 + 7038B70E94F313E6B6F8447ADAC9DCFB2236BDB05DFA2A97769C2B4EDB1F2C4D + 559515D6DBA72D2EB8DCE76430C632492A07A87D272DD4B51EAF63B73EAC0382 + EF03F0EAB4F8A395D6BC0834B63A59172D8F498BC1191A79FF00CFF657E65F49 + BBB44C2F769F7803F9ECAE57E165E57DCB798E84D7BA768F5469BABB2D6B4164 + CC3C8EF61FE0570E5CE8EEBC39D7135254C6F67652907C88CEC55F5A77D2774F + 56F24378A3968E476C4E361FCF82FD71529B48F156C3EB766AEA67DD616E6378 + 7005E3C1AEF7ACCB4B663B648F3619E3A46F905FAD6CAA89C3B4C779BFAADCAE + 6FD337CBA68ABE9A2AB0F8D8C7F2B9AEF0DD5F9A7EF94379A364F4D2B79C8CB9 + 995D1E1DAF515D3B1FD19268DA289EBED234DA928DE0C6DF58C6C71F794B1175 + 355A58EA6387DFD9984F072FB46A8E17DFDB596E9A56C2D7E5F1EFCA47C175B7 + 05B8C364D6741140EA86C35ED68ED2279C1CA886A7D3B417FA6747551B7B4C6C + EC75F8AA135768ABE690BA9BA59649607B1DCCD31923FB2E14D4AB7D2BD7D18C + 7BA3FA0F148D7B410410BF6B94B83BE916D8CD3D9757466198619DB9E87E3FCF + 92E9CB25E282EF46CAAA1A98E789E321CD702B52DA250DD6E8CA793628837454 + 190888802222004642E67F4CC641DBDA9F196FAD76783E78C95D29553329E9DF + 348406B064E4AE2BE34EA476B4E288A4A677690D3BC46D70E9869595D8C3EE8B + 1F4273FF004C517699E6E5F1550F179DEABC48A4EC4728748D0E03C77578DAA0 + 34F6EA5A7C00591805501C58AF655F13292303BCD99A081F15D8AE2B34465F33 + 12ECCDCF10B497AEDBC5EADD1E2A18D0E9D8D18C8F687EABF5C21D66FA5A9FB2 + EE32120F74655B7A6285B341182D0E0580107A118E8A9DE34E8C9B486A18AED6 + F63851D41ED187D93E2D56F1BD1C34FA87655B27FE195D5278C32F2690E6820E + 411907CC2D2EB2B1C17CB3CB4EF6032069E53E7EE5ABE186A26DF2C4C6BDC3B5 + 88631EE52F071B85743975FA6C3FCCBF92CECCE66D1F75AFE1B7122225EE8E8E + 5939646E76C65773E92BC4571B7C35113C399234105723FA4369D6181B748198 + 3F7B6F02ACEF464D55F69690A7A7924CC94FFE191F0E8B4A983BAA9425DE261E + CCE908DDCCD5FA5836E9C49103959CB9538F2BC130888A202222008888022220 + 0888802222008888022220088880222200888802222008888022220088880222 + 200888802E6BF4CB8AA218AD558C04478734BBC3EF13FA85D28A15C64D1B16B6 + D1B536BD854B01929C9F6BCBF3595E0C3F2523C30BE4175D39047DA03346DE99 + DC852D5CDD62AFB9683D52FA3AD6491767272B9AEDB1BABFB4FDEA8EF542CA9A + 691BCC4779995D9E1BAD50FE94FB7B06B24338F96F9EE1A59BD8B490C041506F + 47EBC42F6C964A92D64D1BBBA0ED957A5D68A3B8DBE6A39402D91B819F02B9A7 + 5EE95BB692D41F6B5BB9E3746FE6CB7C55B56A25A1D5B97B488CE3CC8EC4D1F6 + D696B1D85635BE9DB1C6301501E8F1C53B6EA4A08E8ABA5653DC6201AE638E39 + BDE3F9FF001E85A491AF8C1690410B5B89DB2B279F6310583DC6CB94BD302F52 + 565FE82C50BB61DE700739C9DBE817535C276D3514D3B8E03184E7C970F6A3AE + 9758F19279DA79A264F86E3A000E02E64764D91B776A25ABA0E845BF4B5241CB + CAE73798ADE8DC80BF313045132268C0634342F0B9D4B692DF5150E380C8CE3E + 2BD255FF00CFA3CFCBF92CF739E78E15CEBAEB48682339CCA063F3570E946416 + 7B1C2E94B638E188139D80C0546DA1A6FF00C53327DF644F2EDD4FB8BD7A7D0D + A22B4D392D927C671E5E0A7A0B168F87CAE7DDEC8A6CDE58445F5F6ABBCEBCBE + 7D95465ECA18DD80D6F43EF3FCFD5585A0386D6CA0A18E6B8421D2119E52372B + 1F831A4A3A4A0173AB8C39EEDC64752ACF0B97A5D34B592E7B3F2FF25918A823 + 05966B4B1818DB7C181E6D5E75560B354C7D9CB6F8797FCA30B668BAEF87E9F1 + 8E5259657FA8785962B935C606089E7A0230AB6B9681D4DA5EB8D5D9A79D8D6E + FDD27185D12BE100B4B5C039A7A8232169DBC2DC77A65FB3194FB9C8FAE6EB76 + AC1DA5CE377ACC6305E5BB9C6562F0FF005E56D96E2CED6577640F9F45D39A9F + 44592F70BF9A0645211E5B1543EBBE13575BA77CD4711ECF39C01B15C4BA9B2A + 9626B7248BDB466B4B6EA1A56112B19311E27EF294AE34B5565DB4ED53407491 + 969FBA7A2B9F41715592B23A3B96FE1971DC2DDD27129D3F0CF7461AC9722F0A + CA5A7AC88C555136561F03E0BCADD71A2B842D9292A19202338CEEB317714A8D + 5C31DCC6E8A9B885C2BA6AF63EA6DAD01FD4068C10A17A7355710786756194F3 + 4D351B0EF13F2461746AD7DDECF6EBA4463ACA663891F780DD732DD05B4EF53C + AF036664F0CBD23B4EDF1ACA5BD9FB3EAFA1E73DD27E2AECB3DEED776A76CF41 + 5B0CEC70C82D78395C7DAAB83D4953CF3DB5C0487A01B10A274B41C46D133836 + AAEAA11B0E43398907F25A128D72789AE5637477F22E36B0FA44EB7B339B15EE + D86A18C18270413FCF829FD07A51584D3C66B6DB3C4F23BDB74FAA87E15BFCAD + 31CC7452F3A89A2A788CB33DAC6346492B9E6F1E941626C120B6514D34A3EEF7 + 763FCF82AAF58717B5E6B689F45430CB4B4F2641E407241F7AADD2E3F9B630E7 + E0B27D22B8D4CA6649A734D4C24A87E59248C39E5F70F7FF003E15D70674C54C + B5C6F3728C971EF65CBC387FC34A99AA5B72BC17176724BD5CF4B053D152B618 + 58D8E260FE12AFA28EABCF68AEEC4535BB3C6F35B1DBEDD3D5C8400C69C7C573 + 55B263A878AAD9437B4647264953CE376B363299D6CA194389DB63D4AD370334 + EC9031F76AB61134C7BB9F25D4E1D17ABD6A925F0AFE111B1E160E86D19103C8 + 31B05BFE236908755687ADB6BA30E9DB19969CE370F03A0F88581A269CE5A70A + CCA38F1134E3A2CF19B336344611D8E1CE15564D60D60FB6D492D05E5A5A55FB + B781C8F055071FEC674B7161D554EDE4867904CCF81569D96715369A59F9B98B + A3193EF5A7C26CE5B9C3C977746A78876C6DCF4B55445A09634B82ADBD19A696 + 82FF0071A4ED0F661DD3C3C55BB7F71165AC1E71154BF031E59ABAE7FEB7EA57 + 4B4D4AFC7C97945763D8EC6D3555DA42DDFC1495872D502D1B39746CDD4EA039 + 605C5D7D7C96B2707947A2222D12411110044440111100444401111004444011 + 11004444011110044440111100444401111004444011110044440179CCDCB765 + E88770B29E014A71D385947AC607D751B63A7BBB07DEE826F71F22B9829AB2FF + 00A12FA68EB59345D93F0E63BC177ED7D28958410AB0E26E80B56A7A37C55F4E + 04C1B88EA1A3BEDF8F985B0AA56ACC7B90CB8FD0AF7466B3B75FE9DB99191CD8 + C104F52B71A92CB497AB73E0A8602797BAEC2A2F58687D4BA12E06A600F92979 + B2C9A304B5C3DFE4A49A1B8A4476745751BF4CB8AB23A87CBD2B9657F944BBAC + A221AC787D77D3B70FB52CD24B139AEE66BA338560F09FD226BECBD95A75840F + 735A437B7C741EF5635254DB6F7420B0C7346E1BB4EEA17ACB86169BB44F929D + 8D8DE467042B173463B7C513182CDE25F15B4ECFC2FAAAFB55C62925A88F9236 + 87778123FBEEA8AE03DB1D535D537899B9249702541EF9C3BBCD0D5FAB36594C + 00E437C15EDC35B48B4E978632DE57BF73E6AAAA0AEB6308ADB246317CDCCC93 + 288F166E22DFA3E73CD83203B7B94B8AA63D23EF019491DB98EC3B007E657678 + A4B15C6B5EEC92341C03B67ACD6D5DD1C399EF7F2B49595A85B2DFB890DA5239 + A38E4E503C3014A782F6CF54D2909C61CF8DD267F2256B78634124DC40ABA894 + 7386127EA5438C2E9D34D2BC67EE535ACCDB2DEA0A6651D1434B18C363681F9F + 8AF62E68FBCE6B7E270B0EFB718AD36F96B66C6183201F12B9F2FF00AFEEB79D + 46EA7B6C9213CD801B955CF56F4C95352CB5DCB9E3BB3A437C671B1F108B9FA2 + D59ACACB3345576C5ADF07B4852DB0F16A9E57361B9C018E3B737458AF8C6F8B + 23F63382D445ADB55EED97289AFA5AB8C93F849DD6C57529D55572F8191C1F57 + E64632461648C6BD87AB5C3217E915B6570B1624B20826B0E1BDAEF4D7CB031B + 1CA77E5548EABD0F76B25438C70C858D3D42EA958F5B494D5B0986AA16C8D231 + B8DC2E26A784B5F155F62499C9D63D6378B0D4868964C34EE09570E8CE2DD0D6 + B590DC480EE99270535CF09E8EB6392A6DE073F5C0EA1515A9F49DEECB50F3D8 + C9CA0F56EC5723E3A65E1993AFAD977B6DC981D47571BF3E04E0ACF391D42E2A + D3BAAAF96DA86C6CA89001E055B1A7B8A17DA48DBDBB7B767BD7469E2D6C369A + C98C17E2F8F6B5E30F6B5E3C9C32AB7B57166D93605753BA23F88818523A3D77 + A66A62ED3D7C47E41C42DDF51D2DAB1621866CEB74FD9AB4FF00CA2DF13BE030 + B4B70E1EE9AAC76F4618DF2016E28751596AF262B8C38F325644D77B4C51979B + 953903C8AAE51E1F2DF381B91CA1E1CE99A4979DB4BCC3C410A454166B5D00C5 + 2D144CC742464AD5556B6D394F1973AE0D716F5682A2B7BE2CD0C20B2DB0195D + E0719544ACD0D7F963CCC6E59355510D24266A891B1B1BE27F4554F123899043 + 4F250DB4F338ED969DCA895DAFBAAF54D418A164AD63BCB2B67A5B40B187B6BA + 8334B9CF29DC6546B8EA7884FA75476F9765F5312928F722DA674A57EA6BA32E + B5CF78843B3DEF157E698B608DB1451B30D68006CBC2C566644C64504418C1D0 + 00AC6D2F6420B496FD17A8AEAAB8651CB9CC9F766BEF37937DA4A83B38DA4853 + 68598600B06D548218C0C2D98D82F1BACBFAB36CD88AC239AFD33E9220CB4D60 + 21B2969613BE700FFC57CE1E92ED1F40F2724B3F45AAF4B9BEC371D49416581C + D7889AD071E049CADFE93A5F53D3945003B08F2ADE1C9FE2621763DEFEDCD96B + 0F9445523C1438D5B73FF5BF52ADED7D5C2DFA5AAE62EE52E6F28F7AA7380AE9 + 2A2FF71A9E53C8E775F9AEE68E6A5C45E3D960859F94EADD12EEE315894BFF00 + 461575A247758AC5A5FF00A30B93C5BFBACCD7D8F64445C92C08888022220088 + 8802222008888022220088880222200888802222008888022220088880222200 + 88880222200888801190B0AB291B2B482166A1DD4A3271794082DFEC11CF0C91 + BE16491BC10E63DA083F92A1788DC19A7AA925ACB0E29A7C97181C7BA7FD53FA + 2EAE9E06BC6085A3BA59E399A7B80ADF8DD5DCB96D5FBFB95B8B4F28E1B8AE1A + AB44DC4D355B278C46705AE055A9A3F8956DBA44C82B1E2398EC4956AEADD1D4 + 374A6753DC2899531F8730EF37E07C173DF13385559A7A927BE595F24B490905 + EDE8F8FE3EEF7A84F4F669FF00A95BCAF3FECCA9E7665CE1947571364E58A667 + 507195E843461AC686B5A3000F054EF022F974B8D53A0A995EE8D8705A55C47A + 9C745D2E1938DD27271F897B927D8FAD1970F9AE65E38D53A5D5CC92A838C0C9 + 3BD8F2CAE99DC1C8510D63A12D7A85AE73A36B263EED8ACF11AEDEA46D8ACA46 + 3BAC1AFE196A0B15C2D3C949551B7B3A7702D2704774AC0E11B9AFD5D722C707 + 0E5EA3F35566B8D1D72D13DA54524AF89AEC8C8711B2977A335666BAA05449CF + 2C84F8AD1D6EBDEAED849AC608C21CA4AFD216E4EA3D39D9424F7B390142382D + A72265BBED59E20E9E539048E8A5FE9214AF758192440B88DCAC5E035632E9A7 + 6284E39E13CA42EB70555BD4CE53EE88DD9C13982D26AE1ECE6899330FE191BC + C3EAA39A978556AB8832D335D4137B812CFDC7D55DBA6ECEC7C4D25A16F67D3F + 1B99F702B3886A34B74DAB22B3E7B3231835D8E2FBD697D5BA4A7F588448FA70 + 769233CCD3D16FF497152A298B696ECC25A36CB9748DCF4DECE0D6020F504641 + F885556B9E135AEE81F2D2C6282AB0482D1DC71C788F05C6B340D7C7A7967F92 + 6AC6BF31BCB15EEDF78A76CB493B3247DC2775B33B1C1D973A5D6C7ABB4355F3 + 72CBD803DD7B776386FD0FE4A57A478AFF00729AEECF764FEEA7A7E29654F96D + 59FE4B309F62E0458167BAD0DD6012D14ED7E7F0E7759EBB94EA2BB9660C8E02 + D75E2CD6EBA40E8EAE9D8E24639C0DD6C5162FD3577AC4D04CA3F5A708DCD7BE + B2DAD6BC75D82800ADB8699AEECAB6804B4ED3DE6B99905757FC168350E93B45 + EA2736A29D8D7BBF100B87770DB2997343E244BB951586B742EA4E48CC429273 + D5A1F8DFE054A64E1CD8EAA8C7ABD7D447E2D1D9E41FCC1510D6BC20A9A47BAA + ED65C31B82C5A5D3DAD356E8EAA14D7285F574CD3821E0E71F157D16686DF86D + AF0FE595FF00856E335D996141C37A681BCADB8FFE472FDBB87D01041B88C1FF + 00E1B96FB44712749EA291B4F34A28EA0EDCB26D92ACCA2B1D256C624A592399 + A7C5A72B7FF05C3B19C3FB91E69948D270DAD90C8E7CD5934B91D18CFDF0B674 + 5A2AC94A3FC3A274AEF390FE815C834B0F63E8BDA1D2C33F73E8A70AB8657BF2 + E7EAD986E6CACE8ECFCAD0C8A16C6D1D035B80B7D6CB048F70CB0AB068F4CB1A + 4659F45BDA1B2471E3B815B6F19AEB8F2D4B0BE46156DF722D61D3A1BCA5CC53 + 6B65BD90B077566535232303002CA6B405E6F55AE9DEF72E8C523E31A1A147F8 + 83A968F4C69BAAB8D5C81A18C3819DC9F2595AAF515B74E5AA6AFB8544713236 + 93B95C5DC57E225EB895A90DBEDE5EDB731F86B4743EF3FCFDD694639DD894B1 + B2EE62D99F59AEB88D2DD672E7B1D2970CF4EAAFA8A311C6C89836680D18512E + 18E966582D2D7C91E2A1E3CBA2DBEAFBE4161B549532387685A794797BD74B46 + D69E12BE5F44492DB0561E907A9DB0D27D9703F27EEE01EA5647016D0FA3B132 + 791A43E77736EAAFCD46B6D78D0439D035FCCECF92E92D216F6C2C8608DB86B0 + 00176781D0E319EA26516CB2F05A5A2E2C31BB29ED38C3028B695A6E485BB296 + 4630D5C1E23673DACB60B63F4888B9E4C2222008888022220088880222200888 + 80222200888802222008888022220088880222200888802222008BE39CD68CB8 + 8007892B5D537EB353BCC735C69DAE1E1CC98C83648A1F55C4CD154D50E825BD + D307B0E08E76EDF55E5FE94F43FF00DB94DFEFB7F756746CFD2FEC63289AA2D2 + 69BD5562D45CFF006457C555C9F7B91C0E3E456ED41C5C5E1A3217E5CC0E5FA4 + 58060D551324072D0A97F496AC8EC7A25F4CC20495AFC63C703FF557B120024F + 40B917D296FAFBDEBBA7B240E259072C65A0E707C55CAD928B8E484965A31B81 + 36A34F6B9AE2E6E1D2F438F3566AD5693A06DB74FD25306E0F20715B5EBB2F41 + C2EBE9D1CCFDCCB3CAA278608CC9348D8D83C5C545AF7C42B0DAF21B376D20E8 + 01504E39EA39A3B9C76DA59CB07DD3CA7AAC0D31A1E29E1655DCA67C86401DC8 + DDFEAB4BADACD6CF9285B7CBFED86E31EE69B8B5ACAAB55D13E1A7A690B46EDC + 0587E8F1592D06A7E5A86B9A5CEC00E571596C341425A69ADF09C78BDBCC7EAA + B9D7D4634BEBD8E7822EC607B9B2B1A06C03B7C7D551ADE197E8E319DAD6FE08 + C2C4DE11737126D6DBB6989E30D0E735B90A87E0CDEDDA575EC969AE7F674F3B + F039B600E574369FAE8EEB63827C8707B30E1F92A378DBA225A5AB376A2690EC + F3B4B54EBB9D3646E5DA5FC9292CA3B0F48CB1494D1BD8E0E69008214B98C6B9 + BD172AFA36716A9AAA9E2D3F7B984359080D6B9E7EFF00FC7F9F0EA2B754C73C + 2D7B1C1CD23620AAF5D06E5CEBB33113F53D2B1E37685A8B859E395A7B814857 + E64E46B4B9E4340EA4AD4AEF9C1ECC93592B4BDE9B64913E37C2D92370EF31ED + CB4FE4A9CD77C1FB7D7BA49ED6D143524E790FFD1B8EFD0F82E80D43ACB48DAE + A0D35C2EF4D14BEC978FDD46AAF5A685AB90451DEA94BDE70073B77FAAEAC65F + 888E2D87EFEE55CB8794CE4FA8A7D5DA1AB79268E7646D39077E523DC54EF48F + 1569EA7929EEADE57F4E63B1579DE74E535751F2BE08EA69E419E47B7208FD3F + 254CEB8E0DD34E5F516471A69BAF62F3DD3F03F3EAB5A7A2B2BF8E979FE492B3 + 1DC9E5B6E149718849473B65046700EEB2D7384553AB343D798AA619D8D69E8E + 07FBAB2349714682E01905C7FC397A73742B634FC5A51F86D59F993C163A2F1A + 2AAA6AC88494B332569F23BAF65DAAAFAED5983C91C0F023C0F505696F5A5ECD + 7563854D2303CFE2685BA455DFA3AAEFCCB7339293D55C1CEFBEAAD6FC386E39 + 362B4169B9F123424B8A5A89E581A73C8FDC61745AF1A9A5A7A9616D4411CA0F + B4D5CE970FBEAFED4B2BC31B320BA3FD2524A77329B53DA5CD2362F60FDFF757 + 0E99E32680BC801B738A07F948797FBAAC6F3C3ED3B72E62FA611B8F90C850CB + A705A9DCF2FB7D5F667AECEC15A96292FEED6D7D063C1D7F6FBC596B0034D5F4 + D267C9E16CE37C2E6F33246380F10E0570B8D03AE2CD23AA2DD74A960030395E + 566DAAE1C62B753C94F1D75448D778BCF31FAAD670A65DA4D7D50DD1DA55B75B + 6D1C464A8AC858D1D7BE155DC45E3AE96D3B492328AA5959558EEB63703BEFE2 + 17393B4FF12AFE1D0DC6E7565A4E795CF385B6B0F07DA1ED9AEB505EEEA798E4 + A82AE39C472C8BE77F2235A9F54EB2E27DD48924963A32EEEC6DCF281F056570 + D741535869D9355461D3E3201FEEA4DA7F4FDB2CD0865240D040FBC46EB13576 + AEB758A95EE7CCC74C06CDCABFA2ABF8AFDBE44A315133B52DE692CB42FA8A87 + B4103BADF35CE9AEF51DDF56DC8D35073B98E7E365FBD53A96EBAC2EA29E06C8 + 6271F03E0AC1D11A5A0B5533098C3A770CB9C47F3F9F4DAD2696EE2372DB115F + 6488CE6A28FCF0CF4AB2D341199616FAD3C65EE574E90B612E692D5A5D396974 + 8F69E5569E9BB60898D3CB85E83886A2BD2D2A9AFB229845B7966EAD14E2289A + 31E0B683A2F38181AD017A2F1364F9A5936504445032111472FDAF34658B985D + 7535AE9DEC3CAE8CD435CF69F7B5B923E4B2937D86091A055B5571DB84D4F14A + F9B5A513046D738E62977C0CE077373E40649F05FAD3BC72E155F5B9B76B1A37 + FF0089D99EDA2961C3B1919ED1ADC0F79DB63E454FA36633CAFEC4B95E338D8B + 1D178525652D653475349511544120E664913C39AE1E608D885EC082A0D6089F + 51116004444011110044519E216BAD35A12CEEB9EA2B8329DB83D9C40E6494F9 + 347EBD101265A6AED57A5E8657435BA92CF4B234E1CC9ABA36107DE0B9726EAF + E2F71178B371367D1B4B3592C6F7723E719CB9A73BB9DE3B676F1C74CAFCC3C0 + EB6C96D1F6CDEEBAAEE0E197BFB5380703DC7C73BECB734FA39DDBA5B186CEAF + 835A68FA899B0C1AAEC52C8F21AD632E1139CE27A0003B75BDE61E6B8A2A780D + 6EF5091D6DBCD5C15CC1CD138C848277C0C63CF1E7F02A45E8D1C51D5943AC1F + C35D56F7D5085AE14D3487BF186B4BB19F1690318F8636EB65BA0941E3063275 + B028B5B455EC980C382D831D90B4A70707864B27E91114004444011110044440 + 16B751DEA86C36B96E17099B1431B4B89270B64B973D2E756D5CD5B0699A09B2 + C7E0CA1A7AE7A0FE79ACA4624F1D8D171578F37BBE5D24B4E92E6653E7944ADE + A7C3F250DB468DD69A86A3D7ABAE3541CFDCB8BCA98F0BB4251D15BE3AFAC873 + 33B7008EAACA680D686B406B47403A2E8E934B6DFBC7E1441471BB2A0A3E0E3F + D60BEB6E2F7F3753CEBF778E155BA8692694D64DDC617025C7055B33CB1C10BE + 694E18C6F338AA1B889AD6E375BBC96CB64A48279435A7E8B3AB82D3CB92326D + FD496362C2F43798515EAEF4E65739A0E0733B3ED2EA9827120C82B917D1CECB + 76D3D57555771387541181F3FDD74FE9EA974B1B492ADD5E91AAE336BD88C65B + 92345F19F757D5C72C355AB2E705A6C1575B50FE464713893F92E2DD39DA6ADE + 274F7193BECED8BB3E1D55BDE96DADBD4EDACD3B4727F8D3FDF03AE3FE27FB28 + 6704EC0EB75A4D7CCDC4928DB3EF5642B73928AF722BB963600D8741B0F82C7B + 8D5368A827AB710046C2467CD7BF40AB5E38EA66DAACAEA38E4C3DC3BDBF8AF4 + 5AFB15142AE3DDEC1792A1B8CD26AAE24B2300BD8D932EF11D574158AD9CCC8E + 26B7668002A8381365965927BCD4B32E95DDC246EBA4747DB83DCD25ABA9C3E3 + F82D1733EECD797C5232ACBA739DA0967D142FD23F41C955A420BD51C1CD3D09 + 2C970DC9E42720FF0070AFCB4D0B1910EE859373A0A6ABA19E8EA621241330B2 + 4611D415E6F5DAE96A1B832D50C6E8E37E0A6AC6C40DAEBA6C636192AD8BAD0D + 2DD689D4F3B43D8E1B1EB854CF1B387774D05A95D70A06BDD6E95E5F0CCD1B0D + FA15BDE1971069EA606515CE4E47B76049DC2D4A2E504EBB17C2FF00C16279EC + 44B881C30AEA0AB75C6D25ED703CCD7316D7877C71D5DA2E68EDFA829E4ACA56 + 77798FDE036574433D3D54598A48E663BC8E73F92D2DE34658AEC499E918D27A + 9685B4AAB22BFA6D4A21A32AA3D2874E368C1A6A39A49CB721B8F155BEABE3AE + B6D5024A5B352BE9627EC1CD0738F8A9753F0A34BC72091B1608F3016D8DBF48 + E9B83B47321E668CE365AD6663FF001488B837DD949DA3425F2FB57EBF7DAC98 + 3A43925CE3BAC6D73A5A974DDE6DA29AAA479748D27BEA63AEF8A96DA7259410 + B399A30DE51D15776A8753EBCD494F336291B0324E6E67670A5A7539CE3CB966 + 1E22B0776E968E39F4D506772610BE5CACB1CAD3860581A2A67C56AA5A579C98 + E30D2A63100F60C8565D39D16BC3F7329651556A5D274F5D4CFA7ACA58EA6220 + 8E57B738EBD0F51D552BACF8331BA47D4586630BF24F6329C79F477C975C54D1 + 324072D0B4374B147203DC56F5A8D4ED6ADFCAEE4795C7B1C5723B5A68EA9114 + F1D4B434FE20718F7152ED39C5A6B9CD82EB1631B1711FAABE2F5A65B246E8A4 + 8592C673963DA1C3E45565A9B85963AB73DF1D2BE8A5393CD16EDCFC0FEEB0F8 + 758BE2A259FF000C2B31F991B6B4EA9B25CD80D3D6B1A4F838ADD3087B799843 + 879B4E551F74E185F6DF2992D356D9C039018E2D77C8AC16DCB5CE9E9047332A + 30D3D1CD2B2B5DAAD3BC5ABEE4D38CBB17FA2A72D5C55B9C4E11D7D097E3EF1C + 2DF50715ED153286C9492463C700ADA8718ADFE68B43058A8A16EE2469FF0001 + 38FF0064FECBF3FE922C3E737FBA7F657FAA69FC8C136FCCAFA1CE1D1C542871 + 234FE37139FF0064FECB555BC59B74523A2A7A27C8EFC2482A99F12D37E9CFEC + 670CB27BCE3B124AC0B9DDEDB6D6975655323C78672554375E24EA2B97345434 + AE881DB60B4C74FEA9BFC825AF95F1C47A979207C96A4B885B6BE4A238FA6EC6 + CBB92AD6DC52631CEA4B4778BB6C8392A0B6FB25F3555676F707BE3889CF7BCB + DCA6967D03414D2472C999A46F52E1B29DDBAD24901B1803DC174349C06CB1F5 + 354F957F9FFC2995DEC88E697D2F476D85B1C5034BBDA23753FB0D95D239B96A + D9D8F4F39C5A4B3E8A7F64B23226B4962E9EA75F4E92BE952B09108C1C9E598D + A76CAD89AD25AA5F49008D800094D4ED8DA000B246CBC7EA7532BA5966C46380 + 88B45AEF5659345E9CA8BEDFAA9B052C23619EFCAEF06347893FF13B2D526967 + 646E6AAA29E929DF53553C504318E67C923C35AD1E649D82A178A7E939A574E4 + 8FB6E9684DFEE7F7416822169DBF37788F0FCD53FA9753F10B8EB7F114667B36 + 94649DC6C790DC6DE3B733B07EBE03A4C747F0BF4A69285D58E8993CB08E792A + 26DF18E524E4F4E84E7C3CD6F697473B973630BE662584F0451D73E35F15A37B + EE37796CD6B906D030F66D7376232D68DFAF523F35B2B3704AC34EF64F79B8D5 + DC6A1AECB8BDE40774D8819F7F8FEEB4D73E32DD6B2FF2DA34458DF5D046397B + AC71DC75386BBA7F3DC34741C4ED6FA36E9FFB616991D4B527BAE2DC06E47811 + B788CFE8BA35D54423CCE2DAF38D88F37B169D570B341CE7BD66696918C12EF9 + FDE58370E0CE88ABB74949474D2D0CD21C89237B8004038D893D32A7361AA8EF + 368A6B9D2B98E86A19CEDC3874F2DBC568F5B6BED31A3687D62B6A9B55525CE6 + 36088F310F19EE9C6C0E40C8EA33D16E595E9631CC92C327153716D7621FE8FD + 7FBDE86E2FCFC3C96EAEAEB4CEC7C839CE794B585C08F23B007F5C02BAC6DF73 + 64E061D95C43C379AE7A8F8B32EBAF5134542C6BD8C0EC8E6CB4B401E677C9FD + 360BA7B495CA491CD0492B5E7C39CF4FD56B1DFEDEC53CFF00160B56378705FB + 5856D90BE204ACD5E7A71E5782D0888A20222AE7D21388B0F0E3404F728DCD37 + 2A9CC342C3B9E7C6EEC78E323F321652CB32964D3F1F78DF66E1BD2BADD481B7 + 1D432B7FC3A666E22C8D8BF1E3EEFCFC81A034D68AD4FC48BDC5AC78895B2CF0 + 4CEE78A91CE3D36C6DE031F41B6010567F06345B6E714FAD75A44FAEBA5738C9 + 136A3BD80EDF9B7EA4E7C7E3BE411636A7BCD3E9CD3B557395A0450464B5B9C6 + FE5D0AECE93411E5EAD9D883643F59F14B48F0E2A60D3F0DB449D9B705918C76 + 631F03D739FCFC49389668DD476CD6169FB56D0FFF0000920876C5A479FCC7CD + 50FC29B2C1ABEE978D5FA86963AB8EA5CF8618E468C65C3BC70318C03B7BCE46 + E17ABB466A8D22DB8CFA7B51C5416A7F7899642C2D1D7C075F0DBF521752AA35 + 7D35745662FDBC221CF1CE0B2B8AFC4FB4E8C8BD5291ECAFB9BC10228DD9E43B + FDEC7BFC3AFC36CD7DC1CA3BED4EB93AF3503D9465EC70858FC35D20734B7206 + DB60E73E3F9922B4B44E5973FF009A2864D41797BF9454CAC2E8984EC39187EF + 1DC105DF0E5DB2AD2D09C2FD4777AD7DF35C5C676C5D99708B9F2EDC0C0F1C0D + FA7BB185455745D8A73F89AF65D97D5869BD91D3DA3EF22A434B256BC67196BB + 2158B41273C60AE4EF473BD36A3525F69296679B7D3498A76B8F405C7DE7C3F5 + F3DFA82C956D7C6D195A7C4211B12B20B66661B6C6F5111710B0222200888802 + 22203CEA9E63A695E3AB5848F92E3BE2A442EBC73A864A4E1B545A0786D9FD97 + 61D5B5CFA5958D197398401EFC2E40D73FFBF7ACFF00BE3BF552C6C0B3238DB1 + 46C898006B1A1A005FA5F02FABD951150AE297820C89715AE9F66E919DCD761C + FCFC9529C1CB3BEE778A8BD5412435E7973E6AD1E3D534B2E95ED230795A0E54 + 5FD1FAAE96AED0FA36604D13FBC3C56970D8576EBA6EDF6216E705C5A6295EE9 + 1B80ADDD3503991372144747DB010D25AAC7B7D388E300051E35AB53972A15C4 + CC60EEAD2EB6D4149A6F4FD4DCAAE40C6C6C247C967DE2E54969A092B2B26645 + 146D2E25C70365C6FC77E29556BABD7D83660E3431BF1CCDFC67A67E1FCF879C + 8C73B9394B1B7B91E9EB2AF889C4892BE405D0F6BDD1E00780F92BE68A9A3A3A + 38A962003636E36F350DE146968EC969654CACFF001DE36C8DFE2A6CE7068249 + 000EA4AEC70CA52CDF3ECBB19C6160F2AFA98E8E8E5AA9480C8DB9F895CBBAEA + E151ABB5B3282271730C9BE3CB2ACBE35EB9829681D6FA29413820E0F52A27C1 + 2D3D2CB3C97CAC8CF3CA7B9956E9A12E23AC4FFE288D92E545B3A1ECF1D0D0D3 + D1C4CC06340574690A0E48DA70A13A4ADE5F234F2AB66C54A2289BB782E971AD + 4A8C7A71EC8AEB8FB9B7A6606B02F478C8468C05F578F6F2F26C119D5B65A3BB + DB26A0B852B2A69651DE63874F783E057316BCE074D4B5AFABD3B580B32488A4 + 3CAE1EE07C575F4D187B4E547EF36864ED3DDEAB6E9E959F0D841A6B74719C56 + DE2058A6EC9B1D4803A641231EE5208750EBC8E26B391DB0F18CABDEE9A7A463 + 9C62E66FFAA70B453D8EAC138925FF0078AEA55C2299EEADC7EDFF00A43A925E + C53D72BEEBDA880B5AD783E18610B452E9CD5D781DA57CD246C775E67615EC6C + B59D39E5FF0078AF8CD3D29764B095B10E07A74F33B72BE9FF00A63AB2F05476 + 5E1D5B63631D5A1D512839391B2B334B5AA2A40C8A969DB1B06DDD0A4343A69E + 48CB3E8A5766D3C2320967D16FF5749A2AF9695FBFB90E57279665E97A77B58D + C82A694C30C1F05816EA26C2D030B66D180BC9EAEEEACF26C4560FABF2F6070E + 8BF48B50918351451C80E5A169EBEC71C80F702932F85A0ABEBD44EB7B330D26 + 56F71D32D7670CFA28F57E9C95A0B704B7D92323E455C7253B1DD405873DB627 + FE10BAB4F179A5896E8ADD699425CB4951CBCDDADB299C4F53D9E33F2216964D + 0D6563B3F6596F9F2BF1FA2E84A9B1C4FF00C03E4B5D3E9C8DD9EE05B51D5E8E + CFCF5AFB11E492ECCA29DA2B4B8EB6EAECF8FF008C3F65F83A334A8FFF004EAE + FF00C61FB2BAE5D30C3F83E8B1DDA59B9FB83E4A715C31FF00C3FCBFF63E3F25 + 312E8FD3AD19A7B7D503FE79863FB2FB1693B431E246DA9AE78F17BB23F4572F + F4B37D81F25FB66976FB1F457467C360B6AD18C4DFB95453595B19CC14B145FE + A316C69AC72BC8CB49568C1A65831DC1F25B1A5B046DC7702B7D629A562A8A5F + 45831D36FB95D5B74D3DC4659F452CB469B6B304B3E8A5D4D6B8A3C7742DB46D + E5635A3C000B91AAE33659B22C8D691A6B7DAE3880EE85B68A26B06005E88B8D + 65B29BCB2C4B011115664F8F7358C2F7B835AD19249C00170FF10750DC78DBC6 + 836E8A49069AB54858D8B9800581C3271BF78F8F5F0F01B761711E4745C3CD49 + 23490E65A6A9C08F022272E4CF462860FE9BB856085C2A24A9773C9BEFD31FDC + FCD6E68B4DD6B167B1252E58B4BB96DD34349434105BEDF4F1D3D340C0D6318D + C63F9FCDD4278FF25C62E15D5FD94D7BA5738097906486EFEEF30DFA79A9BAFA + 447244F8668DB244F1CAF6B86411E217A7B6AE7ADC23B15147F036E1A759A520 + A1B54F18B838735635FDD95CFF00D40F0C7C76254F6FDA5A0D51649ED95ACE68 + E5196BB192C70E8E1EFF00DCAD06B1E09586E550EAFD3F5525AEA8EFCAD3DD2E + C0F7E46E3DFD7F25168E2E32E85A80CA3A975E29410035E3B5C81BE002323F2C + 2B21C45D54AAACAF1EDB6E8A9D7BE519757C38E2550583EC9B3EA9653D3B090D + 8DCF706B987AB5DB1DBC7183BFC495FBD1DC2CA6B5C0D9F50BDB7ABA170719A5 + 0E7363181DC1CC4F300EE63920673B8D82DADBB8F8CA69FD4B5AE959EDD20716 + BE5A7CE1BEEE577FF5056B6959AC5AB2DCCB9D8EB22ABA7775E5FBCC3E4E1E07 + F8163457E92BCC94567EFF00FE1294ECE5E4CEC466D96C7E5AC6461AD6EC0018 + 002B1348DB64639A4B4AD95AB4EB0107942A538FD57AC2F9A8868BD395CCB6D0 + B599A97364E52F1CE5A4B8F5236CE3FBAAF5FC515CB9224615E0B535AF1CF87D + A222753D45D05CABDBB0A6A221FBE3C5DF77DC71923C956B3FA4FEADBA569669 + 8D001D086E40A8ED247786F9696F9F928BF0E3845A728266D7DC6A9978AE690E + 7733B201EE9E87AEE0FECAD86434F0B58C8696289AC686B406F40061726BE1AE + CF8A5B7F92F4F0431FE917C4FA681D5759C3FA56D2C7FF0048E6C330207C4BB0 + AD1E18F1DF48EB2D3B5B729E6169A9B7C4E9AB29677E5CD6346EE6F4E6F2C633 + 920788CE963735BB18A32D3D47200B9E78E1C30ABAAD614751A5A99F0415F206 + CCC8F66824FC3001FD0F41B08EAB41D38F325930996DD57A5356CF2D6D458F45 + C95B6DA790B44E5EECE33804E06012AABD73AD2F7C71E2458FD62C335B6D546C + 6B5D0993981209739F93E277F0E800DFC6E2D17A42874B695A6B2454ED908687 + 4E4B73CCF2064FD3E9E6B730410D333922A66443DC0856D5C2F2949EC32208A3 + A7A68A9A26B591C4C0D6B5A0003E4AA8F4A1ADB845A362B75BE09257543B2FE4 + 3E1EF1F123FDDF95B3D4AF57C0EA987926839E21ED0385D3BEAEA54E09E0C1CE + 7C33BE6A28349D352DBF46554B4F4ACC49282EDCF524E198F1FC86161EABBE5D + 78817FB7696A4B6D4D052B27E5A97B9C40712E03BC3C31E5BF8ABDA0AAAEB952 + D65BF4F4115352B5DC9255F2820F9866DB9C11BE7F3DDAE59F63B5515A28994F + 4D4F1B5D8EFBF182E3E24E31FCF21802AEAEA6E874B9FE1EDD88A8453C9E1A6B + 4B69ED3143152DA6DD131E1839E52DCB9C76EA7F21B745A7E3456D75BB8755B5 + 1471BDF2CA3B36F201B673E7EE0E52D2BF4F1DA533D92B43E103243BA2B654A5 + 5B847624730703F5ADCB4B52BAD8DD3353555D5951CEE943F1CDD035B800F424 + FCD75D70EAFD535D047EB9492D1CE581CE8A46905BF3EBF1542F1138ADA7ED05 + D6BD33430D75D5DDC6C8C6F308DD9C7E7FDBA75DC298F046A2FD4F696D56A294 + BABAA1DCE5AEFBCD6E1A003E5D3A2D6A612BAB752F894577C109622F2751222F + CBE4646DE67BB017962E3F48B5D3DE2922760BBEAB18EA4B7838E6FAAB969ED9 + 76883748A35FD5B49CB9C373E5941AB68F7E6E51F9AB3F057FE931924A8A3035 + 851970043467DEB369750534CEDB18F71589692E8EEE264DD2E3BD73FF00BF7A + CFFBE3BF55D7F04F1CCD0E63815C73C44AA8A978ED586538FF009638FF007546 + 31DC16A0E8BEAF8D707343DBF75C3217D5ECE89295716BC1066AB55DADB78B15 + 451B865C5A4B42E69B7D556F0F35D0A8735FEAAE7FF88D1D30BAAFE1D5447596 + 85B5EA263DEF6B5931F31B15CAD5D3651775EB59F26719582C1E176BFD317AA0 + 64D4F71858EC0E66B9D82148B56716347E9BA291F35CE19656B768D87249C2E4 + 9A8E0DDF69EADCEB6D5490C79DB95CB7167E0E5754BDAFB9D5BE423A873B2B9F + 7DB0B9F361E48F2C9763F3C53E2D6A2E2255BED5696490D0176006E72E1EF5BC + E14F0F63A085B5F708F9A43BF786E4FF003F9E730D31A0EC9A7E212BDB19737C + 4EC179EAED7965B2D3B9914AC748D1B01D02A1249FF5365E0CC618DFDCDF55CF + 4F470992691B146D1FCC2AAB88BC49823864A0B61E671DB2D3B950DD47AC6FDA + AAA4C144D93B3271DDCF45B8D29A123672D55CC99A6777837A80B6E11D4EBE4A + AAA3B78F65F5332928F723BA6749D4EA4A9170BA97F645DCC01FC5FCFE7BAEFD + 2B678E9E28A9A08F96360000017E6CB680D6B638A3E568E800561E97B2105AE7 + 37E8BD4534D5C2E86B3993EEFF00E91AEDB9B375A4AD9C8D692D53BA58831802 + C1B55188631B2F6AEB8C148DC170242F25AABA5A8B363622B08CF4515ABD5914 + 0E20B9BEE0B106B667577200A31E1FA892CA88E644D57E1EC0E1D1438EB461C9 + 6F272A7F5AC6EC72729595C3B51FA4CE51269E8637F568585259E271FB8169BF + AD63C632DE64FEB4881C3F932AE8E93571EC8C6C6D7EC58BD90BF4DB3440FDD0 + B4FF00D6918C1772617D3ACE33BB7930A7F87D6781B12086D9133F0859B15331 + 9D00512FEB58CE393953FAD63C632DE6554B45AA9774676266000BEA858D6B18 + 38796E53FAD58305DC9855FA76A3F48CA2688A1675A30E4B79309FD6B1BB1C9C + A53D3B51FA465134450BFEB58F18CB79906B58C1C3CB729E9DA8FD23289A2285 + FF005AB060BB930875A30E4B79309E9DA8FD2328999683E0BE18DA7C1437FAD6 + 37639394A0D6B18D9C5B94F4ED47E91944C0C2D3E017CEC19E414406B560C177 + 260A1D68CDC8E5C2CFA7EA7C0CA25FD833C82760CF20A2275A4648E5E55F3FAD + 63E5D8B7993D3F53E06513011347805FB0C03C14346B58C121C5B95F06B560C1 + 77260A7A76A7C0CA2698450B3AD19B91CB84FEB58C6E4B70563D3B51FA465134 + 45087EB8881382CC2CBA4D5D14E400E6FBC2C4B876A22B2E23392588B0286E70 + 550D9C0159E0AD4945C5E199C1AFD4D6E177D3B72B4993B315B492D397E33CBC + EC2DCE3F35C59A72F573E096A5AFD21AC2DCE36E9657490D4C6DC820F4734F8B + 4E3FF42083DC4EDC286710F49D9353D01A6BD5AE9EBA319E5ED1BDE6FC1C371D + 3C0ADAD1D8E32C6704595258356699BFB79AD776A7909CE185DDE3F91DFE9FAA + DCB007E4C6E6C807B272AB0D65C04B2C75124D60ADADB53C92435A79D83DC06C + 47D54363B2F16B45B8BED95E2ED4CC04F661DCC40CF40D70EBF00BD2C5EA1473 + CBCCBE5FE887323A057DC9F71F7119550687E34C75976FB235750BAD95592D0E + 2D20647810727CFF00992ADE05AE01CD3969E854EABA36F6EE48D6DFF4FD9350 + 537AB5DADF0CCC3E25BB8E9D3CBA0E9854E69B8AA384BC70B75AADF702FB4DD6 + 5644E85CED8073B9707C320EE3F4E82F50325730F1F221ABB8AF4364B2C9CD53 + 90C7B8386C493E39F78F25A7AE50AF1625BE7EE3B977F137D2329AD45D62D0B0 + 32EB767F74D481CD1C44F8B47471F79DBE39507D1FA4356D6DCEB3596BEBDCF4 + F1CCC7CB3B448438823241C741B9DBDD8C29CF0F786B60D156F81CD89B57752C + 065A870CEE46E07BBDFD7AF4CE0413D26F51D532928B4D5BA77B66AB781235B9 + E9FB75F905AD2D372C7A935F4416C45EBE3D57DADC754E83AB70B553CC41A6E7 + 3CCE6B4E798B49208F3DCF53E0ACDE0AF107FAD2D6EA7AB608EE34DDD95BB77B + DF8FE7D703DB42D8E3D37A5A92D11E0CC1A1D50F1F8A43D7F21D3F2CF8AAFB43 + 38E94E3DDCAD1451B04155DF2D1D181C03F037F761742CD1CB4718599EFB35F5 + 2119F33C17FAAF78F1A8AE9A6F4AC35D6A21B3F3F287100E321E3F556191DE23 + DF854CFA505E0368ED7A721C3E6A8943DCDC1C81B81FDDDF2F9E756FFA4D7926 + 416F9AE789F6A8ADD555D3C4197120C382C25C0E0E700646C4755D29A7E5AC97 + 4D5BDF71DEADD10748797072464823DD9C7E4B9E6AA0378E2CD834E8676F4F6B + 8626CCD0720900171F96DF92E937E072B40C06B4058854ABD44E316DA585BF9F + 73116DACB31EE1570DBED7575F507FC38222F3F90C9FA02B9FADDAC3897AB28E + BFECB96165B7B57479CB1AE780065A36CEF9F86F83E4A7DE91B7DFB27411A189 + E04F5CF0C03C71D76FA7CFE5AFE18D9BECBD216EA42D02474625936C65CEDF7F + 7E303F257E9F4CB59A89426DF2C56F8F2C8CE7CAB62233717F5AE9534768AAB2 + 085921E588398E6F3EFB9DDDBF5F9939DC92AFCB256D657D9292AAE14E20A991 + 81CF60CEDF3DD50D2DB5BADB8EB1DBCE5D476901AFC03D5BD41C7F98E33EF0BA + 10B5B181134F7583942D7AABE4BE718C9B8AD9124DB5B9857FBA4564B2D55D66 + 00B69D85D82719C0CE33F4FCD50572E20F1135F50CD058E87D56DF2BCC2F959B + 646D91924E36FA1DF6534F499BE3ADFA3A2B4C0E226AE786E0788D89FEEDFE75 + FD70EECA2D3A56DF4019CAF1107C9B60F33B739F78CE3F25B1A7D37E36F9424D + A8C56F8F764672E55B1AAE1E70FEDFA700AA900ABB9BF792A1C33CA4F5E5CFF7 + EBF056A582925748DC02BD6C76674E5A795585A7F4F88C34967D16F6AB574692 + AE956B0915462E4F2C9F4F511C70F3B89C1240C0F1DFE5D142F525FCB39807E0 + 0F7AD8DEEA9D1D047E2E2D76F8E8398FEC3E4AABD5D5EF0D90825795E17A2575 + B867674DA673839B3CEF9AA64ED0B1B21EBE6B551DEEA24C9121DFDEA155758E + 92AB049EAA47658BB568C6F95EF2CD253A5AD651CDB25993489076F30FC4578D + 4D5CFB9E62B3BB0C8F05E52D217646CB9B1BA19DD11C334D35CE78F04BCECB3E + C9A9646CA1AE90E33E6B4F7D8844082A2F4B54F655E1A4F55D4A74F4EAEB7844 + AB9624933A2F4C5F8BB97BF90573FF00A54D92A2DBAD21D4948C3D855012730F + 07788561E91AB7F24649533D4561B7EB0D292DA2E630D2331498C98DD8EABC17 + 17D22A6CD8EAEA74AE30534543C34D5B4977B3C50D44ED64EC18193F45351B8C + F8798547EAAE14EB1D277174D6C63EA698B8F24B01C83D7AFC9675B2F5AE68E9 + 442E827C8EA0C44AD5D2EBECD32E56B28E6ECCB8B217DC1F22AA5FEA4D6BFF00 + EC4DFF0082562DD2F1AEEB21C46D981E9B3085B72E30DAC460305B15B74B7D03 + 4BAA6AE28F1E1CD92A217DE29DA2803A3A43DB49D36DD57834A6A7BA481F71A9 + 7C6C71FC6EC7D16FAD1A06DB4D875417D4BFCBA051855C435BF922F1F65F722E + 71891FBBEB6D4DA8AACC342D95AC71C000158B41A12EB72ABED6ED3BF9739209 + 56B5B2C5053ED4B4AC8874EE8521B7D8E4908EE15D3D3700AEAF8B533CFC97FB + 2A95ADF621DA6F4C52DB2010D34237EA48DCA995A6C8F908EE7D14A6CFA68EC4 + B14C6D5626440658B72EE254E961D3A5617C88A837BB349A634A3A66978E46F2 + 633CD9DF3FFA29AD05A5B4CD03B871E4B2E829DB4EC21A319C2C95E5355AEB2E + 93CBD8D88C5235B77AA3454C4B43738F3FF82AC352DF6A017BB2CC7FAC7F6539 + D6AF7358403E0A98D5933C736FE2BB7C0F4B1B30D909B663CD75AA9E72799A7F + 32BF4C9AA5F8DC7CD6A6DCEE69467C548228DA1A17A4BECAEA972244229B3E35 + F3E3191F35F43E669EBF5598C8416E72BF4200B53AEBC13C185CD2F5FD50BA57 + 6F9FAACD108CA7623CD3AEBC0C185CF2918CFD539E61B67EAB34C03CD3B0184E + BAF0306107CAD3B1FAA734BD7F559A200821194EBAF03061174AEDF3F54E7948 + C67EAB37B11E68601E69D75E060C2E7986D9FAA07CAD3B1FAACDEC06104013AE + BC0C185CD275C942E91DB92566884653B11E69D75E060C2E794ED929CF28DB25 + 6698079A760309D75E060C2E695A762539A4EB92B34401042329D75E060C2E69 + 481B94E7970464ACDEC02180275D781830B9E507A94E69078959BD80C2080275 + D7818308BA5CE72539A5206E566884653B009D75E060C2E7970464AF39E49797 + 193B2D89802FC3E9C1F15957ACF61823F51533301EF15E5477D961A800C87E6B + 3AF50362889CE541ABA5736AFBB90BABA3E96AB31C114DC5976697BFB9E1879C + AB161BFD0D2DA64AFB955C34B4D0379A49A5786B5A3DE4FBF654068DA8930DC9 + 502E3A576A2D5FC40B7E80A5AC920B606B2491B19C6496E4B8EE3240240F774E + A73E4B8D68210B363B16D2950AC279C4CF49E74D5B25838616C75CAB0BBB315D + 247919CE32C67CB05DFEEAAE68743F11F58D4CB7ED61A86A9B3C8DE66C45F976 + 3621BEE1B9DBC3C958FA0342D9745D188A8A9D8FAA2D02599C325C7C7EBFD87C + 54A83DC1E1D9DC745469B8772ACC9E3E9FECE636555E8EFAAAE149A86E5C3CD4 + F525D2C25CEA2ED483820F79A0FBF73D71907C49CDD53D9A29892D68551716F8 + 6B26A4AD8B5269EAB3437BA7C1E60E239F036DFC0EC3FE18C98E4F171EABA923 + B4CF79F5780F71D346E635F8E992E6F78FD5590B6DA33179CFF241C326A3D28A + 6B1BEF76BB1DB190D4DEE29F334B16EE8803F7091D4F5241E9F995766908AA21 + D2D6DA7A96E268E06B5E3DE1A07E8A0BC32E0F52E9BB89BCDF2A85757750F7F4 + 69F31E24F4F0DBE4462715F8BB4B6893EC6D2405C2E0FCC6E73073358771B79F + F6F8E76CAB5C66EEB7BBD92F7249616092F14F88162D29A62A8FAE325BA3D85B + 0C2C20B9A48EA7DDBFE7F322A9F45DA16DFB515CF555CA57C9581C793989277E + 6DF39F77D578E91E1CD656D44BA875817D4D64B99194AF25D82771CC0FF6F9F8 + 852AF45FACA436AB95B62A5647341377A4C6E46361D3FCA7E696E96EEAD765FB + 279C230A69E522E7712E2493925511E90623B5F1334EDEEA6077A9325617C9CB + 91B3C93F423E6AF65A4D77A62D9ABF4ECB6BB8C40BF1FE0C807798EF31FB78FC + 88DABE12714E3DD3CFD8C9ADA3B850416C92EF53551368638BB574DCC0B4B7C3 + 1E79F0F3CAAC78181DAAB8977AD5B514E4C2E91C627737DCC9D80DF718C8FE05 + 8D4BC13D5F255B2C153A865164E7E72D123B946F8E980338FF00D5581357693E + 0F69436CF590F9F9399918765D23B0067C71BFF6F12306AD5EB25A9946538F2C + 63BBCF923087293ABFDDADFA76CD3DE2ED3B608626E5B93BB8F801E676FEFE00 + 91CE9A5CD56B4D6D5BAEEF43928288974208D8F28C8C7C00CFCB3D57E68E2D5B + C58B8B6B6FB2CB496185E4B1A0603867EEB4789E9BEF8C0CE7002967131F4FA6 + B86F3D2504429D9206D2C0D66D8E6EBF300E4FBD6D6969767FF55AB108EE979F + 9919CBFE28F1F46EA465DF53DF754D4806574843011E649C8F963F3F9DE4D05C + F03C49509E08D81B61E1DD1348C4D523B67EFED60FF6E5FE6C26B33D94B4B2D5 + D43C450C6C739CF71C01804E56BE9B2ABE79777B9614371ADCDD47C5CB3E9F61 + 73A18087CCCCED8FBC48DFD9C7C9587515715A6CB5B7497943296074801E8481 + B0FCCE02ABF45BE3BF717EFB7A8A6754D3401CC82539F17728EBFE552EE344CE + A4E18D4B1A79455D4454E4FB892EFF00FCADED0CBA5A29DDEF26DFD8A67BCF07 + 87A30DB79E82EBA9E73CF3D5CC435C739C753F3CB7E47F3B81B82E1CC7033B95 + 17E1559E9ECBA02D705396BBB585B239C0632480EFD71F9293F83879B48FA2D2 + D2C5C6A4DF77B971CF9C4A7FF55F1BA86D61EC9A928F0F900DC600E620FBF721 + 5BF62A6ED6668C78AA775C691D53A47585C359D04D18A495C79B9803DD73C777 + 71D771D3E6AE8E18560BBDAA86E2E8C46678C3CB41CE0ADAE1B74614D91ED2CE + 5FFD14D89B922D4D276C688DA4B54DA9699B1B4602D469C8DAD81B81E0A40DE8 + BC9EBAF94EC792F8AC221BAA98E8E9E28F3D187FFE4E5566A481D2B5E15C3AB6 + 2E795A31FF0057FA955E5E285DCE7BAAFE15C415373523D5F0C8C254F2BF729D + ABA27B2AB2478A915925308046D85BAAFB336577306E0AC68AD32B3380BDE59A + DA3575AE67D8E4EAB845B09B70DD1B3F58763AAF09AADEDCF79650A094F50BCE + 6B648ECE173A2E8CEECD6F4EBFC11BBC48E9812772568E8EDEF92AB3CA7AA9AB + ECCE760159545686C4721992B7A3C468D2D6D459BDA4E0D394D4ACEC7EF4ED31 + 8831BE4AC7B1B4FAB869F1518B4503B981E5535B4405A00C2F03C5B882D45988 + 9D6D728461CABD8FCDCAD8E969439990483B8D943AE941726121953301F156BC + 5007533410B0EA6D91C9D5A15BA3E23D2494964F1F641393C14DCB4D7704FF00 + CA66F9AC492D55B2B8BA4925713D72E2AE27D8E227EE05F8FB062F607C975E3C + 6E11EC914BA8A861D3D213F70FC96D6874CBC91962B3E3B2443F005990DB2267 + E10ABB78F49AD8CAA882DBB4C018CB3E8A496FB1471E3B8148A3A6637C02F66B + 00F05C8BF895967B96282460D35047181DD0B3591B5A3A2FDA2E7CA6E5DC99F0 + 1EF91EE1FAAFABE01DF27DC3F55F5458343AAE93B680BC0CECAA0D536C710F3C + AAF9A889B2C658E19054375058F98B8866415DBE15C43F0EF0CB2B8466F0CA3E + 081D149823185B48253800A935C74EF2C85CD6AD7BACAE1D3AAF512D6E9EEF89 + 97AE1D37F94C46CE718CAFA673E6B2FECC201CE72BE0B6BBF12ABAB47925E997 + F8317B738EA9DB9F3595F66BB3EE436D767BA764EAD1E47A5DFE0C5139F34EDC + E7AACA36D38D8EEBEFD9A7072774EAD1E47A5DFE0C4339F34EDCE3AACA6DB5DF + 893ECD767DC9D5A3C8F4BBFC18BDB9F34139F35946DAECF74EC86DA71B1DD3AB + 4791E977F8317B739EA8673E6B2FECD38393BAF8DB6BBF127568F23D2EFF0006 + 2F6E71D53B73E6B2BECD767DC86DAECF74EC9D5A3C8F4BBFC18A273E69DB9CF5 + 5946DA71B1DD7DFB34E0E4EE9D5A3C8F4BBFC188673E69DB9F3594DB6BBF127D + 9AECFB93AB4791E977F8317B73E69DB9F35946DAEDB09F66BB1D774EAD1E47A5 + DFE0C5EDCE7AA76E7CD658B69F15F05B5DE29D5A3C8F4BBFC18BDB9F34EDCF9A + CAFB35D9F721B6BB6C27568F23D2EFF062F6E7CD794D3B87E22B3FECD763AEEB + E3ED65C005956E9FC8F4BBC8DDC66748C20925479F42F9AA73CB953B92CDD73B + AF4A6B3318E079375B95F12D3E9E2DC4DAD3F059CA49CD981A7284C0C6E46E55 + 67C74A6BEE92D776ED7D4103A6A2735B1CC43721843705A7E237F0F1C7457B5B + 6DCEE71DD5BEA9B2D25C6D72DBEBA963A9A699BCB24523721C3F9F25E4788F15 + 8DF6E11D5E214D7D055C7D8ACB476B7D3DAAE863A9A1B844D9DFF7A17B807E7C + 76C9FE7E78DE3AAA91B27666AE1E6CE3193FB2826ADF47FD3ECAB92AEC9595D6 + C73893CAD3CEC1EE0363F32543AAB837511C849D4F5C4F9F623FFA974F4DF89B + 629C527FBE0F2136A2F0CB86BAFB64B7547635B75A6A77E39807481B91F990A1 + 3A9F8DBA56D4D7C3452CD72A81F75ACCE339E993D3E47F68847C1EA19250FB8D + D6E35447B2433F7525B070FB4FDA0B5D496988CA3FEB251CEEF8EFB03F05B6B4 + 3ABB3F349457DD95BB57B1019EE7C4CE244BCAC2EB3DA1FD5C72C691B7E6EDDB + EFC1F2537D13A0ACBA65A258233577077DFAB9477BFD91E1FDFDEA6D4B6B99E4 + 0E52A4569D3B23DC0B987E4B62AD3E9747F1B7CD2F2CADCA5223F6FB5C93B877 + 4AA66D927FA29E34D6535C98E86D55C4BA393079435DBB4E7C7C01EBE3E2BAEE + CBA79AC00967D16B78A3C30D3DADEC4286F14C79E3C98678F0248CFB8F97B972 + 3887118EA24A29F67B16423CA435B79B449036A62B8C0E85FBB5C1D907F31B2F + 49AE76AA6A61555572A78603F8DCFC0F99C05535EFD1DCD092CA7D5D5C2207BA + DF57E9FF009D6A19C1A0D708ABB5157D5400EEC0CE4CFE792B62A86AAD8E6315 + F732E7146DF891C68A4A7CDAB46C6EAFAD7F74C81A4B4123C3DF93F4F1517D23 + C3DB8DF6E2DD41AF6796A25243A3A5738E7DDCC7C063031D7E1853FD2FA1ECD6 + 103ECEB7B5B2F4333FBCF3F9F87E58531B75A2595C32D2B769E1B083EAEA65CC + FC7B22B958DEC8C1A2A20591C1044D8E2600D6318DC35A07800A09C78B1CB555 + 7A6285CFECE196A1C5E4F41DE6004FCD5FBA7F4E9CB4B99F45BBD47A06C9A8ED + 4DA3BBD2F3B5A72D730E1CDF815A7C4F894250752ECCCC20D3C9426A2E2BE93D + 216EA7B7D1BCD7CF0C6D6B2288E71B37033BF81F7F4DD57D72BB711F89B1F2BF + 367B2C9D41CB03C6DF9BB71EFC1F257AD6706744D96B8D6D35A4D44CD1B7AC3B + B400F9E3183F9AF296D323E5C066DE030A1A2D34350B9AE97C3E16C4A736BB10 + 8D01A4A874D5B9B4342D2E738E6595C3BD23BF6F72F1F490A5745C268A4C118B + 94393FEC48AD8B269E7B9CD258A497ED056CD51A5E7B25DA12E825196B87563B + 070E1F32B67896B6A8D5D286CB182108BCE5957F0E6BE899A0AD92CB5F0F2B29 + DBCC79BEE80D19F960FC969F5C71774B69B67654B38B8D5F8321208F0F1E9E27 + CFA2F0BC7A35D35BE27320D5D5DD9784629B007FE758166E13E9CB0CBDA0A575 + 7D40FF00ADA9EF6FEE6F4F9E569E96BBF511518B49792D94D22095376E217139 + ED8A661B6D90B813CD96B5C36FCDDBB7DF83E4AF4E1E5232D141496F85CE7470 + 303039DD4AC7A2B548E2006607C14C34E59240F692D2BA6F4FA7D1D52C3CC9F7 + 6CA79A52658DA6652E85AA4ACFBAB4561A430C4D042DEB0602F0FAB69D8F06CC + 7B1ADBC41DABC1C7E1C28DD75B79F396A99CAC0F58D252B5DE0B4250CBC9D2D3 + 6ADD4B057F359B27207D178FD8BEE3F253F750B0F805F9F506FB2A71B6F8F693 + 3A2B8A79219F63FF0094A7D8FF00E52A67EAAFF61BF25F5B48EC8CB5B8F828F3 + DBFA998F51642BEC51EC2F586CCD073CAA69EA4DF657E9B46D1E08DD8FBC9907 + C5191DA2B6F2E3BAB79474DC98D965B29C0F05EEC600B11860D1BF56EC3EC630 + C017E9115A681F303C9303C97D440303C91110044440111100444400AF19A30F + 6E08057B214329E0D255DBE2767FC31BAD4545A599DA3014B9CC07C1793A069F + 0FA28BE6F666ED5AB70214FB38CFDC5F8366FF00229A9A569FC3F45F3D51BECF + D14313F26DAE26C85FD8C3D84FB187B0A69EA8DF67E89EA8DF67E89CB2F267D5 + 2442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59F91EA72217F630F613E + C61EC29A7AA37D9FA27AA37D9FA272CFC8F54910BFB187B09F630F614D3D51BE + CFD13D51BECFD13967E47A9C885FD8C3D84FB187B0A69EA8DF67E89EA8DF67E8 + 9CB3F23D52442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59791EA92217 + F630F613EC61EC29A7AA37D9FA27AA37D9FA272CFC8F53910BFB187B09F637F9 + 14D3D51BECFD13D51BECFD13967E47A9C885FD8C3D84FB187B0A69EA8DF67E89 + EA8DF67E89CB3F23D4E442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59F + 91EA92217F630F613EC61EC29A7AA37D9FA27AA37D9FA272CFC8F53910BFB187 + B09F637F914D3D51BECFD17DF541ECA72CFC8F54910AFB187B0BF4CB3341FB8A + 67EA83D94148D1F8563965E43E2922374B6CE523BAB6B4F44037185B36D381E0 + BD5B181E0B31860D4BB592B0D05C2D2C9987BA146EBB4C35EE2431588580F55F + 974119EA174E8D7594AC2673E4B98ABCE9419FB9F45ED0695008CB3E8AC8F558 + 7C97D14F10E816D3E316B5DC874D10CA1D371B08258B7D45698A203BA16DC46D + 1D02FD0002D3B75B659DD925148F18606B06C12A220F69185EE8B5799E724889 + DE6CAD9F3DD519A8D2C0BC9E4FA2B3DD1B5DD42FC1A688F50BA34713B2A584C8 + 38265694FA54070CB3E8B7B6DD3D1C6465814B853443A05FB6C6D1D02CDBC52D + B163214123068A82389A30D0B31D10E5C617A81845CE959293CB27834373B636 + 7CE5B95AB8F4F47CF9E41F25312D057CECDAB661ACB20B099171469A86D31C40 + 7742D9B606B5B8017B8002FAA89DD29BCB32960D05E2DC276918CA8AD4E990F9 + 09E4FA2B1DCC6BBA85F834F1792DBA35F652B088B82641A834D318412C0A4741 + 6A8E103BA16DDB0B1BD02FD800285DAEB2DEECCA8A479C31060C00BD51169B79 + 24130111601F303C97DC0F24440303C826079044401111004444011110044440 + 1111004444011110044440111100444401111004444011110044440111100444 + 4011110044440111100444401111004444011110044440111100444401111004 + 444011110044440111100444401111004444011110044440111101FFD9} + Stretch = True + end + object Image2: TImage + Left = 64 + Top = 64 + Width = 32 + Height = 32 + AutoSize = True + Picture.Data = { + 055449636F6E0000010004001010100000000000280100004600000010100000 + 00000000680500006E0100002020100000000000E8020000D606000020200000 + 00000000A8080000BE0900002800000010000000200000000100040000000000 + C000000000000000000000001000000000000000000000000000800000800000 + 00808000800000008000800080800000C0C0C000808080000000FF0000FF0000 + 00FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000000000000000 + 011111000000000009BB11000000000019B1B110001110001919B110091BB110 + 99BBB110011B9B1009911100091B9B1000119000099BB1100000000009911990 + 00000A00009009000AA00A000000000000000000000000000000000000000A00 + A0000000000AA000000000000000000000000000FFC7FFFFFF83FFFFFF01FFFF + FF01FFFFC301FFFF8101FFFF0001FFFF0083FFFF00FFFFFF81C3FFFF8189FFFF + FF9FFFFFFA7FFFFFF06FFFFFE3C7FFFFFFF3FFFF280000001000000020000000 + 0100080000000000400100000000000000000000000100000000000000A8FF00 + 00FF00000000FF000000B00000004F0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000FFFFFF00FEFEFEFE + FEFEFEFEFEFE050505FEFEFEFEFEFEFEFEFEFEFEFE0404040404FEFEFEFEFEFE + FEFEFEFE05020000000405FEFEFEFEFEFEFEFEFE04020004000404FEFEFE0303 + 0305FEFE04020402000404FEFE020300000303FE02020000000404FE05030300 + 0200030505020202040405FE0502030002000305FE0504040205FEFE05020200 + 00030305FEFEFEFEFEFEFEFEFE020202030202FEFEFE05050501FEFEFE050205 + 050205FEFE010105FE0105FEFEFEFEFEFEFEFEFEFE0505FEFEFEFEFEFEFEFEFE + FE05FE0505FEFEFEFEFEFEFEFEFEFEFE0501050501FEFE05FEFEFEFEFEFEFE01 + 0105FEFEFEFE050505FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0505FEFEFFC7FFFF + FF83FFFFFF01FFFFFF01FFFFC301FFFF8101FFFF0001FFFF0083FFFF00FFFFFF + 81C3FFFF8189FFFFFF9FFFFFFA7FFFFFF06FFFFFE3C7FFFFFFF3FFFF28000000 + 2000000040000000010004000000000080020000000000000000000010000000 + 0000000000000000000080000080000000808000800000008000800080800000 + C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000 + FFFFFF0000000000000000000000000000000000000000000000000000000111 + 11000000000000000000000000011111111100000000000000000000001191BB + 11111000000000000000000000991B11B111100000000000000000000919B911 + 1B11110000000000000000000199B1911B111100000000000000000009919B91 + 9B1111000000011111100000019991991B111100000011BBBB11100009919191 + 9B111100000991B11BB11100099999199B911100000119B111B1110000999BBB + BB911000009191B9191B11100099B9999B911000009999B9119B111000099911 + 99190000001991B9191B11100000010119000000009999B991BB919000000000 + 00000000009999B19BB11110000000000000000000999BBBB911911000000000 + 00000000000999B9919999000000000000AA000000099999099111000000AAA0 + 00AAA0000000999090199000000AAAA0000AA000000000000000000000AAAA00 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000A0000000000000000000000000000000AA000000 + 000000000000000000AA00000A0000000000000000000000AAAA000000000000 + 000000000000000AAAA000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FFFFF83FFFFFE00FFFFFC007FFFF8003FFFF8003FFFF0001FFFF0001 + FC1F0001F0070001E0030001C0010001C0018003800080038000C0078000E00F + 8000F83F8000FF7F8000FE0FC001F007C001E003E003C0C3F14781E3FF7FC1FF + FF9F7DFFFFC63DFFFFC21DFFFF001EFFFE07063FFC0FF01FFE1FFE0FFFFFFF0F + FFFFFF8F28000000200000004000000001000800000000008004000000000000 + 0000000000010000000000000000000000008000008000000080800080000000 + 8000800080800000C0C0C000C0DCC000F0CAA600D4F0FF00B1E2FF008ED4FF00 + 6BC6FF0048B8FF0025AAFF0000AAFF000092DC00007AB90000629600004A7300 + 00325000D4E3FF00B1C7FF008EABFF006B8FFF004873FF002557FF000055FF00 + 0049DC00003DB900003196000025730000195000D4D4FF00B1B1FF008E8EFF00 + 6B6BFF004848FF002525FF000000FF000000DC000000B9000000960000007300 + 00005000E3D4FF00C7B1FF00AB8EFF008F6BFF007348FF005725FF005500FF00 + 4900DC003D00B900310096002500730019005000F0D4FF00E2B1FF00D48EFF00 + C66BFF00B848FF00AA25FF00AA00FF009200DC007A00B900620096004A007300 + 32005000FFD4FF00FFB1FF00FF8EFF00FF6BFF00FF48FF00FF25FF00FF00FF00 + DC00DC00B900B900960096007300730050005000FFD4F000FFB1E200FF8ED400 + FF6BC600FF48B800FF25AA00FF00AA00DC009200B9007A009600620073004A00 + 50003200FFD4E300FFB1C700FF8EAB00FF6B8F00FF487300FF255700FF005500 + DC004900B9003D00960031007300250050001900FFD4D400FFB1B100FF8E8E00 + FF6B6B00FF484800FF252500FF000000DC000000B90000009600000073000000 + 50000000FFE3D400FFC7B100FFAB8E00FF8F6B00FF734800FF572500FF550000 + DC490000B93D0000963100007325000050190000FFF0D400FFE2B100FFD48E00 + FFC66B00FFB84800FFAA2500FFAA0000DC920000B97A000096620000734A0000 + 50320000FFFFD400FFFFB100FFFF8E00FFFF6B00FFFF4800FFFF2500FFFF0000 + DCDC0000B9B90000969600007373000050500000F0FFD400E2FFB100D4FF8E00 + C6FF6B00B8FF4800AAFF2500AAFF000092DC00007AB90000629600004A730000 + 32500000E3FFD400C7FFB100ABFF8E008FFF6B0073FF480057FF250055FF0000 + 49DC00003DB90000319600002573000019500000D4FFD400B1FFB1008EFF8E00 + 6BFF6B0048FF480025FF250000FF000000DC000000B900000096000000730000 + 00500000D4FFE300B1FFC7008EFFAB006BFF8F0048FF730025FF570000FF5500 + 00DC490000B93D00009631000073250000501900D4FFF000B1FFE2008EFFD400 + 6BFFC60048FFB80025FFAA0000FFAA0000DC920000B97A000096620000734A00 + 00503200D4FFFF00B1FFFF008EFFFF006BFFFF0048FFFF0025FFFF0000FFFF00 + 00DCDC0000B9B900009696000073730000505000F2F2F200E6E6E600DADADA00 + CECECE00C2C2C200B6B6B600AAAAAA009E9E9E0092929200868686007A7A7A00 + 6E6E6E0062626200565656004A4A4A003E3E3E0032323200262626001A1A1A00 + 0E0E0E00F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000 + FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 002A2D2A2D2A000000000000000000000000000000000000000000000000002D + 2A2D2A2D2A2D2A2D000000000000000000000000000000000000000000002D2A + 282ADADA2D2A2D2A2D0000000000000000000000000000000000000000002828 + 2ADA2A2DDA2D2A2D2A0000000000000000000000000000000000000000282D28 + DA282D2D2DDA2D2A2D2A000000000000000000000000000000000000002D2828 + DA2D282D2ADA2A2D2A2D0000000000000000000000000000000000000028282A + 28DA282A28DA2D2A2D2A000000000000002A2D2A2D2A2D0000000000002D2828 + 282D28282ADA2A2D2A2D0000000000002A2DDADADADA2A2D2A0000000028282A + 282A282A28DA2D2A2D2A000000000028282ADA2A2DDADA2A2D2A000000282828 + 28282A2828DA282D2A2D00000000002D2A28DA2D2A2DDA2D2A2D000000002828 + 28DADADADADA282A2D0000000000282A282ADA282D282DDA2D2A2D0000002828 + DA28282828DA282D2A000000000028282828DA282A2D28DA2A2D2A0000000028 + 28282D2D28282D280000000000002D28282ADA282D282DDA2D2A2D0000000000 + 002D002D2A28000000000000000028282828DA28282DDADA282D280000000000 + 000000000000000000000000000028282828DA2A28DADA2A2D2A2D0000000000 + 0000000000000000000000000000282828DADADADA282A2D282D2A0000000000 + 000000000000000000000000000000282828DA28282A28282828000000000000 + 000000000000B8B80000000000000028282828280028282D2A2D000000000000 + B8B8B8000000B8B8B8000000000000002828280028002D2828000000000000B8 + B8B8B800000000B8B8000000000000000000000000000000000000000000B8B8 + B8B8000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000B8000000 + 00000000000000000000000000000000000000000000000000000000B8B80000 + 00000000000000000000000000000000000000000000B8B80000000000B80000 + 0000000000000000000000000000000000000000B8B8B8B80000000000000000 + 00000000000000000000000000000000000000B8B8B8B8000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FFFFF83FFFFFE00FFFFFC007FFFF8003FFFF8003 + FFFF0001FFFF0001FC1F0001F0070001E0030001C0010001C001800380008003 + 8000C0078000E00F8000F83F8000FF7F8000FE0FC001F007C001E003E003C0C3 + F14781E3FF7FC1FFFF9F7DFFFFC63DFFFFC21DFFFF001EFFFE07063FFC0FF01F + FE1FFE0FFFFFFF0FFFFFFF8F} + end + object Label1: TLabel + Left = 99 + Top = 70 + Width = 211 + Height = 33 + Caption = 'Informática D.J.' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + end + object Label2: TLabel + Left = 67 + Top = 98 + Width = 228 + Height = 27 + Caption = 'w w w . i n f d j . c o m' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + Transparent = True + end + object Timer1: TTimer + Interval = 5000 + OnTimer = Timer1Timer + Left = 320 + Top = 16 + end +end diff --git a/cap_control_CB5/ListInit.h b/cap_control_CB5/ListInit.h new file mode 100644 index 0000000..3e20eb3 --- /dev/null +++ b/cap_control_CB5/ListInit.h @@ -0,0 +1,32 @@ +//--------------------------------------------------------------------------- + +#ifndef ListInitH +#define ListInitH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TAcercaDe : public TForm +{ +__published: // IDE-managed Components + TImage *Image1; + TImage *Image2; + TLabel *Label1; + TLabel *Label2; + TTimer *Timer1; + void __fastcall Timer1Timer(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TAcercaDe(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TAcercaDe *AcercaDe; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_control_CB5/TPropiedades.cpp b/cap_control_CB5/TPropiedades.cpp new file mode 100644 index 0000000..ef296cd --- /dev/null +++ b/cap_control_CB5/TPropiedades.cpp @@ -0,0 +1,407 @@ +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#pragma hdrstop + +#include "TPropiedades.h" +#include "LEGO_COMM.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "DigitNum" +#pragma link "LM2000" +#pragma resource "*.dfm" +TPropiedades *Propiedades; +//--------------------------------------------------------------------------- +__fastcall TPropiedades::TPropiedades(TComponent* Owner) + : TForm(Owner) +{ + // Recuperar configuracion + // Recuperamos la configuración + TIniFile *ini; + ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\CAP.INI" ); + // General + ComboBox1->ItemIndex = ini->ReadInteger( "CAP_c", "PuertoLego", 0 ); + DireccionesE->Text = ini->ReadString( "CAP_c", "IDsLegoE", "1;" ); + DireccionesS->Text = ini->ReadString( "CAP_c", "IDsLegoS", "2;" ); + Historial->Checked = ini->ReadBool( "CAP_c", "historial", true ); + + + Capacidad->Text = ini->ReadInteger( "parking", "Capacidad", 1000 ); + MsgCapacidad->Text = ini->ReadString( "parking", "MsgParking_lleno", "El parking esta lleno" ); +// ComboBox2->ItemIndex = ini->ReadInteger( "parking", "DiasDeCortesia", 0 ); + + DB_host->Text = ini->ReadString( "db", "host", "." ); + DB_login->Text = ini->ReadString( "db", "login", "NO_ES_SQL" ); + DB_pwd->Text = ini->ReadString( "db", "pwd", "NO_ES_SQL" ); + + /* Sobrecarga de franjas horarias */ +/* + CheckBox1->Checked = ini->ReadBool( "horas", "sobrecargar", false ); + + verL->Checked = ini->ReadBool( "horas", "verL", false ); + desdeL->Text = ini->ReadString( "horas", "desdeL", "00:00" ); + hastaL->Text = ini->ReadString( "horas", "hastaL", "00:00" ); + + verM->Checked = ini->ReadBool( "horas", "verM", false ); + desdeM->Text = ini->ReadString( "horas", "desdeM", "00:00" ); + hastaM->Text = ini->ReadString( "horas", "hastaM", "00:00" ); + + verX->Checked = ini->ReadBool( "horas", "verX", false ); + desdeX->Text = ini->ReadString( "horas", "desdeX", "00:00" ); + hastaX->Text = ini->ReadString( "horas", "hastaX", "00:00" ); + + verJ->Checked = ini->ReadBool( "horas", "verJ", false ); + desdeJ->Text = ini->ReadString( "horas", "desdeJ", "00:00" ); + hastaJ->Text = ini->ReadString( "horas", "hastaJ", "00:00" ); + + verV->Checked = ini->ReadBool( "horas", "verV", false ); + desdeV->Text = ini->ReadString( "horas", "desdeV", "00:00" ); + hastaV->Text = ini->ReadString( "horas", "hastaV", "00:00" ); + + verS->Checked = ini->ReadBool( "horas", "verS", false ); + desdeS->Text = ini->ReadString( "horas", "desdeS", "00:00" ); + hastaS->Text = ini->ReadString( "horas", "hastaS", "00:00" ); + + verD->Checked = ini->ReadBool( "horas", "verD", false ); + desdeD->Text = ini->ReadString( "horas", "desdeD", "00:00" ); + hastaD->Text = ini->ReadString( "horas", "hastaD", "00:00" ); +*/ + delete ini; + + StartEventRecorder("Historial.log"); + + // Hacer efectivos los cambios + bAplicarClick(0); + LEGO_COMM = new CheckLEGOs(true); + LEGO_COMM -> SetPuerto( ComboBox1->Items->Strings[ComboBox1->ItemIndex] ); + LEGO_COMM -> SetDB( DB_host->Text, DB_login->Text, DB_pwd->Text ); +// LEGO_COMM -> SetDiasCortesia( ComboBox2->ItemIndex ); + LEGO_COMM -> SetLegoID( nLEGOSe, IDe, nLEGOSs, IDs ); + try { + LEGO_COMM -> maxDENTRO = Capacidad->Text.ToInt(); + }catch(...){ + LEGO_COMM -> maxDENTRO = 2000; + } + LEGO_COMM -> Resume(); +} +//--------------------------------------------------------------------------- +void __fastcall TPropiedades::StartEventRecorder(AnsiString opLOG) +{ + try { + // Cargamos todos los eventos anteriores + mHistorial->Lines->LoadFromFile( opLOG ); + // Si hay demasiados registros + if ( mHistorial->Lines->Count > 700 ) + { + for ( int i=0; i<100; i++ ) // Eliminamos las 100 últimas entradas + mHistorial->Lines->Delete( 3 ); + } + } catch(...) { + mHistorial->Lines->Clear(); // En caso de error, las eliminamos todas + } + //Fecha y hora del inicio de sesión + mHistorial->Lines->Insert( 0, (Now()).DateTimeString() + " :: Inicio de la sesión" ); +} +//--------------------------------------------------------------------------- +void __fastcall TPropiedades::BorrarHistorialClick(TObject *Sender) +{ + mHistorial -> Lines -> Clear(); +} +//--------------------------------------------------------------------------- + +void __fastcall TPropiedades::FormDestroy(TObject *Sender) +{ + if ( Historial -> Checked ) + { + mHistorial -> Lines -> Insert( 0, TDateTime::CurrentDateTime().DateTimeString() + " :: Fin de sesión "); + mHistorial -> Lines -> SaveToFile( "Historial.log" ); + } +/* + // Desactivamos el HILO de ejecución y esperamos hasta que acabe + LEGO_COMM->Terminate(); + LEGO_COMM->WaitFor(); +*/ + delete IDe; + delete IDs; +} +//--------------------------------------------------------------------------- + +void __fastcall TPropiedades::mHistorialChange(TObject *Sender) +{ +/* + try { + if ( Historial -> Checked ) + mHistorial -> Lines -> SaveToFile("Historial.log"); + } catch(...) { + // do nothing + } +*/ +} +//--------------------------------------------------------------------------- +void __fastcall TPropiedades::ActivarAplicar(TObject *Sender) +{ + if ( ! bDesBlock->Visible ) + { + bAplicar->Enabled = true; + } +} +//--------------------------------------------------------------------------- + + + +void __fastcall TPropiedades::bDesBlockClick(TObject *Sender) +{ +// ComboBox2->Enabled = true; + ComboBox1->Enabled = true; + DireccionesE->Enabled = true; + DireccionesS->Enabled = true; + Capacidad->Enabled = true; + MsgCapacidad->Enabled = true; + DB_host->Enabled = true; + DB_login->Enabled = true; + DB_pwd->Enabled = true; + + bDesBlock->Visible = false; + +} +//--------------------------------------------------------------------------- + +void __fastcall TPropiedades::bAplicarClick(TObject *Sender) +{ + if ( Sender ) + { + // Guardamos los cambios... + TIniFile *ini; + ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\CAP.INI" ); + // General + ini->WriteInteger( "CAP_c", "PuertoLego", ComboBox1->ItemIndex ); + ini->WriteString( "CAP_c", "IDsLegoE", DireccionesE->Text ); + ini->WriteString( "CAP_c", "IDsLegoS", DireccionesS->Text ); + ini->WriteBool( "CAP_c", "historial", Historial->Checked ); + + + try { + ini->WriteInteger( "parking", "Capacidad", Capacidad->Text.ToInt() ); + } catch(...) { + ini->WriteInteger( "parking", "Capacidad", 1000 ); + } + ini->WriteString( "parking", "MsgParking_lleno", MsgCapacidad->Text ); +// ini->ReadInteger( "parking", "DiasDeCortesia", ComboBox2->ItemIndex ); + + ini->WriteString( "db", "host", DB_host->Text ); + ini->WriteString( "db", "login", DB_login->Text ); + ini->WriteString( "db", "pwd", DB_pwd->Text ); + + /* Sobrecarga de franjas horarias */ +/* + ini->WriteBool( "horas", "sobrecargar", CheckBox1->Checked ); + + ini->WriteBool( "horas", "verL", verL->Checked ); + ini->WriteString( "horas", "desdeL", desdeL->Text ); + ini->WriteString( "horas", "hastaL", hastaL->Text ); + + ini->WriteBool( "horas", "verM", verM->Checked ); + ini->WriteString( "horas", "desdeM", desdeX->Text ); + ini->WriteString( "horas", "hastaM", hastaX->Text ); + + ini->WriteBool( "horas", "verX", verX->Checked ); + ini->WriteString( "horas", "desdeX", desdeX->Text ); + ini->WriteString( "horas", "hastaX", hastaX->Text ); + + ini->WriteBool( "horas", "verJ", verJ->Checked ); + ini->WriteString( "horas", "desdeJ", desdeJ->Text ); + ini->WriteString( "horas", "hastaJ", hastaJ->Text ); + + ini->WriteBool( "horas", "verV", verV->Checked ); + ini->WriteString( "horas", "desdeV", desdeV->Text ); + ini->WriteString( "horas", "hastaV", hastaV->Text ); + + ini->WriteBool( "horas", "verS", verS->Checked ); + ini->WriteString( "horas", "desdeS", desdeS->Text ); + ini->WriteString( "horas", "hastaS", hastaS->Text ); + + ini->WriteBool( "horas", "verD", verD->Checked ); + ini->WriteString( "horas", "desdeD", desdeD->Text ); + ini->WriteString( "horas", "hastaD", hastaD->Text ); + +*/ + + + + + if ( LEGO_COMM ) + { + LEGO_COMM -> SetPuerto( ComboBox1->Items->Strings[ComboBox1->ItemIndex] ); + LEGO_COMM -> SetDB( DB_host->Text, DB_login->Text, DB_pwd->Text ); + LEGO_COMM -> SetDiasCortesia( 5);//ComboBox2->ItemIndex ); + try { + LEGO_COMM -> maxDENTRO = Capacidad->Text.ToInt(); + }catch(...){ + LEGO_COMM -> maxDENTRO = 2000; + } + } + + ini->UpdateFile(); + delete ini; + } + + // Hacemos efectivos los cambios... + ObtenDirLEGOS( DireccionesE->Text, nLEGOSe, &IDe ); + ObtenDirLEGOS( DireccionesS->Text, nLEGOSs, &IDs ); + if ( LEGO_COMM ) + { + LEGO_COMM -> SetLegoID( nLEGOSe, IDe, nLEGOSs, IDs ); + } + + ////////// HAY QUE FINALIZAR EL HILO Y COMENZAR CON OTRO NUEVO + bDesBlock->Visible = true; +// ComboBox2->Enabled = false; + ComboBox1->Enabled = false; + DireccionesE->Enabled = false; + DireccionesS->Enabled = false; + Capacidad->Enabled = false; + MsgCapacidad->Enabled = false; + DB_host->Enabled = false; + DB_login->Enabled = false; + DB_pwd->Enabled = false; + bAplicar->Enabled = false; +} +//--------------------------------------------------------------------------- +void __fastcall TPropiedades::ObtenDirLEGOS(AnsiString cadena, int &nLEGOS, int **ID) +{ + char *pDir, buff[80], *pbuff; + nLEGOS = 0; int i = 1, j=0; + + while ( i <= cadena.Length() ) + { + if ( cadena[i] == ';' ) nLEGOS++; + i++; + } + + (*ID) = new int[nLEGOS]; + i = 1; pbuff = buff; + while ( i <= cadena.Length() ) + { + if ( cadena[i] == ';' ) + { + *pbuff = '\0'; + try { + (*ID)[j++] = AnsiString( buff ).ToInt(); + } catch(...) { + nLEGOS--; + ShowMessage( "La configuración de direcciones LEGO'S es incorrecta" ); + } + pbuff = buff; i++; + }else{ + *(pbuff++) = cadena[i]; + i++; + } + } +} +/* + +//--------------------------------------------------------------------------- +bool __fastcall TPropiedades::entreHora(AnsiString hLo, AnsiString hHi) +{ + bool dev = false; + try { + TDateTime hora; + hora = EncodeTime( (hLo.SubString(1,2)).ToInt(), (hLo.SubString(4,2)).ToInt(), 0, 0 ); + if ( TDateTime::CurrentTime() >= hora ) + { + hora = EncodeTime( (hHi.SubString(1,2)).ToInt(), (hHi.SubString(4,2)).ToInt(), 0, 0 ); + dev = ( TDateTime::CurrentTime() <= hora ); + } + } catch (...) { + return false; + } + return dev; +} +//--------------------------------------------------------------------------- +bool __fastcall TPropiedades::CheckHorario(void) +{ + bool dev = false; + if ( CheckBox1->Checked ) + { + switch ( TDateTime::CurrentDate().DayOfWeek() ) + { + // Domingo + case 1: + if ( verD->Checked ) + dev = entreHora( desdeD->Text, hastaD->Text ); + break; + // Lunes + case 2: + if ( verL->Checked ) + dev = entreHora( desdeL->Text, hastaL->Text ); + break; + // Martes + case 3: + if ( verM->Checked ) + dev = entreHora( desdeM->Text, hastaM->Text ); + break; + // Miercoles + case 4: + if ( verX->Checked ) + dev = entreHora( desdeX->Text, hastaX->Text ); + break; + // Jueves + case 5: + if ( verJ->Checked ) + dev = entreHora( desdeJ->Text, hastaJ->Text ); + break; + // Viernes + case 6: + if ( verV->Checked ) + dev = entreHora( desdeV->Text, hastaV->Text ); + break; + // Sabado + case 7: + if ( verS->Checked ) + dev = entreHora( desdeS->Text, hastaS->Text ); + break; + } + } + + return dev; +} + +void __fastcall TPropiedades::Timer1Timer(TObject *Sender) +{ + static bool horaVista = false, firstTime = true, cH; + bool nH; + + nH = CheckHorario(); + + if ( firstTime ) { horaVista=false; firstTime = false; cH = nH; } + + if ( cH != nH ) { horaVista = false; cH = nH; } + + if ( !horaVista && cH ) // Si no hemos visto este cambio + { + horaVista = true; + sndPlaySound("snd\\fuera_de_hora.wav", SND_ASYNC | SND_FILENAME); + LEGO_COMM -> RetiraPermisoSalida(); + } +} +*/ +//--------------------------------------------------------------------------- + +void __fastcall TPropiedades::Label1DblClick(TObject *Sender) +{ + AnsiString cantidad; + // Cambio del aforo + if ( InputQuery( "Forzar lleno de aforo", "Nuevo aforo:" , cantidad ) ) + { + try { + Ocupacion->Value = cantidad.ToInt(); + LEGO_COMM -> crdDENTRO = Ocupacion->Value; + } catch(...){ + //nothing + } + } +} +//--------------------------------------------------------------------------- + diff --git a/cap_control_CB5/TPropiedades.ddp b/cap_control_CB5/TPropiedades.ddp new file mode 100644 index 0000000..cdc0ee8 Binary files /dev/null and b/cap_control_CB5/TPropiedades.ddp differ diff --git a/cap_control_CB5/TPropiedades.dfm b/cap_control_CB5/TPropiedades.dfm new file mode 100644 index 0000000..2638c29 Binary files /dev/null and b/cap_control_CB5/TPropiedades.dfm differ diff --git a/cap_control_CB5/TPropiedades.h b/cap_control_CB5/TPropiedades.h new file mode 100644 index 0000000..c451ca5 --- /dev/null +++ b/cap_control_CB5/TPropiedades.h @@ -0,0 +1,105 @@ +//--------------------------------------------------------------------------- +#ifndef TPropiedadesH +#define TPropiedadesH +#include +#include +#include +#include +#include +#include +#include "DigitNum.h" +#include "LM2000.h" +#include "LEGO_COMM.h" +#include +#include +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +class TPropiedades : public TForm +{ +__published: // IDE-managed Components + TSpeedButton *BorrarHistorial; + TPageControl *PageControl1; + TTabSheet *TabSheet1; + TTabSheet *TabSheet2; + TTabSheet *TabSheet3; + TStatusBar *StatusBar1; + TBevel *Bevel4; + TDigitNum *Ocupacion; + TMemo *mHistorial; + TCheckBox *Historial; + TButton *bAceptar; + TButton *bCancelar; + TButton *bAplicar; + TLabel *Label1; +/* + TPageControl *PageControl2; + TTabSheet *TabSheet4; + TTabSheet *TabSheet5; +*/ + + TLabel *Label2; + TComboBox *ComboBox1; + TEdit *DireccionesE; + TEdit *DireccionesS; + TEdit *MsgCapacidad; + TEdit *Capacidad; + TLabel *Label3; +// TLabel *Label5; +// TComboBox *ComboBox2; + TEdit *DB_host; + TEdit *DB_login; + TEdit *DB_pwd; + TLabel *Label4; + TButton *bDesBlock; +// TCheckBox *CheckBox1; +/* + TCheckBox *verL; + TCheckBox *verM; + TCheckBox *verX; + TCheckBox *verJ; + TCheckBox *verV; + TCheckBox *verS; + TCheckBox *verD; + TBevel *Bevel3; + TBevel *Bevel5; + TMaskEdit *desdeL; + TMaskEdit *desdeM; + TMaskEdit *desdeX; + TMaskEdit *desdeS; + TMaskEdit *desdeD; + TMaskEdit *hastaL; + TMaskEdit *hastaM; + TMaskEdit *hastaX; + TMaskEdit *hastaS; + TMaskEdit *hastaD; + TMaskEdit *desdeJ; + TMaskEdit *hastaJ; + TMaskEdit *desdeV; + TMaskEdit *hastaV; + TTimer *Timer1; +*/ + + void __fastcall BorrarHistorialClick(TObject *Sender); + void __fastcall FormDestroy(TObject *Sender); + void __fastcall mHistorialChange(TObject *Sender); + void __fastcall ActivarAplicar(TObject *Sender); + void __fastcall bDesBlockClick(TObject *Sender); + void __fastcall bAplicarClick(TObject *Sender); +// void __fastcall Timer1Timer(TObject *Sender); + void __fastcall Label1DblClick(TObject *Sender); +private: // User declarations + void __fastcall ObtenDirLEGOS(AnsiString cadena, int &nLEGOS, int **ID); + void __fastcall StartEventRecorder(AnsiString opLOG); +public: // User declarations + bool __fastcall CheckHorario(void); + bool __fastcall entreHora(AnsiString hLo, AnsiString hHi); + CheckLEGOs *LEGO_COMM; + int nLEGOSe, nLEGOSs; + int *IDe, *IDs; + __fastcall TPropiedades(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TPropiedades *Propiedades; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_control_CB5/cap.bpr b/cap_control_CB5/cap.bpr new file mode 100644 index 0000000..9356dda --- /dev/null +++ b/cap_control_CB5/cap.bpr @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName=JD soft +FileDescription=Módulo de control de acceso +FileVersion=1.0.0.0 +InternalName=cap +LegalCopyright= +LegalTrademarks= +OriginalFilename=cap +ProductName= +ProductVersion=1.0.0.0 +Comments= +url=www.infdj.com +e-mail=jd@infdj.com + +[HistoryLists\hlIncludePath] +Count=3 +Item0=..\lm2000_vcl;$(BCB)\include;$(BCB)\include\vcl;..\..\VCLs\include +Item1=$(BCB)\include;$(BCB)\include\vcl;..\..\VCLs\include +Item2=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=2 +Item0=..\lm2000_vcl;$(BCB)\Projects\Lib;..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib +Item1=$(BCB)\Projects\Lib;..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[HistoryLists\hlIntOutputDir] +Count=2 +Item0=..\obj +Item1=C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\obj + +[HistoryLists\hlFinalOutputDir] +Count=2 +Item0=..\bin\ +Item1=..\bin + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/cap_control_CB5/cap.cpp b/cap_control_CB5/cap.cpp new file mode 100644 index 0000000..f274a07 --- /dev/null +++ b/cap_control_CB5/cap.cpp @@ -0,0 +1,24 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +HINSTANCE g_hinst; +//--------------------------------------------------------------------------- +USEFORM("traymain.cpp", TrayMainForm); +USERES("cap.res"); +USEFORM("TPropiedades.cpp", Propiedades); +USEFORM("ListInit.cpp", AcercaDe); +USEUNIT("LEGO_COMM.cpp"); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE hInstance, LPSTR, int) +{ + Application->Initialize(); + g_hinst = hInstance; + Application->Title = "Control Acceso Parkings"; + Application->CreateForm(__classid(TTrayMainForm), &TrayMainForm); + Application->CreateForm(__classid(TPropiedades), &Propiedades); + Application->ShowMainForm = false; + Application->Run(); + return 0; +} +//--------------------------------------------------------------------------- diff --git a/cap_control_CB5/cap.res b/cap_control_CB5/cap.res new file mode 100644 index 0000000..4aec3da Binary files /dev/null and b/cap_control_CB5/cap.res differ diff --git a/cap_control_CB5/cap_cb5.bpr b/cap_control_CB5/cap_cb5.bpr new file mode 100644 index 0000000..5cf9cf1 --- /dev/null +++ b/cap_control_CB5/cap_cb5.bpr @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] +C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl\LM2000_vcl.bpl=Funciones para el Manejo del LM2000 + +[HistoryLists\hlIncludePath] +Count=5 +Item0=$(BCB)\include;$(BCB)\include\vcl;..\LM2000_vcl;..\..\VCLs\include +Item1=$(BCB)\include;$(BCB)\include\vcl;..\LM2000_vcl;C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\include +Item2=$(BCB)\include;$(BCB)\include\vcl;..\LM2000_vcl +Item3=$(BCB)\include;$(BCB)\include\vcl;C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl +Item4=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=3 +Item0=..\..\VCLs\lib;$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib;..\obj +Item1=..\..\VCLs\lib;$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib;C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\obj +Item2=..\..\VCLs\lib;$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[HistoryLists\hlIntOutputDir] +Count=2 +Item0=..\obj +Item1=C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\obj + +[HistoryLists\hlFinalOutputDir] +Count=2 +Item0=C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\bin\ +Item1=C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\bin + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/cap_control_CB5/cap_cb5.cpp b/cap_control_CB5/cap_cb5.cpp new file mode 100644 index 0000000..444c111 --- /dev/null +++ b/cap_control_CB5/cap_cb5.cpp @@ -0,0 +1,31 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("cap_cb5.res"); +USEUNIT("LEGO_COMM.cpp"); +USEFORM("ListInit.cpp", AcercaDe); +USEFORM("TPropiedades.cpp", Propiedades); +USEFORM("traymain.cpp", TrayMainForm); + +HINSTANCE g_hinst; +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE hInstance, LPSTR, int) +{ + try + { + Application->Initialize(); + g_hinst = hInstance; + Application->Title = "Control Acceso Parkings"; + Application->CreateForm(__classid(TTrayMainForm), &TrayMainForm); + Application->CreateForm(__classid(TPropiedades), &Propiedades); + Application->ShowMainForm = false; + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/cap_control_CB5/cap_cb5.res b/cap_control_CB5/cap_cb5.res new file mode 100644 index 0000000..1392cb0 Binary files /dev/null and b/cap_control_CB5/cap_cb5.res differ diff --git a/cap_control_CB5/cleanup.bat b/cap_control_CB5/cleanup.bat new file mode 100644 index 0000000..42ad5b0 --- /dev/null +++ b/cap_control_CB5/cleanup.bat @@ -0,0 +1,8 @@ +del *.~* +del *.tds +del *.obj + +del *.ilc +del *.ild +del *.ilf +del *.ils \ No newline at end of file diff --git a/cap_control_CB5/control.ico b/cap_control_CB5/control.ico new file mode 100644 index 0000000..db708c0 Binary files /dev/null and b/cap_control_CB5/control.ico differ diff --git a/cap_control_CB5/tmp1.ico b/cap_control_CB5/tmp1.ico new file mode 100644 index 0000000..6cdc59c Binary files /dev/null and b/cap_control_CB5/tmp1.ico differ diff --git a/cap_control_CB5/tmp2.ico b/cap_control_CB5/tmp2.ico new file mode 100644 index 0000000..0270e87 Binary files /dev/null and b/cap_control_CB5/tmp2.ico differ diff --git a/cap_control_CB5/traymain.cpp b/cap_control_CB5/traymain.cpp new file mode 100644 index 0000000..f74955c --- /dev/null +++ b/cap_control_CB5/traymain.cpp @@ -0,0 +1,195 @@ +//---------------------------------------------------------------------------- +//Borland C++Builder +//Copyright (c) 1987, 1998 Borland International Inc. All Rights Reserved. +//---------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +#include +#include +#include +#pragma hdrstop + +#include "traymain.h" +#include "TPropiedades.h" +#include "ListInit.h" +//--------------------------------------------------------------------------- +#pragma link "LM2000" +#pragma resource "*.dfm" +TTrayMainForm *TrayMainForm; +//--------------------------------------------------------------------------- +__fastcall TTrayMainForm::TTrayMainForm(TComponent* Owner) + : TForm(Owner) +{ + Running = true; + TrayMessage(NIM_ADD); + TrayMessage(NIM_MODIFY); + + TAcercaDe *AcercaDe; + AcercaDe = new TAcercaDe(this); + AcercaDe->Show(); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::DrawItem(TMessage& Msg) +{ + IconDrawItem((LPDRAWITEMSTRUCT)Msg.LParam); + TForm::Dispatch(&Msg); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::MyNotify(TMessage& Msg) +{ + POINT MousePos; + + switch(Msg.LParam) + { + case WM_RBUTTONUP: + if ( GetCursorPos(&MousePos) ) + { + PopupMenu1->PopupComponent = Propiedades; + SetForegroundWindow(Handle); + PopupMenu1->Popup(MousePos.x, MousePos.y); + PopupMenu1->PopupComponent = 0; + } + else + Show(); + break; + case WM_LBUTTONDBLCLK: + Properties1Click(0); + break; +/* + case WM_LBUTTONUP: + Properties1Click(0); + break; +*/ + default: + break; + } + TForm::Dispatch(&Msg); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::FormDestroy(TObject *Sender) +{ + TrayMessage(NIM_DELETE); +} +//--------------------------------------------------------------------------- +bool __fastcall TTrayMainForm::TrayMessage(DWORD dwMessage) +{ + NOTIFYICONDATA tnd; + PSTR pszTip; + + pszTip = TipText(); + + tnd.cbSize = sizeof(NOTIFYICONDATA); + tnd.hWnd = Handle; + tnd.uID = IDC_MYICON; + tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; + tnd.uCallbackMessage = MYWM_NOTIFY; + + if (dwMessage == NIM_MODIFY) + { + tnd.hIcon = IconHandle(); + if (pszTip) + lstrcpyn(tnd.szTip, pszTip, sizeof(tnd.szTip)); + else + tnd.szTip[0] = '\0'; + } + else + { + tnd.hIcon = NULL; + tnd.szTip[0] = '\0'; + } + + return (Shell_NotifyIcon(dwMessage, &tnd)); +} +//--------------------------------------------------------------------------- +HANDLE __fastcall TTrayMainForm::IconHandle(void) +{ + if (Running) + return imagenOn -> Picture->Icon->Handle; + else + return imagenOFF -> Picture->Icon->Handle; +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::ToggleState(void) +{ + Running = !Running; + TrayMessage(NIM_MODIFY); + if ( Running ) + { + ToggleState1->Caption = "Desactivar"; + // Reanudamos el hilo + Propiedades->LEGO_COMM -> Resume(); + } else { + ToggleState1->Caption = "Activar"; + // Paramos al hilo + Propiedades->LEGO_COMM -> Suspend(); + } +} +//--------------------------------------------------------------------------- +PSTR __fastcall TTrayMainForm::TipText(void) +{ + if (Running) + return ("CAP-c esta ACTIVADO"); + else + return ("-- DESACTIVADO --"); +} +//--------------------------------------------------------------------------- +LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi) +{ + HICON hIcon; + + hIcon = (HICON)LoadImage(g_hinst, MAKEINTRESOURCE(lpdi->CtlID), IMAGE_ICON, + 16, 16, 0); + if (!hIcon) + return(FALSE); + + DrawIconEx(lpdi->hDC, lpdi->rcItem.left, lpdi->rcItem.top, hIcon, + 16, 16, 0, NULL, DI_NORMAL); + + return(TRUE); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::Properties1Click(TObject *Sender) +{ +// Show(); + Propiedades -> Visible = !(Propiedades->Visible); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::ToggleState1Click(TObject *Sender) +{ + ToggleState(); +} +//--------------------------------------------------------------------------- +void __fastcall TTrayMainForm::Shutdown1Click(TObject *Sender) +{ + // Desactivamos el HILO de ejecución y esperamos hasta que acabe + Propiedades->LEGO_COMM->Terminate(); + Propiedades->LEGO_COMM->WaitFor(); + + Close(); +} +//--------------------------------------------------------------------------- + + +void __fastcall TTrayMainForm::BSalirClick(TObject *Sender) +{ + Visible = false; +} +//--------------------------------------------------------------------------- + + +void __fastcall TTrayMainForm::FormCreate(TObject *Sender) +{ + Visible = false; +} +//--------------------------------------------------------------------------- + + +void __fastcall TTrayMainForm::Acercade1Click(TObject *Sender) +{ + TAcercaDe *AcercaDe; + AcercaDe = new TAcercaDe(this); + AcercaDe->ShowModal(); +} +//--------------------------------------------------------------------------- + + + diff --git a/cap_control_CB5/traymain.dfm b/cap_control_CB5/traymain.dfm new file mode 100644 index 0000000..6469840 Binary files /dev/null and b/cap_control_CB5/traymain.dfm differ diff --git a/cap_control_CB5/traymain.h b/cap_control_CB5/traymain.h new file mode 100644 index 0000000..b8a96ec --- /dev/null +++ b/cap_control_CB5/traymain.h @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------------- +//Borland C++Builder +//Copyright (c) 1987, 1998 Borland International Inc. All Rights Reserved. +//---------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +#ifndef traymainH +#define traymainH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include "LM2000.h" +#define MYWM_NOTIFY (WM_APP+100) +#define IDC_MYICON 1006 +extern HINSTANCE g_hinst; +LRESULT IconDrawItem(LPDRAWITEMSTRUCT lpdi); +//--------------------------------------------------------------------------- +class TTrayMainForm : public TForm +{ +__published: + TPopupMenu *PopupMenu1; + TMenuItem *Properties1; + TMenuItem *ToggleState1; + TMenuItem *Shutdown1; + TMenuItem *N1; + TMenuItem *N2; + TMenuItem *Acercade1; + TImage *imagenOn; + TImage *imagenOFF; + TSpeedButton *BSalir; + TMenuItem *Estado1; + void __fastcall FormDestroy(TObject *Sender); + void __fastcall Properties1Click(TObject *Sender); + void __fastcall ToggleState1Click(TObject *Sender); + void __fastcall Shutdown1Click(TObject *Sender); + + + + void __fastcall BSalirClick(TObject *Sender); + + void __fastcall FormCreate(TObject *Sender); + void __fastcall Acercade1Click(TObject *Sender); +private: // private user declarations + void __fastcall DrawItem(TMessage& Msg); + void __fastcall MyNotify(TMessage& Msg); + bool __fastcall TrayMessage(DWORD dwMessage); + HANDLE __fastcall IconHandle(void); + void __fastcall ToggleState(void); + PSTR __fastcall TipText(void); + bool Running; +public: // public user declarations + virtual __fastcall TTrayMainForm(TComponent* Owner); +BEGIN_MESSAGE_MAP +MESSAGE_HANDLER(WM_DRAWITEM,TMessage,DrawItem) +MESSAGE_HANDLER(MYWM_NOTIFY,TMessage,MyNotify) +END_MESSAGE_MAP(TForm) +}; +//--------------------------------------------------------------------------- +extern TTrayMainForm *TrayMainForm; +//--------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/cap_gestion/Portada.cpp b/cap_gestion/Portada.cpp new file mode 100644 index 0000000..ec5e955 --- /dev/null +++ b/cap_gestion/Portada.cpp @@ -0,0 +1,27 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "Portada.h" +#include "capg_menu.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TAcercaDe *AcercaDe; +//--------------------------------------------------------------------------- +__fastcall TAcercaDe::TAcercaDe(TComponent* Owner) + : TForm(Owner) +{ + Image4->Picture->LoadFromFile( "portada.jpg" ); +} +//--------------------------------------------------------------------------- +void __fastcall TAcercaDe::Timer1Timer(TObject *Sender) +{ + Timer1->Enabled = false; + this->Visible = false; + MainForm->ShowModal(); + Close(); +} +//--------------------------------------------------------------------------- + diff --git a/cap_gestion/Portada.dfm b/cap_gestion/Portada.dfm new file mode 100644 index 0000000..3c08b11 --- /dev/null +++ b/cap_gestion/Portada.dfm @@ -0,0 +1,766 @@ +object AcercaDe: TAcercaDe + Left = 316 + Top = 135 + BorderIcons = [] + BorderStyle = bsDialog + ClientHeight = 373 + ClientWidth = 359 + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsStayOnTop + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 13 + object Image4: TImage + Left = 0 + Top = 0 + Width = 359 + Height = 373 + Align = alClient + AutoSize = True + end + object Image1: TImage + Left = 160 + Top = 256 + Width = 153 + Height = 57 + Picture.Data = { + 07544269746D6170B6290000424DB62900000000000036040000280000009F00 + 00003C0000000100080000000000802500000000000000000000000100000000 + 00003924240052242400392D2D00632D2D00742D2D0039363600523636006336 + 36007436360041403600524036006B4036004A493600413640008D3640004140 + 40005B404000634040007440400085404000414940009E4940004A5240006352 + 40004A404900634049004A494900524949006349490074494900854949009649 + 49004A5249006B5249008D5249004A495200524952004A5252005B5252006352 + 52007C5252005B5C52008D5C52005B5C5C00635C5C007C5C5C008D5C5C00A65C + 5C00B75C5C005B655C0063655C0074655C007C6E5C005B5C6500745C65008D5C + 65005B656500636565006B6565007C6565008D656500AF656500C0656500FB5C + 6E00F2656E00636E6E006B6E6E00746E6E007C6E6E008D6E6E00B76E6E00C86E + 6E00FB657800F26E78005B787800747878007C7878008D7878009E787800C078 + 7800C8787800D97878007C81780085817800E1817800858A7800AF8A7800FB65 + 81005B788100857881008D788100A6788100F2788100858181009E818100A681 + 8100C0818100E1818100FB818100858A8100968A8100D98A8100FB658A00FB78 + 8A007C818A008D818A00A6818A00E1818A00FB818A008D8A8A00968A8A00AF8A + 8A00B78A8A00C88A8A00E18A8A00FB8A8A00AF948A00C0948A00FB948A00FB6E + 940096819400FB819400968A9400C08A9400C88A9400FB8A94008D9494009694 + 9400B7949400C0949400C8949400FB9494009E9D9400FB9D9400A66E9D00C894 + 9D00969D9D009E9D9D00A69D9D00D09D9D00FB9D9D00B7B09D00FB78A600FB81 + A600FB8AA600FB94A600AF9DA600C89DA600D09DA600FB9DA600AFA6A600FBA6 + A600B7B0A600C8B0A600D0B0A600D9B0A600E1B0A600FBB0A600F26EB000FB78 + B000FB8AB000FB94B000C0A6B000E1A6B000F2A6B000AFB0B000B7B0B000C0B0 + B000C8B0B000D0B0B000D9B0B000F2B0B000FBB0B000EAB9B000F278B900E1A6 + B900F2A6B900B7B0B900C0B0B900C8B0B900D0B0B900D9B0B900E1B0B900F2B9 + B900FBB9B900F2C2B900FBC2B900D0B9C200D9B9C200EAB9C200E1C2C200F2C2 + C200FBC2C200C8CCC200FBCCC200F2A6CC00D9C2CC00FBC2CC00D0CCCC00EACC + CC00F2CCCC00FBCCCC00D0D5CC00D9D5CC00F281D500F28AD500F294D500D9A6 + D500F2D5D500FBD5D500E1DED500EADED500FBDED500F278DE00FB81DE00E18A + DE00EA8ADE00EA94DE00EA9DDE00F2A6DE00FBC2DE00FBD5DE00E1DEDE00F2DE + DE00FBDEDE00EAE8DE00EA94E800F29DE800EAB9E800F2C2E800E1CCE800FBE8 + E800EAF1E800F2F1E800E18AF100D09DF100F2F1F100FBF1F100D994FA00D09D + FA00C8A6FA00D0B0FA00C0B9FA00C8B9FA00C8C2FA00D0C2FA00C8CCFA00D0CC + FA00D9D5FA00E1D5FA00D9DEFA00E1DEFA00EAE8FA00FBE8FA00F2F1FA00FBFA + FA00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFEFEFEFEFCFCFCFCFCFCFEFEFEFEFEFEFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFE + FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE + FEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFEFCFAF7F6F6F4F7F7F7F7F7F7F7F8FBFCFEFEFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFBFAFAF8F8F8F8F8 + F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FAFAF8F8F8F8 + F8F8F8F8F8F8F8F8F8FAFAF8F8FAFAFBFCFEFEFFEDE7E0E0E0E0E7EDEDFFFFFF + FFFFEDE7E0E0E0E0EDFFFFFFFFFFEDEDEDEDFFFFFFFFEDE7E0E7EDFFFFFFFFFF + FF00FFFFFFFFFFFFFCF7F4F1F0F0EBF1F1F1F1F1F1F1F3F4F8FBFEFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF9F8F5F3F3F3F3F3F3 + F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 + F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F8FBFCE0C9C0B8ACACB8C0C9E0E7EDFF + FFFFE0C0B8ACACB8C9E0EDFFFFEDE0C9C9D1E7EDFFEDD4C0B8C0C9E0EDFFFFFF + FF00FFFFFFFFFFFFFAF4EBEAD7CCCDCECECECECDD8D8EAEFF2F7FCFFFFFFFFED + EDEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE5DBDBDADADADADADADADA + DADADADADAD9DADADADADADADAE3D9DADADADADADADADADAD9DADADADADADADA + DADADADAD9DAD9DADADAD9D9E2E2EEEBF2F5E6C5978373736273838C97C0D1E7 + E7E7C08C7D736C768CACC5E0EDE7D1978C97B8D1E7E7C09773838CACC9E7FFFF + FF00FFFFFFFFFFFFF8F1EAD59E7979919191908F8E9FD5EAF0F5FBFFEDE7D1D1 + D1D1D1D1E0E7EDEDFFFFFFFFFFFFFFFFFFFFFFE7DCC3A0A0A0A1A1A1A1A1A1A1 + A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1 + A1A1A1A1A1A1A1A1A1A1A090AEAECCEAEFF178000100020001306273768CACC0 + C92D00000100046C738397BAD11C1283737385B88200000047627385B8E0FFFF + FF00FFFFFFFFFFFFF9EBD677485C7295959583836C4877CCE2F5FAE7C9B8978C + 8C8C8C9797ACC0D1E0E7EDFFFFFFFFFFFFFFEDC9B07D797D8395959595959595 + 9595959595959595959595959595959595959595959595959595959595959595 + 959595959595959595958C83735777CCEACF19C0ABA4A4B8AB9302007262738C + 2E10ACB0A4B893020E73768C8CA3870601506297127BACB83C000E83ACD1FFFF + FF00FFFFFFFFFFFFDFE4CC663F498BA4A4A4A4A36B4057AEE2E6FBDF8D848484 + 6A80817273738397ACC0D1E7EDFFFFFFFFFFE7B88C5C6BA39597A4A4A4A4A4A4 + A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4 + A4A4A4A4A4A4A4A4A4A4A4A472493F77D837AAA4A4A4ABB8B6A3B8A33B017662 + 0094A4A4A4A4ACAB2E0083737D27A4ABB8063E830E93A4ABACAB0A72B8E0FFFF + FF00FFFFFFFFFFFFE7E4CE77485C7297A49595836B4066AEE3E6C605052B2B2B + 2B250F142C5F7273838C97C0D1E7EDFFFFFFE7C08C62728C9597A4A4A4A4A4A4 + A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4 + A4A4A4A4A4A4A4A4A4A4979572493F77CD8611B6A4A4AB3B00000093B83B0061 + 03ABA4A4B8A30206BD9400617300B8A4A49304734645ACABAB060385B8E0FFFF + FF00FFFFFFFFFFFFFFE7C5A17967738C8C8383736C678FC3E5DF0F43A2B6A4A4 + ABAABC96522605204E6B738397B8D1FFFFFFEDC9AC7D73838395959595959595 + 9595959595959595959595959595959595959595959595959595959595959595 + 95959595959195959595837D6C6767A0DBDFC400279B9B03C9C9C9006AA4A31C + 00A3ABA49400838B1CB0C5101301A9A4A4B600739700B7A4AB11617397D1EDFF + FF00FFFFFFFFFFFFFFFFDDC5B0959595959583837D91BDDCFD6D0FB3A4A4A4A4 + A4A4ABABB6B37E2B05053C73738CACC9E7FFFFE7C5AC83838383958C95959595 + 8C958C95958C9595958C8C958C958C95958C958C8C8C8C8C8C958C8C958C9583 + 8C958C958C8C8C8C9595837D7D7D91C3E5FFFFFF3B0006BFC0AC97711CA495B8 + 006FA4A49304738C02B8ACB600462DABA4C5026C8300AAA4A46F03738CC0E7ED + FF00FFFFFFFFFFFFFFFFFFEDE7E0E0C9DDD1DDC9C9E0E7FFFF424BABA4A4A4B0 + B6B5895D5D8ABBBBB25D18185F737D97C0E0FFFFEDE0C9C0C5C5C5C5C0C5C5C5 + C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C0 + C5C5C5C5C5C0C5C5C5C5C5C5C0C9DDE7FFFFFFFFFFFFE0958C130007AAA4A4AB + 7B00C5A4940073730087A4AB875000B0A4AC805173472DABA4A3006C738CC0DD + ED00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A5DB0A4A4A4A4 + 962500072806094CB2BCB3430F144F7397C0E7FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE0101288BBDACA4A4A4A4 + 94000093AB281E8306B8A4A4A3130494A4A4AC01677300A4A4B0281F627385AC + C900FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF435DA4A4A4A4B6 + 3A0082E0EDFF4D052B96B6B47A1C054F73ACC9EDFFFFFFFFFFFFFFFFFFFFFFED + EDEDEDEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD20094B7ABA4A4A4A4A4A4A4 + A901D10006B61C0087ABA4A49400001CACA4AB000102024EA4A4940000727683 + AC00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF435DA4A4A4A4B3 + 0046ACD1EDFFFFD20A2096ABA49635006183B8E0EDFFFFFFFFFFFFFFEDE7DDC9 + C9C0C0C0C5C9E0E7EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDEDE7E7 + E7E7EDEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFF277BACA4ACACACA4AC7B4500 + 01D4E0ED92926FABA4A4A4A48BC0B8ACACA4A4B8C05BC5A4ACA4A4ACAB001F7D + B800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF435DA4A4A4A496 + 017397C2E7FFFFFFD2092CB5B0A3A725127397C9E7FFFFFFFFFFFFEDE0C0B897 + 8C8C8C8C9797ACC9E0EDFFFFFFFFFFFFFFFFFFFFFFFFFFEDE7E0DDD1C9C9C5C0 + C0C0C5C9C9D1E0E7EDFFFFFFFFFFFFFFFFFFFFFF3A87A4A4A4ACA33C02002EC9 + B8ACC0D1A9001CA3A4A4A4B7101CB6A4ACA4A4A4ACB64587A4A4A4A4ABBD0A72 + C200FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF435DA4A4A4ABA8 + 005183A4D1EDFFFFFFCA187EB6A4B089004783ACE0EDFFFFFFFFE7D0C27F4444 + 4343435E7B727697B8E0EDFFFFFFFFFFFFFFFFEDE7E0C9C0B8AC979785858383 + 8385858C8C97ACC0C9E0E7EDFFFFFFFFFFFFFFFFFE00ABACACBD00618397AC97 + 83768397C0E08000021C19012706100010ABACB81C002D0236ABA4B81C002E8B + E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C39A3A4A4A4B5 + 0908738CC0E7FFFFFFFF7E26B3ABACB51A03738CC9E7FFFFFFFFE743050F2B4B + 5D52391A0F2650859DC9EDFFFFFFFFFFFFEDE7D1C0B89D8CA4A371706D6D6D6E + 5E5F758C7D73738597B8C9E0EDFFFFFFFFFFFFFFFF0F36ABA4B70083738C0100 + 016C738397D1FFECFFFFFFFFFFEDFFFF028BA4A42713738300B6B8A437039DC9 + E700FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC10996A3A4A4A4 + 6D051C83C0E7FFFFFFFFEC185DB5A4A47E003083B8DDFFFFFFFF1B0F6DB4B6B6 + B6BCBEC4964B050271D1EDFFFFFFEDE7E0C0B89D9C4E260F0F252B4B5D5D5D5D + 5D522B1A0F1B3B7173768CACC0E0EDFFFFFFFFFFFFFF420DB7A45E00010082B8 + AF3C017697C9EDFFFFFFFFFFFFFFFFFFED00BFA4AA007D7360010027B600C9E7 + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF430963BBAAAB + B4841B82E0EDFFFFFFFFFF6D14B2A4A4BB3901738CC0E7EDFF2B0F8AA3B5B252 + 25051A397EA7924328E7EDFFEDE7D1C0AC811B0F0F2B5DA2B5AAA4A4A4A4A4A4 + A4A4A3B5B37F3A18095B6C7385B8D1E7FFFFFFFFFFFFFFDE00007BC095A4A4AB + A4AC1BACC8E0FFFFFFFFFFFFFFFFFFFFFFEC009BAC2D0100B500033D1E71D1ED + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC2105204C5D + 96842794EDFFFFFFFFFFFFE8187EA3A4A37A00477397C0D1A70552B6B57F2600 + 1DB6801C02146D4C2DFFEDE7D1C9B89214052552A2B4A3B0A4A4A4A4A4A4A4A4 + A4A4A4A4A4A4B38A26052765738CB8D1E7FFFFFFFFFFFFFFFF96000693BDB8B7 + B8AB10E0E7EDFFFFFFFFFFFFFFFFFFFFFFFFFF00A9B8448BACB8210073ACE0FF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9B2A72E + 37372DBEFFFFFFFFFFFFFFFF432BBCB0A4B5250B5C7383A4202BB5BB4C001DD0 + FFFFFFFFEC812E2E5FE7D1B7BE3B0F0F4BA7AAA4A4A4A4A4A4A4ACA4A4A4A3B5 + BB929692A2B4AAB0B58A2505287385A4C9E7FFFFFFFFFFFFFFFFFFFFDF260700 + 0010EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A0287ABABACA301BFE0EDFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFC10FA7A4A4AA5A092971729C186DB57F051CC9ED + FFFFFFFFFFFFEDE7D1C0B774180F4196B6A4A4A4A4A4A4A4A4A4A4B5A67F4229 + 050507060A204396B4B5A743054E7383ACD1EDFFFFFFFFFFFFFFFFFFFFFFFEFF + FFECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1002D81702700E7EDFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF204CA3A4A4B5894223090214B3BC1A07C0E7FF + FFFFFFFFEDE7C2ADBF2C090F52A7ABA4A4A4A4A4A4B0ABAAB4894B1B00114EB6 + E7FFFFFFEDBE34023A96B5B66D051D7285B8E0EDFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFE7D44C25B4A4A4A4A4B5A8430026B6A50071C9EDFF + FFFFEDE7D1C0B9340F0F43A2A3A4A4A4A4A4A4A4A4B6B36E29020145C8EDFFFF + FFFFFFFFFFFFFF96051A96B6B54B002A7397C9EDFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFEDE0C0BE180596A4A4A4A4AA962B004CBC5D038CC0E0E7 + E7E0C9ADB93A051A52B3A3A4A4A4A4A4A4A4B0B5964B0F012EB7C9C9D1D1D1D1 + E0E7EDFFFFFFFFFFE932026EB4B54B002F73BAE0FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFEDE0C0BF2005256EB4A4A4A4B33100111A5DBC4D1F7395B8C0 + B89C8D1A0F2589B4A4A4A4A4A4A4A4A4A4B47F26000146978C8C8C8C8C8C9797 + 9DB8C9E0EDFFFFFFFFFF530A89A4B43900729DD1EDFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFE7D1B95D14185DA7B4B6A4A4A4B31A138C4D52BC5D0373738C8C + 9B1A051A68A7A4A4A4A4A4A4A4A4A4AA963809023D72978B7075707581A48373 + 738397B8C9E7EDFFFFFFFF2039A3A48A022F97C9EDFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFEDE0D16D0F0D4BBBB6B58A5DB4A4A4B63901835359B696020B6A290F + 05428AB5ABA4A4A4A4A4A4A4A4B5893902000F1A141414253A5D5D4B25140F1B + 397C738397C0E0EDFFFFFFC60FBBA4B539038CC2E7FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFE7D020052B89BCBB96430905A6B0A4AB7E0083452CB6AA4C090F254B + 96B5A3A4A4A4A4A4A4A4A4A396440500000214426EA2BBB5AAAAA3A3B6B4964B + 1B05456C7395C0E7FFFFFFFF26A6A4AA6D018CC0E7FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFEDE7960F2388B5B6962C0007992C52AFA4A4A706547518A7A4AAB4B4AAA4 + A4A4A4A4A4A4A4A4A4B6A64B0500001A4BA7B5A3A4A4A4A4A4ABA4A3A4A4A4A4 + B37F18054F7397C9E7FFFFFF2B96ABA496038CC0E7FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF2C0D39B3B6BC6D0607C8FFFFCB14B4ABA4B42C158B185DB5ACA4B0B0A4 + A4ABA4A4A4A4ABA998390502053989B4A4A4B0A4B0B0AAB3925D4B2B2B4B89B3 + B6B6A736003D7DACE0EDFFFF1B96ACA492038CC2EDFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF42054BBBB6B66D0503E0FFFFFFED0989A4ABA36903832C20A2A4ABA4A4A4 + A4A4A4A4A4A3A7430F00021A8AB4AAA4A4A4B0B6B48A431000062D3C331B051A + 6DBCB6A726005C97D1EDFFE10FB3A4A4920397C9EDFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFB2054BB4B0AB8A0507B8E7FFFFFFFF294BAAABABA700619C0A31A8A4A4A4A4 + A4A4A4B496420200001A5DBBABA4A4A4A4B5A24318001CC7FFFFFFFFFFFFED64 + 0232BCB69605128CC2E7ED4C14B5A4AB9603ACD1FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF5225B3A4A4B6390172ACE0FFFFFFFF6416B4A4A4B3023E8C5F024BB4B6A3A3 + AAB37F39060F00002C92AAA4A4A4A4A3BB4C09003CE0FFFFFFFFFFFFFFFFFFFF + A8065DB6B543018CC0E0FF0F42ABABA36303B8E0FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF5352AAA4A4B62C03738CC0E0EDFFFFE90992B6A4AA260883B8BE0206262727 + 260201289A2B0F52A8A4A4A4A4A4BB6D1B0080EDFFFFFFFFFFFFFFFFFFFFFFFF + FFC60FA2A4960083B8D12B1896A4A4B42012D1EDFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF535DA4A4A4A36D003E7397C9E7EDFFFF1753AAA4A44C0173A4D1DFA8A9A9A9 + A9C7EDED430D6DB5B0A4A4A4A4A74B0207DFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF1A6DA3A70776978D054BAAA4AB8A0271E0FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF5D5DA4A4A4A4B33100477397C0E0EDFF5520B4A4A48A00518CC0EDFFFFFFFF + FFFFFF430552B6A4ABA4A4A37F1B0081EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF5239AABB077381092BA7A4A4A72B01C9EDFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF5D39B6A4A4A4A4A7260054738CACC9E7D30996A4A4B3181F83B8E7FFFFFFFF + FFFF6E0552B4B0A4A4A4AA6D0211D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF4B39AAA710560F35A8A4A4B23A00AAEDFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF8A14B4A4A4A4A4AA922001477383A4C9D40C6DA4A4B53A0373ACE0FFFFFFFF + FFFF0F38B3A4A4A4A4A4920F28E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF1A52B68800021A96AAABB052004EE0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF0D52B5A4A4A4ABAAA22C00225C7395B8332BB5A4A37A006197D1EDFFFFFF + FF4C0FA2A3A4A4A4A4961A01E0EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFED0596BC420239B1B6ACB67E022EE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF431A8AAAA4A4A4A4A4A53A02075173855609B3A4B0B306308CC9EDFFFFFF + FF1A42B5A4A4A4A4B539009BEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + ED4326BBA7392BA2A3ABAA891B1DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFED26096DB5A4A4ABA4B0B58929001F61650689ABB0B52C0783BAE7FFFFFF + FF1496A4A4A4A4A37F004FD1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE7 + A60D8ABC896DBBABB0B34B0606E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFE9260553B4AFA4A4A4B0A4A84B05012A004CAAB0A35D0173B8E0EDFFFF + FF0FBBA4A4A4A4B6390197D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7 + 1825BBB3B2B4A4A4B3430028E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFC102146DB4A4A4A4A4A4AA9642020026B3A4A496024797C9EDFFFF + FF25B5A4A4A4A4BC182F97C9EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDE0D1C814 + 1A8AA4BDA4B0A389250080EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFED64021A7EB6A4A4A4A4A4AAA75D4296A4ABB5200E8CC0E9FFFF + FF2BB6A4A4A4A4BC055083B7E7FFFFFFFFFFFFFFFFFFFFFFEDEDE0C9B88D0F24 + 89ABA4A4ABB44B001DE7EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFCB17054BB3B6ABA4A4A4B0B5A7A6A4A4B6430183B8E0FFFF + FF25B4A4ABA4A4B50F1F7397C9E7EDFFFFFFFFFFFFFFEDE7E0C9BAAD2C0F2589 + AAA4A4B59639005FEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFCB090C5DB3A3A4A4A4B0ABA4A4A4A4890073ACD1FFFF + E10FA7A4A4A4A4B54300617397C0D1E7EDEDEDE7E0D4D1B89C9326052B7EB4A4 + A4B696310210C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFE133023192AAABA4A4A4A4A4A4A4A6056197C9EDFF + FF147FAAA4A4A4A392052161738CACC0C9C9C9C0B9AC97931A051A68B3A4ABA3 + B47E180080EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFDE330543A6A9A4ACB0A4A4A4A926308CC0E7FF + FF4325B2ABA4A4A4B66E0F1A616C7383838C8C8C933B0F0F3989B4A4A4ABB35D + 1B006FEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF0A0543B2AAABA4A4A4B65D0883B8E0FF + FFE10932B2ABA4A4A4AAA2390914434D442B140F14397AB3B6B0A4A4A3A72B00 + 5EE7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED64021A6DB3A4B0A4B08A0183ACE0FF + FFFF8D052CA7A3A4A4A4AAB48A4C2B2B2B4B528ABBB5B5B6BCAAA4A3922B0081 + EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC64021489B5A4ABA80065B8E0FF + FFFFFFCB0C0552A7B5B0A4A4A4A4A4A4B6B6B5B3B28A59251A6DB36D0207C7EC + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3290943A7B6B50A60C9E7FF + FFFFFFFFEC5302183A7F96A7BBBBBBA2966D42260600064E170206023CEDFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC10C094BA7278BEDFFFF + FFFFFFFFFFFFFFD34D3B101111111107122E6FBEDFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE94D021906A9FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 5800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 5800FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 4A00} + Stretch = True + Transparent = True + end + object Image2: TImage + Left = 112 + Top = 312 + Width = 32 + Height = 32 + AutoSize = True + Picture.Data = { + 055449636F6E0000010004001010100000000000280100004600000010100000 + 00000000680500006E0100002020100000000000E8020000D606000020200000 + 00000000A8080000BE0900002800000010000000200000000100040000000000 + C000000000000000000000001000000000000000000000000000800000800000 + 00808000800000008000800080800000C0C0C000808080000000FF0000FF0000 + 00FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000000000000000 + 011111000000000009BB11000000000019B1B110001110001919B110091BB110 + 99BBB110011B9B1009911100091B9B1000119000099BB1100000000009911990 + 00000A00009009000AA00A000000000000000000000000000000000000000A00 + A0000000000AA000000000000000000000000000FFC7FFFFFF83FFFFFF01FFFF + FF01FFFFC301FFFF8101FFFF0001FFFF0083FFFF00FFFFFF81C3FFFF8189FFFF + FF9FFFFFFA7FFFFFF06FFFFFE3C7FFFFFFF3FFFF280000001000000020000000 + 0100080000000000400100000000000000000000000100000000000000A8FF00 + 00FF00000000FF000000B00000004F0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000FFFFFF00FEFEFEFE + FEFEFEFEFEFE050505FEFEFEFEFEFEFEFEFEFEFEFE0404040404FEFEFEFEFEFE + FEFEFEFE05020000000405FEFEFEFEFEFEFEFEFE04020004000404FEFEFE0303 + 0305FEFE04020402000404FEFE020300000303FE02020000000404FE05030300 + 0200030505020202040405FE0502030002000305FE0504040205FEFE05020200 + 00030305FEFEFEFEFEFEFEFEFE020202030202FEFEFE05050501FEFEFE050205 + 050205FEFE010105FE0105FEFEFEFEFEFEFEFEFEFE0505FEFEFEFEFEFEFEFEFE + FE05FE0505FEFEFEFEFEFEFEFEFEFEFE0501050501FEFE05FEFEFEFEFEFEFE01 + 0105FEFEFEFE050505FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0505FEFEFFC7FFFF + FF83FFFFFF01FFFFFF01FFFFC301FFFF8101FFFF0001FFFF0083FFFF00FFFFFF + 81C3FFFF8189FFFFFF9FFFFFFA7FFFFFF06FFFFFE3C7FFFFFFF3FFFF28000000 + 2000000040000000010004000000000080020000000000000000000010000000 + 0000000000000000000080000080000000808000800000008000800080800000 + C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000 + FFFFFF0000000000000000000000000000000000000000000000000000000111 + 11000000000000000000000000011111111100000000000000000000001191BB + 11111000000000000000000000991B11B111100000000000000000000919B911 + 1B11110000000000000000000199B1911B111100000000000000000009919B91 + 9B1111000000011111100000019991991B111100000011BBBB11100009919191 + 9B111100000991B11BB11100099999199B911100000119B111B1110000999BBB + BB911000009191B9191B11100099B9999B911000009999B9119B111000099911 + 99190000001991B9191B11100000010119000000009999B991BB919000000000 + 00000000009999B19BB11110000000000000000000999BBBB911911000000000 + 00000000000999B9919999000000000000AA000000099999099111000000AAA0 + 00AAA0000000999090199000000AAAA0000AA000000000000000000000AAAA00 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000A0000000000000000000000000000000AA000000 + 000000000000000000AA00000A0000000000000000000000AAAA000000000000 + 000000000000000AAAA000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FFFFF83FFFFFE00FFFFFC007FFFF8003FFFF8003FFFF0001FFFF0001 + FC1F0001F0070001E0030001C0010001C0018003800080038000C0078000E00F + 8000F83F8000FF7F8000FE0FC001F007C001E003E003C0C3F14781E3FF7FC1FF + FF9F7DFFFFC63DFFFFC21DFFFF001EFFFE07063FFC0FF01FFE1FFE0FFFFFFF0F + FFFFFF8F28000000200000004000000001000800000000008004000000000000 + 0000000000010000000000000000000000008000008000000080800080000000 + 8000800080800000C0C0C000C0DCC000F0CAA600D4F0FF00B1E2FF008ED4FF00 + 6BC6FF0048B8FF0025AAFF0000AAFF000092DC00007AB90000629600004A7300 + 00325000D4E3FF00B1C7FF008EABFF006B8FFF004873FF002557FF000055FF00 + 0049DC00003DB900003196000025730000195000D4D4FF00B1B1FF008E8EFF00 + 6B6BFF004848FF002525FF000000FF000000DC000000B9000000960000007300 + 00005000E3D4FF00C7B1FF00AB8EFF008F6BFF007348FF005725FF005500FF00 + 4900DC003D00B900310096002500730019005000F0D4FF00E2B1FF00D48EFF00 + C66BFF00B848FF00AA25FF00AA00FF009200DC007A00B900620096004A007300 + 32005000FFD4FF00FFB1FF00FF8EFF00FF6BFF00FF48FF00FF25FF00FF00FF00 + DC00DC00B900B900960096007300730050005000FFD4F000FFB1E200FF8ED400 + FF6BC600FF48B800FF25AA00FF00AA00DC009200B9007A009600620073004A00 + 50003200FFD4E300FFB1C700FF8EAB00FF6B8F00FF487300FF255700FF005500 + DC004900B9003D00960031007300250050001900FFD4D400FFB1B100FF8E8E00 + FF6B6B00FF484800FF252500FF000000DC000000B90000009600000073000000 + 50000000FFE3D400FFC7B100FFAB8E00FF8F6B00FF734800FF572500FF550000 + DC490000B93D0000963100007325000050190000FFF0D400FFE2B100FFD48E00 + FFC66B00FFB84800FFAA2500FFAA0000DC920000B97A000096620000734A0000 + 50320000FFFFD400FFFFB100FFFF8E00FFFF6B00FFFF4800FFFF2500FFFF0000 + DCDC0000B9B90000969600007373000050500000F0FFD400E2FFB100D4FF8E00 + C6FF6B00B8FF4800AAFF2500AAFF000092DC00007AB90000629600004A730000 + 32500000E3FFD400C7FFB100ABFF8E008FFF6B0073FF480057FF250055FF0000 + 49DC00003DB90000319600002573000019500000D4FFD400B1FFB1008EFF8E00 + 6BFF6B0048FF480025FF250000FF000000DC000000B900000096000000730000 + 00500000D4FFE300B1FFC7008EFFAB006BFF8F0048FF730025FF570000FF5500 + 00DC490000B93D00009631000073250000501900D4FFF000B1FFE2008EFFD400 + 6BFFC60048FFB80025FFAA0000FFAA0000DC920000B97A000096620000734A00 + 00503200D4FFFF00B1FFFF008EFFFF006BFFFF0048FFFF0025FFFF0000FFFF00 + 00DCDC0000B9B900009696000073730000505000F2F2F200E6E6E600DADADA00 + CECECE00C2C2C200B6B6B600AAAAAA009E9E9E0092929200868686007A7A7A00 + 6E6E6E0062626200565656004A4A4A003E3E3E0032323200262626001A1A1A00 + 0E0E0E00F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000 + FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 002A2D2A2D2A000000000000000000000000000000000000000000000000002D + 2A2D2A2D2A2D2A2D000000000000000000000000000000000000000000002D2A + 282ADADA2D2A2D2A2D0000000000000000000000000000000000000000002828 + 2ADA2A2DDA2D2A2D2A0000000000000000000000000000000000000000282D28 + DA282D2D2DDA2D2A2D2A000000000000000000000000000000000000002D2828 + DA2D282D2ADA2A2D2A2D0000000000000000000000000000000000000028282A + 28DA282A28DA2D2A2D2A000000000000002A2D2A2D2A2D0000000000002D2828 + 282D28282ADA2A2D2A2D0000000000002A2DDADADADA2A2D2A0000000028282A + 282A282A28DA2D2A2D2A000000000028282ADA2A2DDADA2A2D2A000000282828 + 28282A2828DA282D2A2D00000000002D2A28DA2D2A2DDA2D2A2D000000002828 + 28DADADADADA282A2D0000000000282A282ADA282D282DDA2D2A2D0000002828 + DA28282828DA282D2A000000000028282828DA282A2D28DA2A2D2A0000000028 + 28282D2D28282D280000000000002D28282ADA282D282DDA2D2A2D0000000000 + 002D002D2A28000000000000000028282828DA28282DDADA282D280000000000 + 000000000000000000000000000028282828DA2A28DADA2A2D2A2D0000000000 + 0000000000000000000000000000282828DADADADA282A2D282D2A0000000000 + 000000000000000000000000000000282828DA28282A28282828000000000000 + 000000000000B8B80000000000000028282828280028282D2A2D000000000000 + B8B8B8000000B8B8B8000000000000002828280028002D2828000000000000B8 + B8B8B800000000B8B8000000000000000000000000000000000000000000B8B8 + B8B8000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000B8000000 + 00000000000000000000000000000000000000000000000000000000B8B80000 + 00000000000000000000000000000000000000000000B8B80000000000B80000 + 0000000000000000000000000000000000000000B8B8B8B80000000000000000 + 00000000000000000000000000000000000000B8B8B8B8000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FFFFF83FFFFFE00FFFFFC007FFFF8003FFFF8003 + FFFF0001FFFF0001FC1F0001F0070001E0030001C0010001C001800380008003 + 8000C0078000E00F8000F83F8000FF7F8000FE0FC001F007C001E003E003C0C3 + F14781E3FF7FC1FFFF9F7DFFFFC63DFFFFC21DFFFF001EFFFE07063FFC0FF01F + FE1FFE0FFFFFFF0FFFFFFF8F} + Transparent = True + end + object Label1: TLabel + Left = 147 + Top = 318 + Width = 211 + Height = 33 + Caption = 'Informática D.J.' + Font.Charset = ANSI_CHARSET + Font.Color = clWhite + Font.Height = -24 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + Transparent = True + end + object Label2: TLabel + Left = 115 + Top = 346 + Width = 228 + Height = 27 + Caption = 'w w w . i n f d j . c o m' + Font.Charset = ANSI_CHARSET + Font.Color = clWhite + Font.Height = -19 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + Transparent = True + end + object Image3: TImage + Left = 0 + Top = 0 + Width = 150 + Height = 150 + AutoSize = True + Picture.Data = { + 07544269746D6170700C0000424D700C00000000000000000000280000009600 + 0000960000000100080001000000280C0000120B0000120B0000040000000400 + 000000000000FFFFFF00FDFCFD00DBAB30009602000096020000420201030103 + 1502010301033B020000430201030103160201033A0200000702040306020003 + 0303030004020005010203030300050200050303030203000502010307020103 + 060200030303030005020003030303000B020003030303000702010301030502 + 0003030303000602000303030300050204030502000903020202030202020300 + 04020003030303000A0200000A02010305020103080201030103070200050302 + 02030300050201030702010305020103010307020003030303000E0201030502 + 0003030303000802010305020103060201030103080200090302020203020202 + 030007020103090200000A020103010304020103080201030103070200050302 + 0202030005020103070201030602010307020003030203000E02010305020004 + 0302030307020103010304020103060201030103080200090302020203020202 + 030007020103090200000A020103040204030602010308020005030202020300 + 050201030702010306020103060200050303020203000D020103050200040302 + 0303060201030103050201030602000403020303060200090303020203020202 + 0300060201030103090200000802010301030602000503020203030004020103 + 0103070200060302020203030402010307020103010305020103060200050302 + 020203000B020103010306020005030202030300040201030103060201030103 + 050200060303030203030502000803020203020202030502010301030A020000 + 0802010307020006030302020303040201030702010304020103040201030103 + 0702010305020103060200050302020203000B0201030702000A030102020302 + 0202030308020103060200050302020203000502000803020203030202030502 + 0005030202020100070200000902000803030302020102020403060200030303 + 0300040201030402010305020003030303000402010301030502040300040202 + 0203040201030B02001003030302020203030202020303020201040304020403 + 050204030502080305020403080200003B02010301032F020103290200003502 + 0103060201032F02010329020000350201036002000096020000960200009602 + 0000960200009602000096020000370200030102020006031402060306020403 + 090204030F0206030003020201000D02000009020603070206030B0206030A02 + 120308020B030003020202000603070207030A020C030D020000090206030702 + 06030B020603090213030702150306020803080210030B020000090206030702 + 06030B020603080214030602150307020803070211030B020000090206030702 + 06030B020603080214030602150307020703070213030A020000090206030702 + 06030B0206030702090304020803050208030502090307020603070209030402 + 08030902000009020603070206030B0206030602080308020603050206030802 + 08030702060307020703070207030902000009020603070206030B0206030602 + 0703090206030502060309020603080206030702060309020703080200000902 + 0603070206030B020603060206030A0206030502060309020603080206030702 + 06030101060200030102020006030802000009020603070206030B0206030602 + 06030A020603050206030902060308020603060206030B020603080200000902 + 0603070206030B020603060206030A0206030502060309020603080206030602 + 060301010A0206030802000009020603070206030B020603050207030A020603 + 060206030802060308020603060206030B020703070200000902060307020603 + 0B020603050206030B0206030602090305020603080206030602060301010B02 + 06030702000009020603070206030B020603050206030B020603070213030802 + 06030602060301010B0206030702000009020603070206030B02060305020603 + 0B0206030702130308020603060206030C020603070200000902060307020603 + 0B020603050207030A0206030902110308020603060206030C02060307020000 + 09020603070206030B020603050207030A0206030B020F030802060306020603 + 0C0205030802000009020603070206030B020603060206030A02060313020703 + 08020603060207030A0206030802000009020603070206030B02060306020703 + 090206031402060308020603070206030A020603080200000902060307020603 + 0B02060306020703090206031402060308020603070206030902070308020000 + 0902060307020703090206030702010107030802060313020603090206030702 + 070308020603090200000902060307020A030402080308020903050207030902 + 0103010306020803090206030802070305020803090200000602090307021503 + 0A02140309020F030A0206030702010113030A02000006020903070214030C02 + 1303080210030A020603090211030B020000060209030702050301020D030E02 + 120308020F030B0206030B020E030C0200000602090307020503010201020B03 + 1002110308020E030C0206030C020C030D020000200204031702070301020603 + 0B0208030F0206030F0207030F02000043020603160201010B02060325020000 + 43020603160201010B020603250200000B020103010336020603220206032502 + 00000A0204033502060322020603250200000902060334020603220206032502 + 0000090206033402060322020603250200000902060334020603220206032502 + 00000A0204033502060322020603250200000B02010301033702050322020603 + 2502000045020403230205032502000096020000960200009602000096020000 + 960200009602000096020000960200009602000045020B034602000045020B03 + 4602000045020B034602000045020B034602000045020B034602000039020801 + 04020B030101450200003602010101020D000B03000300000000430200003202 + 0004010101020F000B030600010204013B020000320213000B030A0001020101 + 3A020000310214000B030D000102010137020000300215000B030F0001020101 + 35020000300215000B0311000101010133020000300215000B03120000030101 + 0100310200002F02100006020B030102010212000101310200002F020B000003 + 0202010008020B0306020F000101300200002E02070010020B0308020E000101 + 01012E0200002E020400000802010101020201010B020B030A020D002F020000 + 45020B03090201010D002F02000045020B030A020E002E02000045020B030B02 + 0D0001012D02000045020B030B020D0001012D02000045020B030A020E002E02 + 000045020B0309020F0001012D02000045020B0307020101100001012D020000 + 45020B030602120001012D02000045020A03050214002E020000450205030008 + 020202010101020215002F02000049020004010101021A0001012E0200004802 + 1E0030020000420204011F00310200003E020004010102022200010131020000 + 3B02010126000101330200003902010101022500360200003502000301010200 + 26003802000034020101010224003C020000350223003E020000340220004202 + 000033021C0047020000320219004B0200003202150007020103010346020000 + 3202130007020403460200003102110000060202010102020803460200003102 + 0F00010104020B034602000031020E00010105020B034602000031020E000101 + 05020B0346020000300201010E0006020B034602000031020E0006020B030F02 + 01013602000032020E0000050201020202000B030C0200050101020001003502 + 000033020E0004020B0301010702000301010200050001013502000032020101 + 110001020B03050101020B0035020000340211000B0311003502000035021000 + 0B03110035020000350201010F000B0311003502000038020D000B0311003502 + 000037020004010202020A000B0311003502000038020101050207000B031000 + 010135020000410204000B030A003C02000045020B034602000045020B034602 + 000045020B034602000045020B034602000045020B034602000045020B034602 + 000096020000960200009602000096020000470208034702000045020C034502 + 000044020E034402000043021003430200004202110343020000420211034302 + 0000410213034202000041021303420200004102130342020000410213034202 + 000041021303420200004202110343020000420211034302000043020F034402 + 000044020D034502000045020B034602000047020703480200010000} + Transparent = True + end + object Label3: TLabel + Left = 104 + Top = 216 + Width = 169 + Height = 25 + AutoSize = False + Caption = 'Desarrollado por:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + Transparent = True + end + object Label4: TLabel + Left = 160 + Top = 8 + Width = 201 + Height = 25 + AutoSize = False + Caption = 'indalo security systems' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + Transparent = True + end + object Label5: TLabel + Left = 152 + Top = 40 + Width = 209 + Height = 25 + Alignment = taCenter + AutoSize = False + Caption = 'Castillo de Utrera Nº6' + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = -19 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + Transparent = True + WordWrap = True + end + object Label6: TLabel + Left = 150 + Top = 62 + Width = 209 + Height = 25 + Alignment = taCenter + AutoSize = False + Caption = '41500 Alcalá de Guadaira' + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + Transparent = True + WordWrap = True + end + object Label7: TLabel + Left = 150 + Top = 80 + Width = 209 + Height = 25 + Alignment = taCenter + AutoSize = False + Caption = 'Sevilla (España)' + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + Transparent = True + WordWrap = True + end + object Label8: TLabel + Left = 150 + Top = 120 + Width = 211 + Height = 25 + Alignment = taCenter + AutoSize = False + Caption = 'www.indalosecurity.com' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + Transparent = True + end + object Timer1: TTimer + Interval = 5000 + OnTimer = Timer1Timer + end +end diff --git a/cap_gestion/Portada.h b/cap_gestion/Portada.h new file mode 100644 index 0000000..2f2d624 --- /dev/null +++ b/cap_gestion/Portada.h @@ -0,0 +1,40 @@ +//--------------------------------------------------------------------------- + +#ifndef ListInitH +#define ListInitH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TAcercaDe : public TForm +{ +__published: // IDE-managed Components + TImage *Image1; + TImage *Image2; + TLabel *Label1; + TLabel *Label2; + TTimer *Timer1; + TImage *Image3; + TLabel *Label3; + TLabel *Label4; + TLabel *Label5; + TLabel *Label6; + TLabel *Label7; + TLabel *Label8; + TImage *Image4; + void __fastcall Timer1Timer(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TAcercaDe(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TAcercaDe *AcercaDe; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_gestion/btickets.bmp b/cap_gestion/btickets.bmp new file mode 100644 index 0000000..300eda2 Binary files /dev/null and b/cap_gestion/btickets.bmp differ diff --git a/cap_gestion/buscar.bmp b/cap_gestion/buscar.bmp new file mode 100644 index 0000000..52312f1 Binary files /dev/null and b/cap_gestion/buscar.bmp differ diff --git a/cap_gestion/cap.ico b/cap_gestion/cap.ico new file mode 100644 index 0000000..b95854e Binary files /dev/null and b/cap_gestion/cap.ico differ diff --git a/cap_gestion/capg.bpr b/cap_gestion/capg.bpr new file mode 100644 index 0000000..da4b172 --- /dev/null +++ b/cap_gestion/capg.bpr @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] +..\LM2000_vcl\LM2000_vcl.bpl=Funciones para el Manejo del LM2000 + +[HistoryLists\hlIncludePath] +Count=4 +Item0=..;cap_gestion;$(BCB)\include;$(BCB)\include\vcl;C:\Programacion\VCLs\include +Item1=..\;cap_gestion;$(BCB)\include;$(BCB)\include\vcl;C:\Programacion\VCLs\include +Item2=cap_gestion;$(BCB)\include;$(BCB)\include\vcl;C:\Programacion\VCLs\include +Item3=cap_gestion;$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=5 +Item0=..;$(BCB)\Projects\Lib;C:\Programacion\VCLs\lib;cap_gestion;$(BCB)\lib\obj;$(BCB)\lib;J:\MisDoc_Linux\CBuilder\Ventas\CAP\LM2000_vcl +Item1=..\;$(BCB)\Projects\Lib;C:\Programacion\VCLs\lib;cap_gestion;$(BCB)\lib\obj;$(BCB)\lib;J:\MisDoc_Linux\CBuilder\Ventas\CAP\LM2000_vcl +Item2=$(BCB)\Projects\Lib;C:\Programacion\VCLs\lib;cap_gestion;$(BCB)\lib\obj;$(BCB)\lib;J:\MisDoc_Linux\CBuilder\Ventas\CAP\LM2000_vcl +Item3=$(BCB)\Projects\Lib;C:\Programacion\VCLs\lib;cap_gestion;$(BCB)\lib\obj;$(BCB)\lib +Item4=cap_gestion;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[HistoryLists\hlIntOutputDir] +Count=2 +Item0=..\obj +Item1=bin + +[HistoryLists\hlFinalOutputDir] +Count=4 +Item0=..\bin\ +Item1=..\bin +Item2=obj\ +Item3=obj + +[HistoryLists\hIBPIOutputDir] +Count=2 +Item0=..\obj +Item1=obj + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/cap_gestion/capg.cpp b/cap_gestion/capg.cpp new file mode 100644 index 0000000..be55e96 --- /dev/null +++ b/cap_gestion/capg.cpp @@ -0,0 +1,34 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("capg.res"); +USEFORM("capg_abonados.cpp", Form1); +USEFORM("capg_gfact.cpp", gFact); +USEFORM("capg_ifact.cpp", iFact); +USEFORM("capg_menu.cpp", MainForm); +USEFORM("capg_qrLabonados.cpp", qrLAbonados); +USEFORM("capg_tabonados.cpp", Form2); +USEFORM("capg_tarifas.cpp", fTarifas); +USEFORM("crd_ctrl.cpp", CardCtrl); +USEFORM("Portada.cpp", AcercaDe); +USEFORM("tickets.cpp", fTickets); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TAcercaDe), &AcercaDe); + Application->CreateForm(__classid(TMainForm), &MainForm); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- + + diff --git a/cap_gestion/capg.dfm b/cap_gestion/capg.dfm new file mode 100644 index 0000000..6f7eab9 --- /dev/null +++ b/cap_gestion/capg.dfm @@ -0,0 +1,16 @@ +object Form4: TForm4 + Left = 192 + Top = 120 + Width = 783 + Height = 540 + Caption = 'Form4' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 +end diff --git a/cap_gestion/capg.h b/cap_gestion/capg.h new file mode 100644 index 0000000..ad88adb --- /dev/null +++ b/cap_gestion/capg.h @@ -0,0 +1,21 @@ +//--------------------------------------------------------------------------- + +#ifndef capgH +#define capgH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TForm4 : public TForm +{ +__published: // IDE-managed Components +private: // User declarations +public: // User declarations + __fastcall TForm4(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm4 *Form4; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_gestion/capg.res b/cap_gestion/capg.res new file mode 100644 index 0000000..8869ff9 Binary files /dev/null and b/cap_gestion/capg.res differ diff --git a/cap_gestion/capg_abonados.cpp b/cap_gestion/capg_abonados.cpp new file mode 100644 index 0000000..a4cf843 --- /dev/null +++ b/cap_gestion/capg_abonados.cpp @@ -0,0 +1,617 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +#include + +#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; +} +//--------------------------------------------------------------------------- + diff --git a/cap_gestion/capg_abonados.ddp b/cap_gestion/capg_abonados.ddp new file mode 100644 index 0000000..cdc0ee8 Binary files /dev/null and b/cap_gestion/capg_abonados.ddp differ diff --git a/cap_gestion/capg_abonados.dfm b/cap_gestion/capg_abonados.dfm new file mode 100644 index 0000000..c3e12e2 --- /dev/null +++ b/cap_gestion/capg_abonados.dfm @@ -0,0 +1,970 @@ +object Form1: TForm1 + Left = -1019 + Top = 115 + Width = 640 + Height = 480 + BorderIcons = [biSystemMenu] + Caption = 'CAP-ges' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Icon.Data = { + 0000010001002020000001000800A80800001600000028000000200000004000 + 0000010008000000000080040000000000000000000000010000000000000000 + 000080808000FFFFFF00C0C0C000FEFEFE00FDFDFD00A8F8FB00FCFCFC00FBFB + FB0085DEEE00A8F7FB00A6F6FA00A4F5F900FAFAFA0000008000F9F9F90083DC + ED0080DAEC00A7F8FA00F7F7F700F5F5F50081DBEC007ED9EB0078D4E800A7F7 + FA00A5F6F900F8F8F800F6F6F600F3F3F300F1F1F1007FD9EB007CD7EA00A3F5 + F900F2F2F200EFEFEF00EBEBEB007DD8EA007AD6E9006ECCE400A2F4F800A0F2 + F800E8E8E8007BD7EA0078D5E90076D3E80074D1E700A0F2F7009EF1F7009DF0 + F600EDEDED00EAEAEA00E7E7E700E4E4E400E1E1E10079D5E90072D0E60070CE + E5009CEFF6009BEEF60099EDF500F4F4F400ECECEC00E9E9E900E6E6E600E0E0 + E000DDDDDD00DADADA0077D4E80074D2E7006CCBE40097ECF40096EBF400F0F0 + F000DEDEDE00DBDBDB00D8D8D800D5D5D500D3D3D30075D2E7006ECDE4006CCB + E3006ACAE30067C8E20095EBF30094EAF30092E8F200EEEEEE00C7D8FF00D7D7 + D700D4D4D400D1D1D10073D1E60070CFE5006CCCE3006ACAE20068C9E20065C7 + E10063C5E00093E9F30091E7F2008FE6F100E3E3E300C2D4FF00D0D0D0006FCE + E5006DCCE4006BCBE30069C9E20064C6E10062C4E00060C2DF008EE5F100E5E5 + E500E2E2E200BED1FF00CECECE00040404006BCAE30067C7E10065C6E1005EC0 + DE005CBEDD008DE4F0008CE3F0008AE1EF00DFDFDF00DCDCDC00BDD0FF00B9CD + FF00CFCFCF00CDCDCD0067C8E10065C6E00060C3DF005EC1DE005CBFDD005ABD + DC0058BCDC008AE2EF0088E0EE0087DFEE00D9D9D900B5CAFF006B8FFF0063C4 + DF0061C3DF005ABEDC0058BCDB0056BBDB0086DFED0085DEED0083DDEC00B1C7 + FF00A4BCFF005FC2DF005CC0DE005ABEDD0056BADB0054B9DB0086DFEE0084DD + ED00ACC3FF00A8BFFF005DC1DE005BBFDD0059BDDC0057BBDB0055B9DA0053B8 + DA0084DEED0083DCEC0080DAEB00B4C9FF00B0C6FF00A7BFFF0055BADA0053B8 + D90051B7D90082DCEC0081DBEB007FDAEB00AFC5FF00ABC2FF0055BADB0051B6 + D9004FB5D90080DBEC00A3BCFF004FB5D8004DB4D8004DB4D7004BB3D7004AB2 + D7000070AB0000659A0000619400C5C5C500005E9000005A8A00005684000051 + 7D00004C760000527F00004E7900004A730000456C0000416600003D60000047 + 6F0000436900003F6300003A5C000036560000325000FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000C9D0D1D2D2D3D4D50000000000000000000000 + 0000000000000000000000000000CACBCCCCCDCECF0000000000000000000000 + 0000000000000000000000000000C5C6C7C7C8C9000000000000000000000000 + 000000000000000000000000000000C2C3C30000C40000000000000000000000 + 000000000000000000000000000000C100007D7D8D0000000000000000000000 + 000000000000000000C000260000000032347D7D000000000000000000000000 + 0000000000000000BEBF002626000000020F00008F0000000000000000000000 + 00000000000000B1BCBD00262616000000008F8F8F8F00000000000000000000 + 000000000000B7A8B8B9002626BA1E00000000B6AEBB8F000000000000000000 + 0000000000A5A6AFB0B1002626B2B3B4000000B5B6AEAE8F0000000000000000 + 00000000A3A4A5A6A7A8002626A9AA15AB0000ACADA1A1AE8F00000000000000 + 000000919A9B9C899D9E0026269FA010151100808E9898A1A28F000000000000 + 000084909186879293940026268B9596970000808E988F8F8F99000000000000 + 006B83846185868788890026268A8B8C008D5800808E0000008F000000000000 + 69756B76776D6E78790126267A7B7C007D417E007F8000818200000000000137 + 68696A6B526C6D6E01262663646F007034713549007200595A7374000000015B + 5C4F5D5E5F606101262662636400323E290E3F650066004B4C4D67000000014E + 37384F505152012626535455005631313D230E29005700414258595A00000143 + 44373826450126263B4647001D1D1D0E4848480E0700000E494A4B4C4D000136 + 2C2D3738012626393A3B003C3C3C3C3C0E3C14210E3D3E3F0E4041420100012A + 2B2C2D0126262E2F30001B1B130E1A1A0F0E0D1B1C0E31323334350103010124 + 2517002626202728001B131A0F0D0E0705040E081A140E22232901030100011E + 1F160001181920011B1B130E0F0D080E0504020E1A1421222301030100000115 + 161700000118190C01131A0F0E0808070E0402070E1B1C1D0103010000000110 + 110100000001120B0C010F0D0D020707050E02070D1314010301000000000109 + 010000000000010A0B0C010D0807020505040E05080F01030100000000000001 + 0000000000000001060100010707050200000205080103010000000000000000 + 0000000000000000010000000105050002000205010301000000000000000000 + 0000000000000000000000000001000400040201030100000000000000000000 + 0000000000000000000000000000010204040103010000000000000000000000 + 0000000000000000000000000000000102010301000000000000000000000000 + 0000000000000000000000000000000001D6010000000000000000000000FFFC + 00FFFFFE00FFFFFE00FFFFFF00FFFFE300FFFFC180FFFF8080FFFF00407FFE00 + 303FFC00101FF800000FF0000007E0000007C000000780000007000000070000 + 0003000000010000000000000000000000000000000100000003040000070E00 + 000F1F00001FBF88003FFFDC007FFFFE00FFFFFE01FFFFFE03FFFFFFC7FF} + OldCreateOrder = False + Position = poScreenCenter + OnClose = FormClose + PixelsPerInch = 96 + TextHeight = 24 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 632 + Height = 49 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + object Label1: TLabel + Left = 0 + Top = -4 + Width = 389 + Height = 45 + Caption = 'Gestion de Abonados' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -32 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + end + object Bevel1: TBevel + Left = 0 + Top = 32 + Width = 577 + Height = 9 + Shape = bsBottomLine + end + object CardOK: TImage + Left = 488 + Top = 0 + Width = 24 + Height = 24 + AutoSize = True + Picture.Data = { + 07544269746D617096010000424D960100000000000076000000280000001800 + 0000180000000100040000000000200100000000000000000000100000000000 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FFFFFFFFFFF991FFFFFFFFFFFFFFFFFFFFFF991FFFFFFFFFFFFFFFFFFFFF + 991100000FFFFFFF00000000099110880FFF0000888888888001108800FF8888 + 888888888880088808FF88888888888888888888080F88888888888888888888 + 080B88888888888888888888080B888888888000000000008801888800000777 + 7777777808010000FFFFF777777777788001FFFFFFF77777FFF00000000BFFFF + FF777000000BBBBBBBBBFF7700000BBBBBBBBB111111000077BBBBBB111111BB + BBBB777700BB1111BBBBBBBBBBBB0000FFBBBBBBBBBBB33BBBBBFFFFFFB33BBB + 3BBBB33BBB3BFFFFFFBB3BB33B3BBBBBBBBBFFFFFFB33BBBBBB3BBBBBBBBFFFF + FFB33BBBBBBBBBBBFFFFFFFFFFBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF} + Visible = False + end + end + object PageControl1: TPageControl + Left = 0 + Top = 49 + Width = 632 + Height = 381 + ActivePage = TabSheet2 + Align = alClient + TabIndex = 1 + TabOrder = 1 + OnChange = PageControl1Change + object TabSheet1: TTabSheet + Caption = 'Localizador' + object Panel2: TPanel + Left = 0 + Top = 0 + Width = 624 + Height = 41 + Align = alTop + BevelOuter = bvLowered + TabOrder = 0 + object Label2: TLabel + Left = 8 + Top = 8 + Width = 140 + Height = 24 + Caption = 'Buscar ficha por:' + end + object SelIndex: TComboBox + Left = 152 + Top = 4 + Width = 145 + Height = 32 + ItemHeight = 24 + TabOrder = 0 + Text = 'SelIndex' + Items.Strings = ( + 'nombre' + 'apellidos' + 'dni' + 'telefono1') + end + object Buscador: TEdit + Left = 296 + Top = 4 + Width = 169 + Height = 32 + TabOrder = 1 + OnKeyUp = BuscadorKeyUp + end + object BitBtn2: TBitBtn + Left = 472 + Top = 4 + Width = 145 + Height = 34 + Caption = 'Matriculas' + TabOrder = 2 + OnClick = BitBtn2Click + Glyph.Data = { + 46070000424D460700000000000036040000280000001A0000001C0000000100 + 0800000000001003000000000000000000000001000000000000000000004000 + 000080000000FF000000002000004020000080200000FF200000004000004040 + 000080400000FF400000006000004060000080600000FF600000008000004080 + 000080800000FF80000000A0000040A0000080A00000FFA0000000C0000040C0 + 000080C00000FFC0000000FF000040FF000080FF0000FFFF0000000020004000 + 200080002000FF002000002020004020200080202000FF202000004020004040 + 200080402000FF402000006020004060200080602000FF602000008020004080 + 200080802000FF80200000A0200040A0200080A02000FFA0200000C0200040C0 + 200080C02000FFC0200000FF200040FF200080FF2000FFFF2000000040004000 + 400080004000FF004000002040004020400080204000FF204000004040004040 + 400080404000FF404000006040004060400080604000FF604000008040004080 + 400080804000FF80400000A0400040A0400080A04000FFA0400000C0400040C0 + 400080C04000FFC0400000FF400040FF400080FF4000FFFF4000000060004000 + 600080006000FF006000002060004020600080206000FF206000004060004040 + 600080406000FF406000006060004060600080606000FF606000008060004080 + 600080806000FF80600000A0600040A0600080A06000FFA0600000C0600040C0 + 600080C06000FFC0600000FF600040FF600080FF6000FFFF6000000080004000 + 800080008000FF008000002080004020800080208000FF208000004080004040 + 800080408000FF408000006080004060800080608000FF608000008080004080 + 800080808000FF80800000A0800040A0800080A08000FFA0800000C0800040C0 + 800080C08000FFC0800000FF800040FF800080FF8000FFFF80000000A0004000 + A0008000A000FF00A0000020A0004020A0008020A000FF20A0000040A0004040 + A0008040A000FF40A0000060A0004060A0008060A000FF60A0000080A0004080 + A0008080A000FF80A00000A0A00040A0A00080A0A000FFA0A00000C0A00040C0 + A00080C0A000FFC0A00000FFA00040FFA00080FFA000FFFFA0000000C0004000 + C0008000C000FF00C0000020C0004020C0008020C000FF20C0000040C0004040 + C0008040C000FF40C0000060C0004060C0008060C000FF60C0000080C0004080 + C0008080C000FF80C00000A0C00040A0C00080A0C000FFA0C00000C0C00040C0 + C00080C0C000FFC0C00000FFC00040FFC00080FFC000FFFFC0000000FF004000 + FF008000FF00FF00FF000020FF004020FF008020FF00FF20FF000040FF004040 + FF008040FF00FF40FF000060FF004060FF008060FF00FF60FF000080FF004080 + FF008080FF00FF80FF0000A0FF0040A0FF0080A0FF00FFA0FF0000C0FF0040C0 + FF0080C0FF00FFC0FF0000FFFF0040FFFF0080FFFF00FFFFFF001D1D1D1D1D1D + 1D1D1D1D1D1D1D1D1D1D1D1DDB1D1D1D1D1D1D1D00001D1D1D1D000000000000 + 0000000000000000921D1D1D1D1D1D1D00001D1D242400000000000000000000 + 00000000921D1D1D6D491D1D00001D1D24DBFFFFFFFFFFFFB6B6B6B6B6920000 + 921DDBB60000009200001D1D24DBDBFFFFFFFFFFFFB6B6B6B6B60000921DADD1 + 6824241D00001D1D24DB9292929292929292929292B60000B6D6CCF5CC80921D + 00001D1D24DB6D6D6D6D4949494949496DB60024B6ADF5D0A464DB1D00001D1D + 24DBDBDBDBDBFFFFFFFFFFFFB6B600248DD0F5CC80B61D1D00001D1D24DBDBDB + DBDBDBFFFFFFFFFFFFB6002484F5CCA4891D1D1D00001D1D24DB492424242424 + 24B6B66D24240020D0F1C8801D1D1D1D00001D1D24DBDBDBDBDBDBDBDB92042E + 5777572E0464A4206D1D1D1D00001D1D24DBDBDBDBDBDBDB6D25779B77777777 + 57092024241D1D1D00001D1D24DBDBFFFFDBDBFF249B9B9B9B9B777777570524 + 49921D1D00001D1D24DB6D494992DB4972BBBBBBBB9B9B9B7777530049921D1D + 00001D1D24FFDBDBDBDBDB24BB72BB72724E4E9B2A2A57046D921D1D00001D1D + 24FFFFDBDBDBDB24BB25499249BB254E535353056DB61D1D00001D1D24FF6D49 + 4992DB24DF9225DF4972294E7377530592DB1D1D00001D1D24FFDBDBDBDBDB24 + DFDB92FF924D729B292977041D1D1D1D00001D1D24FFFFFFFFFFDB6D92FFFFFF + FFDFBBBB9B775249DB1D1D1D00001D1D24FFDBDBDBDBFFDB24DBFFFFDFDFBBBB + 9B77041D1D1D1D1D00001D1D24FF6D494992FFFFFF24BBDFDFBBBB9B7724921D + 1D1D1D1D00001D1D24FFFFFFFFFFFFFFFFDB24297296722924B61D1D1D1D1D1D + 00001D1D24FFFFFFFFFFFFFFFFFFDBFF6D6D006D1D1D1D1D1D1D1D1D00001D1D + 246D6D6D6D6D6D6D6D6D6D6D6D6D00921D1D1D1D1D1D1D1D00001D1D000E0E0E + 0E0E0E0E0E0E0E0E0E0E00921D1D1D1D1D1D1D1D00001D1D0033BBDFDFDFDF77 + 33333300053304B6DB1D1D1D1D1D1D1D00001D1D003333333333333333333333 + 3333041D1D1D1D1D1D1D1D1D00001D1D2424242424242424242424242424491D + 1D1D1D1D1D1D1D1D0000} + end + end + object DBGrid1: TDBGrid + Left = 0 + Top = 41 + Width = 624 + Height = 301 + Align = alClient + DataSource = DsAbonados + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + ReadOnly = True + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -13 + TitleFont.Name = 'MS Sans Serif' + TitleFont.Style = [] + OnDblClick = DBGrid1DblClick + Columns = < + item + Expanded = False + FieldName = 'dni' + Width = 75 + Visible = True + end + item + Expanded = False + FieldName = 'nombre' + Width = 100 + Visible = True + end + item + Expanded = False + FieldName = 'apellidos' + Width = 141 + Visible = True + end + item + Expanded = False + FieldName = 'telefono1' + Width = 136 + Visible = True + end + item + Expanded = False + FieldName = 'telefono2' + Width = 137 + Visible = True + end> + end + end + object TabSheet2: TTabSheet + Caption = 'Ficha' + ImageIndex = 1 + object PageControl2: TPageControl + Left = 0 + Top = 73 + Width = 624 + Height = 269 + ActivePage = TabSheet3 + Align = alClient + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial' + Font.Style = [] + MultiLine = True + ParentFont = False + TabIndex = 0 + TabOrder = 0 + TabPosition = tpRight + OnChange = PageControl2Change + object TabSheet3: TTabSheet + Caption = 'General' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + object Bevel2: TBevel + Left = 0 + Top = 0 + Width = 560 + Height = 261 + Align = alClient + end + object Label6: TLabel + Left = 8 + Top = 240 + Width = 60 + Height = 18 + Caption = 'Periodo:' + end + object Label10: TLabel + Left = 248 + Top = 56 + Width = 69 + Height = 18 + Caption = 'Provincia:' + end + object Label9: TLabel + Left = 8 + Top = 56 + Width = 73 + Height = 18 + Caption = 'Localidad:' + end + object Label8: TLabel + Left = 8 + Top = 16 + Width = 71 + Height = 18 + Caption = 'Direcci'#243'n:' + end + object Label7: TLabel + Left = 472 + Top = 56 + Width = 27 + Height = 18 + Caption = 'CP:' + end + object Label11: TLabel + Left = 8 + Top = 88 + Width = 72 + Height = 18 + Caption = 'Tel'#233'fonos:' + end + object Label12: TLabel + Left = 328 + Top = 128 + Width = 103 + Height = 18 + Caption = 'Tipo Abonado:' + end + object Label13: TLabel + Left = 328 + Top = 152 + Width = 54 + Height = 18 + Caption = 'Estado:' + end + object DBEdit3: TDBEdit + Left = 96 + Top = 8 + Width = 489 + Height = 26 + DataField = 'direccion' + DataSource = DsAbonados + TabOrder = 0 + OnKeyPress = AvanzaCampo + end + object DBEdit4: TDBEdit + Left = 96 + Top = 48 + Width = 145 + Height = 26 + DataField = 'localidad' + DataSource = DsAbonados + TabOrder = 1 + OnKeyPress = AvanzaCampo + end + object DBEdit5: TDBEdit + Left = 320 + Top = 48 + Width = 145 + Height = 26 + DataField = 'provincia' + DataSource = DsAbonados + TabOrder = 2 + OnKeyPress = AvanzaCampo + end + object DBEdit7: TDBEdit + Left = 504 + Top = 48 + Width = 81 + Height = 26 + DataField = 'cp' + DataSource = DsAbonados + TabOrder = 3 + OnKeyPress = AvanzaCampo + end + object DBEdit8: TDBEdit + Left = 96 + Top = 80 + Width = 145 + Height = 26 + DataField = 'telefono1' + DataSource = DsAbonados + TabOrder = 4 + OnKeyPress = AvanzaCampo + end + object DBEdit9: TDBEdit + Left = 248 + Top = 80 + Width = 145 + Height = 26 + DataField = 'telefono2' + DataSource = DsAbonados + TabOrder = 5 + OnKeyPress = AvanzaCampo + end + object DBLookupComboBox2: TDBLookupComboBox + Left = 432 + Top = 122 + Width = 153 + Height = 26 + DataField = 'tipoa' + DataSource = DsAbonados + KeyField = 'idta' + ListField = 'desc' + ListSource = DsTAbonados + TabOrder = 6 + end + object DBCheckBox1: TDBCheckBox + Left = 432 + Top = 176 + Width = 153 + Height = 17 + Caption = 'abonado es VIP' + DataField = 'vip' + DataSource = DsAbonados + TabOrder = 7 + ValueChecked = 'True' + ValueUnchecked = 'False' + end + object ComboBox1: TComboBox + Left = 432 + Top = 150 + Width = 153 + Height = 26 + ItemHeight = 18 + TabOrder = 8 + Text = 'ComboBox1' + OnChange = ComboBox1Change + Items.Strings = ( + 'Alta' + 'Sancionado' + 'Baja-Impagado' + 'Baja') + end + object ComboBox2: TComboBox + Left = 77 + Top = 230 + Width = 140 + Height = 26 + ItemHeight = 18 + TabOrder = 9 + OnChange = ComboBox2Change + Items.Strings = ( + 'Mensual - 1 Mes' + 'BiMestral - 2 Meses' + 'Trimestral - 3 Meses' + 'Anual') + end + object RenovarAbono: TBitBtn + Left = 224 + Top = 224 + Width = 75 + Height = 33 + Caption = 'renovar' + TabOrder = 10 + OnClick = RenovarAbonoClick + end + end + object TabSheet4: TTabSheet + Caption = 'Vehiculos' + ImageIndex = 1 + object DBGrid2: TDBGrid + Left = 0 + Top = 0 + Width = 590 + Height = 263 + Align = alClient + DataSource = DsVehiculos + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 0 + TitleFont.Charset = ANSI_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'Arial' + TitleFont.Style = [] + OnDrawColumnCell = DBGrid2DrawColumnCell + OnDblClick = DBGrid2DblClick + Columns = < + item + Expanded = False + FieldName = 'matricula' + Title.Alignment = taCenter + Title.Caption = 'Matricula' + Width = 121 + Visible = True + end + item + Expanded = False + FieldName = 'color' + Title.Alignment = taCenter + Title.Caption = 'Color' + Width = 84 + Visible = True + end + item + Expanded = False + FieldName = 'modelo' + Title.Alignment = taCenter + Title.Caption = 'Modelo' + Width = 268 + Visible = True + end + item + Expanded = False + FieldName = 'idplaza' + Title.Alignment = taCenter + Title.Caption = 'Plaza' + Width = 56 + Visible = True + end + item + Expanded = False + FieldName = 'idCard' + ReadOnly = True + Title.Alignment = taCenter + Title.Caption = 'T' + Width = 24 + Visible = True + end> + end + end + object TabSheet5: TTabSheet + Caption = 'Facturas' + ImageIndex = 2 + object DBGrid3: TDBGrid + Left = 0 + Top = 37 + Width = 590 + Height = 226 + Align = alBottom + DataSource = DsFacturas + Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit] + ReadOnly = True + TabOrder = 0 + TitleFont.Charset = ANSI_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -19 + TitleFont.Name = 'Arial' + TitleFont.Style = [] + OnDblClick = DBGrid3DblClick + Columns = < + item + Expanded = False + FieldName = 'pagado' + Title.Caption = 'Pagada' + Width = 95 + Visible = True + end + item + Expanded = False + FieldName = 'id' + Title.Alignment = taCenter + Title.Caption = 'Factura' + Width = 103 + Visible = True + end + item + Expanded = False + FieldName = 'fechaE' + Title.Caption = 'Desde...' + Width = 105 + Visible = True + end + item + Expanded = False + FieldName = 'fechaS' + Title.Alignment = taRightJustify + Title.Caption = '...Hasta' + Width = 95 + Visible = True + end + item + Expanded = False + FieldName = 'importe' + Title.Alignment = taCenter + Title.Caption = 'Importe' + Width = 101 + Visible = True + end> + end + object BitBtn1: TBitBtn + Left = 472 + Top = 2 + Width = 115 + Height = 28 + Caption = 'Eliminar' + TabOrder = 1 + OnClick = BitBtn1Click + Glyph.Data = { + 0E0A0000424D0E0A000000000000360400002800000042000000160000000100 + 080000000000D8050000C40E0000C40E00000001000000000000000000000000 + 5500000080000000AA000000D5000000FF00002B0000002B5500002B8000002B + AA00002BD500002BFF000055000000555500005580000055AA000055D5000055 + FF000080000000805500008080000080AA000080D5000080FF0000AA000000AA + 550000AA800000AAAA0000AAD50000AAFF0000D5000000D5550000D5800000D5 + AA0000D5D50000D5FF0000FF000000FF550000FF800000FFAA0000FFD50000FF + FF005500000055005500550080005500AA005500D5005500FF00552B0000552B + 5500552B8000552BAA00552BD500552BFF005555000055555500555580005555 + AA005555D5005555FF005580000055805500558080005580AA005580D5005580 + FF0055AA000055AA550055AA800055AAAA0055AAD50055AAFF0055D5000055D5 + 550055D5800055D5AA0055D5D50055D5FF0055FF000055FF550055FF800055FF + AA0055FFD50055FFFF008000000080005500800080008000AA008000D5008000 + FF00802B0000802B5500802B8000802BAA00802BD500802BFF00805500008055 + 5500805580008055AA008055D5008055FF008080000080805500808080008080 + AA008080D5008080FF0080AA000080AA550080AA800080AAAA0080AAD50080AA + FF0080D5000080D5550080D5800080D5AA0080D5D50080D5FF0080FF000080FF + 550080FF800080FFAA0080FFD50080FFFF00AA000000AA005500AA008000AA00 + AA00AA00D500AA00FF00AA2B0000AA2B5500AA2B8000AA2BAA00AA2BD500AA2B + FF00AA550000AA555500AA558000AA55AA00AA55D500AA55FF00AA800000AA80 + 5500AA808000AA80AA00AA80D500AA80FF00AAAA0000AAAA5500AAAA8000AAAA + AA00AAAAD500AAAAFF00AAD50000AAD55500AAD58000AAD5AA00AAD5D500AAD5 + FF00AAFF0000AAFF5500AAFF8000AAFFAA00AAFFD500AAFFFF00D5000000D500 + 5500D5008000D500AA00D500D500D500FF00D52B0000D52B5500D52B8000D52B + AA00D52BD500D52BFF00D5550000D5555500D5558000D555AA00D555D500D555 + FF00D5800000D5805500D5808000D580AA00D580D500D580FF00D5AA0000D5AA + 5500D5AA8000D5AAAA00D5AAD500D5AAFF00D5D50000D5D55500D5D58000D5D5 + AA00D5D5D500D5D5FF00D5FF0000D5FF5500D5FF8000D5FFAA00D5FFD500D5FF + FF00FF000000FF005500FF008000FF00AA00FF00D500FF00FF00FF2B0000FF2B + 5500FF2B8000FF2BAA00FF2BD500FF2BFF00FF550000FF555500FF558000FF55 + AA00FF55D500FF55FF00FF800000FF805500FF808000FF80AA00FF80D500FF80 + FF00FFAA0000FFAA5500FFAA8000FFAAAA00FFAAD500FFAAFF00FFD50000FFD5 + 5500FFD58000FFD5AA00FFD5D500FFD5FF00FFFF0000FFFF5500FFFF8000FFFF + AA00FFFFD5003F3F3F006B6B6B0095959500C0C0C000FFFFFF00F6F6F6FEFEFE + FEFEFEFEFEFEFEFEFEFEFEFEFEF6F6F6F6F6F6F6F6F6F60505050505050505F6 + F6F6F6F6F6F6F6F6F6FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF6F6F60000F6F6 + 00000000000000000000000000000000FEF6F6F6F6F6F6F6F605050505050505 + 0505050505F6F6F6F6F6F6F600000000000000000000000000000000FEF6F6F6 + 0000F6F600FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEF6F6F6F6F6F6F605050505 + 05050505050505050505F6F6F6F6F6F600FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 + FEF6F6F60000F6F600FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEF6F6F6F6F6F605 + 050505FAFAFAFAFAFAFA0505050505F6F6F6F6F600FFFFFFFFFFFFFFFFFFFFFF + FFFFFF00FEF6F6F60000F6F600FFFFFFFFFF00FF00FF00000000FF00FEF6F6F6 + F6F605050505FAFAFAFAFAFAFAFAFAFA05050505F6F6F6F600FFFFFFFFFF05FF + 05FF05050505FF00FEF6F6F60000F6F600FFFF05FFFFFFFFFFFFFFFFFFFFFF00 + FEF6F6F6F6050505050505FAFAFAFAFAFAFAFAFAFA05050505F6F6F600FFFF05 + FFFFFFFFFFFFFFFFFFFFFF00FEF6F6F60000F6F600FF0505FFFFFFFFFFFFFFFF + FFFFFF00FEF6F6F6F605050505050505FAFA000000000000FAFA050505F6F6F6 + 00FF0505FFFFFFFFFFFFFFFFFFFFFF00FEF6F6F60000F6F600FFFFFF05FF0000 + FF000000FF00FF00FEF6F6F600000000FA0505050500FEFEFEFEFEFE00FAFA05 + 0505F6F600FFFFFF05FF0505FF050505FF05FF00FEF6F6F60000F6F600FFFFFF + FFFFFFFFFFFFFFFFFFFFFF00FEF6F6F654D254D2000005050505FFFFFF000000 + 0000FA050505F6F600FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEF6F6F60000F6F6 + 00FFFF05FFFFFFFFFFFFFFFFFFFFFF00FEF6F6F6D254D25400FEFE05050505FF + FFFFFEFEFEFE00050505F6F600FFFF05FFFFFFFFFFFFFFFFFFFFFF00FEF6F6F6 + 0000F6F600FF0505FFFF000000FF000000FFFF00FEF6F6F6D2D2D2D200FFFFFF + 05050505FF0000000000FA050505F6F600FF0505FFFF050505FF050505FFFF00 + FEF6F6F60000F6F600FFFFFF05FFFFFFFFFFFFFFFFFFFF00FEF6F6F6D2D2D2D2 + 000000FFFF05050505FFFEFEFE00FA050505F6F600FFFFFF05FFFFFFFFFFFFFF + FFFFFF00FEF6F6F60000F6F600FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEF6F6F6 + 0000000000FAFA00FFFF05050505000000FAFA050505F6F600FFFFFFFFFFFFFF + FFFFFFFFFFFFFF00FEF6F6F60000F6F600FFFF05FFFF00FF000000FF0000FF00 + FEF6F6F6050505FAFAFAFAFA00FFFF05050505FAFAFAFA050505F6F600FFFF05 + FFFF05FF050505FF0505FF00FEF6F6F60000F6F600FF0505FFFFFFFFFFFFFFFF + FFFFFF00FEF6F6F6050505FAFAFAFAFAFA0000FF05050505FAFAFA050505F6F6 + 00FF0505FFFFFFFFFFFFFFFFFFFFFF00FEF6F6F60000F6F600FFFFFF05FFFFFF + FFFFFFFFFFFFFF00FEF6F6F6F6050505FAFAFAFAFAFAFA00FF05050505FA0505 + 05F6F6F600FFFFFF05FFFFFFFFFFFFFFFFFFFF00FEF6F6F60000F6F600FFFFFF + FFFFFFFFFFFFFFFFFFFFFF00FEF6F6F6F605050505FAFAFAFAFAFAFA00000505 + 0505050505F6F6F600FFFFFFFFFFFFFFFFFFFFFFFFFFFF00FEF6F6F60000F6F6 + 00000000FFFF000000FF0000FFFFFF00FEF6F6F6F6F605050505FAFAFAFAFAFA + FAFAFA0505050505F6F6F6F600000000FFFF050505FF0505FFFFFF00FEF6F6F6 + 0000F6F600FEFE0005FFFFFFFFFFFFFFFFFFFF00FEF6F6F6F6F6F60505050505 + FAFAFAFAFAFA0505050505F6F6F6F6F600FEFE0005FFFFFFFFFFFFFFFFFFFF00 + FEF6F6F60000F6F6F600FE00FFFFFFFFFFFFFFFFFFFFFF00FEF6F6F6F6F6F6F6 + 0505050505050505050505050505F6F6F6F6F6F6F600FE00FFFFFFFFFFFFFFFF + FFFFFF00FEF6F6F60000F6F6F6F60000000000000000000000000000F6F6F6F6 + F6F6F6F6F6050505050505050505050505F6F6F6F6F6F6F6F6F6000000000000 + 0000000000000000F6F6F6F60000F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 + F6F6F6F6F6F6F6F6F6F6F60505050505050505F6F6F6F6F6F6F6F6F6F6F6F6F6 + F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F60000} + NumGlyphs = 3 + end + end + end + object Panel3: TPanel + Left = 0 + Top = 0 + Width = 624 + Height = 73 + Align = alTop + BevelOuter = bvLowered + TabOrder = 1 + object Label3: TLabel + Left = 8 + Top = 12 + Width = 32 + Height = 20 + Caption = 'DNI:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object Label4: TLabel + Left = 8 + Top = 44 + Width = 60 + Height = 20 + Caption = 'Nombre:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object DBText1: TDBText + Left = 464 + Top = 8 + Width = 65 + Height = 25 + DataField = 'falta' + DataSource = DsAbonados + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object DBEdit1: TDBEdit + Left = 96 + Top = 4 + Width = 121 + Height = 28 + DataField = 'dni' + DataSource = DsAbonados + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 0 + OnKeyPress = AvanzaCampo + end + object DBEdit2: TDBEdit + Left = 96 + Top = 36 + Width = 161 + Height = 28 + DataField = 'nombre' + DataSource = DsAbonados + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 1 + OnKeyPress = AvanzaCampo + end + object DBEdit6: TDBEdit + Left = 264 + Top = 36 + Width = 321 + Height = 28 + DataField = 'apellidos' + DataSource = DsAbonados + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 2 + OnKeyPress = AvanzaCampo + end + end + end + end + object StatusBar1: TStatusBar + Left = 0 + Top = 430 + Width = 632 + Height = 19 + Panels = <> + SimplePanel = False + end + object DBNavigator1: TDBNavigator + Left = 506 + Top = 54 + Width = 120 + Height = 18 + DataSource = DsAbonados + VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete] + Flat = True + Hints.Strings = ( + 'Primera ficha' + 'Ficha anterior' + 'Siguiente Ficha' + #218'ltima ficha' + 'Nueva Ficha' + 'Eliminar Ficha' + 'Post edit' + 'Cancel edit' + 'Refresh data') + ParentShowHint = False + ShowHint = True + TabOrder = 3 + end + object BitBtn3: TBitBtn + Left = 424 + Top = 48 + Width = 75 + Height = 25 + Caption = 'Impr.' + TabOrder = 4 + OnClick = BitBtn3Click + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000120B0000120B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00300000000000 + 0003377777777777777308888888888888807F33333333333337088888888888 + 88807FFFFFFFFFFFFFF7000000000000000077777777777777770F8F8F8F8F8F + 8F807F333333333333F708F8F8F8F8F8F9F07F333333333337370F8F8F8F8F8F + 8F807FFFFFFFFFFFFFF7000000000000000077777777777777773330FFFFFFFF + 03333337F3FFFF3F7F333330F0000F0F03333337F77773737F333330FFFFFFFF + 03333337F3FF3FFF7F333330F00F000003333337F773777773333330FFFF0FF0 + 33333337F3F37F3733333330F08F0F0333333337F7337F7333333330FFFF0033 + 33333337FFFF7733333333300000033333333337777773333333} + NumGlyphs = 2 + end + object TbAbonados: TTable + BeforeOpen = TbAbonadosBeforeOpen + BeforeDelete = TbAbonadosBeforeDelete + OnNewRecord = TbAbonadosNewRecord + TableName = 'datos\abonados.db' + Left = 300 + Top = 76 + end + object DsAbonados: TDataSource + DataSet = TbAbonados + OnDataChange = DsAbonadosDataChange + OnUpdateData = DsAbonadosUpdateData + Left = 300 + Top = 44 + end + object TbVehiculos: TTable + BeforeOpen = TbVehiculosBeforeOpen + BeforeDelete = TbVehiculosBeforeDelete + IndexName = 'iAbonados' + MasterFields = 'ida' + MasterSource = DsAbonados + TableName = 'datos\vehiculos.db' + Left = 336 + Top = 74 + end + object DsVehiculos: TDataSource + DataSet = TbVehiculos + Left = 336 + Top = 48 + end + object TbBusqMatriculas: TTable + BeforeOpen = TbVehiculosBeforeOpen + TableName = 'datos\vehiculos.db' + Left = 432 + Top = 10 + end + object TbCards: TTable + BeforeOpen = TbCardsBeforeOpen + IndexName = 'iOwner' + TableName = 'datos\cards.db' + Left = 464 + Top = 10 + end + object TbTAbonados: TTable + MasterSource = DsAbonados + TableName = 'datos\tabonados.db' + Left = 376 + Top = 74 + end + object DsTAbonados: TDataSource + DataSet = TbTAbonados + Left = 376 + Top = 48 + end + object TbFacturas: TTable + BeforeOpen = TbFacturasBeforeOpen + IndexName = 'iOwner' + MasterFields = 'ida' + MasterSource = DsAbonados + TableName = 'datos\TbFacturas.db' + Left = 532 + Top = 28 + end + object DsFacturas: TDataSource + DataSet = TbFacturas + Left = 536 + end +end diff --git a/cap_gestion/capg_abonados.h b/cap_gestion/capg_abonados.h new file mode 100644 index 0000000..3170018 --- /dev/null +++ b/cap_gestion/capg_abonados.h @@ -0,0 +1,144 @@ +//--------------------------------------------------------------------------- + +#ifndef capg_abonadosH +#define capg_abonadosH +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +/* +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +*/ +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TPanel *Panel1; + TBevel *Bevel1; + TLabel *Label1; + TPageControl *PageControl1; + TTabSheet *TabSheet1; + TTabSheet *TabSheet2; + TPanel *Panel2; + TLabel *Label2; + TComboBox *SelIndex; + TEdit *Buscador; + TDBGrid *DBGrid1; + TStatusBar *StatusBar1; + TTable *TbAbonados; + TDataSource *DsAbonados; + TPageControl *PageControl2; + TTabSheet *TabSheet3; + TLabel *Label6; + TLabel *Label10; + TLabel *Label9; + TLabel *Label8; + TDBEdit *DBEdit3; + TDBEdit *DBEdit4; + TDBEdit *DBEdit5; + TTabSheet *TabSheet4; + TBevel *Bevel2; + TDBGrid *DBGrid2; + TLabel *Label7; + TDBEdit *DBEdit7; + TLabel *Label11; + TDBEdit *DBEdit8; + TDBEdit *DBEdit9; + TLabel *Label12; + TTable *TbVehiculos; + TDataSource *DsVehiculos; + TBitBtn *BitBtn2; + TTable *TbBusqMatriculas; + TLabel *Label13; + TDBLookupComboBox *DBLookupComboBox2; + TTable *TbCards; + TImage *CardOK; + TDBCheckBox *DBCheckBox1; + TTable *TbTAbonados; + TDataSource *DsTAbonados; + TComboBox *ComboBox1; + TTabSheet *TabSheet5; + TComboBox *ComboBox2; + TBitBtn *RenovarAbono; + TTable *TbFacturas; + TDataSource *DsFacturas; + TDBGrid *DBGrid3; + TBitBtn *BitBtn1; + TPanel *Panel3; + TLabel *Label3; + TDBEdit *DBEdit1; + TLabel *Label4; + TDBEdit *DBEdit2; + TDBEdit *DBEdit6; + TDBText *DBText1; + TDBNavigator *DBNavigator1; + TBitBtn *BitBtn3; + void __fastcall TbAbonadosBeforeOpen(TDataSet *DataSet); + void __fastcall TbVehiculosBeforeOpen(TDataSet *DataSet); + void __fastcall DBGrid1DblClick(TObject *Sender); + void __fastcall BuscadorKeyUp(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall BitBtn2Click(TObject *Sender); + void __fastcall TbAbonadosBeforeDelete(TDataSet *DataSet); + void __fastcall TbCardsBeforeOpen(TDataSet *DataSet); + void __fastcall DBGrid2DrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State); + void __fastcall TbVehiculosBeforeDelete(TDataSet *DataSet); + void __fastcall DBGrid2DblClick(TObject *Sender); + void __fastcall DsAbonadosUpdateData(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall PageControl2Change(TObject *Sender); + void __fastcall PageControl1Change(TObject *Sender); + void __fastcall ComboBox1Change(TObject *Sender); + void __fastcall DsAbonadosDataChange(TObject *Sender, + TField *Field); + void __fastcall AvanzaCampo(TObject *Sender, char &Key); + void __fastcall TbAbonadosNewRecord(TDataSet *DataSet); + void __fastcall ComboBox2Change(TObject *Sender); + void __fastcall RenovarAbonoClick(TObject *Sender); + void __fastcall TbFacturasBeforeOpen(TDataSet *DataSet); + void __fastcall DBGrid3DblClick(TObject *Sender); + void __fastcall BitBtn1Click(TObject *Sender); + void __fastcall BitBtn3Click(TObject *Sender); +private: // User declarations + TDateTime __fastcall DiasEnPeriodoDesde( TDateTime fechaE ); + Currency __fastcall ImporteDelPeriodo(); + + Currency ImportesPeriodo[4]; + bool isSettingData; + AnsiString cfgPWD; + +public: // User declarations + __fastcall TForm1(TComponent* Owner); + +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_gestion/capg_estados.rar b/cap_gestion/capg_estados.rar new file mode 100644 index 0000000..0c909a2 Binary files /dev/null and b/cap_gestion/capg_estados.rar differ diff --git a/cap_gestion/capg_gfact.cpp b/cap_gestion/capg_gfact.cpp new file mode 100644 index 0000000..3510f69 --- /dev/null +++ b/cap_gestion/capg_gfact.cpp @@ -0,0 +1,119 @@ +//--------------------------------------------------------------------------- + +#include +#include +#pragma hdrstop + +#include "capg_gfact.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TgFact *gFact; +//--------------------------------------------------------------------------- +__fastcall TgFact::TgFact(TComponent* Owner) + : TForm(Owner) +{ + 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 ); + delete ini; + + TbFacturas->Active = true; + TbAbonados->Active = true; +} +//--------------------------------------------------------------------------- +TDateTime __fastcall TgFact::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 TgFact::ImporteDelPeriodo() +{ + if ( TbAbonados->FieldByName("fperiodo")->AsInteger >= 0 && + TbAbonados->FieldByName("fperiodo")->AsInteger <= 3 ) + + return ImportesPeriodo[ TbAbonados->FieldByName("fperiodo" )->AsInteger ]; + + return 0; +}//--------------------------------------------------------------------------- +void __fastcall TgFact::BitBtn1Click(TObject *Sender) +{ + if ( ComboBox1->ItemIndex >=0 && ComboBox2->ItemIndex >= 0 ) + { + TDateTime FechaInicioFacturas = EncodeDate( ComboBox2->ItemIndex+2002, ComboBox1->ItemIndex+1, 1 ); + + ComboBox1->Visible = false; + ComboBox2->Visible = false; + BitBtn1->Visible = false; + ProgressBar1->Position=0; + ProgressBar1->Visible=true; + TbAbonados->Active = true; + ProgressBar1->Max = TbAbonados->RecordCount; + TbAbonados->First(); + while ( !TbAbonados->Eof ) + { + // Si el estado es -ALTA- + if ( TbAbonados->FieldByName("estado")->AsInteger == 0 ) + { + TbFacturas->Filter = "[idc] = '" + TbAbonados->FieldByName("ida")->AsString+"'"; + TbFacturas->Filtered = true; + + // Si tuviera alguna factura impagada + if ( TbFacturas->Locate( "pagado", false, TLocateOptions() << loCaseInsensitive ) ) + { + TbAbonados->Edit(); + TbAbonados->FieldByName("estado")->AsInteger = 2; // Baja-Temporal + TbAbonados->Post(); + } else { + // Todas las facturas las tiene pagadas... + // Si su ultimo abono NO ESTARA VIGENTE en la fecha seleccionada + if ( TbFacturas->FieldByName("fechaS")->AsDateTime <= FechaInicioFacturas ) + { + // Insertamos la nueva factura... + TbFacturas->Insert(); + TbFacturas->FieldByName("idc")->AsInteger = TbAbonados->FieldByName("ida")->AsInteger; + TbFacturas->FieldByName("pagado")->AsBoolean = false; + TbFacturas->FieldByName("fechaE")->AsDateTime = FechaInicioFacturas; + TbFacturas->FieldByName("fechaS")->AsDateTime = DiasEnPeriodoDesde( FechaInicioFacturas ); + TbFacturas->FieldByName("importe")->AsCurrency = ImporteDelPeriodo(); + TbFacturas->Post(); + } + TbFacturas->Filtered = false; + } + } + ProgressBar1->Position++; + TbAbonados->Next(); + } + Close(); + } else { + ShowMessage( "El Mes y/o Año seleccionados no son correctos" ); + } + +} +//--------------------------------------------------------------------------- diff --git a/cap_gestion/capg_gfact.ddp b/cap_gestion/capg_gfact.ddp new file mode 100644 index 0000000..cdc0ee8 Binary files /dev/null and b/cap_gestion/capg_gfact.ddp differ diff --git a/cap_gestion/capg_gfact.dfm b/cap_gestion/capg_gfact.dfm new file mode 100644 index 0000000..c36ed3e --- /dev/null +++ b/cap_gestion/capg_gfact.dfm @@ -0,0 +1,220 @@ +object gFact: TgFact + Left = 157 + Top = 143 + Width = 640 + Height = 349 + BorderIcons = [biSystemMenu] + Caption = 'CAP-ges' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Icon.Data = { + 0000010001002020000001000800A80800001600000028000000200000004000 + 0000010008000000000080040000000000000000000000010000000000000000 + 0000000080000080000000808000800000008000800080800000C0C0C0008080 + 80000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000606 + 0600121212001F1F1F002C2C2C003939390045454500525252005F5F5F006C6C + 6C007878780085858500929292009F9F9F00ABABAB00B8B8B800C5C5C500D2D2 + D200DEDEDE00EBEBEB00F8F8F800F0FBFF00A4A0A000C0DCC000F0CAA6000000 + 3E0000005D0000007C0000009B000000BA000000D9000000F0002424FF004848 + FF006C6CFF009090FF00B4B4FF0000143E00001E5D0000287C0000329B00003C + BA000046D9000055F000246DFF004885FF006C9DFF0090B5FF00B4CDFF00002A + 3E00003F5D0000547C0000699B00007EBA000093D90000AAF00024B6FF0048C2 + FF006CCEFF0090DAFF00B4E6FF00003E3E00005D5D00007C7C00009B9B0000BA + BA0000D9D90000F0F00024FFFF0048FFFF006CFFFF0090FFFF00B4FFFF00003E + 2A00005D3F00007C5400009B690000BA7E0000D9930000F0AA0024FFB60048FF + C2006CFFCE0090FFDA00B4FFE600003E1400005D1E00007C2800009B320000BA + 3C0000D9460000F0550024FF6D0048FF85006CFF9D0090FFB500B4FFCD00003E + 0000005D0000007C0000009B000000BA000000D9000000F0000024FF240048FF + 48006CFF6C0090FF9000B4FFB400143E00001E5D0000287C0000329B00003CBA + 000046D9000055F000006DFF240085FF48009DFF6C00B5FF9000CDFFB4002A3E + 00003F5D0000547C0000699B00007EBA000093D90000AAF00000B6FF2400C2FF + 4800CEFF6C00DAFF9000E6FFB4003E3E00005D5D00007C7C00009B9B0000BABA + 0000D9D90000F0F00000FFFF2400FFFF4800FFFF6C00FFFF9000FFFFB4003E2A + 00005D3F00007C5400009B690000BA7E0000D9930000F0AA0000FFB62400FFC2 + 4800FFCE6C00FFDA9000FFE6B4003E1400005D1E00007C2800009B320000BA3C + 0000D9460000F0550000FF6D2400FF854800FF9D6C00FFB59000FFCDB4003E00 + 00005D0000007C0000009B000000BA000000D9000000F0000000FF242400FF48 + 4800FF6C6C00FF909000FFB4B4003E0014005D001E007C0028009B003200BA00 + 3C00D9004600F0005500FF246D00FF488500FF6C9D00FF90B500FFB4CD003E00 + 2A005D003F007C0054009B006900BA007E00D9009300F000AA00FF24B600FF48 + C200FF6CCE00FF90DA00FFB4E6003E003E005D005D007C007C009B009B00BA00 + BA00D900D900F000F000FF24FF00FF48FF00FF6CFF00FF90FF00FFB4FF002A00 + 3E003F005D0054007C0069009B007E00BA009300D900AA00F000B624FF00C248 + FF00CE6CFF00DA90FF00E6B4FF0014003E001E005D0028007C0032009B003C00 + BA004600D9005500F0006D24FF008548FF009D6CFF00B590FF00CDB4FF000000 + 0000001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A0000 + 00001010101010101010101010101010101010101010101010101010101A0000 + 00001A22222222212121212121212120202020202020201F1F1F1F1F101A001A + 1A1A1A2222222222212121212121212121201010101010101010101F101A1010 + 10101A230404220404040404042121101010B5B5B6B6B6B6C3B7101F101A1A22 + 21211A232322222222222222222121102121A3A4B4B4B4C1B5B51020101A1A22 + 21211A230404040404040404222222102221AFAFAFB0B0A3A3A41020101A1A22 + 04041A23232323232323232323232310222222212121212121202020101A1A23 + 22211A23040404232323232323232310232310101010101010101020101A1A23 + 22221A23232323232323230F0F0F0F101010B5B5B6B6B6B6C3B71021101A1A23 + 04041A2323230F0F0F0F0F0F0F0F0F100F0FA3A4B4B4B4C1B5B51021101A1A23 + 23221A231010101010101010100F0F100F0FAFAFAFB0B0A3A3A41021101A1A23 + 23231A0FB5B5B6B6B6B6C3B7101010100F0F0F232323232222222221101A1A23 + 04041A0FA3A4B4B4B4C1B5B5100F0F100F0F10101010101010101022101A1A23 + 23231A0FAFAFAFB0B0A3A3A4100F0F101010B5B5B6B6B6B6C3B71022101A1A23 + 230F1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FA3A4B4B4B4C1B5B51023101A1A23 + 04041A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0FAFAFAFB0B0A3A3A41023101A1A23 + 0F0F1A0F040404040F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101A1A23 + 0F0F1A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101A1A0F + 04041A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A001A0F + 0F0F0F0F23221A22220C0C0C0C0C0C0C0C0C0C0C0C041F1F101A000000001A0F + 0F0F0F0F23221A222222222121212121212120202020041F101A000000001A0F + 0404040404041A2322020202020202020202020202022020101A000000001A0F + 0F0F0F0F23231A23230A0A0A0A0A0A0A0A0A0A0A0A020420101A000000001A0F + 0F0F0F0F0F231A2323232323232323232322222121212121101A000000001A0F + 0404040404041A2323D2D2D2D2D2D2D20F23232222210421101A000000001A0F + 0F0F0F0F0F0F1A230FD6D6D6D6D6D6D20F0F232322222221101A000000001A0F + 0F0F0F0F0F0F1A0F0F0F0F0F0F0F0F0F0F0F232323230422101A000000001A1A + 1A1A1A1A1A1A1A0F0F010101010101010101010123232323101A000000000000 + 0000000000001A0F0F09090909090909090909010F0F040F101A000000000000 + 0000000000001A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101A000000000000 + 0000000000001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A0000000000F800 + 0000F0000000F000000080000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000010000000F0000000F0000000F0000000F0000 + 000F0000000F0000000F0000000F0000000FFF00000FFF00000FFF00001F} + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 20 + object ProgressBar1: TProgressBar + Left = 8 + Top = 272 + Width = 617 + Height = 41 + Min = 0 + Max = 100 + TabOrder = 3 + Visible = False + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 632 + Height = 49 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + object Label4: TLabel + Left = 8 + Top = 8 + Width = 293 + Height = 33 + Caption = 'Emisión de Facturas...' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + end + object Bevel1: TBevel + Left = 0 + Top = 32 + Width = 577 + Height = 9 + Shape = bsBottomLine + end + end + object Memo1: TMemo + Left = 0 + Top = 49 + Width = 632 + Height = 160 + Align = alTop + Color = clScrollBar + Lines.Strings = ( + + 'Tras seleccionar el mes para el cual quiere realizar la emisión ' + + 'de facturas, estas se ' + 'emitirán siguiendo el siguiente criterio:' + '' + + '>> Solo se emitirán facturas, a los clientes cuya última factura' + + ' este abonada' + + '>> >> Aquellos clientes cuya última factura este impagada, pasar' + + 'án a "baja-temporal"' + + '>> El periodo de validez del último abono, no este vigente dentr' + + 'o del mes seleccionado' + + '>> La emisión se realizará con un periodo igual al seleccionado ' + + 'actualmente en su ficha') + ReadOnly = True + TabOrder = 1 + end + object BitBtn1: TBitBtn + Left = 192 + Top = 272 + Width = 233 + Height = 41 + Caption = '&Comenzar emisión de facturas' + TabOrder = 2 + OnClick = BitBtn1Click + end + object ComboBox1: TComboBox + Left = 192 + Top = 232 + Width = 145 + Height = 28 + ItemHeight = 20 + TabOrder = 4 + Items.Strings = ( + 'Enero' + 'Febrero' + 'Marzo' + 'Abril' + 'Mayo' + 'Junio' + 'Julio' + 'Agosto' + 'Septiembre' + 'Octubre' + 'Noviembre' + 'Diciembre') + end + object ComboBox2: TComboBox + Left = 336 + Top = 232 + Width = 89 + Height = 28 + ItemHeight = 20 + TabOrder = 5 + Items.Strings = ( + '2002' + '2003' + '2004' + '2005' + '2006' + '2007' + '2008' + '2009' + '2010') + end + object TbAbonados: TTable + TableName = 'datos\abonados.db' + Left = 300 + Top = 76 + end + object DsAbonados: TDataSource + DataSet = TbAbonados + Left = 300 + Top = 44 + end + object TbFacturas: TTable + IndexName = 'iExpira' + TableName = 'datos\TbFacturas.db' + Left = 540 + Top = 76 + end +end diff --git a/cap_gestion/capg_gfact.h b/cap_gestion/capg_gfact.h new file mode 100644 index 0000000..644dcaf --- /dev/null +++ b/cap_gestion/capg_gfact.h @@ -0,0 +1,42 @@ +//--------------------------------------------------------------------------- + +#ifndef capg_gfactH +#define capg_gfactH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TgFact : public TForm +{ +__published: // IDE-managed Components + TPanel *Panel1; + TLabel *Label4; + TBevel *Bevel1; + TMemo *Memo1; + TBitBtn *BitBtn1; + TProgressBar *ProgressBar1; + TComboBox *ComboBox1; + TComboBox *ComboBox2; + TTable *TbAbonados; + TDataSource *DsAbonados; + TTable *TbFacturas; + void __fastcall BitBtn1Click(TObject *Sender); +private: // User declarations + Currency ImportesPeriodo[4]; + TDateTime __fastcall TgFact::DiasEnPeriodoDesde( TDateTime fechaE ); + Currency __fastcall TgFact::ImporteDelPeriodo(); +public: // User declarations + __fastcall TgFact(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TgFact *gFact; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_gestion/capg_ifact.cpp b/cap_gestion/capg_ifact.cpp new file mode 100644 index 0000000..9c834fa --- /dev/null +++ b/cap_gestion/capg_ifact.cpp @@ -0,0 +1,42 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "capg_ifact.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TiFact *iFact; +//--------------------------------------------------------------------------- +__fastcall TiFact::TiFact(TComponent* Owner) + : TForm(Owner) +{ + TbPendientes->Active = true; +} +//--------------------------------------------------------------------------- +void __fastcall TiFact::BitBtn1Click(TObject *Sender) +{ + Currency TotalA, TotalNA; + TbFacturas->Active = true; + TbFacturas->Filter = "[fechaP] >= '" + fdesde->Date.FormatString("dd/mm/yyyy") + "' AND [fechaP] <= '" + fhasta->Date.FormatString("dd/mm/yyyy") +"'"; + TbFacturas->Filtered = true; + + TotalA = 0; TotalNA = 0; + TbFacturas->First(); + while( !TbFacturas->Eof ) + { + if ( TbFacturas->FieldByName("idc")->AsInteger == -1 ) + { + TotalNA += TbFacturas->FieldByName("importe")->AsCurrency; + } else { + TotalA += TbFacturas->FieldByName("importe")->AsCurrency; + } + TbFacturas->Next(); + } + TbFacturas->Active = false; + lTotalA->Caption = TotalA; + lTotalNA->Caption = TotalNA; + +} +//--------------------------------------------------------------------------- diff --git a/cap_gestion/capg_ifact.ddp b/cap_gestion/capg_ifact.ddp new file mode 100644 index 0000000..cdc0ee8 Binary files /dev/null and b/cap_gestion/capg_ifact.ddp differ diff --git a/cap_gestion/capg_ifact.dfm b/cap_gestion/capg_ifact.dfm new file mode 100644 index 0000000..c75bf98 --- /dev/null +++ b/cap_gestion/capg_ifact.dfm @@ -0,0 +1,284 @@ +object iFact: TiFact + Left = 262 + Top = 130 + Width = 696 + Height = 480 + Caption = 'CAP-ges' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 20 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 688 + Height = 81 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + object Label1: TLabel + Left = 0 + Top = -4 + Width = 382 + Height = 45 + Caption = 'Informaci'#243'n facturas' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -32 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + end + object Bevel1: TBevel + Left = 0 + Top = 32 + Width = 577 + Height = 9 + Shape = bsBottomLine + end + object CardOK: TImage + Left = 488 + Top = 0 + Width = 24 + Height = 24 + AutoSize = True + Picture.Data = { + 07544269746D617096010000424D960100000000000076000000280000001800 + 0000180000000100040000000000200100000000000000000000100000000000 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FFFFFFFFFFF991FFFFFFFFFFFFFFFFFFFFFF991FFFFFFFFFFFFFFFFFFFFF + 991100000FFFFFFF00000000099110880FFF0000888888888001108800FF8888 + 888888888880088808FF88888888888888888888080F88888888888888888888 + 080B88888888888888888888080B888888888000000000008801888800000777 + 7777777808010000FFFFF777777777788001FFFFFFF77777FFF00000000BFFFF + FF777000000BBBBBBBBBFF7700000BBBBBBBBB111111000077BBBBBB111111BB + BBBB777700BB1111BBBBBBBBBBBB0000FFBBBBBBBBBBB33BBBBBFFFFFFB33BBB + 3BBBB33BBB3BFFFFFFBB3BB33B3BBBBBBBBBFFFFFFB33BBBBBB3BBBBBBBBFFFF + FFB33BBBBBBBBBBBFFFFFFFFFFBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF} + Visible = False + end + object Label2: TLabel + Left = 8 + Top = 56 + Width = 58 + Height = 20 + Caption = 'Periodo:' + end + object fdesde: TDateTimePicker + Left = 72 + Top = 48 + Width = 89 + Height = 28 + CalAlignment = dtaLeft + Date = 37301 + Time = 37301 + DateFormat = dfShort + DateMode = dmComboBox + Kind = dtkDate + ParseInput = False + TabOrder = 0 + end + object fhasta: TDateTimePicker + Left = 168 + Top = 48 + Width = 89 + Height = 28 + CalAlignment = dtaLeft + Date = 37301 + Time = 37301 + DateFormat = dfShort + DateMode = dmComboBox + Kind = dtkDate + ParseInput = False + TabOrder = 1 + end + object BitBtn1: TBitBtn + Left = 264 + Top = 48 + Width = 75 + Height = 25 + Caption = 'Calcular' + TabOrder = 2 + OnClick = BitBtn1Click + end + end + object PageControl1: TPageControl + Left = 0 + Top = 81 + Width = 688 + Height = 368 + ActivePage = TabSheet2 + Align = alClient + MultiLine = True + Style = tsFlatButtons + TabIndex = 1 + TabOrder = 1 + object TabSheet1: TTabSheet + Caption = 'General' + object Label3: TLabel + Left = 16 + Top = 40 + Width = 192 + Height = 20 + Caption = 'Facturaci'#243'n por Abonados:' + end + object Label4: TLabel + Left = 16 + Top = 64 + Width = 206 + Height = 20 + Caption = 'Facturaci'#243'n por Ocacionales:' + end + object lTotalA: TLabel + Left = 240 + Top = 40 + Width = 91 + Height = 20 + Caption = 'Calculando...' + end + object lTotalNA: TLabel + Left = 240 + Top = 64 + Width = 91 + Height = 20 + Caption = 'Calculando...' + end + end + object TabSheet2: TTabSheet + Caption = 'Impagados' + ImageIndex = 1 + object DBGrid1: TDBGrid + Left = 0 + Top = 0 + Width = 680 + Height = 330 + Align = alClient + DataSource = DsPendientes + Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit] + ReadOnly = True + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -16 + TitleFont.Name = 'MS Sans Serif' + TitleFont.Style = [] + Columns = < + item + Expanded = False + FieldName = 'id' + Title.Alignment = taCenter + Width = 52 + Visible = True + end + item + Expanded = False + FieldName = 'fechaE' + Title.Caption = 'Desde...' + Width = 70 + Visible = True + end + item + Expanded = False + FieldName = 'fechaS' + Title.Alignment = taRightJustify + Title.Caption = '...Hasta' + Width = 70 + Visible = True + end + item + Expanded = False + FieldName = 'importe' + Title.Alignment = taCenter + Width = 80 + Visible = True + end + item + Expanded = False + FieldName = 'NombreC' + Title.Caption = 'Nombre' + Width = 121 + Visible = True + end + item + Expanded = False + FieldName = 'ApellidoC' + Title.Caption = 'Apellidos' + Visible = True + end> + end + end + end + object TbFacturas: TTable + TableName = 'datos\TbFacturas.db' + Left = 372 + Top = 131 + end + object TbPendientes: TTable + Filter = '[pagado]=false' + Filtered = True + TableName = 'datos\TbFacturas.db' + Left = 436 + Top = 131 + object TbPendientesid: TAutoIncField + FieldName = 'id' + ReadOnly = True + end + object TbPendientesidc: TIntegerField + FieldName = 'idc' + end + object TbPendientesimporte: TCurrencyField + FieldName = 'importe' + end + object TbPendientesfechaE: TDateField + FieldName = 'fechaE' + end + object TbPendientesfechaS: TDateField + FieldName = 'fechaS' + end + object TbPendienteshoraE: TTimeField + FieldName = 'horaE' + end + object TbPendienteshoraS: TTimeField + FieldName = 'horaS' + end + object TbPendientespagado: TBooleanField + FieldName = 'pagado' + end + object TbPendientesNombreC: TStringField + FieldKind = fkLookup + FieldName = 'NombreC' + LookupDataSet = TbAbonados + LookupKeyFields = 'ida' + LookupResultField = 'nombre' + KeyFields = 'idc' + Lookup = True + end + object TbPendientesApellidoC: TStringField + FieldKind = fkLookup + FieldName = 'ApellidoC' + LookupDataSet = TbAbonados + LookupKeyFields = 'ida' + LookupResultField = 'apellidos' + KeyFields = 'idc' + Lookup = True + end + end + object DsPendientes: TDataSource + DataSet = TbPendientes + Left = 432 + Top = 96 + end + object TbAbonados: TTable + TableName = 'datos\abonados.db' + Left = 468 + Top = 131 + end +end diff --git a/cap_gestion/capg_ifact.h b/cap_gestion/capg_ifact.h new file mode 100644 index 0000000..3d39383 --- /dev/null +++ b/cap_gestion/capg_ifact.h @@ -0,0 +1,61 @@ +//--------------------------------------------------------------------------- + +#ifndef capg_ifactH +#define capg_ifactH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TiFact : public TForm +{ +__published: // IDE-managed Components + TPanel *Panel1; + TLabel *Label1; + TBevel *Bevel1; + TImage *CardOK; + TPageControl *PageControl1; + TDateTimePicker *fdesde; + TDateTimePicker *fhasta; + TLabel *Label2; + TTabSheet *TabSheet1; + TTabSheet *TabSheet2; + TLabel *Label3; + TLabel *Label4; + TBitBtn *BitBtn1; + TTable *TbFacturas; + TLabel *lTotalA; + TLabel *lTotalNA; + TTable *TbPendientes; + TDBGrid *DBGrid1; + TDataSource *DsPendientes; + TAutoIncField *TbPendientesid; + TIntegerField *TbPendientesidc; + TCurrencyField *TbPendientesimporte; + TDateField *TbPendientesfechaE; + TDateField *TbPendientesfechaS; + TTimeField *TbPendienteshoraE; + TTimeField *TbPendienteshoraS; + TBooleanField *TbPendientespagado; + TTable *TbAbonados; + TStringField *TbPendientesNombreC; + TStringField *TbPendientesApellidoC; + void __fastcall BitBtn1Click(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TiFact(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TiFact *iFact; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_gestion/capg_menu.cpp b/cap_gestion/capg_menu.cpp new file mode 100644 index 0000000..aab0e2f --- /dev/null +++ b/cap_gestion/capg_menu.cpp @@ -0,0 +1,128 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "capg_menu.h" +#include "capg_abonados.h" +#include "capg_tabonados.h" +#include "capg_tarifas.h" +#include "tickets.h" +#include "crd_ctrl.h" +#include "capg_gfact.h" +#include "capg_ifact.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TMainForm *MainForm; +//--------------------------------------------------------------------------- +__fastcall TMainForm::TMainForm(TComponent* Owner) + : TForm(Owner) +{ + Height = 290; +} +//--------------------------------------------------------------------------- +void __fastcall TMainForm::BitBtn2Click(TObject *Sender) +{ + TForm1 *GAb; + GAb = new TForm1(this); + this->Visible = false; + GAb->ShowModal(); + this->Visible = true; + delete GAb; +} +//--------------------------------------------------------------------------- +void __fastcall TMainForm::BitBtn1Click(TObject *Sender) +{ + TForm2 *GTAb; + GTAb = new TForm2(this); + this->Visible = false; + GTAb->ShowModal(); + this->Visible = true; + delete GTAb; +} +//--------------------------------------------------------------------------- +void __fastcall TMainForm::BitBtn5Click(TObject *Sender) +{ + if ( Height == 290 ) + Height = 390; + else + Height = 290; +} +//--------------------------------------------------------------------------- + +void __fastcall TMainForm::BitBtn6Click(TObject *Sender) +{ + TfTarifas *F; + F = new TfTarifas(this); + this->Visible = false; + F->ShowModal(); + this->Visible = true; + delete F; +} +//--------------------------------------------------------------------------- +void __fastcall TMainForm::BitBtn8Click(TObject *Sender) +{ + /* + TfEstados *F; + F = new TfEstados(this); + this->Visible = false; + F->ShowModal(); + this->Visible = true; + delete F; + */ +} +//--------------------------------------------------------------------------- +void __fastcall TMainForm::BitBtn7Click(TObject *Sender) +{ + TfTickets *F; + F = new TfTickets(this); + this->Visible = false; + F->ShowModal(); + this->Visible = true; + delete F; +} +//--------------------------------------------------------------------------- + +void __fastcall TMainForm::BitBtn3Click(TObject *Sender) +{ + TiFact *F; + F = new TiFact(this); + this->Visible = false; + F->ShowModal(); + this->Visible = true; + delete F; +} +//--------------------------------------------------------------------------- + +void __fastcall TMainForm::BitBtn9Click(TObject *Sender) +{ + TgFact *F; + F = new TgFact(this); + this->Visible = false; + F->ShowModal(); + this->Visible = true; + delete F; +} +//--------------------------------------------------------------------------- + +void __fastcall TMainForm::BitBtn4Click(TObject *Sender) +{ + ShowMessage( "Módulo no incluido en esta versión" ); +} +//--------------------------------------------------------------------------- + +void __fastcall TMainForm::BitBtn10Click(TObject *Sender) +{ + if ( MessageDlg("Reiniciar a cero el contador.\nEsto incrementará la serie del ticket y pondra a cero el contador.\n\n¿Continuar con el proceso?",mtInformation, TMsgDlgButtons() << mbYes << mbNo, 0)==mrYes ) + { + TQuery *sql; + sql = new TQuery(this); + sql->SQL->Clear(); + sql->SQL->Add("UPDATE 'datos\\contadores.db' SET Prefijo=Prefijo+1,Contador=0 WHERE Id=1"); + sql->ExecSQL(); + delete sql; + } +} +//--------------------------------------------------------------------------- + diff --git a/cap_gestion/capg_menu.ddp b/cap_gestion/capg_menu.ddp new file mode 100644 index 0000000..cdc0ee8 Binary files /dev/null and b/cap_gestion/capg_menu.ddp differ diff --git a/cap_gestion/capg_menu.dfm b/cap_gestion/capg_menu.dfm new file mode 100644 index 0000000..5b6afa3 --- /dev/null +++ b/cap_gestion/capg_menu.dfm @@ -0,0 +1,1187 @@ +object MainForm: TMainForm + Left = 391 + Top = 325 + AutoScroll = False + BorderIcons = [biSystemMenu] + Caption = 'CAP - v1.0' + ClientHeight = 363 + ClientWidth = 604 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Icon.Data = { + 0000010001002020000001000800A80800001600000028000000200000004000 + 0000010008000000000080040000000000000000000000010000000000000000 + 0000000080000080000000808000800000008000800080800000C0C0C0008080 + 80000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000606 + 0600121212001F1F1F002C2C2C003939390045454500525252005F5F5F006C6C + 6C007878780085858500929292009F9F9F00ABABAB00B8B8B800C5C5C500D2D2 + D200DEDEDE00EBEBEB00F8F8F800F0FBFF00A4A0A000C0DCC000F0CAA6000000 + 3E0000005D0000007C0000009B000000BA000000D9000000F0002424FF004848 + FF006C6CFF009090FF00B4B4FF0000143E00001E5D0000287C0000329B00003C + BA000046D9000055F000246DFF004885FF006C9DFF0090B5FF00B4CDFF00002A + 3E00003F5D0000547C0000699B00007EBA000093D90000AAF00024B6FF0048C2 + FF006CCEFF0090DAFF00B4E6FF00003E3E00005D5D00007C7C00009B9B0000BA + BA0000D9D90000F0F00024FFFF0048FFFF006CFFFF0090FFFF00B4FFFF00003E + 2A00005D3F00007C5400009B690000BA7E0000D9930000F0AA0024FFB60048FF + C2006CFFCE0090FFDA00B4FFE600003E1400005D1E00007C2800009B320000BA + 3C0000D9460000F0550024FF6D0048FF85006CFF9D0090FFB500B4FFCD00003E + 0000005D0000007C0000009B000000BA000000D9000000F0000024FF240048FF + 48006CFF6C0090FF9000B4FFB400143E00001E5D0000287C0000329B00003CBA + 000046D9000055F000006DFF240085FF48009DFF6C00B5FF9000CDFFB4002A3E + 00003F5D0000547C0000699B00007EBA000093D90000AAF00000B6FF2400C2FF + 4800CEFF6C00DAFF9000E6FFB4003E3E00005D5D00007C7C00009B9B0000BABA + 0000D9D90000F0F00000FFFF2400FFFF4800FFFF6C00FFFF9000FFFFB4003E2A + 00005D3F00007C5400009B690000BA7E0000D9930000F0AA0000FFB62400FFC2 + 4800FFCE6C00FFDA9000FFE6B4003E1400005D1E00007C2800009B320000BA3C + 0000D9460000F0550000FF6D2400FF854800FF9D6C00FFB59000FFCDB4003E00 + 00005D0000007C0000009B000000BA000000D9000000F0000000FF242400FF48 + 4800FF6C6C00FF909000FFB4B4003E0014005D001E007C0028009B003200BA00 + 3C00D9004600F0005500FF246D00FF488500FF6C9D00FF90B500FFB4CD003E00 + 2A005D003F007C0054009B006900BA007E00D9009300F000AA00FF24B600FF48 + C200FF6CCE00FF90DA00FFB4E6003E003E005D005D007C007C009B009B00BA00 + BA00D900D900F000F000FF24FF00FF48FF00FF6CFF00FF90FF00FFB4FF002A00 + 3E003F005D0054007C0069009B007E00BA009300D900AA00F000B624FF00C248 + FF00CE6CFF00DA90FF00E6B4FF0014003E001E005D0028007C0032009B003C00 + BA004600D9005500F0006D24FF008548FF009D6CFF00B590FF00CDB4FF001010 + 1010101010102120202020212121101010101010101010101010101010101010 + 101010101B161412101012141416161618181B1B1B1B251F2021101010101010 + 1010102616101010101010101010101010101010101010101214181010101010 + 102118161B10101010101010101010101012121210101010101010211010211F + 1B14101625121029292929363610101012121414121010101012141B26101616 + 1410101825122929171B1B1729101010101212121010101010121818171F1625 + 181412182512292917252514291010101216161618161614141414181A1F181B + 181736161B122B2B2BF7F72B2B29292936161218251B1B16121410121B1F1B1D + 1D1C17141629F81CF8F7F8313131313131311A1A1A17171717F72B2B2B1A1A1D + 1D1C1A1012F7311CF7F71A1B1B1BF8F8FCF8F8F8F7F7F7F7F72BF72B291B1D1F + 1F1D1A1029F7F72B171A1C262621171718181616171716161436251836201D1D + 1A173617F82B2BF71B26222122261B18181818181A1B1814121620261B21F72B + 292929F7F72B2BFC1C1F2121201D1D1D1C1C31311C1C1C1729361D262510292B + 2BF71AF8F8311D1F1C31313131FCFCFCFCFCFCFCF8F7F72B2B2BF71A21101A31 + 1C1D1D1D2121211D1C1C311C31FCF72B2B2BF7F72B2B2B2BF81C1D2110101F21 + 201F1A1F211DF8FC1C311A1A2B2B2B2B2929292929171D211010101010101C1A + 1A17171B14182516141212121214141412101010101B10101010101010101C1A + 311B261B14262616101010101014161410101010171F1010101010101010261C + 1C1C202626261B1412141010101012121010101810101010101010101010211C + 1C262022221B1410121210101010101210101810101010101010101010101021 + 261C262225121214101010101010101010181010101010101010101010101010 + 102620201210161410101012123616181B101010101010101010101010101010 + 101010211F1F1F1F1F1F1F212121101010101010101010101010101010101010 + 1010101010101010101010101010101010101010101010101010101010101010 + 1010101010101010101010101010101010101010281010282829291028101010 + 1010101010101010101010101010101010101028102810102810102810280000 + 2929290029280029280029280000002928000028002800002800002800280029 + 2828280029282929280029280000002928000000000000282800002800280029 + 2800000029280029280029282828000000000000000000282800002800280029 + 2800000029282928280029280028280000000000000000002800000028000029 + 2829290000282828000029280028280000000000000000000000000000000000 + 282828000000280000002928282800000000000000000000000000000000FF00 + FFFFFC00000FF8000007E0000003000000010000000000000000000000000000 + 00000000000000000000000000000000000100000001000000030000003F0000 + 00FF000000FF000003FF000007FF80000FFFE0001FFFF800FFFFFFFFFFFFFFFF + FD85FFFFFADAC4939ADA84139F9A9C90FF9A9C127FDD86327FFFC770FFFF} + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 13 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 604 + Height = 49 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + object Label1: TLabel + Left = 0 + Top = -4 + Width = 26 + Height = 45 + Caption = 'C' + Font.Charset = ANSI_CHARSET + Font.Color = clMaroon + Font.Height = -32 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + end + object Label2: TLabel + Left = 104 + Top = -4 + Width = 26 + Height = 45 + Caption = 'A' + Font.Charset = ANSI_CHARSET + Font.Color = clMaroon + Font.Height = -32 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + end + object Label4: TLabel + Left = 24 + Top = 10 + Width = 67 + Height = 27 + Caption = 'ontrol' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + end + object Label5: TLabel + Left = 128 + Top = 10 + Width = 69 + Height = 27 + Caption = 'cceso' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + end + object Label6: TLabel + Left = 230 + Top = 10 + Width = 85 + Height = 27 + Caption = 'arkings' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + end + object Bevel1: TBevel + Left = 0 + Top = 32 + Width = 577 + Height = 9 + Shape = bsBottomLine + end + object Label3: TLabel + Left = 208 + Top = -4 + Width = 24 + Height = 45 + Caption = 'P' + Font.Charset = ANSI_CHARSET + Font.Color = clMaroon + Font.Height = -32 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + Transparent = True + end + end + object BitBtn2: TBitBtn + Left = 8 + Top = 64 + Width = 193 + Height = 41 + Caption = 'Gesti'#243'n Abonados' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 1 + OnClick = BitBtn2Click + Glyph.Data = { + 36080000424D3608000000000000360400002800000020000000200000000100 + 0800000000000004000000000000000000000001000000000000000000008080 + 8000FFFFFF00C0C0C000FEFEFE00FDFDFD00A8F8FB00FCFCFC00FBFBFB0085DE + EE00A8F7FB00A6F6FA00A4F5F900FAFAFA0000008000F9F9F90083DCED0080DA + EC00A7F8FA00F7F7F700F5F5F50081DBEC007ED9EB0078D4E800A7F7FA00A5F6 + F900F8F8F800F6F6F600F3F3F300F1F1F1007FD9EB007CD7EA00A3F5F900F2F2 + F200EFEFEF00EBEBEB007DD8EA007AD6E9006ECCE400A2F4F800A0F2F800E8E8 + E8007BD7EA0078D5E90076D3E80074D1E700A0F2F7009EF1F7009DF0F600EDED + ED00EAEAEA00E7E7E700E4E4E400E1E1E10079D5E90072D0E60070CEE5009CEF + F6009BEEF60099EDF500F4F4F400ECECEC00E9E9E900E6E6E600E0E0E000DDDD + DD00DADADA0077D4E80074D2E7006CCBE40097ECF40096EBF400F0F0F000DEDE + DE00DBDBDB00D8D8D800D5D5D500D3D3D30075D2E7006ECDE4006CCBE3006ACA + E30067C8E20095EBF30094EAF30092E8F200EEEEEE00C7D8FF00D7D7D700D4D4 + D400D1D1D10073D1E60070CFE5006CCCE3006ACAE20068C9E20065C7E10063C5 + E00093E9F30091E7F2008FE6F100E3E3E300C2D4FF00D0D0D0006FCEE5006DCC + E4006BCBE30069C9E20064C6E10062C4E00060C2DF008EE5F100E5E5E500E2E2 + E200BED1FF00CECECE00040404006BCAE30067C7E10065C6E1005EC0DE005CBE + DD008DE4F0008CE3F0008AE1EF00DFDFDF00DCDCDC00BDD0FF00B9CDFF00CFCF + CF00CDCDCD0067C8E10065C6E00060C3DF005EC1DE005CBFDD005ABDDC0058BC + DC008AE2EF0088E0EE0087DFEE00D9D9D900B5CAFF006B8FFF0063C4DF0061C3 + DF005ABEDC0058BCDB0056BBDB0086DFED0085DEED0083DDEC00B1C7FF00A4BC + FF005FC2DF005CC0DE005ABEDD0056BADB0054B9DB0086DFEE0084DDED00ACC3 + FF00A8BFFF005DC1DE005BBFDD0059BDDC0057BBDB0055B9DA0053B8DA0084DE + ED0083DCEC0080DAEB00B4C9FF00B0C6FF00A7BFFF0055BADA0053B8D90051B7 + D90082DCEC0081DBEB007FDAEB00AFC5FF00ABC2FF0055BADB0051B6D9004FB5 + D90080DBEC00A3BCFF004FB5D8004DB4D8004DB4D7004BB3D7004AB2D7000070 + AB0000659A0000619400C5C5C500005E9000005A8A000056840000517D00004C + 760000527F00004E7900004A730000456C0000416600003D600000476F000043 + 6900003F6300003A5C000036560000325000FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000D6D6D6D6D6D6 + D6D6D6D6D6D6D6D600C9D0D1D2D2D3D4D500D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D600CACBCCCCCDCECF00D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D600C5C6C7C7C8C90000D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D600C2C3C30000C400D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6000000D6D600C100007D7D8D00D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D600C0002600D6D60032347D7D0000D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D600BEBF00262600D600020F00008F00D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D600B1BCBD0026261600D600008F8F8F8F00D6D6D6D6D6D6D6D6D6D6D6D6D6 + D600B7A8B8B9002626BA1E00D6D600B6AEBB8F00D6D6D6D6D6D6D6D6D6D6D6D6 + 00A5A6AFB0B1002626B2B3B400D600B5B6AEAE8F00D6D6D6D6D6D6D6D6D6D600 + A3A4A5A6A7A8002626A9AA15AB0000ACADA1A1AE8F00D6D6D6D6D6D6D6D60091 + 9A9B9C899D9E0026269FA010151100808E9898A1A28F00D6D6D6D6D6D6008490 + 9186879293940026268B9596970000808E988F8F8F9900D6D6D6D6D6006B8384 + 6185868788890026268A8B8C008D5800808E0000008F00D6D6D6D60069756B76 + 776D6E78790126267A7B7C007D417E007F800081820000D6D6D6013768696A6B + 526C6D6E01262663646F007034713549007200595A7374D6D6D6015B5C4F5D5E + 5F606101262662636400323E290E3F650066004B4C4D6700D6D6014E37384F50 + 5152012626535455005631313D230E29005700414258595A00D6014344373826 + 450126263B4647001D1D1D0E4848480E0700000E494A4B4C4D0001362C2D3738 + 012626393A3B003C3C3C3C3C0E3C14210E3D3E3F0E4041420100012A2B2C2D01 + 26262E2F30001B1B130E1A1A0F0E0D1B1C0E3132333435010301012425170026 + 26202728001B131A0F0D0E0705040E081A140E222329010301D6011E1F160001 + 181920011B1B130E0F0D080E0504020E1A14212223010301D6D60115161700D6 + 0118190C01131A0F0E0808070E0402070E1B1C1D010301D6D6D601101101D6D6 + D601120B0C010F0D0D020707050E02070D1314010301D6D6D6D6010901D6D6D6 + D6D6010A0B0C010D0807020505040E05080F010301D6D6D6D6D6D601D6D6D6D6 + D6D6D6010601D601070705020000020508010301D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D601D6D6D60105050002000205010301D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6010004000402010301D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D60001020404010301D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D600000102010301D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6 + D6D6D6D6D6D6D6D6D6D6D6D601D601D6D6D6D6D6D6D6D6D6D6D6} + end + object BitBtn3: TBitBtn + Left = 88 + Top = 160 + Width = 143 + Height = 41 + Caption = 'Facturaci'#243'n' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 3 + OnClick = BitBtn3Click + Glyph.Data = { + 36080000424D3608000000000000360400002800000020000000200000000100 + 0800000000000004000000000000000000000001000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00060606001212 + 12001F1F1F002C2C2C003939390045454500525252005F5F5F006C6C6C007878 + 780085858500929292009F9F9F00ABABAB00B8B8B800C5C5C500D2D2D200DEDE + DE00EBEBEB00F8F8F800F0FBFF00A4A0A000C0DCC000F0CAA60000003E000000 + 5D0000007C0000009B000000BA000000D9000000F0002424FF004848FF006C6C + FF009090FF00B4B4FF0000143E00001E5D0000287C0000329B00003CBA000046 + D9000055F000246DFF004885FF006C9DFF0090B5FF00B4CDFF00002A3E00003F + 5D0000547C0000699B00007EBA000093D90000AAF00024B6FF0048C2FF006CCE + FF0090DAFF00B4E6FF00003E3E00005D5D00007C7C00009B9B0000BABA0000D9 + D90000F0F00024FFFF0048FFFF006CFFFF0090FFFF00B4FFFF00003E2A00005D + 3F00007C5400009B690000BA7E0000D9930000F0AA0024FFB60048FFC2006CFF + CE0090FFDA00B4FFE600003E1400005D1E00007C2800009B320000BA3C0000D9 + 460000F0550024FF6D0048FF85006CFF9D0090FFB500B4FFCD00003E0000005D + 0000007C0000009B000000BA000000D9000000F0000024FF240048FF48006CFF + 6C0090FF9000B4FFB400143E00001E5D0000287C0000329B00003CBA000046D9 + 000055F000006DFF240085FF48009DFF6C00B5FF9000CDFFB4002A3E00003F5D + 0000547C0000699B00007EBA000093D90000AAF00000B6FF2400C2FF4800CEFF + 6C00DAFF9000E6FFB4003E3E00005D5D00007C7C00009B9B0000BABA0000D9D9 + 0000F0F00000FFFF2400FFFF4800FFFF6C00FFFF9000FFFFB4003E2A00005D3F + 00007C5400009B690000BA7E0000D9930000F0AA0000FFB62400FFC24800FFCE + 6C00FFDA9000FFE6B4003E1400005D1E00007C2800009B320000BA3C0000D946 + 0000F0550000FF6D2400FF854800FF9D6C00FFB59000FFCDB4003E0000005D00 + 00007C0000009B000000BA000000D9000000F0000000FF242400FF484800FF6C + 6C00FF909000FFB4B4003E0014005D001E007C0028009B003200BA003C00D900 + 4600F0005500FF246D00FF488500FF6C9D00FF90B500FFB4CD003E002A005D00 + 3F007C0054009B006900BA007E00D9009300F000AA00FF24B600FF48C200FF6C + CE00FF90DA00FFB4E6003E003E005D005D007C007C009B009B00BA00BA00D900 + D900F000F000FF24FF00FF48FF00FF6CFF00FF90FF00FFB4FF002A003E003F00 + 5D0054007C0069009B007E00BA009300D900AA00F000B624FF00C248FF00CE6C + FF00DA90FF00E6B4FF0014003E001E005D0028007C0032009B003C00BA004600 + D9005500F0006D24FF008548FF009D6CFF00B590FF00CDB4FF0007070707071A + 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A070707071010 + 101010101010101010101010101010101010101010101010101A070707071A22 + 222222212121212121212120202020202020201F1F1F1F1F101A071A1A1A1A22 + 22222222212121212121212121201010101010101010101F101A101010101A23 + 0404220404040404042121101010B5B5B6B6B6B6C3B7101F101A1A2221211A23 + 2322222222222222222121102121A3A4B4B4B4C1B5B51020101A1A2221211A23 + 0404040404040404222222102221AFAFAFB0B0A3A3A41020101A1A2204041A23 + 232323232323232323232310222222212121212121202020101A1A2322211A23 + 040404232323232323232310232310101010101010101020101A1A2322221A23 + 232323232323230F0F0F0F101010B5B5B6B6B6B6C3B71021101A1A2304041A23 + 23230F0F0F0F0F0F0F0F0F100F0FA3A4B4B4B4C1B5B51021101A1A2323221A23 + 1010101010101010100F0F100F0FAFAFAFB0B0A3A3A41021101A1A2323231A0F + B5B5B6B6B6B6C3B7101010100F0F0F232323232222222221101A1A2304041A0F + A3A4B4B4B4C1B5B5100F0F100F0F10101010101010101022101A1A2323231A0F + AFAFAFB0B0A3A3A4100F0F101010B5B5B6B6B6B6C3B71022101A1A23230F1A0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0FA3A4B4B4B4C1B5B51023101A1A2304041A0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0FAFAFAFB0B0A3A3A41023101A1A230F0F1A0F + 040404040F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101A1A230F0F1A0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101A1A0F04041A1A + 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A071A0F0F0F0F0F + 23221A22220C0C0C0C0C0C0C0C0C0C0C0C041F1F101A070707071A0F0F0F0F0F + 23221A222222222121212121212120202020041F101A070707071A0F04040404 + 04041A2322020202020202020202020202022020101A070707071A0F0F0F0F0F + 23231A23230A0A0A0A0A0A0A0A0A0A0A0A020420101A070707071A0F0F0F0F0F + 0F231A2323232323232323232322222121212121101A070707071A0F04040404 + 04041A2323D2D2D2D2D2D2D20F23232222210421101A070707071A0F0F0F0F0F + 0F0F1A230FD6D6D6D6D6D6D20F0F232322222221101A070707071A0F0F0F0F0F + 0F0F1A0F0F0F0F0F0F0F0F0F0F0F232323230422101A070707071A1A1A1A1A1A + 1A1A1A0F0F010101010101010101010123232323101A07070707070707070707 + 07071A0F0F09090909090909090909010F0F040F101A07070707070707070707 + 07071A0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101A07070707070707070707 + 07071A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A0707070707} + Margin = 10 + end + object BitBtn4: TBitBtn + Left = 128 + Top = 208 + Width = 193 + Height = 41 + Caption = 'Estad'#237'sticas' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 4 + OnClick = BitBtn4Click + Glyph.Data = { + 36080000424D3608000000000000360400002800000020000000200000000100 + 0800000000000004000000000000000000000001000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00060606001212 + 12001F1F1F002C2C2C003939390045454500525252005F5F5F006C6C6C007878 + 780085858500929292009F9F9F00ABABAB00B8B8B800C5C5C500D2D2D200DEDE + DE00EBEBEB00F8F8F800F0FBFF00A4A0A000C0DCC000F0CAA60000003E000000 + 5D0000007C0000009B000000BA000000D9000000F0002424FF004848FF006C6C + FF009090FF00B4B4FF0000143E00001E5D0000287C0000329B00003CBA000046 + D9000055F000246DFF004885FF006C9DFF0090B5FF00B4CDFF00002A3E00003F + 5D0000547C0000699B00007EBA000093D90000AAF00024B6FF0048C2FF006CCE + FF0090DAFF00B4E6FF00003E3E00005D5D00007C7C00009B9B0000BABA0000D9 + D90000F0F00024FFFF0048FFFF006CFFFF0090FFFF00B4FFFF00003E2A00005D + 3F00007C5400009B690000BA7E0000D9930000F0AA0024FFB60048FFC2006CFF + CE0090FFDA00B4FFE600003E1400005D1E00007C2800009B320000BA3C0000D9 + 460000F0550024FF6D0048FF85006CFF9D0090FFB500B4FFCD00003E0000005D + 0000007C0000009B000000BA000000D9000000F0000024FF240048FF48006CFF + 6C0090FF9000B4FFB400143E00001E5D0000287C0000329B00003CBA000046D9 + 000055F000006DFF240085FF48009DFF6C00B5FF9000CDFFB4002A3E00003F5D + 0000547C0000699B00007EBA000093D90000AAF00000B6FF2400C2FF4800CEFF + 6C00DAFF9000E6FFB4003E3E00005D5D00007C7C00009B9B0000BABA0000D9D9 + 0000F0F00000FFFF2400FFFF4800FFFF6C00FFFF9000FFFFB4003E2A00005D3F + 00007C5400009B690000BA7E0000D9930000F0AA0000FFB62400FFC24800FFCE + 6C00FFDA9000FFE6B4003E1400005D1E00007C2800009B320000BA3C0000D946 + 0000F0550000FF6D2400FF854800FF9D6C00FFB59000FFCDB4003E0000005D00 + 00007C0000009B000000BA000000D9000000F0000000FF242400FF484800FF6C + 6C00FF909000FFB4B4003E0014005D001E007C0028009B003200BA003C00D900 + 4600F0005500FF246D00FF488500FF6C9D00FF90B500FFB4CD003E002A005D00 + 3F007C0054009B006900BA007E00D9009300F000AA00FF24B600FF48C200FF6C + CE00FF90DA00FFB4E6003E003E005D005D007C007C009B009B00BA00BA00D900 + D900F000F000FF24FF00FF48FF00FF6CFF00FF90FF00FFB4FF002A003E003F00 + 5D0054007C0069009B007E00BA009300D900AA00F000B624FF00C248FF00CE6C + FF00DA90FF00E6B4FF0014003E001E005D0028007C0032009B003C00BA004600 + D9005500F0006D24FF008548FF009D6CFF00B590FF00CDB4FF00070707070707 + 0707070707070707070708080810101010101010070707070707070707070707 + 070707070707070707080810102C2B2B2BBBBBBB101007070707070707070707 + 07070707070707070808102C2C2C2C2C2BBBBBBBBBBB10070707070707070707 + 070707070707070808102C2C2C2C2C2C2CBBBBBBBBBBBB100707070707070707 + 0707070707070808102C2C2C2C2C2C2C2CBCBBBBBBBBBBBB1007080808080808 + 08080808080808102D2C2C2C2C2C2C2C2CBCBCBCBBBBBBBBBB10080808080808 + 08080808080808102D2D2D2D2C2C2C2C2CBCBCBCBCBBBBBBBB10081010101010 + 10101010101010102D2D2D2D2D2C2C2C2CBCBCBCBCBCBBBBBB1008102121E0DF + EC212020747373102D2D2D2D2D2D2D2C2C74747474747473731008102221E0DF + DF212120747373102D2D2D2D2D2D2DE1E1E0747474747474731008102525E0DF + DF252525747473102D2D2D2D2D2DE1E1E1E1E07474747474741008102222E0DF + DF212121757473102E2E2E2D2DE1E1E1E1E1E1E074747474741008102222E1E0 + DF21212175747321102E2EE2E1E1E1E1E1E1E1E1E0747474100708102222E1E0 + DF212121757574212110E2E2E2E2E1E1E1E1E1E1E1E07410070708102525E1E0 + DF25252575757425252510E2E2E2E2E1E1E1E1E1E1E11007070708102222E1E0 + DF222222757574222221BC1010E2E2E2E1E1E1E110100707070708102222E1E0 + E0222222757575222222BCBB04101010101010101F100707070708102222E1E1 + E0232323232323232323BCBCBB2121212D2C2B201F100707070708102525E2E1 + E0252525252525252525BDBCBB2525252D2C2B2525100707070708102323E2E1 + E0230F0F0F0F0F0F0F0FBDBCBB2222212D2D2B2020100707070708102323E2E1 + E10F0F0F0F0F0F0F0F0FBDBDBC2222212E2E2C2020100707070708102323E2E2 + E10F0F0F0F0F0F0F0F0FBDBDBC2222222E2E2C21211007070707081025252525 + 25252525252525252525BDBDBD2525252E2E2D2525100707070708102323230F + 0F0F0F0F0F0F0F0F0F0F0F23232322222E2E2D21211007070707081023230F0F + 0F0F0F0F0F0F0F0F0F0F0F0F232323222E2E2E2121100707070708100F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F232323232E2E2E22221007070707081025252525 + 252525252525252525252525252525252525252525100707070708100F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F232323232323100707070708100F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F232323100707070708100F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100707070707100F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1007070707071010101010 + 1010101010101010101010101010101010101010101007070707} + Margin = 10 + end + object BitBtn5: TBitBtn + Left = 48 + Top = 112 + Width = 193 + Height = 41 + Caption = '&Configuraci'#243'n' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 2 + OnClick = BitBtn5Click + Glyph.Data = { + 360C0000424D360C000000000000360000002800000020000000200000000100 + 180000000000000C000000000000000000000000000000000000FCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFC + FEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFC + FEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FCFCFEFC848284848284040204FCFEFCFCFEFCFCFEFCFCFEFCFCFEFC04426404 + 4264044264044264FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FC848284F4FAFCC4C2A4846264040204FCFEFCFCFEFCFCFEFC0442C40442E404 + 42A40442A40442A4044264FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FC848284FCFEFCC4C2A4846264040204FCFEFCFCFEFCFCFEFC0442C484C2E404 + 62E40442E40442A4044264FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FC848284FCFEFCC4C2A4846264040204FCFEFCFCFEFCFCFEFC0442C484C2E404 + 62E40442E40442A4044244F4FAFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FC848284F4FAFCC4C2A4846264040204FCFEFCFCFEFCF4FAFC0442A484C2E404 + 62E40442E40442A4044264FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FC848284F4FAFCCCD2D4846264040204FCFEFCFCFEFCFCFEFC0442C484C2E404 + 62E40442C40442A4044264F4FAFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FC848284F4FAFCC4C2A4846264040204FCFEFCFCFEFCFCFEFC0442C484C2E404 + 42E40442E40442A4044264FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FC848284FCFEFCCCD2D4846264040204FCFEFCFCFEFCFCFEFC0442C484C2E404 + 62E40442E40442A4044244F4FAFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC044244 + 0442440442440442440442440442440442440442440442440442440442440442 + 44848284F4FAFCC4C2A48462640402040442440442440442440442A484C2E404 + 62E40442E40442A4044264FCFEFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A484C2C4 + 04A2A404A2A404A2A404A2A404A2A404A2A404A2A404A2A404A2A404A2A404A2 + A4848284F4FAFCCCD2D484626404020404A2A404A2A404A2A40442C484C2E404 + 62E40442E40442A4044264F4FAFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A4F4FAFC + 84C2E484E2E484E2E484E2E484E2E484E2E484C2E484C2E484E2E484E2E484C2 + E4848284F4FAFCC4C2A484828404020484E2E484C2E484E2E40442A484C2E404 + 62E40442C40442A4044264FCFEFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A4FCFEFC + 84E2E484E2E484C2C484E2E484C2E484E2E484E2E484E2E484C2C484E2E44442 + 44848284F4FAFCC4C2C4CCD2D484828404020484E2E484C2E40442C484C2E404 + 42E40442E40442A4044244F4FAFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A4F4FAFC + 84E2E484E2E484E2E484E2E484E2E484E2E484C2C484E2E484E2E44442448482 + 84F4FAFCFCFEFCFCFEFCF4FAFCC4C2A484828404020484E2E40442A484C2E404 + 62E40442E40442A4044264FCFEFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A4FCFEFC + 84E2E484C2E484E2E484C2E484C2C484C2E484E2E484C2E4848284848284F4FA + FCF4FAFC444244844244444244F4FAFCF4FAFC8482840402040442C484E2E404 + 62E40442E40442A4044264F4FAFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A4FCFEFC + 84E2E484C2C484E2E484E2E484E2E484E2E484E2E484E2E4848284F4FAFC8482 + 8404020484E2E484E2E4844244444244F4FAFCC4A2640402040442A484E2E404 + 62E40442E40442A4044264FCFEFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A4FCFEFC + 84E2E484E2E484E2E484E2E484E2E484C2E484E2E484C2C4848284F4FAFC8482 + 8404020484E2E484E2E4844244444244F4FAFCC4A26404020484C2E4F4FAFC84 + C2E484C2E40442A4044264F4FAFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A4FCFEFC + 84E2E484E2E484E2E484E2E484C2C484E2E484E2E484E2E4848284FCFEFCC4C2 + C4848284040204040204444244F4FAFCF4FAFC84828404020484E2E48462C484 + 62C40442A48462C4F4FAFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A4FCFEFC + 84E2E484E2E484E2E484E2E484E2E484E2E484E2E484E2E484E2E484A2A4FCFE + FCFCFEFC040204848284F4FAFCFCFEFC84828404020484E2E484C2E4442224C4 + C2A4848284040204FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A4F4FAFC + 84E2E484E2E484E2E484E2E484E2E484C2E484C2C484E2E484C2E484E2E484A2 + A4FCFEFC040204848284C4C2A4C4A26404020484C2E484E2E484E2E4040204C4 + C2A4C4A264040204FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A4FCFEFC + 84E2E484E2E484E2E484E2E484E2E484E2E484E2E484E2E484E2E484E2E484C2 + E484A2A484E2E4C4C2C484828404020484E2E484E2E484E2E484C2E4442224C4 + C2A4848284040204FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC04A2A4F4FAFC + 84E2E484E2E484E2E484E2E484E2E484E2E484E2E484C2E484E2E484C2C484E2 + E484C2E484E2E484E2E484828484828444424484E2E484C2E4844244442224C4 + C2A4C4A264040204844244FCFEFCFCFEFC04020404020444626404A2A4FCFEFC + 84E2E484E2E484C2C484E2E484E2E484E2E484E2E484E2E484E2E484E2E484E2 + E484E2E484E2E484C2E4848284F4FAFC444244442224442224848284848284C4 + C2A4C4A26484828484424404020404020404020484828484424404A2A4FCFEFC + F4FAFCFCFEFCF4FAFCFCFEFCF4FAFCF4FAFCF4FAFCF4FAFCF4FAFCF4FAFCF4FA + FCF4FAFCF4FAFCF4FAFC848284FCFEFCC4C2C484A2A484A2A4C4C2C4C4C2C4C4 + C2A4C4C2A4848284C4A264848284C4A264848284CCD2D444626404A2A484C2C4 + 84C2C484C2C484C2C484C2C484C2C484C2C484C2C484C2C484C2C484C2C484C2 + C484C2C404A2A404A2A4848284FCFEFCCCD2D4F4FAFCFCFEFCF4FAFCCCD2D4CC + D2D4C4C2C4CCD2D4C4C2C4CCD2D4C4C2A4F4FAFC844244F4FAFCFCFEFC04A2A4 + F4FAFC84E2E484E2E484E2E484E2E484E2E484E2E484E2E484E2E484C2C40402 + 04FCFEFCF4FAFCF4FAFC848284FCFEFCFCFEFC84A2A484A2A4FCFEFCF4FAFCFC + FEFCFCFEFCF4FAFCF4FAFCF4FAFCF4FAFC846264FCFEFCFCFEFCFCFEFCFCFEFC + 04A2A4F4FAFC84E2E484E2E484E2E484E2E484E2E484E2E484C2C4040204FCFE + FCFCFEFCFCFEFCFCFEFCFCFEFC84A2A484A2A4FCFEFCFCFEFCC4C2C4C4C2C4C4 + C2C4C4C2C4C4C2C4C4C2C4C4C2C484A2A4F4FAFCFCFEFCFCFEFCFCFEFCFCFEFC + F4FAFC04A2A404A2A404A2A404A2A404A2A404A2A404A2A4040204FCFEFCFCFE + FCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFC + FEFCFCFEFCFCFEFCF4FAFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCF4FAFCF4FAFCF4FAFCF4FAFCF4FAFCF4FAFCFCFEFCFCFEFCFCFE + FCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFC + FEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFC + FEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC + FCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFE + FCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFC + FEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFCFCFEFC} + Margin = 10 + end + object Panel2: TPanel + Left = 0 + Top = 264 + Width = 604 + Height = 99 + BevelInner = bvLowered + BevelOuter = bvNone + TabOrder = 5 + object BitBtn1: TBitBtn + Left = 8 + Top = 8 + Width = 193 + Height = 41 + Caption = 'Tipos de Abonados' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 0 + OnClick = BitBtn1Click + Glyph.Data = { + 36080000424D3608000000000000360400002800000020000000200000000100 + 0800000000000004000000000000000000000001000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00060606001212 + 12001F1F1F002C2C2C003939390045454500525252005F5F5F006C6C6C007878 + 780085858500929292009F9F9F00ABABAB00B8B8B800C5C5C500D2D2D200DEDE + DE00EBEBEB00F8F8F800F0FBFF00A4A0A000C0DCC000F0CAA60000003E000000 + 5D0000007C0000009B000000BA000000D9000000F0002424FF004848FF006C6C + FF009090FF00B4B4FF0000143E00001E5D0000287C0000329B00003CBA000046 + D9000055F000246DFF004885FF006C9DFF0090B5FF00B4CDFF00002A3E00003F + 5D0000547C0000699B00007EBA000093D90000AAF00024B6FF0048C2FF006CCE + FF0090DAFF00B4E6FF00003E3E00005D5D00007C7C00009B9B0000BABA0000D9 + D90000F0F00024FFFF0048FFFF006CFFFF0090FFFF00B4FFFF00003E2A00005D + 3F00007C5400009B690000BA7E0000D9930000F0AA0024FFB60048FFC2006CFF + CE0090FFDA00B4FFE600003E1400005D1E00007C2800009B320000BA3C0000D9 + 460000F0550024FF6D0048FF85006CFF9D0090FFB500B4FFCD00003E0000005D + 0000007C0000009B000000BA000000D9000000F0000024FF240048FF48006CFF + 6C0090FF9000B4FFB400143E00001E5D0000287C0000329B00003CBA000046D9 + 000055F000006DFF240085FF48009DFF6C00B5FF9000CDFFB4002A3E00003F5D + 0000547C0000699B00007EBA000093D90000AAF00000B6FF2400C2FF4800CEFF + 6C00DAFF9000E6FFB4003E3E00005D5D00007C7C00009B9B0000BABA0000D9D9 + 0000F0F00000FFFF2400FFFF4800FFFF6C00FFFF9000FFFFB4003E2A00005D3F + 00007C5400009B690000BA7E0000D9930000F0AA0000FFB62400FFC24800FFCE + 6C00FFDA9000FFE6B4003E1400005D1E00007C2800009B320000BA3C0000D946 + 0000F0550000FF6D2400FF854800FF9D6C00FFB59000FFCDB4003E0000005D00 + 00007C0000009B000000BA000000D9000000F0000000FF242400FF484800FF6C + 6C00FF909000FFB4B4003E0014005D001E007C0028009B003200BA003C00D900 + 4600F0005500FF246D00FF488500FF6C9D00FF90B500FFB4CD003E002A005D00 + 3F007C0054009B006900BA007E00D9009300F000AA00FF24B600FF48C200FF6C + CE00FF90DA00FFB4E6003E003E005D005D007C007C009B009B00BA00BA00D900 + D900F000F000FF24FF00FF48FF00FF6CFF00FF90FF00FFB4FF002A003E003F00 + 5D0054007C0069009B007E00BA009300D900AA00F000B624FF00C248FF00CE6C + FF00DA90FF00E6B4FF0014003E001E005D0028007C0032009B003C00BA004600 + D9005500F0006D24FF008548FF009D6CFF00B590FF00CDB4FF0007071A1A1A1A + 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A07070707070707070707071A1A1A1A + 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A070707070707070707101010101010 + 1010101010101010101010101010101A1A070707070707070707102222212121 + 2121212020202020201F1F1F1F1F101A1A070707070707070707102222212121 + 212121212020202020201F1F1F1F101A1A070707070707070707102210101010 + 10212121212020202020201F1F1F101A1A0707070707070707071022100F0F0F + 1021101010101010101020201F1F101A1A0707070707070707071022100F0F0F + 102121212121212120202020201F101A1A0707070707070707071022100F0F0F + 1021101021101010101020202020101A1A070707070707070707102210101010 + 1022222121212121212120202020101A1A070707070707070707102222222222 + 2222222222212121212120202020101A1A070707070707070707102222222222 + 2222222222222121212121202020101A1A070707070707070707102222222222 + 2222222222222221212121212020101A1A070707070707070707102210090110 + 1022222222222222212121212120101A1A070707070707070707102210090901 + 1022222224222222222121212121101A1A070707070707070707102210090109 + 01241010101010101A1A1A1A1A1A101A1A1A1A1A1A1A1A1A1A0710221009010F + 090124242410104A10101A1A1A1A101A1A1A1A1A1A1A1A1A1A1A102210101010 + 1009012424104B4A4A10101A1A1A101A1A1A1A1A1A1A1A1A1A07102222242424 + 242409012424104B104747102221101A1A070707070707070707102424242424 + 2424240924241010491047471022101A1A070707070707070707102424242424 + 2424242424242410494910474710101A1A070707070707070707102410090110 + 1024242424242424104949104747101A07070707070707070707102410090901 + 1024101024101010101049491047471007070707070707070707102410090109 + 012424242424242424221049491047471007070707070707070710241009010F + 090110101010101010101010494910101A100707070707070707102410101010 + 1009012424242410211F1F251049101F25021007070707070707102424242424 + 24240901242424102221211E10101F1F02251A10070707070707102424242424 + 242424092424241022242410070710021F2510FE100707070707102424242424 + 242424242424241024241007070707101F10FEFE100707070707102424242424 + 24242424242424102410070707070707102222FE100707070707101010101010 + 1010101010101010100707070707070707101010070707070707070707070707 + 0707070707070707070707070707070707070707070707070707} + Margin = 5 + end + object BitBtn6: TBitBtn + Left = 204 + Top = 52 + Width = 193 + Height = 41 + Caption = 'Tarifas no abonados' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 1 + OnClick = BitBtn6Click + Glyph.Data = { + 360C0000424D360C000000000000360000002800000020000000200000000100 + 180000000000000C000000000000000000000000000000000000C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C05656962E2E + 860E0E7E02027A02027616167E32328E6A6A9EC0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C04A4A9E02027E02027E0202 + 7E02027602027A02027602027A02027602027A2E2E8AC0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C01A1AA20202A20202A20202BA0202 + E20202F60202FE0202FE0202FA0202D60202762E2E8AC0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C01212AE0202BA0202BE0202D20202D60202 + DE0202E60202F20202FA0202FE0202FE0202BA2E2E8AC0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C02A2ACA0202CE0202CA0202BA0202B60A0AB25252 + BAC0C0C0C0C0C0C0C0C0C0C0C05252EA0A0AFE3232F6C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C00202D20202DE0202A602029622229EC0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C06E6EEAC0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C01A1ADA0202E20202C602028A12127EC0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C00202E60202EE02028E02027A666696C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C05A5AEA0202F20202EA02027E02027676769A7A7A9A7676927676 + 927A7A9A8282A28686AAC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + 2222E60202860202760202FA0202FE0202F60202760202760202760202760202 + 76020276020276020276222282C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + 5252FE0202FE0202FE0202A20202FE02027A0202FE0202FE0202FA0202FE0202 + FA0202FE0202FA0202FE0202A2C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C00A0A7A0202FE0202B20202762222826E6E9E6A6AC66262BE6666 + C26666C26A6AC66E6ECA7272C2C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C00A0AFE0202FE0202AE0202763E3E92C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + 7676DE6E6EB20606DE0202FE0202B202027A1A1A825252924E4E924A4A8E4A4A + 8E4A4A8E4A4A8E4A4A8E4E4E926E6E9EC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + 3232FE02029E02029E0202FE0202FE0202D602029E02029E02029E02029E0202 + 9E02029E02029E02029E0202760E0E7EC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + 6666FE0202FE0202FA0202FE0202FE0202FE0202CA0202F60202F60202F20202 + F60202F60202F60202F60202F60202CAAAAABAC0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C00202FE0202F602027A020276C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C00202FE0202FE020276020276C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C03232FE0202FE0202D202027A0A0A7AC0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C00202FE0202FE02029602027612127EC0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C05252FE0202FE0202FE02028E02027602027A3636 + 8AC0C0C0C0C0C0C0C0C0C0C0C0222282020276C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C03636FE0202FE0202FE0202B60202760202 + 7A02027602027602027A02027602028E020276C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C04A4AFE0202FE0202FE0202FE0202 + D60202B20202A60202AA0202C20202BE02027AC0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C01E1EFE0202FE0202 + FE0202FE0202FE0202FE0202FA0202EA0202D2C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C07E7E + FE5656FE3E3EFA3E3EF64E4EF27676EEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 + C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0} + Margin = 5 + end + object BitBtn8: TBitBtn + Left = 8 + Top = 52 + Width = 193 + Height = 41 + Caption = 'Estados' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 2 + OnClick = BitBtn8Click + Glyph.Data = { + 360C0000424D360C000000000000360000002800000020000000200000000100 + 180000000000000C000000000000000000000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF000000000000000000000000525252525252525252525252FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FF00000000000000CEFF00CEFF0063FF0063FF00000052525252525252525252 + 5252FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 + 0000CEFF0063FF00CEFF00CEFF0063FF0063FF0063FF00000000000052525252 + 5252525252525252FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000CE + FF00CEFF31009C00CEFF00CEFF0063FF0063FF0063FF0000009C63CE00000052 + 5252525252525252525252525252FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF000000000000CE9C9CCE9C9C63313163313100000000CE + FF00CEFF0063FF00CEFF00CEFF0063FF0063FF0063FF0000009C63CE31009C00 + 0000525252525252525252525252525252525252FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000000000CE9C9C633131CE9C9CCE9C9C63313163313100000000CE + FF00CEFF31009C00CEFF00CEFF0063FF0063FF0063FF0000009C63CE31009C31 + 009C000000525252525252525252525252525252FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000CE9C9CCE9C9C633131CE9C9CCE9C9C63313163313100000000CE + FF00CEFF0063FF00CEFF00CEFF0063FF0063FF0063FF0000009C63CE31009C31 + 009C000000525252525252525252FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000CE9C9CCE9C9C633131CE9C9CCE9C9C63313163313100000000CE + FF00CEFF31009C00CEFF00CEFF0063FF0063FF0063FF0000009C63CE31009C31 + 009C000000525252FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000CE9C9CCE9C9C633131CE9C9CCE9C9C63313163313100000000CE + FF00CEFF0063FF00CEFF00CEFF0063FF0063FF0063FF0000009C63CE31009C31 + 009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000CE9C9CCE9C9C633131CE9C9CCE9C9C63313163313100000000CE + FF00CEFF31009C00CEFF00CEFF0063FF31009C0063FF0000009C63CE31009C31 + 009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000CE9C9CCE9C9C633131CE9C9CCE9C9C63313163313100000000CE + FF00CEFF0063FF00CEFF00CEFF00CEFF0063FF31009C0000009C63CE31009C31 + 009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000CE9C9CCE9C9C633131CE9C9CCE9C9C63313100000000CEFF00CE + FF00CEFF00CEFF00CEFF00CEFF00CEFF0063FF0063FF0000009C63CE31009C31 + 009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000CE9C9CCE9C9C633131CE9C9CCE9C9C63313100000000CEFF00CE + FF00CEFF00CEFF00CEFF00CEFF00CEFF0063FF0063FF0063FF00000031009C31 + 009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000CE9C9CCE9C9C633131CE9C9CCE9C9CCE9C9C00000000CEFF00CE + FF00CEFF00CEFF00CEFF00CEFF00CEFF0063FF0063FF0063FF0000009C63CE00 + 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 000000CE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9C00000000CEFF00CE + FF00CEFF00CEFF00CEFF00CEFF00CEFF0063FF0063FF0063FF0000009C63CE31 + 009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 000000CE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9C00000000CEFF00CE + FF00CEFF00CEFF00CEFF00CEFF00CEFF0063FF0063FF0063FF0000009C63CE31 + 009C31009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 000000CE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9C00000000CEFF00CE + FF00CEFF00CEFF00CEFF00CEFF00CEFF0063FF0063FF0063FF0000009C63CE31 + 009C31009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 000000CE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9C00000000CEFF00CE + FF00CEFF00CEFF00CEFF00CEFF00CEFF0063FF0063FF0063FF0000009C63CE31 + 009C31009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 000000CE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9C00000000CEFF00CE + FF00CEFF00CEFF00CEFFFFFFFFFFFFFF0063FF0063FF0063FF0000009C63CE31 + 009C31009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 000000CE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9C00000000CEFF00CE + FF00CEFFFFFFFFFFFFFF63CEFF63CEFF63CEFF63CEFF0063FF0000009C63CE31 + 009C31009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 000000CE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9CCE9C9C00000000CEFFFFFF + FFFFFFFF0063FF0063FF0063FF0063FF0063FF0063FF63CEFF0000009C63CE31 + 009C31009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 000000CE9C9CCE9C9CCE9C9CCE9C9CCE9C9CFFFFFFFFFFFF00000000000063CE + FF5252520000000000000000000000000063FF000000000000FFFFFF9C63CE31 + 009C31009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 000000CE9C9CCE9C9CCE9C9CFFFFFFFFFFFFDEDEDEDEDEDEDEDEDE00000063CE + FF00000000CEFF00CEFF00CEFF00CEFF000000FFFFFFCE9CCECE9CCECE9CCECE + 9CCE31009C000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + 000000CE9C9CFFFFFFFFFFFF6331316331316331316331316331316331311010 + 1000CEFF00CEFF00000000000000CEFF00CEFF00000031009C31009C31009C31 + 009CCE9CCE000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000DEDEDE5252520000000000000000000000006331310000001010 + 1000CEFF00000000CEFF00CEFF00000000CEFF00000000000000000031009C00 + 0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF000000DEDEDE00000000CEFF00CEFF00CEFF00CEFF000000FFFFFF1010 + 1000CEFF00CEFF00CEFF00CEFF00CEFF00CEFF00000000CEFF00CEFF000000FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF10101000CEFF00CEFF00000000000000CEFF00CEFF0000001010 + 1000CEFF00000000CEFF00CEFF00000000CEFF00000000000000CEFF00CEFF00 + 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF10101000CEFF00000000CEFF00CEFF00000000CEFF000000FFFF + FF10101000CEFF00CEFF00CEFF00CEFF10101000CEFF00CEFF00000000CEFF00 + 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF10101000CEFF00CEFF00CEFF00CEFF00CEFF00CEFF000000FFFF + FFFFFFFF10101010101000000042424200CEFF00CEFF00CEFF00CEFF00CEFF00 + 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFF10101000CEFF00000000CEFF00CEFF00000000CEFF000000FFFF + FFFFFFFFFFFFFFFFFFFF10101000CEFF00000000CEFF00CEFF00000000CEFF00 + 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF10101000CEFF00CEFF00CEFF00CEFF101010FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFF10101000CEFF00CEFF00CEFF00CEFF101010FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFF101010101010000000424242FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF101010101010000000424242FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + Margin = 5 + end + object BitBtn10: TBitBtn + Left = 404 + Top = 52 + Width = 193 + Height = 41 + Caption = 'Reiniciar Contador' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 3 + OnClick = BitBtn10Click + Glyph.Data = { + 660F0000424D660F000000000000360000002800000024000000240000000100 + 180000000000300F0000C40E0000C40E00000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFF0099CC0099990066 + 6600336600336600336600336600336600336600336600336600336600336600 + 3366003366003366003366003366006666FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF33CCFF00CCFF0099CC00999900666600336600336600336600336600 + 6666006666006666006699006699006699006699006666006666009999FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99FFFF33CCFF33CCFF00CCFF0099CC00 + 99990066990066990066990066990099990099CC0099CC00CCFF00CCFF00CCCC + 0099CC009999009999FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFF66 + CCFF66CCFF66CCFF33CCFF00CCFF00CCCC0099CC0099CC0099CC0099CC00CCFF + 00CCFF33CCFF33CCFF33CCFF00CCFF00CCFF33CCFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFCCFFFF99FFFF99FFFF66CCFF66CCFF33CCFF00CCFF + 00CCFF00CCCC33CCFF33CCFF66CCFF66CCFF66CCFF66CCFF66CCFF33CCFF0099 + 99330033330033330033330033330033330033993366FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99FFFF99FFFF + 99FFFF99FFFF66CCFF33CCFF00CCFF00CCCC66CCFFFFFFFFFFFFFFFFFFFF9966 + 9933003333003333003333003333003333003366006633003333003333003333 + 0033FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF99FFFF99FFFF99FFFF99FFFF66CCFF33CCFF00CCCC0099 + 99009999CCCCCC99336666006666006666006666006666006666009966009966 + 0099660099660099660099660066FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99FFFF99FFFF99FF + FF99FFFF66CCFF00CCFF0099CC00669900666600336666009966009966009966 + 00999900CC9900CC9900CCCC33FFCC33FFCC33FF9900CC9900CCFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFCCFFFF99FFFF99FFFF66CCFF33CCFF00CCFF00999900666600 + 33660033669900CC9900CC9900CC9900CCCC33FFCC66FFCC66FFCC66FFCC99FF + CC66FFCC66FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFF99FFFF99FFFF66 + CCFF33CCFF0099CC006666003366003366003366CC33FFCC33FFCC33FFCC33FF + CC66FFFFCCFFFFCCFFFFCCFFCC99FFCC99FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFCCFFFF99FFFF99FFFF66CCFF33CCFF0099CC006666003366003366 + 003366CC33FFCC33FFCC66FFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFCC99FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFF99FFFF99FFFF66CCFF + 33CCFF0099CC006666003366003366996699CC33FFCC99FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFCC99FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCC99 + 9999999999999999999999999999999999999999FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFCCFF99FFFF66CCFF33CCFF00CCFF009999003366003366003366CC33 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC99FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFCCCC990033660000660000660000660000660000993366 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFF66CCFF66CCFF33CCFF0099 + CC006699003366003366999999FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC + 66FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC0033990033660000 + 003366003366003366003366006666003366003366CCCCCCFFFFFFFFFFFFFFFF + FF99FFFF33CCFF33CCFF00CCFF009999006666003366999999FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFCC33FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFCCCCCC0033CC00339900330099990099CC0099990066660033660033660033 + 66999999FFFFFFFFFFFFFFFFFF66CCFF33CCFF33CCFF00CCFF0099CC00669900 + 6666999999FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC99FF9900CCFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC3366CC3366CC003399669933CCFF00CC + FF0099CC009999006666003366003366CCCCCCFFFFFFCCFFFF00CCCC00CCFF33 + CCFF00CCFF0099CC009999006699CCCCCCFFCCFFFFFFFFFFFFFFFFFFFFCCCCCC + 6600999900CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC3366CC33 + 66CC3366CC336666CCFF66CCFF33CCFF33CCFF0099CC00669900666600666600 + 99990099CC00CCFF33CCFF33CCFF33CCFF00CCFF0099CC0099CCFFCCFF660099 + 6600999933669933666600666600999900CCFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFCCCCCC3366CC3366CC3366CC003399999999FFFF99FFFF66CCFF66 + CCFF33CCFF00CCFF00CCFF00CCFF00CCFF33CCFF33CCFF33CCFF33CCFF00CCFF + 00CCFF33CCFFFFCCFF9900CC9900CC6600996600996600996600999900CCFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC3366CC3366CC3366CC003399 + 0033CCCCCC99FFFF99FFFF99FFFF66CCFF66CCFF66CCFF66CCFF66CCFF66CCFF + 66CCFF66CCFF33CCFF33CCFF33CCFFFFFFFFFFFFFFCC33FFCC33FF9900CC9900 + CC9900CC9900CC9900CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC + 3366CC3366CC3366CC003366000066000099999999FFFF99FFFF99FFFF99FFFF + 99FFFF99FFFF66CCFF66CCFF66CCFF66CCFF66CCFF99FFFFFFFFFFFFFFFFFFFF + FFCC66FFCC66FFCC66FFCC33FFCC33FFCC33FFCC33FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFCCCCCC3366CC3366CC3366CC0033660000660000993366 + FFFFFFCCFFFFCCFFFFCCFFFF99FFFF99FFFF99FFFF99FFFFCCFFFFCCFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFCC66FFCC99FFCC99FFCC66FFCC66FFCC66FFCC + 33FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC3366CC3366CC3366 + CC0033660000660000993366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC99FFCC99FFCC + 99FFCC99FFCC99FFCC66FFCC66FFFFCCCCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFF + FFCCCCCC0033CC3366CC0033CC0033660000660000993366FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFCCFFCC99FFCC99FFCC66FFCC66FFFF9999660000 + 660000996699FFCCCCFFFFFFCCCCCCCC0033CC0033CC0033CC00336600006600 + 00993366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC99FF + CC66FFCC66FFFF9999990033660000660000660000996699FF9999CC0033CC00 + 33CC0033990033660000660000993366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFCCFFCCCCCC999999996699993366330033993366FFFFFF + FFFFFFFFFFFFFFFFFFFFCCFFCC66FFCC33FFFF9999CC3366CC0033CC00339900 + 33660000990033CC0033CC0033CC0033990033660000660000993366FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFCC66FF660099660099660066330033330033 + 330033330033330033FFCCFFFFFFFFFFFFFFFFFFFFFFCCFFCC33FFCC33FFFFCC + CCFF6666FF6666CC3366CC3366CC0033CC0033CC0033CC0033CC003399003366 + 0000660000993366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC66FF9900CC + 9900CC660099660099660066330033330033330033996699FFFFFFFFFFFFFFFF + FFCC66FF9900CCCC33FFFFCCCCFF9999FF9999FF9999FF6666FF6666CC3366CC + 3366CC3366CC0033990033660000660000993366FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFCCFFCC66FFCC33FFCC33FF9900CC6600996600996600663300 + 33330033996699CC99FF9966996600999900CC9900CCFFFFFFFFCCCCFFCCCCFF + 9999FF9999FF9999FF6666FF6666CC3366CC0033CC0033660000660000993366 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC99FFCC66FFCC66FFCC66 + FFCC33FF9900CC9900CC6600996600666600666600666600999900CC9900CCCC + 33FFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCFF9999FF9999FF9999FF6666CC3366 + CC0033990033660000993366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFCCFFCC99FFCC99FFCC99FFCC99FFCC66FFCC33FFCC33FF9900CC9900CC99 + 00CC9900CCCC33FFCC33FFCC66FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCC + FF9999FF9999FF9999FF6666CC3366CC0033990033993366FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFCC99FFCC99FFCC99FFCC99FFCC + 99FFCC66FFCC66FFCC66FFCC66FFCC66FFCC66FFCC66FFCC66FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFCCCCFF9999FF9999FF9999FF6666CC3366CC00 + 33CC3366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFCCFFCC99FFCC99FFCC99FFCC99FFCC99FFCC99FFCC99FFCC66FFCC66FF + CC66FFCC66FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCFF99 + 99FF9999FF6666FF6666CC3366CC3366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFFCCFFCC99FFCC99FFCC99FF + CC99FFCC99FFCC99FFCC99FFCC99FFCC99FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFCCCCFFCCCCFF9999FF9999FF6666FF9999FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFFCCFFFFCCFFFFCCFFFFCCFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF} + Margin = 5 + end + end + object BitBtn7: TBitBtn + Left = 400 + Top = 160 + Width = 193 + Height = 41 + Caption = '&Tickets' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 6 + OnClick = BitBtn7Click + Glyph.Data = { + 36080000424D3608000000000000360400002800000020000000200000000100 + 080000000000000400000000000000000000000100000000000000000000FFFF + FF0052A4FF000041A0000051A00059C5FF0058C5FF0060C7FF005EC6FF005DC6 + FF005BC6FF0068C9FF0068C8FF0067C8FF0064C7FF0061C7FF006BCAFF0073CB + FF0074CBFF0072CBFF006FCAFF0069C8FF007CCDFF0081CEFF007FCEFF007ACC + FF00CEFFFF005299FF0071CAFF008ACFFF0091D1FF0091D2FF008DD1FF0088CF + FF006363310079CCFF0084CFFF0096D3FF009BD4FF00639C31002121210083CF + FF008FD1FF009AD3FF00A2D5FF00ADADAD00737373008AD0FF0097D2FF00AAD6 + FF009DD4FF00233D63000000F000000080000080000000808000800000008000 + 800080800000C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00 + FF00FFFF000006060600121212001F1F1F002C2C2C0039393900454545005252 + 52005F5F5F006C6C6C007878780085858500929292009F9F9F00ABABAB00B8B8 + B800C5C5C500D2D2D200DEDEDE00EBEBEB00F8F8F800F0FBFF00A4A0A000C0DC + C000F0CAA60000003E0000005D0000007C0000009B000000BA000000D9002424 + FF004848FF006C6CFF009090FF00B4B4FF0000143E00001E5D0000287C000032 + 9B00003CBA000046D9000055F000246DFF004885FF006C9DFF0090B5FF00B4CD + FF00002A3E00003F5D0000547C0000699B00007EBA000093D90000AAF00024B6 + FF0048C2FF006CCEFF0090DAFF00B4E6FF00003E3E00005D5D00007C7C00009B + 9B0000BABA0000D9D90000F0F00024FFFF0048FFFF006CFFFF0090FFFF00B4FF + FF00003E2A00005D3F00007C5400009B690000BA7E0000D9930000F0AA0024FF + B60048FFC2006CFFCE0090FFDA00B4FFE600003E1400005D1E00007C2800009B + 320000BA3C0000D9460000F0550024FF6D0048FF85006CFF9D0090FFB500B4FF + CD00003E0000005D0000007C0000009B000000BA000000D9000000F0000024FF + 240048FF48006CFF6C0090FF9000B4FFB400143E00001E5D0000287C0000329B + 00003CBA000046D9000055F000006DFF240085FF48009DFF6C00B5FF9000CDFF + B4002A3E00003F5D0000547C0000699B00007EBA000093D90000AAF00000B6FF + 2400C2FF4800CEFF6C00DAFF9000E6FFB4003E3E00005D5D00007C7C00009B9B + 0000BABA0000D9D90000F0F00000FFFF2400FFFF4800FFFF6C00FFFF9000FFFF + B4003E2A00005D3F00007C5400009B690000BA7E0000D9930000F0AA0000FFB6 + 2400FFC24800FFCE6C00FFDA9000FFE6B4003E1400005D1E00007C2800009B32 + 0000BA3C0000D9460000F0550000FF6D2400FF854800FF9D6C00FFB59000FFCD + B4003E0000005D0000007C0000009B000000BA000000D9000000F0000000FF24 + 2400FF484800FF6C6C00FF909000FFB4B4003E0014005D001E007C0028009B00 + 3200BA003C00D9004600F0005500FF246D00FF488500FF6C9D003B3B3B3B3B3B + 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B + 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B + 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B00003B3B00 + 003B00003B3B003B0000003B3B00003B3B0000003B3B34003B3B3B00003B3B00 + 003B00003B003B3B00003B3B3B00003B3B3B3B003B3B3400003B3B00003B3B00 + 003B000000003B3B0000003B3B00003B3B0000003B3B340000003B00003B3B3B + 3B3B0000003B3B3B00003B3B3B00003B3B003B3B3B3B3400003B000000003B00 + 003B00003B003B3B0000003B000000003B0000003B3B34003B3B3B3B3B3B3B3B + 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B + 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B + 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B00003B3B3B + 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B00331B00003B + 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B00331B1B1B00 + 003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B00331B041B + 1B00003B3B3B3B3B0000000000000000000000000000000000003B3B00041B04 + 041B1B00003B3B3B001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A003B3B00041B2A + 3204041B1B00003B001A22222222222222222222222222221A003B3B00041B2F + 302C3100001B1B00001A221A27271A1A2E281A1A27271A221A003B3B00041B29 + 2A2B2C000000041B001A221A1A271A2D2D2E1A1A271A1A221A000000031B1B23 + 2400250000002604001A22271A1A1A2728281A1A1A1A27221A00031B041B0C1C + 19001D001E1F2021001A22222222222222222222222222221A00000302040415 + 1400160017171819001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A003B0000020204 + 04100000111213140000000000000000000000000000000000003B3B3B000002 + 020400000B0C0D0E0F0402003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B00 + 00020200040708090A0402003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B + 3B00000202040405060402003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B + 3B3B3B0000020204040202003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B + 3B3B3B3B3B000002020203003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B + 3B3B3B3B3B3B3B0000003B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B + 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B + 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B + 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B} + Margin = 10 + end + object BitBtn9: TBitBtn + Left = 232 + Top = 160 + Width = 50 + Height = 41 + Hint = 'Emitir facturas...' + ParentShowHint = False + ShowHint = True + TabOrder = 7 + OnClick = BitBtn9Click + Glyph.Data = { + 0E0A0000424D0E0A000000000000360400002800000029000000220000000100 + 080000000000D8050000C40E0000C40E00000001000000000000000000000000 + 8000008000000080800080000000800080008080000080808000FFFFFF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000012000000 + 24005600CF00405F6C0000008400000000000000E20022017800400060005000 + 60005600EF00495F00000000440056003B00F7BF6C0000008400000000000000 + E2002201170074846F000000580056002600F7BF12000000780040000C00F9BF + B800F7BF94000000980056006D00F7BF170074840000000074000F5700000000 + 46000000D2000300AA000000970000003700570100000F5737005701D800763D + B700040000000000000096194000E2FC22000000000084000000763D10000000 + 12000000C400647AFF000F57D800BD3DB700FFFF0F00120000000F5700001017 + 1A0000000300961940009D9E8F000000E2002201000084006C00000000001017 + 03009716F90077170000E2FC2200000084001017030010170300000000008F17 + 7C003A85BD0077170100D0850F00E2FC220010170300E06F0200000000000F57 + 70005A85BD0077170100D0850F00E2FC2200E06F020089A20000020002008C8D + 0000000002009716C200E4853E006229BF00971662004A200A00020000000002 + E20022010000664E1C00E2FC2200000000000000000000000000BF4B03000000 + 000000000000BF4BBF00000001009F16BE007403000000000000000003001101 + 0000392C8F00E310E2002201E20022010200E485A00000021200000000000000 + BF00101703000000BF00000008007C0B00000200000001000000000200000000 + 28000F5790000000340097160000BF4B54007E9E6F0000000100020000000002 + 00000000000028860F00E06F64005800540002020000E2FC2200654E1C00E2FC + 220000008C0002003400641E4E008DA90100341E64005C865C003CAA0000E06F + 0000BF4B4A007E4987000100120000000C005800640008008B00080052001720 + 9400B1714F0008000000CE0C2F006756E0001100FA00FFFF3100BF20F0002101 + B70009000000CE0CF00003018E00020008000000C200DB038F00000000000002 + 80002000E00002006700DC87BF002F065700000067007AFC6F00540454002000 + 8000000000000002000000000200C4C5000006008C00B716D900F7BF67000000 + 000056000100E00F4700230EEE0030130000381300001C87DF004701E2003813 + 01005F015E00E94A470064135F0030130000381300005E875600468756000000 + 00000100DE0001000000381300008702EE00F7BF67000000E300F7BF94000000 + 9800560030000E00D000590004000000A000F7BF00005800D40082075A005AB5 + 0000000092003A6482002602E6004D4F37000100860000006700A8874800F704 + 820000007E00CA8B72005AB55A006706E40099130700562382000A0A0A0A0A0A + 07070707070707070707070707070707070A0A0A0A0A0A0A0A0A0A0A0A0A0A0A + 0A0A0A0000000A0A0A0A0A0A07070707070707070707070707070707070A0A0A + 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0000000A0A0A0A0A000000000000000000 + 0000000000000007070A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0000000A0A + 0A0A0A000F0F0F0F0F0F0F0F0F0F0F0F0F0F0007070707070A0A0A0A0A0A0A0A + 0A0A0A0A0A0A0A0000000A0A0A0A0A000F0F0F0F0F0F0F0F0F0F0F0F0F0F0007 + 07070707070707070707070707070707070A0A0000000A0A0A0A0A0007070707 + 0F0F0F0F0F0F0F0F0F0F000000000707070707070707070707070707070A0A00 + 00000A0A0A0A0A000F0F0F0F0F0F0F0F0F0F0F0F0F0F00080F00000000000000 + 0000000000000007070A0A0000000A0A0A0A0A00070707070707070707070707 + 070F00080F00080808080F0F0F0F0F0F0F0F0007070A0A0000000A0A0A0A0A00 + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F00080F00080808080F0F0F0F0F0F0F0F0007 + 070A0A0000000A0A0A0A0A00070707070707070707070707070F00080F00080F + 0F080F0F0F0F0F0F0F0F0007070A0A0000000A0A0A0A0A000F0F0F0F0F0F0F0F + 0F0F0F0F0F0F0008070008070F07070707070F07070F0007070A0A0000000A0A + 0A0A0A0007070707070707070F0F0F0F0F0F00080F00080F0F080F0F0F0F0F0F + 0F0F0007070A0A0000000A0A0A0A0A000F0F0F0F0F0F0F0F0F0F0F0F0F0F0008 + 0700080707070F070F070F070F0F0007070A0A0000000A0A0A0A0A0007070707 + 0707070707070707070700080F00080F0F080F0F0F08080F0F0F0007070A0A00 + 00000A0A0A0A0A000F0F0F0F0F0F0F0F0F0F0F0F0F0F00080F0008070F070707 + 07070807070F0007070A0A0000000A0A0A0A0A0007070707070F0F0F0F0F0F0F + 0F0F00080F00080808080F08080F0F0F0F0F0007070A0A0000000A0A0A0A0A00 + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F000807000807070707080F080F0F0F0F0007 + 070A0A0000000A0A0A0A0A00070707070707070707070707070700080F00080F + 0F080F0F0F0F08080F0F0007070A0A0000000A0A0A0A0A000F0F0F0F0F0F0F0F + 0F0F0F0F0F0F00080F00080F0F080F0F0F0F0F0F08080007070A0A0000000A0A + 0A0A0A00070707070707070707070707070700080F0000000000000000000000 + 0000000A0A0A0A0000000A0A0A0A0A000F0F0F0F0F0F0F0F0F0F0F0F0F0F0008 + 070008070007070A0A0A0A0A0A0A0A0A0A0A0A0000000A0A0A0A0A000F0F0F0F + 0F0F0F0F0F0F0F0F0F0F00080F00080F0007070A0A0A0A0A0A0A0A0A0A0A0A00 + 00000A0A0A0A0A000F0F0F0F070707070707070F0F0F00080700080F0007070A + 0A0A0A0A0A0A0A0A0A0A0A0000000A0A0A0A0A000C0C0F0F0F0F0F0F0F0F0F0F + 0F0F00080F00080F0007070A0A0A0A0A0A0A0A0A0A0A0A0000000A0A0A0A0A00 + 0C0B0B0F0F0F0F0F0F0F0F0F0F0F00080F0008070007070A0A0A0A0A0A0A0A0A + 0A0A0A0000000A0A0A0A0A000B0B0F0F0F0F0F0F0F0F0F0F0F0F00080F00080F + 0007070A0A0A0A0A0A0A0A0A0A0A0A0000000A0A0A0A0A000000000000000000 + 000000000000000F0F0008070007070A0A0A0A0A0A0A0A0A0A0A0A0000000A0A + 0A0A0A0A0A000C0C0B0B0F0F0F0F0F0F0F0F0F0F0F00080F0007070A0A0A0A0A + 0A0A0A0A0A0A0A0000000A0A0A0A0A0A0A000B0B0F0F080808080F0F0F0F0F0F + 0F0008070007070A0A0A0A0A0A0A0A0A0A0A0A0000000A0A0A0A0A0A0A000000 + 0000000000000000000000000000080F0007070A0A0A0A0A0A0A0A0A0A0A0A00 + 00000A0A0A0A0A0A0A0A0A0008080808080707070707070707080F0F0007070A + 0A0A0A0A0A0A0A0A0A0A0A0000000A0A0A0A0A0A0A0A0A000C0C0B0B0F0F0F0F + 0F0F0F0F0F0F0F0F0007070A0A0A0A0A0A0A0A0A0A0A0A0000000A0A0A0A0A0A + 0A0A0A000B0B0F0F0F0F0F0F0F0F0F0F0F0F0F0F000A0A0A0A0A0A0A0A0A0A0A + 0A0A0A0000000A0A0A0A0A0A0A0A0A0000000000000000000000000000000000 + 000A0A0A0A0A0A0A0A0A0A0A0A0A0A000000} + end +end diff --git a/cap_gestion/capg_menu.h b/cap_gestion/capg_menu.h new file mode 100644 index 0000000..3ab836d --- /dev/null +++ b/cap_gestion/capg_menu.h @@ -0,0 +1,52 @@ +//--------------------------------------------------------------------------- + +#ifndef capg_menuH +#define capg_menuH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TMainForm : public TForm +{ +__published: // IDE-managed Components + TPanel *Panel1; + TLabel *Label1; + TBevel *Bevel1; + TLabel *Label2; + TLabel *Label3; + TLabel *Label4; + TLabel *Label5; + TLabel *Label6; + TBitBtn *BitBtn2; + TBitBtn *BitBtn3; + TBitBtn *BitBtn4; + TBitBtn *BitBtn5; + TPanel *Panel2; + TBitBtn *BitBtn1; + TBitBtn *BitBtn6; + TBitBtn *BitBtn7; + TBitBtn *BitBtn8; + TBitBtn *BitBtn9; + TBitBtn *BitBtn10; + void __fastcall BitBtn2Click(TObject *Sender); + void __fastcall BitBtn1Click(TObject *Sender); + void __fastcall BitBtn5Click(TObject *Sender); + void __fastcall BitBtn6Click(TObject *Sender); + void __fastcall BitBtn8Click(TObject *Sender); + void __fastcall BitBtn7Click(TObject *Sender); + void __fastcall BitBtn3Click(TObject *Sender); + void __fastcall BitBtn9Click(TObject *Sender); + void __fastcall BitBtn4Click(TObject *Sender); + void __fastcall BitBtn10Click(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TMainForm(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TMainForm *MainForm; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_gestion/capg_qrLabonados.cpp b/cap_gestion/capg_qrLabonados.cpp new file mode 100644 index 0000000..d00380d --- /dev/null +++ b/cap_gestion/capg_qrLabonados.cpp @@ -0,0 +1,16 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "capg_qrLabonados.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TqrLAbonados *qrLAbonados; +//--------------------------------------------------------------------------- +__fastcall TqrLAbonados::TqrLAbonados(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- diff --git a/cap_gestion/capg_qrLabonados.dfm b/cap_gestion/capg_qrLabonados.dfm new file mode 100644 index 0000000..3dc31cd --- /dev/null +++ b/cap_gestion/capg_qrLabonados.dfm @@ -0,0 +1,561 @@ +object qrLAbonados: TqrLAbonados + Left = 190 + Top = 133 + Width = 803 + Height = 636 + Caption = 'qrLAbonados' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Scaled = False + PixelsPerInch = 96 + TextHeight = 13 + object QuickRep1: TQuickRep + Left = 0 + Top = 0 + Width = 794 + Height = 1123 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + DataSet = TbAbonados + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Arial' + Font.Style = [] + Functions.Strings = ( + 'PAGENUMBER' + 'COLUMNNUMBER' + 'REPORTTITLE') + Functions.DATA = ( + '0' + '0' + #39#39) + Options = [FirstPageHeader, LastPageFooter] + Page.Columns = 1 + Page.Orientation = poPortrait + Page.PaperSize = A4 + Page.Values = ( + 100 + 2970 + 100 + 2100 + 100 + 100 + 0) + PrinterSettings.Copies = 1 + PrinterSettings.Duplex = False + PrinterSettings.FirstPage = 0 + PrinterSettings.LastPage = 0 + PrinterSettings.OutputBin = Auto + PrintIfEmpty = True + SnapToGrid = True + Units = MM + Zoom = 100 + object QRBand1: TQRBand + Left = 38 + Top = 38 + Width = 718 + Height = 40 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + AlignToBottom = False + Color = clWhite + ForceNewColumn = False + ForceNewPage = False + Size.Values = ( + 105.833333333333 + 1899.70833333333) + BandType = rbTitle + object QRLabel1: TQRLabel + Left = 208 + Top = 0 + Width = 294 + Height = 37 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 97.8958333333333 + 550.333333333333 + 0 + 777.875) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Listado de Abonados' + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -32 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + Transparent = False + WordWrap = True + FontSize = 24 + end + end + object QRBand2: TQRBand + Left = 38 + Top = 118 + Width = 718 + Height = 27 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + AlignToBottom = False + Color = clWhite + ForceNewColumn = False + ForceNewPage = False + Size.Values = ( + 71.4375 + 1899.70833333333) + BandType = rbDetail + object QRExpr1: TQRExpr + Left = 8 + Top = 8 + Width = 94 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 21.1666666666667 + 21.1666666666667 + 248.708333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Color = clWhite + ResetAfterPrint = False + Transparent = False + WordWrap = True + Expression = 'TbAbonados.ida' + FontSize = 10 + end + object QRExpr2: TQRExpr + Left = 56 + Top = 8 + Width = 94 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 148.166666666667 + 21.1666666666667 + 248.708333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Color = clWhite + ResetAfterPrint = False + Transparent = False + WordWrap = True + Expression = 'TbAbonados.dni' + FontSize = 10 + end + object QRExpr3: TQRExpr + Left = 152 + Top = 8 + Width = 287 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 402.166666666667 + 21.1666666666667 + 759.354166666667) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Color = clWhite + ResetAfterPrint = False + Transparent = False + WordWrap = True + Expression = 'TbAbonados.nombre + '#39' '#39' + TbAbonados.apellidos' + FontSize = 10 + end + object QRExpr4: TQRExpr + Left = 416 + Top = 8 + Width = 301 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 1100.66666666667 + 21.1666666666667 + 796.395833333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Color = clWhite + ResetAfterPrint = False + Transparent = False + WordWrap = True + Expression = 'TbAbonados.telefono1 + '#39' '#39' + TbAbonados.telefono2' + FontSize = 10 + end + end + object QRSubDetail1: TQRSubDetail + Left = 38 + Top = 145 + Width = 718 + Height = 24 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + AlignToBottom = False + Color = clWhite + ForceNewColumn = False + ForceNewPage = False + LinkBand = QRBand2 + Size.Values = ( + 63.5 + 1899.70833333333) + Master = QuickRep1 + DataSet = TbVehiculos + PrintBefore = False + PrintIfEmpty = True + object QRExpr5: TQRExpr + Left = 64 + Top = 0 + Width = 115 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 169.333333333333 + 0 + 304.270833333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Arial' + Font.Style = [fsItalic] + Color = clWhite + ParentFont = False + ResetAfterPrint = False + Transparent = False + WordWrap = True + Expression = 'TbVehiculos.idCard' + FontSize = 10 + end + object QRExpr6: TQRExpr + Left = 152 + Top = 0 + Width = 131 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 402.166666666667 + 0 + 346.604166666667) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Arial' + Font.Style = [fsItalic] + Color = clWhite + ParentFont = False + ResetAfterPrint = False + Transparent = False + WordWrap = True + Expression = 'TbVehiculos.matricula' + FontSize = 10 + end + object QRExpr7: TQRExpr + Left = 288 + Top = 0 + Width = 106 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 762 + 0 + 280.458333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Arial' + Font.Style = [fsItalic] + Color = clWhite + ParentFont = False + ResetAfterPrint = False + Transparent = False + WordWrap = True + Expression = 'TbVehiculos.color' + FontSize = 10 + end + object QRExpr8: TQRExpr + Left = 392 + Top = 0 + Width = 120 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 1037.16666666667 + 0 + 317.5) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Arial' + Font.Style = [fsItalic] + Color = clWhite + ParentFont = False + ResetAfterPrint = False + Transparent = False + WordWrap = True + Expression = 'TbVehiculos.modelo' + FontSize = 10 + end + object QRExpr9: TQRExpr + Left = 600 + Top = 0 + Width = 119 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 1587.5 + 0 + 314.854166666667) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Arial' + Font.Style = [fsItalic] + Color = clWhite + ParentFont = False + ResetAfterPrint = False + Transparent = False + WordWrap = True + Expression = 'TbVehiculos.idplaza' + FontSize = 10 + end + end + object QRBand3: TQRBand + Left = 38 + Top = 78 + Width = 718 + Height = 40 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = True + Frame.DrawLeft = False + Frame.DrawRight = False + AlignToBottom = False + Color = clWhite + ForceNewColumn = False + ForceNewPage = False + Size.Values = ( + 105.833333333333 + 1899.70833333333) + BandType = rbColumnHeader + object QRLabel2: TQRLabel + Left = 8 + Top = 16 + Width = 13 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 21.1666666666667 + 42.3333333333333 + 34.3958333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'ID' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object QRLabel3: TQRLabel + Left = 64 + Top = 16 + Width = 22 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 169.333333333333 + 42.3333333333333 + 58.2083333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'DNI' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object QRLabel4: TQRLabel + Left = 152 + Top = 16 + Width = 112 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 402.166666666667 + 42.3333333333333 + 296.333333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Nombre y apellidos' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object QRLabel5: TQRLabel + Left = 416 + Top = 16 + Width = 56 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 1100.66666666667 + 42.3333333333333 + 148.166666666667) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Telefonos' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + end + end + object DsAbonados: TDataSource + DataSet = TbAbonados + Left = 116 + Top = 284 + end + object DsVehiculos: TDataSource + DataSet = TbVehiculos + Left = 152 + Top = 288 + end + object TbVehiculos: TTable + IndexName = 'iAbonados' + MasterFields = 'ida' + MasterSource = DsAbonados + TableName = 'datos\vehiculos.db' + Left = 152 + Top = 314 + end + object TbAbonados: TTable + TableName = 'datos\abonados.db' + Left = 116 + Top = 316 + end +end diff --git a/cap_gestion/capg_qrLabonados.h b/cap_gestion/capg_qrLabonados.h new file mode 100644 index 0000000..126566e --- /dev/null +++ b/cap_gestion/capg_qrLabonados.h @@ -0,0 +1,51 @@ +//--------------------------------------------------------------------------- + +#ifndef capg_qrLabonadosH +#define capg_qrLabonadosH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TqrLAbonados : public TForm +{ +__published: // IDE-managed Components + TQuickRep *QuickRep1; + TQRBand *QRBand1; + TQRBand *QRBand2; + TQRSubDetail *QRSubDetail1; + TDataSource *DsAbonados; + TDataSource *DsVehiculos; + TTable *TbVehiculos; + TTable *TbAbonados; + TQRLabel *QRLabel1; + TQRBand *QRBand3; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRLabel *QRLabel4; + TQRLabel *QRLabel5; + TQRExpr *QRExpr1; + TQRExpr *QRExpr2; + TQRExpr *QRExpr3; + TQRExpr *QRExpr4; + TQRExpr *QRExpr5; + TQRExpr *QRExpr6; + TQRExpr *QRExpr7; + TQRExpr *QRExpr8; + TQRExpr *QRExpr9; +private: // User declarations +public: // User declarations + __fastcall TqrLAbonados(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TqrLAbonados *qrLAbonados; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_gestion/capg_tabonados.cpp b/cap_gestion/capg_tabonados.cpp new file mode 100644 index 0000000..778ef19 --- /dev/null +++ b/cap_gestion/capg_tabonados.cpp @@ -0,0 +1,48 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "capg_tabonados.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm2 *Form2; +//--------------------------------------------------------------------------- +__fastcall TForm2::TForm2(TComponent* Owner) + : TForm(Owner) +{ + TbTAbonados->Active = true; +} +//--------------------------------------------------------------------------- +void __fastcall TForm2::TbTAbonadosBeforeOpen(TDataSet *DataSet) +{ + if ( !FileExists( TbTAbonados -> TableName ) ) + { + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbTAbonados -> FieldDefs -> Clear(); + + /********************\ + |* Datos Básicos *| + \********************/ + TbTAbonados -> FieldDefs -> Add("idta", ftAutoInc, 0, false ); + TbTAbonados -> FieldDefs -> Add("desc", ftString, 15, false ); + + TbTAbonados -> FieldDefs -> Add("cuota", ftCurrency, 0, false ); + TbTAbonados -> FieldDefs -> Add("acceso", ftBoolean, 0, false ); + TbTAbonados -> FieldDefs -> Add("faccesoAM", ftInteger, 0, false ); + TbTAbonados -> FieldDefs -> Add("faccesoPM", ftInteger, 0, false ); + + TbTAbonados -> FieldDefs -> Add("msg", ftString, 32, false ); + + TbTAbonados -> IndexDefs-> Clear(); + + TbTAbonados->IndexDefs->Add("Primary", "idta", TIndexOptions() << ixPrimary << ixUnique); + + // Creamos la base... + TbTAbonados -> CreateTable(); + } +} +//--------------------------------------------------------------------------- + diff --git a/cap_gestion/capg_tabonados.ddp b/cap_gestion/capg_tabonados.ddp new file mode 100644 index 0000000..cdc0ee8 Binary files /dev/null and b/cap_gestion/capg_tabonados.ddp differ diff --git a/cap_gestion/capg_tabonados.dfm b/cap_gestion/capg_tabonados.dfm new file mode 100644 index 0000000..de4859c --- /dev/null +++ b/cap_gestion/capg_tabonados.dfm @@ -0,0 +1,235 @@ +object Form2: TForm2 + Left = 278 + Top = 213 + AutoScroll = False + BorderIcons = [biSystemMenu] + Caption = 'CAP-ges' + ClientHeight = 453 + ClientWidth = 632 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Icon.Data = { + 0000010001002020000001000800A80800001600000028000000200000004000 + 0000010008000000000080040000000000000000000000010000000000000000 + 0000000080000080000000808000800000008000800080800000C0C0C0008080 + 80000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000606 + 0600121212001F1F1F002C2C2C003939390045454500525252005F5F5F006C6C + 6C007878780085858500929292009F9F9F00ABABAB00B8B8B800C5C5C500D2D2 + D200DEDEDE00EBEBEB00F8F8F800F0FBFF00A4A0A000C0DCC000F0CAA6000000 + 3E0000005D0000007C0000009B000000BA000000D9000000F0002424FF004848 + FF006C6CFF009090FF00B4B4FF0000143E00001E5D0000287C0000329B00003C + BA000046D9000055F000246DFF004885FF006C9DFF0090B5FF00B4CDFF00002A + 3E00003F5D0000547C0000699B00007EBA000093D90000AAF00024B6FF0048C2 + FF006CCEFF0090DAFF00B4E6FF00003E3E00005D5D00007C7C00009B9B0000BA + BA0000D9D90000F0F00024FFFF0048FFFF006CFFFF0090FFFF00B4FFFF00003E + 2A00005D3F00007C5400009B690000BA7E0000D9930000F0AA0024FFB60048FF + C2006CFFCE0090FFDA00B4FFE600003E1400005D1E00007C2800009B320000BA + 3C0000D9460000F0550024FF6D0048FF85006CFF9D0090FFB500B4FFCD00003E + 0000005D0000007C0000009B000000BA000000D9000000F0000024FF240048FF + 48006CFF6C0090FF9000B4FFB400143E00001E5D0000287C0000329B00003CBA + 000046D9000055F000006DFF240085FF48009DFF6C00B5FF9000CDFFB4002A3E + 00003F5D0000547C0000699B00007EBA000093D90000AAF00000B6FF2400C2FF + 4800CEFF6C00DAFF9000E6FFB4003E3E00005D5D00007C7C00009B9B0000BABA + 0000D9D90000F0F00000FFFF2400FFFF4800FFFF6C00FFFF9000FFFFB4003E2A + 00005D3F00007C5400009B690000BA7E0000D9930000F0AA0000FFB62400FFC2 + 4800FFCE6C00FFDA9000FFE6B4003E1400005D1E00007C2800009B320000BA3C + 0000D9460000F0550000FF6D2400FF854800FF9D6C00FFB59000FFCDB4003E00 + 00005D0000007C0000009B000000BA000000D9000000F0000000FF242400FF48 + 4800FF6C6C00FF909000FFB4B4003E0014005D001E007C0028009B003200BA00 + 3C00D9004600F0005500FF246D00FF488500FF6C9D00FF90B500FFB4CD003E00 + 2A005D003F007C0054009B006900BA007E00D9009300F000AA00FF24B600FF48 + C200FF6CCE00FF90DA00FFB4E6003E003E005D005D007C007C009B009B00BA00 + BA00D900D900F000F000FF24FF00FF48FF00FF6CFF00FF90FF00FFB4FF002A00 + 3E003F005D0054007C0069009B007E00BA009300D900AA00F000B624FF00C248 + FF00CE6CFF00DA90FF00E6B4FF0014003E001E005D0028007C0032009B003C00 + BA004600D9005500F0006D24FF008548FF009D6CFF00B590FF00CDB4FF000000 + 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A0000000000000000000000 + 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A0000000000000000001010 + 101010101010101010101010101010101010101A1A0000000000000000001022 + 222121212121212020202020201F1F1F1F1F101A1A0000000000000000001022 + 22212121212121212020202020201F1F1F1F101A1A0000000000000000001022 + 1010101010212121212020202020201F1F1F101A1A0000000000000000001022 + 100F0F0F1021101010101010101020201F1F101A1A0000000000000000001022 + 100F0F0F102121212121212120202020201F101A1A0000000000000000001022 + 100F0F0F1021101021101010101020202020101A1A0000000000000000001022 + 101010101022222121212121212120202020101A1A0000000000000000001022 + 222222222222222222212121212120202020101A1A0000000000000000001022 + 222222222222222222222121212121202020101A1A0000000000000000001022 + 222222222222222222222221212121212020101A1A0000000000000000001022 + 100901101022222222222222212121212120101A1A0000000000000000001022 + 100909011022222224222222222121212121101A1A0000000000000000001022 + 1009010901241010101010101A1A1A1A1A1A101A1A1A1A1A1A1A1A1A1A001022 + 1009010F090124242410104A10101A1A1A1A101A1A1A1A1A1A1A1A1A1A1A1022 + 101010101009012424104B4A4A10101A1A1A101A1A1A1A1A1A1A1A1A1A001022 + 22242424242409012424104B104747102221101A1A0000000000000000001024 + 242424242424240924241010491047471022101A1A0000000000000000001024 + 242424242424242424242410494910474710101A1A0000000000000000001024 + 100901101024242424242424104949104747101A000000000000000000001024 + 1009090110241010241010101010494910474710000000000000000000001024 + 1009010901242424242424242422104949104747100000000000000000001024 + 1009010F090110101010101010101010494910101A1000000000000000001024 + 101010101009012424242410211F1F251049101F250210000000000000001024 + 2424242424240901242424102221211E10101F1F02251A100000000000001024 + 24242424242424092424241022242410000010021F2510FE1000000000001024 + 24242424242424242424241024241000000000101F10FEFE1000000000001024 + 2424242424242424242424102410000000000000102222FE1000000000001010 + 1010101010101010101010101000000000000000001010100000000000000000 + 000000000000000000000000000000000000000000000000000000000000C000 + 01FFC00001FF000001FF000001FF000001FF000001FF000001FF000001FF0000 + 01FF000001FF000001FF000001FF000001FF000001FF000001FF000000010000 + 000000000001000001FF000001FF000001FF000003FF000003FF000001FF0000 + 00FF0000007F0000003F0000301F0000781F0000FC1F0001FE3FFFFFFFFF} + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 20 + object Bevel3: TBevel + Left = 320 + Top = 50 + Width = 312 + Height = 167 + end + object StatusBar1: TStatusBar + Left = 0 + Top = 434 + Width = 632 + Height = 19 + Panels = <> + SimplePanel = False + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 632 + Height = 49 + Align = alTop + BevelOuter = bvNone + TabOrder = 1 + object Label1: TLabel + Left = 0 + Top = 4 + Width = 267 + Height = 33 + Caption = 'Tipos de Abonados' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + end + object Bevel1: TBevel + Left = 0 + Top = 32 + Width = 577 + Height = 9 + Shape = bsBottomLine + end + end + object DBCtrlGrid1: TDBCtrlGrid + Left = 0 + Top = 49 + Width = 320 + Height = 385 + Align = alLeft + ColCount = 1 + DataSource = DsTAbonados + PanelHeight = 96 + PanelWidth = 303 + TabOrder = 2 + RowCount = 4 + object Label2: TLabel + Left = 8 + Top = 8 + Width = 87 + Height = 20 + Caption = 'Descripci'#243'n:' + end + object Label3: TLabel + Left = 8 + Top = 36 + Width = 47 + Height = 20 + Caption = 'Cuota:' + end + object Label4: TLabel + Left = 8 + Top = 68 + Width = 64 + Height = 20 + Caption = 'Mensaje:' + end + object DBCheckBox1: TDBCheckBox + Left = 168 + Top = 38 + Width = 129 + Height = 17 + Caption = 'permitir acceso' + DataField = 'acceso' + DataSource = DsTAbonados + TabOrder = 0 + ValueChecked = 'True' + ValueUnchecked = 'False' + end + object DBEdit1: TDBEdit + Left = 104 + Top = 4 + Width = 193 + Height = 24 + DataField = 'desc' + DataSource = DsTAbonados + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 1 + end + object DBEdit2: TDBEdit + Left = 64 + Top = 32 + Width = 81 + Height = 24 + DataField = 'cuota' + DataSource = DsTAbonados + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 2 + end + object DBEdit3: TDBEdit + Left = 79 + Top = 62 + Width = 218 + Height = 24 + DataField = 'msg' + DataSource = DsTAbonados + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 3 + end + end + object DsTAbonados: TDataSource + DataSet = TbTAbonados + Left = 176 + Top = 160 + end + object TbTAbonados: TTable + BeforeOpen = TbTAbonadosBeforeOpen + TableName = 'datos\tabonados.db' + Left = 176 + Top = 192 + end +end diff --git a/cap_gestion/capg_tabonados.h b/cap_gestion/capg_tabonados.h new file mode 100644 index 0000000..c8ac326 --- /dev/null +++ b/cap_gestion/capg_tabonados.h @@ -0,0 +1,46 @@ +//--------------------------------------------------------------------------- + +#ifndef capg_tabonadosH +#define capg_tabonadosH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TForm2 : public TForm +{ +__published: // IDE-managed Components + TStatusBar *StatusBar1; + TPanel *Panel1; + TLabel *Label1; + TBevel *Bevel1; + TDataSource *DsTAbonados; + TTable *TbTAbonados; + TDBCtrlGrid *DBCtrlGrid1; + TLabel *Label2; + TLabel *Label3; + TDBCheckBox *DBCheckBox1; + TDBEdit *DBEdit1; + TDBEdit *DBEdit2; + TLabel *Label4; + TDBEdit *DBEdit3; + TBevel *Bevel3; + void __fastcall TbTAbonadosBeforeOpen(TDataSet *DataSet); +private: // User declarations +public: // User declarations + __fastcall TForm2(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm2 *Form2; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_gestion/capg_tarifas.cpp b/cap_gestion/capg_tarifas.cpp new file mode 100644 index 0000000..e196087 --- /dev/null +++ b/cap_gestion/capg_tarifas.cpp @@ -0,0 +1,38 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "capg_tarifas.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TfTarifas *fTarifas; +//--------------------------------------------------------------------------- +__fastcall TfTarifas::TfTarifas(TComponent* Owner) + : TForm(Owner) +{ + TbPrecios->Active = true; +} +//--------------------------------------------------------------------------- + +void __fastcall TfTarifas::TbPreciosBeforeOpen(TDataSet *DataSet) +{ + // Si la tabla no existe, la creamos + if ( !FileExists(TbPrecios -> TableName ) ) + { + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbPrecios -> FieldDefs -> Clear(); + + TbPrecios -> FieldDefs -> Add("Tiempo", ftInteger, 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(); + } +} +//--------------------------------------------------------------------------- + \ No newline at end of file diff --git a/cap_gestion/capg_tarifas.ddp b/cap_gestion/capg_tarifas.ddp new file mode 100644 index 0000000..cdc0ee8 Binary files /dev/null and b/cap_gestion/capg_tarifas.ddp differ diff --git a/cap_gestion/capg_tarifas.dfm b/cap_gestion/capg_tarifas.dfm new file mode 100644 index 0000000..8f92058 --- /dev/null +++ b/cap_gestion/capg_tarifas.dfm @@ -0,0 +1,109 @@ +object fTarifas: TfTarifas + Left = 195 + Top = 115 + Width = 431 + Height = 348 + Caption = 'fTarifas' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 24 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 423 + Height = 41 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + object Label1: TLabel + Left = 0 + Top = -4 + Width = 356 + Height = 33 + Caption = 'Tarificaci'#243'n no abonados' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + end + object Bevel1: TBevel + Left = 0 + Top = 24 + Width = 401 + Height = 9 + Shape = bsBottomLine + end + object CardOK: TImage + Left = 488 + Top = 0 + Width = 24 + Height = 24 + AutoSize = True + Picture.Data = { + 07544269746D617096010000424D960100000000000076000000280000001800 + 0000180000000100040000000000200100000000000000000000100000000000 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FFFFFFFFFFF991FFFFFFFFFFFFFFFFFFFFFF991FFFFFFFFFFFFFFFFFFFFF + 991100000FFFFFFF00000000099110880FFF0000888888888001108800FF8888 + 888888888880088808FF88888888888888888888080F88888888888888888888 + 080B88888888888888888888080B888888888000000000008801888800000777 + 7777777808010000FFFFF777777777788001FFFFFFF77777FFF00000000BFFFF + FF777000000BBBBBBBBBFF7700000BBBBBBBBB111111000077BBBBBB111111BB + BBBB777700BB1111BBBBBBBBBBBB0000FFBBBBBBBBBBB33BBBBBFFFFFFB33BBB + 3BBBB33BBB3BFFFFFFBB3BB33B3BBBBBBBBBFFFFFFB33BBBBBB3BBBBBBBBFFFF + FFB33BBBBBBBBBBBFFFFFFFFFFBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF} + Visible = False + end + end + object DBGrid1: TDBGrid + Left = 0 + Top = 41 + Width = 423 + Height = 276 + Align = alClient + DataSource = DsPrecios + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -19 + TitleFont.Name = 'MS Sans Serif' + TitleFont.Style = [] + Columns = < + item + Expanded = False + FieldName = 'Tiempo' + Title.Alignment = taCenter + Width = 184 + Visible = True + end + item + Expanded = False + FieldName = 'Precio' + Title.Alignment = taCenter + Width = 203 + Visible = True + end> + end + object DsPrecios: TDataSource + DataSet = TbPrecios + Left = 200 + Top = 136 + end + object TbPrecios: TTable + BeforeOpen = TbPreciosBeforeOpen + TableName = 'datos\precios.db' + Left = 200 + Top = 168 + end +end diff --git a/cap_gestion/capg_tarifas.h b/cap_gestion/capg_tarifas.h new file mode 100644 index 0000000..ad8abe7 --- /dev/null +++ b/cap_gestion/capg_tarifas.h @@ -0,0 +1,36 @@ +//--------------------------------------------------------------------------- + +#ifndef capg_tarifasH +#define capg_tarifasH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TfTarifas : public TForm +{ +__published: // IDE-managed Components + TDataSource *DsPrecios; + TTable *TbPrecios; + TPanel *Panel1; + TLabel *Label1; + TBevel *Bevel1; + TImage *CardOK; + TDBGrid *DBGrid1; + void __fastcall TbPreciosBeforeOpen(TDataSet *DataSet); +private: // User declarations +public: // User declarations + __fastcall TfTarifas(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TfTarifas *fTarifas; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_gestion/car_find.jpg b/cap_gestion/car_find.jpg new file mode 100644 index 0000000..0815569 Binary files /dev/null and b/cap_gestion/car_find.jpg differ diff --git a/cap_gestion/card.bmp b/cap_gestion/card.bmp new file mode 100644 index 0000000..c7906dd Binary files /dev/null and b/cap_gestion/card.bmp differ diff --git a/cap_gestion/card.ico b/cap_gestion/card.ico new file mode 100644 index 0000000..517fc99 Binary files /dev/null and b/cap_gestion/card.ico differ diff --git a/cap_gestion/cfg.bmp b/cap_gestion/cfg.bmp new file mode 100644 index 0000000..4a2c64c Binary files /dev/null and b/cap_gestion/cfg.bmp differ diff --git a/cap_gestion/cleanup.bat b/cap_gestion/cleanup.bat new file mode 100644 index 0000000..42ad5b0 --- /dev/null +++ b/cap_gestion/cleanup.bat @@ -0,0 +1,8 @@ +del *.~* +del *.tds +del *.obj + +del *.ilc +del *.ild +del *.ilf +del *.ils \ No newline at end of file diff --git a/cap_gestion/comparar.bmp b/cap_gestion/comparar.bmp new file mode 100644 index 0000000..bc73002 Binary files /dev/null and b/cap_gestion/comparar.bmp differ diff --git a/cap_gestion/crd_ctrl.cpp b/cap_gestion/crd_ctrl.cpp new file mode 100644 index 0000000..8a8d5c2 --- /dev/null +++ b/cap_gestion/crd_ctrl.cpp @@ -0,0 +1,463 @@ +//--------------------------------------------------------------------------- + +#include +#include +#include +#include "stdio.h" +#pragma hdrstop + +#include "crd_ctrl.h" + +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TCardCtrl *CardCtrl; +//--------------------------------------------------------------------------- +__fastcall TCardCtrl::TCardCtrl(TComponent* Owner) + : TForm(Owner) +{ + LM_opened = false; + char COMM[][10] = { "COM1", "COM2", "COM3", "COM4" }; + + IDcard = 0; + TbCards->Active = true; + Height = 270; + + // Recuperamos la configuración + TIniFile *ini; + ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\CAP.INI" ); + // General + PuertoE = ini->ReadInteger( "CAP_w", "PuertoEscritor", 1 ); + AbrePuerto( COMM[PuertoE]); + + cb_PosP = ini->ReadInteger( "CAP_w", "PosPrefijo", 0 ); + cb_LenP = ini->ReadInteger( "CAP_w", "LenPrefijo", 2 ); + cb_PosC = ini->ReadInteger( "CAP_w", "PosCodigo", 2 ); + cb_LenC = ini->ReadInteger( "CAP_w", "LenCodigo", 8 ); + cb_PosR = ini->ReadInteger( "CAP_w", "PosRevision", 10 ); + cb_LenR = ini->ReadInteger( "CAP_w", "LenRevision", 2 ); + cb_PosFd = ini->ReadInteger( "CAP_w", "PosFechaDesde", 12 ); + cb_PosFh = ini->ReadInteger( "CAP_w", "PosFechaHasta", 18 ); + + delete ini; + +} +//--------------------------------------------------------------------------- +int __fastcall TCardCtrl::LocateCard( int idc, int owner ) +{ + int dev = idc; int version = 0; + if ( !TbCards->Locate( "id", idc, TLocateOptions() << loCaseInsensitive << loPartialKey ) ) + { + Height = 270; + noCardFound->Visible = true; + TbCards->Insert(); + TbCards->FieldByName("idowner")->AsInteger = owner; + TbCards->FieldByName("idCard")->AsInteger = 0+((version&0x1F)<<1)+(owner<<6); + TbCards->FieldByName("vCard")->AsInteger = version; + TbCards->Post(); + dev = TbCards->FieldByName( "id" )->AsInteger; + } + return dev; +} +//--------------------------------------------------------------------------- + +void __fastcall TCardCtrl::BitBtn2Click(TObject *Sender) +{ + if ( TbCards->FieldByName("idCard")->AsInteger & 0x0001 ) + { + ShowMessage( "La tarjeta pertenece a un ABONADO TEMPORAL, por lo que su version no puede ser incrementada"); + } else { + int newVersion, idCard; + if ( Application->MessageBox("Reasignación código tarjeta, inutilizará la tarjeta actual. ¿Realmente desea continuar?", "CRD: cambio de tarjetra", MB_OKCANCEL) != IDOK) + return; + + newVersion = (TbCards->FieldByName("vCard")->AsInteger+1)%32; + idCard = TbCards->FieldByName("idCard")->AsInteger; + TbCards->Edit(); + TbCards->FieldByName("vCard")->AsInteger = newVersion; + TbCards->FieldByName("idCard")->AsInteger = (idCard & 0xFFC1) + ((newVersion&0x1F)<<1); + TbCards->Post(); + } +} +//--------------------------------------------------------------------------- + +//----------------------- ESCRITOR DE TARJETAS ------------------------------ +int __fastcall TCardCtrl::AbrePuerto(LPTSTR lpszPortName) +{ + DWORD dwError; + DCB PortDCB; + COMMTIMEOUTS CommTimeouts; + + if ( LM_opened ) return true; + + LM_opened = false; + + // Open the serial port. + LM_handle = CreateFile (lpszPortName, // Pointer to the name of the port + GENERIC_READ | GENERIC_WRITE, + // Access (read/write) mode + 0, // Share mode + NULL, // Pointer to the security attribute + OPEN_EXISTING,// How to open the serial port + 0, // Port attributes + NULL); // Handle to port with attribute + // to copy + + // If it fails to open the port, return FALSE. + if ( LM_handle == INVALID_HANDLE_VALUE ) + { + dwError = GetLastError (); + return false; + } else { + LM_opened = true; + } + + PortDCB.DCBlength = sizeof (DCB); + + // Get the default port setting information. + GetCommState (LM_handle, &PortDCB); + + // Change the DCB structure settings. + PortDCB.BaudRate = 9600; // Current baud + PortDCB.fBinary = TRUE; // Binary mode; no EOF check + PortDCB.fParity = TRUE; // Enable parity checking. + PortDCB.fOutxCtsFlow = FALSE; // No CTS output flow control + PortDCB.fOutxDsrFlow = FALSE; // No DSR output flow control + PortDCB.fDtrControl = DTR_CONTROL_ENABLE; + // DTR flow control type + PortDCB.fDsrSensitivity = FALSE; // DSR sensitivity + PortDCB.fTXContinueOnXoff = TRUE; // XOFF continues Tx + PortDCB.fOutX = FALSE; // No XON/XOFF out flow control + PortDCB.fInX = FALSE; // No XON/XOFF in flow control + PortDCB.fErrorChar = FALSE; // Disable error replacement. + PortDCB.fNull = FALSE; // Disable null stripping. + PortDCB.fRtsControl = RTS_CONTROL_ENABLE; + // RTS flow control + PortDCB.fAbortOnError = FALSE; // Do not abort reads/writes on + // error. + PortDCB.ByteSize = 7; // Number of bits/bytes, 4-8 + /* + PortDCB.ByteSize = 8; // Number of bits/bytes, 4-8 + */ + PortDCB.Parity = EVENPARITY; // 0-4=no,odd,even,mark,space + PortDCB.StopBits = 0; // 0,1,2 = 1, 1.5, 2 + + // Configure the port according to the specifications of the DCB + // structure. + if (!SetCommState (LM_handle, &PortDCB)) + { + // Could not configure the serial port. +///*-*/ printf( "Unable to configure the serial port\n%s\n" ); + dwError = GetLastError (); + return FALSE; + } + + + // Retrieve the time-out parameters for all read and write operations + // on the port. + GetCommTimeouts (LM_handle, &CommTimeouts); + + // Change the COMMTIMEOUTS structure settings. + CommTimeouts.ReadIntervalTimeout = MAXDWORD; + +// CommTimeouts.ReadTotalTimeoutMultiplier = 0; + CommTimeouts.ReadTotalTimeoutMultiplier = 1000; + + CommTimeouts.ReadTotalTimeoutConstant = 1000; + CommTimeouts.WriteTotalTimeoutMultiplier = 10; + CommTimeouts.WriteTotalTimeoutConstant = 1000; + + // Set the time-out parameters for all read and write operations + // on the port. + if (!SetCommTimeouts (LM_handle, &CommTimeouts)) + { + // Could not set the time-out parameters. +///*-*/ printf( "Unable to set the time-out parameters" ); + dwError = GetLastError (); + return FALSE; + } + + // Direct the port to perform extended functions SETDTR and SETRTS. + // SETDTR: Sends the DTR (data-terminal-ready) signal. + // SETRTS: Sends the RTS (request-to-send) signal. + EscapeCommFunction (LM_handle, SETDTR); + EscapeCommFunction (LM_handle, SETRTS); + + return LM_opened; +}; + +void __fastcall TCardCtrl::CierraPuerto(void) +{ + if ( LM_opened ) + { + CloseHandle( LM_handle ); + } +}; + +// ObtenerRespuesta +// Lee del puerto los datos pendientes del buffer +// (solo lee lo que expulse el LM) +// +// +char * __fastcall TCardCtrl::ObtenerRespuesta( char *rcv ) +{ + bool waitingResp = true; + DWORD CHK, chkF = 0; + int i = 0; + DWORD dwCommModemStatus; + + if ( LM_opened ) + { +/* + // Specify a set of events to be monitored for the port. + SetCommMask (LM_handle, EV_RXCHAR | EV_CTS | EV_DSR | EV_RLSD | EV_RING); + // Wait for an event to occur for the port. + WaitCommEvent (LM_handle, &dwCommModemStatus, 0); + // Re-specify the set of events to be monitored for the port. + SetCommMask (LM_handle, EV_RXCHAR | EV_CTS | EV_DSR | EV_RING); +*/ + // Recogemos la respuesta del lector + while( i < 75 ) + { + ReadFile( LM_handle, &(rcv[i]), 1, &CHK, NULL ); + if ( CHK == 1 ) + { + if ( waitingResp ) + { + if ( rcv[i] != 0x06) waitingResp = false; + // ACK + // printf( "Esperando a la tarjeta\n" ); + } + + if ( rcv[i] == 13 ) break; else { + if ( !waitingResp || i==0 ) i++; + } + } else + if ( CHK == 0 ) + { + chkF++; + if ( chkF == 20 ) + { + sprintf( rcv, "ERROR: Respuesta fuera de tiempo" ); + return rcv; + } + } + } + rcv[i+1] = '\0'; + + } else { + sprintf( rcv, "ERROR: LM no abierto" ); + } + + #ifdef _verbose +///*-*/ printf( "Recibido: %s\n", rcv ); + #endif + + return rcv; +}; + + + + +// EnviarComando +// Envia el comando CMD al lector ID, devolviendo la respuesta 'rcv' +// +// +// +char * __fastcall TCardCtrl::EnviaCMD1( char *CMD, char *rcv, char mlen ) +{ + DWORD CHK; + if ( LM_opened ) + { + + #ifdef _verbose +///*-*/ printf( "Enviado: %s\n", CMD ); + #endif + WriteFile( LM_handle, CMD, strlen(CMD)+mlen, &CHK, NULL ); + + ObtenerRespuesta( rcv ); + } else + sprintf( rcv, "ERROR: LM no abierto" ); + + return rcv; +} + +char * __fastcall TCardCtrl::EnviaCMD( char *CMD, char *rcv ) +{ + EnviaCMD1( CMD, rcv, 0 ); + return rcv; +} + +#define ZT_ClearCommand "/CL0/" +// #define ZT_ReadCommand "/RD3/" + #define ZT_ReadCommand "/RD1/" + #define ZT_WriteCommand "/WR1/" +#define ACK 0x06 +#define STX 0x02 +#define NAK 0x15 +#define ETX 0x03 +#define EOT 0x04 +#define CR 0x0D + +char __fastcall TCardCtrl::CalculaBCC( char *cadena ) +{ + int i, dev=0; + for ( i=0; cadena[i] != ETX; i++ ) + { + dev ^= cadena[i]; + } + dev ^= cadena[i]; + + return dev; +} + + +char * __fastcall TCardCtrl::LeeTarjeta( char *rcv ) +{ + // Leemos una tarjeta + char buff[3], buff2[80]; + EnviaCMD( ZT_ReadCommand, rcv ); + if ( rcv[0] == ACK && rcv[1] == 0x0D ) + { + // Ahora si se ha recibido Leemos la tarjeta que pasemos + sndPlaySound("snd\\inserta_card_leer.wav", SND_ASYNC | SND_FILENAME); + ObtenerRespuesta( rcv ); + // Vemos si es la tarjeta o un error + if ( rcv[0] == STX && rcv[1] == '/' && rcv[2] == 'E' && rcv[3] == 'R' ) + { + //es un error + #ifdef _verbose +///*-*/ printf( "Error: %d", rcv[1] ); + #endif + } else { + char len = 0; + while( rcv[len]!=CR )len++; + + char BCC = CalculaBCC( &rcv[1] ), + BCCr = rcv[ len-1 ]; + if ( BCC != BCCr ) + { + sprintf( rcv, "Error: BCC recibido es incorrecto BCC(%x) != R(%x)\n", BCC, BCCr ); + } + } + buff[0] = ACK; buff[1] = '\0'; + EnviaCMD( buff, buff2 ); + } else { + sprintf( rcv, "ERROR: Commando no aceptado\n"); + } + return rcv; +} + +char * __fastcall TCardCtrl::EscribeTarjeta( char *datos, char *rcv ) +{ + // Leemos una tarjeta + char env[140], buff[140], BCC; + EnviaCMD( ZT_WriteCommand, rcv ); + if ( rcv[0] == ACK && rcv[1] == CR ) + { + sprintf( env, "%s%c", datos, ETX ); + BCC = CalculaBCC( env ); + sprintf( buff, "%c%s%c", STX, env, BCC ); + if ( BCC ) + EnviaCMD( buff, rcv ); + else + EnviaCMD1( buff, rcv, 1 ); + + if ( rcv[0] == ACK && rcv[1] == CR ) + { + // Ahora si se ha recibido Leemos la tarjeta que pasemos + sndPlaySound("snd\\inserta_card_grabar.wav", SND_ASYNC | SND_FILENAME); + ObtenerRespuesta( rcv ); + + // Vemos si es la tarjeta o un error + if ( !(rcv[0] == EOT && rcv[1] == CR) ) + { + //es un error + sprintf( rcv, "Error: %s\n", rcv ); + #ifdef _verbose +///*-*/ printf( "Error: %s\n", rcv ); + #endif + } + buff[0] = ACK; buff[1] = CR; buff[2] = '\0'; + EnviaCMD( buff, rcv ); + } else { + sprintf( rcv, "ERROR: No se recibio respuesta despues de los datos\n" ); + } + } else { + sprintf( rcv, "ERROR: Commando no aceptado\n"); + } + return rcv; +} +void __fastcall TCardCtrl::GrabaTarjeraClick(TObject *Sender) +{ + char rcv[140]; + statusOK = false; + if ( LM_opened ) + { + // Inicializamos el ZT-2300 + EnviaCMD( ZT_ClearCommand, rcv ); + if ( rcv[0] == 'E' ) + { + ShowMessage( "Error inicializando el GRABADOR" ); + } else { + char rcv[80], card[140]; + ObtenCadenaTarjeta(card); + EscribeTarjeta( card, rcv ); + + statusOK = !( rcv[0] == 'E' && rcv[5] == ':' ); + } + } else { + ShowMessage("El Puerto no pudo ser ABIERTO" ); + } + +} +//--------------------------------------------------------------------------- +char * __fastcall TCardCtrl::ObtenCadenaTarjeta(char *dev) +{ + int Prefijo = 20, Rev = 0; + //----- + if ( IDcard != 0 ) + sprintf( dev, "%02d%08d%02d", Prefijo, IDcard, Rev ); + else + sprintf( dev, "%02d%08d%02d", Prefijo, TbCards->FieldByName("idCard")->AsInteger, Rev ); + return dev; +} + +void __fastcall TCardCtrl::VerificarTarjetaClick(TObject *Sender) +{ + char rcv[140]; + if ( LM_opened ) + { + // Inicializamos el ZT-2300 + EnviaCMD( ZT_ClearCommand, rcv ); + if ( rcv[0] == 'E' ) + { + ShowMessage( AnsiString( rcv ) + "Error inicializando el GRABADOR" ); + } else { + char rcv[80], buff[80], card[140]; + ObtenCadenaTarjeta(card); + LeeTarjeta( rcv ); int i; + for( i=1; rcv[i] != ETX; i++ ) buff[i-1]=rcv[i]; + buff[i-1]='\0'; + + if ( strcmp( buff, card ) != 0 ) + { + sndPlaySound("snd\\card_verify_error.wav", SND_ASYNC | SND_FILENAME); + ShowMessage("La tarjeta pasada, no se corresponde"); + } else { + sndPlaySound("snd\\card_verify_ok.wav", SND_ASYNC | SND_FILENAME); + ShowMessage("La tarjeta pasada, es correcta"); + } + + } + } else { + ShowMessage("El Puerto no pudo ser ABIERTO" ); + } +} +//--------------------------------------------------------------------------- +void __fastcall TCardCtrl::FormClose(TObject *Sender, TCloseAction &Action) +{ + if ( LM_opened ) CierraPuerto(); +} +//--------------------------------------------------------------------------- + diff --git a/cap_gestion/crd_ctrl.ddp b/cap_gestion/crd_ctrl.ddp new file mode 100644 index 0000000..cdc0ee8 Binary files /dev/null and b/cap_gestion/crd_ctrl.ddp differ diff --git a/cap_gestion/crd_ctrl.dfm b/cap_gestion/crd_ctrl.dfm new file mode 100644 index 0000000..15b0be1 --- /dev/null +++ b/cap_gestion/crd_ctrl.dfm @@ -0,0 +1,637 @@ +object CardCtrl: TCardCtrl + Left = -495 + Top = 112 + AutoScroll = False + Caption = 'CRD-ctrl' + ClientHeight = 243 + ClientWidth = 458 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Icon.Data = { + 0000010001001818100001000400E80100001600000028000000180000003000 + 0000010004000000000080010000000000000000000010000000000000000000 + 0000000080000080000000808000800000008000800080800000C0C0C0008080 + 80000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000 + 0000000991000000000000000000000099100000000000000000000099110000 + 0000000000000000099110880000000088888888800110880000888888888888 + 88800888080088888888888888888888080088888888888888888888080B8888 + 8888888888888888080B88888888800000000000880188880000077777777778 + 08010000FFFFF777777777788001FFFFFFF77777FFF00000000BFFFFFF777000 + 000BBBBBBBBBFF7700000BBBBBBBBB111111000077BBBBBB111111BBBBBB7777 + 00BB1111BBBBBBBBBBBB000000BBBBBBBBBBB33BBBBB000000B33BBB3BBBB33B + BB3B000000BB3BB33B3BBBBBBBBB000000B33BBBBBB3BBBBBBBB000000B33BBB + BBBBBBBB0000000000BBBBB0000000000000000000000000000000000000FFE3 + FF00FFF1FF00FFF00700F0000700000003000000030000000100000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000C000000FC000000FC000000FC000000FC000F00FC1FFF00FFFFFF00} + OldCreateOrder = False + OnClose = FormClose + PixelsPerInch = 96 + TextHeight = 20 + object Bevel2: TBevel + Left = 0 + Top = 49 + Width = 458 + Height = 175 + Align = alClient + end + object noCardFound: TLabel + Left = 16 + Top = 224 + Width = 433 + Height = 57 + Alignment = taCenter + AutoSize = False + Caption = + 'Este usuario no tenia su tarjeta activa, asi que acabo de genera' + + 'r una nueva, lo '#250'nico que debe hacer es pulsar en el icono para ' + + 'VOLVER-A-GRABAR la tarjeta actual.' + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + Visible = False + WordWrap = True + end + object Label2: TLabel + Left = 16 + Top = 64 + Width = 74 + Height = 20 + Caption = 'ID Tarjeta:' + end + object DBText1: TDBText + Left = 104 + Top = 64 + Width = 65 + Height = 17 + DataField = 'idCard' + DataSource = DsCards + end + object Label3: TLabel + Left = 16 + Top = 88 + Width = 58 + Height = 20 + Caption = 'Versi'#243'n:' + end + object DBText2: TDBText + Left = 104 + Top = 88 + Width = 65 + Height = 17 + DataField = 'vCard' + DataSource = DsCards + end + object Label4: TLabel + Left = 312 + Top = 56 + Width = 102 + Height = 20 + Caption = 'Franja horaria:' + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 458 + Height = 49 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + object Label1: TLabel + Left = 0 + Top = -4 + Width = 389 + Height = 45 + Caption = 'Grabador de Tarjetas' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -32 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + end + object Bevel1: TBevel + Left = 0 + Top = 32 + Width = 441 + Height = 9 + Shape = bsBottomLine + end + object CardOK: TImage + Left = 408 + Top = 0 + Width = 24 + Height = 24 + AutoSize = True + Picture.Data = { + 07544269746D617096010000424D960100000000000076000000280000001800 + 0000180000000100040000000000200100000000000000000000100000000000 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FFFFFFFFFFF991FFFFFFFFFFFFFFFFFFFFFF991FFFFFFFFFFFFFFFFFFFFF + 991100000FFFFFFF00000000099110880FFF0000888888888001108800FF8888 + 888888888880088808FF88888888888888888888080F88888888888888888888 + 080B88888888888888888888080B888888888000000000008801888800000777 + 7777777808010000FFFFF777777777788001FFFFFFF77777FFF00000000BFFFF + FF777000000BBBBBBBBBFF7700000BBBBBBBBB111111000077BBBBBB111111BB + BBBB777700BB1111BBBBBBBBBBBB0000FFBBBBBBBBBBB33BBBBBFFFFFFB33BBB + 3BBBB33BBB3BFFFFFFBB3BB33B3BBBBBBBBBFFFFFFB33BBBBBB3BBBBBBBBFFFF + FFB33BBBBBBBBBBBFFFFFFFFFFBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF} + Visible = False + end + end + object StatusBar1: TStatusBar + Left = 0 + Top = 224 + Width = 458 + Height = 19 + Panels = <> + SimplePanel = False + end + object DBCheckBox1: TDBCheckBox + Left = 312 + Top = 112 + Width = 105 + Height = 17 + Caption = 'Tarjeta VIP' + DataField = 'vip' + DataSource = DsCards + ReadOnly = True + TabOrder = 2 + ValueChecked = 'True' + ValueUnchecked = 'False' + end + object DBLookupComboBox1: TDBLookupComboBox + Left = 312 + Top = 80 + Width = 145 + Height = 28 + TabOrder = 3 + end + object GroupBox1: TGroupBox + Left = 16 + Top = 112 + Width = 241 + Height = 105 + Caption = 'Estado actual' + TabOrder = 4 + object DBText3: TDBText + Left = 8 + Top = 80 + Width = 65 + Height = 17 + DataField = 'msg' + DataSource = DsCards + end + object DBText4: TDBText + Left = 144 + Top = 16 + Width = 89 + Height = 17 + Alignment = taRightJustify + DataField = 'idowner' + DataSource = DsCards + Font.Charset = DEFAULT_CHARSET + Font.Color = clMaroon + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object DBCheckBox2: TDBCheckBox + Left = 8 + Top = 24 + Width = 97 + Height = 17 + Caption = 'acceso' + DataField = 'acceso' + DataSource = DsCards + TabOrder = 0 + ValueChecked = 'True' + ValueUnchecked = 'False' + end + end + object GrabaTarjera: TBitBtn + Left = 264 + Top = 136 + Width = 49 + Height = 41 + Hint = 'Escribir tarjeta' + ParentShowHint = False + ShowHint = True + TabOrder = 5 + OnClick = GrabaTarjeraClick + Glyph.Data = { + 46090000424D4609000000000000360400002800000024000000240000000100 + 0800000000001005000000000000000000000001000000000000FFFFFF00FFFF + FF0000000000666633007070700033980000CBCB9800FFFFCB00333300000066 + CB00003366003366660066CBFF00FFFF6600006698008080800098CBCB000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000090909090909 + 0909090909090909090909090909090909090909090909090909090909090909 + 0909090909090909090909090909090909090909090909090909090909090909 + 0909090909090909090909090909090904090909090909090909090909090909 + 0909090909090909090909090909090909090904020404090909040909090909 + 0909090909090909090909090909090909090909090904020002020404040404 + 0909090909090909090909090909090909090909090909090904020000070702 + 0204020404090909090909090909090909090909090909090909090904020007 + 0706050302020002040409090909090909090909090909090909090909090904 + 0207070605030202000000000204040909090909090909090909090909090909 + 0909040207060503020200000000000000020204040909090909090909090909 + 0909090909040206050302020000000000000000000002020204040909090909 + 0909090909090909040205030202000000000000000000000000000203020204 + 0409090909090909090909040203020200000000000000000000000000000707 + 0203060202040409090909090909040202020000000000000000000000000007 + 0707070707020306070204090909090909040202000000000000000000000000 + 0707070D06060607000002030204040909090909020200000000000000000000 + 0000000606050505060607000000000204040404090909090902000000000000 + 0000000000000303030305060D00000000000000020404090909090909090200 + 00000000000000000002020805060D0000000000000000000002090909090909 + 09090902000000000000000000020209090B0F00000000000000000000000209 + 09090909090909090200000000000000000B0C0909090E020200000000000000 + 02020909090909090909090909020000000000000010090C090A0A0308020000 + 00000202090909090909090909090909090902000000000000000B0C0A050503 + 030802000202090909090909090909090909090909090902000000000000040E + 0A05050503030802090909090909090909090909090909090909090902000000 + 0000000200060505050303080209090909090909090909090909090909090909 + 0902000000000002050006050505030308020909090909090909090909090909 + 0909090909090200000000000205000605050503030802090909090909090909 + 0909090909090909090909020000020209020500060505050303080209090909 + 0909090909090909090909090909090902020909090902050006050505030308 + 0209090909090909090909090909090909090909090909090909090205000605 + 0503030808020909090909090909090909090909090909090909090909090909 + 0205000603030808080802090909090909090909090909090909090909090909 + 0909090909020507030308080803020909090909090909090909090909090909 + 0909090909090909090902030503030803030209090909090909090909090909 + 0909090909090909090909090909090205050503030209090909090909090909 + 0909090909090909090909090909090909090909020503030209090909090909 + 0909090909090909090909090909090909090909090909090902020209090909 + 0909090909090909090909090909090909090909090909090909090909090909 + 0909090909090909090909090909090909090909090909090909090909090909 + 09090909090909090909} + end + object BitBtn2: TBitBtn + Left = 400 + Top = 136 + Width = 49 + Height = 41 + Hint = 'Incrementar la version' + ParentShowHint = False + ShowHint = True + TabOrder = 6 + OnClick = BitBtn2Click + Glyph.Data = { + 660F0000424D660F000000000000360000002800000024000000240000000100 + 180000000000300F0000C40E0000C40E00000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFF0099CC0099990066 + 6600336600336600336600336600336600336600336600336600336600336600 + 3366003366003366003366003366006666FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFF33CCFF00CCFF0099CC00999900666600336600336600336600336600 + 6666006666006666006699006699006699006699006666006666009999FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99FFFF33CCFF33CCFF00CCFF0099CC00 + 99990066990066990066990066990099990099CC0099CC00CCFF00CCFF00CCCC + 0099CC009999009999FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFF66 + CCFF66CCFF66CCFF33CCFF00CCFF00CCCC0099CC0099CC0099CC0099CC00CCFF + 00CCFF33CCFF33CCFF33CCFF00CCFF00CCFF33CCFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFCCFFFF99FFFF99FFFF66CCFF66CCFF33CCFF00CCFF + 00CCFF00CCCC33CCFF33CCFF66CCFF66CCFF66CCFF66CCFF66CCFF33CCFF0099 + 99330033330033330033330033330033330033993366FFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99FFFF99FFFF + 99FFFF99FFFF66CCFF33CCFF00CCFF00CCCC66CCFFFFFFFFFFFFFFFFFFFF9966 + 9933003333003333003333003333003333003366006633003333003333003333 + 0033FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFF99FFFF99FFFF99FFFF99FFFF66CCFF33CCFF00CCCC0099 + 99009999CCCCCC99336666006666006666006666006666006666009966009966 + 0099660099660099660099660066FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99FFFF99FFFF99FF + FF99FFFF66CCFF00CCFF0099CC00669900666600336666009966009966009966 + 00999900CC9900CC9900CCCC33FFCC33FFCC33FF9900CC9900CCFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFCCFFFF99FFFF99FFFF66CCFF33CCFF00CCFF00999900666600 + 33660033669900CC9900CC9900CC9900CCCC33FFCC66FFCC66FFCC66FFCC99FF + CC66FFCC66FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFF99FFFF99FFFF66 + CCFF33CCFF0099CC006666003366003366003366CC33FFCC33FFCC33FFCC33FF + CC66FFFFCCFFFFCCFFFFCCFFCC99FFCC99FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFCCFFFF99FFFF99FFFF66CCFF33CCFF0099CC006666003366003366 + 003366CC33FFCC33FFCC66FFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFCC99FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFF99FFFF99FFFF66CCFF + 33CCFF0099CC006666003366003366996699CC33FFCC99FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFCC99FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCC99 + 9999999999999999999999999999999999999999FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFCCFF99FFFF66CCFF33CCFF00CCFF009999003366003366003366CC33 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC99FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFCCCC990033660000660000660000660000660000993366 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFF66CCFF66CCFF33CCFF0099 + CC006699003366003366999999FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC + 66FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC0033990033660000 + 003366003366003366003366006666003366003366CCCCCCFFFFFFFFFFFFFFFF + FF99FFFF33CCFF33CCFF00CCFF009999006666003366999999FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFCC33FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFCCCCCC0033CC00339900330099990099CC0099990066660033660033660033 + 66999999FFFFFFFFFFFFFFFFFF66CCFF33CCFF33CCFF00CCFF0099CC00669900 + 6666999999FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC99FF9900CCFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC3366CC3366CC003399669933CCFF00CC + FF0099CC009999006666003366003366CCCCCCFFFFFFCCFFFF00CCCC00CCFF33 + CCFF00CCFF0099CC009999006699CCCCCCFFCCFFFFFFFFFFFFFFFFFFFFCCCCCC + 6600999900CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC3366CC33 + 66CC3366CC336666CCFF66CCFF33CCFF33CCFF0099CC00669900666600666600 + 99990099CC00CCFF33CCFF33CCFF33CCFF00CCFF0099CC0099CCFFCCFF660099 + 6600999933669933666600666600999900CCFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFCCCCCC3366CC3366CC3366CC003399999999FFFF99FFFF66CCFF66 + CCFF33CCFF00CCFF00CCFF00CCFF00CCFF33CCFF33CCFF33CCFF33CCFF00CCFF + 00CCFF33CCFFFFCCFF9900CC9900CC6600996600996600996600999900CCFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC3366CC3366CC3366CC003399 + 0033CCCCCC99FFFF99FFFF99FFFF66CCFF66CCFF66CCFF66CCFF66CCFF66CCFF + 66CCFF66CCFF33CCFF33CCFF33CCFFFFFFFFFFFFFFCC33FFCC33FF9900CC9900 + CC9900CC9900CC9900CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC + 3366CC3366CC3366CC003366000066000099999999FFFF99FFFF99FFFF99FFFF + 99FFFF99FFFF66CCFF66CCFF66CCFF66CCFF66CCFF99FFFFFFFFFFFFFFFFFFFF + FFCC66FFCC66FFCC66FFCC33FFCC33FFCC33FFCC33FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFCCCCCC3366CC3366CC3366CC0033660000660000993366 + FFFFFFCCFFFFCCFFFFCCFFFF99FFFF99FFFF99FFFF99FFFFCCFFFFCCFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFCC66FFCC99FFCC99FFCC66FFCC66FFCC66FFCC + 33FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC3366CC3366CC3366 + CC0033660000660000993366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC99FFCC99FFCC + 99FFCC99FFCC99FFCC66FFCC66FFFFCCCCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFF + FFCCCCCC0033CC3366CC0033CC0033660000660000993366FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFCCFFCC99FFCC99FFCC66FFCC66FFFF9999660000 + 660000996699FFCCCCFFFFFFCCCCCCCC0033CC0033CC0033CC00336600006600 + 00993366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC99FF + CC66FFCC66FFFF9999990033660000660000660000996699FF9999CC0033CC00 + 33CC0033990033660000660000993366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFCCFFCCCCCC999999996699993366330033993366FFFFFF + FFFFFFFFFFFFFFFFFFFFCCFFCC66FFCC33FFFF9999CC3366CC0033CC00339900 + 33660000990033CC0033CC0033CC0033990033660000660000993366FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFCC66FF660099660099660066330033330033 + 330033330033330033FFCCFFFFFFFFFFFFFFFFFFFFFFCCFFCC33FFCC33FFFFCC + CCFF6666FF6666CC3366CC3366CC0033CC0033CC0033CC0033CC003399003366 + 0000660000993366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC66FF9900CC + 9900CC660099660099660066330033330033330033996699FFFFFFFFFFFFFFFF + FFCC66FF9900CCCC33FFFFCCCCFF9999FF9999FF9999FF6666FF6666CC3366CC + 3366CC3366CC0033990033660000660000993366FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFCCFFCC66FFCC33FFCC33FF9900CC6600996600996600663300 + 33330033996699CC99FF9966996600999900CC9900CCFFFFFFFFCCCCFFCCCCFF + 9999FF9999FF9999FF6666FF6666CC3366CC0033CC0033660000660000993366 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC99FFCC66FFCC66FFCC66 + FFCC33FF9900CC9900CC6600996600666600666600666600999900CC9900CCCC + 33FFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCFF9999FF9999FF9999FF6666CC3366 + CC0033990033660000993366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFCCFFCC99FFCC99FFCC99FFCC99FFCC66FFCC33FFCC33FF9900CC9900CC99 + 00CC9900CCCC33FFCC33FFCC66FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCC + FF9999FF9999FF9999FF6666CC3366CC0033990033993366FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFCC99FFCC99FFCC99FFCC99FFCC + 99FFCC66FFCC66FFCC66FFCC66FFCC66FFCC66FFCC66FFCC66FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFCCCCFF9999FF9999FF9999FF6666CC3366CC00 + 33CC3366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFCCFFCC99FFCC99FFCC99FFCC99FFCC99FFCC99FFCC99FFCC66FFCC66FF + CC66FFCC66FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCFF99 + 99FF9999FF6666FF6666CC3366CC3366FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFFCCFFCC99FFCC99FFCC99FF + CC99FFCC99FFCC99FFCC99FFCC99FFCC99FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFCCCCFFCCCCFF9999FF9999FF6666FF9999FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFCCFFFFCCFFFFCCFFFFCCFFFFCCFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF} + end + object VerificarTarjeta: TBitBtn + Left = 320 + Top = 160 + Width = 49 + Height = 49 + Hint = 'Verificar Tarjeta' + ParentShowHint = False + ShowHint = True + TabOrder = 7 + OnClick = VerificarTarjetaClick + Glyph.Data = { + 36150000424D361500000000000036000000280000002A0000002A0000000100 + 1800000000000015000000000000000000000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F8FFF0F8FFFFFFFFFFFF + FFF0F7F0F0F0F0F0F8FFDFFFF0FFF8FFF0FFFFEFF0F0AFD7CFFFF8FFF0F7F0FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6001FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F8FFF0F8FFFFFFFFF0FF + FFEFEFEFE0E8E0E0E8EFAFCFCFFFF0F0F0FFFFFFFFFFCFF7EFFFF8FFFFF0F0FF + F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFF7F0FFFFFF + FFFFFFFFF8FFFFFFFFEFEFEFFFFFFFF0F7F0FFF7FFFFEFF0FFF7F0FFFFFFFFF7 + F0FFFFFFF0F8F0FFFFFFF0F7FFCFCFD090C7CFC0C0D090C8CF9FC7C07FC8C090 + C7BFA0D0D0A0C7C0DFFFFFDFF7F0EFFFFFEFF7F0FFF8FFFFFFFFFFF0FFEFE7DF + FFFFFFFFF0FFC0C0D0C0D0CF3F104F80507FFFF7FFFFF7FF0000FFF8FFFFFFFF + F0F7F0FFF8FFFFFFFFFFFFFFF0F0F0F0F7F0F0FFFFEFF8F0EFFFFFE0FFFFD0F7 + EFAFD0CF9FC0C0AFCFD060C7C090BFC07FC7CF80BFC060C7C0B0C8D0AFD7D090 + C8C080B0B0A0D0D0AFD0D0A0C0C0B0C8CFAFB8C0EFF8FFEFF0FFFFFFE0E0F7FF + BFB7D0BFBFAF9F979F3F0060305F5F2018506F586FFFEFFF0000FFFFFFFFFFFF + FFF8FFFFF8FFF0F7F0FFFFFFE0E8EFFFFFFFE0F8F0D0F7EFD0F8F090C7BF90C7 + C0A0D7DFA0D7E08FB7C0B0C7DFAFC0D09FCFDFBFCFE090C7D090B8CF8FC7CFA0 + C8CFAFE7E08FBFBF9FC8CF90BFC0AFD0DFAFC8D080A0AF90A8BFD0CFC0CFC8C0 + C0CFCF9F98AF400F5F00504F807FCF8FBFD03F3040FFF7FF0000FFF8FFFFF8FF + FFFFFFFFFFFFF0F0F0FFFFFFEFF7F0F0FFFFF0FFFFC0D7D0B0D0D0A0C7C09FC7 + CF90B7C08FA8BF809FB0AF98B08090AF809FB0AFA8C090A7BF7FA7BF80B8C0B0 + C7DF70B0AF9FD7D090C7CF90C0CF80AFBF608F9F6F90A06F90A0A0C8DFFFF7DF + A0A0A030005F00675F8FA7CF7FC8CF1F0830BFB0BFFFF8FF0000FFFFFFFFF7F0 + FFF8FFFFF8FFFFFFFFFFFFFFF0FFFFAFBFBFE0F7F0B0CFD09FC0C09FC0C070A0 + AF6F90A060809F7F97B04F97A06F97AF7098AF4F97A05F8FA08F9FB0A0A7C07F + 9FB0A0D8DF90C8CF60979F709FAF6F97A0507F9080A7BF9FC0D0DFFFFF8090BF + 60005F00774F6F97C07FD8E08F6F7FDFD8D0FFF8FFF0EFF00000FFFFFFFFF8FF + FFF8FFFFF8FFFFF8FFEFF0F0F0FFFFAFC0BFA0D7DF80B8BF60A0A05F989F4080 + 80609FA06F97A07FA0B08098A07F98A08F98A06F98A07F8FA07097AF9097B070 + 88B07FA7B05F87906F90A06F909F7097A08FA8B0AFCFDFD0F0FF7F90AF60086F + 00604F7F8FBF80FFFF9F6870DFC0C0FFFFEFFFF8FFF0F0F00000F0F8FFFFFFFF + FFF8FFFFF7F0F0F0F0DFE0E0D0E0E0C0DFDF9FC0D05F8F9F508F906FA8AF70A8 + AF6F989F6F878F80979FCF979F909090A0979F9F9FAFAF88A05F8FA07F97B09F + 9FCF6F88A090AFCF809FB08FA7B0AFC7D0BFD0D0E0F7F05067604000600F7040 + 7F77A08FF7FF90676FCFC8B0FFFFF0F0F8FFEFE8EFFFFFFF0000F0F8F0FFFFFF + FFF8FFFFF8FFFFFFFFEFF0EF90A7A0AFC0C09FA0BF8097AF8FA7B06F8F907F90 + 908F9090A09FA0AF9FA07F988F7F9F908F88801F58500F172000072010002F00 + 002F00083000002F40506F808FA09FA7AF7F878090A09F606F600F0010001750 + B0FFFF906860BF9090FFF8FFE0FFFFFFF7FFFFF8FFFFFFFF0000FFF0EFF0FFFF + EFF8FFFFF8FF8FC8BFAFD7D0E087A0CFD0EFFFF0EF9F9F9FFFFFEFC0C7FFA0A0 + 708F98AFA09F908F97908FA06F0F00100F084000004F80703FB06F60905060AF + 774FA0687080674F2008200F003F0000207068904F604000000F20508F000000 + 2F1750908F9FA0C0CF90D8BFF0E8FFFFFFF0FFF8FFFFF8FF0000FFF8FFEFFFFF + F0F7FFDFFFFFE0FFFFAFBFBFC0577080A7B0AF98BFFFFFBFB0B8E0FFFFEFB0CF + D0F0E8B0D0D0FF8F976F10002FA0478F8F5F60B0AF8FB097509F8F7F7F98709F + 9060909050B0A08080676F80685F8F607040283F00001F3F685F1F174FCFFFF0 + 7F7FA0AFD7DF9FC0C0E0F7DF9FC0DFE0FFEFFFF8FFFFF8FF0000EFFFF0E0E8EF + FFF0FF90CFC0DFFFF0A0C7B0A02F40EFFFFFEFFFC0FFF7FFFFEFFFDFD7E0FFFF + D0DFEFB09F987F0F00209F704F8FA86F9F9F4FC0AF40BFC87FC0BF70EFC790AF + D060CFD770B0A770BFB770BFAF60AF8F7F80775F4F3770000000A0E7FFCFE0D0 + 9FC7DF90B0B09FCFCF8FE7CFF0F7FFEFF8EFFFF8FFFFFFFF0000FFFFFFFFF8FF + FFF7FFAFFFF0A0C7BFD09F9F902730C0FFFFF0F7EFFFFFEFFFFFEFEFDFE0F0FF + CFAF988F1007008F70708F906FBFB7B0FFD8A0FFD0D0D0DFAFB0FF3FDFA8AFFF + F740FFC8AFEFCFA0E0FF50B0BF7FB0D04F90886F80686F50207F106870B0FFF0 + AFC8D09FD7D07FC8C080C0B0A0C0CFFFF7FFF0F8FFFFF8FF0000D0FFFFFFE7EF + FFE8FFB0D7D0A0FFEF905F5FFFF7F0F0FFFFFFF7FFE0FFF0FFF0B0E0FFF0B088 + 6F202F408F605FA0A07FDFC07FAFF740C0C8AFFFFFAFFFFF90EFFF80EFFF90F0 + FF8FFFFFA0FFFF80D0C7B0C0C78FFFD7FFDFD09F9F88609080502F384F6F9FAF + B0F0EF8FD0D09FCFCFB0C7D09FC7C0AFCFDFFFFFFFFFFFFF0000FFFFFFFFF7FF + A0D0DF80AFB09FE7D0A02830FFFFF0C0F7EFE0F8E0FFE7EFE0FFFFFFF7A03030 + 70AF8760808F6FCFB79F9FFF5030C82090C85F90503F6F586FDFF8D0FFF8EFE0 + E8CFFFFFC0FFFFCFFFFFDFFFF7B0FFE890FFCFD0CFC88F7F87608F687F603760 + DFFFFFA0C0CF8FB8B08FD0DF90C0AFB0F8FFF0FFFFF0FFFF0000EFFFF0FFF8FF + E0F7FF9FBFC0C0FFFF7F3F40DFF0EFF0FFFFF0F8FFFFFFF0E0FFBFFFF8FF3F30 + 307F58809F9770D0D880AFFF7F0090004FFFBF7FE8D06F60309FBF704FBF1FFF + FFBFDFF0B0F0F8D0FFFFCFFFF8B0FFFFA0F0D0BFD0CFA0C0CFA080585F402750 + FFD7CFB0C8CF90D0BF9FC0CF90E7B0B0C0CFE0EFEFF0F8FF0000FFFFF0AFC7C0 + A0C0CF90D7DFAFBFC0501820E0FFFFDFF7FFFFFFDFF0F7FFFFF7FF7F807F5F3F + 60909F808F9040D0CFAFFFCFBF1F8F1040FFFF10C7C000A80000981010A8004F + 504070673FB0B77FEFFFAFEFFFC0FFFFDFF0F790EFD0B0DFC0AFAF90804F305F + AFDFB0AFC8BFAFB79FD0CFD0BFBF80FFFFFFCFD7D0E0EFEF0000E0FFFFFFF0EF + CFD0C0B0C0AF9F7060E0C8C0EFFFFFA09FA0C0DF90C0AFCFAF90DF5F376F6F57 + 6FB09770CFCF6FCFCF700088007FD0C070EFFF1FEF403F8F0F5F601FA0FFD040 + FFFF50FFF0009F0F70B77F8F6F0F6F7840BFB7BFBFD790FFC0CFBFC8A0A06860 + 40405FC0C0A0AFD8A0B0B7B0BFD7C080CFCFDFF7F0EFFFFF0000F0FFFFFFEFEF + C0C0B0C0C0AF60372FCFB7AFE0F8F0C0C0C08F90CF8F9FC0A0989060404F906F + 6FAFDF40EFFF5FF0B7BF3FDF6040F7FF7FFFFF00900000B7706FFFFF7FF0DF6F + F7FF009F0070EFFF50FFFF5FFFFF20C06FA0704FFFD7A0F0D0C0CFBF9F9F6060 + 302F5FD0C7B0B0D090C0C7B0BFC7AF9FBFBFC0D7D0E0EFEF0000FFF7FFE0C7CF + EFD8D0D0C7B05F3720CFB7AFF0FFF0BFBFBFDFCF8FEFD790C088AF1F307F8F60 + 5FBF9F5FBFB86F00A00F1FC76F7FFFFF6FEFDF6FFFEF5FFFFF70FFFF00970000 + A0401FBF502FCF3F4FC75060FF9F3FD7FF40C0A000981FBFBFA0FFDFBF905060 + 302F6FC09F9F909850CFCFA0A0A070DFCFD0F0F8FFFFFFFF0000FFF8FFFFF7FF + F0CFCFEFC7BF604030FFFFEFFFFFEFF0F7EFB0C07FBFC88FC087802F4850B077 + 60BFB87FDFD7A01090407FF7FF60F7EF10D05F20B86F7FFFC04FF0F000C04F0F + 970010A000606040905F2F2F701060D09FA0FFFF2FC78FC0BFA0FFD7BF905F70 + 303880CF9790C0C070909860CFC790F0BFC0D0C7CFEFE7EF0000FFF8FFE0C8CF + FFD7D0E0AFA040281FBFB7A0E0E0D0C0C0B0DFE0AFD0D8AFCF80AF2F3070A04F + 6FAF986FCFCF700097006FFFE08FE7CF707730705F4F50D87F4FFFDF7FFFB07F + 60307FE0EF50FFD060FFE060FFFF60FFFF30DFF02FCF5FDFC78FFFC8B0905F70 + 1F1F60DFAFAF908F4FCFC89FAF9F6FFFCFCFFFF8FFFFF8FF0000FFF8FFF0E8EF + FFC0C0804740FFFFF0FFFFF0FFF0E0FFFFF0DFAFC0DFBF90CF8F9F2F47609067 + 4FD0A070F0DFCF30D07F50F8FF6FFFEF0098100FB77020B8B07FFFE050F8A000 + 985F40FFFF4FF0F060C0704FC0902FB0BFB0FFB0FF9FD0C0DF80FFD7CFAF6F7F + 303060C0978FC0B880B09880EFCFB0E0C0BFDFCFD0F0E7EF0000F0F8F0FFFFFF + FFC7CF6F282FEFEFE0C0CFC0CFBFBFFFFFFFE0FFFFE0FFEFFFFFCFC0978FAF5F + 8F9F9F60DFD880E090D00FA01F10AF907FFFF07FFFEF60FFFF50FFE03FC0800F + 9F007FFFCF90F0FF2F871F5F6F306F672F709770FFB0AFAFC0A0F0C8C0BF676F + A088A0FFCFB0F0DFBFFFC0DFF0C0BFEFD8D0FFF8FFFFF8FF0000F0FFFFEFF8F0 + FFC7CF6F2830F0FFFFEFFFFFFFF0FFC0C7CFCFD0BFDFC7DFFFEFFFBF98908F67 + 6FA0775FCFB870C0C86FD0BF7F00A0101F8F0050C06010F7CF7FBF9FFFA8DF0F + 8F0000982FAFD7F050F0FF5FFFFF9FCFDF00B84FBFD880FFCFD0CFA0A0C0585F + CF98A0FFD8BFEFC8BFFFB0E0FFC7D0FFFFF0FFF0F0FFFFFF0000FFFFFFFFF8FF + B04F60FFFFFFDFC8CFE0C8CFCFC7C0FFFFFFFFF8F0FFF8FFFFF0F0C09F9F8F60 + 5F90705FD0B790EFD8AFFFE8FFCFC7B0DFBFC0DFC89FEFD79FCFAF90E0D790D0 + B89F00880F2F9820A0CFEF5FB07F1F9F2F109700B0DF9FEFC7C0D09790AF6F6F + F0C7C0E0B8BFFFD8D0F0C8CFFFC8CFFFC8CFFFFFFFFFFFFF0000F0F7F0F0F0F0 + A0475FF0EFEFEFD7D0BFA0A0DFCFCFC0B8BFD0D0CFDFD7D0D0BFC0EFCFD0C0A0 + 9F8F584F9F6850DFA88FFFFFCFC0C880DFD0B0EFD8C0D0B8AFE0CFC0D0C7A0E0 + D8BFDFDF90C0B770FFDFD0DFD88FD0C090F0D09FFFE890FF9F8FA0676FD09890 + FFD7D0FFE0DFE0B8BFF0C7C0EFC7C0FFF7FFFFFFFFFFFFFF0000F0FFFFFFF0F0 + 6F182FFFFFFFFFF8FFFFEFF0FFF8FFDFD0D0D0989FE0B7B0BF909FF0D7DFFFE7 + E0BFA09F90776F907760C0CF70EFE8A0DFD79FE0D7B0CFBFAFDFD0AFD0C8B0BF + C090CFE84FCFD0AFEFFFBFDFD7BFDFBF90FFEF9FE0A89F9F6080CF9F9FE0AFAF + FFDFDFF0BFBFEFB8BFFFD8DFFFF8FFE0C8CFFFFFFFFFFFFF0000EFF0EFFFF8FF + 7F3F4F6060609068707F585FCF989FFFF8FFFFF8F0FFF8FFFFF8FFFFEFF0FFF8 + FFF0C7CFD09790A05750806750FFD7D0F0E8A0DFD09FEFE7A0C0CF6FD0D0A0CF + D790CFC09FDFDFA0BFC87FD0BFB0FFE8A0D09F9F805F40C0AF7FFFCFCFFFD0D0 + EFB0B0FFCFD0FFD8DFEFC7C0E0CFCFFFF8F0FFFFFFFFFFFF0000F0FFFFFFF7F0 + FFE8F0F0F8F0EFC0C0EFCFCFB0707F60585FD090908F575FB0909F7F686FFFF8 + FFF0E7EFFFF7F0BFA0A09F676F905770B0986FBFA070F0E7AFFFFF9FEFE0AFFF + FFAFF0F79FFFE7BFFFFF80FFC0D09F6F5FA06F6FE08FDFFFB8B0EFC8C0FFC8CF + FFD0D0FFCFD0F0C0C0E0C0C0FFF8FFF0F7F0FFFFFFFFFFFF0000F0FFFFFFF8FF + FFF8FFF0FFFFFFD8DFFFF7F0702F30C0C7C0D0CFCFCFCFCFD0CFD0CFC0C07F6F + 70BF9FA0A0707FC08F90D0AF8F80574F8F675090706F8F6860AF9770B098709F + 874F8F8F60906F70804F5F906860806F5FB09F90DFC890FFD7EFF0C8CFF0C0C0 + F0C7CFE0B0B0FFF7FFDFC8CFFFF7F0FFFFFFFFFFFFFFFFFF0000F0FFFFFFE8EF + FFFFFFDFF0EFFFF7FFDFCFCF6F272FF0FFFFFFF8FFFFF7FFFFF8FFDFD0D0C0BF + BFC0C0C0BFBFBFCFD0D0AF977F9F806FBF9FA0A0889080606F7F5760A080708F + 675F90604FA07770C0A890B09F7F6F2F5FFFC0D0FFC8D0FFBFCFF0B8BFFFD7DF + FFD0D0F0D7D0EFD7D0FFF7F0FFFFFFF0F7F0FFFFFFFFFFFF0000EFF8FFFFF8FF + EFF7F0EFFFFFFFF0F0FFF8F07F3740E0F7EFE0FFFFEFFFFFB0BFBFFFF7F0EFDF + DFFFF8F0CFC7C0FFF8FFFFE8FFCFB8BFFFF0FFCFC7B0FFFFEFDFBFCF8F6F5F8F + 5870B05F7080704FCFB0FFDFD0DF5F2F20FFD7BFFFC8C0EFC8DFFFD0D0FFC8CF + EFC0C0DFC7CFFFF8FFFFFFFFFFF7F0FFF8FFFFFFFFFFFFFF0000FFFFFFFFF8FF + FFFFFFFFFFFFFFF8FFEFE7EF50474FFFEFF0FFF8FFC0C7C0FFF7F0C0C8CFF0F0 + F0EFD7DFEFF0F0C0C7C0CFCFD0CFC8D0B0B7BFDFDFEFD0CFE0C0C0DFCFC7E0D0 + D0F0D0C0E0CFC8DFB0BFC0DFD8D0402F2FEFC8C0FFCFCFFFC8CFFFC7D0F0C0CF + F0D0DFFFF0F0FFFFFFFFFFFFF0F8FFF0F8FFFFFFFFFFFFFFFFFFFFF7F0FFFFFF + FFFFFFFFF8FFFFF8FFFFF8FF403030EFD8DFEFCFD0C08F90DFD8DFBF989FF0CF + D0A0989FFFCFDFFFF8FFFFF7FFF0F7F0DFDFE0FFF8FFEFE8FFD0D7E0C0C7DFC0 + BFD0DFD7EFCFCFDFC0C7CFD0C8C05F3F3FFFC8CFFFD0D0FFC7CFF0C0CFEFC7CF + F0D8DFFFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFFF8FF + FFF8FFFFF8FFFFF8FFFFF8FF3F202FFFF8FFFFC0CFDFC7C0C08890EFD0D0AF88 + 8FFFC0CFA09090FFF7FFD0CFCFCFC0C0C0B8BFC0C0C0DFD7DFCFC8CFCFCFD0C0 + C0CFB0BFC0BFC7CFCFCFCFD0BFBF603730FFBFC0FFC0C0FFD0D0FFD8DFFFE7EF + FFF0F0FFF8FFFFF8FFF0F8FFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F7F0 + FFF8FFFFF7F0FFF8FFFFF7FF5F404FFFF0F0FFFFFFFFFFFFEFFFF0F0F7EFFFFF + FFFFFFF0FFFFFFF0FFFFF0FFFFF0FFFFCFD8D0E0F8EFC0D0CFDFF0E0BFCFC0BF + D0CFCFC8CFD0D0CFDFCFCFDFB8B0704040FFD0D0F0CFD0FFF0F0FFF7F0FFF8FF + FFF8FFFFFFFFF0F8FFF0FFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFF0F0F0FFFFFF + FFFFFFFFF8FFFFF8FFFFEFEF706060806F709F575FA05F609F6F70A05F60AF5F + 6F7F373FB0676F6F2F30802830802830802F308F303F8F373F903F4080303F80 + 3030503830402F2F50383F5F383060383FE0C7CFEFE7E0F0FFFFF0F7F0FFFFFF + FFFFFFF0F8FFF0F8FFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + F0F0F0F0F0F0FFFFFFFFF8FFFFF8FFFFF8FFFFF8FFEFFFFFFFF8FFFFFFFFF0F0 + EFEFC0C0F0FFFFDFCFCFFFD0D0FFC7CFFFD8DFF0C0C0FFD0CFF0C7C0F0C8C0F0 + C8C0FFEFEFFFDFDFFFF8F0DFC7C0FFE8EFFFF8FFF0FFFFE0FFFFF0F8FFF0FFFF + F0F8FFF0F7F0F0F8FFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFF0F0F0FFF7F0 + F0F7F0FFFFFFFFFFFFEFEFEFFFF8FFFFF8FFF0FFFFFFF7FFCFEFEFFFFFFFFFF0 + F0F0FFFFFFF8FFF0FFFFFFF0F0FFF8F0E0D7D0FFF8FFD0C0C0FFF8FFE0D0D0FF + F8FFF0D8DFFFE8E0FFFFFFF0EFEFFFF8FFF0EFF0FFFFFFEFF7F0FFFFFFFFFFFF + FFFFFFFFF8FFFFFFFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFFF8FFFFF8FF + EFEFEFF0FFFFE0EFEFF0FFFFF0FFFFFFFFFFFFF8FFF0FFFFFFF8FFEFF0F0FFF8 + FFFFF8FFF0F0F0FFF8FFFFFFFFEFF0EFFFFFFFF0F8FFFFFFFFFFFFFFF0F7F0F0 + FFFFFFF7F0FFFFFFE0F0F0EFF8FFFFF8FFFFF7FFFFF7FFFFF8FFFFFFFFFFF8FF + FFF8FFFFF8FFFFF8FFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + end + object DsCards: TDataSource + DataSet = TbCards + Left = 8 + Top = 216 + end + object TbCards: TTable + TableName = 'datos\cards.db' + Left = 40 + Top = 216 + end +end diff --git a/cap_gestion/crd_ctrl.h b/cap_gestion/crd_ctrl.h new file mode 100644 index 0000000..3e302ef --- /dev/null +++ b/cap_gestion/crd_ctrl.h @@ -0,0 +1,84 @@ +//--------------------------------------------------------------------------- + +#ifndef crd_ctrlH +#define crd_ctrlH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TCardCtrl : public TForm +{ +__published: // IDE-managed Components + TPanel *Panel1; + TLabel *Label1; + TBevel *Bevel1; + TImage *CardOK; + TStatusBar *StatusBar1; + TBevel *Bevel2; + TLabel *noCardFound; + TDataSource *DsCards; + TTable *TbCards; + TLabel *Label2; + TDBText *DBText1; + TLabel *Label3; + TDBText *DBText2; + TDBCheckBox *DBCheckBox1; + TLabel *Label4; + TDBLookupComboBox *DBLookupComboBox1; + TGroupBox *GroupBox1; + TDBCheckBox *DBCheckBox2; + TDBText *DBText3; + TDBText *DBText4; + TBitBtn *GrabaTarjera; + TBitBtn *BitBtn2; + TBitBtn *VerificarTarjeta; + void __fastcall BitBtn2Click(TObject *Sender); + void __fastcall GrabaTarjeraClick(TObject *Sender); + void __fastcall VerificarTarjetaClick(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); +private: // User declarations + // ------------ PARA EL GRABADOR -------------- + int PuertoE; + int cb_PosP, cb_LenP; + int cb_PosC, cb_LenC; + int cb_PosR, cb_LenR; + int cb_PosFd, cb_LenFd; + int cb_PosFh, cb_LenFh; + HANDLE LM_handle; + + int __fastcall AbrePuerto(LPTSTR lpszPortName); + char * __fastcall ObtenerRespuesta( char *rcv ); + char * __fastcall EnviaCMD1( char *CMD, char *rcv, char mlen ); + char * __fastcall EnviaCMD( char *CMD, char *rcv ); + char __fastcall CalculaBCC( char *cadena ); + // ---------- FIN PARA EL GRABADOR ------------ + char * __fastcall ObtenCadenaTarjeta(char *dev); + + + +public: // User declarations + void __fastcall CierraPuerto(void); + char * __fastcall LeeTarjeta( char *rcv ); + char * __fastcall EscribeTarjeta( char *datos, char *rcv ); + + __fastcall TCardCtrl(TComponent* Owner); + int __fastcall LocateCard( int idc, int owner ); + + bool LM_opened, statusOK; + int IDcard; + +}; +//--------------------------------------------------------------------------- +extern PACKAGE TCardCtrl *CardCtrl; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_gestion/eabonados.bmp b/cap_gestion/eabonados.bmp new file mode 100644 index 0000000..4180748 Binary files /dev/null and b/cap_gestion/eabonados.bmp differ diff --git a/cap_gestion/eabonados.ico b/cap_gestion/eabonados.ico new file mode 100644 index 0000000..acb7b8e Binary files /dev/null and b/cap_gestion/eabonados.ico differ diff --git a/cap_gestion/emitir_facturas.bmp b/cap_gestion/emitir_facturas.bmp new file mode 100644 index 0000000..80a9fef Binary files /dev/null and b/cap_gestion/emitir_facturas.bmp differ diff --git a/cap_gestion/escribir.bmp b/cap_gestion/escribir.bmp new file mode 100644 index 0000000..eeffbfb Binary files /dev/null and b/cap_gestion/escribir.bmp differ diff --git a/cap_gestion/euro.bmp b/cap_gestion/euro.bmp new file mode 100644 index 0000000..f495ce6 Binary files /dev/null and b/cap_gestion/euro.bmp differ diff --git a/cap_gestion/fabonados.bmp b/cap_gestion/fabonados.bmp new file mode 100644 index 0000000..ece3c04 Binary files /dev/null and b/cap_gestion/fabonados.bmp differ diff --git a/cap_gestion/fabonados.ico b/cap_gestion/fabonados.ico new file mode 100644 index 0000000..a8ba648 Binary files /dev/null and b/cap_gestion/fabonados.ico differ diff --git a/cap_gestion/gabonados.bmp b/cap_gestion/gabonados.bmp new file mode 100644 index 0000000..c5ed562 Binary files /dev/null and b/cap_gestion/gabonados.bmp differ diff --git a/cap_gestion/gabonados.ico b/cap_gestion/gabonados.ico new file mode 100644 index 0000000..7f93b15 Binary files /dev/null and b/cap_gestion/gabonados.ico differ diff --git a/cap_gestion/images.jpg b/cap_gestion/images.jpg new file mode 100644 index 0000000..e9cc85a Binary files /dev/null and b/cap_gestion/images.jpg differ diff --git a/cap_gestion/indalo.bmp b/cap_gestion/indalo.bmp new file mode 100644 index 0000000..8524b4e Binary files /dev/null and b/cap_gestion/indalo.bmp differ diff --git a/cap_gestion/jd.bmp b/cap_gestion/jd.bmp new file mode 100644 index 0000000..77fe442 Binary files /dev/null and b/cap_gestion/jd.bmp differ diff --git a/cap_gestion/nueva_version.bmp b/cap_gestion/nueva_version.bmp new file mode 100644 index 0000000..eac1e5a Binary files /dev/null and b/cap_gestion/nueva_version.bmp differ diff --git a/cap_gestion/portada.jpg b/cap_gestion/portada.jpg new file mode 100644 index 0000000..b7f2f73 Binary files /dev/null and b/cap_gestion/portada.jpg differ diff --git a/cap_gestion/tabonado.bmp b/cap_gestion/tabonado.bmp new file mode 100644 index 0000000..7169982 Binary files /dev/null and b/cap_gestion/tabonado.bmp differ diff --git a/cap_gestion/tabonados.ico b/cap_gestion/tabonados.ico new file mode 100644 index 0000000..71c81d3 Binary files /dev/null and b/cap_gestion/tabonados.ico differ diff --git a/cap_gestion/tickets.bmp b/cap_gestion/tickets.bmp new file mode 100644 index 0000000..9856b43 Binary files /dev/null and b/cap_gestion/tickets.bmp differ diff --git a/cap_gestion/tickets.cpp b/cap_gestion/tickets.cpp new file mode 100644 index 0000000..9345903 --- /dev/null +++ b/cap_gestion/tickets.cpp @@ -0,0 +1,609 @@ +//--------------------------------------------------------------------------- +#include +#include + +#include +#pragma hdrstop + +#include "tickets.h" +#include "crd_ctrl.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "DigitNum" +#pragma resource "*.dfm" +TfTickets *fTickets; +//--------------------------------------------------------------------------- +__fastcall TfTickets::TfTickets(TComponent* Owner) + : TForm(Owner) +{ + ticketE = new TStringList; + ticketS = new TStringList; + + Height = 290; + TbTickets->Active = false; + TbVentas->Active = true; + TbPrecios->Active = true; + // Cargar la configuración de LMs + AnsiString E, S; + TIniFile *ini; + ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\CAP.INI" ); + // General + E = ini->ReadString( "CAP_c", "IDsLegoE", "1;" ); + S = ini->ReadString( "CAP_c", "IDsLegoS", "2;" ); + + + precioInicial=ini->ReadFloat( "CAP_g", "precioInicial", 0.0 ); + precioMinuto= ini->ReadFloat( "CAP_g", "precioMinuto", 0.0 ); + + // Ticket de entrada + int i; + AnsiString cab,key; + ticketE->Clear(); + i=1; + while(1){ + key=AnsiString("cab")+AnsiString(i); + cab=ini->ReadString("ticketE",key,"<>"); + if ( cab!="<>" ) + ticketE->Add(cab); + else + break; + i++; + } + // Ticket de salida + ticketS->Clear(); + i=1; + while(1){ + cab=ini->ReadString("ticketS",AnsiString("cab")+AnsiString(i),"<>"); + if ( cab!="<>" ) + ticketS->Add(cab); + else + break; + i++; + } + + + delete ini; + + int *ID, nL; + ObtenDirLEGOS( E, nL, &ID ); + for ( i=0; iItems->Add( "Entrada ;O"+AnsiString( ID[i] ) ); + ObtenDirLEGOS( S, nL, &ID ); + for ( i=0; iItems->Add( "Salida ;O"+AnsiString( ID[i] ) ); +} +//--------------------------------------------------------------------------- +void __fastcall TfTickets::ObtenDirLEGOS(AnsiString cadena, int &nLEGOS, int **ID) +{ + char *pDir, buff[80], *pbuff; + nLEGOS = 0; int i = 1, j=0; + + while ( i <= cadena.Length() ) + { + if ( cadena[i] == ';' ) nLEGOS++; + i++; + } + + (*ID) = new int[nLEGOS]; + i = 1; pbuff = buff; + while ( i <= cadena.Length() ) + { + if ( cadena[i] == ';' ) + { + *pbuff = '\0'; + try { + (*ID)[j++] = AnsiString( buff ).ToInt(); + } catch(...) { + nLEGOS--; + ShowMessage( "La configuración de direcciones LEGO'S es incorrecta" ); + } + pbuff = buff; i++; + }else{ + *(pbuff++) = cadena[i]; + i++; + } + } +} +//--------------------------------------------------------------------------- +int __fastcall TfTickets::NDias( TDateTime E, TDateTime S ) +{ + int dS, dE; + + dE = E; + dS = S; + + return ( S-E ); +} +//--------------------------------------------------------------------------- +int __fastcall TfTickets::NMinutos( TDateTime hE, TDateTime hS ) +{ + unsigned short HH, MM, SS, MS; + int RetroDias = 1, MinutosDentro = 0; + TDateTime TD; + if ( hS < hE ) + { + TDateTime S(00,00,00,00); + RetroDias = -1; + TD = (S - hE) + hS; + } else { + TD =(hS - hE); + } + TD.DecodeTime( &HH, &MM, &SS, &MS ); + MinutosDentro = HH*60 + MM; + return (MinutosDentro * RetroDias); +} +//--------------------------------------------------------------------------- +int __fastcall TfTickets::obtenerTicket(void) +{ + int pref, upref, cont; + + upref=0; + sql->SQL->Clear(); + sql->SQL->Add("SELECT Prefijo,Contador FROM 'datos\\contadores' WHERE Id=1"); + sql->Active=true; + + cont = sql->FieldByName("Contador")->AsInteger; + if ( cont>1000 ) upref=1; + pref = sql->FieldByName("Prefijo")->AsInteger+upref; + + sql->SQL->Clear(); + sql->SQL->Add("UPDATE 'datos\\contadores' SET Prefijo="+AnsiString(pref)+",Contador="+AnsiString(cont+1)+" WHERE Id=1" ); + sql->ExecSQL(); + + return ( pref*1000 + cont ); +} +//--------------------------------------------------------------------------- +void __fastcall TfTickets::BitBtn1Click(TObject *Sender) +{ + TbTickets->Active = true; + + int NTicket; + if ( Edit1->Text.IsEmpty() ) + { + TDateTime fE = fE.CurrentDate(); + TDateTime hE = hE.CurrentTime(); + TbTickets->Insert(); + TbTickets->FieldByName("fechaE")->AsDateTime = fE; + TbTickets->FieldByName("horaE")->AsDateTime = hE; + TbTickets->FieldByName("puedeSalir")->AsBoolean = false; + TbTickets->Post(); + + + if ( RadioGroup1->ItemIndex==0 ) + { + NTicket = TbTickets->FieldByName("id")->AsInteger; + NTicket = (NTicket<<1)+1; + TbTickets->Edit(); + TbTickets->FieldByName("Ticket")->AsInteger = 0; + TbTickets->FieldByName("idCard")->AsInteger = NTicket; + TbTickets->Post(); + + if ( !GrabaTarjeta(NTicket) ) + TbTickets->Delete(); + else + ShowMessage( "Nº de Ticket: "+AnsiString( NTicket ) ); + } else { + NTicket = obtenerTicket(); + TbTickets->Edit(); + TbTickets->FieldByName("Ticket")->AsInteger = NTicket; + TbTickets->FieldByName("idCard")->AsInteger = 0; + TbTickets->Post(); + + + //Currency pvp,int mm,TDateTime fechaE,TDateTime fechaS + // + + ticket_Imprimir(NTicket,'E', 0, 0, + TbTickets->FieldByName("fechaE")->AsDateTime+TbTickets->FieldByName("horaE")->AsDateTime, + 0 ); + + } + // ############# + + Height = 290; + } else { + // Buscar ticket y mostrar sus datos... + try { + +// CAMBIADO 30/ABRL/2002 +// NTicket = ( Edit1->Text.ToInt() ) >> 1; +// if ( TbTickets->Locate( "id", NTicket, TLocateOptions() << loCaseInsensitive << loPartialKey ) ) + + AnsiString fieldKey; + NTicket = Edit1->Text.ToInt(); + if ( RadioGroup1->ItemIndex==0 ) fieldKey = "idCard"; else fieldKey = "Ticket"; + + + if ( TbTickets->Locate( fieldKey, NTicket, TLocateOptions() << loCaseInsensitive ) ) + { + TDateTime TD; Currency Coste; + int DiasDentro, MinutosDentro; + DiasDentro = NDias( TbTickets->FieldByName("fechaE")->AsDateTime, TDateTime::CurrentDate() ); + MinutosDentro = NMinutos( TbTickets->FieldByName("horaE")->AsDateTime, TDateTime::CurrentTime() ); + if ( MinutosDentro < 0 ) + { + MinutosDentro = MinutosDentro*(-1); + DiasDentro--; + } + Coste = CalculaCoste( MinutosDentro, DiasDentro ); + + int VDig = Coste*100; + DigitNum1->Value = VDig / 100; + DigitNum2->Value = VDig - ( (VDig / 100)*100 ); + + Label4->Caption = TDateTime::CurrentTime(); + Label5->Caption = TDateTime::CurrentDate(); + Label3->Caption = AnsiString( DiasDentro ) + " Dias y " + AnsiString( MinutosDentro ) + " minutos."; + Label6->Caption = TbTickets->FieldByName("fechaE")->AsDateTime; + Label7->Caption = TbTickets->FieldByName("horaE")->AsDateTime; + + + Height = 370; + } + } catch(...) { + ShowMessage( "El formato del Ticket, es incorrecto" ); + } + } + TbTickets->Active = false; +} +//--------------------------------------------------------------------------- +Currency __fastcall TfTickets::CalculaCoste( int Minutos, int Dias ) +{ + Minutos = Minutos+(24*60*Dias); + + return precioMinuto*Minutos+precioInicial; + + + + Currency MM = 0, DD = 0; + TbPrecios->First(); + while ( ! TbPrecios->Eof ) + { + if ( Minutos <= TbPrecios->FieldByName("Tiempo")->AsInteger ) + { + MM = TbPrecios->FieldByName("Precio")->AsCurrency; + break; + } + TbPrecios->Next(); + } + + if ( Dias > 0 ) + { + Dias += 9000; + TbPrecios->First(); + while ( ! TbPrecios->Eof ) + { + if ( Dias <= TbPrecios->FieldByName("Tiempo")->AsInteger ) + { + DD = TbPrecios->FieldByName("Precio")->AsCurrency; + break; + } + TbPrecios->Next(); + } + } + + return ( DD + MM ); +} +//--------------------------------------------------------------------------- +void __fastcall TfTickets::BitBtn2Click(TObject *Sender) +{ + bool emitir=true; + if ( Edit1->Text.IsEmpty() ) return; + TbTickets->Active = true; + + AnsiString fieldKey; + if ( RadioGroup1->ItemIndex==0 ) fieldKey = "idCard"; else fieldKey = "Ticket"; + if ( TbTickets->Locate( fieldKey, Edit1->Text, TLocateOptions() << loCaseInsensitive << loPartialKey ) ) + { + emitir = !TbTickets->FieldByName("PuedeSalir")->AsBoolean; + + if ( !emitir ) + { +// emitir = ( MessageDlg("El ticket "+Edit1->Text+" ya ha sido cobrado. \n ¿Volver a cobrar ahora?",mtInformation, TMsgDlgButtons() << mbYes << mbNo, 0)==mrYes); + ShowMessage("Este ticket ya ha sido cobrado!"); + } + + if ( emitir ) + { + // Imprimimos ¿Ticket PAGADAO? + //ShowMessage( "Aqui debería imprimirse el comprobante de pago" ); + + TbTickets->Edit(); + TbTickets->FieldByName("PuedeSalir")->AsBoolean = true; + TbTickets->Post(); + + // Insertamos la venta... + Currency Importe; + Importe = (Currency)(DigitNum1->Value * 100 + DigitNum2->Value ) / 100; + TbVentas->Insert(); + TbVentas->FieldByName("idc")->AsInteger = -1; // Cliente ocacional + TbVentas->FieldByName("fechaE")->AsDateTime = TbTickets->FieldByName("fechaE")->AsDateTime; + TbVentas->FieldByName("horaE")->AsDateTime = TbTickets->FieldByName("horaE")->AsDateTime; + TbVentas->FieldByName("fechaS")->AsDateTime = TDateTime::CurrentDate(); + TbVentas->FieldByName("fechaP")->AsDateTime = TDateTime::CurrentDate(); + TbVentas->FieldByName("horaS")->AsDateTime = TDateTime::CurrentTime(); + TbVentas->FieldByName("importe")->AsCurrency = Importe; + TbVentas->FieldByName("pagado")->AsBoolean = true; + TbVentas->Post(); + //Currency pvp,int mm,TDateTime fechaE,TDateTime fechaS + // + int DiasDentro, MinutosDentro; + DiasDentro = NDias( TbVentas->FieldByName("fechaE")->AsDateTime, TbVentas->FieldByName("fechaS")->AsDateTime ); + MinutosDentro = NMinutos( TbVentas->FieldByName("horaE")->AsDateTime, TbVentas->FieldByName("horaS")->AsDateTime ); + if ( MinutosDentro < 0 ) + { + MinutosDentro = MinutosDentro*(-1); + DiasDentro--; + } + + + if ( MessageDlg("¿Imprimir Ticket?",mtInformation, TMsgDlgButtons() << mbYes << mbNo, 0)==mrYes) + ticket_Imprimir(TbTickets->FieldByName("idCard")->AsInteger,'S', Importe, DiasDentro*1000+MinutosDentro, + TbVentas->FieldByName("fechaE")->AsDateTime+TbVentas->FieldByName("horaE")->AsDateTime, + TbVentas->FieldByName("fechaS")->AsDateTime+TbVentas->FieldByName("horaS")->AsDateTime ); +// TbTickets->Delete(); + } + } else ShowMessage( "Ticket no encontrado" ); + TbTickets->Active = false; + + // Cobrar + Edit1->Text = ""; + DigitNum1->Value = 0; + DigitNum2->Value = 0; + Height = 290; +} +//--------------------------------------------------------------------------- +void __fastcall TfTickets::ComboBox1Change(TObject *Sender) +{ + // Mandamos el mensaje de selección al PortaPapeles... + AnsiString Bra = ComboBox1->Items->Strings[ComboBox1->ItemIndex]; + Bra = "JDsoft:" + Bra.SubString( Bra.Length()-4, Bra.Length() ); + Clipboard()->SetTextBuf( Bra.c_str() ); +} +//--------------------------------------------------------------------------- +void __fastcall TfTickets::Edit1KeyPress(TObject *Sender, char &Key) +{ + if ( !Edit1->Text.IsEmpty() && Key == VK_RETURN ) + BitBtn1Click( 0 ); +} +//--------------------------------------------------------------------------- +bool __fastcall TfTickets::GrabaTarjeta(int ID) +{ + bool dev = false; + + TCardCtrl *CCard; + CCard = new TCardCtrl(this); + + char buf[80]; + CCard->IDcard = ID; + + CCard->GrabaTarjeraClick(0); + dev = CCard->statusOK; + if ( !dev ) + { + ShowMessage( "ERROR DE GRABACION" ); + } +/* + CCard->LeeTarjeta(buf); + ShowMessage( AnsiString(buf) ); +*/ + + if ( CCard->LM_opened ) CCard->CierraPuerto(); + delete CCard; + + return dev; +} +//--------------------------------------------------------------------------- + +//########################################################################### +void __fastcall TfTickets::ticket_Imprimir(int idt,char tipo,Currency pvp,int mm,TDateTime fechaE,TDateTime fechaS) +{ +//ShowMessage( "Nº de Ticket: "+AnsiString( idt ) );return;//BORRAME CUANDO ESTE LISTO + Currency Importe; + Importe = (DigitNum1->Value * 100 + DigitNum2->Value ) / 100; + + + TStringList *ticket; + ticket = (tipo=='E'?ticketE:ticketS); + + hCom = ticket_AbrirPuerto("LPT1"); + int i; + double sump=0; + // Nothing + // Generamos la cabecera + ticket_writeCOM( "\n" ); + for ( i=0; iCount; i++ ) + { + ticket_writeCOM( ticket_parsearLinea(ticket->Strings[i],idt,pvp,mm,fechaE,fechaS) ); + ticket_writeCOM( "\n" ); + } + + ticket_CerrarPuerto(); +} +//--------------------------------------------------------------------------- +AnsiString __fastcall TfTickets::ticket_parsearLinea(AnsiString linea, int idt, Currency pvp,int mm, TDateTime fechaE, TDateTime fechaS) +{ + AnsiString dev; + // Esto será un "simple", buscar y reemplazar... +// dev = SearchAndReplace( linea, "[fecha]", DateTimePicker1->Date.DateString() ); + dev = ticket_SearchAndReplace( linea, "{idt}", AnsiString(idt) ); + dev = ticket_SearchAndReplace( dev, "{pvp}", FormatCurr( "##,###,##0.#0",pvp) ); + dev = ticket_SearchAndReplace( dev, "{mm}", mm ); + dev = ticket_SearchAndReplace( dev, "{fechaE}", fechaE.DateTimeString() ); + dev = ticket_SearchAndReplace( dev, "{fechaS}", fechaS.DateTimeString() ); + + return dev; +} +//--------------------------------------------------------------------------- +AnsiString __fastcall TfTickets::ticket_SearchAndReplace(AnsiString l, AnsiString s, AnsiString r ) +{ + AnsiString dev; + int i; + // Buscamos s en l + i = l.Pos(s); + if ( i>0 ) + dev = l.SubString(1,i-1) + r + l.SubString(i+s.Length(),l.Length()); + else + dev = l; + + return dev; +} +//--------------------------------------------------------------------------- +bool __fastcall TfTickets::ticket_writeCOM(AnsiString output) +{ + char string[255], *p; + string[0]='\0'; + if ( output.data() != NULL ) + { + // Esto debería estar en el parser + strcpy( string, (char *)output.data() ); + do { + p = StrPos(string,"{r}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='r'; p[2]='1'; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{n}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='r'; p[2]='0'; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{fc}"); + if ( p!=NULL ) + { p[0]=(char)0x1D; p[1]='V'; p[2]=66; p[3]='0'; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{F1}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='!'; p[2]=16+1+32; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{F}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='!'; p[2]=17; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{f}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='!'; p[2]=0x01; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{B}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='E'; p[2]=1; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{b}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='E'; p[2]='0'; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{E}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='E'; p[2]=1; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{e}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='E'; p[2]='0'; } else break; + } while( p!=NULL ); + + do { + p = StrPos(string,"{fA}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='M'; p[2]='0'; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{fB}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='M'; p[2]=1; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{fC}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='M'; p[2]=2; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{L}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='a'; p[2]='0'; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{C}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='a'; p[2]=1; } else break; + } while( p!=NULL ); + do { + p = StrPos(string,"{R}"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='a'; p[2]=2; } else break; + } while( p!=NULL ); + +/* + do { + p = StrPos(string,"[P]"); + if ( p!=NULL ) + { p[0]=(char)0x1B; p[1]='a'; p[2]=2; } else break; + } while( p!=NULL ); +*/ + + + for ( p=string; *p!='\0'; p++ ) + if ( *p == (char)0xFF ) *p='\0'; + } + unsigned long int wt; +// return WriteFile( hCom,output.c_str(),output.Length(),&wt,NULL); +//ShowMessage( string ); + return WriteFile( hCom,string,output.Length(),&wt,NULL); +} +//--------------------------------------------------------------------------- +HANDLE __fastcall TfTickets::ticket_AbrirPuerto(char *puerto) +{ + HANDLE hCom; + + hCom = CreateFile( puerto, + GENERIC_READ | GENERIC_WRITE, + 0, // comm devices must be opened w/exclusive-access + NULL, // no security attributes + OPEN_EXISTING, // comm devices must use OPEN_EXISTING + 0, // not overlapped I/O + NULL // hTemplate must be NULL for comm devices + ); + + if ( puerto[0]!='L' ) + if (hCom != INVALID_HANDLE_VALUE) + { + DCB dcb; + // We will build on the current configuration, and skip setting the size + // of the input and output buffers with SetupComm. + if ( GetCommState(hCom, &dcb) ) + { + + // Fill in the DCB: baud=57,600 bps, 8 data bits, no parity, and 1 stop bit. + dcb.BaudRate = CBR_9600; // set the baud rate + dcb.ByteSize = 8; // data size, xmit, and rcv + dcb.Parity = NOPARITY; // no parity bit + dcb.StopBits = ONESTOPBIT; // one stop bit + + if ( !SetCommState(hCom, &dcb) ) + CloseHandle( hCom ); + } + } + return hCom; +} +//--------------------------------------------------------------------------- +void __fastcall TfTickets::ticket_CerrarPuerto(void) +{ + CloseHandle( hCom ); +} +//--------------------------------------------------------------------------- + +//########################################################################### + + +void __fastcall TfTickets::FormDestroy(TObject *Sender) +{ + delete ticketE; + delete ticketS; + +} +//--------------------------------------------------------------------------- + diff --git a/cap_gestion/tickets.ddp b/cap_gestion/tickets.ddp new file mode 100644 index 0000000..cdc0ee8 Binary files /dev/null and b/cap_gestion/tickets.ddp differ diff --git a/cap_gestion/tickets.dfm b/cap_gestion/tickets.dfm new file mode 100644 index 0000000..25f8e25 --- /dev/null +++ b/cap_gestion/tickets.dfm @@ -0,0 +1,539 @@ +object fTickets: TfTickets + Left = 612 + Top = 131 + AutoScroll = False + Caption = 'cap-ges: tickets' + ClientHeight = 343 + ClientWidth = 349 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Icon.Data = { + 0000010001002020000001000800A80800001600000028000000200000004000 + 0000010008000000000080040000000000000000000000010000000000000000 + 0000FFFFFF0052A4FF000041A0000051A00059C5FF0058C5FF0060C7FF005EC6 + FF005DC6FF005BC6FF0068C9FF0068C8FF0067C8FF0064C7FF0061C7FF006BCA + FF0073CBFF0074CBFF0072CBFF006FCAFF0069C8FF007CCDFF0081CEFF007FCE + FF007ACCFF00CEFFFF005299FF0071CAFF008ACFFF0091D1FF0091D2FF008DD1 + FF0088CFFF006363310079CCFF0084CFFF0096D3FF009BD4FF00639C31002121 + 210083CFFF008FD1FF009AD3FF00A2D5FF00ADADAD00737373008AD0FF0097D2 + FF00AAD6FF009DD4FF00233D63000000F0000000800000800000008080008000 + 00008000800080800000C0C0C000808080000000FF0000FF000000FFFF00FF00 + 0000FF00FF00FFFF000006060600121212001F1F1F002C2C2C00393939004545 + 4500525252005F5F5F006C6C6C007878780085858500929292009F9F9F00ABAB + AB00B8B8B800C5C5C500D2D2D200DEDEDE00EBEBEB00F8F8F800F0FBFF00A4A0 + A000C0DCC000F0CAA60000003E0000005D0000007C0000009B000000BA000000 + D9002424FF004848FF006C6CFF009090FF00B4B4FF0000143E00001E5D000028 + 7C0000329B00003CBA000046D9000055F000246DFF004885FF006C9DFF0090B5 + FF00B4CDFF00002A3E00003F5D0000547C0000699B00007EBA000093D90000AA + F00024B6FF0048C2FF006CCEFF0090DAFF00B4E6FF00003E3E00005D5D00007C + 7C00009B9B0000BABA0000D9D90000F0F00024FFFF0048FFFF006CFFFF0090FF + FF00B4FFFF00003E2A00005D3F00007C5400009B690000BA7E0000D9930000F0 + AA0024FFB60048FFC2006CFFCE0090FFDA00B4FFE600003E1400005D1E00007C + 2800009B320000BA3C0000D9460000F0550024FF6D0048FF85006CFF9D0090FF + B500B4FFCD00003E0000005D0000007C0000009B000000BA000000D9000000F0 + 000024FF240048FF48006CFF6C0090FF9000B4FFB400143E00001E5D0000287C + 0000329B00003CBA000046D9000055F000006DFF240085FF48009DFF6C00B5FF + 9000CDFFB4002A3E00003F5D0000547C0000699B00007EBA000093D90000AAF0 + 0000B6FF2400C2FF4800CEFF6C00DAFF9000E6FFB4003E3E00005D5D00007C7C + 00009B9B0000BABA0000D9D90000F0F00000FFFF2400FFFF4800FFFF6C00FFFF + 9000FFFFB4003E2A00005D3F00007C5400009B690000BA7E0000D9930000F0AA + 0000FFB62400FFC24800FFCE6C00FFDA9000FFE6B4003E1400005D1E00007C28 + 00009B320000BA3C0000D9460000F0550000FF6D2400FF854800FF9D6C00FFB5 + 9000FFCDB4003E0000005D0000007C0000009B000000BA000000D9000000F000 + 0000FF242400FF484800FF6C6C00FF909000FFB4B4003E0014005D001E007C00 + 28009B003200BA003C00D9004600F0005500FF246D00FF488500FF6C9D000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000340000000000 + 0000000000000000000000000000000000000000000000000000340000000000 + 0000000000000000000000000000000000000000000000000000340000000000 + 0000000000000000000000000000000000000000000000000000340000000000 + 0000000000000000000000000000000000000000000000000000340000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000033 + 1B00000000000000000000000000000000000000000000000000000000000033 + 1B1B1B0000000000000000000000000000000000000000000000000000000000 + 331B041B1B000000000000000000000000000000000000000000000000000000 + 00041B04041B1B0000000000001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A000000 + 00041B2A3204041B1B000000001A22222222222222222222222222221A000000 + 00041B2F302C3100001B1B00001A221A27271A1A2E281A1A27271A221A000000 + 00041B292A2B2C000000041B001A221A1A271A2D2D2E1A1A271A1A221A000000 + 031B1B232400250000002604001A22271A1A1A2728281A1A1A1A27221A00031B + 041B0C1C19001D001E1F2021001A22222222222222222222222222221A000003 + 020404151400160017171819001A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A000000 + 0002020404100000111213140000000000000000000000000000000000000000 + 00000002020400000B0C0D0E0F04020000000000000000000000000000000000 + 0000000000020200040708090A04020000000000000000000000000000000000 + 0000000000000002020404050604020000000000000000000000000000000000 + 0000000000000000000202040402020000000000000000000000000000000000 + 0000000000000000000000020202030000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FFFFFFFFFFFFFFFFFFFF99346633992CE7B1990C66309F1CE6F1092C4233FFFF + FFFFFFFFFFFFFFFFFFFF9FFFFFFF07FFFFFF01FFFFFF807C0000C01C0000C004 + 0000C0000000C000000000000000000000000000000080000000E0003FFFF800 + 3FFFFE003FFFFF803FFFFFE03FFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFF} + OldCreateOrder = False + Position = poScreenCenter + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object Bevel2: TBevel + Left = 0 + Top = 49 + Width = 349 + Height = 294 + Align = alClient + end + object Bevel3: TBevel + Left = 24 + Top = 264 + Width = 321 + Height = 9 + Shape = bsBottomLine + end + object Label2: TLabel + Left = 112 + Top = 288 + Width = 10 + Height = 20 + Caption = '--' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object Label3: TLabel + Left = 8 + Top = 320 + Width = 48 + Height = 20 + Caption = 'Label3' + Font.Charset = DEFAULT_CHARSET + Font.Color = clGreen + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object Label4: TLabel + Left = 128 + Top = 280 + Width = 48 + Height = 20 + Caption = 'Label4' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object Label5: TLabel + Left = 128 + Top = 296 + Width = 48 + Height = 20 + Caption = 'Label4' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object Label6: TLabel + Left = 8 + Top = 280 + Width = 48 + Height = 20 + Caption = 'Label4' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object Label7: TLabel + Left = 8 + Top = 296 + Width = 48 + Height = 20 + Caption = 'Label4' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object DigitNum1: TDigitNum + Left = 8 + Top = 56 + Width = 217 + Height = 153 + Brush.Style = bsClear + MaxLength = 3 + end + object DigitNum2: TDigitNum + Left = 232 + Top = 56 + Width = 113 + Height = 81 + Brush.Style = bsClear + MaxLength = 2 + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 349 + Height = 49 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + object Label1: TLabel + Left = 0 + Top = -4 + Width = 138 + Height = 45 + Caption = 'Tickets' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -32 + Font.Name = 'Arial Black' + Font.Style = [fsBold] + ParentFont = False + end + object Bevel1: TBevel + Left = 0 + Top = 32 + Width = 185 + Height = 9 + Shape = bsBottomLine + end + object CardOK: TImage + Left = 0 + Top = 0 + Width = 24 + Height = 24 + AutoSize = True + Picture.Data = { + 07544269746D617096010000424D960100000000000076000000280000001800 + 0000180000000100040000000000200100000000000000000000100000000000 + 000000000000000080000080000000808000800000008000800080800000C0C0 + C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF + FF00FFFFFFFFFFF991FFFFFFFFFFFFFFFFFFFFFF991FFFFFFFFFFFFFFFFFFFFF + 991100000FFFFFFF00000000099110880FFF0000888888888001108800FF8888 + 888888888880088808FF88888888888888888888080F88888888888888888888 + 080B88888888888888888888080B888888888000000000008801888800000777 + 7777777808010000FFFFF777777777788001FFFFFFF77777FFF00000000BFFFF + FF777000000BBBBBBBBBFF7700000BBBBBBBBB111111000077BBBBBB111111BB + BBBB777700BB1111BBBBBBBBBBBB0000FFBBBBBBBBBBB33BBBBBFFFFFFB33BBB + 3BBBB33BBB3BFFFFFFBB3BB33B3BBBBBBBBBFFFFFFB33BBBBBB3BBBBBBBBFFFF + FFB33BBBBBBBBBBBFFFFFFFFFFBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF} + Visible = False + end + object RadioGroup1: TRadioGroup + Left = 192 + Top = 0 + Width = 153 + Height = 49 + Caption = 'NO Clientes' + ItemIndex = 1 + Items.Strings = ( + 'Usar Tarjetas Magn'#233'ticas' + 'Usar Tickets') + TabOrder = 0 + end + end + object BitBtn1: TBitBtn + Left = 232 + Top = 176 + Width = 113 + Height = 81 + Caption = 'Expender / Buscar' + TabOrder = 1 + OnClick = BitBtn1Click + Glyph.Data = { + 26140000424D26140000000000003604000028000000430000003C0000000100 + 080000000000F00F00000000000000000000000100000000000065A1AB005FE6 + E1007FE2E20099E6E900000000009398A00039A7AC00C9CAD000A6AAB100B3EB + F100295B67007EBCC500E8E9EB0026858C00C5E0EA00DBE7F100E2E0E500FFFF + FF00F7E2F800B8BBC100E1EFFA00FAE5ED0082858C00AEDCE40057C2C600CBED + F500D6D6DB00CBACC6009ACAD400C7EDD800567C8800EFEFF200000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000111111111111 + 11111111111111111111110C101A100C1F111111111111111111111111111111 + 1111111111111111111111111111111111111111111111111111111111001111 + 1111111111111111111111111111111A13081313070C1F111111111111111111 + 1111111111111111111111111111111111111111111111111111111111111111 + 1100111111111111111111111111111111111F1A0505161616131A1011111111 + 1111111111111111111111111111111111111111111111111111111111111111 + 111111111100111111111111111111111111111111111A1A071316160A161608 + 071A101F11111111111111111111111111111111111111111111111111111111 + 111111111111111111001111111111111111111111111111111F13081305111A + 050A1E160508131A100C11111111111111111111111111111111111111111111 + 111111111111111111111111110011111111111111111111111111111F1A1316 + 05080C1F0816051616050513071A0C1111111111111111111111111111111111 + 11111111111111111111111111111111110011111111111111111111110C0C07 + 13081F1F0708070C1F1608130C1A08161616050813070C0C1111111111111111 + 1111111111111111111111111111111111111111110011111111111111111111 + 0C101A080507131F1F0716101F0505131A1F15001616050508131A101F111111 + 1111111111111111111111111111111111111111111111111100111111111111 + 1111110C1A1313131110161A0C1416081F0705081A101A0F190B051616160813 + 07100C1111111111111111111111111111111111111111111111111111001111 + 11111111110C100708080508081A08130C1F0A16071F0805131A1C0F17181C1C + 000516160513071A0C1111111111111111111111111111111111111111111111 + 1100111111111F0C101313160C08051316071F100C1F130A081F0C0508180B17 + 17050608080D1207001616050807070C0C111111111111111111111111111111 + 111111111100111111111A1A13050F11051F070C0707100C0C0C0C07160C1F1A + 16131B02170E0D0D00021703000705160505080707100C111111111111111111 + 111111111111111111001111110C0713080707131013130813080C0C0C0C120F + 0510100C050805181C1206000802031C161C1708161605081307100C11111111 + 111111111111111111111111110011110C1A1F0C1F051A13131308081B100C0C + 15151F140C0C0C1F131E1E1A090B0803181C180606000301120E170816160505 + 08131A100C111111111111111111111111001111130C0C1F0C0810081F1F1005 + 121A1F0C0C0C0C150C1F1F0C1905000717011901060018030E050F020F090203 + 1702161605050813070C0C111111111111111111110011111F130C0C1F1A0807 + 1F1F1F1B05080C0C1F1F0C1F1F150C0F090B1E071C0117011C0B070707071401 + 17030203030E0B16161605081307100C11111111111111111100111111111A1F + 0C1F100C1F101F160507140C0C0C0C140E0F02010F0E1A000808180B08020B02 + 031C001409021A01010E01021C030E0B1616050513071A0C1F11111111001111 + 11111B1F1F0F0C1F1F0C1F0505111A1F190C0C1D0E101C03031C1C0000050602 + 0B0108021C0F021202021A0102030203170909010916161605131310100C1111 + 11001111111116081F1F0C0C0C0C1F191115081F1515020201081803000D1E0D + 060B0B0603191C1E1308180F0202020F0E03141A02021C01020B170516160508 + 1307101F1100111111111A08100C0C1F1F1F0C1F111E1A130202121402180D02 + 1C08000016001A1317031C00020D0600170F14151F0117030101021717171E09 + 1C05161605050710110011111111110C0C0C1F0C0C0C0C1511070E0E01010101 + 02121C06010A0A1B1C0D080B180B1803190B160B0F1E001C0B0219030F0F030F + 17060A0D03021D0E1C1605070C001111111111110C0C0C0C0C0C1F1D03020312 + 03030101090301001C180B18021E0A0D1B130311171819061C06171C08071C02 + 0F0F01170003131E0F0217030117071A11001111111111110C0C0C19151F1F17 + 010203190203030302030108070B08181805050A16161C1C08181C02020B170B + 001A1C01031C01020B0B171C1902020301171A1A110011111111111111150C0C + 1A0303190902090F010201010908171C061C17030B060D0D0B0B0A0816130605 + 080606021C0B140F1C02001818090218170F0F1D19101A1F1100111111111111 + 11101902190909030101191F03030101191C0B08060B1C180B16081E08001600 + 0B0706180B1C0617120E191301020B180B17021717120F0E19101A1111001111 + 11111111110C1C01091909031701090E01030E02030D0D10141E18061E1E1705 + 00060000180006000B05070F120B021C0102061E1600070E020F0902021A0C11 + 110011111111111111110F0E010201140F010F030109010211171C0101171317 + 180601100D1E1C170706050E0D05080B0B1C1C1C16051C1C000A010302020315 + 1007111111001111111111111111111C190C0F030102120F0B0B0602070B090F + 0B09090B081001090516060B0E181702000B1805001E1618020E060202090E0E + 0F1717101A1A111111001111111111111111110E090E021903010E010100170D + 010B0E1E1C0D17181703030903160D0D08020B1C101C060518181C061C1C1A0F + 011002020902021A071011111100111111111111111111110201011214030101 + 010D1C0000181C070A07090D0B02031209170A1E0B0803171217180001021C16 + 080012120112020103020207070C11111100111111111111111111111D11020D + 061C1B0B0317060207060303180D0D0912140E0101010A1E0603010618000509 + 1F10020B00061C03021719120219101A10111111110011111111111111111111 + 11171C090B0000180E14021C06181A170005051A0901170F0903061E1E1C130E + 1C16170B0B090117021C02090F1C0319021717101F1111111100111111111111 + 11111111111717001B1E0A0B13140D1B001C13160916161801010E14190E0116 + 050B05130B0B0018060B02171714021A1902020902021A0C1111111111001111 + 11111111111111111111111818060B06050803190D1808000D0118171C170902 + 02020102000D0000171E18130B00080D01010203020F0F020C1A071111111111 + 1100111111111111111111111111111C1E03061C1607030306181A0B0D1C031E + 1E18100C010301010B0D13080C0901161818000602020909171009021D1A0711 + 11111111110011111111111111111111111111100203061E1B050319050B0D06 + 1B130E1C031814190203010119050818070B0117180B001314091215010E0202 + 1C131A111111111111001111111111111111111111111119021603161E160817 + 011E1E000B011808130B1C0201171A02090808071A091918060818170E010217 + 170902121A1A1F1111111111110011111111111111111111111111111402061C + 1B1B0B00011C17030B0B18000606120917030103190905130C111103031C1C02 + 0309171714170109070C11111111111111001111111111111111111111111111 + 11191E030000071B0706010608000B0918180B03021903010E010B081A0C1111 + 111F0E09021A0202020202171A1F111111111111110011111111111111111111 + 11111111110C050B1C06131A000B180D05001C121C001C01030E0E0102020305 + 070C1111111119031C01020202020E141A111111111111111100111111111111 + 1111111111111111111102001D141C06060703180A0B0B0201021208021C0103 + 111C001708071A11111111111111110F1D021007111111111111111111001111 + 1111111111111111111111111111171D0301080E1818021807050D0101021C18 + 001E011003021708081307111111111111111111111C171F1111111111111111 + 110011111111111111111111111111111111111718181B1E160B03010D011807 + 0B18010119120000180D0A1C0808131111111111111111111111111111111111 + 111111111100111111111111111111111111111111111111190B020618001702 + 0B0018181800070D180103141B171E0A090808100C1111111111111111111111 + 1111111111111111110011111111111111111111111111111111111109021919 + 0D00181C1F1802001819180B1C08170900021613010B051A1011111111111111 + 1111111111111111111111111100111111111111111111111111111111111111 + 11030809010A0D180101061E1617060116050B0B1C06140219121A131A0C1111 + 1111111111111111111111111111111111001111111111111111111111111111 + 1111111111110303021C181E03030318060B1F010201191203030E0103030213 + 1A1F111111111111111111111111111111111111110011111111111111111111 + 1111111111111111111115051C0D180509170E06180601031214021701091219 + 0301011A10111111111111111111111111111111111111111100111111111111 + 11111111111111111111111111110302060F05180603190B0209020312031909 + 02090301190F0E10111111111111111111111111111111111111111111001111 + 1111111111111111111111111111111111111902001C16181803090303190203 + 03011F1F1903010114100F111111111111111111111111111111111111111111 + 1100111111111111111111111111111111111111111111111D18021901091902 + 030202190F0F0202011915101111111111111111111111111111111111111111 + 111111111100111111111111111111111111111111111111111111111F0F0209 + 010F140317020109140F0902020C101F11111111111111111111111111111111 + 1111111111111111110011111111111111111111111111111111111111111111 + 11090217020F14020F1903030201141F170C1111111111111111111111111111 + 1111111111111111111111111100111111111111111111111111111111111111 + 11111111111D021517090917190202140F0E0C1F111111111111111111111111 + 1111111111111111111111111111111111001111111111111111111111111111 + 111111111111111111111701011214010102170C1A1A11111111111111111111 + 1111111111111111111111111111111111111111110011111111111111111111 + 111111111111111111111111111119090109030312191C191111111111111111 + 1111111111111111111111111111111111111111111111111100111111111111 + 111111111111111111111111111111111111111D0212090C0F0C111111111111 + 1111111111111111111111111111111111111111111111111111111111001111 + 111111111111111111111111111111111111111111111111021D1D070C111111 + 1111111111111111111111111111111111111111111111111111111111111111 + 11001111111111111111111111111111111111111111111111111111020E0C11 + 1111111111111111111111111111111111111111111111111111111111111111 + 1111111111001111111111111111111111111111111111111111111111111111 + 1D0C111111111111111111111111111111111111111111111111111111111111 + 11111111111111111100} + Layout = blGlyphTop + end + object BitBtn2: TBitBtn + Left = 232 + Top = 280 + Width = 113 + Height = 57 + Caption = 'Cobrar' + TabOrder = 2 + OnClick = BitBtn2Click + Glyph.Data = { + 8E030000424D8E03000000000000760000002800000042000000160000000100 + 04000000000018030000C40E0000C40E00001000000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00DDDDDD777777 + 7777777777DDDDDDD99999999DDDDDDDDDDDDD7700000000000000000000DDDD + D70000000000000007DDDDD999999999999DDDDDDDDDD7008088888888888000 + 0000DDDDD00788888888888807DDDD99999999999999DDDDDDDDD00870777777 + 777780000000DDD7080F7777777777780DDDD9999FFFFFFF99999DDDDDD70807 + 70000000000000000000DD70870F7777777777780DDD9999FFFFFFFFFF9999DD + DD70870770BBBBBBBB3330000000D708770F7777777777780DD999999FFFFFFF + FFF9999DD70877070BBBBBBBB3330D000000D087770FFFFFFFFFFFF70DD99999 + 99FF000000FF999DD0877700BBBBBBBB33300D00000008777700000000000000 + 0D0000F999907777770FF999087777000000000000000D000000077777078888 + 888888880D4C4C009999FFF00000F999077777078888888888880D0000000777 + 70F00700707007080DC4C40779999FFF77770999077770F00700707007080D00 + 0000077770F7777777777780DDCCCC0FFF9999F00000F999077770F777777777 + 7780DD00000007770F00707070070780DDCCCC000FF9999F7770F99907770F00 + 707070070780DD00000007770F7777777777780DDD00000FF0FF9999000FF999 + 07770F7777777777780DDD0000000770F0070707007880DDDD999FFFFF0FF999 + 9FFFF9990770F0070707007880DDDD000000070F7777777777700DDDDD999FFF + FFF00F9999FFF999070F7777777777700DDDDD0000000070000000000070DDDD + DDD999FFFFFFF0F9999F999D0070000000000070DDDDDD0000000070F998FF8F + F070DDDDDDD9999FFFFFFF009999999D0070FAA8FF8FF070DDDDDD0000000070 + F99F88F88070DDDDDDDD9999FFFFFFFFF99999DD0070FAAF88F88070DDDDDD00 + 00000077000000000780DDDDDDDDD99999FFFFFF99999DDD0077000000000780 + DDDDDD000000070777777777780DDDDDDDDDDD99999999999999DDDD07077777 + 7777780DDDDDDD000000D0788888888800DDDDDDDDDDDDD999999999999DDDDD + D0788888888800DDDDDDDD000000DD00000000000DDDDDDDDDDDDDDDD9999999 + 9DDDDDDDDD00000000000DDDDDDDDD000000} + Layout = blGlyphTop + NumGlyphs = 3 + end + object Edit1: TEdit + Left = 8 + Top = 216 + Width = 217 + Height = 37 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 3 + OnKeyPress = Edit1KeyPress + end + object ComboBox1: TComboBox + Left = 232 + Top = 144 + Width = 113 + Height = 28 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ItemHeight = 20 + ParentFont = False + TabOrder = 4 + OnChange = ComboBox1Change + end + object DsATickets: TDataSource + DataSet = TbTickets + Left = 136 + Top = 128 + end + object TbTickets: TTable + SessionName = 'AccesosCAP' + TableName = 'datos\accesos.db' + Left = 136 + Top = 160 + end + object TbVentas: TTable + TableName = 'datos\TbFacturas.db' + Left = 168 + Top = 160 + end + object TbPrecios: TTable + IndexFieldNames = 'Tiempo' + TableName = 'datos\precios.db' + Left = 200 + Top = 160 + end + object Session1: TSession + Active = True + SessionName = 'AccesosCAP' + Left = 96 + Top = 160 + end + object sql: TQuery + SessionName = 'AccesosCAP' + RequestLive = True + Left = 168 + Top = 200 + end +end diff --git a/cap_gestion/tickets.h b/cap_gestion/tickets.h new file mode 100644 index 0000000..9289f22 --- /dev/null +++ b/cap_gestion/tickets.h @@ -0,0 +1,80 @@ +//--------------------------------------------------------------------------- + +#ifndef ticketsH +#define ticketsH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include "DigitNum.h" +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TfTickets : public TForm +{ +__published: // IDE-managed Components + TPanel *Panel1; + TLabel *Label1; + TBevel *Bevel1; + TImage *CardOK; + TBitBtn *BitBtn1; + TBevel *Bevel2; + TBevel *Bevel3; + TBitBtn *BitBtn2; + TEdit *Edit1; + TLabel *Label2; + TLabel *Label3; + TComboBox *ComboBox1; + TDataSource *DsATickets; + TTable *TbTickets; + TTable *TbVentas; + TTable *TbPrecios; + TLabel *Label4; + TLabel *Label5; + TSession *Session1; + TLabel *Label6; + TLabel *Label7; + TDigitNum *DigitNum1; + TDigitNum *DigitNum2; + TRadioGroup *RadioGroup1; + TQuery *sql; + void __fastcall BitBtn1Click(TObject *Sender); + void __fastcall BitBtn2Click(TObject *Sender); + void __fastcall ComboBox1Change(TObject *Sender); + void __fastcall Edit1KeyPress(TObject *Sender, char &Key); + void __fastcall FormDestroy(TObject *Sender); +private: // User declarations + int __fastcall obtenerTicket(void); + + + void __fastcall ObtenDirLEGOS(AnsiString cadena, int &nLEGOS, int **ID); + int __fastcall NDias( TDateTime E, TDateTime S ); + int __fastcall NMinutos( TDateTime hE, TDateTime hS ); + Currency __fastcall CalculaCoste( int Minutos, int Dias ); + + TStringList *ticketE,*ticketS; + + void __fastcall ticket_Imprimir(int idt,char tipo,Currency pvp,int mm,TDateTime fechaE,TDateTime fechaS); + AnsiString __fastcall ticket_parsearLinea(AnsiString linea, int idt, Currency pvp,int mm, TDateTime fechaE, TDateTime fechaS); + bool __fastcall ticket_writeCOM(AnsiString output); + void __fastcall ticket_CerrarPuerto(void); + AnsiString __fastcall ticket_SearchAndReplace(AnsiString l, AnsiString s, AnsiString r ); + HANDLE __fastcall ticket_AbrirPuerto(char *puerto); + HANDLE hCom; + +public: // User declarations + __fastcall TfTickets(TComponent* Owner); + bool __fastcall GrabaTarjeta(int ID); + Currency precioInicial,precioMinuto; +}; +//--------------------------------------------------------------------------- +extern PACKAGE TfTickets *fTickets; +//--------------------------------------------------------------------------- +#endif diff --git a/cap_gestion/tickets.ico b/cap_gestion/tickets.ico new file mode 100644 index 0000000..8e9bcf3 Binary files /dev/null and b/cap_gestion/tickets.ico differ diff --git a/cap_gestion/tnabonados.ico b/cap_gestion/tnabonados.ico new file mode 100644 index 0000000..9e9b6ed Binary files /dev/null and b/cap_gestion/tnabonados.ico differ diff --git a/checksum_gen/CheckSUM.bpr b/checksum_gen/CheckSUM.bpr new file mode 100644 index 0000000..b393314 --- /dev/null +++ b/checksum_gen/CheckSUM.bpr @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] +C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl\LM2000_vcl.bpl=Funciones para el Manejo del LM2000 + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\Projects\Lib;..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/checksum_gen/CheckSUM.exe b/checksum_gen/CheckSUM.exe new file mode 100644 index 0000000..fa50147 Binary files /dev/null and b/checksum_gen/CheckSUM.exe differ diff --git a/checksum_gen/CheckSUM.res b/checksum_gen/CheckSUM.res new file mode 100644 index 0000000..1392cb0 Binary files /dev/null and b/checksum_gen/CheckSUM.res differ diff --git a/checksum_gen/checksum.cpp b/checksum_gen/checksum.cpp new file mode 100644 index 0000000..99b8d98 --- /dev/null +++ b/checksum_gen/checksum.cpp @@ -0,0 +1,22 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("CheckSUM.res"); +USEFORM("mchecksum.cpp", Form3); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TForm3), &Form3); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/checksum_gen/checksum.dfm b/checksum_gen/checksum.dfm new file mode 100644 index 0000000..4d8ada1 --- /dev/null +++ b/checksum_gen/checksum.dfm @@ -0,0 +1,104 @@ +object Form3: TForm3 + Left = 447 + Top = 134 + BorderStyle = bsDialog + Caption = 'www.infdj.com' + ClientHeight = 148 + ClientWidth = 194 + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 20 + object Label1: TLabel + Left = 40 + Top = 56 + Width = 119 + Height = 20 + Caption = 'http://jd.infdj.com' + end + object Image1: TImage + Left = 48 + Top = 8 + Width = 100 + Height = 41 + AutoSize = True + Picture.Data = { + 0A544A504547496D616765EC060000FFD8FFE000104A46494600010100000100 + 010000FFDB0043000B08080A08070B0A090A0D0C0B0D111C12110F0F1122191A + 141C29242B2A282427272D3240372D303D302727384C393D43454849482B364F + 554E465440474845FFDB0043010C0D0D110F1121121221452E272E4545454545 + 4545454545454545454545454545454545454545454545454545454545454545 + 45454545454545454545454545FFC00011080029006403012200021101031101 + FFC4001F0000010501010101010100000000000000000102030405060708090A + 0BFFC400B5100002010303020403050504040000017D01020300041105122131 + 410613516107227114328191A1082342B1C11552D1F02433627282090A161718 + 191A25262728292A3435363738393A434445464748494A535455565758595A63 + 6465666768696A737475767778797A838485868788898A92939495969798999A + A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 + D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 + 01010101010101010000000000000102030405060708090A0BFFC400B5110002 + 0102040403040705040400010277000102031104052131061241510761711322 + 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 + 292A35363738393A434445464748494A535455565758595A636465666768696A + 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 + A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 + E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00F5BA + 28A2802B5F6A16DA6C1E75DCA235CE14752C7D001C93EC2B97BFD62EF5261196 + 6B2B67C8588362597EA47DDFA0E7DEA8EB17327DBEE6E00135D35C1B58031E13 + 9C01EC3824E39355AF34C1A45C477575219EF23B779DDDBF873C2803B0EBC0AE + 88534929485734746B99AC747D4E7B30AA1EE4450291F2A9E13763F026A9F937 + 7A8EA46D606927995434B3CF231C67A000100559B7BAB28BC29F6013B0BA8F0E + 5C44EC82504360B018EBC1F4CD41A4EACB1DD8D52C479E8CBE55D40A46E18E98 + FF006864F1DC7E157A5DE9A81666D3B5BD3D3E67BA9201D7ECB70D91EFB589FD + 0FE157749F1579712AEA6DBE1CED17AAB803DA45FE13EA7A7D2BA1B1D46D3538 + 7CDB499655FE2038653E847507D8D71FE2ADB6DAA49FD9F2224F288BCD4232BB + CB6D191EA549CFB006B14F99DAC0772AC1D4329041190477A5AE33C35A8BD95D + C762EAC96B3B32244C726DE55EA83FD938247A7E35D9D44A3618514515201451 + 450014521207520573DE2577927B4B7F35D60657775472BBC82A0648EDC9E2AA + 3172764026BDE19FB73C9716655669306589F212523A1E39561818615C96A52C + C74C9E7BA9649252E11C4ACBBCAC6795523863C1FAE6B5F47D6FFB3B41993CD0 + F7CF239109CE203D32C4F451D7DFB75A67876C5752D4D67605ACAD13646CE31E + 631FBCDF8FF8D6D0566EFD0457D22DEFEF239858181A3B608042E082C0A86CEE + F7C9ED505C59C52DD9C8974CD4C8EB80ACFF00FB2B8AD9B9F0DDCDA5DB49A5DC + 2AA104262528E8A4E76120FCCA0F4CF22AFE93A0471E992DB6AAD1DCF9B26FC3 + 1CED38C71924F6F5A7CEEDAEC07258BB8E51FDA315BB30E05DA23007EA54E57F + 9569D8699668D1DF5FEA3662DA16DEA90B82BBBD7A92CDF5E6B525F0D3C27FD0 + 7512A9D92621C0FA13CFEB558F866F25932F796F1FABC68A1FF3EB5575BAFEBF + AF40294570DA9F89E2F22229BAE3ED0EA4731A85DABBBD18F5C76AEFEB274CD2 + 2DB46B493EC89E6CA01627392C7FFAF5C6DE5DDE5F4C6E24B813AA266584F488 + F71B323007E7C739A8E5F69EEC7A01E9151CD3C56F19926912341D59D801F99A + E32C3C51259DB8B48765D8822DFE6CACCBE62E33F2F1E87BFF002E6B3753D427 + D62E2D25176B14B37CD12AAB1545238C64753824E40CF4E82A55193760B9E8E9 + 22488AE8C195864329C8228AE0F44D5AEAC2C4DBDAC325DDB239F2A56382471F + 9F39E68AAFAB4C2E6AEA3A65FCFA9492E4BC6461413C0A2D3C3934D6E16EA591 + 248D8B44EADCA83D47B8E9F95753454BAF37151E868E4BB1CDC7E0F8649035ED + C497201C8463F28FC3A5686A3A579BA68B6B4222DA41C0EFF5AD4A2A7DACAE99 + 0725FD8B7838F2D7F3A3FB16F3FE792FE75D6D15A7D66A1578F6392FEC5BCFF9 + E4BF9D1FD8B79FF3C97F3AEB68A3EB3502F1EC71E340D4BF7DE54A63DE065031 + 0180EA091C8CD545F08EA178CE9332DAC450C602396C03CE33E99EDF86715DDD + 2527889B7762934CE15BC25A85EDD4BE798A057428CD1B160FC63383D070381D + 71D69FFF0008AEA518332181A551E5AA72005DBB463BFAFE7DABB8A4A7F58913 + 633B45D3DB4FD2A0B6942978D70481D68AD2A2B1949C9DD8CFFFD9} + Stretch = True + end + object Edit1: TEdit + Left = 0 + Top = 88 + Width = 193 + Height = 28 + TabOrder = 0 + OnChange = Edit1Change + end + object Edit2: TEdit + Left = 0 + Top = 120 + Width = 193 + Height = 28 + TabOrder = 1 + end +end diff --git a/checksum_gen/mchecksum.cpp b/checksum_gen/mchecksum.cpp new file mode 100644 index 0000000..028a464 --- /dev/null +++ b/checksum_gen/mchecksum.cpp @@ -0,0 +1,34 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "mchecksum.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm3 *Form3; +//--------------------------------------------------------------------------- +__fastcall TForm3::TForm3(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm3::Edit1Change(TObject *Sender) +{ + char *cadena; + cadena = Edit1->Text.c_str(); + int CHK, i; + CHK = 0; + for ( i=0; cadena[i] != NULL; i++ ) + { + CHK += cadena[i]; + } + + Edit2->Text = AnsiString( ( CHK - ( (CHK / 10000)*10000 ) ) ); + +} +//--------------------------------------------------------------------------- + diff --git a/checksum_gen/mchecksum.dfm b/checksum_gen/mchecksum.dfm new file mode 100644 index 0000000..4d8ada1 --- /dev/null +++ b/checksum_gen/mchecksum.dfm @@ -0,0 +1,104 @@ +object Form3: TForm3 + Left = 447 + Top = 134 + BorderStyle = bsDialog + Caption = 'www.infdj.com' + ClientHeight = 148 + ClientWidth = 194 + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 20 + object Label1: TLabel + Left = 40 + Top = 56 + Width = 119 + Height = 20 + Caption = 'http://jd.infdj.com' + end + object Image1: TImage + Left = 48 + Top = 8 + Width = 100 + Height = 41 + AutoSize = True + Picture.Data = { + 0A544A504547496D616765EC060000FFD8FFE000104A46494600010100000100 + 010000FFDB0043000B08080A08070B0A090A0D0C0B0D111C12110F0F1122191A + 141C29242B2A282427272D3240372D303D302727384C393D43454849482B364F + 554E465440474845FFDB0043010C0D0D110F1121121221452E272E4545454545 + 4545454545454545454545454545454545454545454545454545454545454545 + 45454545454545454545454545FFC00011080029006403012200021101031101 + FFC4001F0000010501010101010100000000000000000102030405060708090A + 0BFFC400B5100002010303020403050504040000017D01020300041105122131 + 410613516107227114328191A1082342B1C11552D1F02433627282090A161718 + 191A25262728292A3435363738393A434445464748494A535455565758595A63 + 6465666768696A737475767778797A838485868788898A92939495969798999A + A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 + D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 + 01010101010101010000000000000102030405060708090A0BFFC400B5110002 + 0102040403040705040400010277000102031104052131061241510761711322 + 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 + 292A35363738393A434445464748494A535455565758595A636465666768696A + 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 + A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 + E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00F5BA + 28A2802B5F6A16DA6C1E75DCA235CE14752C7D001C93EC2B97BFD62EF5261196 + 6B2B67C8588362597EA47DDFA0E7DEA8EB17327DBEE6E00135D35C1B58031E13 + 9C01EC3824E39355AF34C1A45C477575219EF23B779DDDBF873C2803B0EBC0AE + 88534929485734746B99AC747D4E7B30AA1EE4450291F2A9E13763F026A9F937 + 7A8EA46D606927995434B3CF231C67A000100559B7BAB28BC29F6013B0BA8F0E + 5C44EC82504360B018EBC1F4CD41A4EACB1DD8D52C479E8CBE55D40A46E18E98 + FF006864F1DC7E157A5DE9A81666D3B5BD3D3E67BA9201D7ECB70D91EFB589FD + 0FE157749F1579712AEA6DBE1CED17AAB803DA45FE13EA7A7D2BA1B1D46D3538 + 7CDB499655FE2038653E847507D8D71FE2ADB6DAA49FD9F2224F288BCD4232BB + CB6D191EA549CFB006B14F99DAC0772AC1D4329041190477A5AE33C35A8BD95D + C762EAC96B3B32244C726DE55EA83FD938247A7E35D9D44A3618514515201451 + 450014521207520573DE2577927B4B7F35D60657775472BBC82A0648EDC9E2AA + 3172764026BDE19FB73C9716655669306589F212523A1E39561818615C96A52C + C74C9E7BA9649252E11C4ACBBCAC6795523863C1FAE6B5F47D6FFB3B41993CD0 + F7CF239109CE203D32C4F451D7DFB75A67876C5752D4D67605ACAD13646CE31E + 631FBCDF8FF8D6D0566EFD0457D22DEFEF239858181A3B608042E082C0A86CEE + F7C9ED505C59C52DD9C8974CD4C8EB80ACFF00FB2B8AD9B9F0DDCDA5DB49A5DC + 2AA104262528E8A4E76120FCCA0F4CF22AFE93A0471E992DB6AAD1DCF9B26FC3 + 1CED38C71924F6F5A7CEEDAEC07258BB8E51FDA315BB30E05DA23007EA54E57F + 9569D8699668D1DF5FEA3662DA16DEA90B82BBBD7A92CDF5E6B525F0D3C27FD0 + 7512A9D92621C0FA13CFEB558F866F25932F796F1FABC68A1FF3EB5575BAFEBF + AF40294570DA9F89E2F22229BAE3ED0EA4731A85DABBBD18F5C76AEFEB274CD2 + 2DB46B493EC89E6CA01627392C7FFAF5C6DE5DDE5F4C6E24B813AA266584F488 + F71B323007E7C739A8E5F69EEC7A01E9151CD3C56F19926912341D59D801F99A + E32C3C51259DB8B48765D8822DFE6CACCBE62E33F2F1E87BFF002E6B3753D427 + D62E2D25176B14B37CD12AAB1545238C64753824E40CF4E82A55193760B9E8E9 + 22488AE8C195864329C8228AE0F44D5AEAC2C4DBDAC325DDB239F2A56382471F + 9F39E68AAFAB4C2E6AEA3A65FCFA9492E4BC6461413C0A2D3C3934D6E16EA591 + 248D8B44EADCA83D47B8E9F95753454BAF37151E868E4BB1CDC7E0F8649035ED + C497201C8463F28FC3A5686A3A579BA68B6B4222DA41C0EFF5AD4A2A7DACAE99 + 0725FD8B7838F2D7F3A3FB16F3FE792FE75D6D15A7D66A1578F6392FEC5BCFF9 + E4BF9D1FD8B79FF3C97F3AEB68A3EB3502F1EC71E340D4BF7DE54A63DE065031 + 0180EA091C8CD545F08EA178CE9332DAC450C602396C03CE33E99EDF86715DDD + 2527889B7762934CE15BC25A85EDD4BE798A057428CD1B160FC63383D070381D + 71D69FFF0008AEA518332181A551E5AA72005DBB463BFAFE7DABB8A4A7F58913 + 633B45D3DB4FD2A0B6942978D70481D68AD2A2B1949C9DD8CFFFD9} + Stretch = True + end + object Edit1: TEdit + Left = 0 + Top = 88 + Width = 193 + Height = 28 + TabOrder = 0 + OnChange = Edit1Change + end + object Edit2: TEdit + Left = 0 + Top = 120 + Width = 193 + Height = 28 + TabOrder = 1 + end +end diff --git a/checksum_gen/mchecksum.h b/checksum_gen/mchecksum.h new file mode 100644 index 0000000..dc62cbc --- /dev/null +++ b/checksum_gen/mchecksum.h @@ -0,0 +1,28 @@ +//--------------------------------------------------------------------------- + +#ifndef checksumH +#define checksumH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TForm3 : public TForm +{ +__published: // IDE-managed Components + TLabel *Label1; + TImage *Image1; + TEdit *Edit1; + TEdit *Edit2; + void __fastcall Edit1Change(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TForm3(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm3 *Form3; +//--------------------------------------------------------------------------- +#endif diff --git a/doc/capg_cfg.htm b/doc/capg_cfg.htm new file mode 100644 index 0000000..cd4c2eb --- /dev/null +++ b/doc/capg_cfg.htm @@ -0,0 +1,67 @@ + + + + + +CAPG: Configuración + + + +
+ + + + + + + + + + + +
3.2. CAP: Configuración (CAPG)
+

 

+

La aplicación fue + diseñada pensando en la mayor facilidad de uso + posible, por eso hemos reducido la configuración al + máximo posible.

+

 

+

3.2.1 Tipos de + Abonados

+

Permite definir los distintos + tipos de abonados, y personalizar el mensaje de + acceso (solo para lectores con visor).

+

En la versión PRO de la + aplicación cada tipo de usuario tiene asociado + tambien franjas horarias individuales para cada dia + de la semana. Permitiendo parametrizar los accesos en + franjas horarias ¡incluso partidas!.

+

 

+

3.2.2 Tarifas NO + abonados

+

Desde aqui configuraremos las + tarifas a los clientes ocacionales. Basta con + introducir (en minutos), pares de TIEMPO-PRECIO, + ejemplo:

+

+

En la imagen podemos ver como + se han asignado 30€ a los vehiculos que han + permanecido entre 15minutos y 60 minutos.

+

Para expresar Días, basta + sumarle "9000" al número de días. En la + imagen 9001 equivale a un día con el coste de + 100€ y 9002 equivale a 200€ por dos días.

+
+
<< Retroceder - Indice - Avanzar >>
+
+ + diff --git a/doc/capg_efactura.htm b/doc/capg_efactura.htm new file mode 100644 index 0000000..c04a005 --- /dev/null +++ b/doc/capg_efactura.htm @@ -0,0 +1,63 @@ + + + + + +CAPG: Emisión de Facturas + + + +
+ + + + + + + + + + + +
6. CAP: Emisión de Facturas + (CAPG)
+

 

+

6. Emisión de + Facturas

+

La emisión periodica de + recibos se controla desde este módulo.

+

Lo único que hay que indicar + es el mes y año para el que queremos realizar la + emisión. Tras esto se generaran recibos para todos + los abonados según la periodicidad de su ficha, y + siguiendo los siguientes criterios:

+
    +
  • Solo se emitirán + facturas, a los clientes cuya última factura + este abonada.
  • +
  • Aquellos clientes cuya + última factura este impagada, pasarán a + "baja-temporal".
  • +
  • El periodo de validez + del último abono, no este vigente dentro del + mes seleccionado.
  • +
  • La emisión se + realizará con un periodo igual al + seleccionado actualmente en su ficha.
  • +
+

NOTA!
+ __ Tenga en cuenta que una emisión completa no puede + ser anulada de forma automática, solo de forma + manual e individualmente abonado por abonado.

+
+
<< Retroceder - Indice - Avanzar >>
+
+ + diff --git a/doc/capg_factura.htm b/doc/capg_factura.htm new file mode 100644 index 0000000..3171083 --- /dev/null +++ b/doc/capg_factura.htm @@ -0,0 +1,53 @@ + + + + + +CAPG: Facturacion + + + +
+ + + + + + + + + + + +
5. CAP: Facturación (CAPG)
+

 

+

5. Facturación + (información)

+

Este módulo, permite + realizar un seguimiento de las facturas pendientes de + pago, asi como los beneficios generados por la + entrada de no abonados.

+

La información mostrada es + bastante simple:

+

En primer lugar basta que + seleccionemos, el rango de fechas entre las cuales + queremos visualizar los datos y oprimamos el boto + "calcular", hecho esto aparecerá el + recuento monetario generado entre esas fechas por + abonados normales y ocasionales.

+

Para ver las facturas + pendientes solo hay que pulsar el boton + "Impagados"; para que se muestren el nº de + recibo, fecha, importe y nombre del impagado.

+
+
<< Retroceder - Indice - Avanzar >>
+
+ + diff --git a/doc/capg_ficha.htm b/doc/capg_ficha.htm new file mode 100644 index 0000000..53f43e6 --- /dev/null +++ b/doc/capg_ficha.htm @@ -0,0 +1,79 @@ + + + + + +CAPG: Ficha de abonados + + + +
+ + + + + + + + + + + +
4. CAP: Localización de Abonados + (CAPG)
+

 

+

3.2.1 Ficha de + Abonados

+

Una vez localizado al + abonado, solo queda realizar doble click sobre él + para ver su ficha completa, la cual esta dividida en + tres partes:

+
    +
  1. Datos del abonado
  2. +
  3. Vehiculos del abonado
  4. +
  5. Histórico de facturas + (incluyendo las pendientes)
  6. +
+

1.- Los datos del abonado, + contiene la información básica del mismo, como + datos de contacto, tipo de abonado (definidos + previamente), y periodo de facturación al que se + encuentra acogido.

+

La primera vez, que damos de + alta a un abonado, o en caso de renovaciones de + recibos aperiodicos, podemos forzar la generación de + un recibo nuevo, pulsando el boton "Generar + Recibo".

+

2.- Vehiuculos del abonado, + contiene un lista de todos los posibles vehiculos que + usa un abonado determinado, esta lista contiene datos + básicos como son "matricula", + "marca", "color", e indicación + de si posee una tarjeta grabada o no.

+

Para grabar/verificar ó + incluso volver a grabar una tarjeta de abonado, solo + tenemos que entrar en su ficha, y pulsar doble clic + en el espacio destinado al indicador de tarjeta + grabada. (ver + "como grabar una tarjeta")

+

3.- Datos de facturas, + continene el histórico de todas las facturas + emitidas al abonado actual, y es aqui donde podemos + cambiar el estado de una factura de impagada a + impagada.( Tambien es posible el proceso inverso, + siempre que se indique la contraseña + administrativa).

+
+
<< Retroceder - Indice - Avanzar >>
+
+ + diff --git a/doc/capg_localizacion.htm b/doc/capg_localizacion.htm new file mode 100644 index 0000000..c365d31 --- /dev/null +++ b/doc/capg_localizacion.htm @@ -0,0 +1,61 @@ + + + + + +CAPG: Localización de abonados + + + +
+ + + + + + + + + + + +
3.3. CAP: Localización de + Abonados (CAPG)
+

 

+

El módulo de + gestión de abonados esta 100% integrado en un único + formulario, proporcionando una mayor facilidad de uso + y potencia. Resta solo acostumbrase al sistema de + solapas horizontales y verticales.

+

 

+

3.3.1 Localización + de Abonados

+

Lo primero que podemos + observar es la lista de abonados con los datos mas + importantes, como el DNI, Nombre, y Teléfonos, + bastará hacer doble click sobre cualquiera para + traer al frente la ficha completa de ese abonado.

+

A la hora de localizar un + abonado en particular podemos usar el localizador + rápido (ver imagen), en el cual indicaremos el campo + por el que buscar y las primeras letras de lo que + buscamos.

+

La busqueda de matriculas es + algo distinta, para esta solo hay que introducir la + matricula, y pulsar el boton "Matriculas".

+

+

 

+
+
<< Retroceder - Indice - Avanzar >>
+
+ + diff --git a/doc/capg_menu.htm b/doc/capg_menu.htm new file mode 100644 index 0000000..8859ca9 --- /dev/null +++ b/doc/capg_menu.htm @@ -0,0 +1,66 @@ + + + + + +CAPG: Menú Principal + + + +
+ + + + + + + + + + + +
3. CAP: Módulo de gestion (CAPG)
+

 

+

El módulo de + gestión, es el encargado de dar de alta y actualizar + las tarjetas que posteriormente utilizará el + "motor de control", y gestionar los + historicos que genera el "motor".

+

Permite mantener + actualizada la información de los abonados, sus + vehiculos, e historicos de facturas asi como las + facturas en curso.

+

Este módulo es el + encargado también de emitir los pases ocacionales.

+

3.1 Menú Principal

+

Proporciona acceso al resto + de la aplicación, a continuación se describen las + distintas partes.

+

+

>> Gestion de + Abonados

+

Altas y mantenimiento de los + abonados, permitiendo busquedas rápidas y complejas + con gran facilidad. Cada ficha de abonado mantiene a + demas de todos sus datos, un listado de vehiculos que + posee, siendo a estos a los que se le asocia el pase + (permitiendo asi varios pases para un mismo cliente).

+

>> + Configuración

+

>> Facturación + / Emisión de facturas

+

>> Tickets

+

>> Estadisticas

+
+
<< Retroceder - Indice - Avanzar >>
+
+ + diff --git a/doc/capg_ticket.htm b/doc/capg_ticket.htm new file mode 100644 index 0000000..1fe82ba --- /dev/null +++ b/doc/capg_ticket.htm @@ -0,0 +1,62 @@ + + + + + +CAPG: Tickets + + + +
+ + + + + + + + + + + +
4. CAP: Tickets (CAPG)
+

 

+

4. Tickets

+

La emisión de tickets, será + el proceso normal y casi exclusivo, que tendrá que + atender el operario de la aplicación.

+

Para permitir la entrada a un + vehiculo no abonado, y quede un registro de tiempo + automático, debe EXPENDERSE, un ticket.

+

Al pulsar sobre el boton + EXPENDER/BUSCAR, la aplicación permitira grabar una + tarjeta y nos dará un número de ticket el cual + debemos anotar en el reverso de dicha tarjeta, para + su posterior cobro.

+

Cuando el cliente desee + retirar su vehiculo, lo primero que debe hacer es + pasar por caja, y mostrar su tarjeta (lo que nos + interesa es el número de ticket que habiamos + apuntado previamente). Dicho número de ticket, + debemos introducirlo en el recuadro correspondiente, + tras lo cual, la pantalla del ticket se expandirá, + indicando la fecha y hora de entrada, duracion de la + estancia, e importe a facturar (según tabla de + importes). (ver + "Conf.Tarifas no Abonados")

+
+
<< Retroceder - Indice - Avanzar >>
+
+ + diff --git a/doc/control.htm b/doc/control.htm new file mode 100644 index 0000000..a520624 --- /dev/null +++ b/doc/control.htm @@ -0,0 +1,73 @@ + + + + + +CAP: 2.1 Ejecución + + + +
+ + + + + + + + + + + +
2. Motor de Control
+

 

+

2.1 Ejecución

+

Al ejecutar el sistema de + control, este se colocará junto al reloj, + representando una parabólica de comunicaciones.

+

+

 

+

Cualquier entrada/salida + efectuada, será registrada por el sistema mientras + la aplicación de control se encuentre en + funcionamiento.

+

Si se realiza 'click' con el + boton derecho del raton, nos mostrará un menú en el + que podremos elegir entre:

+
    +
  • Propiedades:
    + Muestra las propiedades, y configuraciones + del motor de control. (
    vease + configuracion).
  • +
  • Estado:
    + Funcion no disponible en esta versión del + control.
  • +
  • Desactivar/Activar:
    + Desactiva "temporalmente", la + comunicación con los dispositivos externos.
  • +
  • Salir:
    + Finaliza la comunicación con el LM2000 y + finalizar la ejecución de la aplicación.
    + Notese que la aplicación no finaliza hasta + no finalizar totalmente la comunicación con + el LM2000.
  • +
  • Acerca de:
    + Muestra infórmación sobre el equipo de + desarrollo
  • +
+
+
<< Retroceder - Indice - Avanzar >>
+
+ + diff --git a/doc/images/Thumbs.db b/doc/images/Thumbs.db new file mode 100644 index 0000000..0517cdd Binary files /dev/null and b/doc/images/Thumbs.db differ diff --git a/doc/images/capg_localizador.jpg b/doc/images/capg_localizador.jpg new file mode 100644 index 0000000..7694a94 Binary files /dev/null and b/doc/images/capg_localizador.jpg differ diff --git a/doc/images/capg_menu.jpg b/doc/images/capg_menu.jpg new file mode 100644 index 0000000..2b36a06 Binary files /dev/null and b/doc/images/capg_menu.jpg differ diff --git a/doc/images/capg_tarifas.jpg b/doc/images/capg_tarifas.jpg new file mode 100644 index 0000000..f103669 Binary files /dev/null and b/doc/images/capg_tarifas.jpg differ diff --git a/doc/images/capg_ticket.jpg b/doc/images/capg_ticket.jpg new file mode 100644 index 0000000..b54b158 Binary files /dev/null and b/doc/images/capg_ticket.jpg differ diff --git a/doc/images/control_cfg.jpg b/doc/images/control_cfg.jpg new file mode 100644 index 0000000..a04cc15 Binary files /dev/null and b/doc/images/control_cfg.jpg differ diff --git a/doc/images/control_cfg_tabs.jpg b/doc/images/control_cfg_tabs.jpg new file mode 100644 index 0000000..91074d4 Binary files /dev/null and b/doc/images/control_cfg_tabs.jpg differ diff --git a/doc/images/tray.jpg b/doc/images/tray.jpg new file mode 100644 index 0000000..a4dd271 Binary files /dev/null and b/doc/images/tray.jpg differ diff --git a/doc/indice.htm b/doc/indice.htm new file mode 100644 index 0000000..8ace1ab --- /dev/null +++ b/doc/indice.htm @@ -0,0 +1,102 @@ + + + + + +Cap + + + +
+ + + + + +
+ + + + +
Cap

Acceso

+

Parkings

+ + + + + + + + + +
Por:José + David Guillén
 http://jd.infdj.com
+
http://www.infdj.com
+
    +
  1. Introducción
  2. +
  3. Motor de control
      +
    1. Ejecución
    2. +
    3. Configuración
    4. +
    +
  4. +
  5. Sistema de Gestión
      +
    1. Menú del programa
    2. +
    3. Configuración
        +
      1. Tipos de + Abonados
      2. +
      3. Tarifas no + abonados
      4. +
      +
    4. +
    5. Gestión de + abonados
        +
      1. Localización
      2. +
      3. Ficha + abonados
          +
        1. Datos + Generales
        2. +
        3. Datos + Vehiculos
        4. +
        5. Datos + Facturas
        6. +
        +
      4. +
      +
    6. +
    7. Tickets
    8. +
    9. Facturación (información)
        +
      1. General
      2. +
      3. Impagados
      4. +
      +
    10. +
    11. Emisión de + facturas
    12. +
    +
  6. +
+
+
+
+ + diff --git a/doc/introduccion.htm b/doc/introduccion.htm new file mode 100644 index 0000000..6bc254a --- /dev/null +++ b/doc/introduccion.htm @@ -0,0 +1,65 @@ + + + + + +CAP: 1. Introducción + + + +
+ + + + + + + + + + + +
1. Introducción

Control + Acceso Parkings

+
+

CAP es una aplicación para + el control de accesos a parkings, permitiendo el + control tanto de usuarios abonados como no abonados.

+

Abonados:

+
    +
  • Permite llevar un + control de fichas de clientes abonados con + periodos quincenales, mensuales, bimestrales + y anuales, permitiendo también abonos + aperiodicos.
  • +
  • Cada abonado puede + poseer varios pases independientes, (tantos + como vehiculos tenga registrado a su nombre).
  • +
+

No Abonados:

+
    +
  • Los clientes eventuales + tambien son controlados por el sistema, una + vez se les proporciona un "Ticket", + este es registrado (sin acceso de salida), + hasta el momento que sea abonado.
  • +
  • El metodo usado para los + calculos de precios, proporciona una gran + flexibilidad en cuanto a las distintas + tarificaciones que pudieran existir.
  • +
+
+
<< Retroceder - Indice - Avanzar >>
+
+ + diff --git a/doc/motor_cfg.htm b/doc/motor_cfg.htm new file mode 100644 index 0000000..762db8a --- /dev/null +++ b/doc/motor_cfg.htm @@ -0,0 +1,92 @@ + + + + + +CAP: 2.2 Configuración + + + +
+ + + + + + + + + + + +
2. Motor de Control
+

 

+

2.2 Configuración

+

La ventana de propiedades del + "motor de control", muestra tres partes + claramente diferenciadas, en forma de solapas (ver + imagen).

+

+

> + General

+

La información + mostrada depende de la versión de "motor", + que este usando, aunque todos tienen en común el + aforo actualmente ocupado ó lo que es lo mismo el + número de pases que se encuentran dentro + del recinto.

+

> + Historial denegados

+

Este historial + guarda los últimos 500 movimientos, producidos por + fallos en el acceso o movimientos incorrectos + (siempre que la casilla "guardar historial" + este marcada).

+

El historial + puede ser eliminado en cualquier momento mediante el + boton "bote de basura" de la derecha".
+ Aunque la eliminacion de este historial no tiene + ningun efecto sobre el historial de entradas/salidas + registradas por la aplicación.

+

> + Configuración

+

El proceso de + configuración se ha simplificado al máximo, de este + modo el "motor", esta listo para funcionar + en cuestion de minutos.

+

Lo primero que + debemos indicar, es el puerto donde tenemos + conectados al LM2000 (por defecto se colocara en + COM1), y los ID's de estos (por defecto 1), separados + por "punto y coma".

+

Tambien + indacaremos la capacidad del recinto y el mensaje a + mostrar en caso de que este se encuenre lleno (solo + se visualizará en los lectores que dispongan de + display).

+

Por último, + debemos indicar la ubicación de nuestra base de + datos ( HOST, LOGIN, PASSWORD ), el nombre de la base + de datos ( por defecto "CAPC" ), debe + cambiarse manualmente en el archivo de configuración + local.
+ En el caso de usar una base de datos NO CONECTADA a + un servidor SQL, como HOST debemos indicar el + directorio en la cual se encuentran los datos ( un + "punto" por defecto ).

+
+

+
<< Retroceder - Indice - Avanzar >>
+
+ + diff --git a/doc/protocollo di comunic inglese v3.1.doc b/doc/protocollo di comunic inglese v3.1.doc new file mode 100644 index 0000000..eee96f1 Binary files /dev/null and b/doc/protocollo di comunic inglese v3.1.doc differ diff --git a/instalador/Instalador.cpp b/instalador/Instalador.cpp new file mode 100644 index 0000000..7f9e888 --- /dev/null +++ b/instalador/Instalador.cpp @@ -0,0 +1,56 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "Instalador.h" +#include + +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm1 *Form1; +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Image1Click(TObject *Sender) +{ + char zFileName[80], zParams[80], zDir[80]; + ShellExecute(Application->MainForm->Handle, 0, StrPCopy(zFileName, "http:\\\\www.infdj.com"), + StrPCopy(zParams, ""), StrPCopy(zDir, ""), SW_SHOWNOACTIVATE > 32); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button2Click(TObject *Sender) +{ + char zFileName[80], zParams[80], zDir[80]; + ShellExecute(Application->MainForm->Handle, 0, StrPCopy(zFileName, "setup.exe"), + StrPCopy(zParams, ""), StrPCopy(zDir, ""), SW_SHOWNOACTIVATE > 32); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button1Click(TObject *Sender) +{ + char zFileName[80], zParams[80], zDir[80]; + ShellExecute(Application->MainForm->Handle, 0, StrPCopy(zFileName, "motor\\InstallEngine.exe"), + StrPCopy(zParams, ""), StrPCopy(zDir, ""), SW_SHOWNOACTIVATE > 32); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Image2Click(TObject *Sender) +{ + ShowMessage( "Si necesita crear una distribución\ndel Guardian en discos, copie el\nfichero GUARDIAN.EXE manualmente." ); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button3Click(TObject *Sender) +{ + char zFileName[80], zParams[80], zDir[80]; + ShellExecute(Application->MainForm->Handle, 0, StrPCopy(zFileName, "motor\\hdd32.exe"), + StrPCopy(zParams, ""), StrPCopy(zDir, ""), SW_SHOWNOACTIVATE > 32); + +} +//--------------------------------------------------------------------------- + diff --git a/instalador/Instalador.dfm b/instalador/Instalador.dfm new file mode 100644 index 0000000..9c54353 Binary files /dev/null and b/instalador/Instalador.dfm differ diff --git a/instalador/Instalador.h b/instalador/Instalador.h new file mode 100644 index 0000000..812243e --- /dev/null +++ b/instalador/Instalador.h @@ -0,0 +1,40 @@ +//--------------------------------------------------------------------------- +#ifndef InstaladorH +#define InstaladorH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TImage *Image1; + TBevel *Bevel1; + TLabel *Label1; + TLabel *Label2; + TBevel *Bevel2; + TButton *Button1; + TLabel *Label3; + TLabel *Label4; + TBevel *Bevel3; + TButton *Button2; + TLabel *Label5; + TButton *Button3; + TLabel *Label6; + void __fastcall Image1Click(TObject *Sender); + void __fastcall Button2Click(TObject *Sender); + void __fastcall Button1Click(TObject *Sender); + void __fastcall Image2Click(TObject *Sender); + void __fastcall Button3Click(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TForm1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/instalador/Install.bpr b/instalador/Install.bpr new file mode 100644 index 0000000..22f7b02 --- /dev/null +++ b/instalador/Install.bpr @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName=JD Soft +FileDescription=Lanzador de instalaciones +FileVersion=1.0.0.0 +InternalName=instalador +LegalCopyright=JD Soft. 199x-2002 +LegalTrademarks=JD Soft. +OriginalFilename=autorun.EXE +ProductName= +ProductVersion=1.0.0.0 +Comments= +url=http://jd.infdj.com +e-mail=jd@infdj.com + +[Excluded Packages] +$(BCB)\Bin\bcbsmp50.bpl=Borland C++ Sample Components +$(BCB)\Bin\dclado50.bpl=Borland ADO DB Components +$(BCB)\BIN\DCLDB50.BPL=Borland Database Components +C:\WINDOWS\SYSTEM\ibsmp50.bpl=Borland C++ InterBase Alerter Component +$(BCB)\Bin\dclbde50.bpl=Borland BDE DB Components +$(BCB)\Bin\dclqrt50.bpl=QuickReport 3 Package +C:\WINDOWS\SYSTEM\QRPT50.BPL=c:\program files\borland\cbuilder5\Projects\Bpl\qrpt50 +$(BCB)\Bin\dcltee50.bpl=TeeChart 5.0 Components +$(BCB)\Bin\dcldss50.bpl=Borland Decision Cube Components +$(BCB)\Bin\applet50.bpl=Borland Control Panel Applet Package +$(BCB)\Bin\dcltqr50.bpl=TeeChart 5.0 for QuickReport Components Design Package +$(BCB)\Bin\DCLIB50.bpl=InterBase Data Access Components +$(BCB)\Bin\dclsmpedit50.bpl=Borland Editor Script Enhancements +$(BCB)\Bin\dclmid50.bpl=Borland MIDAS Components +$(BCB)\Bin\dclnet50.bpl=Borland Internet Components +$(BCB)\Bin\DBWEBXPRT.BPL=Borland Web Wizard Package +$(BCB)\Bin\DCLNMF50.bpl=NetMasters Fastnet Tools +$(BCB)\Bin\dclwbm50.bpl=Borland InternetExpress Components +$(BCB)\Bin\bcbie50.bpl=Borland C++Builder Internet Explorer 5 Components Package +$(BCB)\Bin\dclocx50.bpl=Borland Sample Imported ActiveX Controls +$(BCB)\Bin\dclite50.bpl=Borland Integrated Translation Environment +$(BCB)\Bin\mfcwizard.bpl=MFC Wizard +$(BCB)\Bin\bcb2kaxserver50.bpl=Borland C++Builder COM Server Components Sample Package +C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\Bpl\asgc5.bpl=TMS software TAdvStringGrid +C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\Bpl\CabForCB.bpl=c:\program\cbuilder\cbuilder5\Projects\Bpl\CabForCB +C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\Bpl\CoolPack.bpl=Cool Forms +C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\Bpl\JDsoft.bpl=c:\program\cbuilder\cbuilder5\Projects\Bpl\JDsoft +C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\Bpl\PhantomPack.bpl=c:\program\cbuilder\cbuilder5\Projects\Bpl\PhantomPack +C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\Bpl\QSElFrm.bpl=d:\program files\borland\cbuilder5\Projects\Bpl\qselfrm +C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\Bpl\RAS_Tools.bpl=RAS Tools +C:\Mis documentos\Fuentes de Programacion\C++ Builder\CAP\LM2000_vcl\LM2000_vcl.bpl=Funciones para el Manejo del LM2000 + +[HistoryLists\hlIncludePath] +Count=6 +Item0=$(BCB)\include;$(BCB)\include\vcl;D:\JDsoft\PrjTPVwin\VCLs\include\;..\..\VCLs\lib;..\..\VCLs\bpl +Item1=$(BCB)\include;$(BCB)\include\vcl;D:\JDsoft\PrjTPVwin\VCLs\include\;..\..\VCLs\lib +Item2=$(BCB)\include;$(BCB)\include\vcl;D:\JDsoft\PrjTPVwin\VCLs\include\;C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\lib +Item3=$(BCB)\include;$(BCB)\include\vcl;D:\JDsoft\PrjTPVwin\VCLs\include\ +Item4=$(BCB)\include;$(BCB)\include\vcl;D:\JDsoft\PrjTPVwin\VCLs\include +Item5=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=6 +Item0=..\prjtpvwin\vcls\lib;$(BCB)\lib\obj;$(BCB)\lib;D:\JDsoft\PrjTPVwin\VCLs\lib\;..\..\VCLs\Bpl +Item1=..\prjtpvwin\vcls\lib;$(BCB)\lib\obj;$(BCB)\lib;D:\JDsoft\PrjTPVwin\VCLs\lib\;C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\Bpl +Item2=..\prjtpvwin\vcls\lib;$(BCB)\lib\obj;$(BCB)\lib;D:\JDsoft\PrjTPVwin\VCLs\lib\ +Item3=..\prjtpvwin\vcls\lib;$(BCB)\lib\obj;$(BCB)\lib;D:\JDsoft\PrjTPVwin\VCLs\lib +Item4=$(BCB)\lib\obj;$(BCB)\lib;D:\JDsoft\PrjTPVwin\VCLs\lib +Item5=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=2 +Item0=_RTLDLL +Item1=_RTLDLL;USEPACKAGES + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + + \ No newline at end of file diff --git a/instalador/Install.cpp b/instalador/Install.cpp new file mode 100644 index 0000000..d6bda80 --- /dev/null +++ b/instalador/Install.cpp @@ -0,0 +1,21 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +USERES("Install.res"); +USEFORM("Instalador.cpp", Form1); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TForm1), &Form1); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/instalador/Install.exe b/instalador/Install.exe new file mode 100644 index 0000000..875335b Binary files /dev/null and b/instalador/Install.exe differ diff --git a/instalador/Install.res b/instalador/Install.res new file mode 100644 index 0000000..6bf80ec Binary files /dev/null and b/instalador/Install.res differ