Patch level : 1.7 670

Files correlati     : at4.exe at4100a.msk
Ricompilazione Demo : [ ]
Commento            : aggiunta possibilita` di stampa etichette per famiglie


git-svn-id: svn://10.65.10.50/trunk@11714 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 2004-01-21 10:31:10 +00:00
parent e8b5425061
commit 5f8af429fd
3 changed files with 168 additions and 8 deletions

View File

@ -5,6 +5,7 @@
#include "soggetti.h"
#include "donaz.h"
#include "famiglie.h"
#include "sezioni.h"
#include <comuni.h>
@ -31,6 +32,8 @@
#define IDON_SI "SI"
#define IDON_AF "AF"
#define ETI_COGNOME 3 // numero campo cognome e nome in etichetta (deve essere sempre cosi') per famiglie
enum ts { undefined = 0, elenco = 1, completo = 2, etichette = 3, cartoline = 4, sms = 5, personale = 6 };
// definizione form per etichette
@ -54,15 +57,18 @@ class TStampaScadenze : public TPrintapp
TRelation* _rel;
TMask* _msk;
TLocalisamfile* _donaz;
TLocalisamfile* _famiglie;
TRecord_array* _sfamiglia;
TScadenze_form* _form_eti;
TScadenze_form* _form_car;
TScadenze_form* _form_per;
TAssoc_array _categorie;
TAssoc_array _codfamiglie;
TParagraph_string _cognome_nome, _dencom, _giopredon, _telefono, _dataconv;
TDate _data_stampa;
TDate _dataini, _datafin, _dataultid;
int _intminconv;
bool _usomodo, _usasez, _registra, _gpd_esclusivo, _proc_esclusivo;
bool _usomodo, _usasez, _registra, _gpd_esclusivo, _proc_esclusivo, _perfamiglie;
TString16 _giorni, _punto;
TString16 _procdon, _modo, _ab01, _ab02, _ab03, _rh;
ts _tipostampa;
@ -226,9 +232,22 @@ void TStampaScadenze::set_page(int file, int cnt)
{
if (current_cursor()->pos()<current_cursor()->items())
{
_netichette++;
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);
corpo.update();
TForm_item& cognome = corpo.find_field(ETI_COGNOME);
cognome.set(_cognome_nome);
corpo.update();
_contatore++;
_netichette++;
int nriga = 1;
if (_etrighe > 0)
{
@ -243,12 +262,22 @@ void TStampaScadenze::set_page(int file, int cnt)
riga1.cut(_etlarghezza);
int colonna = ((r-1)*_etlarghezza);
TString16 formato;
formato << '@' << colonna << "g";
formato << '@' << colonna << 'g';
riga1.insert(formato,0);
set_row(nriga++,riga1);
}
if (r < _etcolonne)
++(*current_cursor());
{
bool avanza = TRUE;
while (avanza)
{
++(*current_cursor());
if (current_cursor()->pos()<current_cursor()->items())
avanza = !(preprocess_page(file, cnt));
else
avanza = FALSE;
}
}
}
}
}
@ -597,6 +626,114 @@ bool TStampaScadenze::preprocess_page(int file, int counter)
if (_tipostampa==personale)
if (printer().rows_left() < _form_per->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)
{
TRecnotype pos = current_cursor()->pos();
// 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()) = pos;
if (!dastampare)
return FALSE;
}
}
else
{
TString80 cognome= "";
cognome << recsog.get(SOG_COGNOME);
cognome << " ";
cognome << recsog.get(SOG_NOME);
_cognome_nome = cognome;
}
}
return TRUE;
}
@ -700,6 +837,7 @@ bool TStampaScadenze::set_print(int m)
_proc_esclusivo = _msk->get_bool(F_PROC_ESCLUSIVO);
_usomodo = _msk->get_bool(F_USOMODO);
_modo = _msk->get(F_MODO);
_perfamiglie = _msk->get_bool(F_PERFAMIGLIE);
_ab01 = _msk->get(F_AB01);
_ab02 = _msk->get(F_AB02);
_ab03 = _msk->get(F_AB03);
@ -751,6 +889,19 @@ bool TStampaScadenze::set_print(int m)
current_cursor()->setfilter("((TCS->S6 == \"I\" ) || (TCS->S6 == \"F\")) && (ESCLUSO == \"\")", TRUE);
// filtro per categorie e altro
current_cursor()->set_filterfunction(filter_func_scadenze);
if (_perfamiglie)
{
TConfig config(CONFIG_STUDIO);
TString16 etformato = config.get("EtFFormato");
_etlarghezza = config.get_int("EtFLarghezza");
_etcolonne = config.get_int("EtFColonne");
_etrighe = config.get_int("EtFRighe");
_etbordoini = config.get_int("EtFBordoIni");
_etbordofin = config.get_int("EtFBordoFin");
delete _form_eti;
_form_eti = new TScadenze_form(etformato);
}
_contatore = 0;
_netichette = 0;
_ncartoline = 0;
@ -855,11 +1006,14 @@ void TStampaScadenze::crea_intestazione()
bool TStampaScadenze::user_create()
{
_rel = new TRelation(LF_SOGGETTI);
_rel->add(LF_FAMIGLIE, "CODFAM==CODICE", 2);
_rel->add("TCS", "CODTAB==STATO",1,0,ALIAS_TCS);
_rel->add("LCP", "CODTAB==DOM_CODLOC",1,0,ALIAS_LCPDOM);
_rel->add(LF_COMUNI, "COM==DOM_CODCOM",1,0,ALIAS_COMDOM);
_rel->add(LF_SEZIONI, "CODSEZ==CODSEZ|CODSOT==CODSOT");
_donaz = new TLocalisamfile(LF_DONAZ);
_famiglie = new TLocalisamfile(LF_FAMIGLIE);
_sfamiglia = new TRecord_array(LF_FAMIGLIE,FAM_PROGFAM);
add_cursor(new TCursor(_rel, "", 3));
_msk = new TMask("at4100a");
TConfig config(CONFIG_STUDIO);
@ -888,7 +1042,10 @@ bool TStampaScadenze::user_destroy()
delete _form_per;
delete _form_car;
delete _form_eti;
delete _form_eti;
delete _msk;
delete _sfamiglia;
delete _famiglie;
delete _donaz;
delete _rel;
return TRUE;

View File

@ -47,6 +47,7 @@
#define F_REGISTRA 322
#define F_GPD_ESCLUSIVO 323
#define F_PROC_ESCLUSIVO 324
#define F_PERFAMIGLIE 325
#define F_ELENCO 401
#define F_COMPLETO 402

View File

@ -290,7 +290,7 @@ BEGIN
FLAGS "D"
END
GROUPBOX DLG_NULL 77 9
GROUPBOX DLG_NULL 77 10
BEGIN
PROMPT 1 9 "Opzioni di convocazione"
END
@ -413,9 +413,11 @@ BEGIN
FLAGS "D"
END
GROUPBOX DLG_NULL 77 3
BOOLEAN F_PERFAMIGLIE
BEGIN
PROMPT 1 18 "Dati gruppo-ematici"
PROMPT 2 17 "Uso famiglie per etichette"
MESSAGE TRUE ENABLE,F_MODO
MESSAGE FALSE RESET,F_MODO|DISABLE,F_MODO
END
LISTBOX F_AB01 5