campo-sirio/ba/ba3601.cpp
ale dcd95cc9b8 Aggiunta stampa indici libro unico per ditta
git-svn-id: svn://10.65.10.50/trunk@4144 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-02-19 13:37:55 +00:00

587 lines
16 KiB
C++
Executable File

#include "ba3601.h"
HIDDEN inline Stp_indici_LUnico & a() {return (Stp_indici_LUnico&) main_app(); }
bool Stp_indici_LUnico::user_create()
{
_nditte = new TLocalisamfile (LF_NDITTE);
_anag = new TLocalisamfile (LF_ANAG);
_comuni = new TLocalisamfile (LF_COMUNI);
_indlib = new TLocalisamfile (LF_INDLIB);
_tab_lbu = new TTable (TAB_LBU);
_msk = new TMask("ba3601a");
return TRUE;
}
bool Stp_indici_LUnico::user_destroy()
{
delete _msk;
delete _tab_lbu;
delete _indlib;
delete _nditte;
delete _anag;
delete _comuni;
return TRUE;
}
bool Stp_indici_LUnico::registri_ditta_hnd(TMask_field& f, KEY k)
{
if (k == K_TAB && f.mask().is_running())
{
bool trovato = FALSE;
long ditta = f.mask().get_long(F_CODDITTA);
if (ditta == 0)
return f.error_box("La ditta e' obbligatoria");
long old_dta = a().get_firm();
TString cod_lu = f.mask().get(F_LIBRO_UNICO1);
a().set_firm(ditta);
int anno = f.mask().get_int(F_ANNO);
TTable reg ("REG");
reg.zero();
for (reg.first();!reg.eof();reg.next())
{
TString codtab = reg.get("CODTAB");
int annoreg = atoi(codtab.mid(0,4));
if (annoreg == anno)
{
TString cod_lu_reg = reg.get("S6");
if (cod_lu == cod_lu_reg)
{
trovato = TRUE;
break;
}
}
}
a().set_firm(old_dta);
if (!trovato)
return f.error_box("La ditta %d per l'anno %d non ha registri che vengono stampati sul libro unico", ditta, anno);
}
return TRUE;
}
void Stp_indici_LUnico::dati_libro_unico()
{
TTable lbu ("%LBU");
TString dep;
dep.format("%4d%-3s", _anno, (const char*) _codlib);
lbu.put("CODTAB", (const char*) dep);
if (lbu.read(_isequal) == NOERR)
{
_stampa_intesta = lbu.get_bool("B0");
_stampa_ind = lbu.get_bool("B1");
_tipo_intesta = lbu.get_char("S2");
_codana_intesta = lbu.get_long("I4");
_desc_cod_lib = lbu.get ("S0");
}
}
void Stp_indici_LUnico::intestatario()
{
_anag->setkey(1);
_anag->zero();
_anag->put(ANA_TIPOA, _tipo_intesta);
_anag->put(ANA_CODANAGR, _codana_intesta);
if (_anag->read(_isequal) == NOERR)
{
_cofi = _anag->get(ANA_COFI);
_paiv = _anag->get(ANA_PAIV);
_ragsoc = _anag->get(ANA_RAGSOC);
if (_tipo_intesta == 'G')
{
_codcom = _anag->get(ANA_COMRF);
_ind = _anag->get(ANA_INDRF);
_civ = _anag->get(ANA_CIVRF);
_cap = _anag->get(ANA_CAPRF);
}
else
{
_codcom = _anag->get(ANA_COMRES);
_ind = _anag->get(ANA_INDRES);
_civ = _anag->get(ANA_CIVRES);
_cap = _anag->get(ANA_CAPRES);
}
}
_comuni->setkey(1);
_comuni->zero();
_comuni->put(COM_COM, _codcom);
if (_comuni->read(_isequal) == NOERR)
{
_com = _comuni->get(COM_DENCOM);
_prov = _comuni->get(COM_PROVCOM);
}
}
bool Stp_indici_LUnico::set_print(int)
{
KEY tasto;
_msk->set_handler(F_CODDITTA, registri_ditta_hnd);
tasto = _msk->run();
if (tasto == K_ENTER)
{
_codlib = _msk->get(F_LIBRO_UNICO1);
_datastampa = _msk->get_date(F_DATA_STAMPA);
_meseda = _msk->get_int (F_MESEDA);
_mesea = _msk->get_int (F_MESEA);
_anno = _msk->get_int (F_ANNO);
_ditta = _msk->get_long(F_CODDITTA);
// _meseprec = 0;
// _pag_fuori_sequenza = FALSE;
ragsoc_ditta(_ditta);
dati_anagrafici_ditta();
dati_libro_unico();
intestatario();
// crea_sort();
return TRUE;
}
return FALSE;
}
void Stp_indici_LUnico::ragsoc_ditta(long codditta)
{
TLocalisamfile nditte(LF_NDITTE);
nditte.zero();
nditte.put(NDT_CODDITTA, codditta);
nditte.read();
if (nditte.bad())
nditte.zero();
_ragsoc_dta = nditte.get(NDT_RAGSOC);
_tipoa_ditta = nditte.get_char(NDT_TIPOA);
_codana_ditta = nditte.get_long(NDT_CODANAGR);
}
void Stp_indici_LUnico::dati_anagrafici_ditta()
{
TLocalisamfile anag (LF_ANAG);
TLocalisamfile comuni (LF_COMUNI);
anag.setkey(1);
anag.zero();
anag.put(ANA_TIPOA, _tipoa_ditta);
anag.put(ANA_CODANAGR, _codana_ditta);
if (anag.read(_isequal) == NOERR)
{
if (_tipo_ditta == 'G')
{
_codcom_dta = anag.get(ANA_COMRF);
_ind_dta = anag.get(ANA_INDRF);
_civ_dta = anag.get(ANA_CIVRF);
_cap_dta = anag.get(ANA_CAPRF);
}
else
{
_codcom_dta = anag.get(ANA_COMRES);
_ind_dta = anag.get(ANA_INDRES);
_civ_dta = anag.get(ANA_CIVRES);
_cap_dta = anag.get(ANA_CAPRES);
}
}
comuni.setkey(1);
comuni.zero();
comuni.put(COM_COM, _codcom_dta);
if (comuni.read(_isequal) == NOERR)
{
_com_dta = comuni.get(COM_DENCOM);
_prov_dta = comuni.get(COM_PROVCOM);
}
}
void Stp_indici_LUnico::descrizione_codreg(const TString& codreg, TString& desc)
{
TString16 dep;
dep.format("%4d%-3s", _anno, (const char*)codreg);
TTable tab_reg("REG");
tab_reg.zero();
tab_reg.put("CODTAB", dep);
tab_reg.read();
if (tab_reg.bad())
tab_reg.zero();
desc = tab_reg.get("S0");
}
void Stp_indici_LUnico::compatta_ragsoc(TString& ragsoc)
{
TString app;
if (_tipo_intesta == 'F')
{
app = ragsoc.mid(29,20);
app.trim();
ragsoc = ragsoc.mid(0,30);
ragsoc.trim();
ragsoc << ' ' << app;
}
}
/*
void Stp_indici_LUnico::crea_intestazione_prova()
{
TString datastampastr;
TString sep(132);
TString cofi,paiv,ind,civ,cap,com,prov,ragsoc;
compatta_ragsoc(ragsoc);
reset_header();
set_header (1,"Studio %s %s %s %s %s %s", (const char*) ragsoc,(const char*) ind,(const char*) civ,
(const char*) cap,(const char*) com,(const char*) prov);
sep << "Pag. @#";
sep.right_just(132);
set_header (2,(const char*) sep);
datastampastr = _datastampa.string();
set_header (2,"@0gPartita iva %11s", (const char*) paiv);
set_header (2,"@30gCodice fiscale %16s", (const char*) cofi);
set_header (2,"@75gLIBRO UNICO DI PROVA");
set_header (2,"@105gData@110g%s",(const char*) datastampastr);
set_header (3,"@0gLibro unico : %s %s", (const char*) _codlib,(const char*) _desc_cod_lib);
TString mese = itom(_mese);
set_header (3,"@75gmese di %s", (const char*) mese);
set_header (3,"@92g%4d", _anno);
sep.fill('-'); //Stampa 132 - (sep(132))
set_header (4, (const char *) sep);
set_header (5,"@0gCod.@6gNumero@13gpagine@21gCodice@69gCod.@104gCodice@111gN.pag.@118gutente@126gNum.@131gS");
set_header (6,"@0gLibro@8gda@16ga@21gditta@28gDenominazione@69greg.@74gDescrizione@104gvidim.@112gutilizzate@126greg.@131gB");
set_header (7, (const char *) sep);
}
void Stp_indici_LUnico::init_sort()
{
_lib = new ind_lib;
_sort = new TSort (sizeof(ind_lib));
// _sort -> addsortkey((char*)&(_lib->anno) - (char*)&(_lib->anno),4);
_sort -> addsortkey((char*)&(_lib->mese) - (char*)&(_lib->anno),2);
_sort -> addsortkey((char*)&(_lib->nini_plib) - (char*)&(_lib->anno),5);
_sort->init();
}
//Crea sort ordina i record della tabella %INL per mese registrazione, anno
//registrazione e numero iniziale pagine registro libro unico
void Stp_indici_LUnico::crea_sort()
{
long anno,numini_paglib,numfin_paglib,codditta,numini_pagut,numfin_pagut;
TString cod_reg,cod_vidimaz,dep,app;
long mese, ultimo_mese;
bool stamp_bollato = FALSE;
bool pagine_ann = FALSE;
bool stampato = FALSE;
mese = 0;
ultimo_mese = 0;
init_sort();
_tab_lbu->zero();
// TString dep (format ("%4d%-3s", _anno, (const char*) _codlib));
// sprintf(__tmp, "%4d", _anno);
// strcat (__tmp, _codlib);
dep.format ("%4d%-3s", _anno, (const char*)_codlib);
_tab_lbu->put("CODTAB", (const char*) dep);
if (_tab_lbu->read(_isequal) == NOERR)
{
_indlib->setkey(1);
_indlib->zero();
_indlib->put("ANNO", _anno);
_indlib->put("CODLIB", (const char*) _codlib);
TRectype rec (_indlib->curr());
for (_indlib->read(); !_indlib->eof(); _indlib->next())
{
if (_indlib->curr() > rec) break;
mese = _indlib->get_int("MESEREG");
if (((_tipo_stampa == 1) && (mese >= _meseda) && (mese <= _mesea)) ||
((_tipo_stampa == 2) && (mese <= _mesea)))
{
long num_riga = _indlib->get_long("NUMREG");
anno = _indlib->get_long("ANNOREG");
numini_paglib = _indlib->get_long("PAGINI");
numfin_paglib = _indlib->get_long("PAGFIN");
codditta = _indlib->get_long("CODDITTA");
cod_reg = _indlib->get("CODREG");
cod_vidimaz = _indlib->get("CODVID");
numini_pagut = _indlib->get_long("PAGINIUT");
numfin_pagut = _indlib->get_long("PAGFINUT");
stamp_bollato = _indlib->get_bool("STAMPATO");
pagine_ann = _indlib->get_bool("ANNULLATE");
//Se tipo_stampa = 1 (stampa di prova) stampo ugualmente. Se tipo_stampa = 2
// (stampa su bollato), stampo solamente se il flag di stampa su bollato e'
// FALSE.
if ((_tipo_stampa == 1) || ((_tipo_stampa == 2) && (!stamp_bollato)))
{
ultimo_mese = mese;
stampato = TRUE;
sprintf (_lib->anno, "%4d", anno);
sprintf (_lib->mese, "%2d", mese);
sprintf (_lib->nini_plib, "%5d", numini_paglib);
_lib->num_riga = num_riga;
_lib->nfin_plib = numfin_paglib;
_lib->codditta = codditta;
sprintf (_lib->cod_reg, "%3s", (const char*) cod_reg);
_lib->nini_put = numini_pagut;
_lib->nfin_put = numfin_pagut;
sprintf (_lib->cod_vid, "%3s", (const char*) cod_vidimaz);
_lib->stamp_bol = stamp_bollato;
_lib->pag_ann = pagine_ann;
_sort->sort ((const char*) _lib);
//Se si tratta di una stampa su bollato e il flag "stampa su bollato" indica
//che non e' mai stato stampato su bollato (flag = FALSE), allora devo stampare
//il record della tabella %INL, e contemporaneamente aggiornare il flag, per
//evitare di ristampare successivamente su bollato
if (_tipo_stampa == 2)
{
_indlib->put("STAMPATO", "X");
_indlib->rewrite();
}
}
}
}
_sort->endsort();
}
// Se si tratta di una stampa su libro bollato, aggiorno sulla tabella %LBU
// l' ultimo mese stampato, l' ultima pagina stampata e il flag che indica se
// quel record e' stato stampato su bollato
if ((_tipo_stampa == 2) && (stampato)) // stampato e' il flag che mi dice
{ //se almeno un record, nella stampa
_tab_lbu->put("I0", ultimo_mese); //su bollato, va in stampa. In caso
if (_codlib == _cod_lib_stampa) //contrario non avrebbe senso
_tab_lbu->put("I1", numfin_paglib);//aggiornare %LBU. ES:tutti i record
_tab_lbu->rewrite(); //di quel mese sono gia stati stampati
} //su bollato (flag = TRUE).
} //Comunque il numero ultima pagina stampata va aggiornato
//con l'ultima pagina dell'ultimo indice solo se il i libri
//selezionati sono gli stessi (libro di studio e libro di stampa).
*/
void Stp_indici_LUnico::postclose_print()
{ // Se ha stampato in definitiva, aggiorna il numero di pagine stampate sul libro unico.
// Viene incrementato del numero di pagine stampate per gli indici
/*
if ((_tipo_stampa == 2))
{
TString dep;
long numfin_paglib;
_tab_lbu->zero();
dep.format ("%4d%-3s", _anno, (const char*)_cod_lib_stampa); // Va aggiornato il libro sul quale si stampa!
_tab_lbu->put("CODTAB", (const char*) dep);
if (_tab_lbu->read() == NOERR)
{
numfin_paglib = _tab_lbu->get_long("I1");
numfin_paglib += get_page_number();
_tab_lbu->put("I1", numfin_paglib);
_tab_lbu->rewrite();
}
}
*/
}
bool Stp_indici_LUnico::preprocess_page(int file, int counter)
{
/*
struct ind_lib* lib = (struct ind_lib*) _buff;
long nini_plib;
reset_print();
_buff = _sort->retrieve();
if (_buff != NULL)
{
lib = (struct ind_lib*) _buff;
_mese = atoi(lib->mese);
_numini_paglib = atoi(lib->nini_plib);
_numfin_paglib = lib->nfin_plib;
_codditta = lib->codditta;
// _rag_soc = ragsoc_ditta(_codditta);
// dati_anagrafici_ditta(_ind_dta,_civ_dta,_cap_dta,_com_dta,_prov_dta);
_cod_reg = lib->cod_reg;
if (_codditta > 0 && prefix().exist(_codditta))
{
prefix().set_codditta(_codditta); // change firm to get register description
// _descrizione = descrizione_codreg(_cod_reg);
}
else
_descrizione = "";
_cod_vidimaz = lib->cod_vid;
_numini_pagut = lib->nini_put;
_numfin_pagut = lib->nfin_put;
_num_riga = lib->num_riga;
_stamp_bollato = lib->stamp_bol;
_pag_ann = lib->pag_ann;
if (_stamp_bollato)
_stamp_bollato_str = "X";
else
_stamp_bollato_str = "";
//Il controllo di pagine fuori sequenza viene sempre effettuato, tranne che per
//il primo record. (solo per stampa di prova)
if ( (counter) && (_tipo_stampa == 1) )
{
nini_plib = _numini_paglib - 1;
if (_nfin_plib_prec != nini_plib)
_pag_fuori_sequenza = TRUE;
else
_pag_fuori_sequenza = FALSE;
}
if (counter)
if (_mese != _meseprec)
printer().formfeed();
_meseprec = _mese;
_nfin_plib_prec = _numfin_paglib;
return TRUE;
}
else
return FALSE;
*/
return TRUE;
}
void Stp_indici_LUnico::set_page(int file, int counter)
{
/*
if (_tipo_stampa == 1)
setta_righe_prova();
else if (_tipo_stampa == 2)
setta_righe_bollato();
*/
}
/*
void Stp_indici_LUnico::setta_righe_prova()
{
int i;
i = 1;
if (_pag_fuori_sequenza)
set_row (i++,"@10gPAGINE FUORI SEQUENZA");
set_row (i, "@1g#t", &_codlib);
set_row (i, "@6g#5d", &_numini_paglib);
set_row (i, "@13g#5d", &_numfin_paglib);
if ((_pag_ann) && (_codditta == 0))
set_row (i,"@27gPAGINE ANNULLATE");
else
{
set_row (i,"@21g#5ld", &_codditta);
set_row (i,"@27g#.41t", &_rag_soc);
}
if ((_pag_ann) && (_codditta != 0) && (_cod_reg == ""))
set_row (i,"@73gPAGINE ANNULLATE");
else
{
set_row (i,"@69g#t", &_cod_reg);
set_row (i,"@73g#.31t", &_descrizione);
}
set_row (i, "@105g#t", &_cod_vidimaz);
set_row (i, "@111g#5d", &_numini_pagut);
set_row (i, "@117g#5d", &_numfin_pagut);
set_row (i, "@124g#5d", &_num_riga);
set_row (i++,"@131g#t", &_stamp_bollato_str);
if (_stampa_ind && !_pag_ann)
set_row (i ,"@27g#t #t #t #t #t", &_ind_dta, &_civ_dta, &_cap_dta, &_com_dta, &_prov_dta);
}
void Stp_indici_LUnico::setta_righe_bollato()
{
int i;
i = 1;
// if (_pag_fuori_sequenza)
// set_row (i++,"@10gPAGINE FUORI SEQUENZA");
set_row (i,"@1g#t", &_codlib);
set_row (i,"@6g#5d", &_numini_paglib);
set_row (i,"@13g#5d", &_numfin_paglib);
if ((_pag_ann) && (_codditta == 0))
set_row (i,"@27gPAGINE ANNULLATE");
else
{
set_row (i,"@21g#5ld", &_codditta);
set_row (i,"@27g#.41t", &_rag_soc);
}
if ((_pag_ann) && (_codditta != 0) && (_cod_reg == ""))
set_row (i,"@73gPAGINE ANNULLATE");
else
{
set_row (i,"@69g#t", &_cod_reg);
set_row (i,"@73g#.31t", &_descrizione);
}
set_row (i,"@105g#t", &_cod_vidimaz);
set_row (i,"@111g#5d", &_numini_pagut);
set_row (i++,"@117g#5d", &_numfin_pagut);
// set_row (i++,"@130g#t", &_stamp_bollato_str);
if (_stampa_ind && !_pag_ann)
set_row (i ,"@27g#t #t #t #t #t", &_ind_dta, &_civ_dta, &_cap_dta, &_com_dta, &_prov_dta);
}
*/
print_action Stp_indici_LUnico::postprocess_page(int file, int counter)
{
/*
if (_buff == NULL) */
return NEXT_PAGE;
// return REPEAT_PAGE;
}
void Stp_indici_LUnico::preprocess_header()
{
// if (_tipo_stampa ==1)
// crea_intestazione_prova();
// else
// if (_tipo_stampa == 2)
// crea_intestazione_bollato();
}