0592846a7f
git-svn-id: svn://10.65.10.50/trunk@4186 c028cbd2-c16b-5b4b-a496-9718f37d4682
394 lines
10 KiB
C++
Executable File
394 lines
10 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);
|
|
_tab_reg = NULL;
|
|
_msk = new TMask("ba3601a");
|
|
_msk->set_handler(F_CODDITTA, registri_ditta_hnd);
|
|
_sort = NULL;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool Stp_indici_LUnico::user_destroy()
|
|
{
|
|
delete _msk;
|
|
delete _tab_lbu;
|
|
delete _indlib;
|
|
delete _nditte;
|
|
delete _anag;
|
|
delete _comuni;
|
|
if (_sort) delete _sort;
|
|
if (_tab_reg) delete _tab_reg;
|
|
|
|
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);
|
|
if (!prefix().exist(ditta)) return f.error_box("La ditta %ld non ha nessun registro",ditta);
|
|
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 %ld per l'anno %d non ha registri che vengono stampati sul libro unico", ditta, anno);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void Stp_indici_LUnico::ragsoc_ditta(long codditta)
|
|
{
|
|
|
|
_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()
|
|
{
|
|
_anag->setkey(1);
|
|
_anag->zero();
|
|
_anag->put(ANA_TIPOA, _tipoa_ditta);
|
|
_anag->put(ANA_CODANAGR, _codana_ditta);
|
|
if (_anag->read(_isequal) == NOERR)
|
|
{
|
|
_cofi_dta = _anag->get(ANA_COFI);
|
|
_paiv_dta = _anag->get(ANA_PAIV);
|
|
_codcom_dta = _anag->get(ANA_COMRF);
|
|
if (_codcom_dta.not_empty())
|
|
{
|
|
_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::dati_libro_unico()
|
|
{
|
|
TTable lbu ("%LBU");
|
|
TString dep;
|
|
dep.format("%4d%-3s", _anno, (const char*) _codlib);
|
|
|
|
_tab_lbu->put("CODTAB", (const char*) dep);
|
|
|
|
if (_tab_lbu->read(_isequal) == NOERR)
|
|
{
|
|
//_stampa_intesta = _tab_lbu->get_bool("B0");
|
|
//_stampa_ind = _tab_lbu->get_bool("B1");
|
|
_tipo_intesta = _tab_lbu->get_char("S2");
|
|
_codana_intesta = _tab_lbu->get_long("I4");
|
|
_desc_cod_lib = _tab_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);
|
|
_codcom = _anag->get(ANA_COMRF);
|
|
|
|
if (_codcom.not_empty())
|
|
{
|
|
_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);
|
|
}
|
|
}
|
|
|
|
//Crea sort ordina i record della tabella per mese registrazione,
|
|
//numero iniziale pagine registro libro unico
|
|
|
|
void Stp_indici_LUnico::crea_sort()
|
|
{
|
|
TString dep;
|
|
int mese;
|
|
long ditta;
|
|
|
|
ind_lib lib;
|
|
|
|
if (_sort) delete _sort;
|
|
_sort = new TSort (sizeof(ind_lib));
|
|
|
|
_sort -> addsortkey((char*)&(lib.mese) - (char*)&(lib.mese),2);
|
|
_sort -> addsortkey((char*)&(lib.nini_plib) - (char*)&(lib.mese),5);
|
|
_sort->init();
|
|
set_firm(_ditta);
|
|
|
|
if (_tab_reg != NULL) delete _tab_reg;
|
|
_tab_reg = new TTable ("REG");
|
|
_tab_lbu->zero();
|
|
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");
|
|
ditta = _indlib->get_long("CODDITTA");
|
|
|
|
if (mese >= _meseda && mese <= _mesea && ditta == _ditta)
|
|
{
|
|
sprintf (lib.mese, "%2d", mese);
|
|
sprintf (lib.nini_plib, "%5ld", _indlib->get_long("PAGINI"));
|
|
lib.nfin_plib = _indlib->get_long("PAGFIN");
|
|
sprintf (lib.cod_reg, "%-3s", (const char*) _indlib->get("CODREG"));
|
|
lib.nini_put = _indlib->get_long("PAGINIUT");
|
|
lib.nfin_put = _indlib->get_long("PAGFINUT");
|
|
sprintf (lib.cod_vid, "%3s", (const char*) _indlib->get("CODVID"));
|
|
lib.pag_ann = _indlib->get_bool("ANNULLATE");
|
|
_sort->sort ((const char*) &lib);
|
|
}
|
|
}
|
|
}
|
|
_sort->endsort();
|
|
}
|
|
|
|
bool Stp_indici_LUnico::set_print(int)
|
|
{
|
|
KEY tasto;
|
|
|
|
tasto = _msk->run();
|
|
_oldditta = get_firm();
|
|
if (tasto == K_ENTER)
|
|
{
|
|
_ended = FALSE;
|
|
_meseprec = "";
|
|
_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);
|
|
ragsoc_ditta(_ditta);
|
|
dati_anagrafici_ditta();
|
|
dati_libro_unico();
|
|
intestatario();
|
|
crea_sort();
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void Stp_indici_LUnico::descrizione_codreg(const TString& codreg, TString& desc)
|
|
{
|
|
TString16 dep;
|
|
dep.format("%4d%-3s", _anno, (const char*)codreg);
|
|
|
|
_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::postclose_print()
|
|
{
|
|
set_firm(_oldditta);
|
|
}
|
|
|
|
bool Stp_indici_LUnico::preprocess_page(int file, int counter)
|
|
{
|
|
reset_print();
|
|
|
|
struct ind_lib* lib = (struct ind_lib*) _sort->retrieve();
|
|
if (lib == NULL)
|
|
{
|
|
_ended = TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
_mese = itom(atoi(lib->mese));
|
|
if (_mese == _meseprec) _mese = "";
|
|
else _meseprec = _mese;
|
|
_numini_paglib = atol(lib->nini_plib);
|
|
_numfin_paglib = lib->nfin_plib;
|
|
_cod_reg = lib->cod_reg;
|
|
descrizione_codreg(_cod_reg,_descrizione);
|
|
_cod_vidimaz = lib->cod_vid;
|
|
_numini_pagut = lib->nini_put;
|
|
_numfin_pagut = lib->nfin_put;
|
|
_pag_ann = lib->pag_ann;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void Stp_indici_LUnico::set_page(int file, int counter)
|
|
{
|
|
int i;
|
|
|
|
i = 1;
|
|
|
|
print_header();
|
|
set_row (i, "@0g#t", &_mese);
|
|
set_row (i, "@22g#t", &_cod_vidimaz);
|
|
set_row (i, "@27g#5d", &_numini_paglib);
|
|
set_row (i, "@35g#5d", &_numfin_paglib);
|
|
|
|
if (_pag_ann && _cod_reg == "")
|
|
set_row (i,"@53gPAGINE ANNULLATE");
|
|
else
|
|
{
|
|
set_row (i,"@50g#t", &_cod_reg);
|
|
set_row (i,"@54g#t", &_descrizione);
|
|
}
|
|
|
|
set_row (i, "@85g#5d", &_numini_pagut);
|
|
set_row (i, "@93g#5d", &_numfin_pagut);
|
|
}
|
|
|
|
print_action Stp_indici_LUnico::postprocess_page(int file, int counter)
|
|
{
|
|
if (_ended) return NEXT_PAGE;
|
|
return REPEAT_PAGE;
|
|
}
|
|
|
|
|
|
void Stp_indici_LUnico::print_header()
|
|
{
|
|
TString sep(132);
|
|
TString ind(_ind);
|
|
|
|
reset_header();
|
|
ind << ", " << _civ;
|
|
compatta_ragsoc(_ragsoc);
|
|
// Dati studio
|
|
if (_ragsoc.len() > 50) _ragsoc.cut(50);
|
|
set_header (1,"Studio %-50s @60g%s @110g%s @116g%-13s @129g%s",
|
|
(const char*)_ragsoc, (const char*)ind, (const char*)_cap, (const char*)_com, (const char*)_prov);
|
|
sep << "Pag. @#";
|
|
sep.right_just(132);
|
|
set_header (2,(const char*) sep);
|
|
set_header (2,"@0gPartita iva %-11s", (const char*)_paiv);
|
|
set_header (2,"@26gCodice fiscale %-16s", (const char*)_cofi);
|
|
set_header (2,"@105gData %s",(const char*) _datastampa.string());
|
|
set_header (3,"@0gLibro unico : %s %s", (const char*)_codlib, (const char*)_desc_cod_lib);
|
|
set_header (3,"@70gANNO %4d", _anno);
|
|
sep.fill('-');
|
|
set_header(4, (const char *) sep);
|
|
// Dati ditta
|
|
ind = _ind_dta;
|
|
ind << ", " << _civ_dta;
|
|
if (_ragsoc_dta.len() > 45) _ragsoc_dta.cut(45);
|
|
set_header(5,"Ditta %05ld %-45s @60g%s @110g%s @116g%-13s @129g%s",
|
|
_ditta,(const char*)_ragsoc_dta,(const char*) ind,(const char*)_cap_dta,
|
|
(const char*)_com_dta,(const char*)_prov_dta);
|
|
set_header(6,"@0gPartita iva %-11s", (const char*)_paiv_dta);
|
|
set_header(6,"@26gCodice fiscale %-16s", (const char*)_cofi_dta);
|
|
set_header(7, (const char *) sep);
|
|
// Intestazione colone
|
|
set_header(8,"@20g---- Libro Unico ----");
|
|
set_header(8,"@50g------------------------------");
|
|
set_header(8,"@81gRegistri della ditta");
|
|
set_header(8,"@102g------------------------------");
|
|
set_header (9,"Mese @20gVidim. Da pag A pag @50gCod Descrizione @84gDa pag A pag");
|
|
set_header (10, (const char *) sep);
|
|
}
|
|
|
|
|