1849 lines
67 KiB
C++
1849 lines
67 KiB
C++
#include <io.h>
|
||
#include <dir.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_Clt 6
|
||
|
||
extern BDatos B_IVentas2; // Archivo de Ventas 2 de 3 ( Productos Vendidos )
|
||
extern INFORME2_VENTAS S_IVentas2; // Productos Vendidos ( 2 de 3 )
|
||
|
||
BDatos BClt1; // Base de datos de Clientes1: FICHAS
|
||
INFO_CLIENTES1 SClt1; // Estructura de Clientes
|
||
|
||
BDatos BClt2; // Base de datos de Clientes2: COMPRAS
|
||
INFO_CLIENTES2 SClt2; // Estructura de Clientes
|
||
|
||
|
||
/*************************************\
|
||
| |
|
||
| Parte Principal del M¢dulo |
|
||
| |
|
||
\*************************************/
|
||
void DuplicaClientes( void );
|
||
void CltNuevoEnlace( INFO_CLIENTES1 *TmpClt );
|
||
void CltNuevoRegistro( INFO_CLIENTES1 *NSClt1 );
|
||
|
||
|
||
|
||
void MuestraDatosProductosClt( int DesdeDonde );
|
||
void MuestraDatosDiaClt( int DesdeDonde );
|
||
void MuestraDatosEnlace( long CodEnlace );
|
||
void CalculaCantProdDia( int MesDia );
|
||
|
||
void MuestraDatosVClt( int linea );
|
||
void MuestraAyudaClt( char columna );
|
||
void MuestraDatoSClt1( long RowStart );
|
||
int MatchCliente( long CodigoCliente );
|
||
int MatchCCliente( long CodigoEnlace );
|
||
void EditItemClt( char columna, int linea );
|
||
void MuestraClt( char columna, int linea, char como );
|
||
void ObtenCoordenadaSClt1( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 );
|
||
|
||
|
||
/*************************************\
|
||
| |
|
||
| Parte Secundaria del M¢dulo |
|
||
| |
|
||
| Secci¢n para las busquedas |
|
||
| |
|
||
\*************************************/
|
||
int ObtenMatchClt( INFO_CLIENTES1 *MClt );
|
||
void EditMatchClt( char Row, INFO_CLIENTES1 * MClt );
|
||
int Match_Clt( INFO_CLIENTES1 *A, INFO_CLIENTES1 *B );
|
||
void MatchDrawClt( char Row, INFO_CLIENTES1 MClt, char como );
|
||
void BuscaClt( char TipoBusqueda, char *CurrRow, long *CurrClt );
|
||
void ObtenCoordenadasMatchClt( char Row, int *X0, int *Y0, int *X1, int *Y1 );
|
||
|
||
|
||
/*************************************\
|
||
| |
|
||
| Parte Tercera del M¢dulo |
|
||
| |
|
||
| Secci¢n para la impresi¢n |
|
||
| |
|
||
\*************************************/
|
||
void ImprimeClientes( char como );
|
||
void MuestraImpresionesClientes( void );
|
||
void ImprimeCabeceraClt( char como, FILE *file_out );
|
||
|
||
|
||
|
||
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
// Û Parte principal del m¢dulo Û
|
||
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
int CurrProd; // Linea en el visor de productos vendidos a golpes
|
||
char RowProd; // Linea en el visor de productos vendidos
|
||
int CurrDias; // Linea del dia seleccionado y a inspeccionar a golpes
|
||
char RowDias; // Linea del dia seleccionado y a inspeccionar
|
||
int *MesDiaPosibles; // Meses y dias posibles
|
||
int InicioProdDia_Clt; // Inicio del dia
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* FichaClientes *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Inicializaci¢n y consultas global de la fichas de Clientes *|
|
||
|* *|
|
||
|* Entradas: (ninguna) *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void FichaClientes(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 CurrClt; // Cliente sobre el que estamos posicionados a golpes
|
||
|
||
|
||
// Pedimos memoria para el almacen de compras
|
||
if ( // ( SClt2 = (INFO_CLIENTES2 *)malloc( sizeof( INFO_CLIENTES2 ) * TOTAL_COMPRAS_ANUAL ) ) == NULL ||
|
||
( MesDiaPosibles = (int *)malloc( sizeof( int ) * 367 ) ) == NULL
|
||
)
|
||
{
|
||
// if ( SClt2 != NULL ) free ( SClt2 );
|
||
if ( MesDiaPosibles != NULL ) free ( MesDiaPosibles );
|
||
|
||
Optar( 0, "Eror de asignacion de Mem.", "Atenci¢n no hay suficiente", "memorial libre para ejecutar", "la acci¢n especificada.", NULL );
|
||
return;
|
||
}
|
||
|
||
// Rellenamos la pantalla con un fondo atractivo...
|
||
setfillstyle( Config.FillBgS, Config.FillBgC ); bar( 0, 0, 640, 480 );
|
||
Imprime_Estaticos( 140, "systm\\Tpv.img");
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
|
||
|
||
|
||
sprintf( buffer, "datos\\%s\\info_clt2.%03d", NEmpresa, ( FechaGestionActual.da_year - (FechaGestionActual.da_year/1000)*1000 ) );
|
||
if ( BClt2.AbrirReg( buffer, sizeof( INFO_CLIENTES2 ) * TOTAL_COMPRAS_ANUAL ) == ERROR )
|
||
Error(0x01, BClt2.cError);
|
||
|
||
/*
|
||
// 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_clt2.%03d", NEmpresa, ( (FechaGestionActual.da_year-1) - ((FechaGestionActual.da_year-1)/1000)*1000 ) );
|
||
if ( access( buffer, 0 ) == 0 )
|
||
{
|
||
Optar( ENCUADRE, "Generando clon de Clientes", "Atenci¢n se detecto un nuevo", "a¤o y se esta generando un", "clon de la base anterior.", NULL );
|
||
DuplicaClientes();
|
||
Optar( ENCUADRE, "Generando clon de Clientes", "Atenci¢n se detecto un nuevo", "a¤o y se esta generando un", "clon de la base anterior.", NULL );
|
||
}
|
||
}
|
||
*/
|
||
|
||
sprintf( buffer, "datos\\%s\\info_clt1.dbf", NEmpresa );
|
||
if ( BClt1.AbrirReg( buffer, sizeof( INFO_CLIENTES1 ) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
CurrClt = 0;
|
||
// Si no hay registros, creamos uno almenos.
|
||
if ( BClt1.Registros() == 0 )
|
||
{
|
||
// Guardamos el enlace como ocupado // Salva los 256 bytes de usuario
|
||
BClt2.SalvaDatosUsuario( (void *)&CurrClt );
|
||
|
||
CltNuevoRegistro( &SClt1 ); CltNuevoEnlace( &SClt1 );
|
||
if ( BClt1.InsReg( (void *)&SClt1, BClt1.Registros(), ARRIBA ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
}
|
||
|
||
CurrClt = 0; CurrRow = 0;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatoSClt1( CurrRow + CurrClt );
|
||
if ( BClt1.LeeReg( (void *)&SClt1, 0 ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraDatosEnlace( SClt1.CodEnlace );
|
||
// Mostramos los datos de estado inicial
|
||
MuestraDatosVClt( CurrRow );
|
||
|
||
CurrCol = 0;
|
||
|
||
do {
|
||
if ( CurrCol != oldCol )
|
||
{
|
||
oldCol = CurrCol; MuestraAyudaClt( CurrCol );
|
||
}
|
||
|
||
MuestraClt( CurrCol, CurrRow, INTENSO );
|
||
BPush = Comprueba_Secuencia( 2, NULL );
|
||
MuestraClt( 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 );
|
||
EditItemClt( CurrCol, CurrRow );
|
||
if ( BClt1.EscribeReg( (void *)&SClt1, (CurrRow + CurrClt) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraClt( CurrCol, CurrRow, NORMAL );
|
||
CurrCol++; if ( CurrCol > 17 ) CurrCol = 17;
|
||
}
|
||
#else
|
||
while( kbhit() ) getch();
|
||
Optar( 0, "VERSION DEMOSTRACION", "En esta versi¢n no se", "permiten m¢dificar los campos,", "de los Clteedores...", NULL );
|
||
#endif
|
||
break;
|
||
case -1: // Hay una tecla especial en BUFFER
|
||
switch( getch() )
|
||
{
|
||
// Flecha Izquierda
|
||
case 75:
|
||
case 15:
|
||
CurrCol--; if ( CurrCol < 0 ) CurrCol = 17;
|
||
break;
|
||
// Flecha Derecha
|
||
case 77:
|
||
case 9:
|
||
CurrCol++; if ( CurrCol > 17 ) CurrCol = 0;
|
||
break;
|
||
// Flecha Arriba
|
||
case 72:
|
||
if ( CurrCol < 3 )
|
||
{
|
||
if ( (CurrRow + CurrClt) > 0 )
|
||
{
|
||
if ( ( CurrRow ) <= 0 )
|
||
{
|
||
CurrRow = NLINEAS_Clt - 1; CurrClt -= NLINEAS_Clt;
|
||
if ( CurrClt < 0 ) CurrClt = 0;
|
||
|
||
while( ( CurrRow + CurrClt ) >= BClt1.Registros() && CurrRow > 0 ) CurrRow--;
|
||
while( ( CurrRow + CurrClt ) >= BClt1.Registros() && CurrClt > 0 ) CurrClt++;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatoSClt1( CurrClt );
|
||
} else {
|
||
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
|
||
}
|
||
}
|
||
|
||
if ( BClt1.LeeReg( (void *)&SClt1, (CurrClt + CurrRow) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraDatosEnlace( SClt1.CodEnlace );
|
||
MuestraDatosVClt( CurrRow );
|
||
} else {
|
||
CurrCol--; if ( CurrCol < 0 ) CurrCol = 14;
|
||
}
|
||
break;
|
||
// Flecha Abajo
|
||
case 80:
|
||
if ( CurrCol < 3 )
|
||
{
|
||
if ( ( CurrRow + CurrClt ) < BClt1.Registros() - 1 )
|
||
{
|
||
|
||
if ( ( CurrRow ) >= NLINEAS_Clt - 1 )
|
||
{
|
||
CurrRow = 0; CurrClt += NLINEAS_Clt;
|
||
|
||
while ( (CurrClt + CurrRow) >= BClt1.Registros() ) CurrClt--;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatoSClt1( CurrClt );
|
||
} else
|
||
CurrRow++;
|
||
}
|
||
if ( BClt1.LeeReg( (void *)&SClt1, (CurrClt + CurrRow) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraDatosEnlace( SClt1.CodEnlace );
|
||
MuestraDatosVClt( CurrRow );
|
||
} else {
|
||
CurrCol++; if ( CurrCol > 17 ) CurrCol = 0;
|
||
}
|
||
break;
|
||
// Inicio
|
||
case 71:
|
||
CurrRow = 0;
|
||
if ( CurrClt != 0 )
|
||
{
|
||
CurrClt = 0;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatoSClt1( CurrClt );
|
||
}
|
||
|
||
if ( BClt1.LeeReg( (void *)&SClt1, (CurrClt + CurrRow) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraDatosEnlace( SClt1.CodEnlace );
|
||
MuestraDatosVClt( CurrRow );
|
||
break;
|
||
// Fin
|
||
case 79:
|
||
CurrRow = 0;
|
||
if ( CurrClt != BClt1.Registros() - NLINEAS_Clt )
|
||
{
|
||
CurrClt = BClt1.Registros() - NLINEAS_Clt;
|
||
if ( CurrClt < 0 )
|
||
{
|
||
CurrClt = 0;
|
||
CurrRow = BClt1.Registros()-1;
|
||
}
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatoSClt1( CurrClt );
|
||
}
|
||
|
||
if ( BClt1.LeeReg( (void *)&SClt1, (CurrClt + CurrRow) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraDatosEnlace( SClt1.CodEnlace );
|
||
MuestraDatosVClt( CurrRow );
|
||
break;
|
||
}
|
||
break;
|
||
// Imprimir Informe de Clientes
|
||
case 1:
|
||
MuestraImpresionesClientes();
|
||
break;
|
||
// Menu Principal
|
||
case 2:
|
||
ok = 1;
|
||
break;
|
||
#ifndef DEMOSTRACION
|
||
// Eliminar
|
||
case 3:
|
||
if ( Optar( 1, "ATENCION", "Eliminar al Cliente", "Provocar la perdida de datos", "para los informaes!!!", NULL ) )
|
||
{
|
||
if ( BClt1.DelReg( CurrClt + CurrRow ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
if ( BClt1.Registros() == 0 )
|
||
{
|
||
CltNuevoRegistro( &SClt1 ); CltNuevoEnlace( &SClt1 );
|
||
if ( BClt1.InsReg( (void *)&SClt1, BClt1.Registros(), ARRIBA ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
CurrRow = 0;
|
||
} else
|
||
// Si he borrado el £ltimo registro subo una linea
|
||
if ( (CurrClt+CurrRow) >= ( BClt1.Registros() - 2 ) )
|
||
{
|
||
if ( (CurrRow + CurrClt) > 0 )
|
||
{
|
||
if ( ( CurrRow ) <= 0 )
|
||
{
|
||
CurrRow = NLINEAS_Clt - 1; CurrClt -= NLINEAS_Clt;
|
||
if ( CurrClt < 0 ) CurrClt = 0;
|
||
|
||
while( ( CurrRow + CurrClt ) >= BClt1.Registros() && CurrRow > 0 ) CurrRow--;
|
||
while( ( CurrRow + CurrClt ) >= BClt1.Registros() && CurrClt > 0 ) CurrClt++;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatoSClt1( CurrClt );
|
||
} else {
|
||
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
|
||
}
|
||
}
|
||
|
||
if ( BClt1.LeeReg( (void *)&SClt1, (CurrClt + CurrRow) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraDatosEnlace( SClt1.CodEnlace );
|
||
MuestraDatosVClt( CurrRow );
|
||
}
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatoSClt1( CurrClt );
|
||
if ( BClt1.LeeReg( (void *)&SClt1, (CurrClt + CurrRow) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraDatosEnlace( SClt1.CodEnlace );
|
||
MuestraDatosVClt( CurrRow );
|
||
}
|
||
break;
|
||
// Insertar
|
||
case 4:
|
||
CltNuevoRegistro( &SClt1 ); CltNuevoEnlace( &SClt1 );
|
||
if ( BClt1.InsReg( (void *)&SClt1, (CurrClt + CurrRow), ARRIBA ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
if ( ( CurrRow + CurrClt ) < BClt1.Registros() - 1 )
|
||
{
|
||
|
||
if ( ( CurrRow ) >= NLINEAS_Clt - 1 )
|
||
{
|
||
CurrRow = 0; CurrClt += NLINEAS_Clt;
|
||
|
||
while ( (CurrClt + CurrRow) >= BClt1.Registros() ) CurrClt--;
|
||
|
||
} else
|
||
CurrRow++;
|
||
}
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatoSClt1( CurrClt );
|
||
if ( BClt1.LeeReg( (void *)&SClt1, (CurrClt + CurrRow) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraDatosEnlace( SClt1.CodEnlace );
|
||
MuestraDatosVClt( 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_Clt - 1; CurrClt -= NLINEAS_Clt;
|
||
if ( CurrClt < 0 ) CurrClt = 0;
|
||
|
||
while( ( CurrRow + CurrClt ) >= BClt1.Registros() && CurrRow > 0 ) CurrRow--;
|
||
while( ( CurrRow + CurrClt ) >= BClt1.Registros() && CurrClt > 0 ) CurrClt++;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatoSClt1( CurrClt );
|
||
if ( BClt1.LeeReg( (void *)&SClt1, (CurrClt + CurrRow) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraDatosEnlace( SClt1.CodEnlace );
|
||
MuestraDatosVClt( CurrRow );
|
||
#endif
|
||
break;
|
||
// Busqueda Atras
|
||
case 6:
|
||
BuscaClt( ATRAS, &CurrRow, &CurrClt );
|
||
break;
|
||
// Buscar
|
||
case 7:
|
||
BuscaClt( NUEVA_BUSQUEDA, &CurrRow, &CurrClt );
|
||
break;
|
||
// Busqueda Adelante
|
||
case 8:
|
||
BuscaClt( ADELANTE, &CurrRow, &CurrClt );
|
||
|
||
break;
|
||
// AvanceR pido
|
||
case 9:
|
||
#ifndef DEMOSTRACION
|
||
CurrRow = 0; CurrClt += NLINEAS_Clt;
|
||
|
||
while ( (CurrClt + CurrRow) >= BClt1.Registros() ) CurrClt--;
|
||
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatoSClt1( CurrClt );
|
||
if ( BClt1.LeeReg( (void *)&SClt1, (CurrClt + CurrRow) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraDatosEnlace( SClt1.CodEnlace );
|
||
MuestraDatosVClt( CurrRow );
|
||
#endif
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
} while( !ok );
|
||
|
||
BClt1.CerrarReg();
|
||
BClt2.CerrarReg();
|
||
// free( SClt2 );
|
||
free( MesDiaPosibles );
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* CltNuevosEnlace *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Crea un nuevo enlace a las fichas de cliente *|
|
||
|* *|
|
||
|* *|
|
||
|* Entradas: (ninguna) *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void CltNuevoEnlace( INFO_CLIENTES1 *TmpClt )
|
||
{
|
||
long Enlaces;
|
||
|
||
// Recuperamos el registro de enlaces ocupados
|
||
// Carga los datos de usuario
|
||
BClt2.CargaDatosUsuario( (void *)&Enlaces, sizeof( long ) );
|
||
|
||
Enlaces ++;
|
||
|
||
// Utilizamos el siguiente enlace en la lista
|
||
TmpClt -> CodEnlace = Enlaces;
|
||
|
||
// Guardamos el enlace como ocupado // Salva los 256 bytes de usuario
|
||
BClt2.SalvaDatosUsuario( (void *)&Enlaces );
|
||
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MuestraDatosEnlace *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Dado el codigo de enlace correspondiente, lo busca y muestra*|
|
||
|* *|
|
||
|* *|
|
||
|* Entradas: C¢digo de enlace a buscar *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void MuestraDatosEnlace( long CodEnlace )
|
||
{
|
||
long i;
|
||
int j;
|
||
|
||
// Vemos para este cliente, cuantos dias de compra distintos posee!!!
|
||
// Como m ximo poseer 365 dias!
|
||
MesDiaPosibles[ 0] = 0;
|
||
MesDiaPosibles[366] = 0;
|
||
for ( i = 0; i < BClt2.Registros(); i++ )
|
||
{
|
||
if ( BClt2.LeeReg( (void *)&SClt2, i ) == ERROR )
|
||
Error(0x01, BClt2.cError);
|
||
if ( CodEnlace == SClt2.CodEnlace )
|
||
{
|
||
for ( j = 0; j < MesDiaPosibles[366]; j++ )
|
||
{
|
||
if ( SClt2.MesDia == MesDiaPosibles[j] )
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
if ( j >= MesDiaPosibles[366] )
|
||
{
|
||
MesDiaPosibles[ MesDiaPosibles[366] ] = SClt2.MesDia;
|
||
MesDiaPosibles[366]++;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Ordenamos los dias que puede ver -> Y un CARAILLO <--
|
||
|
||
/*
|
||
if ( CodEnlace != SClt2[0].CodigoR )
|
||
{
|
||
SClt2[0].CodigoR = CodEnlace; // Forzamos a que sea el c¢digo de enlace
|
||
SClt2[0].Total = 0; // pero sin que existan productos...
|
||
}
|
||
|
||
RowProd = CurrProd = 0; // Linea en el visor de productos vendidos
|
||
RowDias = CurrDias = 0; // Linea del dia seleccionado y a inspeccionar
|
||
*/
|
||
|
||
MuestraDatosDiaClt( CurrDias ); // Dias disponibles para visualizar
|
||
// productos disponibles para el d¡a seleccionado
|
||
CalculaCantProdDia( MesDiaPosibles[ CurrDias + RowDias ] );
|
||
|
||
// Productos de ese dia
|
||
MuestraDatosProductosClt( CurrProd );
|
||
|
||
}
|
||
|
||
#define NUM_LINEAS_DIAS_POSIBLES 15
|
||
#define NUM_LINEAS_PRODUCTOS_CLT 25
|
||
void MuestraDatosProductosClt( int DesdeDonde )
|
||
{
|
||
int i;
|
||
int X0, Y0, X1, Y1;
|
||
|
||
for ( i = 0; i < NUM_LINEAS_PRODUCTOS_CLT && DesdeDonde + i < SClt2.Total; i++ )
|
||
{
|
||
MuestraClt( 19, i, NORMAL );
|
||
}
|
||
|
||
// Ahora limpio los restantes huecos si los hay
|
||
for ( ; i < NUM_LINEAS_PRODUCTOS_CLT; i++ )
|
||
{
|
||
setfillstyle( SOLID_FILL, Config.TxtBgN );
|
||
ObtenCoordenadaSClt1( 19, i, &X0, &Y0, &X1, &Y1 );
|
||
bar( X0, Y0, X1, Y1 );
|
||
}
|
||
}
|
||
|
||
|
||
void MuestraDatosDiaClt( int DesdeDonde )
|
||
{
|
||
int i;
|
||
int X0, Y0, X1, Y1;
|
||
|
||
for ( i = 0; i < NUM_LINEAS_DIAS_POSIBLES && DesdeDonde + i < MesDiaPosibles[366]; i++ )
|
||
{
|
||
MuestraClt( 18, i, NORMAL );
|
||
}
|
||
|
||
// Ahora limpio los restantes huecos si los hay
|
||
for ( ; i < NUM_LINEAS_DIAS_POSIBLES; i++ )
|
||
{
|
||
setfillstyle( SOLID_FILL, Config.TxtBgN );
|
||
ObtenCoordenadaSClt1( 18, i, &X0, &Y0, &X1, &Y1 );
|
||
bar( X0, Y0, X1, Y1 );
|
||
}
|
||
}
|
||
|
||
void CalculaCantProdDia( int MesDia )
|
||
{
|
||
/*
|
||
int i;
|
||
|
||
InicioProdDia_Clt = -1;
|
||
SClt2[0].Unidades = 0;
|
||
// Contamos el n£mero de productos en este d¡a
|
||
for ( i = 1; i < SClt2[0].Total; i++ )
|
||
{
|
||
if ( SClt2[i].MesDia == MesDia )
|
||
{
|
||
if ( InicioProdDia_Clt == -1 )
|
||
InicioProdDia_Clt = i;
|
||
SClt2[0].Unidades++;
|
||
}
|
||
}
|
||
*/
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* DuplicaClientes *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Dado que he elegido un sistema rigido para tratar a los *|
|
||
|* clientes, me veo obligado una vez al a¤o a clonar la *|
|
||
|* base de datos de los clietnes... *|
|
||
|* *|
|
||
|* Entradas: (ninguna) *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
/*
|
||
void DuplicaClientes(void)
|
||
{
|
||
long Regs;
|
||
BDatos BPtmp;
|
||
char buffer[80];
|
||
|
||
// Base a clonar
|
||
sprintf( buffer, "datos\\%s\\info_clt.%03d", NEmpresa, ( (FechaGestionActual.da_year-1) - ((FechaGestionActual.da_year-1)/1000)*1000 ) );
|
||
if ( BPtmp.AbrirReg( buffer, sizeof( INFO_CLIENTES1 ) ) == ERROR )
|
||
Error(0x01, BPtmp.cError);
|
||
|
||
// Base clonada
|
||
sprintf( buffer, "datos\\%s\\info_clt.%03d", NEmpresa, ( FechaGestionActual.da_year - (FechaGestionActual.da_year/1000)*1000 ) );
|
||
if ( BClt1.AbrirReg( buffer, sizeof( INFO_CLIENTES1 ) ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
|
||
for( Regs = 0; Regs < BPtmp.Registros(); Regs++ )
|
||
{
|
||
if ( BPtmp.LeeReg( (void *)&SClt1, Regs ) == ERROR )
|
||
Error(0x01, BPtmp.cError);
|
||
if ( BClt1.InsReg( (void *)&SClt1, BClt1.Registros(), ARRIBA ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
}
|
||
|
||
BClt1.CerrarReg();
|
||
BPtmp.CerrarReg();
|
||
|
||
}
|
||
*/
|
||
|
||
|
||
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MuestraDatoSClt1 *|
|
||
|* *|
|
||
|* 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 MuestraDatoSClt1( long RowStart )
|
||
{
|
||
int linea, campo;
|
||
char dev;
|
||
int X0, Y0, X1, Y1;
|
||
|
||
// Imprimo la NLINEAS_Clt que caben en la pantalla
|
||
dev = OK;
|
||
for ( linea=0; linea < NLINEAS_Clt && (RowStart + linea) < BClt1.Registros()/*dev == OK*/; linea++ )
|
||
{
|
||
dev = BClt1.LeeReg( (void *)&SClt1, RowStart + linea );
|
||
if ( dev == OK )
|
||
// Por cada linea hay 3 campos, ehhh!!!
|
||
for ( campo=0; campo < 3; campo++ )
|
||
MuestraClt( campo, linea, NORMAL );
|
||
}
|
||
|
||
// Ahora limpio los restantes huecos si los hay
|
||
if ( linea < NLINEAS_Clt ) //dev != OK )
|
||
{
|
||
//linea--;
|
||
setfillstyle( SOLID_FILL, Config.TxtBgN );
|
||
for ( ; linea < NLINEAS_Clt; linea++ )
|
||
for ( campo=0; campo < 3; campo++ )
|
||
{
|
||
ObtenCoordenadaSClt1( campo, linea, &X0, &Y0, &X1, &Y1 );
|
||
bar( X0, Y0, X1, Y1 );
|
||
}
|
||
}
|
||
}
|
||
|
||
void MuestraDatosVClt( int linea )
|
||
{
|
||
int campo;
|
||
|
||
// Mostramos los campos que faltan, ( 1¦ Linea )
|
||
for ( campo=3; campo < 18; campo++ )
|
||
MuestraClt( campo, linea, NORMAL );
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MuestraClt *|
|
||
|* *|
|
||
|* 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 MuestraClt( char columna, int linea, char como )
|
||
{
|
||
char buffer[80], draw;
|
||
char buffer1[80], i;
|
||
|
||
int X0, Y0, X1, Y1;
|
||
|
||
ObtenCoordenadaSClt1( columna, linea, &X0, &Y0, &X1, &Y1 );
|
||
|
||
draw = 1;
|
||
|
||
|
||
switch( columna )
|
||
{
|
||
// Codigo
|
||
case 0:
|
||
sprintf ( buffer, "%08lu", SClt1.Codigo );
|
||
break;
|
||
// Nombre del Cliente
|
||
case 1:
|
||
sprintf ( buffer, " %30s", SClt1.Nombre );
|
||
break;
|
||
// N§ de Telefono
|
||
case 2:
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
|
||
|
||
sprintf ( buffer, "%15s", SClt1.Telefono1 );
|
||
|
||
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 );
|
||
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
|
||
draw = 0;
|
||
break;
|
||
|
||
|
||
// Codigo
|
||
case 3:
|
||
sprintf ( buffer, "%09lu", SClt1.Codigo );
|
||
break;
|
||
// NIF / CIF
|
||
case 4:
|
||
sprintf ( buffer, "%10s", SClt1.Cif );
|
||
|
||
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 );
|
||
outtextxy( X0 + 2, Y0 + 2, buffer );
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
|
||
|
||
break;
|
||
// Nombre del Cliente
|
||
case 5:
|
||
sprintf ( buffer, "%27s", SClt1.Nombre );
|
||
break;
|
||
// DATOa01
|
||
case 6:
|
||
sprintf ( buffer, "%27s", SClt1.DATOa01 );
|
||
break;
|
||
// Direccion
|
||
case 7:
|
||
sprintf ( buffer, "%27s", SClt1.Direccion );
|
||
break;
|
||
// Localidad
|
||
case 8:
|
||
sprintf ( buffer, "%15s", SClt1.Localidad );
|
||
break;
|
||
// Provincia
|
||
case 9:
|
||
sprintf ( buffer, "%15s", SClt1.Provincia );
|
||
break;
|
||
// Codigo Postal
|
||
case 10:
|
||
formatea_long( SClt1.CodPostal, buffer1 );
|
||
sprintf ( buffer, "%10s", buffer1 );
|
||
break;
|
||
// Telefono
|
||
case 11:
|
||
sprintf ( buffer, " %15s", SClt1.Telefono1 );
|
||
break;
|
||
// Fax
|
||
case 12:
|
||
sprintf ( buffer, " %15s", SClt1.Fax );
|
||
break;
|
||
|
||
// Comentario
|
||
case 13:
|
||
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 < 5; i++ )
|
||
outtextxy( X0 + 2, Y0 + 14*i, SClt1.Notas[i] );
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
|
||
break;
|
||
|
||
// DATOSa(02-05)
|
||
case 14:
|
||
sprintf ( buffer, "%6s", SClt1.DATOa02 );
|
||
break;
|
||
case 15:
|
||
sprintf ( buffer, "%6s", SClt1.DATOa03 );
|
||
break;
|
||
case 16:
|
||
sprintf ( buffer, "%6s", SClt1.DATOa04 );
|
||
break;
|
||
case 17:
|
||
sprintf ( buffer, "%6s", SClt1.DATOa05 );
|
||
break;
|
||
case 18:
|
||
sprintf ( buffer, "%02d-%02d-%02d", (int)(MesDiaPosibles[linea]>>8), (int)(MesDiaPosibles[linea]&0x0000FFFF), (int)(( FechaGestionActual.da_year - (FechaGestionActual.da_year/1000)*1000 )) );
|
||
|
||
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 );
|
||
outtextxy( X0 + 2, Y0 + 14*i, buffer );
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
|
||
break;
|
||
case 19:
|
||
/*
|
||
// Busco dentro de la base de datos B_IVentas2 el c¢digo SClt2[linea+InicioProdDia_Clt].CodigoR
|
||
strcpy ( S_IVentas2.Nombre, "Esto es una prueba" );
|
||
sprintf ( buffer, "%30s %02d", S_IVentas2.Nombre, SClt2[linea+InicioProdDia_Clt].Unidades );
|
||
|
||
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 );
|
||
outtextxy( X0 + 2, Y0 + 14*i, buffer );
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
|
||
*/
|
||
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 );
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MuestraAyudaClt *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Muestra una peque¤a descripcion del contenido para el campo *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* columna campo ha mostar su ayuda *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void MuestraAyudaClt( char columna )
|
||
{
|
||
char buffer1[80];
|
||
|
||
switch( columna )
|
||
{
|
||
// Codigo
|
||
case 0:
|
||
sprintf ( buffer1, "C¢digo de Cliente" );
|
||
break;
|
||
// Nombre del Cliente
|
||
case 1:
|
||
sprintf ( buffer1, "Nombre del Cliente" );
|
||
break;
|
||
// Telefono
|
||
case 2:
|
||
sprintf ( buffer1, "N£mero de tel‚fono (1§) del Cliente" );
|
||
break;
|
||
|
||
|
||
// Codigo
|
||
case 3:
|
||
sprintf ( buffer1, "Introduzca el codigo que desea asignar al Cliente" );
|
||
break;
|
||
// Nif / Cif
|
||
case 4:
|
||
sprintf ( buffer1, "N.I.F. o C.I.F. del Cliente" );
|
||
break;
|
||
// Nombre del Cliente
|
||
case 5:
|
||
sprintf ( buffer1, "Introduzca el Nombre del Cliente" );
|
||
break;
|
||
// DATOSa01
|
||
case 6:
|
||
sprintf ( buffer1, "DATOS ampliacion 1 (a su elecci¢n)" );
|
||
break;
|
||
// Direccion
|
||
case 7:
|
||
sprintf ( buffer1, "Direccion completa del Cliente" );
|
||
break;
|
||
// Localidad
|
||
case 8:
|
||
sprintf ( buffer1, "Localidad del Cliente" );
|
||
break;
|
||
// Provincia
|
||
case 9:
|
||
sprintf ( buffer1, "Provincia" );
|
||
break;
|
||
// C¢digo postal
|
||
case 10:
|
||
sprintf ( buffer1, "C¢digo Postal" );
|
||
break;
|
||
// Telefono
|
||
case 11:
|
||
sprintf ( buffer1, "N£mero de tel‚fono del Cliente" );
|
||
break;
|
||
// Fax
|
||
case 12:
|
||
sprintf ( buffer1, "Fax o segundo tel‚fono del Cliente" );
|
||
break;
|
||
case 13:
|
||
sprintf ( buffer1, "Breves notas sobre el Cliente" );
|
||
break;
|
||
|
||
case 14:
|
||
sprintf ( buffer1, "DATOS ampliacion a02 (a su elecci¢n)" );
|
||
break;
|
||
case 15:
|
||
sprintf ( buffer1, "DATOS ampliacion a03 (a su elecci¢n)" );
|
||
break;
|
||
case 16:
|
||
sprintf ( buffer1, "DATOS ampliacion a04 (a su elecci¢n)" );
|
||
break;
|
||
case 17:
|
||
sprintf ( buffer1, "DATOS ampliacion a05 (a su elecci¢n)" );
|
||
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
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* EditItemClt *|
|
||
|* *|
|
||
|* 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 EditItemClt( char columna, int linea )
|
||
{
|
||
char buffer[80];
|
||
|
||
int X0, Y0, X1, Y1;
|
||
|
||
ObtenCoordenadaSClt1( columna, linea, &X0, &Y0, &X1, &Y1 );
|
||
|
||
switch( columna )
|
||
{
|
||
// Codigo Real
|
||
// case 0:
|
||
case 3:
|
||
sprintf ( buffer, "%lu", SClt1.Codigo );
|
||
if ( !( InputCadenaG( buffer, 1, 8, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
SClt1.Codigo = atol( buffer );
|
||
MuestraClt( 0, linea, NORMAL );
|
||
MuestraClt( 3, linea, NORMAL );
|
||
break;
|
||
// Nombre del Cliente
|
||
// case 1:
|
||
case 5:
|
||
strcpy ( buffer, SClt1.Nombre );
|
||
if ( !( InputCadenaG( buffer, 0, 27, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SClt1.Nombre, buffer );
|
||
MuestraClt( 1, linea, NORMAL );
|
||
MuestraClt( 5, linea, NORMAL );
|
||
break;
|
||
// Telefono
|
||
// case 2:
|
||
case 11:
|
||
sprintf ( buffer, "%s", SClt1.Telefono1 );
|
||
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SClt1.Telefono1, buffer );
|
||
MuestraClt( 2, linea, NORMAL );
|
||
MuestraClt( 12, linea, NORMAL );
|
||
break;
|
||
// Fax
|
||
case 12:
|
||
sprintf ( buffer, "%s", SClt1.Fax );
|
||
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SClt1.Fax, buffer );
|
||
MuestraClt( 3, linea, NORMAL );
|
||
MuestraClt( 13, linea, NORMAL );
|
||
break;
|
||
|
||
|
||
// CIF / NIF
|
||
case 4:
|
||
sprintf ( buffer, "%s", SClt1.Cif );
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
|
||
|
||
if ( !( InputCadenaG( buffer, 0, 10, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SClt1.Cif, buffer );
|
||
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
|
||
break;
|
||
|
||
// DATOS a01
|
||
case 6:
|
||
sprintf ( buffer, "%s", SClt1.DATOa01 );
|
||
if ( !( InputCadenaG( buffer, 0, 27, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SClt1.DATOa01, buffer );
|
||
break;
|
||
|
||
// Direccion
|
||
case 7:
|
||
sprintf ( buffer, "%s", SClt1.Direccion );
|
||
if ( !( InputCadenaG( buffer, 0, 27, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SClt1.Direccion, buffer );
|
||
break;
|
||
// Poblaci¢n
|
||
case 8:
|
||
sprintf ( buffer, "%s", SClt1.Localidad );
|
||
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SClt1.Localidad, buffer );
|
||
break;
|
||
// Provincia
|
||
case 9:
|
||
sprintf ( buffer, "%s", SClt1.Provincia );
|
||
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
strcpy ( SClt1.Provincia, buffer );
|
||
break;
|
||
// C¢digo Postal
|
||
case 10:
|
||
sprintf ( buffer, "%lu", SClt1.CodPostal );
|
||
if ( !( InputCadenaG( buffer, 0, 5, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
SClt1.CodPostal = atol ( buffer );
|
||
break;
|
||
// Comentario
|
||
case 13:
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
|
||
EditComentario( (char *)(&SClt1.Notas[0][0]), 4, 30, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1, 14 );
|
||
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
|
||
break;
|
||
default:
|
||
while( kbhit() ) getch();
|
||
}
|
||
|
||
}
|
||
#endif
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* ObtenCoordenadaSClt1 *|
|
||
|* *|
|
||
|* 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 ObtenCoordenadaSClt1( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 )
|
||
{
|
||
|
||
// Calculamos la Y0, Y1 para la linea dada ( SOLO columna < 6 )
|
||
*Y0 = 334 + 19*linea;
|
||
*Y1 = *Y0 + 17;
|
||
|
||
switch( columna )
|
||
{
|
||
case 0: // Codigo de Cliente
|
||
*X0 = 7; *X1 = 78;
|
||
break;
|
||
case 1: // Nombre del Cliente
|
||
*X0 = 87; *X1 = 348;
|
||
break;
|
||
case 2: // Tel‚fono
|
||
*X0 = 352; *X1 = 451;
|
||
break;
|
||
|
||
case 3: // Introducir Codigo de Cliente
|
||
*X0 = 66; *Y0 = 17;
|
||
*X1 = 149; *Y1 = 38;
|
||
break;
|
||
case 4: // Nif / Cif
|
||
*X0 = 246; *Y0 = 17;
|
||
*X1 = 309; *Y1 = 38;
|
||
break;
|
||
case 5: // Nombre
|
||
*X0 = 91; *Y0 = 48;
|
||
*X1 = 309; *Y1 = 69;
|
||
break;
|
||
case 6: // DATO a01
|
||
*X0 = 91; *Y0 = 73;
|
||
*X1 = 309; *Y1 = 94;
|
||
break;
|
||
case 7: // Direccion
|
||
*X0 = 91; *Y0 = 98;
|
||
*X1 = 309; *Y1 = 119;
|
||
break;
|
||
case 8: // Localidad
|
||
*X0 = 91; *Y0 = 123;
|
||
*X1 = 224; *Y1 = 144;
|
||
break;
|
||
case 9: // Provincia
|
||
*X0 = 91; *Y0 = 148;
|
||
*X1 = 224; *Y1 = 169;
|
||
break;
|
||
case 10: // Codigo Postal
|
||
*X0 = 311; *Y0 = 148;
|
||
*X1 = 394; *Y1 = 169;
|
||
break;
|
||
case 11: // Tel‚fono 1
|
||
*X0 = 91; *Y0 = 173;
|
||
*X1 = 239; *Y1 = 194;
|
||
break;
|
||
case 12: // Tel‚fono 2
|
||
*X0 = 246; *Y0 = 173;
|
||
*X1 = 394; *Y1 = 194;
|
||
break;
|
||
|
||
case 13: // NOTAS
|
||
*X0 = 203; *Y0 = 215;
|
||
*X1 = 392; *Y1 = 290;
|
||
break;
|
||
|
||
case 14: // DATOS a 02
|
||
*X0 = 91; *Y0 = 198;
|
||
*X1 = 194; *Y1 = 219;
|
||
break;
|
||
case 15: // DATOS a 03
|
||
*X0 = 91; *Y0 = 223;
|
||
*X1 = 194; *Y1 = 244;
|
||
break;
|
||
case 16: // DATOS a 04
|
||
*X0 = 91; *Y0 = 248;
|
||
*X1 = 194; *Y1 = 269;
|
||
break;
|
||
case 17: // DATOS a 05
|
||
*X0 = 91; *Y0 = 273;
|
||
*X1 = 194; *Y1 = 294;
|
||
break;
|
||
|
||
case 18: // Dias disponibles
|
||
*X0 = 401; *Y0 = 143 + 10*linea;
|
||
*X1 = 452; *Y1 = *Y0 + 10 ;
|
||
break;
|
||
|
||
case 19: // Productos adquiridos
|
||
*X0 = 456; *Y0 = 163 + 10*linea;
|
||
*X1 = 634; *Y1 = *Y0 + 10 ;
|
||
break;
|
||
}
|
||
|
||
*X0 += 2;
|
||
*X1 -= 2;
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* CltNuevoRegistro *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Limpia el buffer, para un nuevo registro. *|
|
||
|* *|
|
||
|* Entradas: (ninguna) *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void CltNuevoRegistro( INFO_CLIENTES1 *NSClt1 )
|
||
{
|
||
char i;
|
||
|
||
// Recogemos informaci¢n sobre el enlace de cliente (PARA CUANDO NOS HAGA FALTA)
|
||
/*
|
||
NSClt1 -> CodEnlace = CodSigEnlace;
|
||
*/
|
||
// Grabamos el nuevo siguiente c¢digo de enlace
|
||
|
||
|
||
NSClt1 -> Codigo = 0; // Codigos asignados a los Clientes
|
||
strcpy( NSClt1 -> Cif, "" ); // Nif / Cif del cliente
|
||
strcpy( NSClt1 -> Nombre, "" ); // Nombre del Cliente
|
||
strcpy( NSClt1 -> DATOa01, "" ); // DATO ampliacion 01
|
||
|
||
strcpy( NSClt1 -> Telefono1, "" ); // Tel‚fono y fax del Clteedor
|
||
strcpy( NSClt1 -> Fax, "" ); //
|
||
|
||
strcpy( NSClt1 -> Direccion, "" ); // Direccion
|
||
|
||
strcpy( NSClt1 -> Localidad, "" ); // Localidad
|
||
strcpy( NSClt1 -> Provincia, "" ); // Provincia
|
||
NSClt1 -> CodPostal = 0; // C¢digo Postal
|
||
|
||
for ( i = 0; i < 6; i++ )
|
||
NSClt1 -> Notas[i][0] = '\0';
|
||
|
||
strcpy( NSClt1 -> DATOa02, "" ); // DATO ampliacion 01
|
||
strcpy( NSClt1 -> DATOa03, "" ); // DATO ampliacion 01
|
||
strcpy( NSClt1 -> DATOa04, "" ); // DATO ampliacion 01
|
||
strcpy( NSClt1 -> DATOa05, "" ); // DATO ampliacion 01
|
||
|
||
}
|
||
|
||
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
// Û Parte secundaria del m¢dulo Û
|
||
// Û Û
|
||
// Û Secci¢n de Busqueda de refecencias Û
|
||
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* BuscaClt *|
|
||
|* *|
|
||
|* 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 BuscaClt( char TipoBusqueda, char *CurrRow, long *CurrClt )
|
||
{
|
||
static INFO_CLIENTES1 MClt;
|
||
char enc; long i;
|
||
|
||
|
||
switch ( TipoBusqueda )
|
||
{
|
||
case NUEVA_BUSQUEDA:
|
||
if ( ObtenMatchClt( &MClt ) != OK )
|
||
return;
|
||
i = 0;
|
||
break;
|
||
case ATRAS:
|
||
case ADELANTE:
|
||
i = ( *CurrRow + *CurrClt ) + TipoBusqueda;
|
||
break;
|
||
}
|
||
|
||
Optar( ENCUADRE, "Comando: Buscar", "Ahora se inica", "la busqueda elegida", NULL );
|
||
enc = 0;
|
||
while ( i < BClt1.Registros() && !enc )
|
||
{
|
||
if ( BClt1.LeeReg( (void *)&SClt1, i ) == ERROR )
|
||
Error( 0x01, BClt1.cError);
|
||
if ( Match_Clt( &SClt1, &MClt ) )
|
||
enc = 1;
|
||
else
|
||
i++;
|
||
}
|
||
|
||
Optar( ENCUADRE, NULL );
|
||
|
||
if ( enc )
|
||
{
|
||
*CurrRow = 0; *CurrClt = i;
|
||
// Mostramos datos hasta que se nos acabe la pantalla
|
||
MuestraDatoSClt1( *CurrRow + *CurrClt );
|
||
if ( BClt1.LeeReg( (void *)&SClt1, *CurrClt ) == ERROR )
|
||
Error(0x01, BClt1.cError);
|
||
MuestraDatosVClt( *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 ( BClt1.LeeReg( (void *)&SClt1, (*CurrRow + *CurrClt) ) == ERROR )
|
||
Error( 0x01, BClt1.cError);
|
||
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* Match_Clt *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Compara dos registros y devuelve la posible coincidencia *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Registros a comparar *|
|
||
|* *|
|
||
|* Salidas: *|
|
||
|* Resultado de la comparaci¢n *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
int Match_Clt( INFO_CLIENTES1 *A, INFO_CLIENTES1 *B )
|
||
{
|
||
if ( B -> Codigo != 0 )
|
||
return (A -> Codigo == B -> Codigo);
|
||
if ( B -> Nombre[0] != '\0' )
|
||
return ( strncmpi( A -> Nombre, B -> Nombre, strlen( B -> Nombre ) ) == 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;
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* ObtenMatchClt *|
|
||
|* *|
|
||
|* 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 ObtenMatchClt( INFO_CLIENTES1 *MClt )
|
||
{
|
||
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;
|
||
|
||
CltNuevoRegistro( MClt );
|
||
|
||
do
|
||
{
|
||
MatchDrawClt(Row, *MClt, INTENSO);
|
||
BPush = Comprueba_Secuencia( SEC_OPTAR, NULL );
|
||
MatchDrawClt(Row, *MClt, 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 );
|
||
EditMatchClt( Row, MClt );
|
||
for ( i=0; i < 4; i++ )
|
||
MatchDrawClt(i, *MClt, 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;
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* EditMatchClt *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Edita el patron de busqueda *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Campo a editar, y lugar donde almacenarlo *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void EditMatchClt( char Row, INFO_CLIENTES1 * MClt )
|
||
{
|
||
int X0, Y0, X1, Y1;
|
||
char buffer[80];
|
||
|
||
ObtenCoordenadasMatchClt( Row, &X0, &Y0, &X1, &Y1 );
|
||
|
||
switch( Row )
|
||
{
|
||
case 0:
|
||
sprintf( buffer, "%lu", MClt -> Codigo );
|
||
if ( !( InputCadenaG( buffer, 1, 9, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
CltNuevoRegistro( MClt );
|
||
MClt -> Codigo = atol(buffer);
|
||
}
|
||
break;
|
||
case 1:
|
||
sprintf( buffer, "%s", MClt -> Nombre );
|
||
if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
CltNuevoRegistro( MClt );
|
||
strcpy ( MClt -> Nombre, buffer );
|
||
}
|
||
break;
|
||
case 2:
|
||
sprintf( buffer, "%s", MClt -> Direccion );
|
||
if ( !( InputCadenaG( buffer, 0, 25, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
CltNuevoRegistro( MClt );
|
||
strcpy ( MClt -> Direccion, buffer );
|
||
}
|
||
break;
|
||
case 3:
|
||
sprintf( buffer, "%s", MClt -> Telefono1 );
|
||
if ( !( InputCadenaG( buffer, 0, 15, Config.TxtBgN, Config.TxtFgN, X0, Y0, X1, Y1) >> 8 ) )
|
||
{
|
||
CltNuevoRegistro( MClt );
|
||
strcpy ( MClt -> Telefono1, buffer );
|
||
}
|
||
break;
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MatchDrawClt *|
|
||
|* *|
|
||
|* 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 MatchDrawClt( char Row, INFO_CLIENTES1 MClt, char como )
|
||
{
|
||
int X0, Y0, X1, Y1;
|
||
char buffer[80];
|
||
|
||
ObtenCoordenadasMatchClt( Row, &X0, &Y0, &X1, &Y1 );
|
||
|
||
switch( Row )
|
||
{
|
||
case 0:
|
||
sprintf( buffer, " %9lu", MClt.Codigo );
|
||
break;
|
||
case 1:
|
||
strncpy( buffer, MClt.Nombre, 25 );
|
||
buffer[26] = '\0';
|
||
break;
|
||
case 2:
|
||
strncpy( buffer, MClt.Direccion, 25 );
|
||
buffer[26] = '\0';
|
||
break;
|
||
case 3:
|
||
strncpy( buffer, MClt.Telefono1, 15 );
|
||
buffer[26] = '\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 );
|
||
|
||
}
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* MatchDrawClt *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Obtiene las coordenadas relativas al campo dado. *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Campo a obtener las coordenadas, y coordenadas de salida *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void ObtenCoordenadasMatchClt( 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 MuestraImpresionesClientes(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 );
|
||
|
||
ImprimeClientes( dev );
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/**************************************************************************\
|
||
|* *|
|
||
|* ImprimeNombrees *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Imprime todas las referencias seg£n se le indique *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Como imprimir las referencias *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\**************************************************************************/
|
||
void ImprimeClientes( char como )
|
||
{
|
||
long i, old_reg;
|
||
|
||
|
||
FILE *file_out;
|
||
|
||
old_reg = BClt1.RegActual();
|
||
|
||
if ( !Config.Impresora.Printer )
|
||
{
|
||
if ( ( file_out = fopen( Config.Impresora.PrintTo, "w" ) ) == NULL )
|
||
return;
|
||
} else
|
||
file_out = stdprn;
|
||
|
||
ImprimeCabeceraClt(como, file_out);
|
||
|
||
for ( i=0; i<BClt1.Registros(); i++ )
|
||
{
|
||
BClt1.LeeReg( (void *)&SClt1, i );
|
||
switch( como )
|
||
{
|
||
// Listado R pido
|
||
case 1:
|
||
fprintf( file_out, "%9lu %-30s %-15s %-15s\n\r", SClt1.Codigo, SClt1.Nombre, SClt1.Telefono1, SClt1.Fax );
|
||
break;
|
||
// Listado Completo
|
||
case 2:
|
||
fprintf( file_out, "\n\r" );
|
||
fprintf( file_out, "\n\r" );
|
||
fprintf( file_out, "N§ Nombre: %9lu\n\r", SClt1.Codigo );
|
||
fprintf( file_out, "\n\r" );
|
||
fprintf( file_out, "Nombre Nombre: %s\n\r", SClt1.Nombre );
|
||
fprintf( file_out, "\n\r" );
|
||
fprintf( file_out, "Telefono: %-15s Fax: %-15s\n\r", SClt1.Telefono1, SClt1.Fax );
|
||
fprintf( file_out, "\n\r" );
|
||
fprintf( file_out, "Direccion: %s %s\n\r", SClt1.Direccion );
|
||
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 );
|
||
|
||
BClt1.LeeReg( (void *)&SClt1, old_reg );
|
||
|
||
}
|
||
|
||
void ImprimeCabeceraClt( char como, FILE *file_out )
|
||
{
|
||
|
||
switch( como )
|
||
{
|
||
// Listado R pido
|
||
case 1:
|
||
fprintf( file_out, "Codigo Cltvedor Tel‚fono Fax\n\r");
|
||
break;
|
||
// Listado Completo
|
||
case 2:
|
||
// C¢digos de barra
|
||
case 3:
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
/*************************************************************************\
|
||
|* *|
|
||
|* MatchCliente *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Busca al cliente requerido. *|
|
||
|* *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Codigo del Cliente *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\*************************************************************************/
|
||
int MatchCliente( long CodigoCliente )
|
||
{
|
||
char enc;
|
||
long i;
|
||
|
||
if ( SClt1.Codigo == CodigoCliente )
|
||
return OK;
|
||
|
||
enc = ERROR;
|
||
BClt1.LeeReg( (void *)&SClt1, 0 );
|
||
for ( i = 0; i < BClt1.Registros() && enc == ERROR; i++ )
|
||
{
|
||
if ( SClt1.Codigo == CodigoCliente )
|
||
{
|
||
enc = OK;
|
||
} else {
|
||
BClt1.LeeReg( (void *)&SClt1, i );
|
||
}
|
||
}
|
||
|
||
return enc;
|
||
}
|
||
|
||
|
||
/*************************************************************************\
|
||
|* *|
|
||
|* MatchCCliente *|
|
||
|* *|
|
||
|* Descripci¢n: *|
|
||
|* Busca la compra del cliente requerido *|
|
||
|* *|
|
||
|* *|
|
||
|* Entradas: *|
|
||
|* Codigo de enlace del cliente *|
|
||
|* *|
|
||
|* Salidas: (ninguna) *|
|
||
|* *|
|
||
\*************************************************************************/
|
||
int MatchCCliente( long CodigoEnlace )
|
||
{
|
||
|
||
char enc = ERROR;
|
||
long i;
|
||
/*
|
||
if ( SClt2[0].CodigoR == CodigoEnlace )
|
||
return OK;
|
||
|
||
enc = ERROR;
|
||
BClt2.LeeReg( (void *)&SClt2, 0 );
|
||
for ( i = 0; i < BClt2.Registros() && enc == ERROR; i++ )
|
||
{
|
||
if ( SClt2[0].CodigoR == CodigoEnlace )
|
||
{
|
||
enc = OK;
|
||
} else {
|
||
BClt2.LeeReg( (void *)&SClt2, i );
|
||
}
|
||
}
|
||
*/
|
||
return enc;
|
||
|
||
}
|
||
|
||
|
||
|
||
|