TPV/TPV_EMP.CPP
2021-09-08 21:44:52 +02:00

1951 lines
68 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <alloc.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <graphics.h>
#include "c:\program\src_dos\libs\make_bot\make_bot.h"
#include "c:\program\src_dos\libs\bdatos\bdatos.hh"
#include "tpv_def.h"
#define NLINEAS_EMPL 6
BDatos BEmpl; // Base de datos de Empleados
INFO_EMPLEADOS SEmpl; // Estructura de Empleados
/*************************************\
| |
| Parte Principal del M¢dulo |
| |
\*************************************/
void MuestraDatosV2Empl( void );
void MuestraDatosVEmpl( int linea);
void MuestraDatosEmpl( long RowStart );
void MuestraAyudaEmpl( char columna );
void EditItemEmpl( char columna, int linea );
void EmplNuevoRegistro( INFO_EMPLEADOS *MSEmpl );
void MuestraEmpl( char columna, int linea, char como );
void ObtenCoordenadasEmpl( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 );
/*************************************\
| |
| Parte Secundaria del M¢dulo |
| |
| Secci¢n de Busqueda de proveedores |
| |
\*************************************/
void ObtenCoordenadasMatchEmpl( char Row, int *X0, int *Y0, int *X1, int *Y1 );
void MatchDrawEmpl( char Row, INFO_EMPLEADOS MEmpl, char como );
void BuscaEmpl( char TipoBusqueda, char *CurrRow, long *CurrEmpl );
int Match_Empl( INFO_EMPLEADOS A, INFO_EMPLEADOS B );
void EditMatchEmpl( char Row, INFO_EMPLEADOS * MEmpl );
int ObtenMatchEmpl( INFO_EMPLEADOS *MEmpl );
/*************************************\
| |
| Parte Tercera del M¢dulo |
| |
| Secci¢n para la impresi¢n |
| |
\*************************************/
void ImprimeCabeceraEmpl( char como, FILE *file_out );
void MuestraImpresionesEmpl( void );
void ImprimeEmpleados( char como );
void ImprimeFichaEmpleado( void );
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// Û Parte principal del m¢dulo Û
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
/**************************************************************************\
|* *|
|* InfoEmpleados *|
|* *|
|* Descripci¢n: *|
|* Controla la introduccion de datos y muestreo asi como todo *|
|* el interfaz de usuario... *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void InfoEmpleados(void)
{
char buffer[80], ok = 0;
int BPush, key;
char oldCol = -1;
char CurrRow; // Linea sobre la que estamos
char CurrCol; // Columna sobre la que estamos
long CurrEmpl; // Producto sobre el que estamos posicionados a golpes
// Rellenamos la pantalla con un fondo atractivo...
setfillstyle( Config.FillBgS, Config.FillBgC ); bar( 0, 0, 640, 480 );
Imprime_Estaticos( 70, "systm\\Tpv.img"); // Imprime botones estaticos 'Seccion 30'
sprintf( buffer, "datos\\%s\\info_emp.dbf", NEmpresa );
if ( BEmpl.AbrirReg( buffer, sizeof( INFO_EMPLEADOS ) ) == ERROR )
Error(0x01, BEmpl.cError);
// Si no hay registros, creamos uno almenos.
if ( BEmpl.Registros() == 0 )
{
EmplNuevoRegistro( &SEmpl );
if ( BEmpl.InsReg( (void *)&SEmpl, BEmpl.Registros(), ARRIBA ) == ERROR )
Error(0x01, BEmpl.cError);
}
CurrEmpl = 0; CurrRow = 0;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrRow + CurrEmpl );
if ( BEmpl.LeeReg( (void *)&SEmpl, 0 ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosVEmpl( CurrRow );
CurrCol = 0;
do {
if ( CurrCol != oldCol )
{
oldCol = CurrCol; MuestraAyudaEmpl( CurrCol );
}
MuestraEmpl( CurrCol, CurrRow, INTENSO );
BPush = Comprueba_Secuencia( 2, NULL );
MuestraEmpl( CurrCol, CurrRow, NORMAL );
switch ( BPush )
{
case 0: // No se pulso ningun BOTON
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
break;
case -2: // Hay una tecla normal en BUFFER
#ifndef DEMOSTRACION
if ( ( key = getch() ) != 27 )
{
if ( key != 13 )
ungetch( key );
EditItemEmpl( CurrCol, CurrRow );
if ( BEmpl.EscribeReg( (void *)&SEmpl, (CurrRow + CurrEmpl) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraEmpl( CurrCol, CurrRow, NORMAL );
CurrCol++; if ( CurrCol > 14 ) CurrCol = 0;
}
#else
while( kbhit() ) getch();
Optar( 0, "VERSION DEMOSTRACION", "En esta versi¢n no se", "permite editar el campo", "de los empleados...", NULL );
#endif
break;
case -1: // Hay una tecla especial en BUFFER
switch( getch() )
{
// Flecha Izquierda
case 75:
case 15:
CurrCol--; if ( CurrCol < 0 ) CurrCol = 19;
break;
// Flecha Derecha
case 77:
case 9:
CurrCol++; if ( CurrCol > 19 ) CurrCol = 0;
break;
// Flecha Arriba
case 72:
if ( CurrCol > 14 )
{
if ( (CurrRow + CurrEmpl) > 0 )
{
if ( ( CurrRow ) <= 0 )
{
CurrRow = NLINEAS_EMPL - 1; CurrEmpl -= NLINEAS_EMPL;
if ( CurrEmpl < 0 ) CurrEmpl = 0;
while( ( CurrRow + CurrEmpl ) >= BEmpl.Registros() && CurrRow > 0 ) CurrRow--;
while( ( CurrRow + CurrEmpl ) >= BEmpl.Registros() && CurrEmpl > 0 ) CurrEmpl++;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
} else {
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
}
}
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosVEmpl( CurrRow );
} else {
CurrCol--; if ( CurrCol < 0 ) CurrCol = 14;
}
break;
// Flecha Abajo
case 80:
if ( CurrCol > 14 )
{
if ( ( CurrRow + CurrEmpl ) < BEmpl.Registros() - 1 )
{
if ( ( CurrRow ) >= NLINEAS_EMPL - 1 )
{
CurrRow = 0; CurrEmpl += NLINEAS_EMPL;
while ( (CurrEmpl + CurrRow) >= BEmpl.Registros() ) CurrEmpl--;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
} else
CurrRow++;
}
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosVEmpl( CurrRow );
} else {
CurrCol++; if ( CurrCol > 14 ) CurrCol = 0;
}
break;
#ifndef DEMOSTRACION
// Inicio
case 71:
CurrRow = 0;
if ( CurrEmpl != 0 )
{
CurrEmpl = 0;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
}
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosVEmpl( CurrRow );
break;
// Fin
case 79:
CurrRow = 0;
if ( CurrEmpl != BEmpl.Registros() - NLINEAS_EMPL )
{
CurrEmpl = BEmpl.Registros() - NLINEAS_EMPL;
if ( CurrEmpl < 0 )
{
CurrEmpl = 0;
CurrRow = BEmpl.Registros()-1;
}
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
}
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosVEmpl( CurrRow );
break;
#endif
}
break;
// Imprimir Emplerencias
case 1:
MuestraImpresionesEmpl();
break;
// Menu Principal
case 2:
ok = 1;
break;
#ifndef DEMOSTRACION
// Eliminar
case 3:
if ( Optar( 1, "ATENCION", "Seguro que desea eliminar", "este empleado?? El siguiente no", "puede tener el mismo c¢digo", NULL ) )
{
if ( BEmpl.DelReg( CurrEmpl + CurrRow ) == ERROR )
Error(0x01, BEmpl.cError);
if ( BEmpl.Registros() == 0 )
{
EmplNuevoRegistro( &SEmpl );
if ( BEmpl.InsReg( (void *)&SEmpl, BEmpl.Registros(), ARRIBA ) == ERROR )
Error(0x01, BEmpl.cError);
CurrRow = 0;
} else
// Si he borrado el £ltimo registro subo una linea
if ( (CurrEmpl+CurrRow) >= ( BEmpl.Registros() - 2 ) )
{
if ( (CurrRow + CurrEmpl) > 0 )
{
if ( ( CurrRow ) <= 0 )
{
CurrRow = NLINEAS_EMPL - 1; CurrEmpl -= NLINEAS_EMPL;
if ( CurrEmpl < 0 ) CurrEmpl = 0;
while( ( CurrRow + CurrEmpl ) >= BEmpl.Registros() && CurrRow > 0 ) CurrRow--;
while( ( CurrRow + CurrEmpl ) >= BEmpl.Registros() && CurrEmpl > 0 ) CurrEmpl++;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
} else {
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
}
}
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosVEmpl( CurrRow );
}
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosVEmpl( CurrRow );
}
break;
// Insertar
case 4:
EmplNuevoRegistro( &SEmpl );
if ( BEmpl.InsReg( (void *)&SEmpl, (CurrEmpl + CurrRow), ARRIBA ) == ERROR )
Error(0x01, BEmpl.cError);
if ( ( CurrRow + CurrEmpl ) < BEmpl.Registros() - 1 )
{
if ( ( CurrRow ) >= NLINEAS_EMPL - 1 )
{
CurrRow = 0; CurrEmpl += NLINEAS_EMPL;
while ( (CurrEmpl + CurrRow) >= BEmpl.Registros() ) CurrEmpl--;
} else
CurrRow++;
}
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosVEmpl( CurrRow );
break;
#else
case 3:
case 4:
Optar( 0, "VERSION DEMOSTRACION", "En esta versi¢n no se", "permiten eliminar o insertar", "nuevos registros...", NULL );
break;
#endif
// Retroceso R pido
case 5:
#ifndef DEMOSTRACION
CurrRow = NLINEAS_EMPL - 1; CurrEmpl -= NLINEAS_EMPL;
if ( CurrEmpl < 0 ) CurrEmpl = 0;
while( ( CurrRow + CurrEmpl ) >= BEmpl.Registros() && CurrRow > 0 ) CurrRow--;
while( ( CurrRow + CurrEmpl ) >= BEmpl.Registros() && CurrEmpl > 0 ) CurrEmpl++;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosVEmpl( CurrRow );
#endif
break;
// Busqueda Atras
case 6:
BuscaEmpl( ATRAS, &CurrRow, &CurrEmpl );
MuestraDatosVEmpl( CurrRow );
break;
// Buscar
case 7:
BuscaEmpl( NUEVA_BUSQUEDA, &CurrRow, &CurrEmpl );
MuestraDatosVEmpl( CurrRow );
break;
// Busqueda Adelante
case 8:
BuscaEmpl( ADELANTE, &CurrRow, &CurrEmpl );
MuestraDatosVEmpl( CurrRow );
break;
// AvanceR pido
case 9:
#ifndef DEMOSTRACION
CurrRow = 0; CurrEmpl += NLINEAS_EMPL;
while ( (CurrEmpl + CurrRow) >= BEmpl.Registros() ) CurrEmpl--;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosVEmpl( CurrRow );
#endif
break;
default:
break;
}
} while( !ok );
BEmpl.CerrarReg();
}
/**************************************************************************\
|* *|
|* MuestraDatosEmpl *|
|* *|
|* Descripci¢n: *|
|* Dado un registro, se muestran sucesivamente este y todos *|
|* los que hay por debajo de l, hasta que se agote la base *|
|* o no quepan mas en la pantalla. *|
|* *|
|* Entradas: Registro por el que comenzar *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MuestraDatosEmpl( long RowStart )
{
int linea, campo;
char dev;
int X0, Y0, X1, Y1;
// Imprimo la NLINEAS_EMPL que caben en la pantalla
dev = OK;
for ( linea=0; linea < NLINEAS_EMPL && dev == OK; linea++ )
{
dev = BEmpl.LeeReg( (void *)&SEmpl, RowStart + linea );
if ( dev == OK )
// Por cada linea hay 4 campos, ehhh!!!
for ( campo=15; campo < 20; campo++ )
MuestraEmpl( campo, linea, NORMAL );
}
// Ahora limpio los restantes huecos si los hay
if ( dev != OK )
{
linea--;
setfillstyle( SOLID_FILL, Config.TxtBgN );
for ( ; linea < NLINEAS_EMPL; linea++ )
for ( campo=15; campo < 20; campo++ )
{
ObtenCoordenadasEmpl( campo, linea, &X0, &Y0, &X1, &Y1 );
bar( X0, Y0, X1, Y1 );
}
}
}
void MuestraDatosVEmpl( int linea )
{
int campo;
// Mostramos los campos que faltan, ( 1¦ Linea )
//
for ( campo=0; campo < 15; campo++ )
MuestraEmpl( campo, linea, NORMAL );
}
/**************************************************************************\
|* *|
|* MuestraEmpl *|
|* *|
|* Descripci¢n: *|
|* Reescribe el campo dado, seg£n la fila, y la intensidad *|
|* *|
|* Entradas: *|
|* columna campo ha mostar *|
|* linea linea en la que nos encontramos *|
|* como intensidad del texto (NORMAL/INTENSO) *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MuestraEmpl( char columna, int linea, char como )
{
char buffer[80];
char buffer1[80], draw;
int X0, Y0, X1, Y1;
ObtenCoordenadasEmpl( columna, linea, &X0, &Y0, &X1, &Y1 );
draw = 1;
switch( columna )
{
// Codigo
case 0:
sprintf ( buffer, " %07lu", SEmpl.CodigoR );
// MuestraEmpl( 15, linea, como );
break;
// Nombre del proveedor
case 1:
sprintf ( buffer, "%15s", SEmpl.Nombre );
// MuestraEmpl( 16, linea, como );
break;
// Apellido1
case 2:
sprintf ( buffer, "%15s", SEmpl.Apellido1 );
// MuestraEmpl( 17, linea, como );
break;
// Apellido2
case 3:
sprintf ( buffer, "%15s", SEmpl.Apellido2 );
// MuestraEmpl( 18, linea, como );
break;
// Direccion
case 4:
sprintf ( buffer, "%15s", SEmpl.Direccion );
break;
// Numero
case 5:
sprintf ( buffer, "%4s", SEmpl.Num );
break;
// Piso
case 6:
sprintf ( buffer, "%4s", SEmpl.Piso );
break;
// Poblacion
case 7:
sprintf ( buffer, "%15s", SEmpl.Poblacion );
break;
// Provincia
case 8:
sprintf ( buffer, " %15s", SEmpl.Provincia );
break;
// Codigo Postal
case 9:
formatea_u_long( SEmpl.CodPostal, buffer1 );
sprintf ( buffer, " %6s", buffer1 );
break;
// Telefono 1
case 10:
sprintf ( buffer, "%15s", SEmpl.Telefono1 );
MuestraEmpl( 19, linea, como );
break;
// Telefono 2
case 11:
sprintf ( buffer, " %15s", SEmpl.Telefono2 );
break;
// NIF
case 12:
sprintf ( buffer, " %10s", SEmpl.NIF );
break;
// Inicio Contrato
case 13:
sprintf( buffer, "%02d-%02d-%04d", (int)SEmpl.InicioContrato.da_day, (int)SEmpl.InicioContrato.da_mon, SEmpl.InicioContrato.da_year );
break;
// Fin Contrato
case 14:
sprintf( buffer, "%02d-%02d-%04d", (int)SEmpl.FinContrato.da_day, (int)SEmpl.FinContrato.da_mon, SEmpl.FinContrato.da_year );
break;
// Lineas de Apoyo
// Codigo
case 15:
sprintf ( buffer, " %07lu", SEmpl.CodigoR );
break;
// Nombre del proveedor
case 16:
sprintf ( buffer, "%15s", SEmpl.Nombre );
break;
// Apellido1
case 17:
sprintf ( buffer, "%15s", SEmpl.Apellido1 );
break;
// Apellido2
case 18:
sprintf ( buffer, "%15s", SEmpl.Apellido2 );
break;
// Telefono 1
case 19:
sprintf ( buffer, " %15s", SEmpl.Telefono1 );
break;
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
case 28:
case 29:
case 30:
case 31:
case 32:
case 33:
case 34:
case 35:
case 36:
case 37:
case 38:
case 39:
case 40:
draw = 0;
break;
}
if ( draw )
{
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
outtextxy( X0+2, Y0, buffer );
} else {
Imprime_Bordes( 7, ( columna - 20 + 1 ), ( como == NORMAL ) ? -1 : 11 );
}
}
/**************************************************************************\
|* *|
|* MuestraAyudaEmpl *|
|* *|
|* Descripci¢n: *|
|* Muestra una peque¤a descripcion del contenido para el campo *|
|* *|
|* Entradas: *|
|* columna campo ha mostar su ayuda *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MuestraAyudaEmpl( char columna )
{
char buffer1[80];
switch( columna )
{
// Codigo
case 0:
sprintf ( buffer1, "Introduzca el codigo que desea asignar al vendedor" );
break;
// Nombre del Vendedor
case 1:
sprintf ( buffer1, "Nombre del vendedor" );
break;
// Apellido 1
case 2:
sprintf ( buffer1, "Primer apellido del vendedor" );
break;
// Apellido 2
case 3:
sprintf ( buffer1, "Segundo apellido del vendedor" );
break;
// Direccion
case 4:
sprintf ( buffer1, "Direccion del empleado" );
break;
// Numero
case 5:
sprintf ( buffer1, "N£mero, Bloque o Plaza" );
break;
// Piso
case 6:
sprintf ( buffer1, "Piso o Letra" );
break;
// Localidad
case 7:
sprintf ( buffer1, "Localidad" );
break;
// Provincia
case 8:
sprintf ( buffer1, "Provincia" );
break;
// C¢digo Postal
case 9:
sprintf ( buffer1, "C¢digo Postal" );
break;
// Telfono 1
case 10:
sprintf ( buffer1, "Telfono 1" );
break;
// Telfono 2
case 11:
sprintf ( buffer1, "Telfono 2" );
break;
// Nif
case 12:
sprintf ( buffer1, "N£mero de Identificaci¢n Fiscal" );
break;
// Fecha Inicio de contrato
case 13:
sprintf ( buffer1, "Fecha inicio del contrato" );
break;
// Fecha fin contrato
case 14:
sprintf ( buffer1, "Fecha final del contrato" );
break;
// Cuadro de busqueda r pida
case 15:
case 16:
case 17:
case 18:
case 19:
sprintf ( buffer1, "Visualizaci¢n r pida de los empleados" );
break;
case 20:
sprintf ( buffer1, "Articulos: Referencia de los Articulos" );
break;
case 21:
sprintf ( buffer1, "Articulos: Visualizacion del Stock Actual" );
break;
case 22:
sprintf ( buffer1, "Articulos: Graficas Ventas de Articulo" );
break;
case 23:
sprintf ( buffer1, "Proveedores: Fichas de los proveedores" );
break;
case 24:
sprintf ( buffer1, "Proveedores: Informe de compras seg£n Prov." );
break;
case 25:
sprintf ( buffer1, "Empleados: Fichas personales de empleados" );
break;
case 26:
sprintf ( buffer1, "Empleados: Permisos de acceso (modulo actual)" );
break;
case 27:
sprintf ( buffer1, "Empleados: Graficas de ventas por empleado" );
break;
case 28:
sprintf ( buffer1, "Compras: Compras Generales ( Mensuales/Dia )" );
break;
case 29:
sprintf ( buffer1, "Compras: Graficas de compras" );
break;
case 30:
sprintf ( buffer1, "Gst Ventas: Inicio de la caja diaria" );
break;
case 31:
sprintf ( buffer1, "Gst Ventas: Balance de caja. Informe del dia" );
break;
case 32:
sprintf ( buffer1, "Gst Ventas: Balance mensual de ventas" );
break;
case 33:
sprintf ( buffer1, "Gst Ventas: Gestion de Clientes" );
break;
case 34:
sprintf ( buffer1, "Pgr. Ext.: Permiso de ejecucion de Pgr. Ext." );
break;
case 35:
sprintf ( buffer1, "Miscelanea: Cambio de los mensajes del Prot." );
break;
case 36:
sprintf ( buffer1, "Miscelanea: Futura Ampliacion del Programa" );
break;
case 37:
sprintf ( buffer1, "Miscelanea: Futura Ampliacion del Programa" );
break;
case 38:
sprintf ( buffer1, "Miscelanea: Gestion de las bases de datos" );
break;
case 39:
sprintf ( buffer1, "Miscelanea: Configuracion de los Pgr. Ext." );
break;
case 40:
sprintf ( buffer1, "Miscelanea: Configuracion del Entorno Visual" );
break;
}
// Ayuda reducida
setfillstyle( SOLID_FILL, EGA_BLACK ); bar( 7, 457, 498, 473 );
// Imprime la ayudita
setcolor( EGA_WHITE ); outtextxy( 7, 457, buffer1 );
}
/**************************************************************************\
|* *|
|* EditItemEmpl *|
|* *|
|* Descripci¢n: *|
|* Se encarga de editar y validar el campo. *|
|* *|
|* Entradas: *|
|* columna campo ha editar *|
|* linea linea en la que nos encontramos *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void EditItemEmpl( char columna, int linea )
{
char buffer[80];
int X0, Y0, X1, Y1;
ObtenCoordenadasEmpl( columna, linea, &X0, &Y0, &X1, &Y1 );
switch( columna )
{
// Codigo Real
case 0:
sprintf ( buffer, "%lu", SEmpl.CodigoR );
if ( !( InputCadenaG( buffer, 1, 7, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
SEmpl.CodigoR = atol( buffer );
MuestraEmpl( 15, linea, NORMAL );
break;
// Nombre del empleado
case 1:
strcpy ( buffer, SEmpl.Nombre );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SEmpl.Nombre, buffer );
MuestraEmpl( 16, linea, NORMAL );
break;
// Apellifo 1
case 2:
strcpy ( buffer, SEmpl.Apellido1 );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SEmpl.Apellido1, buffer );
MuestraEmpl( 17, linea, NORMAL );
break;
// Apellifo 2
case 3:
strcpy ( buffer, SEmpl.Apellido2 );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SEmpl.Apellido2, buffer );
MuestraEmpl( 18, linea, NORMAL );
break;
// Direccion
case 4:
sprintf ( buffer, "%s", SEmpl.Direccion );
if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SEmpl.Direccion, buffer );
break;
// Num
case 5:
sprintf ( buffer, "%s", SEmpl.Num );
if ( !( InputCadenaG( buffer, 0, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SEmpl.Num, buffer );
break;
// Piso
case 6:
sprintf ( buffer, "%s", SEmpl.Piso );
if ( !( InputCadenaG( buffer, 0, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SEmpl.Piso, buffer );
break;
// Poblaci¢n
case 7:
sprintf ( buffer, "%s", SEmpl.Poblacion );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SEmpl.Poblacion, buffer );
break;
// Provincia
case 8:
sprintf ( buffer, "%s", SEmpl.Provincia );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SEmpl.Provincia, buffer );
break;
// C¢digo Postal
case 9:
sprintf ( buffer, "%ld", SEmpl.CodPostal );
if ( !( InputCadenaG( buffer, 0, 5, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
SEmpl.CodPostal = atol ( buffer );
break;
// Telefono 1
case 10:
sprintf ( buffer, "%s", SEmpl.Telefono1 );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SEmpl.Telefono1, buffer );
break;
// Telefono 2
case 11:
sprintf ( buffer, "%s", SEmpl.Telefono2 );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SEmpl.Telefono2, buffer );
break;
// NIF
case 12:
strcpy ( buffer, SEmpl.NIF );
if ( !( InputCadenaG( buffer, 0, 10, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
strcpy ( SEmpl.NIF, buffer );
break;
// Fecha inicio contrato
case 13:
sprintf( buffer, "%02d%02d%04d", (int)SEmpl.InicioContrato.da_day, (int)SEmpl.InicioContrato.da_mon, SEmpl.InicioContrato.da_year );
if ( !( InputCadenaG( buffer, 0, 8, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
{
if ( strlen( buffer ) == 8 )
{
SEmpl.InicioContrato.da_day = (buffer[0]-'0')*10 + (buffer[1]-'0');
SEmpl.InicioContrato.da_mon = (buffer[2]-'0')*10 + (buffer[3]-'0');
SEmpl.InicioContrato.da_year = (buffer[4]-'0')*1000 + (buffer[5]-'0')*100 + (buffer[6]-'0')*10 + (buffer[7]-'0');
}
}
break;
// Fecha fin contrato
case 14:
sprintf( buffer, "%02d%02d%04d", (int)SEmpl.FinContrato.da_day, (int)SEmpl.FinContrato.da_mon, SEmpl.FinContrato.da_year );
if ( !( InputCadenaG( buffer, 0, 8, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
{
if ( strlen( buffer ) == 8 )
{
SEmpl.FinContrato.da_day = (buffer[0]-'0')*10 + (buffer[1]-'0');
SEmpl.FinContrato.da_mon = (buffer[2]-'0')*10 + (buffer[3]-'0');
SEmpl.FinContrato.da_year = (buffer[4]-'0')*1000 + (buffer[5]-'0')*100 + (buffer[6]-'0')*10 + (buffer[7]-'0');
}
}
break;
// Observaciones
case 15:
break;
}
while( kbhit() ) getch();
}
/**************************************************************************\
|* *|
|* ObtenCoordenadasEmpl *|
|* *|
|* Descripci¢n: *|
|* Obtiene las coordenadas de acotacion para el campo pedido *|
|* *|
|* Entradas: *|
|* columna campo del que obtener las coordenadas *|
|* linea linea en la que nos encontramos *|
|* X0 Y0 X1 Y1 Punteros para devolver las coordenadas *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void ObtenCoordenadasEmpl( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 )
{
// Calculamos la Y0, Y1 para la linea dada ( SOLO columna < 6 )
*Y0 = 332 + 19*linea;
*Y1 = *Y0 + 17;
switch( columna )
{
case 0:
*X0 = 97; *X1 = 178;
*Y0 = 94; *Y1 = 114;
break;
case 1:
*X0 = 97; *X1 = 223;
*Y0 = 124; *Y1 = 144;
break;
case 2:
*X0 = 97; *X1 = 223;
*Y0 = 154; *Y1 = 174;
break;
case 3:
*X0 = 312; *X1 = 458;
*Y0 = 154; *Y1 = 174;
break;
case 4:
*X0 = 97; *X1 = 353;
*Y0 = 184; *Y1 = 204;
break;
case 5:
*X0 = 412; *X1 = 458;
*Y0 = 184; *Y1 = 204;
break;
case 6:
*X0 = 542; *X1 = 588;
*Y0 = 184; *Y1 = 204;
break;
case 7:
*X0 = 97; *X1 = 223;
*Y0 = 214; *Y1 = 234;
break;
case 8:
*X0 = 312; *X1 = 458;
*Y0 = 214; *Y1 = 234;
break;
case 9:
*X0 = 542; *X1 = 618;
*Y0 = 214; *Y1 = 234;
break;
case 10:
*X0 = 97; *X1 = 223;
*Y0 = 244; *Y1 = 264;
break;
case 11:
*X0 = 312; *X1 = 458;
*Y0 = 244; *Y1 = 264;
break;
case 12:
*X0 = 97; *X1 = 223;
*Y0 = 274; *Y1 = 294;
break;
case 13:
*X0 = 362; *X1 = 458;
*Y0 = 274; *Y1 = 294;
break;
case 14:
*X0 = 522; *X1 = 618;
*Y0 = 274; *Y1 = 294;
break;
case 15:
*X0 = 7; *X1 = 78;
break;
case 16:
*X0 = 87; *X1 = 213;
break;
case 17:
*X0 = 222; *X1 = 348;
break;
case 18:
*X0 = 357; *X1 = 483;
break;
case 19:
*X0 = 492; *X1 = 633;
break;
case 20:
case 21:
case 22:
*X0 = 180;
*X1 = 200;
*X0 -= 2;
*Y0 = 24 + 20 * ( columna - 20 ) ;
*Y1 = *Y0 + 18;
break;
case 23:
case 24:
*X0 = 180;
*X1 = 200;
*X0 -= 2;
*Y0 = 24 + 20 * ( columna - 20 + 1 ) ;
*Y1 = *Y0 + 18;
break;
case 25:
case 26:
case 27:
*X0 = 180;
*X1 = 200;
*X0 -= 2;
*Y0 = 24 + 20 * ( columna - 20 + 2 ) ;
*Y1 = *Y0 + 18;
break;
case 28:
case 29:
*X0 = 180;
*X1 = 200;
*X0 -= 2;
*Y0 = 24 + 20 * ( columna - 20 + 3 ) ;
*Y1 = *Y0 + 18;
break;
case 30:
case 31:
case 32:
case 33:
*X0 = 390;
*X1 = 410;
*X0 -= 2;
*Y0 = 24 + 20 * ( columna - 23 ) ;
*Y1 = *Y0 + 18;
break;
case 34:
*X0 = 390;
*X1 = 410;
*X0 -= 2;
*Y0 = 24 + 20 * ( columna - 23 + 1 ) ;
*Y1 = *Y0 + 18;
break;
case 35:
case 36:
case 37:
case 38:
case 39:
case 40:
case 41:
*X0 = 600;
*X1 = 620;
*X0 -= 2;
*Y0 = 24 + 20 * ( columna - 28 ) ;
*Y1 = *Y0 + 18;
break;
}
*X0 += 2;
*X1 -= 2;
}
/**************************************************************************\
|* *|
|* EmplNuevoRegistro *|
|* *|
|* Descripci¢n: *|
|* Limpia el buffer, para un nuevo registro. *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void EmplNuevoRegistro( INFO_EMPLEADOS *NSEmpl )
{
char i;
NSEmpl -> CodigoR = 0;
NSEmpl -> Nombre[0] = '\0';
NSEmpl -> Apellido1[0] = '\0';
NSEmpl -> Apellido2[0] = '\0';
NSEmpl -> Direccion[0] = '\0';
NSEmpl -> Num[0] = '\0';
NSEmpl -> Piso[0] = '\0';
NSEmpl -> CodPostal = 0;
NSEmpl -> Telefono1[0] = '\0';
NSEmpl -> Telefono2[0] = '\0';
NSEmpl -> NIF[0] = '\0';
NSEmpl -> InicioContrato.da_day = 0;
NSEmpl -> InicioContrato.da_mon = 0;
NSEmpl -> InicioContrato.da_year = 0;
NSEmpl -> FinContrato.da_day = 0;
NSEmpl -> InicioContrato.da_mon = 0;
NSEmpl -> InicioContrato.da_year = 0;
NSEmpl -> Password[0] = '\0';
for ( i = 0; i < 4; i++ )
NSEmpl -> Observaciones[i][0] = '\0';
for ( i = 0; i < 30; i++ )
NSEmpl -> Acceso[i] = 0;
}
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// Û Parte secundaria del m¢dulo Û
// Û Û
// Û Secci¢n de Busqueda de refecencias Û
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
/**************************************************************************\
|* *|
|* BuscaEmpl *|
|* *|
|* Descripci¢n: *|
|* Busca un empleado por sus distintos campos. *|
|* *|
|* Entradas: *|
|* ATRAS Busca otra coincidencia hacia atras *|
|* NUEVA_BUSQUEDA Inicia una nueva busqueda *|
|* ADELANTE Busca otra coincidencia hacia delante *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void BuscaEmpl( char TipoBusqueda, char *CurrRow, long *CurrEmpl )
{
static INFO_EMPLEADOS MEmpl;
char enc; long i;
switch ( TipoBusqueda )
{
case NUEVA_BUSQUEDA:
if ( ObtenMatchEmpl( &MEmpl ) != OK )
return;
i = 0;
break;
case ATRAS:
case ADELANTE:
i = ( *CurrRow + *CurrEmpl ) + TipoBusqueda;
break;
}
Optar( ENCUADRE, "Comando: Buscar", "Ahora se inica", "la busqueda elegida", NULL );
enc = 0;
while ( i < BEmpl.Registros() && !enc )
{
if ( BEmpl.LeeReg( (void *)&SEmpl, i ) == ERROR )
Error( 0x01, BEmpl.cError);
if ( Match_Empl( SEmpl, MEmpl ) )
enc = 1;
else
i++;
}
Optar( ENCUADRE, NULL );
if ( enc )
{
*CurrRow = 0; *CurrEmpl = i;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( *CurrRow + *CurrEmpl );
if ( BEmpl.LeeReg( (void *)&SEmpl, ( *CurrRow + *CurrEmpl ) ) == ERROR )
Error(0x01, BEmpl.cError);
// MuestraDatosVEmpl( *CurrRow );
} else
switch( TipoBusqueda )
{
case NUEVA_BUSQUEDA:
Optar( 0, "Comando: Buscar", "No se encontr¢", "ninguna coincidencia", NULL );
break;
case ATRAS:
case ADELANTE:
Optar( 0, "Comando: Buscar", "No se encontr¢", "ninguna coincidencia", NULL );
break;
}
if ( BEmpl.LeeReg( (void *)&SEmpl, (*CurrRow + *CurrEmpl) ) == ERROR )
Error( 0x01, BEmpl.cError);
}
/**************************************************************************\
|* *|
|* Match_Empl *|
|* *|
|* Descripci¢n: *|
|* Compara dos registros y devuelve la posible coincidencia *|
|* *|
|* Entradas: *|
|* Registros a comparar *|
|* *|
|* Salidas: *|
|* Resultado de la comparaci¢n *|
|* *|
\**************************************************************************/
int Match_Empl( INFO_EMPLEADOS A, INFO_EMPLEADOS B )
{
if ( B.CodigoR != 0 )
return (A.CodigoR == B.CodigoR);
if ( B.Nombre[0] != '\0' )
return ( strncmpi( A.Nombre, B.Nombre, strlen( B.Nombre ) ) == 0 );
if ( B.Apellido1[0] != '\0' )
return ( strncmpi( A.Apellido1, B.Apellido1, strlen( B.Apellido1 ) ) == 0 );
if ( B.Direccion[0] != '\0' )
return ( strncmpi( A.Direccion, B.Direccion, strlen( B.Direccion ) ) == 0 );
return 0;
}
/**************************************************************************\
|* *|
|* ObtenMatchEmpl *|
|* *|
|* Descripci¢n: *|
|* Obtine los patrones de busqueda necesarios *|
|* *|
|* Entradas: *|
|* Estructura donde guardar el patron de busqueda *|
|* *|
|* Salidas: *|
|* OK La entrada es correcta *|
|* ERROR El usuario interrumpio la busqueda *|
|* *|
\**************************************************************************/
int ObtenMatchEmpl( INFO_EMPLEADOS *MEmpl )
{
char Row, ok, i;
int BPush, key, DEV;
struct textsettingstype texttypeinfo;
gettextsettings( &texttypeinfo );
Optar( ENCUADRE, "Comando: Buscar", NULL );
Imprime_Estaticos( 74, "systm\\tpv.img" );
ok = 0; Row = 0;
EmplNuevoRegistro( MEmpl );
do
{
MatchDrawEmpl(Row, *MEmpl, INTENSO);
BPush = Comprueba_Secuencia( SEC_OPTAR, NULL );
MatchDrawEmpl(Row, *MEmpl, NORMAL);
switch ( BPush )
{
case 0: // No se pulso ningun BOTON
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
case -2:
if ( ( key = getch() ) != 13 && key != 27 )
ungetch( key );
EditMatchEmpl( Row, MEmpl );
for ( i=0; i < 4; i++ )
MatchDrawEmpl(i, *MEmpl, NORMAL);
break;
case -1:
switch ( getch() )
{
// Flecha Izquierda
case 75:
case 15:
// Flecha Arriba
case 72:
Row--; if ( Row < 0 ) Row = 3;
break;
// Flecha Derecha
case 77:
case 9:
// Flecha Abajo
case 80:
Row++; if ( Row > 3 ) Row = 0;
break;
}
break;
case 1:
DEV = OK; ok = 1;
break;
case 2:
DEV = ERROR; ok = 1;
break;
}
} while ( !ok );
Optar( ENCUADRE, NULL );
settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize );
return DEV;
}
/**************************************************************************\
|* *|
|* EditMatchEmpl *|
|* *|
|* Descripci¢n: *|
|* Edita el patron de busqueda *|
|* *|
|* Entradas: *|
|* Campo a editar, y lugar donde almacenarlo *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void EditMatchEmpl( char Row, INFO_EMPLEADOS * MEmpl )
{
int X0, Y0, X1, Y1;
char buffer[80];
ObtenCoordenadasMatchEmpl( Row, &X0, &Y0, &X1, &Y1 );
switch( Row )
{
// Codigo
case 0:
sprintf( buffer, "%lu", MEmpl -> CodigoR );
if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
{
EmplNuevoRegistro( MEmpl );
MEmpl -> CodigoR = atol(buffer);
}
break;
// Nombre
case 1:
sprintf( buffer, "%s", MEmpl -> Nombre );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
{
EmplNuevoRegistro( MEmpl );
strcpy ( MEmpl -> Nombre, buffer );
}
break;
// Apellido 1
case 2:
sprintf( buffer, "%s", MEmpl -> Apellido1 );
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
{
EmplNuevoRegistro( MEmpl );
strcpy ( MEmpl -> Apellido1, buffer );
}
break;
// Direccion
case 3:
sprintf( buffer, "%s", MEmpl -> Direccion );
if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
{
EmplNuevoRegistro( MEmpl );
strcpy ( MEmpl -> Direccion, buffer );
}
break;
}
}
/**************************************************************************\
|* *|
|* MatchDrawEmpl *|
|* *|
|* Descripci¢n: *|
|* Escribe los distintos campos seg£n se le indique *|
|* *|
|* Entradas: *|
|* Campo a mostrar, lugar donde se encuentra, y como mostrarlo *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MatchDrawEmpl( char Row, INFO_EMPLEADOS MEmpl, char como )
{
int X0, Y0, X1, Y1;
char buffer[80];
ObtenCoordenadasMatchEmpl( Row, &X0, &Y0, &X1, &Y1 );
switch( Row )
{
case 0:
sprintf( buffer, " %9lu", MEmpl.CodigoR );
break;
case 1:
strncpy( buffer, MEmpl.Nombre, 15 );
break;
case 2:
strncpy( buffer, MEmpl.Apellido1, 15 );
break;
case 3:
strncpy( buffer, MEmpl.Direccion, 25 );
break;
}
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
outtextxy( X0+2, Y0, buffer );
}
/**************************************************************************\
|* *|
|* MatchDrawEmpl *|
|* *|
|* Descripci¢n: *|
|* Obtiene las coordenadas relativas al campo dado. *|
|* *|
|* Entradas: *|
|* Campo a obtener las coordenadas, y coordenadas de salida *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void ObtenCoordenadasMatchEmpl( char Row, int *X0, int *Y0, int *X1, int *Y1 )
{
switch( Row )
{
case 0:
*X0 = 265; *X1 = 365;
*Y0 = 200; *Y1 = 220;
break;
case 1:
*X0 = 265; *X1 = 465;
*Y0 = 225; *Y1 = 245;
break;
case 2:
*X0 = 265; *X1 = 465;
*Y0 = 250; *Y1 = 275;
break;
case 3:
*X0 = 265; *X1 = 465;
*Y0 = 280; *Y1 = 305;
break;
case 4:
*X0 = 385; *X1 = 465;
*Y0 = 250; *Y1 = 275;
break;
case 5:
*X0 = 330; *X1 = 365;
*Y0 = 275; *Y1 = 300;
break;
}
(*X0) ++; (*Y0) ++;
(*X1) --; (*Y1) --;
}
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// Û Parte secundaria del m¢dulo Û
// Û Û
// Û Secci¢n de Busqueda de refecencias Û
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
/**************************************************************************\
|* *|
|* MuestraImpresiones *|
|* *|
|* Descripci¢n: *|
|* Muestra un cuadro con las distintas opciones de impresi¢n *|
|* *|
|* Entradas:(ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MuestraImpresionesEmpl(void)
{
void far *fondo;
struct textsettingstype texttypeinfo;
char ok, dev;
if ( ( fondo = farmalloc ( JD_imagesize( 170, 165, 470, 315 ) ) ) != NULL )
{
gettextsettings( &texttypeinfo );
getimage( 170, 165, 470, 315, fondo );
Imprime_Estaticos( 73, "systm\\tpv.img" );
settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize );
ok = 0;
do {
switch( Comprueba_Secuencia( 3, NULL ) )
{
case 0:
case -1:
case -2:
while( kbhit() ) getch();
break;
// Cancelar
case 1:
dev = 0;
ok = 1;
break;
// Listado r pido
case 2:
dev = 1;
ok = 1;
break;
// Listado completo
case 3:
dev = 2;
ok = 1;
break;
// Codigos de barra
case 4:
dev = 3;
ok = 1;
break;
}
} while( !ok );
putimage( 170, 165, fondo, COPY_PUT );
farfree( fondo );
if ( dev == 3 )
ImprimeFichaEmpleado();
else
ImprimeEmpleados( dev );
}
}
/**************************************************************************\
|* *|
|* ImprimeEmpleados *|
|* *|
|* Descripci¢n: *|
|* Imprime todas las referencias seg£n se le indique *|
|* *|
|* Entradas: *|
|* Como imprimir las referencias *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void ImprimeEmpleados( char como )
{
long i, old_reg;
char buffer[80];
FILE *file_out;
old_reg = BEmpl.RegActual();
if ( !Config.Impresora.Printer )
{
if ( ( file_out = fopen( Config.Impresora.PrintTo, "w" ) ) == NULL )
return;
} else
file_out = stdprn;
ImprimeCabeceraEmpl(como, file_out);
for ( i=0; i<BEmpl.Registros(); i++ )
{
BEmpl.LeeReg( (void *)&SEmpl, i );
switch( como )
{
// Listado R pido
case 1:
sprintf( buffer, "%s %s %s", SEmpl.Nombre, SEmpl.Apellido1, SEmpl.Apellido2 );
buffer[30] = '\0';
fprintf( file_out, "%9lu %-30s", SEmpl.CodigoR, buffer );
sprintf( buffer, "%s,%s,%s", SEmpl.Direccion, SEmpl.Num, SEmpl.Piso );
buffer[30] = '\0';
fprintf( file_out, " %-30s %10s\n\r", SEmpl.CodigoR, SEmpl.Telefono1 );
break;
// Todas las fichas
case 2:
ImprimeFichaEmpleado();
break;
}
}
if ( !Config.Impresora.Printer )
fclose( file_out );
BEmpl.LeeReg( (void *)&SEmpl, old_reg );
}
void ImprimeCabeceraEmpl( char como, FILE *file_out )
{
switch( como )
{
// Listado R pido
case 1:
fprintf( file_out, "Codigo Nombre Direccion Telfono\n\r");
break;
// Listado Completo
case 2:
// C¢digos de barra
case 3:
break;
}
}
void ImprimeFichaEmpleado(void)
{
}
////////////////////////////////////////////////////////////////////////////
// //
// //
// Parte para editar los permisos de acceso al programa //
// //
// //
// //
// //
///////////////////////////////////////////////////////////////////////////
/**************************************************************************\
|* *|
|* PassEmpleados *|
|* *|
|* Descripci¢n: *|
|* Controla la introduccion de los Passwords de acceso a los *|
|* usuarios... *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void PassEmpleados(void)
{
char buffer[100], ok = 0;
int BPush;
int X0, Y0, X1, Y1;
char oldCol = -1;
char CurrRow; // Linea sobre la que estamos
char CurrCol; // Columna sobre la que estamos
long CurrEmpl; // Producto sobre el que estamos posicionados a golpes
// Rellenamos la pantalla con un fondo atractivo...
setfillstyle( Config.FillBgS, Config.FillBgC ); bar( 0, 0, 640, 480 );
Imprime_Estaticos( 71, "systm\\Tpv.img"); // Imprime botones estaticos 'Seccion 30'
sprintf( buffer, "datos\\%s\\info_emp.dbf", NEmpresa );
if ( BEmpl.AbrirReg( buffer, sizeof( INFO_EMPLEADOS ) ) == ERROR )
Error(0x01, BEmpl.cError);
// Si no hay registros, creamos uno almenos.
if ( BEmpl.Registros() == 0 )
{
EmplNuevoRegistro( &SEmpl );
if ( BEmpl.InsReg( (void *)&SEmpl, BEmpl.Registros(), ARRIBA ) == ERROR )
Error(0x01, BEmpl.cError);
}
CurrEmpl = 0; CurrRow = 0;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrRow + CurrEmpl );
if ( BEmpl.LeeReg( (void *)&SEmpl, 0 ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosV2Empl();
CurrCol = 15;
do {
if ( CurrCol != oldCol )
{
oldCol = CurrCol; MuestraAyudaEmpl( CurrCol );
}
MuestraEmpl( CurrCol, CurrRow, INTENSO );
BPush = Comprueba_Secuencia( 2, NULL );
MuestraEmpl( CurrCol, CurrRow, NORMAL );
switch ( BPush )
{
case 0: // No se pulso ningun BOTON
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
switch ( BPush = ReComprueba_Secuencia( 7 ) )
{
case 0:
case -2:
case -1:
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
break;
default:
if ( BPush >= 1 && BPush <= 21 )
{
ObtenCoordenadasEmpl( (BPush - 1 + 20), 0, &X0, &Y0, &X1, &Y1 );
if ( SEmpl.Acceso[BPush - 1] )
{
SEmpl.Acceso[BPush - 1] = 0;
ponicono( X0+5, Y0+5, led_off, 1 );
} else {
SEmpl.Acceso[BPush - 1] = 1;
ponicono( X0+5, Y0+5, led_on, 1 );
}
if ( BEmpl.EscribeReg( (void *)&SEmpl, (CurrRow + CurrEmpl) ) == ERROR )
Error(0x01, BEmpl.cError);
}
}
Anclar_Raton();
break;
case -2: // Hay una tecla normal en BUFFER
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
ObtenCoordenadasEmpl( CurrCol, 0, &X0, &Y0, &X1, &Y1 );
if ( CurrCol >= 20 && CurrCol < 41 )
{
if ( SEmpl.Acceso[CurrCol - 20] )
{
SEmpl.Acceso[CurrCol - 20] = 0;
ponicono( X0+5, Y0+5, led_off, 1 );
} else {
SEmpl.Acceso[CurrCol - 20] = 1;
ponicono( X0+5, Y0+5, led_on, 1 );
}
}
if ( BEmpl.EscribeReg( (void *)&SEmpl, (CurrRow + CurrEmpl) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraEmpl( CurrCol, CurrRow, NORMAL );
CurrCol++; if ( CurrCol > 40 ) CurrCol = 20;
break;
case -1: // Hay una tecla especial en BUFFER
switch( getch() )
{
// Flecha Izquierda
case 75:
case 15:
CurrCol--; if ( CurrCol < 15 ) CurrCol = 40;
break;
// Flecha Derecha
case 77:
case 9:
CurrCol++; if ( CurrCol > 40 ) CurrCol = 15;
break;
// Flecha Arriba
case 72:
if ( CurrCol < 20 )
{
if ( (CurrRow + CurrEmpl) > 0 )
{
if ( ( CurrRow ) <= 0 )
{
CurrRow = NLINEAS_EMPL - 1; CurrEmpl -= NLINEAS_EMPL;
if ( CurrEmpl < 0 ) CurrEmpl = 0;
while( ( CurrRow + CurrEmpl ) >= BEmpl.Registros() && CurrRow > 0 ) CurrRow--;
while( ( CurrRow + CurrEmpl ) >= BEmpl.Registros() && CurrEmpl > 0 ) CurrEmpl++;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
} else {
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
}
}
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosV2Empl();
} else {
CurrCol--; if ( CurrCol < 20 ) CurrCol = 40;
}
break;
// Flecha Abajo
case 80:
if ( CurrCol < 20 )
{
if ( ( CurrRow + CurrEmpl ) < BEmpl.Registros() - 1 )
{
if ( ( CurrRow ) >= NLINEAS_EMPL - 1 )
{
CurrRow = 0; CurrEmpl += NLINEAS_EMPL;
while ( (CurrEmpl + CurrRow) >= BEmpl.Registros() ) CurrEmpl--;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
} else
CurrRow++;
}
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosV2Empl();
} else {
CurrCol++; if ( CurrCol > 40 ) CurrCol = 20;
}
break;
// Inicio
case 71:
CurrRow = 0;
if ( CurrEmpl != 0 )
{
CurrEmpl = 0;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
}
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosV2Empl();
break;
// Fin
case 79:
CurrRow = 0;
if ( CurrEmpl != BEmpl.Registros() - NLINEAS_EMPL )
{
CurrEmpl = BEmpl.Registros() - NLINEAS_EMPL;
if ( CurrEmpl < 0 )
{
CurrEmpl = 0;
CurrRow = BEmpl.Registros()-1;
}
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
}
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosV2Empl();
break;
}
break;
// Menu Principal
case 2:
ok = 1;
break;
// Retroceso R pido
case 5:
CurrRow = NLINEAS_EMPL - 1; CurrEmpl -= NLINEAS_EMPL;
if ( CurrEmpl < 0 ) CurrEmpl = 0;
while( ( CurrRow + CurrEmpl ) >= BEmpl.Registros() && CurrRow > 0 ) CurrRow--;
while( ( CurrRow + CurrEmpl ) >= BEmpl.Registros() && CurrEmpl > 0 ) CurrEmpl++;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosV2Empl();
break;
// Busqueda Atras
case 6:
BuscaEmpl( ATRAS, &CurrRow, &CurrEmpl );
break;
// Buscar
case 7:
BuscaEmpl( NUEVA_BUSQUEDA, &CurrRow, &CurrEmpl );
break;
// Busqueda Adelante
case 8:
BuscaEmpl( ADELANTE, &CurrRow, &CurrEmpl );
break;
// AvanceR pido
case 9:
CurrRow = 0; CurrEmpl += NLINEAS_EMPL;
while ( (CurrEmpl + CurrRow) >= BEmpl.Registros() ) CurrEmpl--;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosEmpl( CurrEmpl );
if ( BEmpl.LeeReg( (void *)&SEmpl, (CurrEmpl + CurrRow) ) == ERROR )
Error(0x01, BEmpl.cError);
MuestraDatosV2Empl();
break;
default:
break;
}
} while( !ok );
BEmpl.CerrarReg();
}
void MuestraDatosV2Empl(void)
{
int campo;
int X0, Y0, X1, Y1;
// Mostramos los campos que faltan, ( 1¦ Linea )
//
for ( campo=20; campo < 41; campo++ )
{
ObtenCoordenadasEmpl( campo, 0, &X0, &Y0, &X1, &Y1 );
if ( SEmpl.Acceso[campo - 20] )
ponicono( X0+5, Y0+5, led_on, 1 );
else
ponicono( X0+5, Y0+5, led_off, 1 );
}
}