#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); }