1487 lines
55 KiB
C++
1487 lines
55 KiB
C++
#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_REF 15
|
||
|
||
|
||
BDatos BRef; // Base de datos de Referencias
|
||
INFO_PRODUCTOS SRef; // Estructura de referencias
|
||
|
||
// Empresa a la que se le realizan las gestiones
|
||
extern char EmpresaActual[9];
|
||
|
||
/*************************************\
|
||
| |
|
||
| Parte Principal del M¢dulo |
|
||
| |
|
||
\*************************************/
|
||
void ReinicializarStock( void );
|
||
void MuestraDatosVRef( int linea);
|
||
void MuestraDatosRef( long RowStart );
|
||
void MuestraAyudaRef( char columna );
|
||
void EditItemRef( char columna, int linea );
|
||
void RefNuevoRegistro( INFO_PRODUCTOS *MSRef );
|
||
void MuestraRef( char columna, int linea, char como );
|
||
void ObtenCoordenadasRef( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 );
|
||
|
||
/*************************************\
|
||
| |
|
||
| Parte Secundaria del M¢dulo |
|
||
| |
|
||
| Secci¢n de Busqueda de Productos |
|
||
| |
|
||
\*************************************/
|
||
void ObtenCoordenadasMatch( char Row, int *X0, int *Y0, int *X1, int *Y1 );
|
||
void MatchDrawRef( char Row, INFO_PRODUCTOS MRef, char como );
|
||
int BuscaRef( char TipoBusqueda, char *CurrRow, long *CurrRef );
|
||
int Match_Ref( INFO_PRODUCTOS A, INFO_PRODUCTOS B );
|
||
void EditMatchRef( char Row, INFO_PRODUCTOS * MRef );
|
||
int ObtenMatchRef( INFO_PRODUCTOS *MRef );
|
||
|
||
/*************************************\
|
||
| |
|
||
| Parte Tercera del M¢dulo |
|
||
| |
|
||
| Secci¢n para la impresi¢n |
|
||
| |
|
||
\*************************************/
|
||
void MuestraImpresionesRed( void );
|
||
void ImprimeReferencias( char como );
|
||
void ImprimeCabeceraRef( char como, FILE *file_out );
|
||
|
||
|
||
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
// Û Parte principal del m¢dulo Û
|
||
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* InfoProducto *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Controla la introduccion de datos y muestreo asi como todo *|
|
||
|* el interfaz de usuario... *|
|
||
|* *|
|
||
|* Entradas: (ninguna) *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void InfoProductos(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 CurrRef; // 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( 20, "systm\\Tpv.img"); // Imprime botones estaticos 'Seccion 1'
|
||
|
||
sprintf( buffer, "datos\\%s\\info_ref.dbf", NEmpresa );
|
||
if ( BRef.AbrirReg( buffer, sizeof( INFO_PRODUCTOS ) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
|
||
// Si no hay registros, creamos uno almenos.
|
||
if ( BRef.Registros() == 0 )
|
||
{
|
||
RefNuevoRegistro( &SRef );
|
||
if ( BRef.InsReg( (void *)&SRef, BRef.Registros(), ARRIBA ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
}
|
||
|
||
CurrRef = 0; CurrRow = 0;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRow + CurrRef );
|
||
if ( BRef.LeeReg( (void *)&SRef, 0 ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
|
||
CurrCol = 0;
|
||
|
||
do {
|
||
if ( CurrCol != oldCol )
|
||
{
|
||
oldCol = CurrCol; MuestraAyudaRef( CurrCol );
|
||
}
|
||
|
||
MuestraRef( CurrCol, CurrRow, INTENSO );
|
||
BPush = Comprueba_Secuencia( 2, NULL );
|
||
MuestraRef( 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
|
||
if ( ( key = getch() ) != 13 && key != 27 )
|
||
ungetch( key );
|
||
EditItemRef( CurrCol, CurrRow );
|
||
if ( BRef.EscribeReg( (void *)&SRef, (CurrRow + CurrRef) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraRef( CurrCol, CurrRow, NORMAL );
|
||
CurrCol++; if ( CurrCol > 20 ) CurrCol = 20;
|
||
break;
|
||
case -1: // Hay una tecla especial en BUFFER
|
||
switch( getch() )
|
||
{
|
||
// Flecha Izquierda
|
||
case 75:
|
||
case 15:
|
||
CurrCol--; if ( CurrCol < 0 ) CurrCol = 20;
|
||
break;
|
||
// Flecha Derecha
|
||
case 77:
|
||
case 9:
|
||
CurrCol++; if ( CurrCol > 20 ) CurrCol = 0;
|
||
break;
|
||
// Flecha Arriba
|
||
case 72:
|
||
if ( CurrCol >= 7 && CurrCol < 21 )
|
||
{
|
||
CurrCol--; if ( CurrCol < 7 ) CurrCol = 7;
|
||
} else {
|
||
if ( (CurrRow + CurrRef) > 0 )
|
||
{
|
||
if ( ( CurrRow ) <= 0 )
|
||
{
|
||
CurrRow = NLINEAS_REF - 1; CurrRef -= NLINEAS_REF;
|
||
if ( CurrRef < 0 ) CurrRef = 0;
|
||
|
||
while( ( CurrRow + CurrRef ) >= BRef.Registros() && CurrRow > 0 ) CurrRow--;
|
||
while( ( CurrRow + CurrRef ) >= BRef.Registros() && CurrRef > 0 ) CurrRef++;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRef );
|
||
} else {
|
||
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
|
||
}
|
||
}
|
||
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRef + CurrRow) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
}
|
||
break;
|
||
// Flecha Abajo
|
||
case 80:
|
||
if ( CurrCol >= 7 && CurrCol < 21 )
|
||
{
|
||
CurrCol++; if ( CurrCol > 20 ) CurrCol = 20;
|
||
} else {
|
||
if ( ( CurrRow + CurrRef ) < BRef.Registros() - 1 )
|
||
{
|
||
|
||
if ( ( CurrRow ) >= NLINEAS_REF - 1 )
|
||
{
|
||
CurrRow = 0; CurrRef += NLINEAS_REF;
|
||
|
||
while ( (CurrRef + CurrRow) >= BRef.Registros() ) CurrRef--;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRef );
|
||
} else
|
||
CurrRow++;
|
||
}
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRef + CurrRow) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
}
|
||
break;
|
||
// Inicio
|
||
case 71:
|
||
CurrRow = 0;
|
||
if ( CurrRef != 0 )
|
||
{
|
||
CurrRef = 0;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRef );
|
||
}
|
||
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRef + CurrRow) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
|
||
break;
|
||
// Fin
|
||
case 79:
|
||
CurrRow = 0;
|
||
if ( CurrRef != BRef.Registros() - NLINEAS_REF )
|
||
{
|
||
CurrRef = BRef.Registros() - NLINEAS_REF;
|
||
if ( CurrRef < 0 )
|
||
{
|
||
CurrRef = 0;
|
||
CurrRow = BRef.Registros()-1;
|
||
}
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRef );
|
||
}
|
||
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRef + CurrRow) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
|
||
break;
|
||
|
||
}
|
||
break;
|
||
// Imprimir Referencias
|
||
case 1:
|
||
MuestraImpresionesRed();
|
||
break;
|
||
// Menu Principal
|
||
case 2:
|
||
ok = 1;
|
||
break;
|
||
#ifndef DEMOSTRACION
|
||
// Eliminar
|
||
case 3:
|
||
if ( Optar( 1, "ATENCION", "Eliminar una Ref. provocar ", "la eliminaci¢n de su stock", "y enlaces antiguos...", NULL ) )
|
||
{
|
||
if ( BRef.DelReg( CurrRef + CurrRow ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
if ( BRef.Registros() == 0 )
|
||
{
|
||
RefNuevoRegistro( &SRef );
|
||
if ( BRef.InsReg( (void *)&SRef, BRef.Registros(), ARRIBA ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
CurrRow = 0;
|
||
} else
|
||
|
||
// Si he borrado el £ltimo registro subo una linea
|
||
if ( (CurrRef+CurrRow) >= ( BRef.Registros() - 2 ) )
|
||
{
|
||
if ( (CurrRow + CurrRef) > 0 )
|
||
{
|
||
if ( ( CurrRow ) <= 0 )
|
||
{
|
||
CurrRow = NLINEAS_REF - 1; CurrRef -= NLINEAS_REF;
|
||
if ( CurrRef < 0 ) CurrRef = 0;
|
||
|
||
while( ( CurrRow + CurrRef ) >= BRef.Registros() && CurrRow > 0 ) CurrRow--;
|
||
while( ( CurrRow + CurrRef ) >= BRef.Registros() && CurrRef > 0 ) CurrRef++;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRef );
|
||
} else {
|
||
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
|
||
}
|
||
}
|
||
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRef + CurrRow) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
}
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRef );
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRef + CurrRow) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
}
|
||
break;
|
||
// Insertar
|
||
case 4:
|
||
RefNuevoRegistro( &SRef );
|
||
if ( BRef.InsReg( (void *)&SRef, (CurrRef + CurrRow), ARRIBA ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
if ( ( CurrRow + CurrRef ) < BRef.Registros() - 1 )
|
||
{
|
||
|
||
if ( ( CurrRow ) >= NLINEAS_REF - 1 )
|
||
{
|
||
CurrRow = 0; CurrRef += NLINEAS_REF;
|
||
|
||
while ( (CurrRef + CurrRow) >= BRef.Registros() ) CurrRef--;
|
||
|
||
} else
|
||
CurrRow++;
|
||
}
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRef );
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRef + CurrRow) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( 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_REF - 1; CurrRef -= NLINEAS_REF;
|
||
if ( CurrRef < 0 ) CurrRef = 0;
|
||
|
||
while( ( CurrRow + CurrRef ) >= BRef.Registros() && CurrRow > 0 ) CurrRow--;
|
||
while( ( CurrRow + CurrRef ) >= BRef.Registros() && CurrRef > 0 ) CurrRef++;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRef );
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRef + CurrRow) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
#endif
|
||
break;
|
||
// Busqueda Atras
|
||
case 6:
|
||
if ( BuscaRef( ATRAS, &CurrRow, &CurrRef ) == OK )
|
||
{
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRow + CurrRef );
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRow + CurrRef) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
} else {
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRow + CurrRef) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
}
|
||
break;
|
||
// Buscar
|
||
case 7:
|
||
if ( BuscaRef( NUEVA_BUSQUEDA, &CurrRow, &CurrRef ) == OK )
|
||
{
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRow + CurrRef );
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRow + CurrRef) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
} else {
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRow + CurrRef) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
}
|
||
break;
|
||
// Busqueda Adelante
|
||
case 8:
|
||
if ( BuscaRef( ADELANTE, &CurrRow, &CurrRef ) == OK )
|
||
{
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRow + CurrRef );
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRow + CurrRef) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
} else {
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRow + CurrRef) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
}
|
||
|
||
break;
|
||
// AvanceR pido
|
||
case 9:
|
||
#ifndef DEMOSTRACION
|
||
CurrRow = 0; CurrRef += NLINEAS_REF;
|
||
|
||
while ( (CurrRef + CurrRow) >= BRef.Registros() ) CurrRef--;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRef );
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRef + CurrRow) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
#endif
|
||
break;
|
||
// Poner a cero el stock
|
||
case 10:
|
||
#ifndef DEMOSTRACION
|
||
if ( Optar( 1, "Reinicializar Stock", "Atenci¢n esta apunto de", "borrar todo el stock, desea", "seguir con la operaci¢n ?", NULL ) )
|
||
{
|
||
|
||
ReinicializarStock();
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( CurrRef );
|
||
if ( BRef.LeeReg( (void *)&SRef, (CurrRef + CurrRow) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( CurrRow );
|
||
}
|
||
#else
|
||
Optar( 0, "VERSION DEMOSTRACION", "En esta versi¢n no se", "permiten reinicializar el", "el stock, de forma autom tica", NULL );
|
||
#endif
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
} while( !ok );
|
||
|
||
BRef.CerrarReg();
|
||
}
|
||
|
||
#ifndef DEMOSTRACION
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* ReinicializarStock *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Recorre toda la base de datos, poniendo el stock a cero. *|
|
||
|* *|
|
||
|* Entradas: (ninguna) *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void ReinicializarStock( void )
|
||
{
|
||
long RegStk;
|
||
|
||
for ( RegStk=0; RegStk < BRef.Registros(); RegStk++ )
|
||
{
|
||
BRef.LeeReg( (void *)&SRef, RegStk );
|
||
SRef.Stock = 0;
|
||
BRef.EscribeReg( (void *)&SRef, RegStk );
|
||
}
|
||
|
||
}
|
||
#endif
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MuestraDatosRef *|
|
||
|* *|
|
||
|* 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 MuestraDatosRef( long RowStart )
|
||
{
|
||
int linea, campo;
|
||
char dev;
|
||
int X0, Y0, X1, Y1;
|
||
|
||
// Imprimo la NLINEAS_REF que caben en la pantalla
|
||
dev = OK;
|
||
for ( linea=0; linea < NLINEAS_REF && dev == OK; linea++ )
|
||
{
|
||
dev = BRef.LeeReg( (void *)&SRef, RowStart + linea );
|
||
if ( dev == OK )
|
||
// Por cada linea hay 6 campos, ehhh!!!
|
||
for ( campo=0; campo < 7; campo++ )
|
||
MuestraRef( campo, linea, NORMAL );
|
||
}
|
||
|
||
// Ahora limpio los restantes huecos si los hay
|
||
if ( dev != OK )
|
||
{
|
||
linea--;
|
||
setfillstyle( SOLID_FILL, Config.TxtBgN );
|
||
for ( ; linea < NLINEAS_REF; linea++ )
|
||
for ( campo=0; campo < 7; campo++ )
|
||
{
|
||
ObtenCoordenadasRef( campo, linea, &X0, &Y0, &X1, &Y1 );
|
||
bar( X0, Y0, X1, Y1 );
|
||
}
|
||
}
|
||
}
|
||
|
||
void MuestraDatosVRef( int linea )
|
||
{
|
||
int campo;
|
||
|
||
// Mostramos los campos que faltan, ( 1¦ Linea )
|
||
for ( campo=7; campo < 21; campo++ )
|
||
MuestraRef( campo, linea, NORMAL );
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MuestraRef *|
|
||
|* *|
|
||
|* 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 MuestraRef( char columna, int linea, char como )
|
||
{
|
||
char buffer[80];
|
||
char buffer1[80];
|
||
|
||
int X0, Y0, X1, Y1;
|
||
|
||
ObtenCoordenadasRef( columna, linea, &X0, &Y0, &X1, &Y1 );
|
||
|
||
switch( columna )
|
||
{
|
||
// Codigo Real
|
||
case 0:
|
||
sprintf ( buffer, " %09lu", SRef.CodigoR );
|
||
break;
|
||
// Nombre del producto
|
||
case 1:
|
||
sprintf ( buffer, "%30s", SRef.Descripcion );
|
||
break;
|
||
// Cantidad por unidad
|
||
case 2:
|
||
formatea_u_long( (unsigned long)SRef.CantUnitaria, buffer1 );
|
||
sprintf ( buffer, "%4s", buffer1 );
|
||
break;
|
||
// Precio de costo
|
||
case 3:
|
||
formatea_u_long( (unsigned long)SRef.PrecioCosto, buffer1 );
|
||
sprintf ( buffer, "%6s", buffer1 );
|
||
break;
|
||
// Precio V. P.
|
||
case 4:
|
||
formatea_u_long( (unsigned long)SRef.PrecioVenta[0], buffer1 );
|
||
sprintf ( buffer, "%6s", buffer1 );
|
||
break;
|
||
// þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ
|
||
// IVA Asociado
|
||
case 5:
|
||
sprintf ( buffer, "%2d", SRef.Categoria );
|
||
break;
|
||
|
||
// Stock actual del producto
|
||
case 6:
|
||
formatea_long( (long)SRef.Stock, buffer1 );
|
||
sprintf ( buffer, "%7s", buffer1 );
|
||
break;
|
||
// Codigos asociados
|
||
case 7:
|
||
case 8:
|
||
case 9:
|
||
case 10:
|
||
case 11:
|
||
case 12:
|
||
case 13:
|
||
case 14:
|
||
case 15:
|
||
case 16:
|
||
sprintf ( buffer, " %09ld", SRef.CodigosAsociados[columna-7] );
|
||
break;
|
||
// Precios de venta segun horarios.
|
||
case 17:
|
||
case 18:
|
||
case 19:
|
||
case 20:
|
||
formatea_u_long( (unsigned long)SRef.PrecioVenta[columna - 17 + 1], buffer1 );
|
||
sprintf ( buffer, "%6s", buffer1 );
|
||
break;
|
||
}
|
||
|
||
if ( columna <= 6 && SRef.Categoria == 99 && SRef.PrecioCosto == 0 && SRef.PrecioVenta[0] == 0 )
|
||
if ( como == NORMAL ) como = INTENSO; else como = NORMAL;
|
||
|
||
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 );
|
||
|
||
}
|
||
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MuestraAyudaRef *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Muestra una peque¤a descripcion del contenido para el campo *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* columna campo ha mostar su ayuda *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void MuestraAyudaRef( char columna )
|
||
{
|
||
char buffer1[80];
|
||
|
||
switch( columna )
|
||
{
|
||
// Codigo Real
|
||
case 0:
|
||
sprintf ( buffer1, "Introduzca el codigo que desea asignar al producto" );
|
||
break;
|
||
// Nombre del producto
|
||
case 1:
|
||
sprintf ( buffer1, "Nombre para el producto" );
|
||
break;
|
||
// Cantidad por unidad
|
||
case 2:
|
||
sprintf ( buffer1, "Unidades que trae cada producto, al adquirirlo" );
|
||
break;
|
||
// Precio de costo
|
||
case 3:
|
||
sprintf ( buffer1, "Precio de costo por unidad ( la que sera vendida )" );
|
||
break;
|
||
// Precio V. P.
|
||
case 4:
|
||
sprintf ( buffer1, "Precio de venta por unidad ( la que sera vendida )" );
|
||
break;
|
||
// IVA Asociado
|
||
case 5:
|
||
sprintf ( buffer1, "I.V.A Asociado al proucto" );
|
||
break;
|
||
|
||
// Stock actual del producto
|
||
case 6:
|
||
sprintf ( buffer1, "Stock actual de ese producto" );
|
||
break;
|
||
// Codigos asociados
|
||
case 7:
|
||
case 8:
|
||
case 9:
|
||
case 10:
|
||
case 11:
|
||
case 12:
|
||
case 13:
|
||
case 14:
|
||
case 15:
|
||
case 16:
|
||
sprintf ( buffer1, "Codigo asociado ( para los combinados )" );
|
||
break;
|
||
// Precios de venta segun horarios.
|
||
case 17:
|
||
case 18:
|
||
case 19:
|
||
case 20:
|
||
sprintf ( buffer1, "Precios especiales por horario." );
|
||
break;
|
||
}
|
||
|
||
// Ayuda reducida
|
||
setfillstyle( SOLID_FILL, EGA_BLACK ); bar( 7, 457, 498, 473 );
|
||
// Imprime la ayudita
|
||
setcolor( EGA_WHITE ); outtextxy( 7, 457, buffer1 );
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* EditItemRef *|
|
||
|* *|
|
||
|* 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 EditItemRef( char columna, int linea )
|
||
{
|
||
char buffer[80];
|
||
char old;
|
||
|
||
int X0, Y0, X1, Y1;
|
||
|
||
ObtenCoordenadasRef( columna, linea, &X0, &Y0, &X1, &Y1 );
|
||
|
||
switch( columna )
|
||
{
|
||
// Codigo Real
|
||
case 0:
|
||
sprintf ( buffer, "%lu", SRef.CodigoR );
|
||
if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
SRef.CodigoR = atol( buffer );
|
||
|
||
break;
|
||
// Nombre del producto
|
||
case 1:
|
||
strcpy ( buffer, SRef.Descripcion );
|
||
if ( !( InputCadenaG( buffer, 0, 30, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SRef.Descripcion, buffer );
|
||
break;
|
||
// Cantidad por unidad
|
||
case 2:
|
||
sprintf ( buffer, "%u", SRef.CantUnitaria );
|
||
if ( !( InputCadenaG( buffer, 1, 4, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
SRef.CantUnitaria = atoi( buffer );
|
||
break;
|
||
// Precio de costo
|
||
case 3:
|
||
sprintf ( buffer, "%ld", SRef.PrecioCosto );
|
||
if ( !( InputCadenaG( buffer, 1, 5, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
SRef.PrecioCosto = atol( buffer );
|
||
break;
|
||
// Precio V. P.
|
||
case 4:
|
||
sprintf ( buffer, "%ld", SRef.PrecioVenta[0] );
|
||
if ( !( InputCadenaG( buffer, 1, 5, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
SRef.PrecioVenta[0] = atol( buffer );
|
||
SRef.PrecioVenta[1] = SRef.PrecioVenta[0];
|
||
SRef.PrecioVenta[2] = SRef.PrecioVenta[0];
|
||
SRef.PrecioVenta[3] = SRef.PrecioVenta[0];
|
||
SRef.PrecioVenta[4] = SRef.PrecioVenta[0];
|
||
MuestraRef( 16, 0, NORMAL );
|
||
MuestraRef( 17, 0, NORMAL );
|
||
MuestraRef( 18, 0, NORMAL );
|
||
MuestraRef( 19, 0, NORMAL );
|
||
}
|
||
break;
|
||
|
||
// þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ
|
||
// IVA Asociado
|
||
case 5:
|
||
old = SRef.Categoria;
|
||
sprintf ( buffer, "%d", (int)SRef.Categoria );
|
||
if ( !( InputCadenaG( buffer, 1, 2, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
SRef.Categoria = (int)atoi( buffer );
|
||
|
||
if ( SRef.Categoria == 99 || ( old == 99 && SRef.Categoria != 99 ) )
|
||
for ( columna = 0; columna <= 6; columna++ )
|
||
MuestraRef( columna, linea, NORMAL );
|
||
}
|
||
break;
|
||
|
||
// Stock actual del producto
|
||
case 6:
|
||
sprintf ( buffer, "%ld", SRef.Stock );
|
||
if ( !( InputCadenaG( buffer, 1, 6, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
SRef.Stock = atol( buffer );
|
||
break;
|
||
// Codigos asociados
|
||
case 7:
|
||
case 8:
|
||
case 9:
|
||
case 10:
|
||
case 11:
|
||
case 12:
|
||
case 13:
|
||
case 14:
|
||
case 15:
|
||
case 16:
|
||
sprintf ( buffer, "%lu", SRef.CodigosAsociados[columna-7] );
|
||
if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
SRef.CodigosAsociados[columna-7] = atol( buffer );
|
||
// Buscamos por todos los codigos asiciados para ver si alguno
|
||
// es distinto de cero, con lo que se activaria el combinado..
|
||
SRef.Combinado = 0;
|
||
for ( columna = 0; columna < 10; columna++ )
|
||
if ( SRef.CodigosAsociados[columna] != 0 )
|
||
{
|
||
SRef.Combinado = 1;
|
||
break;
|
||
}
|
||
break;
|
||
// Precios de venta segun horarios.
|
||
case 17:
|
||
case 18:
|
||
case 19:
|
||
case 20:
|
||
sprintf ( buffer, "%lu", SRef.PrecioVenta[columna-17 + 1 ] );
|
||
if ( !( InputCadenaG( buffer, 1, 5, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
SRef.PrecioVenta[columna-17 + 1 ] = atol( buffer );
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* ObtenCoordenadasRef *|
|
||
|* *|
|
||
|* 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 ObtenCoordenadasRef( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 )
|
||
{
|
||
|
||
// Calculamos la Y0, Y1 para la linea dada ( SOLO columna < 6 )
|
||
*Y0 = 164 + 19*linea;
|
||
*Y1 = *Y0 + 17;
|
||
|
||
switch( columna )
|
||
{
|
||
// C¢digo
|
||
case 0:
|
||
// *X0 = 7; *X1 = 98;
|
||
*X0 = 7; *X1 = 95;
|
||
break;
|
||
// Nombre Articulo
|
||
case 1:
|
||
// *X0 = 107; *X1 = 358;
|
||
*X0 = 104; *X1 = 355;
|
||
break;
|
||
// UNDs
|
||
case 2:
|
||
// *X0 = 367; *X1 = 403;
|
||
*X0 = 364; *X1 = 403;
|
||
break;
|
||
// P.C.
|
||
case 3:
|
||
*X0 = 412; *X1 = 466;
|
||
break;
|
||
// P.V.P.
|
||
case 4:
|
||
*X0 = 476; *X1 = 529;
|
||
break;
|
||
|
||
// IVA Asociado
|
||
case 5:
|
||
*X0 = 538; *X1 = 563;
|
||
break;
|
||
|
||
// Stock Actual
|
||
case 6:
|
||
*X0 = 572; *X1 = 633;
|
||
break;
|
||
|
||
// Codigos asociados
|
||
case 7:
|
||
case 8:
|
||
case 9:
|
||
case 10:
|
||
case 11:
|
||
*X0 = 37; *Y0 = 11 + 22*(columna-7);
|
||
*X1 = 128; *Y1 = *Y0 + 20;
|
||
break;
|
||
case 12:
|
||
case 13:
|
||
case 14:
|
||
case 15:
|
||
case 16:
|
||
*X0 = 137; *Y0 = 11 + 22*(columna-12);
|
||
*X1 = 228; *Y1 = *Y0 + 20;
|
||
break;
|
||
// Hora 2
|
||
case 17:
|
||
*X0 = 301; *Y0 = 13;
|
||
*X1 = 359; *Y1 = 27;
|
||
break;
|
||
// Hora 3
|
||
case 18:
|
||
*X0 = 301; *Y0 = 38;
|
||
*X1 = 359; *Y1 = 52;
|
||
break;
|
||
// Hora 4
|
||
case 19:
|
||
*X0 = 301; *Y0 = 63;
|
||
*X1 = 359; *Y1 = 77;
|
||
break;
|
||
// Hora 5
|
||
case 20:
|
||
*X0 = 301; *Y0 = 88;
|
||
*X1 = 359; *Y1 = 102;
|
||
break;
|
||
}
|
||
|
||
*X0 += 2;
|
||
*X1 -= 2;
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* RefNuevoRegistro *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Limpia el buffer, para un nuevo registro. *|
|
||
|* *|
|
||
|* Entradas: (ninguna) *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void RefNuevoRegistro( INFO_PRODUCTOS *NSRef )
|
||
{
|
||
int i;
|
||
|
||
NSRef -> Categoria = 0; // Otros, Refresco, Tapas, Barriles...
|
||
|
||
NSRef -> CodigoR = 0; // Codigo real del producto
|
||
NSRef -> CodigoB = 0; // Codigo de barras asociado al producto
|
||
|
||
NSRef -> Descripcion[0] = '\0'; // Nombre del Producto
|
||
|
||
NSRef -> CantUnitaria = 1; // # de productos por unidad
|
||
|
||
NSRef -> PrecioCosto = 0; // Precio de costo
|
||
for ( i=0; i< 5; i++ ) // P.V.P seg£n horas definidas por el usuario...
|
||
NSRef -> PrecioVenta[i] = 0;
|
||
|
||
NSRef -> Stock = 0; // # de productos actualmente
|
||
|
||
// Codigos asociados a este producto ( COMBINADOS )
|
||
for ( i=0; i<10; i++ )
|
||
NSRef -> CodigosAsociados[i] = 0;
|
||
|
||
NSRef -> Combinado = 0;
|
||
|
||
}
|
||
|
||
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
// Û Parte secundaria del m¢dulo Û
|
||
// Û Û
|
||
// Û Secci¢n de Busqueda de refecencias Û
|
||
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* BuscaRef *|
|
||
|* *|
|
||
|* 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) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
int BuscaRef( char TipoBusqueda, char *CurrRow, long *CurrRef )
|
||
{
|
||
static INFO_PRODUCTOS MRef;
|
||
char enc; long i;
|
||
|
||
|
||
switch ( TipoBusqueda )
|
||
{
|
||
case NUEVA_BUSQUEDA:
|
||
if ( ObtenMatchRef( &MRef ) != OK )
|
||
return ERROR;
|
||
i = 0;
|
||
break;
|
||
case ATRAS:
|
||
case ADELANTE:
|
||
i = ( *CurrRow + *CurrRef ) + TipoBusqueda;
|
||
break;
|
||
}
|
||
|
||
Optar( ENCUADRE, "Comando: Buscar", "Ahora se inica", "la busqueda elegida", NULL );
|
||
enc = 0;
|
||
while ( i < BRef.Registros() && !enc )
|
||
{
|
||
if ( BRef.LeeReg( (void *)&SRef, i ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
if ( Match_Ref( SRef, MRef ) )
|
||
enc = 1;
|
||
else
|
||
i++;
|
||
}
|
||
|
||
Optar( ENCUADRE, NULL );
|
||
|
||
if ( enc )
|
||
{
|
||
*CurrRow = 0; *CurrRef = i;
|
||
/*
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatosRef( *CurrRow + *CurrRef );
|
||
if ( BRef.LeeReg( (void *)&SRef, *CurrRef ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
MuestraDatosVRef( *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 ( BRef.LeeReg( (void *)&SRef, (*CurrRow + *CurrRef) ) == ERROR )
|
||
Error( 1, BRef.cError);
|
||
*/
|
||
|
||
return ( enc ? OK : ERROR );
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* Match_Ref *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Compara dos registros y devuelve la posible coincidencia *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Registros a comparar *|
|
||
|* *|
|
||
|* Salidas: *|
|
||
|* Resultado de la comparaci¢n *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
int Match_Ref( INFO_PRODUCTOS A, INFO_PRODUCTOS B )
|
||
{
|
||
if ( B.CodigoR != 0 )
|
||
return (A.CodigoR == B.CodigoR);
|
||
if ( B.CodigoB != 0 )
|
||
return (A.CodigoB == B.CodigoB);
|
||
if ( B.Descripcion[0] != '\0' )
|
||
return ( strncmpi( A.Descripcion, B.Descripcion, strlen( B.Descripcion ) ) == 0 );
|
||
if ( B.PrecioCosto != 0 )
|
||
return (B.PrecioCosto == A.PrecioCosto);
|
||
if ( B.PrecioVenta[0] != 0 )
|
||
return (B.PrecioVenta[0] == A.PrecioVenta[0]);
|
||
if ( B.Combinado != 0 )
|
||
return ( A.Combinado );
|
||
|
||
return 0;
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* ObtenMatchRef *|
|
||
|* *|
|
||
|* 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 ObtenMatchRef( INFO_PRODUCTOS *MRef )
|
||
{
|
||
char Row, ok, i;
|
||
int BPush, key, DEV;
|
||
struct textsettingstype texttypeinfo;
|
||
|
||
gettextsettings( &texttypeinfo );
|
||
|
||
Optar( ENCUADRE, "Comando: Buscar", NULL );
|
||
Imprime_Estaticos( 21, "systm\\tpv.img" );
|
||
|
||
ok = 0; Row = 0;
|
||
|
||
RefNuevoRegistro( MRef );
|
||
|
||
do
|
||
{
|
||
MatchDrawRef(Row, *MRef, INTENSO);
|
||
BPush = Comprueba_Secuencia( SEC_OPTAR, NULL );
|
||
MatchDrawRef(Row, *MRef, 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 );
|
||
EditMatchRef( Row, MRef );
|
||
for ( i=0; i < 6; i++ )
|
||
MatchDrawRef(i, *MRef, NORMAL);
|
||
break;
|
||
case -1:
|
||
switch ( getch() )
|
||
{
|
||
// Flecha Izquierda
|
||
case 75:
|
||
case 15:
|
||
// Flecha Arriba
|
||
case 72:
|
||
Row--; if ( Row < 0 ) Row = 5;
|
||
break;
|
||
// Flecha Derecha
|
||
case 77:
|
||
case 9:
|
||
// Flecha Abajo
|
||
case 80:
|
||
Row++; if ( Row > 5 ) 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;
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* EditMatchRef *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Edita el patron de busqueda *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Campo a editar, y lugar donde almacenarlo *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void EditMatchRef( char Row, INFO_PRODUCTOS * MRef )
|
||
{
|
||
int X0, Y0, X1, Y1;
|
||
char buffer[80];
|
||
|
||
ObtenCoordenadasMatch( Row, &X0, &Y0, &X1, &Y1 );
|
||
|
||
switch( Row )
|
||
{
|
||
case 0:
|
||
sprintf( buffer, "%lu", MRef -> CodigoR );
|
||
if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
RefNuevoRegistro( MRef );
|
||
MRef -> CodigoR = atol(buffer);
|
||
}
|
||
break;
|
||
case 1:
|
||
sprintf( buffer, "%lu", MRef -> CodigoB );
|
||
if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
RefNuevoRegistro( MRef );
|
||
MRef -> CodigoB = atol(buffer);
|
||
}
|
||
break;
|
||
case 2:
|
||
strcpy( buffer, MRef -> Descripcion );
|
||
if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
RefNuevoRegistro( MRef );
|
||
strcpy ( MRef -> Descripcion, buffer );
|
||
}
|
||
break;
|
||
case 3:
|
||
sprintf ( buffer, "%ld", MRef -> PrecioCosto);
|
||
if ( !( InputCadenaG( buffer, 1, 5, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
RefNuevoRegistro( MRef );
|
||
MRef -> PrecioCosto = atol(buffer);
|
||
}
|
||
break;
|
||
case 4:
|
||
sprintf ( buffer, "%lu", MRef -> PrecioVenta[0] );
|
||
if ( !( InputCadenaG( buffer, 1, 5, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
RefNuevoRegistro( MRef );
|
||
MRef -> PrecioCosto = atol(buffer);
|
||
}
|
||
break;
|
||
case 5:
|
||
MRef -> Combinado = !(MRef -> Combinado);
|
||
break;
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MatchDrawRef *|
|
||
|* *|
|
||
|* 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 MatchDrawRef( char Row, INFO_PRODUCTOS MRef, char como )
|
||
{
|
||
int X0, Y0, X1, Y1;
|
||
char buffer[80], buffer1[80];
|
||
|
||
ObtenCoordenadasMatch( Row, &X0, &Y0, &X1, &Y1 );
|
||
|
||
switch( Row )
|
||
{
|
||
case 0:
|
||
sprintf( buffer, " %9lu", MRef.CodigoR );
|
||
break;
|
||
case 1:
|
||
sprintf( buffer, " %9lu", MRef.CodigoB );
|
||
break;
|
||
case 2:
|
||
strncpy( buffer, MRef.Descripcion, 25 );
|
||
buffer[26] = '\0';
|
||
break;
|
||
case 3:
|
||
formatea_u_long( (unsigned long)MRef.PrecioCosto, buffer1 );
|
||
sprintf ( buffer, "%6s", buffer1 );
|
||
break;
|
||
case 4:
|
||
formatea_u_long( (unsigned long)MRef.PrecioVenta[0], buffer1 );
|
||
sprintf ( buffer, "%6s", buffer1 );
|
||
break;
|
||
case 5:
|
||
sprintf( buffer, "%s", MRef.Combinado ? "ÛÛÛ" : "" );
|
||
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 );
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MatchDrawRef *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Obtiene las coordenadas relativas al campo dado. *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Campo a obtener las coordenadas, y coordenadas de salida *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void ObtenCoordenadasMatch( char Row, int *X0, int *Y0, int *X1, int *Y1 )
|
||
{
|
||
|
||
switch( Row )
|
||
{
|
||
case 0:
|
||
*X0 = 260; *X1 = 360;
|
||
*Y0 = 200; *Y1 = 220;
|
||
break;
|
||
case 1:
|
||
*X0 = 365; *X1 = 465;
|
||
*Y0 = 200; *Y1 = 220;
|
||
break;
|
||
case 2:
|
||
*X0 = 260; *X1 = 465;
|
||
*Y0 = 225; *Y1 = 245;
|
||
break;
|
||
case 3:
|
||
*X0 = 235; *X1 = 315;
|
||
*Y0 = 250; *Y1 = 275;
|
||
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 Û
|
||
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MuestraImpresionesRed *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Muestra un cuadro con las distintas opciones de impresi¢n *|
|
||
|* *|
|
||
|* Entradas:(ninguna) *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void MuestraImpresionesRed(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 );
|
||
|
||
ImprimeReferencias( dev );
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* ImprimeReferencias *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Imprime todas las referencias seg£n se le indique *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Como imprimir las referencias *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void ImprimeReferencias( char como )
|
||
{
|
||
long i, old_reg;
|
||
char buffer[80];
|
||
int j;
|
||
FILE *file_out;
|
||
|
||
old_reg = BRef.RegActual();
|
||
|
||
if ( !Config.Impresora.Printer )
|
||
{
|
||
if ( ( file_out = fopen( Config.Impresora.PrintTo, "w" ) ) == NULL )
|
||
return;
|
||
} else
|
||
file_out = stdprn;
|
||
|
||
ImprimeCabeceraRef( como, file_out );
|
||
|
||
for ( i=0; i<BRef.Registros(); i++ )
|
||
{
|
||
BRef.LeeReg( (void *)&SRef, i );
|
||
switch( como )
|
||
{
|
||
// Listado R pido
|
||
case 1:
|
||
formatea_u_long( (unsigned long)SRef.CantUnitaria, buffer );
|
||
fprintf( file_out, "%9lu %-30s %-6s ", SRef.CodigoR, SRef.Descripcion, buffer );
|
||
formatea_u_long( (unsigned long)SRef.PrecioCosto, buffer );
|
||
fprintf( file_out, "%-7s ", buffer );
|
||
formatea_u_long( (unsigned long)SRef.PrecioVenta[0], buffer );
|
||
fprintf( file_out, "%-7s %-10s\n\r", buffer, SRef.Combinado ? "Combinado" : " " );
|
||
break;
|
||
// Listado Completo
|
||
case 2:
|
||
formatea_u_long( (unsigned long)SRef.CantUnitaria, buffer );
|
||
fprintf( file_out, "%9lu %-30s %-6s ", SRef.CodigoR, SRef.Descripcion, buffer );
|
||
formatea_u_long( (unsigned long)SRef.PrecioCosto, buffer );
|
||
fprintf( file_out, "%-7s ", buffer );
|
||
formatea_u_long( (unsigned long)SRef.PrecioVenta[0], buffer );
|
||
fprintf( file_out, "%-7s %-10s\n\r", buffer, SRef.Combinado ? "Combinado" : " " );
|
||
if ( SRef.Combinado )
|
||
{
|
||
for ( j=0; j<10; j++ )
|
||
if ( SRef.CodigosAsociados[j] != 0 )
|
||
fprintf( file_out, " %9lu\n\r", /*%-7s %9lu", j < 4 ? SRef.PrecioVenta[j+1] : 0,*/ SRef.CodigosAsociados[j] );
|
||
}
|
||
break;
|
||
// C¢digos de barra
|
||
case 3:
|
||
break;
|
||
}
|
||
}
|
||
|
||
if ( !Config.Impresora.Printer )
|
||
fclose( file_out );
|
||
|
||
BRef.LeeReg( (void *)&SRef, old_reg );
|
||
|
||
}
|
||
|
||
void ImprimeCabeceraRef( char como, FILE *file_out )
|
||
{
|
||
switch( como )
|
||
{
|
||
// Listado R pido
|
||
case 1:
|
||
fprintf( file_out, "C¢digo Producto Cant.Unt P.Costo P.Venta Combinado\n\r" );
|
||
break;
|
||
// Listado Completo
|
||
case 2:
|
||
fprintf( file_out, "C¢digo Producto Cant.Unt P.Costo P.Venta Cod. Combinado\n\r" );
|
||
break;
|
||
// C¢digos de barra
|
||
case 3:
|
||
break;
|
||
}
|
||
|
||
}
|
||
|