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

511 lines
20 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

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

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

#include <alloc.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <graphics.h>
#include "c:\program\src_dos\libs\make_bot\make_bot.h"
#include "c:\program\src_dos\libs\bdatos\bdatos.hh"
#include "tpv_def.h"
#define NLINEAS_CMPg 7
#define NORMAL 0
#define BARRAS 1
extern BDatos BCmp; // Base de datos de Compras
extern COMPRAS SCmp; // Estructura de referencias
// Dia y mes actual para la gestion
extern char DiaActual, MesActual;
extern long RegCompras[31 + 2];// Indice para cado uno de los dias del mes + 2
extern char EmpresaActual[9]; // Empresa a la que se le realizan las gestiones
extern char AjusteCalendario; // Ajuste para los dias del calendario
extern char DiasMes; // Dias que tiene el mes actual
/*************************************\
| |
| Parte Principal del M¢dulo |
| |
\*************************************/
void GraficaCompras( void );
void GraficaComprasMes( void );
extern long SumaGastosCompras( char DiaSuma, char MesSuma );
extern unsigned long GastosCompras; // Gastos del dia a evaluar
extern unsigned long GastosComprasD[32];
extern void ObtenCoordenadasICmp( char columna, char linea, int *X0, int *Y0, int *X1, int *Y1 );
extern void MuestraICmp( char columna, long linea, char como );
extern void SeleccionaMesCompras( int NivelAcceso );
extern void MuestraMesActual( char MesMostrar );
extern void MuestraAyudaICmp ( char columna );
extern long PosicionDia( char Dia );
void MuestraDatosGCmp( long RowStart );
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// Û Parte principal del m¢dulo Û
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
/**************************************************************************\
|* *|
|* GraficaCompras *|
|* *|
|* Descripci¢n: *|
|* Recorre el mes dado, y nos ofrece una gr fica de las compras*|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void GraficaCompras( void )
{
char ok = 0, i, dia;
int BPush;
int CurrRow, CurrCol, oldCol;
long CurrGCmp;
// Actualizasmos el mes y dia actual en curso
MesActual = FechaGestionActual.da_mon;
// Rellenamos la pantalla con un fondo atractivo...
setfillstyle( Config.FillBgS, Config.FillBgC ); bar( 0, 0, 640, 480 );
Imprime_Estaticos( 43, "systm\\Tpv.img"); // Imprime botones estaticos 'Seccion 40'
// Calculamos los dias que tiene el mes y el ajuste necesario
CalculaAjusteDias( &AjusteCalendario, &DiasMes, MesActual, FechaGestionActual.da_year );
// Abre el archivo coreccto y se posiciona en el dia
// actual de gestion...
GastosCompras = 0;
for ( i = 1; i <= DiasMes && i <= 31; i++ )
{
GastosComprasD[i] = SumaGastosCompras( i, MesActual );
GastosCompras += GastosComprasD[i];
}
SeleccionaMesCompras( NINGUNO );
MuestraDatosGCmp( 0 );
CurrRow = 0;
CurrGCmp = 0;
CurrCol = 0; oldCol = -1;
if ( BCmp.LeeReg( (void *)&SCmp, (CurrGCmp + CurrRow ) ) == ERROR )
Error(0x01, BCmp.cError );
for ( dia = 1; dia < 31; dia++ )
if ( (CurrGCmp + CurrRow ) >= PosicionDia( dia ) && (CurrGCmp + CurrRow ) < PosicionDia( dia + 1 ) )
{
DiaActual = dia /*- 1*/;
break;
}
// Mostramos el mes Actual
MuestraMesActual( MesActual );
GraficaComprasMes();
ok = 0;
do {
if ( CurrCol != oldCol )
{
oldCol = CurrCol; MuestraAyudaICmp ( CurrCol + 5 );
}
MuestraICmp( CurrCol + 5, CurrRow, INTENSO );
BPush = Comprueba_Secuencia( 2, NULL );
MuestraICmp( CurrCol + 5, 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
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
break;
case -1: // Hay una tecla especial en BUFFER
switch( getch() )
{
// Flecha Izquierda
case 75:
case 15:
CurrCol--;
if ( CurrCol < 0 ) CurrCol = 4;
break;
// Flecha Derecha
case 77:
case 9:
// Solo se permite acceder a Todo cuando el Codigo es 0
CurrCol++;
if ( CurrCol > 4 ) CurrCol = 0;
break;
// Flecha Arriba
case 72:
if ( (CurrRow + CurrGCmp ) > 0 )
{
if ( ( CurrRow ) <= 0 )
{
CurrRow = NLINEAS_CMPg - 1; CurrGCmp -= NLINEAS_CMPg;
if ( CurrGCmp < 0 ) CurrGCmp = 0;
while( ( CurrRow + CurrGCmp ) >= BCmp.Registros() && CurrRow > 0 ) CurrRow--;
while( ( CurrRow + CurrGCmp ) >= BCmp.Registros() && CurrGCmp > 0 ) CurrGCmp++;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosGCmp( CurrGCmp );
} else {
CurrRow --; if ( CurrRow < 0 ) CurrRow = 0;
}
if ( BCmp.LeeReg( (void *)&SCmp, (CurrGCmp + CurrRow ) ) == ERROR )
Error(0x01, BCmp.cError );
// GraficaComprasMes();
for ( dia = 1; dia < 31; dia++ )
if ( (CurrGCmp + CurrRow ) >= PosicionDia( dia ) && (CurrGCmp + CurrRow ) < PosicionDia( dia + 1 ) )
{
DiaActual = dia /*- 1*/;
break;
}
}
break;
// Flecha Abajo
case 80:
if ( ( CurrRow + CurrGCmp ) < ( BCmp.Registros() - 1 ) )
{
if ( ( CurrRow ) >= NLINEAS_CMPg - 1 )
{
CurrRow = 0; CurrGCmp += NLINEAS_CMPg;
while ( (CurrGCmp + CurrRow) >= BCmp.Registros() ) CurrGCmp--;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosGCmp( CurrGCmp );
} else
CurrRow++;
}
if ( BCmp.LeeReg( (void *)&SCmp, (CurrGCmp + CurrRow ) ) == ERROR )
Error(0x01, BCmp.cError );
// GraficaComprasMes();
for ( dia = 1; dia < 31; dia++ )
if ( (CurrGCmp + CurrRow ) >= PosicionDia( dia ) && (CurrGCmp + CurrRow ) < PosicionDia( dia + 1 ) )
{
DiaActual = dia /*- 1*/;
break;
}
break;
// Inicio
case 71:
CurrRow = 0;
if ( CurrGCmp != 0 )
{
CurrGCmp = 0;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosGCmp( CurrGCmp );
}
if ( BCmp.LeeReg( (void *)&SCmp, (CurrGCmp + CurrRow ) ) == ERROR )
Error(0x01, BCmp.cError );
for ( dia = 1; dia < 31; dia++ )
if ( (CurrGCmp + CurrRow ) >= PosicionDia( dia ) && (CurrGCmp + CurrRow ) < PosicionDia( dia + 1 ) )
{
DiaActual = dia /*- 1*/;
break;
}
// GraficaComprasMes();
break;
// Fin
case 79:
CurrRow = 0;
if ( CurrGCmp != BCmp.Registros() - NLINEAS_CMPg )
{
CurrGCmp = BCmp.Registros() - NLINEAS_CMPg;
if ( CurrGCmp < 0 )
{
CurrGCmp = 0;
CurrRow = BCmp.Registros()-1;
}
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosGCmp( CurrGCmp );
}
if ( BCmp.LeeReg( (void *)&SCmp, (CurrGCmp + CurrRow ) ) == ERROR )
Error(0x01, BCmp.cError );
// GraficaComprasMes();
for ( dia = 1; dia < 31; dia++ )
if ( (CurrGCmp + CurrRow ) >= PosicionDia( dia ) && (CurrGCmp + CurrRow ) < PosicionDia( dia + 1 ) )
{
DiaActual = dia /*- 1*/;
break;
}
break;
}
break;
// Imprimir Compras
case 1:
break;
// Menu Principal
case 2:
ok = 1;
break;
#ifndef DEMOSTRACION
// Mes Anterior
case 3:
MesActual --; if ( MesActual < 1 ) MesActual = 1;
// Abre el archivo coreccto y se posiciona en el dia
// actual de gestion...
BCmp.CerrarReg();
GastosCompras = 0;
for ( i = 1; i <= DiasMes && i <= 31; i++ )
{
GastosComprasD[i] = SumaGastosCompras( i, MesActual );
GastosCompras += GastosComprasD[i];
}
SeleccionaMesCompras( NINGUNO );
// Mostramos el mes Actual
MuestraMesActual( MesActual );
CurrGCmp = CurrRow = 0;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosGCmp( CurrGCmp );
// Leemos el registro sobre el que estamos posicionados
if ( BCmp.LeeReg( (void *)&SCmp, CurrRow + CurrGCmp ) == ERROR )
Error(0x01, BCmp.cError );
for ( dia = 1; dia < 31; dia++ )
if ( (CurrGCmp + CurrRow ) >= PosicionDia( dia ) && (CurrGCmp + CurrRow ) < PosicionDia( dia + 1 ) )
{
DiaActual = dia /*- 1*/;
break;
}
GraficaComprasMes();
break;
// Mes Siguiente
case 4:
MesActual ++; if ( MesActual > 12 ) MesActual = 12;
// Abre el archivo coreccto y se posiciona en el dia
// actual de gestion...
BCmp.CerrarReg();
GastosCompras = 0;
for ( i = 1; i <= DiasMes && i <= 31; i++ )
{
GastosComprasD[i] = SumaGastosCompras( i, MesActual );
GastosCompras += GastosComprasD[i];
}
SeleccionaMesCompras( NINGUNO );
// Mostramos el mes Actual
MuestraMesActual( MesActual );
CurrGCmp = CurrRow = 0;
// PosicionDia( DiaActual
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosGCmp( CurrGCmp );
// Leemos el registro sobre el que estamos posicionados
if ( BCmp.LeeReg( (void *)&SCmp, CurrRow + CurrGCmp ) == ERROR )
Error(0x01, BCmp.cError );
GraficaComprasMes();
for ( dia = 1; dia < 31; dia++ )
if ( (CurrGCmp + CurrRow ) >= PosicionDia( dia ) && (CurrGCmp + CurrRow ) < PosicionDia( dia + 1 ) )
{
DiaActual = dia - 1;
break;
}
break;
#else
// Retroceder//Avanzar mes
case 3:
case 4:
Optar( 0, "VERSION DEMOSTRACION", "En esta versi¢n no se", "permiten m¢dificar la clave.", NULL );
break;
#endif
// Retroceso R pido
case 5:
#ifndef DEMOSTRACION
CurrRow = NLINEAS_CMPg - 1; CurrGCmp -= NLINEAS_CMPg;
if ( CurrGCmp < 0 ) CurrGCmp = 0;
while( ( CurrRow + CurrGCmp ) >= BCmp.Registros() && CurrRow > 0 ) CurrRow--;
while( ( CurrRow + CurrGCmp ) >= BCmp.Registros() && CurrGCmp > 0 ) CurrGCmp++;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosGCmp( CurrGCmp );
// Leemos el registro sobre el que estamos posicionados
if ( BCmp.LeeReg( (void *)&SCmp, CurrRow + CurrGCmp ) == ERROR )
Error(0x01, BCmp.cError );
// GraficaComprasMes();
for ( dia = 1; dia < 31; dia++ )
if ( (CurrGCmp + CurrRow ) >= PosicionDia( dia ) && (CurrGCmp + CurrRow ) < PosicionDia( dia + 1 ) )
{
DiaActual = dia - 1;
break;
}
#endif
break;
// P gina principal de la compra
case 6:
// MuestraDatosGCmp( NUEVA_BUSQUEDA );
break;
// Cambiar el mes a observar
case 7:
break;
// Siguiente p guina de compras
case 8:
// MuestraDatosGCmp( ADELANTE );
break;
// AvanceR pido
case 9:
#ifndef DEMOSTRACION
CurrRow = 0; CurrGCmp += NLINEAS_CMPg;
while ( (CurrGCmp + CurrRow) >= BCmp.Registros() ) CurrGCmp--;
// Mostramos datos hasta que se nos acabe la pantalla
MuestraDatosGCmp( CurrGCmp );
// Leemos el registro sobre el que estamos posicionados
if ( BCmp.LeeReg( (void *)&SCmp, CurrRow + CurrGCmp ) == ERROR )
Error(0x01, BCmp.cError );
// GraficaComprasMes();
for ( dia = 1; dia < 31; dia++ )
if ( (CurrGCmp + CurrRow ) >= PosicionDia( dia ) && (CurrGCmp + CurrRow ) < PosicionDia( dia + 1 ) )
{
DiaActual = dia - 1;
break;
}
#endif
break;
default:
break;
}
} while( !ok );
BCmp.CerrarReg();
}
/**************************************************************************\
|* *|
|* GraficaComprasMes *|
|* *|
|* Descripci¢n: *|
|* Muestra el porcentaje de compras por mesese *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void GraficaComprasMes( void )
{
char Mensajes[][12] = { "1", "2", "3", "4", "5", "6", "7", "8", "9","10",
"11","12","13","14","15","16","17","18","19","20",
"21","22","23","24","25","26","27","28","29","30",
"31"
};
char buffer[80], buffer1[80];
int x, y;
// Mostramos la grafica
MuestraGraficas( 10, 15, 380, 95, DiasMes, (long *)GastosComprasD, Mensajes );
setfillstyle( SOLID_FILL, Config.TxtBgN );
bar( 5, 160, 80, 295 ); bar( 86, 160, 210, 295 );
bar( 215, 160, 290, 295 ); bar( 296, 160, 420, 295 );
bar( 425, 160, 500, 295 ); bar( 506, 160, 635, 295 );
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
// Mostramos los datos numricos
for ( x = 0; x < 3; x++ )
for ( y = 0; y < 11; y ++ )
{
if ( (x*11+y+1) <= DiasMes )
{
formatea_long( GastosComprasD[x*11+y+1], buffer1 );
sprintf( buffer, "%02d-%02d-%04d %20s", (x*11+y+1), MesActual, FechaGestionActual.da_year, buffer1 );
outtextxy( 11 + x*210, 165 + y*11, buffer );
}
}
formatea_long( GastosCompras, buffer1 );
sprintf( buffer, "TOTAL: %20s", buffer1 );
outtextxy( 11 + 2*210, 165 + 10*11, buffer );
}
/**************************************************************************\
|* *|
|* MuestraDatosGCmp *|
|* *|
|* 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 MuestraDatosGCmp( long RowStart )
{
int linea, campo;
char dev, dia;
int X0, Y0, X1, Y1;
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
// Imprimo la NLINEAS_PROVcmp que caben en la pantalla
dev = OK;
for ( linea=0; linea < NLINEAS_CMPg && dev == OK; linea++ )
{
dev = BCmp.LeeReg( (void *)&SCmp, RowStart + linea );
if ( dev == OK )
{
for ( dia = 1; dia < 31; dia++ )
if ( (RowStart + linea) >= PosicionDia( dia ) && (RowStart + linea) < PosicionDia( dia + 1 ) )
{
DiaActual = dia/* - 1*/;
break;
}
// Por cada linea hay 5 campos, ehhh!!!
for ( campo=0; campo < 5; campo++ )
MuestraICmp( campo + 5, linea, NORMAL );
}
}
// Ahora limpio los restantes huecos si los hay
if ( dev != OK ) linea--;
if ( linea < NLINEAS_CMPg )
{
setfillstyle( SOLID_FILL, Config.TxtBgN );
for ( ; linea < NLINEAS_CMPg; linea++ )
for ( campo=0; campo < 5; campo++ )
{
ObtenCoordenadasICmp( campo + 5, linea, &X0, &Y0, &X1, &Y1 );
bar( X0, Y0, X1, Y1 );
}
}
}