Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            : Stampa per categorie: possibilita' di stampare le etichette per nucleo famigliare


git-svn-id: svn://10.65.10.50/trunk@6954 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 1998-08-12 11:00:26 +00:00
parent 93dd671c64
commit 02624f9694
3 changed files with 161 additions and 8 deletions

View File

@ -8,6 +8,7 @@
#include "soggetti.h"
#include "benem.h"
#include "donaz.h"
#include "famiglie.h"
#include "sezioni.h"
#include <comuni.h>
@ -32,7 +33,7 @@
#define ALIAS_BNZ 600 // benemerenze
#define ALIAS_GAZ 300 // gruppi aziendale
#define ETI_INDIRIZZO 4 // numero campo indirizzo in etichetta (deve essere sempre cosi')
#define ETI_COGNOME 3 // numero campo cognome e nome in etichetta (deve essere sempre cosi') per famiglie
enum ts { undefined=0, sintetico=1, completo=2, schede=3, etichette=4, cartoline=5, personale=6 };
@ -60,20 +61,23 @@ class TStampaPerCategorie : public TPrintapp
TMask* _msk;
TLocalisamfile* _benem;
TLocalisamfile* _donaz;
TLocalisamfile* _famiglie;
TRecord_array* _sbenemerenze;
TRecord_array* _sfamiglia;
TEti_percat_form* _form_eti;
TEti_percat_form* _form_car;
TEti_percat_form* _form_sch;
TEti_percat_form* _form_per;
TAssoc_array _catdon;
TAssoc_array _catnondon;
TAssoc_array _codfamiglie;
TParagraph_string _cognome_nome, _dencom, _benemerenza;
TString80 _rigastampa;
TDate _data_stampa;
ts _tipostampa;
TString16 _lettini, _lettfin, _capini, _capfin;
TString16 _gruppoazie, _gruppoold;
bool _pergruppo;
bool _pergruppo, _perfamiglie;
int _contatore;
TString16 _codsez, _codsot, _orario, _datacart;
TString80 _invitoper, _data, _presso1, _presso2, _presso3, _presso4;
@ -257,7 +261,19 @@ void TStampaPerCategorie::set_page(int file, int cnt)
{
if (current_cursor()->pos()<current_cursor()->items())
{
bool avanza = TRUE;
while (avanza)
{
if (current_cursor()->pos()<current_cursor()->items())
avanza = !(preprocess_page(file, cnt));
else
avanza = FALSE;
if (avanza)
++(*current_cursor());
}
force_setpage(TRUE);
TForm_item& cognome = corpo.find_field(ETI_COGNOME);
cognome.set(_cognome_nome);
corpo.update();
for (word i = 0; i < corpo.height(); i++)
{
@ -271,10 +287,16 @@ void TStampaPerCategorie::set_page(int file, int cnt)
set_row(i+1,riga1);
}
if (r < _etcolonne)
{
++(*current_cursor());
if (current_cursor()->pos()<current_cursor()->items())
preprocess_page(file, cnt);
{
bool avanza = TRUE;
while (avanza)
{
++(*current_cursor());
if (current_cursor()->pos()<current_cursor()->items())
avanza = !(preprocess_page(file, cnt));
else
avanza = FALSE;
}
}
}
}
@ -612,6 +634,123 @@ bool TStampaPerCategorie::preprocess_page(int file, int counter)
if (_tipostampa==etichette)
if (printer().rows_left() < _form_eti->get_body().height())
printer().formfeed();
if (_perfamiglie)
{
TRectype& recfam = current_cursor()->curr(LF_FAMIGLIE);
const long codice = recsog.get_long(SOG_CODICE);
const long codsufam = recfam.get_long(FAM_CODFAM);
const int rigafamsog = recfam.get_int(FAM_PROGFAM);
if ( codsufam == codice)
{
TRectype key = TRectype(LF_FAMIGLIE);
key.put(FAM_FAMIGLIA, recfam.get_long(FAM_FAMIGLIA));
const int err = _sfamiglia->read(key);
if (err == NOERR)
{
current_cursor()->save_status();
// controllo se qualcuno che lo precede nella famiglia rientra
// nella selezione, in questo caso ho gia' stampato la famiglia
// che viene stampata quando incontro il primo componente che
// rientra nella famiglia
// se non l'ho ancora stampato, accodo tutti i nominativi
// della famiglia e stampo
bool dastampare=TRUE;
for (int r=1; r<=_sfamiglia->rows(); r++)
{
const TRectype& riga = _sfamiglia->row(r);
long codfam = riga.get_long(FAM_CODFAM);
if (!(codice == codfam))
{
TLocalisamfile sog(LF_SOGGETTI);
sog.setkey(1);
sog.put(SOG_CODICE, codfam);
if (sog.read() == NOERR)
{
current_cursor()->curr().put(SOG_CODSEZ, sog.get(SOG_CODSEZ));
current_cursor()->curr().put(SOG_CODSOT, sog.get(SOG_CODSOT));
current_cursor()->curr().put(SOG_COGNOME, sog.get(SOG_COGNOME));
current_cursor()->curr().put(SOG_NOME, sog.get(SOG_NOME));
current_cursor()->curr().put(SOG_DATANASC, sog.get(SOG_DATANASC));
if (current_cursor()->test() == NOERR)
if (r < rigafamsog)
dastampare = FALSE;
}
}
}
//current_cursor()->restore_status();
if (dastampare)
{
TString256 cognome = "";
for (int r=1; r<=_sfamiglia->rows(); r++)
{
const TRectype& riga = _sfamiglia->row(r);
long codfam = riga.get_long(FAM_CODFAM);
if (codice == codfam)
{
TLocalisamfile sog(LF_SOGGETTI);
sog.setkey(1);
sog.put(SOG_CODICE, codfam);
if (sog.read() == NOERR)
{
cognome << sog.get(SOG_COGNOME);
cognome << " ";
cognome << sog.get(SOG_NOME);
}
}
else
{
TLocalisamfile sog(LF_SOGGETTI);
sog.setkey(1);
sog.put(SOG_CODICE, codfam);
if (sog.read() == NOERR)
{
current_cursor()->curr().put(SOG_CODSEZ, sog.get(SOG_CODSEZ));
current_cursor()->curr().put(SOG_CODSOT, sog.get(SOG_CODSOT));
current_cursor()->curr().put(SOG_COGNOME, sog.get(SOG_COGNOME));
current_cursor()->curr().put(SOG_NOME, sog.get(SOG_NOME));
current_cursor()->curr().put(SOG_DATANASC, sog.get(SOG_DATANASC));
if (current_cursor()->test() == NOERR)
{
//TLocalisamfile soggetti(LF_SOGGETTI);
//soggetti.setkey(1);
//soggetti.put(SOG_CODICE, codfam);
sog.put(SOG_CODICE, codfam);
if (sog.read() == NOERR)
{
cognome << ", ";
cognome << sog.get(SOG_COGNOME);
cognome << " ";
cognome << sog.get(SOG_NOME);
}
}
}
}
_cognome_nome = cognome;
}
}
current_cursor()->restore_status();
if (!dastampare)
return FALSE;
}
}
else
{
TString80 cognome= "";
cognome << recsog.get(SOG_COGNOME);
cognome << " ";
cognome << recsog.get(SOG_NOME);
_cognome_nome = cognome;
}
}
else
{
TString80 cognome= "";
cognome << recsog.get(SOG_COGNOME);
cognome << " ";
cognome << recsog.get(SOG_NOME);
_cognome_nome = cognome;
}
_contatore++;
return TRUE;
}
@ -648,12 +787,15 @@ bool TStampaPerCategorie::set_print(int m)
{
if (_tipostampa == cartoline)
dati_cartolina();
if (_tipostampa == etichette)
_cognome_nome.set_width(200);
_codsez = "**";
_codsot = "**";
_gruppoold = "**";
_contatore = 0;
TString80 chiave = "";
_pergruppo = _msk->get_bool(F_PERGRUPPO);
_perfamiglie = _msk->get_bool(F_PERFAMIGLIE);
bool percap = _msk->get_bool(F_PERCAP);
_capini = _msk->get(F_CAPINI);
_capfin = _msk->get(F_CAPFIN);
@ -857,10 +999,11 @@ void TStampaPerCategorie::crea_intestazione()
}
bool TStampaPerCategorie::user_create()
{
{
_rel = new TRelation(LF_SOGGETTI);
_rel->add(LF_DONAZ, "CODICE==CODICE", 1);
_rel->add(LF_BENEM, "CODICE==CODICE", 1);
_rel->add(LF_FAMIGLIE, "CODFAM==CODICE", 2);
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
_rel->add("BNZ", "CODTAB==TIPOBEN", 1, LF_BENEM, ALIAS_BNZ);
_rel->add("CTD", "CODTAB==CATDON",1,0,ALIAS_CTD);
@ -876,7 +1019,9 @@ bool TStampaPerCategorie::user_create()
_rel->add(LF_MEDICI, "CODMED==CODMED");
_donaz = new TLocalisamfile(LF_DONAZ);
_benem = new TLocalisamfile(LF_BENEM);
_famiglie = new TLocalisamfile(LF_FAMIGLIE);
_sbenemerenze = new TRecord_array(LF_BENEM,BEN_PROGBEN);
_sfamiglia = new TRecord_array(LF_FAMIGLIE,FAM_PROGFAM);
add_cursor(new TSorted_cursor(_rel,"SOG_CODSEZ|SOG_CODSOT","",3));
_msk = new TMask("at2700a");
@ -904,7 +1049,9 @@ bool TStampaPerCategorie::user_destroy()
delete _form_car;
delete _form_eti;
delete _msk;
delete _sfamiglia;
delete _sbenemerenze;
delete _famiglie;
delete _benem;
delete _donaz;
delete _rel;

View File

@ -45,6 +45,7 @@
#define F_LETTINI 407
#define F_LETTFIN 408
#define F_NOTIZIARIO 409
#define F_PERFAMIGLIE 410
#define F_SINTETICO 501
#define F_COMPLETO 502

View File

@ -415,7 +415,7 @@ BEGIN
FLAGS "D"
END
GROUPBOX DLG_NULL 77 6
GROUPBOX DLG_NULL 77 7
BEGIN
PROMPT 1 14 "Opzioni di stampa"
END
@ -497,5 +497,10 @@ BEGIN
//PICTURE "!!"
END
BOOLEAN F_PERFAMIGLIE
BEGIN
PROMPT 2 19 "Raggruppa per famiglie (solo etichette)"
END
ENDPAGE
ENDMASK