1530 lines
55 KiB
C++
1530 lines
55 KiB
C++
#include <io.h>
|
||
#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_PROV 9
|
||
|
||
BDatos BProv; // Base de datos de Proveedores
|
||
INFO_PROVEEDORES SProv; // Estructura de Proveedores
|
||
|
||
/*************************************\
|
||
| |
|
||
| Parte Principal del M¢dulo |
|
||
| |
|
||
\*************************************/
|
||
void DuplicaBaseProveedores(void);
|
||
void MuestraDatosVProv( int linea);
|
||
void MuestraDatosProv( long RowStart );
|
||
void MuestraAyudaProv( char columna );
|
||
int CompruebaPulsosEstrellas( void );
|
||
void EditItemProv( char columna, int linea );
|
||
void ProvNuevoRegistro( INFO_PROVEEDORES *MSProv );
|
||
void MuestraProv( char columna, int linea, char como );
|
||
void ObtenCoordenadasProv( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 );
|
||
|
||
/*************************************\
|
||
| |
|
||
| Parte Secundaria del M¢dulo |
|
||
| |
|
||
| Secci¢n de Busqueda de proveedores |
|
||
| |
|
||
\*************************************/
|
||
void ObtenCoordenadasMatchProv( char Row, int *X0, int *Y0, int *X1, int *Y1 );
|
||
void MatchDrawProv( char Row, INFO_PROVEEDORES MProv, char como );
|
||
void BuscaProv( char TipoBusqueda, char *CurrRow, long *CurrProv );
|
||
int Match_Prov( INFO_PROVEEDORES *A, INFO_PROVEEDORES *B );
|
||
void EditMatchProv( char Row, INFO_PROVEEDORES * MProv );
|
||
int ObtenMatchProv( INFO_PROVEEDORES *MProv );
|
||
|
||
/*************************************\
|
||
| |
|
||
| Parte Tercera del M¢dulo |
|
||
| |
|
||
| Secci¢n para la impresi¢n |
|
||
| |
|
||
\*************************************/
|
||
void MuestraImpresionesProv( void );
|
||
void ImprimeProveedores( char como );
|
||
void ImprimeCabeceraProv( char como, FILE *file_out );
|
||
|
||
|
||
|
||
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
// Û Parte principal del m¢dulo Û
|
||
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* DuplicaBaseProveedores *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Dado que he elegido un sistema rigido para tratar a los *|
|
||
|* proveedores, me veo obligado una vez al a¤o a clonar la *|
|
||
|* base de datos de los proveedores... *|
|
||
|* *|
|
||
|* Entradas: (ninguna) *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void DuplicaBaseProveedores(void)
|
||
{
|
||
long Regs;
|
||
BDatos BPtmp;
|
||
char buffer[80];
|
||
|
||
// Base a clonar
|
||
sprintf( buffer, "datos\\%s\\info_prv.%03d", NEmpresa, ( (FechaGestionActual.da_year-1) - ((FechaGestionActual.da_year-1)/1000)*1000 ) );
|
||
if ( BPtmp.AbrirReg( buffer, sizeof( INFO_PROVEEDORES ) ) == ERROR )
|
||
Error(0x01, BPtmp.cError);
|
||
|
||
// Base clonada
|
||
sprintf( buffer, "datos\\%s\\info_prv.%03d", NEmpresa, ( FechaGestionActual.da_year - (FechaGestionActual.da_year/1000)*1000 ) );
|
||
if ( BProv.AbrirReg( buffer, sizeof( INFO_PROVEEDORES ) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
|
||
for( Regs = 0; Regs < BPtmp.Registros(); Regs++ )
|
||
{
|
||
if ( BPtmp.LeeReg( (void *)&SProv, Regs ) == ERROR )
|
||
Error(0x01, BPtmp.cError);
|
||
if ( BProv.InsReg( (void *)&SProv, BProv.Registros(), ARRIBA ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
}
|
||
|
||
BProv.CerrarReg();
|
||
BPtmp.CerrarReg();
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* InfoProveedores *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Controla la introduccion de datos y muestreo asi como todo *|
|
||
|* el interfaz de usuario... *|
|
||
|* *|
|
||
|* Entradas: (ninguna) *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void InfoProveedores(void)
|
||
{
|
||
char buffer[100], ok = 0;
|
||
int BPush, key;
|
||
|
||
char oldCol = -1;
|
||
char CurrRow; // Linea sobre la que estamos
|
||
char CurrCol; // Columna sobre la que estamos
|
||
long CurrProv; // 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( 30, "systm\\Tpv.img"); // Imprime botones estaticos 'Seccion 30'
|
||
|
||
sprintf( buffer, "datos\\%s\\info_prv.%03d", NEmpresa, ( FechaGestionActual.da_year - (FechaGestionActual.da_year/1000)*1000 ) );
|
||
|
||
// Este a¤o no existe la base de datos, pero quizas exista el a¤o anterior
|
||
if ( access( buffer, 0 ) != 0 )
|
||
{
|
||
sprintf( buffer, "datos\\%s\\info_prv.%03d", NEmpresa, ( (FechaGestionActual.da_year-1) - ((FechaGestionActual.da_year-1)/1000)*1000 ) );
|
||
if ( access( buffer, 0 ) == 0 )
|
||
{
|
||
Optar( ENCUADRE, "Generando clon de Proveedores", "Atenci¢n se detecto un nuevo", "a¤o y se esta generando un", "clon de la base anterior.", NULL );
|
||
DuplicaBaseProveedores();
|
||
Optar( ENCUADRE, "Generando clon de Proveedores", "Atenci¢n se detecto un nuevo", "a¤o y se esta generando un", "clon de la base anterior.", NULL );
|
||
}
|
||
}
|
||
|
||
sprintf( buffer, "datos\\%s\\info_prv.%03d", NEmpresa, ( FechaGestionActual.da_year - (FechaGestionActual.da_year/1000)*1000 ) );
|
||
if ( BProv.AbrirReg( buffer, sizeof( INFO_PROVEEDORES ) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
|
||
// Si no hay registros, creamos uno almenos.
|
||
if ( BProv.Registros() == 0 )
|
||
{
|
||
ProvNuevoRegistro( &SProv );
|
||
if ( BProv.InsReg( (void *)&SProv, BProv.Registros(), ARRIBA ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
}
|
||
|
||
CurrProv = 0; CurrRow = 0;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosProv( CurrRow + CurrProv );
|
||
if ( BProv.LeeReg( (void *)&SProv, 0 ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraDatosVProv( CurrRow );
|
||
|
||
CurrCol = 0;
|
||
|
||
do {
|
||
if ( CurrCol != oldCol )
|
||
{
|
||
oldCol = CurrCol; MuestraAyudaProv( CurrCol );
|
||
}
|
||
|
||
MuestraProv( CurrCol, CurrRow, INTENSO );
|
||
BPush = Comprueba_Secuencia( 2, NULL );
|
||
MuestraProv( CurrCol, CurrRow, NORMAL );
|
||
|
||
switch ( BPush )
|
||
{
|
||
case 0: // No se pulso ningun BOTON
|
||
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
|
||
if ( ( BPush = CompruebaPulsosEstrellas() ) != 0 )
|
||
{
|
||
MuestraProv( BPush, CurrRow, INTENSO );
|
||
if ( BProv.EscribeReg( (void *)&SProv, (CurrRow + CurrProv) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
}
|
||
break;
|
||
case -2: // Hay una tecla normal en BUFFER
|
||
#ifndef DEMOSTRACION
|
||
if ( VisualMode == OK )
|
||
{
|
||
while( kbhit() ) getch();
|
||
} else {
|
||
if ( ( key = getch() ) != 27 )
|
||
{
|
||
if ( key != 13 )
|
||
ungetch( key );
|
||
EditItemProv( CurrCol, CurrRow );
|
||
if ( BProv.EscribeReg( (void *)&SProv, (CurrRow + CurrProv) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraProv( CurrCol, CurrRow, NORMAL );
|
||
CurrCol++; if ( CurrCol > 14 ) CurrCol = 14;
|
||
}
|
||
}
|
||
#else
|
||
while( kbhit() ) getch();
|
||
Optar( 0, "VERSION DEMOSTRACION", "En esta versi¢n no se", "permiten m¢dificar los campos,", "de los proveedores...", NULL );
|
||
#endif
|
||
break;
|
||
case -1: // Hay una tecla especial en BUFFER
|
||
switch( getch() )
|
||
{
|
||
// Flecha Izquierda
|
||
case 75:
|
||
case 15:
|
||
CurrCol--; if ( CurrCol < 0 ) CurrCol = 14;
|
||
break;
|
||
// Flecha Derecha
|
||
case 77:
|
||
case 9:
|
||
CurrCol++; if ( CurrCol > 14 ) CurrCol = 0;
|
||
break;
|
||
// Flecha Arriba
|
||
case 72:
|
||
if ( CurrCol < 4 )
|
||
{
|
||
if ( (CurrRow + CurrProv) > 0 )
|
||
{
|
||
if ( ( CurrRow ) <= 0 )
|
||
{
|
||
CurrRow = NLINEAS_PROV - 1; CurrProv -= NLINEAS_PROV;
|
||
if ( CurrProv < 0 ) CurrProv = 0;
|
||
|
||
while( ( CurrRow + CurrProv ) >= BProv.Registros() && CurrRow > 0 ) CurrRow--;
|
||
while( ( CurrRow + CurrProv ) >= BProv.Registros() && CurrProv > 0 ) CurrProv++;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosProv( CurrProv );
|
||
} else {
|
||
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
|
||
}
|
||
}
|
||
|
||
if ( BProv.LeeReg( (void *)&SProv, (CurrProv + CurrRow) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraDatosVProv( CurrRow );
|
||
} else {
|
||
CurrCol--; if ( CurrCol < 0 ) CurrCol = 14;
|
||
}
|
||
break;
|
||
// Flecha Abajo
|
||
case 80:
|
||
if ( CurrCol < 4 )
|
||
{
|
||
if ( ( CurrRow + CurrProv ) < BProv.Registros() - 1 )
|
||
{
|
||
|
||
if ( ( CurrRow ) >= NLINEAS_PROV - 1 )
|
||
{
|
||
CurrRow = 0; CurrProv += NLINEAS_PROV;
|
||
|
||
while ( (CurrProv + CurrRow) >= BProv.Registros() ) CurrProv--;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosProv( CurrProv );
|
||
} else
|
||
CurrRow++;
|
||
}
|
||
if ( BProv.LeeReg( (void *)&SProv, (CurrProv + CurrRow) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraDatosVProv( CurrRow );
|
||
} else {
|
||
CurrCol++; if ( CurrCol > 14 ) CurrCol = 0;
|
||
}
|
||
break;
|
||
// Inicio
|
||
case 71:
|
||
CurrRow = 0;
|
||
if ( CurrProv != 0 )
|
||
{
|
||
CurrProv = 0;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosProv( CurrProv );
|
||
}
|
||
|
||
if ( BProv.LeeReg( (void *)&SProv, (CurrProv + CurrRow) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraDatosVProv( CurrRow );
|
||
break;
|
||
// Fin
|
||
case 79:
|
||
CurrRow = 0;
|
||
if ( CurrProv != BProv.Registros() - NLINEAS_PROV )
|
||
{
|
||
CurrProv = BProv.Registros() - NLINEAS_PROV;
|
||
if ( CurrProv < 0 )
|
||
{
|
||
CurrProv = 0;
|
||
CurrRow = BProv.Registros()-1;
|
||
}
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosProv( CurrProv );
|
||
}
|
||
|
||
if ( BProv.LeeReg( (void *)&SProv, (CurrProv + CurrRow) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraDatosVProv( CurrRow );
|
||
break;
|
||
}
|
||
break;
|
||
// Imprimir Proverencias
|
||
case 1:
|
||
MuestraImpresionesProv();
|
||
break;
|
||
// Menu Principal
|
||
case 2:
|
||
ok = 1;
|
||
break;
|
||
#ifndef DEMOSTRACION
|
||
// Eliminar
|
||
case 3:
|
||
if ( VisualMode == OK )
|
||
{
|
||
while( kbhit() ) getch();
|
||
} else {
|
||
if ( Optar( 1, "ATENCION", "Eliminar el proveedor", "provoc ra la perdida de datos", "para los informaes!!!", NULL ) )
|
||
{
|
||
if ( BProv.DelReg( CurrProv + CurrRow ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
if ( BProv.Registros() == 0 )
|
||
{
|
||
ProvNuevoRegistro( &SProv );
|
||
if ( BProv.InsReg( (void *)&SProv, BProv.Registros(), ARRIBA ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
CurrRow = 0;
|
||
} else
|
||
|
||
// Si he borrado el £ltimo registro subo una linea
|
||
if ( (CurrProv+CurrRow) >= ( BProv.Registros() - 2 ) )
|
||
{
|
||
if ( (CurrRow + CurrProv) > 0 )
|
||
{
|
||
if ( ( CurrRow ) <= 0 )
|
||
{
|
||
CurrRow = NLINEAS_PROV - 1; CurrProv -= NLINEAS_PROV;
|
||
if ( CurrProv < 0 ) CurrProv = 0;
|
||
|
||
while( ( CurrRow + CurrProv ) >= BProv.Registros() && CurrRow > 0 ) CurrRow--;
|
||
while( ( CurrRow + CurrProv ) >= BProv.Registros() && CurrProv > 0 ) CurrProv++;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosProv( CurrProv );
|
||
} else {
|
||
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
|
||
}
|
||
}
|
||
|
||
if ( BProv.LeeReg( (void *)&SProv, (CurrProv + CurrRow) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraDatosVProv( CurrRow );
|
||
}
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosProv( CurrProv );
|
||
if ( BProv.LeeReg( (void *)&SProv, (CurrProv + CurrRow) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraDatosVProv( CurrRow );
|
||
}
|
||
}
|
||
break;
|
||
// Insertar
|
||
case 4:
|
||
if ( VisualMode == OK )
|
||
{
|
||
while( kbhit() ) getch();
|
||
} else {
|
||
ProvNuevoRegistro( &SProv );
|
||
if ( BProv.InsReg( (void *)&SProv, (CurrProv + CurrRow), ARRIBA ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
if ( ( CurrRow + CurrProv ) < BProv.Registros() - 1 )
|
||
{
|
||
|
||
if ( ( CurrRow ) >= NLINEAS_PROV - 1 )
|
||
{
|
||
CurrRow = 0; CurrProv += NLINEAS_PROV;
|
||
|
||
while ( (CurrProv + CurrRow) >= BProv.Registros() ) CurrProv--;
|
||
|
||
} else
|
||
CurrRow++;
|
||
}
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosProv( CurrProv );
|
||
if ( BProv.LeeReg( (void *)&SProv, (CurrProv + CurrRow) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraDatosVProv( CurrRow );
|
||
}
|
||
break;
|
||
#else
|
||
// insertar//eliminar
|
||
case 3:
|
||
case 4:
|
||
Optar( 0, "VERSION DEMOSTRACION", "En esta versi¢n no se", "permiten eliminar ni insertar", "nuevos registros...", NULL );
|
||
break;
|
||
#endif
|
||
|
||
// Retroceso R pido
|
||
case 5:
|
||
#ifndef DEMOSTRACION
|
||
CurrRow = NLINEAS_PROV - 1; CurrProv -= NLINEAS_PROV;
|
||
if ( CurrProv < 0 ) CurrProv = 0;
|
||
|
||
while( ( CurrRow + CurrProv ) >= BProv.Registros() && CurrRow > 0 ) CurrRow--;
|
||
while( ( CurrRow + CurrProv ) >= BProv.Registros() && CurrProv > 0 ) CurrProv++;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosProv( CurrProv );
|
||
if ( BProv.LeeReg( (void *)&SProv, (CurrProv + CurrRow) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraDatosVProv( CurrRow );
|
||
#endif
|
||
break;
|
||
// Busqueda Atras
|
||
case 6:
|
||
BuscaProv( ATRAS, &CurrRow, &CurrProv );
|
||
break;
|
||
// Buscar
|
||
case 7:
|
||
BuscaProv( NUEVA_BUSQUEDA, &CurrRow, &CurrProv );
|
||
break;
|
||
// Busqueda Adelante
|
||
case 8:
|
||
BuscaProv( ADELANTE, &CurrRow, &CurrProv );
|
||
|
||
break;
|
||
// AvanceR pido
|
||
case 9:
|
||
#ifndef DEMOSTRACION
|
||
CurrRow = 0; CurrProv += NLINEAS_PROV;
|
||
|
||
while ( (CurrProv + CurrRow) >= BProv.Registros() ) CurrProv--;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosProv( CurrProv );
|
||
if ( BProv.LeeReg( (void *)&SProv, (CurrProv + CurrRow) ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraDatosVProv( CurrRow );
|
||
#endif
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
} while( !ok );
|
||
|
||
BProv.CerrarReg();
|
||
}
|
||
|
||
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MuestraDatosProv *|
|
||
|* *|
|
||
|* 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 MuestraDatosProv( long RowStart )
|
||
{
|
||
int linea, campo;
|
||
char dev;
|
||
int X0, Y0, X1, Y1;
|
||
|
||
// Imprimo la NLINEAS_PROV que caben en la pantalla
|
||
dev = OK;
|
||
for ( linea=0; linea < NLINEAS_PROV && (RowStart + linea) < BProv.Registros()/*dev == OK*/; linea++ )
|
||
{
|
||
dev = BProv.LeeReg( (void *)&SProv, RowStart + linea );
|
||
if ( dev == OK )
|
||
// Por cada linea hay 4 campos, ehhh!!!
|
||
for ( campo=0; campo < 4; campo++ )
|
||
MuestraProv( campo, linea, NORMAL );
|
||
}
|
||
|
||
// Ahora limpio los restantes huecos si los hay
|
||
if ( linea < NLINEAS_PROV ) //dev != OK )
|
||
{
|
||
//linea--;
|
||
setfillstyle( SOLID_FILL, Config.TxtBgN );
|
||
for ( ; linea < NLINEAS_PROV; linea++ )
|
||
for ( campo=0; campo < 4; campo++ )
|
||
{
|
||
ObtenCoordenadasProv( campo, linea, &X0, &Y0, &X1, &Y1 );
|
||
bar( X0, Y0, X1, Y1 );
|
||
}
|
||
}
|
||
}
|
||
|
||
void MuestraDatosVProv( int linea )
|
||
{
|
||
int campo;
|
||
|
||
// Mostramos los campos que faltan, ( 1¦ Linea )
|
||
// mas 5 que pertenecen a las estrellas
|
||
for ( campo=4; campo < 18+5; campo++ )
|
||
MuestraProv( campo, linea, NORMAL );
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MuestraProv *|
|
||
|* *|
|
||
|* 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 MuestraProv( char columna, int linea, char como )
|
||
{
|
||
char buffer[80], draw;
|
||
char buffer1[80], i;
|
||
|
||
int X0, Y0, X1, Y1;
|
||
|
||
ObtenCoordenadasProv( columna, linea, &X0, &Y0, &X1, &Y1 );
|
||
|
||
draw = 1;
|
||
|
||
|
||
switch( columna )
|
||
{
|
||
// Codigo
|
||
case 0:
|
||
sprintf ( buffer, " %09lu", SProv.CodigoR );
|
||
break;
|
||
// Nombre del proveedor
|
||
case 1:
|
||
sprintf ( buffer, "%30s", SProv.ActividadProveedor );
|
||
break;
|
||
// N§ de Telefono
|
||
case 2:
|
||
sprintf ( buffer, "%15s", SProv.Telefono1 );
|
||
break;
|
||
// Fax
|
||
case 3:
|
||
sprintf ( buffer, "%15s", SProv.Fax );
|
||
break;
|
||
|
||
// Codigo
|
||
case 4:
|
||
sprintf ( buffer, "%09lu", SProv.CodigoR );
|
||
break;
|
||
// NIF / CIF
|
||
case 5:
|
||
sprintf ( buffer, "%10s", SProv.Cif );
|
||
break;
|
||
// Nombre Proveedor
|
||
case 6:
|
||
sprintf ( buffer, "%29s", SProv.Proveedor );
|
||
break;
|
||
// Actividad Proveedor
|
||
case 7:
|
||
sprintf ( buffer, "%29s", SProv.ActividadProveedor );
|
||
break;
|
||
// Direccion
|
||
case 8:
|
||
sprintf ( buffer, " %30s", SProv.Direccion );
|
||
break;
|
||
// Localidad
|
||
case 9:
|
||
sprintf ( buffer, "%15s", SProv.Poblacion );
|
||
break;
|
||
// Provincia
|
||
case 10:
|
||
sprintf ( buffer, "%15s", SProv.Provincia );
|
||
break;
|
||
// Codigo Postal
|
||
case 11:
|
||
formatea_long( SProv.CodPost, buffer1 );
|
||
sprintf ( buffer, "%7s", buffer1 );
|
||
break;
|
||
// Telefono
|
||
case 12:
|
||
sprintf ( buffer, " %15s", SProv.Telefono1 );
|
||
break;
|
||
// Fax
|
||
case 13:
|
||
sprintf ( buffer, "%15s", SProv.Fax );
|
||
break;
|
||
|
||
// Comentario
|
||
case 14:
|
||
draw = 0;
|
||
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? Config.TxtBgN : Config.TxtBgI );
|
||
bar( X0, Y0, X1, Y1 );
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
|
||
setcolor ( ( como == NORMAL ) ? Config.TxtFgN : Config.TxtFgI );
|
||
for ( i = 0; i < 4; i++ )
|
||
outtextxy( X0, Y0 + 14*i, SProv.Notas[i] );
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
|
||
break;
|
||
|
||
// Estellas
|
||
case 15:
|
||
case 16:
|
||
case 17:
|
||
case 18:
|
||
case 19:
|
||
case 20:
|
||
case 21:
|
||
case 22:
|
||
if ( ( SProv.Estrellas & ( 0x01 << (columna - 15) ) ) >> (columna - 15 ) )
|
||
ponicono( X0+5, Y0+5, led_on, 1 );
|
||
else
|
||
ponicono( X0+5, Y0+5, led_off, 1 );
|
||
// En las estrellas no hay que imprimir nada
|
||
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 );
|
||
}
|
||
}
|
||
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MuestraAyudaProv *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Muestra una peque¤a descripcion del contenido para el campo *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* columna campo ha mostar su ayuda *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void MuestraAyudaProv( char columna )
|
||
{
|
||
char buffer1[80];
|
||
|
||
switch( columna )
|
||
{
|
||
// Codigo
|
||
case 0:
|
||
sprintf ( buffer1, "Introduzca el codigo que desea asignar al proveedor" );
|
||
break;
|
||
// Nombre del proveedor
|
||
case 1:
|
||
sprintf ( buffer1, "Actividad del proveedor" );
|
||
break;
|
||
// Telefono
|
||
case 2:
|
||
sprintf ( buffer1, "N£mero de tel‚fono del proveedor" );
|
||
break;
|
||
// N§ de Fax
|
||
case 3:
|
||
sprintf ( buffer1, "N£mero de Fax (necesario para enviarlos)" );
|
||
break;
|
||
|
||
// Codigo
|
||
case 4:
|
||
sprintf ( buffer1, "C¢digo de proveedor" );
|
||
break;
|
||
// Nif / Cif
|
||
case 5:
|
||
sprintf ( buffer1, "N.I.F. o C.I.F. del proveedor" );
|
||
break;
|
||
// Nombre del proveedor
|
||
case 6:
|
||
sprintf ( buffer1, "Nombre del proveedor" );
|
||
break;
|
||
// Actividad del proveedor
|
||
case 7:
|
||
sprintf ( buffer1, "Actividad del Proveedor" );
|
||
break;
|
||
// Direccion
|
||
case 8:
|
||
sprintf ( buffer1, "Direccion completa del proveedor" );
|
||
break;
|
||
// Poblacion
|
||
case 9:
|
||
sprintf ( buffer1, "Localidad del proveedor" );
|
||
break;
|
||
// Provincia
|
||
case 10:
|
||
sprintf ( buffer1, "Provincia" );
|
||
break;
|
||
// C¢digo postal
|
||
case 11:
|
||
sprintf ( buffer1, "C¢digo Postal" );
|
||
break;
|
||
// Telefono
|
||
case 12:
|
||
sprintf ( buffer1, "N£mero de tel‚fono del proveedor" );
|
||
break;
|
||
// Fax
|
||
case 13:
|
||
sprintf ( buffer1, "Fax o segundo tel‚fono del proveedor" );
|
||
break;
|
||
case 14:
|
||
sprintf ( buffer1, "Breves notas sobre el proveedor" );
|
||
break;
|
||
}
|
||
|
||
// Ayuda reducida
|
||
setfillstyle( SOLID_FILL, EGA_BLACK ); bar( 7, 457, 498, 473 );
|
||
// Imprime la ayudita
|
||
setcolor( EGA_WHITE ); outtextxy( 7, 457, buffer1 );
|
||
|
||
}
|
||
|
||
#ifndef DEMOSTRACION
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* EditItemProv *|
|
||
|* *|
|
||
|* 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 EditItemProv( char columna, int linea )
|
||
{
|
||
char buffer[80];
|
||
|
||
int X0, Y0, X1, Y1;
|
||
|
||
ObtenCoordenadasProv( columna, linea, &X0, &Y0, &X1, &Y1 );
|
||
|
||
switch( columna )
|
||
{
|
||
// Codigo Real
|
||
case 0:
|
||
case 4:
|
||
sprintf ( buffer, "%lu", SProv.CodigoR );
|
||
if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
SProv.CodigoR = atol( buffer );
|
||
MuestraProv( 0, linea, NORMAL );
|
||
MuestraProv( 4, linea, NORMAL );
|
||
break;
|
||
// Nombre del proveedor
|
||
// case 1:
|
||
case 6:
|
||
strcpy ( buffer, SProv.Proveedor );
|
||
if ( !( InputCadenaG( buffer, 0, 29, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SProv.Proveedor, buffer );
|
||
MuestraProv( 1, linea, NORMAL );
|
||
MuestraProv( 6, linea, NORMAL );
|
||
break;
|
||
// Telefono
|
||
case 2:
|
||
case 12:
|
||
sprintf ( buffer, "%s", SProv.Telefono1 );
|
||
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SProv.Telefono1, buffer );
|
||
MuestraProv( 2, linea, NORMAL );
|
||
MuestraProv( 12, linea, NORMAL );
|
||
break;
|
||
// Fax
|
||
case 3:
|
||
case 13:
|
||
sprintf ( buffer, "%s", SProv.Fax );
|
||
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SProv.Fax, buffer );
|
||
MuestraProv( 3, linea, NORMAL );
|
||
MuestraProv( 13, linea, NORMAL );
|
||
break;
|
||
|
||
|
||
// CIF / NIF
|
||
case 5:
|
||
sprintf ( buffer, "%s", SProv.Cif );
|
||
if ( !( InputCadenaG( buffer, 0, 10, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SProv.Cif, buffer );
|
||
break;
|
||
|
||
// Actividad proveedor
|
||
case 1:
|
||
case 7:
|
||
sprintf ( buffer, "%s", SProv.ActividadProveedor );
|
||
if ( !( InputCadenaG( buffer, 0, 29, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SProv.ActividadProveedor, buffer );
|
||
break;
|
||
|
||
// Direccion
|
||
case 8:
|
||
sprintf ( buffer, "%s", SProv.Direccion );
|
||
if ( !( InputCadenaG( buffer, 0, 30, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SProv.Direccion, buffer );
|
||
break;
|
||
// Poblaci¢n
|
||
case 9:
|
||
sprintf ( buffer, "%s", SProv.Poblacion );
|
||
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SProv.Poblacion, buffer );
|
||
break;
|
||
// Provincia
|
||
case 10:
|
||
sprintf ( buffer, "%s", SProv.Provincia );
|
||
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SProv.Provincia, buffer );
|
||
break;
|
||
// C¢digo Postal
|
||
case 11:
|
||
sprintf ( buffer, "%lu", SProv.CodPost );
|
||
if ( !( InputCadenaG( buffer, 0, 5, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
SProv.CodPost = atol ( buffer );
|
||
break;
|
||
// Comentario
|
||
case 14:
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
|
||
EditComentario( (char *)(&SProv.Notas[0][0]), 3, 37, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1, 14 );
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
|
||
break;
|
||
}
|
||
|
||
}
|
||
#endif
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* ObtenCoordenadasProv *|
|
||
|* *|
|
||
|* 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 ObtenCoordenadasProv( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 )
|
||
{
|
||
|
||
// Calculamos la Y0, Y1 para la linea dada ( SOLO columna < 6 )
|
||
*Y0 = 264 + 19*linea;
|
||
*Y1 = *Y0 + 17;
|
||
|
||
switch( columna )
|
||
{
|
||
case 0:
|
||
*X0 = 7; *X1 = 98;
|
||
break;
|
||
case 1:
|
||
*X0 = 107; *X1 = 358;
|
||
break;
|
||
case 2:
|
||
*X0 = 367; *X1 = 495;
|
||
break;
|
||
case 3:
|
||
*X0 = 505; *X1 = 633;
|
||
break;
|
||
|
||
case 4:
|
||
*X0 = 67; *Y0 = 37;
|
||
*X1 = 148; *Y1 = 58;
|
||
break;
|
||
case 5:
|
||
*X0 = 247; *Y0 = 37;
|
||
*X1 = 388; *Y1 = 58;
|
||
break;
|
||
case 6:
|
||
*X0 = 152; *Y0 = 62;
|
||
*X1 = 390; *Y1 = 83;
|
||
break;
|
||
case 7:
|
||
*X0 = 152; *Y0 = 87;
|
||
*X1 = 390; *Y1 = 108;
|
||
break;
|
||
case 8:
|
||
*X0 = 92; *Y0 = 112;
|
||
*X1 = 388; *Y1 = 133;
|
||
break;
|
||
case 9:
|
||
*X0 = 92; *Y0 = 137;
|
||
*X1 = 223; *Y1 = 158;
|
||
break;
|
||
case 10:
|
||
*X0 = 312; *Y0 = 137;
|
||
*X1 = 438; *Y1 = 158;
|
||
break;
|
||
case 11:
|
||
*X0 = 522; *Y0 = 137;
|
||
*X1 = 598; *Y1 = 158;
|
||
break;
|
||
case 12:
|
||
*X0 = 92; *Y0 = 162;
|
||
*X1 = 245; *Y1 = 183;
|
||
break;
|
||
case 13:
|
||
*X0 = 255; *Y0 = 162;
|
||
*X1 = 388; *Y1 = 183;
|
||
break;
|
||
|
||
case 14:
|
||
*X0 = 402; *Y0 = 165;
|
||
*X1 = 633; *Y1 = 221;
|
||
break;
|
||
|
||
case 15:
|
||
case 16:
|
||
case 17:
|
||
case 18:
|
||
case 19:
|
||
case 20:
|
||
case 21:
|
||
case 22:
|
||
*X0 = 90 + 30 * ( columna - 15 ); *Y0 = 190;
|
||
*X1 = *X0 + 25; *Y1 = 215;
|
||
break;
|
||
}
|
||
|
||
*X0 += 2;
|
||
*X1 -= 2;
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* ProvNuevoRegistro *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Limpia el buffer, para un nuevo registro. *|
|
||
|* *|
|
||
|* Entradas: (ninguna) *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void ProvNuevoRegistro( INFO_PROVEEDORES *NSProv )
|
||
{
|
||
char i, j;
|
||
|
||
NSProv -> CodigoR = 0; // Codigos asiignados a los proveedores
|
||
strcpy( NSProv -> Proveedor, "" ); // Nombre del proveedor
|
||
// Nombre del proveedor
|
||
strcpy( NSProv -> ActividadProveedor, "" );
|
||
|
||
strcpy( NSProv -> Telefono1, "" ); // Tel‚fono y fax del proveedor
|
||
strcpy( NSProv -> Fax, "" ); //
|
||
|
||
strcpy( NSProv -> Direccion, "" ); // Direccion
|
||
strcpy( NSProv -> Numero, "" ); // Numero
|
||
|
||
strcpy( NSProv -> Poblacion, "" ); // Poblacion
|
||
strcpy( NSProv -> Provincia, "" ); // Provincia
|
||
NSProv -> CodPost = 0; // C¢digo Postal
|
||
|
||
NSProv -> Estrellas = 0; // Estrellas ( lo que imagina el cliente )
|
||
|
||
for ( i = 0; i < 12; i++ )
|
||
for ( j = 0; j < 31; j++ )
|
||
NSProv -> Compras[i][j] = 0;
|
||
|
||
for ( i = 0; i < 4; i++ )
|
||
SProv.Notas[i][0] = '\0';
|
||
|
||
|
||
}
|
||
|
||
int CompruebaPulsosEstrellas(void)
|
||
{
|
||
char enc, i;
|
||
|
||
enc = 0;
|
||
|
||
for ( i=0; i < 8; i++ )
|
||
{
|
||
if ( y_raton > 190 && y_raton < 215 &&
|
||
x_raton > ( 90 + 30 * i ) && x_raton < ( 90 + 30 * i + 25 ) )
|
||
{
|
||
if ( SProv.Estrellas & ( 0x01 << i ) )
|
||
SProv.Estrellas -= ( 0x01 << i );
|
||
else
|
||
SProv.Estrellas += ( 0x01 << i );
|
||
|
||
enc = 15 + i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
Anclar_Raton();
|
||
|
||
return enc;
|
||
}
|
||
|
||
|
||
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
// Û Parte secundaria del m¢dulo Û
|
||
// Û Û
|
||
// Û Secci¢n de Busqueda de refecencias Û
|
||
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* BuscaProv *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Busca una referencia por su n§ o descripcion *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* ATRAS Busca otra coincidencia hacia atras *|
|
||
|* NUEVA_BUSQUEDA Inicia una nueva busqueda *|
|
||
|* ADELANTE Busca otra coincidencia hacia delante *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void BuscaProv( char TipoBusqueda, char *CurrRow, long *CurrProv )
|
||
{
|
||
static INFO_PROVEEDORES MProv;
|
||
char enc; long i;
|
||
|
||
|
||
switch ( TipoBusqueda )
|
||
{
|
||
case NUEVA_BUSQUEDA:
|
||
if ( ObtenMatchProv( &MProv ) != OK )
|
||
return;
|
||
i = 0;
|
||
break;
|
||
case ATRAS:
|
||
case ADELANTE:
|
||
i = ( *CurrRow + *CurrProv ) + TipoBusqueda;
|
||
break;
|
||
}
|
||
|
||
Optar( ENCUADRE, "Comando: Buscar", "Ahora se inica", "la busqueda elegida", NULL );
|
||
enc = 0;
|
||
while ( i < BProv.Registros() && !enc )
|
||
{
|
||
if ( BProv.LeeReg( (void *)&SProv, i ) == ERROR )
|
||
Error( 0x01, BProv.cError);
|
||
if ( Match_Prov( &SProv, &MProv ) )
|
||
enc = 1;
|
||
else
|
||
i++;
|
||
}
|
||
|
||
Optar( ENCUADRE, NULL );
|
||
|
||
if ( enc )
|
||
{
|
||
*CurrRow = 0; *CurrProv = i;
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosProv( *CurrRow + *CurrProv );
|
||
if ( BProv.LeeReg( (void *)&SProv, *CurrProv ) == ERROR )
|
||
Error(0x01, BProv.cError);
|
||
MuestraDatosVProv( *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 ( BProv.LeeReg( (void *)&SProv, (*CurrRow + *CurrProv) ) == ERROR )
|
||
Error( 0x01, BProv.cError);
|
||
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* Match_Prov *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Compara dos registros y devuelve la posible coincidencia *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Registros a comparar *|
|
||
|* *|
|
||
|* Salidas: *|
|
||
|* Resultado de la comparaci¢n *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
int Match_Prov( INFO_PROVEEDORES *A, INFO_PROVEEDORES *B )
|
||
{
|
||
if ( B -> CodigoR != 0 )
|
||
return (A -> CodigoR == B -> CodigoR);
|
||
if ( B -> Proveedor[0] != '\0' )
|
||
return ( strncmpi( A -> Proveedor, B -> Proveedor, strlen( B -> Proveedor ) ) == 0 );
|
||
if ( B -> Direccion[0] != '\0' )
|
||
return ( strncmpi( A -> Direccion, B -> Direccion, strlen( B -> Direccion ) ) == 0 );
|
||
if ( B -> Telefono1[0] != '\0' )
|
||
return ( strncmpi( A -> Telefono1, B -> Telefono1, strlen( B -> Telefono1 ) ) == 0 );
|
||
|
||
return 0;
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* ObtenMatchProv *|
|
||
|* *|
|
||
|* 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 ObtenMatchProv( INFO_PROVEEDORES *MProv )
|
||
{
|
||
char Row, ok, i;
|
||
int BPush, key, DEV;
|
||
struct textsettingstype texttypeinfo;
|
||
|
||
gettextsettings( &texttypeinfo );
|
||
|
||
Optar( ENCUADRE, "Comando: Buscar", NULL );
|
||
Imprime_Estaticos( 31, "systm\\tpv.img" );
|
||
|
||
ok = 0; Row = 0;
|
||
|
||
ProvNuevoRegistro( MProv );
|
||
|
||
do
|
||
{
|
||
MatchDrawProv(Row, *MProv, INTENSO);
|
||
BPush = Comprueba_Secuencia( SEC_OPTAR, NULL );
|
||
MatchDrawProv(Row, *MProv, 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 );
|
||
EditMatchProv( Row, MProv );
|
||
for ( i=0; i < 4; i++ )
|
||
MatchDrawProv(i, *MProv, 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 > 4 ) 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;
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* EditMatchProv *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Edita el patron de busqueda *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Campo a editar, y lugar donde almacenarlo *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void EditMatchProv( char Row, INFO_PROVEEDORES * MProv )
|
||
{
|
||
int X0, Y0, X1, Y1;
|
||
char buffer[80];
|
||
|
||
ObtenCoordenadasMatchProv( Row, &X0, &Y0, &X1, &Y1 );
|
||
|
||
switch( Row )
|
||
{
|
||
case 0:
|
||
sprintf( buffer, "%lu", MProv -> CodigoR );
|
||
if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
ProvNuevoRegistro( MProv );
|
||
MProv -> CodigoR = atol(buffer);
|
||
}
|
||
break;
|
||
case 1:
|
||
sprintf( buffer, "%s", MProv -> Proveedor );
|
||
if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
ProvNuevoRegistro( MProv );
|
||
strcpy ( MProv -> Proveedor, buffer );
|
||
}
|
||
break;
|
||
case 2:
|
||
sprintf( buffer, "%s", MProv -> Direccion );
|
||
if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
ProvNuevoRegistro( MProv );
|
||
strcpy ( MProv -> Direccion, buffer );
|
||
}
|
||
break;
|
||
case 3:
|
||
sprintf( buffer, "%s", MProv -> Telefono1 );
|
||
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
ProvNuevoRegistro( MProv );
|
||
strcpy ( MProv -> Telefono1, buffer );
|
||
}
|
||
break;
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MatchDrawProv *|
|
||
|* *|
|
||
|* 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 MatchDrawProv( char Row, INFO_PROVEEDORES MProv, char como )
|
||
{
|
||
int X0, Y0, X1, Y1;
|
||
char buffer[80];
|
||
|
||
ObtenCoordenadasMatchProv( Row, &X0, &Y0, &X1, &Y1 );
|
||
|
||
switch( Row )
|
||
{
|
||
case 0:
|
||
sprintf( buffer, " %9lu", MProv.CodigoR );
|
||
break;
|
||
case 1:
|
||
strncpy( buffer, MProv.Proveedor, 25 );
|
||
buffer[26] = '\0';
|
||
break;
|
||
case 2:
|
||
strncpy( buffer, MProv.Direccion, 25 );
|
||
buffer[26] = '\0';
|
||
break;
|
||
case 3:
|
||
strncpy( buffer, MProv.Telefono1, 15 );
|
||
buffer[15] = '\0';
|
||
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 );
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MatchDrawProv *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Obtiene las coordenadas relativas al campo dado. *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Campo a obtener las coordenadas, y coordenadas de salida *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void ObtenCoordenadasMatchProv( 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 MuestraImpresionesProv(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( 22, "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 );
|
||
|
||
ImprimeProveedores( dev );
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* ImprimeProveedores *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Imprime todas las referencias seg£n se le indique *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Como imprimir las referencias *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void ImprimeProveedores( char como )
|
||
{
|
||
long i, old_reg;
|
||
|
||
|
||
FILE *file_out;
|
||
|
||
old_reg = BProv.RegActual();
|
||
|
||
if ( !Config.Impresora.Printer )
|
||
{
|
||
if ( ( file_out = fopen( Config.Impresora.PrintTo, "w" ) ) == NULL )
|
||
return;
|
||
} else
|
||
file_out = stdprn;
|
||
|
||
ImprimeCabeceraProv(como, file_out);
|
||
|
||
for ( i=0; i<BProv.Registros(); i++ )
|
||
{
|
||
BProv.LeeReg( (void *)&SProv, i );
|
||
switch( como )
|
||
{
|
||
// Listado R pido
|
||
case 1:
|
||
fprintf( file_out, "%9lu %-30s %-15s %-15s\n\r", SProv.CodigoR, SProv.Proveedor, SProv.Telefono1, SProv.Fax );
|
||
break;
|
||
// Listado Completo
|
||
case 2:
|
||
fprintf( file_out, "\n\r" );
|
||
fprintf( file_out, "\n\r" );
|
||
fprintf( file_out, "N§ Proveedor: %9lu\n\r", SProv.CodigoR );
|
||
fprintf( file_out, "\n\r" );
|
||
fprintf( file_out, "Nombre Proveedor: %s\n\r", SProv.Proveedor );
|
||
fprintf( file_out, "\n\r" );
|
||
fprintf( file_out, "Telefono: %-15s Fax: %-15s\n\r", SProv.Telefono1, SProv.Fax );
|
||
fprintf( file_out, "\n\r" );
|
||
fprintf( file_out, "Direccion: %s %s%s\n\r", SProv.Direccion, SProv.Numero[0] == '\0' ? "" : ", n§ ", SProv.Numero );
|
||
fprintf( file_out, "\n\r" );
|
||
fprintf( file_out, "\n\r" );
|
||
break;
|
||
// C¢digos de barra
|
||
case 3:
|
||
break;
|
||
}
|
||
}
|
||
|
||
if ( !Config.Impresora.Printer )
|
||
fclose( file_out );
|
||
|
||
BProv.LeeReg( (void *)&SProv, old_reg );
|
||
|
||
}
|
||
|
||
void ImprimeCabeceraProv( char como, FILE *file_out )
|
||
{
|
||
|
||
switch( como )
|
||
{
|
||
// Listado R pido
|
||
case 1:
|
||
fprintf( file_out, "Codigo Provvedor Tel‚fono Fax\n\r");
|
||
break;
|
||
// Listado Completo
|
||
case 2:
|
||
// C¢digos de barra
|
||
case 3:
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|