HERM/HERM_LST.CPP
2021-09-12 20:06:36 +02:00

978 lines
34 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.

/*************************************************************************\
|* *|
|* HERM_LST *|
|* *|
|* Descripci¢n: *|
|* Listados por pantalla e impresos (RAPIDOS) *|
|* *|
\*************************************************************************/
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
#include <graphics.h>
#include "..\libs\make_bot\make_bot.h"
#include "..\libs\bdatos\bdatos.hh"
#include "Herm.h"
#define AVANCES_DE_PAGINA 37
void ImprimeEtiquetas(void);
void ImprimeFacturas(void);
void OptenPaginasIniFin( int *Inicio, int *Fin, int NRegistros );
void ImprimeListaSitios(void);
void MuestraLinea(int Tipo_de_Listado);
void ImprimeLinea( int Tipo_de_Listado, FILE *file_out );
void ImprimePaginas( int Tipo_de_Listado );
void MuestraPagina( int adelante_atras, int Tipo_de_Listado );
void Escr_Mensaje(char *Encabezado, char lineas, char Mensaje[][50] );
extern void ImprimeFicha(void);
extern void CodigoImpresora( char *codigo );
extern int ComparaRegistros( const void *A, const void *B );
extern char FICHA_REGISTRO;
extern struct date FechaActual;
extern CONFIG Config;
extern BDatos BConfig;
extern BDatos BHerm;
extern HermStruct SHerm, BHtmp;
extern BDatos BHBorrados;
extern HERMBORRADOS HermanosBorrados;
void ListadosRapidos( int Tipo_de_Listado )
{
char Mensaje[][50] = { "La base de Datos", "esta vacia." };
char File[80];
int ok = 0, BPush;
True_Push = 0;
int HnoHna;
if ( Optar( 1, "BASE A LISTAR", "Aceptar: HERMANOS", "Cancelar: HERMANAS", NULL ) )
HnoHna = HERMANOS;
else
HnoHna = HERMANAS;
getdate( &FechaActual );
strcpy( BHerm.MyHeader.ProgName, "Hermadad" );
BHerm.MyHeader.VerHi = 1;
BHerm.MyHeader.VerLow = 0;
Imprime_Estaticos(60, "Herm.img");
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
// Base de Datos
if ( HnoHna == HERMANOS )
{
strcpy( File, "datos\\hermanos.dbf" );
FICHA_REGISTRO = 0;
} else {
strcpy( File, "datos\\hermanas.dbf" );
FICHA_REGISTRO = 1;
}
if ( BHerm.AbrirReg( File, sizeof( HermStruct ) ) != OK )
Error(BHerm.cError);
if ( BHerm.Registros() == 0 )
{
Escr_Mensaje( "ERROR", 2, Mensaje );
BHerm.CerrarReg();
} else {
if ( Tipo_de_Listado == TUNICA_HDAD && Config.item_ordenado[FICHA_REGISTRO] != 9 )
{
Imprime_Estaticos(20, "Herm.img");
settextstyle( SMALL_FONT, HORIZ_DIR, 6 );
setcolor( 63 ); outtextxy( 172, 165, " Comando Ordenar" );
setcolor( ROJO );
outtextxy( 172, 200+20*1, " Preparando base de Datos" );
outtextxy( 172, 200+20*2, " Por favor, espere..." );
Config.item_ordenado[FICHA_REGISTRO] = 8;
if ( BConfig.EscribeReg((void *)&Config, 0) != OK )
Error(BConfig.cError);
BHerm.SortReg(ComparaRegistros);
Imprime_Estaticos(60, "Herm.img");
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
} else
if ( Tipo_de_Listado == FACTURAS )
{
ImprimeFacturas();
BHerm.CerrarReg();
return ;
} else
if ( Tipo_de_Listado == ETIQUETAS )
{
ImprimeEtiquetas();
BHerm.CerrarReg();
return ;
}
}
BHerm.LeeReg( (void *)&SHerm, 0 );
MuestraLinea(Tipo_de_Listado);
MuestraPagina( 1, Tipo_de_Listado);
while( !ok )
{
BPush = Comprueba_Secuencia( 4, NULL );
switch ( BPush )
{
case 0: // No se pulso ningun BOTON
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
// El raton todav¡a sigue pulsado
break;
case -2:
if ( (BPush = getch()) != 27 )
{
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
} else { ok = 1; }
break;
// Tecla Normal
case -1: // Hay una tecla especial en BUFFER
// La eliminamos
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
break;
// INICIO DE BOTONES
// Retroceso
case 1:
MuestraPagina( -1, Tipo_de_Listado );
break;
// Imprimir
case 2:
if ( Tipo_de_Listado == PAPELETAS_SITIO )
ImprimeListaSitios();
else
ImprimePaginas( Tipo_de_Listado );
break;
// Avance
case 3:
MuestraPagina( 1, Tipo_de_Listado );
break;
}
}
BHerm.CerrarReg();
}
void MuestraPagina( int adelante_atras, int Tipo_de_Listado )
{
long i, CurrReg;
static long antigua_pos = 0;
int virtual_pos = 0;
char buffer[500];
CurrReg = BHerm.RegActual();
if ( (CurrReg == 0 && adelante_atras == -1) )
return;
setfillstyle(SOLID_FILL, BLANCO);
bar( 11, 66, 634, 449 );
setcolor( AZUL );
if ( adelante_atras == -1 )
{
CurrReg = antigua_pos;
virtual_pos = AVANCES_DE_PAGINA-1;
} else {
virtual_pos = 0;
antigua_pos = BHerm.RegActual();
}
for( i=CurrReg; ( virtual_pos >= 0 && virtual_pos < AVANCES_DE_PAGINA && i >= 0 && i < BHerm.Registros() ) ; i+= adelante_atras )
{
if ( BHerm.LeeReg( (void *)&SHerm, i ) != OK ) return;
switch( Tipo_de_Listado )
{
case VOTANTES:
// si cumple los requisitos
if ( SHerm.Varios.PuedVotar )
{
// 12345 123456789-12345 123456789-12345 123456789-12345 123456789-123456789- 12-12-1234 12-12-1234
sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre );
outtextxy( 10, 75+10*virtual_pos, buffer );
// Los apellidos seran unidos
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
buffer[21] = '\0';
outtextxy( 140, 75+10*virtual_pos, buffer );
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso );
outtextxy( 265, 75+10*virtual_pos, buffer );
sprintf( buffer, "%02d-%02d-%04d %02d-%02d-%04d"
,(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, SHerm.Antig.da_year,
(int)SHerm.FechaN.da_day, (int)SHerm.FechaN.da_mon, SHerm.FechaN.da_year
);
outtextxy( 505, 75+10*virtual_pos, buffer );
virtual_pos +=adelante_atras;
}
break;
case PAPELETAS_SITIO:
if ( SHerm.Varios.RealPenit )
{
// si cumple los requisitos
// 12345 123456789-12345 123456789-12345 123456789-12345 123456789-123456789- 12-12-1234 12-12-1234
sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre );
outtextxy( 10, 75+10*virtual_pos, buffer );
// Los apellidos seran unidos
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
buffer[21] = '\0';
outtextxy( 140, 75+10*virtual_pos, buffer );
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso );
outtextxy( 265, 75+10*virtual_pos, buffer );
sprintf( buffer, "%02d-%02d-%04d %s"
,(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, SHerm.Antig.da_year,
SHerm.Telefono1
);
outtextxy( 505, 75+10*virtual_pos, buffer );
virtual_pos +=adelante_atras;
}
break;
case GRAL_HERMANOS:
case GRAL_HERM_RAP:
// si cumple los requisitos
// 12345 123456789-12345 123456789-12345 123456789-12345 123456789-123456789- 12-12-1234 12-12-1234
sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre );
outtextxy( 10, 75+10*virtual_pos, buffer );
// Los apellidos seran unidos
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
buffer[21] = '\0';
outtextxy( 140, 75+10*virtual_pos, buffer );
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso );
outtextxy( 265, 75+10*virtual_pos, buffer );
sprintf( buffer, "%02d-%02d-%04d %s"
,(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, (int)SHerm.Antig.da_year,
SHerm.Telefono1
);
outtextxy( 505, 75+10*virtual_pos, buffer );
virtual_pos +=adelante_atras;
break;
case RECIBE_NOTIFIC:
// si cumple los requisitos
if ( SHerm.Varios.Notific )
{
sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre );
outtextxy( 10, 75+10*virtual_pos, buffer );
// Los apellidos seran unidos
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
buffer[21] = '\0';
outtextxy( 140, 75+10*virtual_pos, buffer );
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso );
outtextxy( 265, 75+10*virtual_pos, buffer );
sprintf( buffer, "%-15s", SHerm.Poblacion );
outtextxy( 505, 75+10*virtual_pos, buffer );
virtual_pos +=adelante_atras;
}
break;
case ACOGIDOS_CUOT:
// si cumple los requisitos
if ( SHerm.Varios.CuotaFam )
{
sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre );
outtextxy( 10, 75+10*virtual_pos, buffer );
// Los apellidos seran unidos
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
buffer[21] = '\0';
outtextxy( 120, 75+10*virtual_pos, buffer );
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso );
outtextxy( 265, 75+10*virtual_pos, buffer );
sprintf( buffer, "%-15s", SHerm.Poblacion );
outtextxy( 505, 75+10*virtual_pos, buffer );
virtual_pos +=adelante_atras;
}
break;
case TUNICA_HDAD:
// si cumple los requisitos
if ( SHerm.Varios.TunicaHd )
{
sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre );
outtextxy( 10, 75+10*virtual_pos, buffer );
// Los apellidos seran unidos
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
buffer[21] = '\0';
outtextxy( 140, 75+10*virtual_pos, buffer );
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso );
outtextxy( 265, 75+10*virtual_pos, buffer );
sprintf( buffer, "%02d-%02d-%04d %4ld"
,(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, SHerm.Antig.da_year,
(int)SHerm.NTunica
);
outtextxy( 505, 75+10*virtual_pos, buffer );
virtual_pos +=adelante_atras;
}
break;
}
}
if ( adelante_atras == -1 )
antigua_pos = BHerm.RegActual();
}
void MuestraLinea(int Tipo_de_Listado)
{
char buffer[500];
buffer[0] = '\0';
switch( Tipo_de_Listado )
{
case VOTANTES:
sprintf( buffer, "N§Hno Nombre (completo) Direccion Antig<69>edad F.Nacimiento");
break;
case GRAL_HERMANOS:
sprintf( buffer, "N§Hno Nombre (completo) Direccion Antig<69>edad Telefono");
break;
case GRAL_HERM_RAP:
sprintf( buffer, "N§Hno Nombre (completo) Direccion Antig<69>edad Telefono");
break;
case ACOGIDOS_CUOT:
sprintf( buffer, "N§Hno Nombre (completo) Direccion Poblacion");
break;
case RECIBE_NOTIFIC:
sprintf( buffer, "N§Hno Nombre (completo) Direccion Poblacion");
break;
case TUNICA_HDAD:
sprintf( buffer, "N§Hno Nombre (completo) Direccion Antig<69>edad N§ Tunica");
break;
case PAPELETAS_SITIO:
sprintf( buffer, "N§Hno Nombre (completo) Direccion Antig<69>edad Telefono");
break;
}
outtextxy( 12, 45, buffer );
}
void ImprimePaginas( int Tipo_de_Listado )
{
long i, CurrReg, lineas_impresas = 0;
char buffer[500];
FILE *file_out;
CurrReg = BHerm.RegActual();
while ( !Comprueba_Impresora() )
{
if ( !Optar( 1, "ERROR IMPRESORA", "Encienda la impresora", "y pulse ACEPTAR para continuar", NULL ) )
return;
};
switch ( Tipo_de_Listado )
{
case ACOGIDOS_CUOT:
case VOTANTES:
// Miramos si desea mandar el informe a un archivo
if ( Config.ImpCompr[0] == '-' && Config.ImpCompr[1] == '>' )
{
strcpy( buffer, Config.ImpCompr );
strrev( buffer );
buffer[ strlen( buffer ) - 2 ] = '\0';
strrev( buffer );
if ( ( file_out = fopen( buffer, "w" ) ) == NULL )
return;
} else {
// Mandar codigo caracteres grandes
CodigoImpresora( Config.ImpCompr );
file_out = stdprn;
}
break;
default:
file_out = stdprn;
break;
}
ImprimeLinea( Tipo_de_Listado, file_out );
for( i=0; i < BHerm.Registros() && i >= 0; i++ )
{
if ( Config.LineasImpresion != 0 && lineas_impresas > Config.LineasImpresion )
{
fputc( 12, file_out ); lineas_impresas = 0;
while ( !Comprueba_Impresora() )
{
if ( !Optar( 1, "ERROR IMPRESORA", "Coloque la siguiente p gina", "y pulse ACEPTAR para continuar", NULL ) )
i = -1;
};
}
if ( BHerm.LeeReg( (void *)&SHerm, i ) != OK ) break;
switch( Tipo_de_Listado )
{
case VOTANTES:
// si cumple los requisitos
if ( SHerm.Varios.PuedVotar )
{
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
buffer[20] = '\0';
fprintf( file_out, "%4ld %-10s %-20s ", SHerm.NHno, SHerm.Nombre, buffer);
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? ", " : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? ", " : "", SHerm.Piso );
buffer[34] = '\0';
fprintf( file_out, "%-34s %02d-%02d-%02d %02d-%02d-%02d\n\r", buffer,
(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, ( SHerm.Antig.da_year - (SHerm.Antig.da_year/100)*100 ) ,
(int)SHerm.FechaN.da_day, (int)SHerm.FechaN.da_mon, ( SHerm.FechaN.da_year - (SHerm.FechaN.da_year/100)*100 )
);
lineas_impresas++;
}
break;
case GRAL_HERMANOS:
// ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜ Ü Ü
// Û D i R e C t O ß ßÜßÜ
// si cumple los requisitos
ImprimeFicha();
lineas_impresas++;
break;
case PAPELETAS_SITIO:
// ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜ Ü Ü
// Û D i R e C t O ß ßÜßÜ
if ( SHerm.Varios.RealPenit )
{
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
buffer[20] = '\0';
fprintf( file_out, "%4ld %-10s %-20s ", SHerm.NHno, SHerm.Nombre, buffer );
fprintf( file_out, "%02d-%02d-%04d %s\n\r",
(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, SHerm.Antig.da_year,
SHerm.Telefono1
);
}
break;
case GRAL_HERM_RAP:
// ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜ Ü Ü
// Û D i R e C t O ß ßÜßÜ
// si cumple los requisitos
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
buffer[20] = '\0';
fprintf( file_out, "%4ld %-10s %-20s ", SHerm.NHno, SHerm.Nombre, buffer );
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? ", " : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? ", " : "", SHerm.Piso );
buffer[40] = '\0';
fprintf( file_out, "%-40s\n\r", buffer );
lineas_impresas++;
break;
case RECIBE_NOTIFIC:
// si cumple los requisitos
if ( SHerm.Varios.Notific )
{
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
buffer[20] = '\0';
fprintf( file_out, "%4ld %-10s %-20s ", SHerm.NHno, SHerm.Nombre, buffer );
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? ", " : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso );
buffer[32] = '\0';
fprintf( file_out, "%-30s %02d-%02d-%02d %s\n\r", buffer,
(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, ( SHerm.Antig.da_year - (SHerm.Antig.da_year/100)*100), SHerm.Telefono1
);
lineas_impresas++;
}
break;
case ACOGIDOS_CUOT:
// si cumple los requisitos
if ( SHerm.Varios.CuotaFam )
{
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
buffer[20] = '\0';
fprintf( file_out, "%4ld %-10s %-20s ", SHerm.NHno, SHerm.Nombre, buffer );
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? ", " : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? ", " : "", SHerm.Piso );
buffer[33] = '\0';
fprintf( file_out, "%-33s %02d-%02d-%04d %s\n\r", buffer,
(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, ( SHerm.Antig.da_year - (SHerm.Antig.da_year/100)*100), SHerm.Telefono1
);
lineas_impresas++;
}
break;
case TUNICA_HDAD:
// ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜ Ü Ü
// Û D i R e C t O ß ßÜßÜ
// si cumple los requisitos
if ( SHerm.Varios.TunicaHd )
{
sprintf( buffer, "%s %s %s", SHerm.Nombre, SHerm.Apellido1, SHerm.Apellido2 );
buffer[33] = '\0';
fprintf( file_out, "%4ld %-33s ", SHerm.NHno, buffer );
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? ", " : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? ", " : "", SHerm.Piso );
buffer[32] = '\0';
fprintf( file_out, "%-32s ", buffer );
if ( SHerm.NTunica == 0 )
fprintf( stdprn, " %04ld\n\r", SHerm.NTunica );
else
fprintf( stdprn, " HDAD\n\r" );
lineas_impresas++;
}
break;
}
if ( kbhit() && getch() == 27 && Optar( 1, "CANCELAR IMPRESION", "Desea cancelar el trabajo", "de impresion actual?", NULL ) )
break;
}
// Nueva pagina
fputc( 12, file_out );
if ( Tipo_de_Listado != PAPELETAS_SITIO && Tipo_de_Listado != TUNICA_HDAD && Tipo_de_Listado != GRAL_HERM_RAP)
{
// Miramos si desea mandar el informe a un archivo
if ( Config.ImpCompr[0] == '-' && Config.ImpCompr[1] == '>' )
{
fclose( file_out );
} else
// Mandar codigo caracteres peque¤os
CodigoImpresora( Config.ImpNormal );
}
// Regresamos a la posicion original
if ( BHerm.LeeReg( (void *)&SHerm, CurrReg ) != OK ) return;
}
void ImprimeLinea( int Tipo_de_Listado, FILE *file_out )
{
char buffer[500];
switch( Tipo_de_Listado )
{
case VOTANTES:
fprintf( file_out, "Listado General de Votantes\n\r\n\r");
fprintf( file_out, "N§Hno Nombre (completo) Direccion Antig<69>edad F.Nacimiento\n\r\n\r");
break;
case GRAL_HERMANOS:
break;
case GRAL_HERM_RAP:
fprintf( file_out, "Listado R pido de hermanos\n\r\n\r");
fprintf( file_out, "N§Hn Nombre (completo) Direccion \n\r\n\r");
//123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-
// 123456789-123456789-123456789- 123456789-123456789-123456789-123456789-
break;
case ACOGIDOS_CUOT:
fprintf( file_out, "Listado de Hermanos acogidos a cuota\n\r\n\r");
fprintf( file_out, "N§Hno Nombre (completo) Direccion Antig<69>edad Telfono\n\r\n\r");
break;
case RECIBE_NOTIFIC:
fprintf( file_out, "Listado de hermanos que reciben notificaciones\n\r\n\r");
fprintf( file_out, "N§Hno Nombre (completo) Direccion Antig<69>edad Telfono\n\r\n\r");
break;
case TUNICA_HDAD:
fprintf( file_out, "Listado de hermanos que poseen tunica de la hermandad\n\r\n\r");
fprintf( file_out, "N§Hno Nombre (completo) Direccion T£nica\n\r\n\r");
//123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-
// 123456789-123456789-123456789-123 56789-123456789-123456789-123456789-
break;
case PAPELETAS_SITIO:
fprintf( file_out, "Listado de hermanos que Realizan la estacion de Penitencia\n\r\n\r");
fprintf( file_out, "N§Hno Nombre (completo) Antig<69>edad Telefono\n\r\n\r");
break;
}
}
void ImprimeListaSitios(void)
{
char buffer[500];
BDatos Hnos, Hnas;
char CMen; struct textsettingstype texttypeinfo;
void *Imagen;
int ok = 0, enc, CtoVirgen, Insignia;
long i, j;
HermStruct A, B;
FILE *file_out;
file_out = stdprn;
if ( (Imagen = malloc( imagesize(170, 165, 470, 315) ) ) == NULL )
return;
getimage( 170, 165, 470, 315, Imagen );
Imprime_Estaticos(20, "Herm.img");
gettextsettings( &texttypeinfo );
settextstyle( SMALL_FONT, HORIZ_DIR, 6 );
setcolor( BLANCO );
outtextxy( 172+((296 - textwidth( "Listado de P. Sitios" ) ) / 2 ), 165, "Listado de P. Sitios" );
setcolor( NEGRO );
outtextxy( 172, 200, "Reordenando Hermanos" );
Hnos.AbrirReg( "datos\\hermanos.dbf", sizeof( HermStruct ) );
FICHA_REGISTRO = 0;
if ( Config.item_ordenado[FICHA_REGISTRO] != 8 )
{
Config.item_ordenado[FICHA_REGISTRO] = 8;
if ( BConfig.EscribeReg((void *)&Config, 0) != OK )
Error(BConfig.cError);
Hnos.SortReg(ComparaRegistros);
}
outtextxy( 172, 225, "Reordenando Hermanas" );
Hnas.AbrirReg( "datos\\hermanas.dbf", sizeof( HermStruct ) );
FICHA_REGISTRO = 1;
if ( Config.item_ordenado[FICHA_REGISTRO] != 8 )
{
Config.item_ordenado[FICHA_REGISTRO] = 8;
if ( BConfig.EscribeReg((void *)&Config, 0) != OK )
Error(BConfig.cError);
Hnas.SortReg(ComparaRegistros);
}
outtextxy( 172, 250, "Fusionando Bases " );
////////////// Dos Recorridos 1§ Cribar CRISTO
////////////// 2§ Cribar VIRGEN
for ( CtoVirgen = 0; CtoVirgen < 2; CtoVirgen++ )
{
fprintf( file_out, "\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r");
fprintf( file_out, "> Listado de Hermanos que realizan penitencia" );
fprintf( file_out, "\n\r\n\r\n\r%s", (CtoVirgen==0) ? "C R I S T O" : "V I R G E N");
fprintf( file_out, "\n\r\n\r\n\r> Ordenado por antiguedad y seg£n insignia");
Insignia = -1;
i=0; j=0; ok = 0;
// Empezamos a comparar con los primeros datos validos
while( Hnos.LeeReg( (void *)&A, i ) == OK && ( A.Varios.RealPenit==0 || (A.Varios.RealPenit && A.Varios.CtoVirgen != CtoVirgen ) ) ) i++;
while( Hnas.LeeReg( (void *)&B, j ) == OK && ( B.Varios.RealPenit==0 || (B.Varios.RealPenit && B.Varios.CtoVirgen != CtoVirgen ) ) ) j++;
// Solo si es cierto que los datos de ambos son validos
if ( Hnos.LeeReg( (void *)&A, i ) == OK && Hnas.LeeReg( (void *)&B, j ) == OK )
while( !ok )
{
// Mientras A < B
if ( ComparaRegistros( (void *)&A, (void *)&B ) < 0 )
{
// Si es una nueva insignia. Digo cual...
if ( Insignia != A.Insignia )
{
Insignia = A.Insignia;
fputc( 12, file_out );
fprintf( file_out, "\n\r>Hermanos con insignia: %s\n\r\n\r", Config.Insignia[Insignia+20*CtoVirgen].NInsignia );
}
// Imprimo y avanzo hermanos
sprintf( buffer, "%s %s", A.Apellido1, A.Apellido2 );
buffer[22] = '\0';
fprintf( file_out, "%4ld %-15s %-22s %02d-%02d-%04d %-15s\n\r",
A.NHno, A.Nombre, buffer, (int)A.Antig.da_day, (int)A.Antig.da_mon, (int)A.Antig.da_year, A.Telefono1 );
i++;
// Me coloco en el siguiente registro valido de HERMANOS
while( ( enc = Hnos.LeeReg( (void *)&A, i ) ) == OK && ( A.Varios.RealPenit==0 || (A.Varios.RealPenit && A.Varios.CtoVirgen != CtoVirgen ) ) ) i++;
// que no hay, po fale, me salgo
if ( enc != OK ) ok = 1;
} else {
// Si es una nueva insignia. Digo cual...
if ( Insignia != B.Insignia )
{
Insignia = B.Insignia;
fputc( 12, file_out );
fprintf( file_out, "\n\rHermanos con insignia: %s\n\r\n\r", Config.Insignia[Insignia+20*CtoVirgen].NInsignia );
}
// Imprimo y avanzo hermanas
sprintf( buffer, "%s %s", B.Apellido1, B.Apellido2 );
buffer[22] = '\0';
fprintf( file_out, "%4ld %-15s %-22s %02d-%02d-%04d %-15s\n\r",
B.NHno, B.Nombre, buffer, (int)B.Antig.da_day, (int)B.Antig.da_mon, (int)B.Antig.da_year, B.Telefono1 );
j++;
// Me coloco en el siguiente registro valido de HERMANAS
while( ( enc = Hnas.LeeReg( (void *)&B, j ) ) == OK && ( B.Varios.RealPenit==0 || (B.Varios.RealPenit && B.Varios.CtoVirgen != CtoVirgen ) ) ) j++;
// que no hay, po fale, me salgo
if ( enc != OK ) ok = 1;
}
};
// Imprimo la base que quede por imprimir
if ( Hnos.LeeReg( (void *)&A, i ) == OK )
{
// Siguiente dato valido de hermanos
while( ( enc = Hnos.LeeReg( (void *)&A, i ) ) == OK && ( A.Varios.RealPenit==0 || (A.Varios.RealPenit && A.Varios.CtoVirgen != CtoVirgen ) ) ) i++;
while ( enc == OK )
{
// Falta mostrar la insignia ???
if ( Insignia != A.Insignia )
{
Insignia = A.Insignia;
fputc( 12, file_out );
fprintf( file_out, "\n\rHermanos con insignia: %s\n\r\n\r", Config.Insignia[Insignia+20*CtoVirgen].NInsignia );
}
// Imprimo hermanos
sprintf( buffer, "%s %s", A.Apellido1, A.Apellido2 );
buffer[22] = '\0';
fprintf( file_out, "%4ld %-15s %-22s %02d-%02d-%04d %-15s\n\r",
A.NHno, A.Nombre, buffer, (int)A.Antig.da_day, (int)A.Antig.da_mon, (int)A.Antig.da_year, A.Telefono1 );
i++;
// Siguiente dato valido
while( ( enc = Hnos.LeeReg( (void *)&A, i ) ) == OK && ( A.Varios.RealPenit==0 || (A.Varios.RealPenit && A.Varios.CtoVirgen != CtoVirgen ) ) ) i++;
}
} else {
// Siguiente dato valido de HERMANAS
while( ( enc = Hnas.LeeReg( (void *)&B, j ) ) == OK && ( B.Varios.RealPenit==0 || (B.Varios.RealPenit && B.Varios.CtoVirgen != CtoVirgen ) ) ) j++;
while ( enc == OK )
{
// Se conoce la insignia???
if ( Insignia != B.Insignia )
{
Insignia = B.Insignia;
fputc( 12, file_out );
fprintf( file_out, "\n\rHermanos con insignia: %s\n\r\n\r", Config.Insignia[Insignia+20*CtoVirgen].NInsignia );
}
// Imprimo hermanos
sprintf( buffer, "%s %s", B.Apellido1, B.Apellido2 );
buffer[22] = '\0';
fprintf( file_out, "%4ld %-15s %-22s %02d-%02d-%04d %-15s\n\r",
B.NHno, B.Nombre, buffer, (int)B.Antig.da_day, (int)B.Antig.da_mon, (int)B.Antig.da_year, B.Telefono1 );
j++;
while( ( enc = Hnas.LeeReg( (void *)&B, j ) ) == OK && ( B.Varios.RealPenit==0 || (B.Varios.RealPenit && B.Varios.CtoVirgen != CtoVirgen ) ) ) j++;
};
}
}
Hnos.CerrarReg();
Hnas.CerrarReg();
settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize );
putimage( 170, 165, Imagen, COPY_PUT );
free( Imagen );
}
void ImprimeFacturas(void)
{
long i;
char pag;
int Center, lineas = 2, CMen, PagInicio, PagFin;
char Mensaje[][50] = { "Para interrumpir", "pulse una tecla" };
OptenPaginasIniFin( &PagInicio, &PagFin, BHerm.Registros() );
Imprime_Estaticos(20, "Herm.img");
settextstyle( SMALL_FONT, HORIZ_DIR, 6 );
setcolor( 63 ); outtextxy( 172, 165, "Imprimiendo Facturas" );
setcolor( ROJO );
for ( CMen = 0; CMen < lineas; CMen++ )
{
Center= (296 - textwidth( Mensaje[CMen] ) ) / 2;
outtextxy( 172+Center, 200+20*CMen, Mensaje[CMen] );
}
while ( !Comprueba_Impresora() )
{
if ( !Optar( 1, "ERROR IMPRESORA", "Encienda la impresora", "y pulse ACEPTAR para continuar", NULL ) )
return;
}
pag = 0;
PagInicio--;
for ( i=PagInicio; i < BHerm.Registros() && i < PagFin; i++, pag++ )
{
if ( pag == 3 ) { pag = 0; fputc( 12, stdprn ); }
BHerm.LeeReg( (void *)&SHerm, i ); //123456789-123456789-1234567
fprintf( stdprn, "\n\r" );
fprintf( stdprn, "\n\r" );
fprintf( stdprn, " %4ld Alcal  de Guadaira #%ld#", SHerm.NHno, Config.CuotaBaseFam[ SHerm.Varios.CuotaFam == 0 ? 0 : 1 ] );
fprintf( stdprn, "\n\r\n\r" );
fprintf( stdprn, " %02d-%02d-%04d %d / %d", (int)FechaActual.da_day, (int)FechaActual.da_mon, (int)FechaActual.da_year, FechaActual.da_year + 1, FechaActual.da_year);
fprintf( stdprn, "\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r" );
fprintf( stdprn, " %s %s %s", SHerm.Nombre, SHerm.Apellido1, SHerm.Apellido2 );
fprintf( stdprn, "\n\r" );
fprintf( stdprn, " %s%s%s%s%s", SHerm.Direccion, (SHerm.Num[0]=='\0')?"":",", SHerm.Num,
(SHerm.Piso[0]=='\0')?"":",", SHerm.Piso );
fprintf( stdprn, "\n\r" );
fprintf( stdprn, " %s (%s)", SHerm.Poblacion, SHerm.Provincia );
fprintf( stdprn, "\n\r" );
fprintf( stdprn, " C.P. %ld", SHerm.CodP );
fprintf( stdprn, "\n\r" );
fprintf( stdprn, "\n\r" );
fprintf( stdprn, "\n\r" );
fprintf( stdprn, "\n\r" );
fprintf( stdprn, "\n\r" );
if ( kbhit() )
{
getch();
if ( Optar( 1, "CANCELAR TRABAJO?", "Desea Cancelar la impresion", "el trabajo aun no ha concluido", NULL ) )
break;
}
}
}
void ImprimeEtiquetas(void)
{
long i; char pag, buffer[80];
int Center, lineas = 2, CMen;
int PagInicio, PagFin;
char Mensaje[][50] = { "Para interrumpir", "pulse una tecla" };
OptenPaginasIniFin( &PagInicio, &PagFin, BHerm.Registros() );
Imprime_Estaticos(20, "Herm.img");
settextstyle( SMALL_FONT, HORIZ_DIR, 6 );
setcolor( 63 ); outtextxy( 172, 165, "Imprimiendo Etiquetas" );
setcolor( ROJO );
for ( CMen = 0; CMen < lineas; CMen++ )
{
Center= (296 - textwidth( Mensaje[CMen] ) ) / 2;
outtextxy( 172+Center, 200+20*CMen, Mensaje[CMen] );
}
while ( !Comprueba_Impresora() )
{
if ( !Optar( 1, "ERROR IMPRESORA", "Encienda la impresora", "y pulse ACEPTAR para continuar", NULL ) )
return;
}
pag = 0;
PagInicio--;
for ( i=PagInicio; i < BHerm.Registros() && i < PagFin; /*i+=2, */pag++ )
{
if ( pag >= 3*12*2 )
{
if ( !Optar( 1, "NUEVA PAGINA", "Por favor, realinee la pagina", "y pulse una tecla", NULL ) )
return;
pag = 0;
}
do { BHerm.LeeReg( (void *)&SHerm, i ); i++; } while( !SHerm.Varios.Notific && i < BHerm.Registros() );
do { BHerm.LeeReg( (void *)&BHtmp, i ); i++; } while( !SHerm.Varios.Notific && i < BHerm.Registros() );
fprintf( stdprn, "\n\r" );
fprintf( stdprn, "N§ Hermano: %4ld N§ de Hermano: %4ld", SHerm.NHno, BHtmp.NHno );
fprintf( stdprn, "\n\r" );
sprintf( buffer, "%s %s %s", SHerm.Nombre, SHerm.Apellido1, SHerm.Apellido2 );
fprintf( stdprn, "%-37s ", buffer );
sprintf( buffer, "%s %s %s", BHtmp.Nombre, BHtmp.Apellido1, BHtmp.Apellido2 );
fprintf( stdprn, "%-37s", buffer );
fprintf( stdprn, "\n\r" );
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, (SHerm.Num[0]=='\0')?"":",", SHerm.Num, (SHerm.Piso[0]=='\0')?"":",", SHerm.Piso );
fprintf( stdprn, "%-37s ", buffer );
sprintf( buffer, "%s%s%s%s%s", BHtmp.Direccion, (BHtmp.Num[0]=='\0')?"":",", BHtmp.Num, (BHtmp.Piso[0]=='\0')?"":",", BHtmp.Piso );
fprintf( stdprn, "%-37s", buffer );
fprintf( stdprn, "\n\r" );
sprintf( buffer, "%s (%s)", SHerm.Poblacion, SHerm.Provincia );
fprintf( stdprn, "%-37s ", buffer );
sprintf( buffer, "%s (%s)", BHtmp.Poblacion, BHtmp.Provincia );
fprintf( stdprn, "%-37s", buffer );
fprintf( stdprn, "\n\r" );
fprintf( stdprn, "C.P. %5ld C.P. %5ld", SHerm.CodP, BHtmp.CodP );
fprintf( stdprn, "\n\r" );
if ( kbhit() )
{
getch();
if ( Optar( 1, "CANCELAR IMPRESION ?", "Desea Cancelar la impresion", "el trabajo aun no ha concluido ?", NULL ) )
break ;
}
}
}
void OptenPaginasIniFin( int *Inicio, int *Fin, int NRegistros )
{
void far *Imagen;
char buffer[80];
struct textsettingstype texttypeinfo;
*Inicio = 1;
*Fin = NRegistros;
if ( (Imagen = malloc( JD_imagesize(170, 165, 470, 315) ) ) != NULL )
{
getimage( 170, 165, 470, 315, Imagen );
gettextsettings( &texttypeinfo );
Imprime_Estaticos(20, "Herm.img");
settextstyle( SMALL_FONT, HORIZ_DIR, 6 );
outtextxy( 175, 220, "Ficha inicial:");
outtextxy( 175, 260, "Ficha final:");
sprintf( buffer, "%d", (*Inicio) );
InputCadenaG_T5(buffer, 0, 5, BLANCO, AZUL, 320, 220, 460, 240 );
(*Inicio) = atoi(buffer);
if ( *Inicio < 0 ) *Inicio = 0;
sprintf( buffer, "%d", (*Fin) );
InputCadenaG_T5(buffer, 0, 5, BLANCO, AZUL, 320, 260, 460, 280 );
(*Fin ) = atoi(buffer);
if ( *Fin > NRegistros ) *Fin = NRegistros;
putimage( 170, 165, Imagen, COPY_PUT );
settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize );
farfree( Imagen );
}
}