From 94f5183eeeab78c5c23f9e76ebf9125cd96b7ac6 Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 23 Sep 1996 10:29:30 +0000 Subject: [PATCH] Another commitment.. git-svn-id: svn://10.65.10.50/trunk@3645 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- m770/77stba.cpp | 2037 +++++++++++++++++++++++----------------------- m770/77stba.h | 578 ++++++------- m770/77stq.cpp | 2 + m770/77stq.h | 559 ++++++------- m770/77stqab.cpp | 2 + m770/77stqab.h | 484 +++++------ 6 files changed, 1837 insertions(+), 1825 deletions(-) diff --git a/m770/77stba.cpp b/m770/77stba.cpp index 37b4fcce9..a8b328006 100755 --- a/m770/77stba.cpp +++ b/m770/77stba.cpp @@ -1,1017 +1,1020 @@ -// Stampa base -#include "77stba.h" - - -TBase1::TBase1(const char* sNomeForm, const char* quadro) : TDicForm(sNomeForm, quadro) -{ - r = new TRelation(LF_SOCI); - r->add(LF_ANAG, "TIPOA=TIPOASOC|CODANAGR=CODANAGRSO"); - r->add(LF_ANAGFIS, "CODANAGR=CODANAGR",1, LF_ANAG); - r->add(LF_COMUNI, "COM=COMNASC",1,LF_ANAGFIS); - c = new TCursor(r); - _bAllegSoci=FALSE; -} - -TBase1::~TBase1() -{ - delete r; - delete c; -} - -void TBase1::stampa_corpo(TPrinter& pr) -{ - TPrint_section& body = section('B', first_page); - body.reset(); - body.update(); - const int body_righe = body.height(); - for (int i = 0; i < body_righe; i++) - { - pr.print(body.row(i)); - _RigaCorr++; - } - if (usa_progind()) - progind()->addstatus(1); -} - -// accetta solo quelli ATTUALI E con qualifica=A,B o C -bool bFiltraSoci(const TRelation* rel) -{ - TString sQual(3), sAttPrec(3); - sQual = rel->lfile().get("RICQUAL"); - sAttPrec = rel->lfile().get("ATTPREC"); - return (sAttPrec == "A") && (sQual=="A" || sQual=="B" || sQual=="C"); -} - -long TBase1::iContaSoci() -{ - TString filtro(20); - filtro.format("CODDITTA=%d",_codditta); - c->setfilter(filtro); - c->set_filterfunction(bFiltraSoci); - (*c)=0L; - return c->items(); -} - -const int _INIZIO_SOCI=53; - -void TBase1::stampa_soci(TPrinter& pr) -{ - TPrint_section& fut = section('F', first_page); - fut.reset(); - jump_to_line(pr,_INIZIO_SOCI); - const long iSoci = iContaSoci(); - if (iSoci > 11) - { - _bAllegSoci=TRUE; - TPrintrow& rg=fut.row(0); - rg.put("VEDERE ALLEGATO", 25); - pr.print(rg); - _RigaCorr++; - if (usa_progind()) progind()->addstatus(1); - } - else - { - int i=0; - TString sRagsoc,sSesso,sComuneNa,sProvNa,sDataNa,sCodFis,sCodQua; - TString sNome,sCognome; - for ((*c)=0L; c->pos() < c->items(); ++(*c)) - { - TPrintrow& rg=fut.row(i++); - sCodQua=c->file().get("RICQUAL"); - sRagsoc=c->file(LF_ANAG).get("RAGSOC"); - sNome=sRagsoc.mid(30,20); - sCognome=sRagsoc.mid(0,29); - sNome.trim(); - sCognome.trim(); - sRagsoc=sCognome; sRagsoc << " "; sRagsoc << sNome; - sCodFis=c->file(LF_ANAG).get("COFI"); - sDataNa=c->file(LF_ANAGFIS).get("DATANASC"); - sSesso=c->file(LF_ANAGFIS).get("SESSO"); - sComuneNa=c->file(LF_COMUNI).get("DENCOM"); - sProvNa=c->file(LF_COMUNI).get("PROVCOM"); - fut.field(0).set(sRagsoc); - rg.put(sRagsoc,fut.field(0).x()-1); - fut.field(1).set(sSesso); - rg.put(sSesso,fut.field(1).x()-1); - fut.field(2).set(sComuneNa); - rg.put(sComuneNa,fut.field(2).x()-1); - fut.field(3).set(sProvNa); - rg.put(sProvNa,fut.field(3).x()-1); - fut.field(4).set(sDataNa); - rg.put(sDataNa,fut.field(4).x()-1); - fut.field(5).set(sCodFis); - rg.put(sCodFis,fut.field(5).x()-1); - fut.field(6).set(sCodQua); - rg.put(sCodQua,fut.field(6).x()-1); - pr.print(rg); - _RigaCorr++; - if (usa_progind()) progind()->addstatus(1); - } - } -} - -bool TBase1::print(const long codditta, const long NumFis, const long NumNoFis) -{ - TCursor* cur = cursor(); - TPrinter& pr = printer(); - _codditta=codditta; - - if (!InitPrint(codditta)) - return FALSE; - pr.formlen(BASE_FORMLEN); - - (*cur)=0L; - if (_modulaser) - { - ClearFlagModulaser(); - TPrintrow r; - if (!_GiaMessoStartDoc) - put_modulaser(r, STARTDOC); - put_modulaser(r, STARTDITTA); - put_modulaser(r, STARTPAGE, 1); - pr.print(r); - _RigaCorr++; - } - jump_to_line(pr, prima_riga(PRIMA)); - stampa_corpo(pr); - stampa_soci(pr); - next_page(pr); - close_print(); - return TRUE; -} - -void TBase2::stampa_corpo(TPrinter& pr) -{ - TPrint_section& body = section('B', even_page); - body.reset(); - body.update(); - const int body_righe = body.height(); - for (int i = 0; i < body_righe; i++) - { - pr.print(body.row(i)); - _RigaCorr++; - } - if (usa_progind()) - progind()->addstatus(1); -} - -bool TBase2::print(const long codditta, const long NumFis, const long NumNoFis) -{ - TCursor* cur = cursor(); - TPrinter& pr = printer(); - _codditta=codditta; - filtra(codditta); - _RigaCorr=0; - (*cur)=0L; - jump_to_line(pr, prima_riga(PRIMA)); - stampa_corpo(pr); - next_page(pr); - close_print(); - return TRUE; -} - -void TBase3::stampa_testata(TPrinter& pr) -{ - TPrint_section& hh = section('H', first_page); - hh.reset(); - hh.update(); - const int hhr = hh.height(); - for (int i = 0; i < hhr; i++) - { - pr.print(hh.row(i)); - _RigaCorr++; - } - if (usa_progind()) - progind()->addstatus(1); -} - -int TBase3::stampa_L(TPrinter& pr,const int iChiaveL) -{ - long codit=0L; - TPrint_section& body = section('B', odd_page); - body.reset(); - - TCursor& cur = *cursor(); -// Le chiavi nel file e nel .ini sono saggiamente scambiate - if (iChiaveL==2) cur.setkey(1); - else cur.setkey(2); - - filtra(_codditta); - cur=0L; - - bool finito=FALSE; - int righe=0; - while (!finito) - { - body.update(); - const int body_righe = body.height(); - for (int i = 0; i < body_righe; i++) - { - TPrintrow& rr=body.row(i); - pr.print(rr); - rr.reset(); - _RigaCorr++; - } - if (usa_progind()) - progind()->addstatus(1); - righe++; - ++cur; - codit=cur.file().get_long("CODDITTA"); - bool buono=codit==_codditta; -// Guarda se e' necessario stampare l'aggiuntivo - _bAggiuntivoL = buono && righe>14; - finito=righe>14 || codit!=_codditta; - } - return righe; -} - -void TBase3::stampa_totali_L(TPrinter& pr) -{ -// La sezione f last contiene solo due totali aggiornati con add nel form - TPrint_section& hh = section('F', last_page); -// hh.reset(); - hh.update(); - const int hhr = hh.height(); - for (int i = 0; i < hhr; i++) - { - pr.print(hh.row(i)); - _RigaCorr++; - } - if (usa_progind()) - progind()->addstatus(1); -} - -bool TBase3::print(const long codditta, const long NumFis, const long NumNoFis) -{ - _bAggiuntivoL=TRUE; - TCursor* cur = cursor(); - TPrinter& pr = printer(); - _codditta=codditta; - filtra(codditta); - _RigaCorr=0; - (*cur)=0L; - jump_to_line(pr, prima_riga(PRIMA)); -// Stampa i codici concessione e tesoreria - stampa_testata(pr); -// Legge dai par.studio l'ordinamento da usare per L - TConfig conf(CONFIG_STUDIO); - const int iChiaveL = (int)conf.get_long("FlStQl", "77"); - const int righe_stampate=stampa_L(pr,iChiaveL); -// Se la stampa prosegue i totali vanno sull'aggiuntivo NON qui - if (!_bAggiuntivoL) - { - jump_to_line(pr,_RIGA_TOTALI_L); - stampa_totali_L(pr); - } - next_page(pr); - close_print(); - return TRUE; -} - -const char* TRigaN::sMeseRif() const -{ - __dep16=""; - __dep16 << _MeseRif; - return __dep16; -} - -const char* TRigaN::sAnnoRif() const -{ - __dep16=""; - __dep16 << _AnnoRif; - return __dep16; -} - -// Ordina le righe N per periodo di riferimento -int TRigaN::compare(const TSortable& s) const -{ - const TRigaN& rec = (const TRigaN&)s; - const int da = _AnnoRif - rec._AnnoRif; - const int dm = _MeseRif - rec._MeseRif; - if (da==0) - return dm; - else - return da; -} - -TRigaN::TRigaN(const TLocalisamfile& qn) -{ - _pos = qn.recno(); - - const TRectype& rec = qn.curr(); - - _MeseRif = rec.get_int("MESERIF"); - _AnnoRif = rec.get_int("ANNORIF"); -// Nel quadro R si chiama diversamente @!#@!!! - if (qn.num() == LF_QUAN) - _ImpRimb = rec.get_real("IMPOSTA"); - else - _ImpRimb = rec.get_real("IMPRIMB"); - _CompAss = rec.get_real("COMPENSI"); -} - -int TRigheNR::fill(const long codditta,TLocalisamfile& qnr) -{ - long ditta=0L; -// Si posiziona sul primo della ditta corrente - qnr.zero(); - qnr.put("CODDITTA",codditta); - qnr.read()==NOERR; - ditta=qnr.get_long("CODDITTA"); - if (ditta!=codditta) return 0; - -// Legge tutti quelli della ditta corrente - for (; !qnr.eof(); qnr.next()) - { - ditta=qnr.get_long("CODDITTA"); - if (ditta!=codditta) break; - - TRigaN* n = new TRigaN(qnr); - if (n->pos() >= 0) - _data.add(n); - else - delete n; - } - _data.sort(); - const int i = _data.items(); - return i; -} - -const char* TRigaQT::sMesePag() const -{ - __dep16=""; - __dep16 << _MesePag; - return __dep16; -} - -const char* TRigaQT::sAnnoPag() const -{ - __dep16=""; - __dep16 << _AnnoPag; - return __dep16; -} - -// Ordina le righe N per periodo di riferimento -int TRigaQT::compare(const TSortable& s) const -{ - const TRigaQT& rec = (const TRigaQT&)s; - const int da = _AnnoPag - rec._AnnoPag; - const int dm = _MesePag - rec._MesePag; - if (da==0) - return dm; - else - return da; -} - -TRigaQT::TRigaQT(const TLocalisamfile& qt) -{ - const TRectype& rec = qt.curr(); - - _MesePag = rec.get_int("MESEPAG"); - _AnnoPag = rec.get_int("ANNOPAG"); - _ContVers = rec.get_real("CONTVERS"); - _ContRimb = rec.get_real("CONTRIMB"); - _Interessi=rec.get_real("INTERESSI"); - _sCodReg=rec.get("CODREG"); -} - -int TRigheQT::fill(const long codditta,TLocalisamfile& qt) -{ - long ditta=0L; -// Si posiziona sul primo della ditta corrente - qt.zero(); - qt.put("CODDITTA",codditta); - qt.read()==NOERR; - ditta=qt.get_long("CODDITTA"); - if (ditta!=codditta) return 0; - -// Legge tutti quelli della ditta corrente - for (; !qt.eof(); qt.next()) - { - ditta=qt.get_long("CODDITTA"); - if (ditta!=codditta) break; - - TRigaQT* n = new TRigaQT(qt); - if (n->pos() >= 0) - _data.add(n); - else - delete n; - } - _data.sort(); - const int i = _data.items(); - return i; -} - -// Ordina le righe N per periodo di riferimento -int TRigaPS::compare(const TSortable& s) const -{ - const TRigaPS& rec = (const TRigaPS&)s; - return _dDvpos() >= 0) - _data.add(n); - else - delete n; - } - _data.sort(); - const int i = _data.items(); - return i; -} - -void TBase4::stampa_testata(TPrinter& pr) -{ - TPrint_section& hh = section('H', first_page); - hh.reset(); - hh.update(); - const int hhr = hh.height(); - for (int i = 0; i < hhr; i++) - { - pr.print(hh.row(i)); - _RigaCorr++; - } - if (usa_progind()) - progind()->addstatus(1); -} - -void TBase4::fill_riga_QT(TPrint_section& sec,const int num) -{ - TString sVal; - int start=0,end=5; - for (int i = start; i < end; i++) - { - TForm_item& fi = sec.field(i); - if (num < _righeQT.items()) - { - const TRigaQT& rN = _righeQT[num]; - if (i==start) - sVal=rN.sMesePag(); - else if (i==start+1) - sVal=rN.sAnnoPag(); - else if (i==start+2) - sVal=rN.ContVers(fi.picture()); - else if (i==start+3) - sVal=rN.ContRimb(fi.picture()); - else if (i==start+4) - sVal=rN.Interessi(fi.picture()); - else if (i==start+5) - sVal=rN.CodReg(); - } - else - sVal=""; - fi.set(sVal); - TPrintrow& row=sec.row(0); - row.put(sVal,fi.x()-1); - } -} - -void TBase4::stampa_Q(TPrinter& pr) -{ - TPrint_section& body = section('F', even_page); - body.reset(); - TLocalisamfile qp(LF_QUAQ); - _righeQT.fill(_codditta,qp); - _bAggQ = _righeQT.items() > _RIGHE_Q; - - int riga=0; - bool FinitaSezione=FALSE; - while (!FinitaSezione) - { -// Stampa la parte sinistra (primi 4 campi) - fill_riga_QT(body,riga); - TPrintrow& rr=body.row(0); - pr.print(rr); - rr.reset(); - riga++; - _RigaCorr++; - if (usa_progind()) - progind()->addstatus(1); - FinitaSezione=riga>_RIGHE_Q-1; - } -// Salta due righe alla fine - stampa_righe_vuote(pr,2); -} - -void TBase4::stampa_T(TPrinter& pr) -{ - TPrint_section& body = section('F', odd_page); - body.reset(); - TLocalisamfile qp(LF_QUAT); - _righeQT.fill(_codditta,qp); - _bAggT = _righeQT.items() > _RIGHE_T; - - int riga=0; - bool FinitaSezione=FALSE; - while (!FinitaSezione) - { -// Stampa la parte sinistra (primi 4 campi) - fill_riga_QT(body,riga); - TPrintrow& rr=body.row(0); - pr.print(rr); - rr.reset(); - riga++; - _RigaCorr++; - if (usa_progind()) - progind()->addstatus(1); - FinitaSezione=riga>_RIGHE_T-1; - } -} - -void TBase4::fill_riga_PS(TPrint_section& sec,const int num) -{ - TString sVal; - int start=0,end=7; - for (int i = start; i < end; i++) - { - TForm_item& fi = sec.field(i); - if (num < _righePS.items()) - { - const TRigaPS& rN = _righePS[num]; - if (i==start) - sVal=rN.sImposta(); - else if (i==start+1) - sVal=rN.sIntDip(); - else if (i==start+2) - sVal=rN.sIntDat(); - else if (i==start+3) - sVal=rN.sTipoVers(); - else if (i==start+4) - sVal=rN.sCodTrib(); - else if (i==start+5) - { - TDate dat(rN.sDataVers()); - TFormatted_date d(dat); - d.set_format(fi.picture()); - sVal=d.string(); - } - else if (i==start+6) - sVal=rN.sSerie(); - else if (i==start+7) - sVal=rN.sNumero(); - } - else - sVal=""; - fi.set(sVal); - fi.update(); -// TPrintrow& row=sec.row(0); -// row.put(sVal,fi.x()-1); - } -} - -void TBase4::stampa_P(TPrinter& pr) -{ - TPrint_section& body = section('H', even_page); - body.reset(); - TLocalisamfile qp(LF_QUAP); - _righePS.fill(_codditta,qp); - const int items=_righePS.items(); - _bAggP = items > _RIGHE_P; - - int riga=0; - bool FinitaSezione=FALSE; - while (!FinitaSezione) - { - fill_riga_PS(body,riga); - TPrintrow& rr=body.row(0); - pr.print(rr); - rr.reset(); - riga++; - _RigaCorr++; - if (usa_progind()) - progind()->addstatus(1); - FinitaSezione=riga>_RIGHE_P-1; - } -// Salta due righe alla fine - stampa_righe_vuote(pr,2); -} - -void TBase4::stampa_S(TPrinter& pr) -{ - TPrint_section& body = section('H', even_page); - body.reset(); - TLocalisamfile qp(LF_QUAS); - _righePS.fill(_codditta,qp); - _bAggS = _righePS.items() > _RIGHE_S; - - int riga=0; - bool FinitaSezione=FALSE; - while (!FinitaSezione) - { - fill_riga_PS(body,riga); - TPrintrow& rr=body.row(0); - pr.print(rr); - rr.reset(); - riga++; - _RigaCorr++; - if (usa_progind()) - progind()->addstatus(1); - FinitaSezione=riga>_RIGHE_S-1; - } -// Salta due righe alla fine - stampa_righe_vuote(pr,2); -} - -void TBase4::stampa_R(TPrinter& pr) -{ - TPrint_section& body = section('B', even_page); - body.reset(); - TLocalisamfile qr(LF_QUAR); - _righeNR.fill(_codditta,qr); - const int items=_righeNR.items(); -// se iRigheNR > 2 => bisogna stampare anche l'allegato - _bAggR = items > _RIGHE_R; - fill_riga_NR(body,0,0); - fill_riga_NR(body,1,1); - TPrintrow& rr=body.row(0); - pr.print(rr); - rr.reset(); - _RigaCorr++; - if (usa_progind()) - progind()->addstatus(1); -// Salta due righe alla fine - stampa_righe_vuote(pr,2); -} - -void TBase4::fill_riga_NR(TPrint_section& sec,const int num, const int side) -{ - TString sVal; - int start,end; - if (side==0) - { - start=0; - end=4; - } - else - { - start=4; - end=8; - } - for (int i = start; i < end; i++) - { - TForm_item& fi = sec.field(i); - if (num < _righeNR.items()) - { - const TRigaN& rN = _righeNR[num]; - if (i==start) - sVal=rN.sMeseRif(); - else if (i==start+1) - sVal=rN.sAnnoRif(); - else if (i==start+2) - sVal=rN.ImpRimb(fi.picture()); - else if (i==start+3) - sVal=rN.CompAss(fi.picture()); - } - else - sVal=""; - fi.set(sVal); - TPrintrow& row=sec.row(0); - row.put(sVal,fi.x()-1); - } -} - -void TBase4::stampa_righe_vuote(TPrinter& pr,const int righe) -{ - TPrintrow rr; - for (int i=0; iaddstatus(1); - } -} - -void TBase4::stampa_N(TPrinter& pr) -{ - TPrint_section& body = section('B', odd_page); - body.reset(); - TLocalisamfile qn(LF_QUAN); - _righeNR.fill(_codditta,qn); -// se iRigheN > 6 => bisogna stampare anche l'allegato - _bAggN = _righeNR.items() > _RIGHE_N; - - int num=0; - int riga=0; - bool FinitaSezione=FALSE; - while (!FinitaSezione) - { -// Stampa la parte sinistra (primi 4 campi) - fill_riga_NR(body,num,0); - num+=3; - fill_riga_NR(body,num,1); - TPrintrow& rr=body.row(0); - pr.print(rr); - rr.reset(); - riga++; - _RigaCorr++; - if (usa_progind()) - progind()->addstatus(1); - num-=2; - FinitaSezione=riga>2; - } -// Salta due righe alla fine - stampa_righe_vuote(pr,2); -} - -void TBase4::stampa_fine(TPrinter& pr) -{ - TPrint_section& sec = section('F', first_page); - - sec.reset(); - sec.update(); - const int hhr = sec.height(); - for (int i = 0; i < hhr; i++) - { - pr.print(sec.row(i)); - _RigaCorr++; - } - if (usa_progind()) - progind()->addstatus(1); -} - -bool TBase4::print(const long codditta, const long NumFis, const long NumNoFis) -{ - _bAggN=_bAggP=_bAggR=_bAggQ=_bAggS=_bAggT=FALSE; - TCursor* cur = cursor(); - TPrinter& pr = printer(); - _codditta=codditta; - filtra(codditta); - _RigaCorr=0; - (*cur)=0L; - jump_to_line(pr, prima_riga(PRIMA)); -// Stampa da M1 a M6 - stampa_testata(pr); - stampa_N(pr); - stampa_P(pr); - stampa_Q(pr); - stampa_R(pr); - stampa_S(pr); - stampa_T(pr); - stampa_fine(pr); - next_page(pr); - close_print(); - return TRUE; -} - -bool TStampaBase::user_create() -{ - _fBase1 = new TBase1("77base1", "Base"); - _fBase2 = new TBase2("77base2", "Base"); - _fBase3 = new TBase3("77base3", "Base"); - _fBase4 = new TBase4("77base4", "Base"); -// Adesso bisogna chiamare set_cursor per impostare il cursore dentro -// al form. Sarebbe meglio fare in modo che il form usi sempre il cursore -// letto dal .frm, senza bisogno di passarglielo dall'applicazione - _cur = _fBase1->TForm::cursor(); - _fBase1->set_cursor(_cur); - _cur2 = _fBase2->TForm::cursor(); - _fBase2->set_cursor(_cur2); - _cur3 = _fBase3->TForm::cursor(); - _fBase3->set_cursor(_cur3); - _cur4 = _fBase4->TForm::cursor(); - _fBase4->set_cursor(_cur4); - return TRUE; -} - -bool TStampaBase::user_destroy() -{ - delete _fBase1; - delete _fBase2; - delete _fBase3; - delete _fBase4; - return TRUE; -} - -bool TStampaBase::print_quadro(const int OffsetDitta, const bool modulaser) -{ - int start=0, last=0; - -// Setta formlen prima di printer.open per avere la lunghezza giusta nel caso di -// stampa a video - printer().formlen(BASE_FORMLEN); - bool ok = printer().open(); - - _fBase1->set_modulaser(modulaser); - _fBase2->set_modulaser(modulaser); - _fBase3->set_modulaser(modulaser); - _fBase4->set_modulaser(modulaser); - -// Dice se deve eseguire il posizionamento del foglio. -// Se stampa piu' ditte va eseguito solo sulla prima -// Occhio a non spostarlo nel ciclo. - _fBase1->set_posiziona(TRUE); - - if (OffsetDitta >= 0) - { - start = OffsetDitta; - last = OffsetDitta; - } - else - last = ditte().items() - 1; - - for (int i = start; i <= last; i++) - { - TString CoFiDic(20); - TToken_string riga(ditte()[i]); - const long codditta = atol(riga.get(0)); - const TipoDitta tipo = (TipoDitta)riga.get_int(1); - const long fis = riga.get_long(2); - const long nofis = riga.get_long(3); - const bool LastFis = (bool)riga.get_int(4); - const bool LastNoFis = (bool)riga.get_int(5); - -// I gruppi dich-estinti hanno totali comuni -// Si presume che nell'array vengano messi nell'ordine dich-estinti - if (tipo == normale || tipo == dichiarante) - _fBase1->azzera_totali(); - - if (tipo == estinto) - CoFiDic = riga.get(6); - -// Dice al form che tipo di ditta si stampa - _fBase1->set_tipo_ditta(tipo); - -// Numera i fogli a partire da 1 per ogni ditta normale e da 1 e di seguito negli estinti -// per i sogg. dichiaranti - if (tipo == normale || tipo == dichiarante) - _fBase1->set_num_foglio(1); - -// Se la ditta e' estinta dice al form il cod.fis. del dichiarante - if (tipo == estinto) - _fBase1->set_cofi_dic(CoFiDic); - -// Dice al form che e' l'ultima ditta - if (i == last) - _fBase1->set_last_ditta(TRUE); - - _fBase1->print(codditta, fis, nofis); - _fBase2->print(codditta, fis, nofis); - _fBase3->print(codditta, fis, nofis); - _fBase4->print(codditta, fis, nofis); - } - printer().close(); - return ok; -} - -void TQuadroL::stampa_testata(TPrinter& pr) -{ - TPrint_section& hh = section('H', first_page); - hh.reset(); - hh.update(); - const int hhr = hh.height(); - for (int i = 0; i < hhr; i++) - { - pr.print(hh.row(i)); - _RigaCorr++; - } - if (usa_progind()) - progind()->addstatus(1); -} - -bool TQuadroL::stampa_L(TPrinter& pr,const long lStartRec,const int iRecL) -{ - long codit=0L; - bool eof=FALSE; - TPrint_section& body = section('B', odd_page); - body.reset(); - TCursor& cur = *cursor(); - cur=lStartRec; - bool finito=FALSE; - int righe=0; - - while (!finito) - { - body.update(); - const int body_righe = body.height(); - for (int i = 0; i < body_righe; i++) - { - TPrintrow& rr=body.row(i); - pr.print(rr); - rr.reset(); - _RigaCorr++; - } - if (usa_progind()) - progind()->addstatus(1); - righe++; - ++cur; - eof=cur.pos()==cur.items()-1; - finito = (righe==iRecL-1) || eof; - } - return eof; -} - -void TQuadroL::stampa_totali_L(TPrinter& pr) -{ -// La sezione f last contiene solo due totali aggiornati con add nel form - TPrint_section& hh = section('F', last_page); -// hh.reset(); - hh.update(); - const int hhr = hh.height(); - for (int i = 0; i < hhr; i++) - { - pr.print(hh.row(i)); - _RigaCorr++; - } - if (usa_progind()) - progind()->addstatus(1); -} - -bool TQuadroL::print(const long codditta, const long NumFis, const long NumNoFis) -{ - TCursor* cur = cursor(); - TPrinter& pr = printer(); - if (!InitPrint(codditta)) - return FALSE; - -// Legge dai par.studio l'ordinamento da usare per L - TConfig conf(CONFIG_STUDIO); - const int iChiaveL = (int)conf.get_long("FlStQl", "77"); - if (iChiaveL==2) cur->setkey(1); - else cur->setkey(2); - - int lOffsetL=_START_AGG_L; - bool finito=FALSE; - while (!finito) - { - jump_to_line(pr, prima_riga(PRIMA)); - stampa_testata(pr); - finito=stampa_L(pr,lOffsetL,_REC_PRIMA_AGG_L); - next_page(pr); - if (!finito) - { - lOffsetL+=_REC_PRIMA_AGG_L; - finito=stampa_L(pr,lOffsetL,_REC_SECONDA_AGG_L); - } - if (finito) - { - jump_to_line(pr,_RIGA_TOTALI_AGG_L); - stampa_totali_L(pr); - } - next_page(pr); - } - close_print(); - return TRUE; -} - -bool TStampaQuadroAggL::user_create() -{ - _form = new TQuadroL("77QL", quadro()); - return TRUE; -} - -bool TStampaQuadroAggL::user_destroy() -{ - delete _form; - return TRUE; -} - +// Stampa base +#include "77stba.h" + + +TBase1::TBase1(const char* sNomeForm, const char* quadro) : TDicForm(sNomeForm, quadro) +{ + r = new TRelation(LF_SOCI); + r->add(LF_ANAG, "TIPOA=TIPOASOC|CODANAGR=CODANAGRSO"); + r->add(LF_ANAGFIS, "CODANAGR=CODANAGR",1, LF_ANAG); + r->add(LF_COMUNI, "COM=COMNASC",1,LF_ANAGFIS); + c = new TCursor(r); + _bAllegSoci=FALSE; +} + +TBase1::~TBase1() +{ + delete r; + delete c; +} + +void TBase1::stampa_corpo(TPrinter& pr) +{ +// Salta due righe nelle prime pagine successive alla prima + if (!PaginaPosizionamento()) fill_page(pr, HEADER_PRIMA_NOPOS); + TPrint_section& body = section('B', first_page); + body.reset(); + body.update(); + const int body_righe = body.height(); + for (int i = 0; i < body_righe; i++) + { + pr.print(body.row(i)); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); +} + +// accetta solo quelli ATTUALI E con qualifica=A,B o C +bool bFiltraSoci(const TRelation* rel) +{ + TString sQual(3), sAttPrec(3); + sQual = rel->lfile().get("RICQUAL"); + sAttPrec = rel->lfile().get("ATTPREC"); + return (sAttPrec == "A") && (sQual=="A" || sQual=="B" || sQual=="C"); +} + +long TBase1::iContaSoci() +{ + TString filtro(20); + filtro.format("CODDITTA=%d",_codditta); + c->setfilter(filtro); + c->set_filterfunction(bFiltraSoci); + (*c)=0L; + return c->items(); +} + +const int _INIZIO_SOCI=53; + +void TBase1::stampa_soci(TPrinter& pr) +{ + TPrint_section& fut = section('F', first_page); + fut.reset(); + jump_to_line(pr,_INIZIO_SOCI); + const long iSoci = iContaSoci(); + if (iSoci > 11) + { + _bAllegSoci=TRUE; + TPrintrow& rg=fut.row(0); + rg.put("VEDERE ALLEGATO", 25); + pr.print(rg); + _RigaCorr++; + if (usa_progind()) progind()->addstatus(1); + } + else + { + int i=0; + TString sRagsoc,sSesso,sComuneNa,sProvNa,sDataNa,sCodFis,sCodQua; + TString sNome,sCognome; + for ((*c)=0L; c->pos() < c->items(); ++(*c)) + { + TPrintrow& rg=fut.row(i++); + sCodQua=c->file().get("RICQUAL"); + sRagsoc=c->file(LF_ANAG).get("RAGSOC"); + sNome=sRagsoc.mid(30,20); + sCognome=sRagsoc.mid(0,29); + sNome.trim(); + sCognome.trim(); + sRagsoc=sCognome; sRagsoc << " "; sRagsoc << sNome; + sCodFis=c->file(LF_ANAG).get("COFI"); + sDataNa=c->file(LF_ANAGFIS).get("DATANASC"); + sSesso=c->file(LF_ANAGFIS).get("SESSO"); + sComuneNa=c->file(LF_COMUNI).get("DENCOM"); + sProvNa=c->file(LF_COMUNI).get("PROVCOM"); + fut.field(0).set(sRagsoc); + rg.put(sRagsoc,fut.field(0).x()-1); + fut.field(1).set(sSesso); + rg.put(sSesso,fut.field(1).x()-1); + fut.field(2).set(sComuneNa); + rg.put(sComuneNa,fut.field(2).x()-1); + fut.field(3).set(sProvNa); + rg.put(sProvNa,fut.field(3).x()-1); + fut.field(4).set(sDataNa); + rg.put(sDataNa,fut.field(4).x()-1); + fut.field(5).set(sCodFis); + rg.put(sCodFis,fut.field(5).x()-1); + fut.field(6).set(sCodQua); + rg.put(sCodQua,fut.field(6).x()-1); + pr.print(rg); + _RigaCorr++; + if (usa_progind()) progind()->addstatus(1); + } + } +} + +bool TBase1::print(const long codditta, const long NumFis, const long NumNoFis) +{ + TCursor* cur = cursor(); + TPrinter& pr = printer(); + _codditta=codditta; + + if (!InitPrint(codditta)) + return FALSE; + pr.formlen(BASE_FORMLEN); + + (*cur)=0L; + if (_modulaser) + { + ClearFlagModulaser(); + TPrintrow r; + if (!_GiaMessoStartDoc) + put_modulaser(r, STARTDOC); + put_modulaser(r, STARTDITTA); + put_modulaser(r, STARTPAGE, 1); + pr.print(r); + _RigaCorr++; + } + jump_to_line(pr, prima_riga(PRIMA)); + stampa_corpo(pr); + _PaginaPosizionamento=FALSE; + stampa_soci(pr); + next_page(pr); + close_print(); + return TRUE; +} + +void TBase2::stampa_corpo(TPrinter& pr) +{ + TPrint_section& body = section('B', even_page); + body.reset(); + body.update(); + const int body_righe = body.height(); + for (int i = 0; i < body_righe; i++) + { + pr.print(body.row(i)); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); +} + +bool TBase2::print(const long codditta, const long NumFis, const long NumNoFis) +{ + TCursor* cur = cursor(); + TPrinter& pr = printer(); + _codditta=codditta; + filtra(codditta); + _RigaCorr=0; + (*cur)=0L; + jump_to_line(pr, prima_riga(PRIMA)); + stampa_corpo(pr); + next_page(pr); + close_print(); + return TRUE; +} + +void TBase3::stampa_testata(TPrinter& pr) +{ + TPrint_section& hh = section('H', first_page); + hh.reset(); + hh.update(); + const int hhr = hh.height(); + for (int i = 0; i < hhr; i++) + { + pr.print(hh.row(i)); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); +} + +int TBase3::stampa_L(TPrinter& pr,const int iChiaveL) +{ + long codit=0L; + TPrint_section& body = section('B', odd_page); + body.reset(); + + TCursor& cur = *cursor(); +// Le chiavi nel file e nel .ini sono saggiamente scambiate + if (iChiaveL==2) cur.setkey(1); + else cur.setkey(2); + + filtra(_codditta); + cur=0L; + + bool finito=FALSE; + int righe=0; + while (!finito) + { + body.update(); + const int body_righe = body.height(); + for (int i = 0; i < body_righe; i++) + { + TPrintrow& rr=body.row(i); + pr.print(rr); + rr.reset(); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); + righe++; + ++cur; + codit=cur.file().get_long("CODDITTA"); + bool buono=codit==_codditta; +// Guarda se e' necessario stampare l'aggiuntivo + _bAggiuntivoL = buono && righe>14; + finito=righe>14 || codit!=_codditta; + } + return righe; +} + +void TBase3::stampa_totali_L(TPrinter& pr) +{ +// La sezione f last contiene solo due totali aggiornati con add nel form + TPrint_section& hh = section('F', last_page); +// hh.reset(); + hh.update(); + const int hhr = hh.height(); + for (int i = 0; i < hhr; i++) + { + pr.print(hh.row(i)); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); +} + +bool TBase3::print(const long codditta, const long NumFis, const long NumNoFis) +{ + _bAggiuntivoL=TRUE; + TCursor* cur = cursor(); + TPrinter& pr = printer(); + _codditta=codditta; + filtra(codditta); + _RigaCorr=0; + (*cur)=0L; + jump_to_line(pr, prima_riga(PRIMA)); +// Stampa i codici concessione e tesoreria + stampa_testata(pr); +// Legge dai par.studio l'ordinamento da usare per L + TConfig conf(CONFIG_STUDIO); + const int iChiaveL = (int)conf.get_long("FlStQl", "77"); + const int righe_stampate=stampa_L(pr,iChiaveL); +// Se la stampa prosegue i totali vanno sull'aggiuntivo NON qui + if (!_bAggiuntivoL) + { + jump_to_line(pr,_RIGA_TOTALI_L); + stampa_totali_L(pr); + } + next_page(pr); + close_print(); + return TRUE; +} + +const char* TRigaN::sMeseRif() const +{ + __dep16=""; + __dep16 << _MeseRif; + return __dep16; +} + +const char* TRigaN::sAnnoRif() const +{ + __dep16=""; + __dep16 << _AnnoRif; + return __dep16; +} + +// Ordina le righe N per periodo di riferimento +int TRigaN::compare(const TSortable& s) const +{ + const TRigaN& rec = (const TRigaN&)s; + const int da = _AnnoRif - rec._AnnoRif; + const int dm = _MeseRif - rec._MeseRif; + if (da==0) + return dm; + else + return da; +} + +TRigaN::TRigaN(const TLocalisamfile& qn) +{ + _pos = qn.recno(); + + const TRectype& rec = qn.curr(); + + _MeseRif = rec.get_int("MESERIF"); + _AnnoRif = rec.get_int("ANNORIF"); +// Nel quadro R si chiama diversamente @!#@!!! + if (qn.num() == LF_QUAN) + _ImpRimb = rec.get_real("IMPOSTA"); + else + _ImpRimb = rec.get_real("IMPRIMB"); + _CompAss = rec.get_real("COMPENSI"); +} + +int TRigheNR::fill(const long codditta,TLocalisamfile& qnr) +{ + long ditta=0L; +// Si posiziona sul primo della ditta corrente + qnr.zero(); + qnr.put("CODDITTA",codditta); + qnr.read()==NOERR; + ditta=qnr.get_long("CODDITTA"); + if (ditta!=codditta) return 0; + +// Legge tutti quelli della ditta corrente + for (; !qnr.eof(); qnr.next()) + { + ditta=qnr.get_long("CODDITTA"); + if (ditta!=codditta) break; + + TRigaN* n = new TRigaN(qnr); + if (n->pos() >= 0) + _data.add(n); + else + delete n; + } + _data.sort(); + const int i = _data.items(); + return i; +} + +const char* TRigaQT::sMesePag() const +{ + __dep16=""; + __dep16 << _MesePag; + return __dep16; +} + +const char* TRigaQT::sAnnoPag() const +{ + __dep16=""; + __dep16 << _AnnoPag; + return __dep16; +} + +// Ordina le righe N per periodo di riferimento +int TRigaQT::compare(const TSortable& s) const +{ + const TRigaQT& rec = (const TRigaQT&)s; + const int da = _AnnoPag - rec._AnnoPag; + const int dm = _MesePag - rec._MesePag; + if (da==0) + return dm; + else + return da; +} + +TRigaQT::TRigaQT(const TLocalisamfile& qt) +{ + const TRectype& rec = qt.curr(); + + _MesePag = rec.get_int("MESEPAG"); + _AnnoPag = rec.get_int("ANNOPAG"); + _ContVers = rec.get_real("CONTVERS"); + _ContRimb = rec.get_real("CONTRIMB"); + _Interessi=rec.get_real("INTERESSI"); + _sCodReg=rec.get("CODREG"); +} + +int TRigheQT::fill(const long codditta,TLocalisamfile& qt) +{ + long ditta=0L; +// Si posiziona sul primo della ditta corrente + qt.zero(); + qt.put("CODDITTA",codditta); + qt.read()==NOERR; + ditta=qt.get_long("CODDITTA"); + if (ditta!=codditta) return 0; + +// Legge tutti quelli della ditta corrente + for (; !qt.eof(); qt.next()) + { + ditta=qt.get_long("CODDITTA"); + if (ditta!=codditta) break; + + TRigaQT* n = new TRigaQT(qt); + if (n->pos() >= 0) + _data.add(n); + else + delete n; + } + _data.sort(); + const int i = _data.items(); + return i; +} + +// Ordina le righe N per periodo di riferimento +int TRigaPS::compare(const TSortable& s) const +{ + const TRigaPS& rec = (const TRigaPS&)s; + return _dDvpos() >= 0) + _data.add(n); + else + delete n; + } + _data.sort(); + const int i = _data.items(); + return i; +} + +void TBase4::stampa_testata(TPrinter& pr) +{ + TPrint_section& hh = section('H', first_page); + hh.reset(); + hh.update(); + const int hhr = hh.height(); + for (int i = 0; i < hhr; i++) + { + pr.print(hh.row(i)); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); +} + +void TBase4::fill_riga_QT(TPrint_section& sec,const int num) +{ + TString sVal; + int start=0,end=5; + for (int i = start; i < end; i++) + { + TForm_item& fi = sec.field(i); + if (num < _righeQT.items()) + { + const TRigaQT& rN = _righeQT[num]; + if (i==start) + sVal=rN.sMesePag(); + else if (i==start+1) + sVal=rN.sAnnoPag(); + else if (i==start+2) + sVal=rN.ContVers(fi.picture()); + else if (i==start+3) + sVal=rN.ContRimb(fi.picture()); + else if (i==start+4) + sVal=rN.Interessi(fi.picture()); + else if (i==start+5) + sVal=rN.CodReg(); + } + else + sVal=""; + fi.set(sVal); + TPrintrow& row=sec.row(0); + row.put(sVal,fi.x()-1); + } +} + +void TBase4::stampa_Q(TPrinter& pr) +{ + TPrint_section& body = section('F', even_page); + body.reset(); + TLocalisamfile qp(LF_QUAQ); + _righeQT.fill(_codditta,qp); + _bAggQ = _righeQT.items() > _RIGHE_Q; + + int riga=0; + bool FinitaSezione=FALSE; + while (!FinitaSezione) + { +// Stampa la parte sinistra (primi 4 campi) + fill_riga_QT(body,riga); + TPrintrow& rr=body.row(0); + pr.print(rr); + rr.reset(); + riga++; + _RigaCorr++; + if (usa_progind()) + progind()->addstatus(1); + FinitaSezione=riga>_RIGHE_Q-1; + } +// Salta due righe alla fine + stampa_righe_vuote(pr,2); +} + +void TBase4::stampa_T(TPrinter& pr) +{ + TPrint_section& body = section('F', odd_page); + body.reset(); + TLocalisamfile qp(LF_QUAT); + _righeQT.fill(_codditta,qp); + _bAggT = _righeQT.items() > _RIGHE_T; + + int riga=0; + bool FinitaSezione=FALSE; + while (!FinitaSezione) + { +// Stampa la parte sinistra (primi 4 campi) + fill_riga_QT(body,riga); + TPrintrow& rr=body.row(0); + pr.print(rr); + rr.reset(); + riga++; + _RigaCorr++; + if (usa_progind()) + progind()->addstatus(1); + FinitaSezione=riga>_RIGHE_T-1; + } +} + +void TBase4::fill_riga_PS(TPrint_section& sec,const int num) +{ + TString sVal; + int start=0,end=7; + for (int i = start; i < end; i++) + { + TForm_item& fi = sec.field(i); + if (num < _righePS.items()) + { + const TRigaPS& rN = _righePS[num]; + if (i==start) + sVal=rN.sImposta(); + else if (i==start+1) + sVal=rN.sIntDip(); + else if (i==start+2) + sVal=rN.sIntDat(); + else if (i==start+3) + sVal=rN.sTipoVers(); + else if (i==start+4) + sVal=rN.sCodTrib(); + else if (i==start+5) + { + TDate dat(rN.sDataVers()); + TFormatted_date d(dat); + d.set_format(fi.picture()); + sVal=d.string(); + } + else if (i==start+6) + sVal=rN.sSerie(); + else if (i==start+7) + sVal=rN.sNumero(); + } + else + sVal=""; + fi.set(sVal); + fi.update(); +// TPrintrow& row=sec.row(0); +// row.put(sVal,fi.x()-1); + } +} + +void TBase4::stampa_P(TPrinter& pr) +{ + TPrint_section& body = section('H', even_page); + body.reset(); + TLocalisamfile qp(LF_QUAP); + _righePS.fill(_codditta,qp); + const int items=_righePS.items(); + _bAggP = items > _RIGHE_P; + + int riga=0; + bool FinitaSezione=FALSE; + while (!FinitaSezione) + { + fill_riga_PS(body,riga); + TPrintrow& rr=body.row(0); + pr.print(rr); + rr.reset(); + riga++; + _RigaCorr++; + if (usa_progind()) + progind()->addstatus(1); + FinitaSezione=riga>_RIGHE_P-1; + } +// Salta due righe alla fine + stampa_righe_vuote(pr,2); +} + +void TBase4::stampa_S(TPrinter& pr) +{ + TPrint_section& body = section('H', even_page); + body.reset(); + TLocalisamfile qp(LF_QUAS); + _righePS.fill(_codditta,qp); + _bAggS = _righePS.items() > _RIGHE_S; + + int riga=0; + bool FinitaSezione=FALSE; + while (!FinitaSezione) + { + fill_riga_PS(body,riga); + TPrintrow& rr=body.row(0); + pr.print(rr); + rr.reset(); + riga++; + _RigaCorr++; + if (usa_progind()) + progind()->addstatus(1); + FinitaSezione=riga>_RIGHE_S-1; + } +// Salta due righe alla fine + stampa_righe_vuote(pr,2); +} + +void TBase4::stampa_R(TPrinter& pr) +{ + TPrint_section& body = section('B', even_page); + body.reset(); + TLocalisamfile qr(LF_QUAR); + _righeNR.fill(_codditta,qr); + const int items=_righeNR.items(); +// se iRigheNR > 2 => bisogna stampare anche l'allegato + _bAggR = items > _RIGHE_R; + fill_riga_NR(body,0,0); + fill_riga_NR(body,1,1); + TPrintrow& rr=body.row(0); + pr.print(rr); + rr.reset(); + _RigaCorr++; + if (usa_progind()) + progind()->addstatus(1); +// Salta due righe alla fine + stampa_righe_vuote(pr,2); +} + +void TBase4::fill_riga_NR(TPrint_section& sec,const int num, const int side) +{ + TString sVal; + int start,end; + if (side==0) + { + start=0; + end=4; + } + else + { + start=4; + end=8; + } + for (int i = start; i < end; i++) + { + TForm_item& fi = sec.field(i); + if (num < _righeNR.items()) + { + const TRigaN& rN = _righeNR[num]; + if (i==start) + sVal=rN.sMeseRif(); + else if (i==start+1) + sVal=rN.sAnnoRif(); + else if (i==start+2) + sVal=rN.ImpRimb(fi.picture()); + else if (i==start+3) + sVal=rN.CompAss(fi.picture()); + } + else + sVal=""; + fi.set(sVal); + TPrintrow& row=sec.row(0); + row.put(sVal,fi.x()-1); + } +} + +void TBase4::stampa_righe_vuote(TPrinter& pr,const int righe) +{ + TPrintrow rr; + for (int i=0; iaddstatus(1); + } +} + +void TBase4::stampa_N(TPrinter& pr) +{ + TPrint_section& body = section('B', odd_page); + body.reset(); + TLocalisamfile qn(LF_QUAN); + _righeNR.fill(_codditta,qn); +// se iRigheN > 6 => bisogna stampare anche l'allegato + _bAggN = _righeNR.items() > _RIGHE_N; + + int num=0; + int riga=0; + bool FinitaSezione=FALSE; + while (!FinitaSezione) + { +// Stampa la parte sinistra (primi 4 campi) + fill_riga_NR(body,num,0); + num+=3; + fill_riga_NR(body,num,1); + TPrintrow& rr=body.row(0); + pr.print(rr); + rr.reset(); + riga++; + _RigaCorr++; + if (usa_progind()) + progind()->addstatus(1); + num-=2; + FinitaSezione=riga>2; + } +// Salta due righe alla fine + stampa_righe_vuote(pr,2); +} + +void TBase4::stampa_fine(TPrinter& pr) +{ + TPrint_section& sec = section('F', first_page); + + sec.reset(); + sec.update(); + const int hhr = sec.height(); + for (int i = 0; i < hhr; i++) + { + pr.print(sec.row(i)); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); +} + +bool TBase4::print(const long codditta, const long NumFis, const long NumNoFis) +{ + _bAggN=_bAggP=_bAggR=_bAggQ=_bAggS=_bAggT=FALSE; + TCursor* cur = cursor(); + TPrinter& pr = printer(); + _codditta=codditta; + filtra(codditta); + _RigaCorr=0; + (*cur)=0L; + jump_to_line(pr, prima_riga(PRIMA)); +// Stampa da M1 a M6 + stampa_testata(pr); + stampa_N(pr); + stampa_P(pr); + stampa_Q(pr); + stampa_R(pr); + stampa_S(pr); + stampa_T(pr); + stampa_fine(pr); + next_page(pr); + close_print(); + return TRUE; +} + +bool TStampaBase::user_create() +{ + _fBase1 = new TBase1("77base1", "Base"); + _fBase2 = new TBase2("77base2", "Base"); + _fBase3 = new TBase3("77base3", "Base"); + _fBase4 = new TBase4("77base4", "Base"); +// Adesso bisogna chiamare set_cursor per impostare il cursore dentro +// al form. Sarebbe meglio fare in modo che il form usi sempre il cursore +// letto dal .frm, senza bisogno di passarglielo dall'applicazione + _cur = _fBase1->TForm::cursor(); + _fBase1->set_cursor(_cur); + _cur2 = _fBase2->TForm::cursor(); + _fBase2->set_cursor(_cur2); + _cur3 = _fBase3->TForm::cursor(); + _fBase3->set_cursor(_cur3); + _cur4 = _fBase4->TForm::cursor(); + _fBase4->set_cursor(_cur4); + return TRUE; +} + +bool TStampaBase::user_destroy() +{ + delete _fBase1; + delete _fBase2; + delete _fBase3; + delete _fBase4; + return TRUE; +} + +bool TStampaBase::print_quadro(const int OffsetDitta, const bool modulaser) +{ + int start=0, last=0; + +// Setta formlen prima di printer.open per avere la lunghezza giusta nel caso di +// stampa a video + printer().formlen(BASE_FORMLEN); + bool ok = printer().open(); + + _fBase1->set_modulaser(modulaser); + _fBase2->set_modulaser(modulaser); + _fBase3->set_modulaser(modulaser); + _fBase4->set_modulaser(modulaser); + +// Dice se deve eseguire il posizionamento del foglio. +// Se stampa piu' ditte va eseguito solo sulla prima +// Occhio a non spostarlo nel ciclo. + _fBase1->set_posiziona(TRUE); + + if (OffsetDitta >= 0) + { + start = OffsetDitta; + last = OffsetDitta; + } + else + last = ditte().items() - 1; + + for (int i = start; i <= last; i++) + { + TString CoFiDic(20); + TToken_string riga(ditte()[i]); + const long codditta = atol(riga.get(0)); + const TipoDitta tipo = (TipoDitta)riga.get_int(1); + const long fis = riga.get_long(2); + const long nofis = riga.get_long(3); + const bool LastFis = (bool)riga.get_int(4); + const bool LastNoFis = (bool)riga.get_int(5); + +// I gruppi dich-estinti hanno totali comuni +// Si presume che nell'array vengano messi nell'ordine dich-estinti + if (tipo == normale || tipo == dichiarante) + _fBase1->azzera_totali(); + + if (tipo == estinto) + CoFiDic = riga.get(6); + +// Dice al form che tipo di ditta si stampa + _fBase1->set_tipo_ditta(tipo); + +// Numera i fogli a partire da 1 per ogni ditta normale e da 1 e di seguito negli estinti +// per i sogg. dichiaranti + if (tipo == normale || tipo == dichiarante) + _fBase1->set_num_foglio(1); + +// Se la ditta e' estinta dice al form il cod.fis. del dichiarante + if (tipo == estinto) + _fBase1->set_cofi_dic(CoFiDic); + +// Dice al form che e' l'ultima ditta + if (i == last) + _fBase1->set_last_ditta(TRUE); + + _fBase1->print(codditta, fis, nofis); + _fBase2->print(codditta, fis, nofis); + _fBase3->print(codditta, fis, nofis); + _fBase4->print(codditta, fis, nofis); + } + printer().close(); + return ok; +} + +void TQuadroL::stampa_testata(TPrinter& pr) +{ + TPrint_section& hh = section('H', first_page); + hh.reset(); + hh.update(); + const int hhr = hh.height(); + for (int i = 0; i < hhr; i++) + { + pr.print(hh.row(i)); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); +} + +bool TQuadroL::stampa_L(TPrinter& pr,const long lStartRec,const int iRecL) +{ + long codit=0L; + bool eof=FALSE; + TPrint_section& body = section('B', odd_page); + body.reset(); + TCursor& cur = *cursor(); + cur=lStartRec; + bool finito=FALSE; + int righe=0; + + while (!finito) + { + body.update(); + const int body_righe = body.height(); + for (int i = 0; i < body_righe; i++) + { + TPrintrow& rr=body.row(i); + pr.print(rr); + rr.reset(); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); + righe++; + ++cur; + eof=cur.pos()==cur.items()-1; + finito = (righe==iRecL-1) || eof; + } + return eof; +} + +void TQuadroL::stampa_totali_L(TPrinter& pr) +{ +// La sezione f last contiene solo due totali aggiornati con add nel form + TPrint_section& hh = section('F', last_page); +// hh.reset(); + hh.update(); + const int hhr = hh.height(); + for (int i = 0; i < hhr; i++) + { + pr.print(hh.row(i)); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); +} + +bool TQuadroL::print(const long codditta, const long NumFis, const long NumNoFis) +{ + TCursor* cur = cursor(); + TPrinter& pr = printer(); + if (!InitPrint(codditta)) + return FALSE; + +// Legge dai par.studio l'ordinamento da usare per L + TConfig conf(CONFIG_STUDIO); + const int iChiaveL = (int)conf.get_long("FlStQl", "77"); + if (iChiaveL==2) cur->setkey(1); + else cur->setkey(2); + + int lOffsetL=_START_AGG_L; + bool finito=FALSE; + while (!finito) + { + jump_to_line(pr, prima_riga(PRIMA)); + stampa_testata(pr); + finito=stampa_L(pr,lOffsetL,_REC_PRIMA_AGG_L); + next_page(pr); + if (!finito) + { + lOffsetL+=_REC_PRIMA_AGG_L; + finito=stampa_L(pr,lOffsetL,_REC_SECONDA_AGG_L); + } + if (finito) + { + jump_to_line(pr,_RIGA_TOTALI_AGG_L); + stampa_totali_L(pr); + } + next_page(pr); + } + close_print(); + return TRUE; +} + +bool TStampaQuadroAggL::user_create() +{ + _form = new TQuadroL("77QL", quadro()); + return TRUE; +} + +bool TStampaQuadroAggL::user_destroy() +{ + delete _form; + return TRUE; +} + diff --git a/m770/77stba.h b/m770/77stba.h index d0f021b2f..11e485d07 100755 --- a/m770/77stba.h +++ b/m770/77stba.h @@ -1,289 +1,289 @@ -#ifndef _77STBA_H -#define _77STBA_H - -#include "77stq.h" - -HIDDEN const int BASE_FORMLEN = 73; -HIDDEN const int BASE_PAGINE = 4; -const int _RIGHE_N = 6; -const int _RIGHE_R = 2; -const int _RIGHE_P = 4; -const int _RIGHE_Q = 4; -const int _RIGHE_S = 4; -const int _RIGHE_T = 4; - -class TBase1 : public TDicForm -{ - private: - long _codditta; - TRelation* r; // usate per contare i soci - TCursor* c; - bool _bAllegSoci; - long iContaSoci(); - protected: - void stampa_corpo(TPrinter& pr); - void stampa_soci(TPrinter& pr); - bool bAllegSoci() const { return _bAllegSoci; } - virtual int dic_form_len() const { return BASE_FORMLEN-2; } - virtual void next_page(TPrinter& pr) { fill_page(pr, -1); } - virtual void stampa_totali(TPrinter& pr) {} - virtual void aggiorna_totali(const char tipo) {} - virtual void set_body(TPrinter& pr, const char tipo) {} - virtual int prima_riga(PaginaQuadro p) const { return 11; } - public: - virtual bool print(const long codditta, const long NumFis, const long NumNoFis); - TBase1(const char* sNomeForm, const char* quadro); - virtual ~TBase1(); -}; - -class TBase2 : public TDicForm -{ - private: - long _codditta; - protected: - void stampa_corpo(TPrinter& pr); - virtual int dic_form_len() const { return BASE_FORMLEN; } - virtual void next_page(TPrinter& pr) { fill_page(pr, -1); } - virtual void set_body(TPrinter& pr, const char tipo) {} - virtual int prima_riga(PaginaQuadro p) const { return 3;} - public: - virtual bool print(const long codditta, const long NumFis, const long NumNoFis); - TBase2(const char* sNomeForm, const char* quadro) : TDicForm(sNomeForm, quadro) {} - virtual ~TBase2() {} -}; - -class TBase3 : public TDicForm -{ - private: - long _codditta; - bool _bAggiuntivoL; // se necessario stampare aggiuntivo L - protected: - void stampa_testata(TPrinter& pr); - void stampa_totali_L(TPrinter& pr); - bool aggiuntivoL() const { return _bAggiuntivoL; } - int stampa_L(TPrinter& pr,const int iChiaveL); - virtual int dic_form_len() const { return BASE_FORMLEN; } - virtual void next_page(TPrinter& pr) { fill_page(pr, -1); } - virtual void set_body(TPrinter& pr, const char tipo) {} - virtual int prima_riga(PaginaQuadro p) const { return 3;} - public: - virtual bool print(const long codditta, const long NumFis, const long NumNoFis); - TBase3(const char* sNomeForm, const char* quadro) : TDicForm(sNomeForm, quadro) {} - virtual ~TBase3() {} -}; - -const int _RIGA_TOTALI_L = 65; - -class TRigaN : public TSortable -{ - TRecnotype _pos; - int _MeseRif,_AnnoRif; // periodo di riferimento - real _ImpRimb,_CompAss; // importi - -public: - virtual int compare(const TSortable& s) const; - TRecnotype pos() const { return _pos; } - - const char* sMeseRif() const; - const char* sAnnoRif() const; - const int iMeseRif() const { return _MeseRif; } - const int iAnnoRif() const { return _AnnoRif; } - const char* ImpRimb(const char* pic) const { return _ImpRimb.string(pic); } - const char* CompAss(const char* pic) const { return _CompAss.string(pic); } - TRigaN(const TLocalisamfile& qn); - virtual ~TRigaN() { } -}; - -class TRigheNR : public TObject -{ - TArray _data; - - protected: - const TRigaN& rigaN(int i) const { return (const TRigaN&)_data[i]; } - - public: - const TRigaN& operator[](int i) const { return rigaN(i); } - - int fill(const long codditta,TLocalisamfile& qnr); - int items() const { return _data.items(); } - - TRigheNR() { } - virtual ~TRigheNR() { } -}; - -class TRigaQT : public TSortable -{ - int _MesePag,_AnnoPag; // periodo di riferimento - real _ContVers,_ContRimb,_Interessi; // importi - TString _sCodReg; - TRecnotype _pos; -public: - virtual int compare(const TSortable& s) const; - TRecnotype pos() const { return _pos; } - const char* sMesePag() const; - const char* sAnnoPag() const; - const int iMesePag() const { return _MesePag; } - const int iAnnoPag() const { return _AnnoPag; } - const char* ContVers(const char* pic) const { return _ContVers.string(pic); } - const char* ContRimb(const char* pic) const { return _ContRimb.string(pic); } - const char* Interessi(const char* pic) const { return _Interessi.string(pic); } - const char* CodReg() const { return (const char*)_sCodReg; } - TRigaQT(const TLocalisamfile& qt); - virtual ~TRigaQT() { } -}; - -class TRigheQT : public TObject -{ - TArray _data; - - protected: - const TRigaQT& rigaQT(int i) const { return (const TRigaQT&)_data[i]; } - - public: - const TRigaQT& operator[](int i) const { return rigaQT(i); } - - int fill(const long codditta,TLocalisamfile& qt); - int items() const { return _data.items(); } - - TRigheQT() {} - virtual ~TRigheQT() {} -}; - -class TRigaPS : public TSortable -{ - TDate _dDv; // data vers. - real _rImp,_rIntDip,_rIntDat; // importi - TString _sTipoV,_sCodTrib,_sSerie,_sNumero; - TRecnotype _pos; - public: - virtual int compare(const TSortable& s) const; - TRecnotype pos() const { return _pos; } - TDate dDataVers() const { return _dDv; } - const char* sDataVers() const { return _dDv.string(); } - const char* sImposta() const; - const char* sIntDip() const; - const char* sIntDat() const; - const char* sImposta(const char* pic) const { return _rImp.string(pic); } - const char* sIntDip(const char* pic) const { return _rIntDip.string(pic); } - const char* sIntDat(const char* pic) const { return _rIntDat.string(pic); } - const char* sTipoVers() const { return (const char*)_sTipoV; } - const char* sCodTrib() const { return (const char*)_sCodTrib; } - const char* sSerie() const { return (const char*)_sSerie; } - const char* sNumero() const { return (const char*)_sNumero; } - TRigaPS(const TLocalisamfile& qt); - virtual ~TRigaPS() { } -}; - -class TRighePS : public TObject -{ - TArray _data; - - protected: - const TRigaPS& rigaPS(int i) const { return (const TRigaPS&)_data[i]; } - - public: - const TRigaPS& operator[](int i) const { return rigaPS(i); } - int fill(const long codditta,TLocalisamfile& ps); - int items() const { return _data.items(); } - TRighePS() {} - virtual ~TRighePS() {} -}; - -class TBase4 : public TDicForm -{ - private: - long _codditta; - TRigheNR _righeNR; // array dei record N e R - TRigheQT _righeQT; - TRighePS _righePS; - bool _bAggN,_bAggP,_bAggR,_bAggQ,_bAggS,_bAggT; - protected: - void stampa_righe_vuote(TPrinter& pr,const int righe); - void fill_riga_QT(TPrint_section& sec,const int num); - void fill_riga_PS(TPrint_section& sec,const int num); - void fill_riga_NR(TPrint_section& sec,const int num, const int side); - void stampa_testata(TPrinter& pr); - void stampa_fine(TPrinter& pr); - void stampa_N(TPrinter& pr); - void stampa_P(TPrinter& pr); - void stampa_Q(TPrinter& pr); - void stampa_R(TPrinter& pr); - void stampa_S(TPrinter& pr); - void stampa_T(TPrinter& pr); - virtual int dic_form_len() const { return BASE_FORMLEN; } - virtual void next_page(TPrinter& pr) { fill_page(pr, -1); } - virtual void set_body(TPrinter& pr, const char tipo) {} - virtual int prima_riga(PaginaQuadro p) const { return 3;} - public: - virtual bool print(const long codditta, const long NumFis, const long NumNoFis); - TBase4(const char* sNomeForm, const char* quadro) : TDicForm(sNomeForm, quadro) {} - virtual ~TBase4() {} -}; - -const int _FIELD_L = 740; - -class TStampaBase : public TStampaQuadro -{ - private: - TBase1* _fBase1; - TBase2* _fBase2; - TBase3* _fBase3; - TBase4* _fBase4; - TRelation* _rel; - TCursor* _cur, *_cur2, *_cur3, *_cur4; - - protected: - virtual bool user_create(); - virtual bool user_destroy(); - virtual bool conta_tipi_per() const { return FALSE; } - virtual TDicForm* get_form() const { return _fBase1; } - virtual TCursor* get_cursor() const { return _cur; } - virtual bool print_quadro(const int OffsetDitta, const bool modulaser); - - public: - TStampaBase(char livel) : TStampaQuadro("Base", livel) { } -}; - -/////////////////////////////////////////////////////////////////////////////////////////// -// -// Quadro L aggiuntivo -// -/////////////////////////////////////////////////////////////////////////////////////////// -class TQuadroL : public TDicForm -{ - private: - long _codditta; - protected: - void stampa_testata(TPrinter& pr); - void stampa_totali_L(TPrinter& pr); - bool stampa_L(TPrinter& pr,const long lStartRec,const int iRecL); - virtual int dic_form_len() const { return BASE_FORMLEN; } - virtual void next_page(TPrinter& pr) { fill_page(pr, -1); } - virtual void set_body(TPrinter& pr, const char tipo) {} - virtual int prima_riga(PaginaQuadro p) const { return 3;} - public: - virtual bool print(const long codditta, const long NumFis, const long NumNoFis); - TQuadroL(const char* sNomeForm, const char* quadro) : TDicForm(sNomeForm, quadro) {} - virtual ~TQuadroL() {} -}; - -const int _RIGA_TOTALI_AGG_L = 65; -const long _START_AGG_L = 17L; -const int _REC_PRIMA_AGG_L = 12; -const int _REC_SECONDA_AGG_L = 14; - -class TStampaQuadroAggL : public TStampaQuadro -{ - TQuadroL* _form; - protected: - virtual bool user_create(); - virtual bool user_destroy(); - virtual TDicForm* get_form() const { return _form; } - - public: - TStampaQuadroAggL(const char* quadro, char liv):TStampaQuadro(quadro, liv) {} - virtual ~TStampaQuadroAggL() { } -}; - - -#endif +#ifndef _77STBA_H +#define _77STBA_H + +#include "77stq.h" + +HIDDEN const int BASE_FORMLEN = 73; +HIDDEN const int BASE_PAGINE = 4; +const int _RIGHE_N = 6; +const int _RIGHE_R = 2; +const int _RIGHE_P = 4; +const int _RIGHE_Q = 4; +const int _RIGHE_S = 4; +const int _RIGHE_T = 4; + +class TBase1 : public TDicForm +{ + private: + long _codditta; + TRelation* r; // usate per contare i soci + TCursor* c; + bool _bAllegSoci; + long iContaSoci(); + protected: + void stampa_corpo(TPrinter& pr); + void stampa_soci(TPrinter& pr); + bool bAllegSoci() const { return _bAllegSoci; } + virtual int dic_form_len() const { return BASE_FORMLEN-2; } + virtual void next_page(TPrinter& pr) { fill_page(pr, -1); } + virtual void stampa_totali(TPrinter& pr) {} + virtual void aggiorna_totali(const char tipo) {} + virtual void set_body(TPrinter& pr, const char tipo) {} + virtual int prima_riga(PaginaQuadro p) const { return 11; } + public: + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + TBase1(const char* sNomeForm, const char* quadro); + virtual ~TBase1(); +}; + +class TBase2 : public TDicForm +{ + private: + long _codditta; + protected: + void stampa_corpo(TPrinter& pr); + virtual int dic_form_len() const { return BASE_FORMLEN; } + virtual void next_page(TPrinter& pr) { fill_page(pr, -1); } + virtual void set_body(TPrinter& pr, const char tipo) {} + virtual int prima_riga(PaginaQuadro p) const { return 3;} + public: + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + TBase2(const char* sNomeForm, const char* quadro) : TDicForm(sNomeForm, quadro) {} + virtual ~TBase2() {} +}; + +class TBase3 : public TDicForm +{ + private: + long _codditta; + bool _bAggiuntivoL; // se necessario stampare aggiuntivo L + protected: + void stampa_testata(TPrinter& pr); + void stampa_totali_L(TPrinter& pr); + bool aggiuntivoL() const { return _bAggiuntivoL; } + int stampa_L(TPrinter& pr,const int iChiaveL); + virtual int dic_form_len() const { return BASE_FORMLEN; } + virtual void next_page(TPrinter& pr) { fill_page(pr, -1); } + virtual void set_body(TPrinter& pr, const char tipo) {} + virtual int prima_riga(PaginaQuadro p) const { return 3;} + public: + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + TBase3(const char* sNomeForm, const char* quadro) : TDicForm(sNomeForm, quadro) {} + virtual ~TBase3() {} +}; + +const int _RIGA_TOTALI_L = 65; + +class TRigaN : public TSortable +{ + TRecnotype _pos; + int _MeseRif,_AnnoRif; // periodo di riferimento + real _ImpRimb,_CompAss; // importi + +public: + virtual int compare(const TSortable& s) const; + TRecnotype pos() const { return _pos; } + + const char* sMeseRif() const; + const char* sAnnoRif() const; + const int iMeseRif() const { return _MeseRif; } + const int iAnnoRif() const { return _AnnoRif; } + const char* ImpRimb(const char* pic) const { return _ImpRimb.string(pic); } + const char* CompAss(const char* pic) const { return _CompAss.string(pic); } + TRigaN(const TLocalisamfile& qn); + virtual ~TRigaN() { } +}; + +class TRigheNR : public TObject +{ + TArray _data; + + protected: + const TRigaN& rigaN(int i) const { return (const TRigaN&)_data[i]; } + + public: + const TRigaN& operator[](int i) const { return rigaN(i); } + + int fill(const long codditta,TLocalisamfile& qnr); + int items() const { return _data.items(); } + + TRigheNR() { } + virtual ~TRigheNR() { } +}; + +class TRigaQT : public TSortable +{ + int _MesePag,_AnnoPag; // periodo di riferimento + real _ContVers,_ContRimb,_Interessi; // importi + TString _sCodReg; + TRecnotype _pos; +public: + virtual int compare(const TSortable& s) const; + TRecnotype pos() const { return _pos; } + const char* sMesePag() const; + const char* sAnnoPag() const; + const int iMesePag() const { return _MesePag; } + const int iAnnoPag() const { return _AnnoPag; } + const char* ContVers(const char* pic) const { return _ContVers.string(pic); } + const char* ContRimb(const char* pic) const { return _ContRimb.string(pic); } + const char* Interessi(const char* pic) const { return _Interessi.string(pic); } + const char* CodReg() const { return (const char*)_sCodReg; } + TRigaQT(const TLocalisamfile& qt); + virtual ~TRigaQT() { } +}; + +class TRigheQT : public TObject +{ + TArray _data; + + protected: + const TRigaQT& rigaQT(int i) const { return (const TRigaQT&)_data[i]; } + + public: + const TRigaQT& operator[](int i) const { return rigaQT(i); } + + int fill(const long codditta,TLocalisamfile& qt); + int items() const { return _data.items(); } + + TRigheQT() {} + virtual ~TRigheQT() {} +}; + +class TRigaPS : public TSortable +{ + TDate _dDv; // data vers. + real _rImp,_rIntDip,_rIntDat; // importi + TString _sTipoV,_sCodTrib,_sSerie,_sNumero; + TRecnotype _pos; + public: + virtual int compare(const TSortable& s) const; + TRecnotype pos() const { return _pos; } + TDate dDataVers() const { return _dDv; } + const char* sDataVers() const { return _dDv.string(); } + const char* sImposta() const; + const char* sIntDip() const; + const char* sIntDat() const; + const char* sImposta(const char* pic) const { return _rImp.string(pic); } + const char* sIntDip(const char* pic) const { return _rIntDip.string(pic); } + const char* sIntDat(const char* pic) const { return _rIntDat.string(pic); } + const char* sTipoVers() const { return (const char*)_sTipoV; } + const char* sCodTrib() const { return (const char*)_sCodTrib; } + const char* sSerie() const { return (const char*)_sSerie; } + const char* sNumero() const { return (const char*)_sNumero; } + TRigaPS(const TLocalisamfile& qt); + virtual ~TRigaPS() { } +}; + +class TRighePS : public TObject +{ + TArray _data; + + protected: + const TRigaPS& rigaPS(int i) const { return (const TRigaPS&)_data[i]; } + + public: + const TRigaPS& operator[](int i) const { return rigaPS(i); } + int fill(const long codditta,TLocalisamfile& ps); + int items() const { return _data.items(); } + TRighePS() {} + virtual ~TRighePS() {} +}; + +class TBase4 : public TDicForm +{ + private: + long _codditta; + TRigheNR _righeNR; // array dei record N e R + TRigheQT _righeQT; + TRighePS _righePS; + bool _bAggN,_bAggP,_bAggR,_bAggQ,_bAggS,_bAggT; + protected: + void stampa_righe_vuote(TPrinter& pr,const int righe); + void fill_riga_QT(TPrint_section& sec,const int num); + void fill_riga_PS(TPrint_section& sec,const int num); + void fill_riga_NR(TPrint_section& sec,const int num, const int side); + void stampa_testata(TPrinter& pr); + void stampa_fine(TPrinter& pr); + void stampa_N(TPrinter& pr); + void stampa_P(TPrinter& pr); + void stampa_Q(TPrinter& pr); + void stampa_R(TPrinter& pr); + void stampa_S(TPrinter& pr); + void stampa_T(TPrinter& pr); + virtual int dic_form_len() const { return BASE_FORMLEN; } + virtual void next_page(TPrinter& pr) { fill_page(pr, -1); } + virtual void set_body(TPrinter& pr, const char tipo) {} + virtual int prima_riga(PaginaQuadro p) const { return 3;} + public: + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + TBase4(const char* sNomeForm, const char* quadro) : TDicForm(sNomeForm, quadro) {} + virtual ~TBase4() {} +}; + +const int _FIELD_L = 740; + +class TStampaBase : public TStampaQuadro +{ + private: + TBase1* _fBase1; + TBase2* _fBase2; + TBase3* _fBase3; + TBase4* _fBase4; + TRelation* _rel; + TCursor* _cur, *_cur2, *_cur3, *_cur4; + + protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual bool conta_tipi_per() const { return FALSE; } + virtual TDicForm* get_form() const { return _fBase1; } + virtual TCursor* get_cursor() const { return _cur; } + virtual bool print_quadro(const int OffsetDitta, const bool modulaser); + + public: + TStampaBase(char livel) : TStampaQuadro("Base", livel) { } +}; + +/////////////////////////////////////////////////////////////////////////////////////////// +// +// Quadro L aggiuntivo +// +/////////////////////////////////////////////////////////////////////////////////////////// +class TQuadroL : public TDicForm +{ + private: + long _codditta; + protected: + void stampa_testata(TPrinter& pr); + void stampa_totali_L(TPrinter& pr); + bool stampa_L(TPrinter& pr,const long lStartRec,const int iRecL); + virtual int dic_form_len() const { return BASE_FORMLEN; } + virtual void next_page(TPrinter& pr) { fill_page(pr, -1); } + virtual void set_body(TPrinter& pr, const char tipo) {} + virtual int prima_riga(PaginaQuadro p) const { return 3;} + public: + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + TQuadroL(const char* sNomeForm, const char* quadro) : TDicForm(sNomeForm, quadro) {} + virtual ~TQuadroL() {} +}; + +const int _RIGA_TOTALI_AGG_L = 65; +const long _START_AGG_L = 17L; +const int _REC_PRIMA_AGG_L = 12; +const int _REC_SECONDA_AGG_L = 14; + +class TStampaQuadroAggL : public TStampaQuadro +{ + TQuadroL* _form; + protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual TDicForm* get_form() const { return _form; } + + public: + TStampaQuadroAggL(const char* quadro, char liv):TStampaQuadro(quadro, liv) {} + virtual ~TStampaQuadroAggL() { } +}; + + +#endif diff --git a/m770/77stq.cpp b/m770/77stq.cpp index d7234dd61..87e93c208 100755 --- a/m770/77stq.cpp +++ b/m770/77stq.cpp @@ -87,6 +87,8 @@ bool TDicForm::InitPrint(const long codditta) // pr.set_char_size(fontsize()); // Set font name and size // pr.set_fontname(fontname()); // according to current form + _posiziona=pr.printtype()==winprinter; +// if (_posiziona && !_GiaPosizionato && pr.printtype() == winprinter) if (_posiziona && !_GiaPosizionato && pr.printtype() == winprinter) { posiziona(); diff --git a/m770/77stq.h b/m770/77stq.h index a4bb1da3a..aacdd7b2f 100755 --- a/m770/77stq.h +++ b/m770/77stq.h @@ -1,277 +1,282 @@ -#ifndef __77STQ_H -#define __77STQ_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include "base.h" -#include -#include -#include -#include "quadroc.h" -#include "quadrod.h" -#include "quadrod1.h" -#include "quadrogd.h" -#include "quadrif.h" -#include "77stqd.h" -#include "77lib.h" - -// Chincaglieria che serve per posiziona() -typedef long HWND; -HIDDEN const int MAX_LEN = 300; -extern "C" { - BOOLEAN PrintLineNow( char *pData, word cbBytes, HWND hInst ); -}; - - -HIDDEN TString16 __dep16; -HIDDEN TString80 __dep80; - -// Vega-Key di Modulaser -HIDDEN const char* VK_STARTDOC = "&MA796&0&1"; -HIDDEN const char* VK_ENDDOC = "!0"; -typedef enum { STARTDOC, STARTDITTA, STARTPAGE, ENDDOC } ModulaserKey; - -// Campi form -#define TOT_TOTALE 1 -#define TOT_SNSRIT 2 -#define TOT_IMPON 3 -#define TOT_IMPOR 4 -#define TOT_NETTO 5 - -#define D_TOTALE 16 -#define D_SNSRIT 17 -#define D_IMPONIBILE 18 -#define D_IMPORTO 20 -#define D_NETTO 21 - -#define D1_TOTALE 12 -#define D1_QUOTAPRO 13 -#define D1_SPESEANT 14 -#define D1_IMPONIBILE 15 -#define D1_IMPORTO 17 -#define D1_NETTO 18 - -#define C_TOTALE 14 -#define C_CONTSSN 15 -#define C_SOMME 16 -#define C_IMPONIBILE 17 -#define C_RITENUTE 18 -#define C_NETTO 19 - -#define H_COFI_DIC 13 -#define H_NUM_FOGLIO 14 -#define QD_STATO_ESTERO 12 - -// Quadro D -HIDDEN const int QD_FORMLEN_PRIMA = 70; // 72 - 3 (3 e' la posizione della X di posiz.) -HIDDEN const int QD_FORMLEN = 72; -HIDDEN const int POS_DITTA = 120; // Colonna del codice ditta a pie' di modulo -HIDDEN const int QD_PAGINE = 4; -HIDDEN const int QD_RIGHE_PRIMA = 4; -HIDDEN const int QD_RIGHE_SECONDA = 7; -HIDDEN const int QD_RIGHE_TERZA = 7; -HIDDEN const int QD_RIGHE_QUARTA = 7; -HIDDEN const int QD1_RIGHE_PRIMA = 6; -HIDDEN const int QD1_RIGHE_SECONDA = 9; -HIDDEN const int QD1_RIGHE_TERZA = 9; -HIDDEN const int QD1_RIGHE_QUARTA = 8; - -HIDDEN const int HEADER_SECONDA = 8; -HIDDEN const int HEADER_TERZA = 8; // Sarebbero 9 col righello... -HIDDEN const int HEADER_QUARTA = 13; // 15 col righello... - -HIDDEN const int HEADER_D1_SECONDA = 8; -HIDDEN const int HEADER_D1_TERZA = 8; -HIDDEN const int HEADER_D1_QUARTA = 14; - -typedef enum { PRIMA=1, SECONDA, TERZA, QUARTA } PaginaQuadro; -typedef enum { fisiche, nofisiche } TipoPagina; - -const char* get_ragsoc_anagr(char tipo, long codanagr); - -class TDicForm : public TForm -{ - private: - real _f_tot_totale, _f_tot_snsrit, _f_tot_impon, _f_tot_impor, _f_tot_netto; - real _nf_tot_totale, _nf_tot_snsrit, _nf_tot_impon, _nf_tot_impor, _nf_tot_netto; - - TCursor* _cur; - - protected: - long _Items; // numero di record che hanno passato il filtro - PaginaQuadro _PaginaCorrente; - - void set_curr_page(PaginaQuadro pagina) { _PaginaCorrente = pagina; } - virtual int dic_form_len() const; - virtual void inc_curr_page(); - virtual void next_page(TPrinter& pr); - bool _modulaser; // se stampa per modulaser - TipoDitta _tipo_ditta; // tipo ditta: normale, estinto, dichiarante - int _num_foglio; // numero foglio - TString _cofi_dic; // cod.fis. dichiarante - bool _can_print_tot_fis, _can_print_tot_nofis; - bool _finite_fis, _finite_nofis, _LastDitta, _EndPrintDitta; - bool _GiaStampatiFis, _GiaStampatiNoFis, _PaginaPosizionamento; - bool _GiaPosizionato, _GiaMessoStartDoc, _GiaMessoStartPage[QD_PAGINE]; // flag per modulaser - int _CtrNoFisStampati, _CtrFisStampati; // contatori p.f. e p.g. stampate - long _codditta, _codditta_dic; // cod.ditta e cod.ditta dichiarante - int _RigaCorr; // contatore riga corrente - TString16 _quadro; // codice quadro in stampa - - void stampa_testata(TPrinter& pr); - virtual bool ultima_pagina() const { return _PaginaCorrente==QUARTA; } - virtual void stampa_totali(TPrinter& pr); -// virtual void aggiorna_totali(const char tipo); - virtual void set_body(TPrinter& pr, const char tipo); - void StampaPagina(PaginaQuadro PaginaCorrente, const bool StampaTotali, const long Fis, const long NoFis); - void posiziona(); - void fill_page(TPrinter& pr, const int righe); - void jump_to_line(TPrinter& pr, const int riga); - const char* BuildModulaserStartPage(); - void put_modulaser(TPrintrow& row, ModulaserKey key, int page=0); - void ClearFlagModulaser(); - bool PaginaPosizionamento() const; - virtual bool InitPrint(const long codditta); - - public: - virtual TCursor* cursor() const { return _cur; } - virtual TRelation* relation() const { return _cur->relation(); } - - virtual long filtra(const long codditta); - - TProgind* _prog; // progind usata in print() - - long codditta() const { return _codditta; } - void set_codditta(const long ditta) { _codditta = ditta; } - void set_posiziona(const bool posiz) { _GiaPosizionato = FALSE; } - void can_print_tot_fis(const bool canpr) { _can_print_tot_fis = canpr; } - void can_print_tot_nofis(const bool canpr) { _can_print_tot_nofis = canpr; } - void set_last_ditta(const bool last) { _LastDitta = last; } - bool last_ditta() const { return _LastDitta; } - bool EndJob() const { return _LastDitta && _EndPrintDitta; } - bool ultima_fis(); - bool ultima_nofis(); - TString& cofi_dic() { return _cofi_dic; } - void set_cofi_dic(const char* cofi); - TipoDitta tipo_ditta() const { return _tipo_ditta; } - void set_tipo_ditta(TipoDitta tipo) { _tipo_ditta = tipo; } - bool modulaser() const { return _modulaser; } - void set_modulaser(const bool modul) { _modulaser = modul; } - void set_num_foglio(const int foglio) { _num_foglio = foglio; } - int num_foglio() const { return _num_foglio; } - virtual void azzera_totali(); - PaginaQuadro curr_page() const { return _PaginaCorrente; } - TCursor& cur(); - - void set_progind(TProgind* prog) { _prog = prog; } - TProgind* progind() { return _prog; } - bool usa_progind() const { return _prog != NULL; } - - virtual void set_cursor(TCursor* cur); - virtual void close_print(); - virtual bool print(const long codditta, const long NumFis, const long NumNoFis); - - const TString& quadro() const { return _quadro; } - - TDicForm(const char* form, const char* quadro); - virtual ~TDicForm() {} -}; - -//////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////// -// -// TStDicArray -// -// Array delle ditte da stampare. Contiene una riga per ogni ditta che si vuole stampare -// Il formato della riga e': -// codditta|estinti|numfis|numnofis|ultimafis|ultimanofis -// -///////////////////////////////////////////////////////////////////////////////////////////// - -class TStDicArray : public TObject -{ - private: - TString_array _store; - - public: - TToken_string& operator[](int i) const; - int curr_index() const { return _store.last(); } - void set(const int index, const TipoDitta tipo=normale, const int num_fis=0, const int num_nofis=0, - bool ultima_con_fis=FALSE, bool ultima_con_nofis=FALSE, const char* cofidic=NULL); - void set_tipo(const int index, const TipoDitta tipo); - void set_ultima_con_fis(const int index, const bool ultima_fis); - void set_ultima_con_nofis(const int index, const bool ultima_nofis); - void set_flag_tipi(const int index, const bool ultima_fis, const bool ultima_nofis); - void set_ctr_tipi(const int index, const int num_fis, const int num_nofis); - void add(const long codditta, const TipoDitta tipo=normale, const int num_fis=0, const int num_nofis=0, - bool ultima_con_fis=FALSE, bool ultima_con_nofis=FALSE, const char* cofidic=NULL); - int items() const { return _store.items(); } - void destroy() { _store.destroy(); } -}; - -///////////////////////////////////////////////////////////////////////////////////////////// -// -// STAMPA QUADRO -// -///////////////////////////////////////////////////////////////////////////////////////////// - -class TStampaQuadro : public TApplication -{ - TMask* _m; // Maschera di stampa - - TConfig* _cnf; // Configurazione - TString16 _section; // Paragrafo del config - long _codditta; - int _anno_dic; - - TString _quadro; - char _livello; // "S" studio, "D" singola ditta - TString _title; - - TStDicArray _ditte; - -protected: // TApplication - virtual bool menu(MENU_TAG); - virtual void on_config_change(); - - virtual bool create(); - virtual bool destroy(); - -protected: - virtual bool user_create() pure; - virtual bool user_destroy() pure; - - virtual TDicForm* get_form() const pure; - virtual TCursor* get_cursor() const pure; - - virtual const char* mask_name() const; - virtual const char* form_name() const; - - virtual bool conta_tipi_per() const { return TRUE; } - void fill_estinti(const long CodDic); - const TStDicArray& ditte() const { return _ditte; } - - virtual bool print_quadro(const int OffsetDitta, const bool modulaser); - virtual void print(const bool modulaser); - - bool singola_ditta() const { return _livello == 'D'; } - const TString& quadro() const { return _quadro; } - - void set_taitol(const char* t) { _title = t; } - - TStampaQuadro(const char* quad, char liv); - -public: - const TString& taitol() const { return _title; } - - virtual ~TStampaQuadro() { } -}; - -#endif +#ifndef __77STQ_H +#define __77STQ_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include "base.h" +#include +#include +#include +#include "quadroc.h" +#include "quadrod.h" +#include "quadrod1.h" +#include "quadrogd.h" +#include "quadrif.h" +#include "77stqd.h" +#include "77lib.h" + +// Righe da saltare nelle prime pag. dei moduli successivi al primo (che' son +// senza le righe del posizionamento...) +HIDDEN int HEADER_PRIMA_NOPOS = 2; + +// Chincaglieria che serve per posiziona() +typedef long HWND; +HIDDEN const int MAX_LEN = 300; +extern "C" { + BOOLEAN PrintLineNow( char *pData, word cbBytes, HWND hInst ); +}; + + +HIDDEN TString16 __dep16; +HIDDEN TString80 __dep80; + +// Vega-Key di Modulaser +HIDDEN const char* VK_STARTDOC = "&MA796&0&1"; +HIDDEN const char* VK_ENDDOC = "!0"; +typedef enum { STARTDOC, STARTDITTA, STARTPAGE, ENDDOC } ModulaserKey; + +// Campi form +#define TOT_TOTALE 1 +#define TOT_SNSRIT 2 +#define TOT_IMPON 3 +#define TOT_IMPOR 4 +#define TOT_NETTO 5 + +#define D_TOTALE 16 +#define D_SNSRIT 17 +#define D_IMPONIBILE 18 +#define D_IMPORTO 20 +#define D_NETTO 21 + +#define D1_TOTALE 12 +#define D1_QUOTAPRO 13 +#define D1_SPESEANT 14 +#define D1_IMPONIBILE 15 +#define D1_IMPORTO 17 +#define D1_NETTO 18 + +#define C_TOTALE 14 +#define C_CONTSSN 15 +#define C_SOMME 16 +#define C_IMPONIBILE 17 +#define C_RITENUTE 18 +#define C_NETTO 19 + +#define H_COFI_DIC 13 +#define H_NUM_FOGLIO 14 +#define QD_STATO_ESTERO 12 + +// Quadro D +HIDDEN const int QD_FORMLEN_PRIMA = 70; // 72 - 3 (3 e' la posizione della X di posiz.) +HIDDEN const int QD_FORMLEN = 72; +HIDDEN const int POS_DITTA = 120; // Colonna del codice ditta a pie' di modulo +HIDDEN const int QD_PAGINE = 4; +HIDDEN const int QD_RIGHE_PRIMA = 4; +HIDDEN const int QD_RIGHE_SECONDA = 7; +HIDDEN const int QD_RIGHE_TERZA = 7; +HIDDEN const int QD_RIGHE_QUARTA = 7; +HIDDEN const int QD1_RIGHE_PRIMA = 6; +HIDDEN const int QD1_RIGHE_SECONDA = 9; +HIDDEN const int QD1_RIGHE_TERZA = 9; +HIDDEN const int QD1_RIGHE_QUARTA = 8; + +HIDDEN const int HEADER_SECONDA = 8; +HIDDEN const int HEADER_TERZA = 8; // Sarebbero 9 col righello... +HIDDEN const int HEADER_QUARTA = 13; // 15 col righello... + +HIDDEN const int HEADER_D1_SECONDA = 8; +HIDDEN const int HEADER_D1_TERZA = 8; +HIDDEN const int HEADER_D1_QUARTA = 14; + +typedef enum { PRIMA=1, SECONDA, TERZA, QUARTA } PaginaQuadro; +typedef enum { fisiche, nofisiche } TipoPagina; + +const char* get_ragsoc_anagr(char tipo, long codanagr); + +class TDicForm : public TForm +{ + private: + real _f_tot_totale, _f_tot_snsrit, _f_tot_impon, _f_tot_impor, _f_tot_netto; + real _nf_tot_totale, _nf_tot_snsrit, _nf_tot_impon, _nf_tot_impor, _nf_tot_netto; + + TCursor* _cur; + + protected: + long _Items; // numero di record che hanno passato il filtro + PaginaQuadro _PaginaCorrente; + + void set_curr_page(PaginaQuadro pagina) { _PaginaCorrente = pagina; } + virtual int dic_form_len() const; + virtual void inc_curr_page(); + virtual void next_page(TPrinter& pr); + bool _modulaser; // se stampa per modulaser + bool _posiziona; + TipoDitta _tipo_ditta; // tipo ditta: normale, estinto, dichiarante + int _num_foglio; // numero foglio + TString _cofi_dic; // cod.fis. dichiarante + bool _can_print_tot_fis, _can_print_tot_nofis; + bool _finite_fis, _finite_nofis, _LastDitta, _EndPrintDitta; + bool _GiaStampatiFis, _GiaStampatiNoFis, _PaginaPosizionamento; + bool _GiaPosizionato, _GiaMessoStartDoc, _GiaMessoStartPage[QD_PAGINE]; // flag per modulaser + int _CtrNoFisStampati, _CtrFisStampati; // contatori p.f. e p.g. stampate + long _codditta, _codditta_dic; // cod.ditta e cod.ditta dichiarante + int _RigaCorr; // contatore riga corrente + TString16 _quadro; // codice quadro in stampa + + void stampa_testata(TPrinter& pr); + virtual bool ultima_pagina() const { return _PaginaCorrente==QUARTA; } + virtual void stampa_totali(TPrinter& pr); +// virtual void aggiorna_totali(const char tipo); + virtual void set_body(TPrinter& pr, const char tipo); + void StampaPagina(PaginaQuadro PaginaCorrente, const bool StampaTotali, const long Fis, const long NoFis); + void posiziona(); + void fill_page(TPrinter& pr, const int righe); + void jump_to_line(TPrinter& pr, const int riga); + const char* BuildModulaserStartPage(); + void put_modulaser(TPrintrow& row, ModulaserKey key, int page=0); + void ClearFlagModulaser(); + bool PaginaPosizionamento() const; + virtual bool InitPrint(const long codditta); + + public: + virtual TCursor* cursor() const { return _cur; } + virtual TRelation* relation() const { return _cur->relation(); } + + virtual long filtra(const long codditta); + + TProgind* _prog; // progind usata in print() + + long codditta() const { return _codditta; } + void set_codditta(const long ditta) { _codditta = ditta; } + void set_posiziona(const bool posiz) { _GiaPosizionato = FALSE; } + void can_print_tot_fis(const bool canpr) { _can_print_tot_fis = canpr; } + void can_print_tot_nofis(const bool canpr) { _can_print_tot_nofis = canpr; } + void set_last_ditta(const bool last) { _LastDitta = last; } + bool last_ditta() const { return _LastDitta; } + bool EndJob() const { return _LastDitta && _EndPrintDitta; } + bool ultima_fis(); + bool ultima_nofis(); + TString& cofi_dic() { return _cofi_dic; } + void set_cofi_dic(const char* cofi); + TipoDitta tipo_ditta() const { return _tipo_ditta; } + void set_tipo_ditta(TipoDitta tipo) { _tipo_ditta = tipo; } + bool modulaser() const { return _modulaser; } + void set_modulaser(const bool modul) { _modulaser = modul; } + void set_num_foglio(const int foglio) { _num_foglio = foglio; } + int num_foglio() const { return _num_foglio; } + virtual void azzera_totali(); + PaginaQuadro curr_page() const { return _PaginaCorrente; } + TCursor& cur(); + + void set_progind(TProgind* prog) { _prog = prog; } + TProgind* progind() { return _prog; } + bool usa_progind() const { return _prog != NULL; } + + virtual void set_cursor(TCursor* cur); + virtual void close_print(); + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + + const TString& quadro() const { return _quadro; } + + TDicForm(const char* form, const char* quadro); + virtual ~TDicForm() {} +}; + +//////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////// +// +// TStDicArray +// +// Array delle ditte da stampare. Contiene una riga per ogni ditta che si vuole stampare +// Il formato della riga e': +// codditta|estinti|numfis|numnofis|ultimafis|ultimanofis +// +///////////////////////////////////////////////////////////////////////////////////////////// + +class TStDicArray : public TObject +{ + private: + TString_array _store; + + public: + TToken_string& operator[](int i) const; + int curr_index() const { return _store.last(); } + void set(const int index, const TipoDitta tipo=normale, const int num_fis=0, const int num_nofis=0, + bool ultima_con_fis=FALSE, bool ultima_con_nofis=FALSE, const char* cofidic=NULL); + void set_tipo(const int index, const TipoDitta tipo); + void set_ultima_con_fis(const int index, const bool ultima_fis); + void set_ultima_con_nofis(const int index, const bool ultima_nofis); + void set_flag_tipi(const int index, const bool ultima_fis, const bool ultima_nofis); + void set_ctr_tipi(const int index, const int num_fis, const int num_nofis); + void add(const long codditta, const TipoDitta tipo=normale, const int num_fis=0, const int num_nofis=0, + bool ultima_con_fis=FALSE, bool ultima_con_nofis=FALSE, const char* cofidic=NULL); + int items() const { return _store.items(); } + void destroy() { _store.destroy(); } +}; + +///////////////////////////////////////////////////////////////////////////////////////////// +// +// STAMPA QUADRO +// +///////////////////////////////////////////////////////////////////////////////////////////// + +class TStampaQuadro : public TApplication +{ + TMask* _m; // Maschera di stampa + + TConfig* _cnf; // Configurazione + TString16 _section; // Paragrafo del config + long _codditta; + int _anno_dic; + + TString _quadro; + char _livello; // "S" studio, "D" singola ditta + TString _title; + + TStDicArray _ditte; + +protected: // TApplication + virtual bool menu(MENU_TAG); + virtual void on_config_change(); + + virtual bool create(); + virtual bool destroy(); + +protected: + virtual bool user_create() pure; + virtual bool user_destroy() pure; + + virtual TDicForm* get_form() const pure; + virtual TCursor* get_cursor() const pure; + + virtual const char* mask_name() const; + virtual const char* form_name() const; + + virtual bool conta_tipi_per() const { return TRUE; } + void fill_estinti(const long CodDic); + const TStDicArray& ditte() const { return _ditte; } + + virtual bool print_quadro(const int OffsetDitta, const bool modulaser); + virtual void print(const bool modulaser); + + bool singola_ditta() const { return _livello == 'D'; } + const TString& quadro() const { return _quadro; } + + void set_taitol(const char* t) { _title = t; } + + TStampaQuadro(const char* quad, char liv); + +public: + const TString& taitol() const { return _title; } + + virtual ~TStampaQuadro() { } +}; + +#endif diff --git a/m770/77stqab.cpp b/m770/77stqab.cpp index e102e5190..a0ecc0ea9 100755 --- a/m770/77stqab.cpp +++ b/m770/77stqab.cpp @@ -287,6 +287,7 @@ bool TQuadroA::print(const long codditta, const long NumFis, const long NumNoFis next_page(pr); elementi = 0; } + _PaginaPosizionamento=FALSE; break; case SECONDA: case TERZA: @@ -589,6 +590,7 @@ bool TQuadroH::print(const long codditta, const long NumFis, const long NumNoFis next_page(pr); elementi = 0; } + _PaginaPosizionamento=FALSE; break; case SECONDA: if (!stampato_ultimo) diff --git a/m770/77stqab.h b/m770/77stqab.h index 80c4d58ee..87fb72142 100755 --- a/m770/77stqab.h +++ b/m770/77stqab.h @@ -1,242 +1,242 @@ -#ifndef __77STQAB_H -#define __77STQAB_H - -#include "77stq.h" - -////////////////////////////////////// -// QUADRO A -////////////////////////////////////// - -class TDipendente : public TSortable -{ - TRecnotype _pos; - - long _codice_ditta; - TString _ragsoc; - long _codice_dipendente; - long _codice_deceduto; - TDate _fine_rapporto; - bool _lavoro_precedente; - char _causa; - char _rettifica_conguaglio; - int _numero_progressivo; - -public: - virtual int compare(const TSortable& s) const; - - TRecnotype pos() const { return _pos; } - long codice_deceduto() const { return _codice_deceduto; } - void reset_deceduto() { _codice_deceduto = -_codice_deceduto; } - long codice() const { return _codice_dipendente; } - - int anno_fine_rapporto() const { return _fine_rapporto.year(); } - bool lavoro_precedente() const { return _lavoro_precedente; } - char rettifica_conguaglio() const { return _rettifica_conguaglio; } - - TDipendente(const TCursor& cur); - virtual ~TDipendente() { } -}; - -class TDipendenti : public TObject -{ - TArray _data; - -protected: - const TDipendente& dip(int i) const { return (const TDipendente&)_data[i]; } - -public: - const TDipendente& operator[](int i) const { return dip(i); } - - int fill(TCursor& cur); - int items() const { return _data.items(); } - - int find(long d) const; - - TDipendenti() { } - virtual ~TDipendenti() { } -}; - -class TQuadroA : public TDicForm -{ - enum { QA_FORMLEN = 72 }; - -protected: - virtual void next_page(TPrinter& pr); - virtual bool print(const long codditta, const long NumFis, const long NumNoFis); - - virtual void azzera_totali(); - virtual void aggiorna_totali(const char) { } - - virtual int elementi_pagina(PaginaQuadro p) const; - virtual int prima_riga(PaginaQuadro p) const; - virtual int riga_totali(PaginaQuadro p) const; - - bool init(long codditta); - - virtual void preprocess_corpo(const TRectype& rec); - - void stampa_corpo(TPrinter& pr); - void stampa_totali(TPrinter& pr); - void stampa_firma(TPrinter& pr); - -public: - TQuadroA(const char* form, const char* quadro) : TDicForm(form, quadro) {} - virtual ~TQuadroA() {} -}; - -class TStampaQuadroA : public TStampaQuadro -{ -protected: - TDicForm* _form; - TCursor* _cur; - -protected: - virtual bool user_create(); - virtual bool user_destroy(); - - virtual bool conta_tipi_per() const { return FALSE; } - virtual TDicForm* get_form() const { return _form; } - virtual TCursor* get_cursor() const { return _cur; } - -public: - TStampaQuadroA(const char* quadro, char livel) : TStampaQuadro(quadro, livel) { } - virtual ~TStampaQuadroA() { } -}; - -/////////////////////////////////////////////// -// QUADRO A1 -/////////////////////////////////////////////// - -class TQuadroA1 : public TQuadroA -{ -protected: - virtual int elementi_pagina(PaginaQuadro p) const; - virtual int prima_riga(PaginaQuadro p) const; - virtual long filtra(const long codditta); - virtual void preprocess_corpo(const TRectype& rec); - -public: - TQuadroA1(const char* form, const char* quadro) : TQuadroA(form, quadro) { } - virtual ~TQuadroA1() { } -}; - -class TStampaQuadroA1 : public TStampaQuadroA -{ -protected: - virtual bool user_create(); - -public: - TStampaQuadroA1(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { } - virtual ~TStampaQuadroA1() { } -}; - -/////////////////////////////////////////////// -// QUADRO A2 -/////////////////////////////////////////////// - -class TQuadroA2 : public TQuadroA -{ -protected: - virtual int elementi_pagina(PaginaQuadro p) const; - virtual int prima_riga(PaginaQuadro p) const; - virtual void preprocess_corpo(const TRectype& rec); - -public: - TQuadroA2(const char* form, const char* quadro) : TQuadroA(form, quadro) { } - virtual ~TQuadroA2() { } -}; - -class TStampaQuadroA2 : public TStampaQuadroA -{ -protected: - virtual bool user_create(); - -public: - TStampaQuadroA2(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { } - virtual ~TStampaQuadroA2() { } -}; - -///////////////////////////////////////////////// -// QUADRO A3 -///////////////////////////////////////////////// - -class TQuadroA3 : public TQuadroA -{ -protected: - virtual int elementi_pagina(PaginaQuadro p) const; - virtual int prima_riga(PaginaQuadro p) const; - -public: - TQuadroA3(const char* form, const char* quadro) : TQuadroA(form, quadro) { } - virtual ~TQuadroA3() { } -}; - -class TStampaQuadroA3 : public TStampaQuadroA -{ -protected: - virtual bool user_create(); - -public: - TStampaQuadroA3(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { } - virtual ~TStampaQuadroA3() { } -}; - -/////////////////////////////////////////////////////// -// QUADRO B -/////////////////////////////////////////////////////// - -class TQuadroB : public TQuadroA -{ -protected: - virtual int elementi_pagina(PaginaQuadro p) const; - virtual int prima_riga(PaginaQuadro p) const; - -public: - TQuadroB(const char* form, const char* quadro) : TQuadroA(form, quadro) { } - virtual ~TQuadroB() { } -}; - -class TStampaQuadroB : public TStampaQuadroA -{ -protected: - virtual bool user_create(); - -public: - TStampaQuadroB(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { } - virtual ~TStampaQuadroB() { } -}; - -/////////////////////////////////////////////////////////////////////////////////////////// -// -// Quadro H -// -/////////////////////////////////////////////////////////////////////////////////////////// - -class TQuadroH : public TQuadroA -{ - enum { QH_FORMLEN = 72 }; - -protected: - virtual bool ultima_pagina() const { return _PaginaCorrente==SECONDA; } - virtual int elementi_pagina(PaginaQuadro p) const; - virtual int prima_riga(PaginaQuadro p) const; - virtual bool print(const long codditta, const long NumFis, const long NumNoFis); - virtual void inc_curr_page(); - -public: - TQuadroH(const char* form, const char* quadro) : TQuadroA(form, quadro) { } - virtual ~TQuadroH() { } -}; - -class TStampaQuadroH : public TStampaQuadroA -{ -protected: - virtual bool user_create(); - -public: - TStampaQuadroH(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) {} - virtual ~TStampaQuadroH() {} -}; - -#endif - +#ifndef __77STQAB_H +#define __77STQAB_H + +#include "77stq.h" + +////////////////////////////////////// +// QUADRO A +////////////////////////////////////// + +class TDipendente : public TSortable +{ + TRecnotype _pos; + + long _codice_ditta; + TString _ragsoc; + long _codice_dipendente; + long _codice_deceduto; + TDate _fine_rapporto; + bool _lavoro_precedente; + char _causa; + char _rettifica_conguaglio; + int _numero_progressivo; + +public: + virtual int compare(const TSortable& s) const; + + TRecnotype pos() const { return _pos; } + long codice_deceduto() const { return _codice_deceduto; } + void reset_deceduto() { _codice_deceduto = -_codice_deceduto; } + long codice() const { return _codice_dipendente; } + + int anno_fine_rapporto() const { return _fine_rapporto.year(); } + bool lavoro_precedente() const { return _lavoro_precedente; } + char rettifica_conguaglio() const { return _rettifica_conguaglio; } + + TDipendente(const TCursor& cur); + virtual ~TDipendente() { } +}; + +class TDipendenti : public TObject +{ + TArray _data; + +protected: + const TDipendente& dip(int i) const { return (const TDipendente&)_data[i]; } + +public: + const TDipendente& operator[](int i) const { return dip(i); } + + int fill(TCursor& cur); + int items() const { return _data.items(); } + + int find(long d) const; + + TDipendenti() { } + virtual ~TDipendenti() { } +}; + +class TQuadroA : public TDicForm +{ + enum { QA_FORMLEN = 72 }; + +protected: + virtual void next_page(TPrinter& pr); + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + + virtual void azzera_totali(); + virtual void aggiorna_totali(const char) { } + + virtual int elementi_pagina(PaginaQuadro p) const; + virtual int prima_riga(PaginaQuadro p) const; + virtual int riga_totali(PaginaQuadro p) const; + + bool init(long codditta); + + virtual void preprocess_corpo(const TRectype& rec); + + void stampa_corpo(TPrinter& pr); + void stampa_totali(TPrinter& pr); + void stampa_firma(TPrinter& pr); + +public: + TQuadroA(const char* form, const char* quadro) : TDicForm(form, quadro) {} + virtual ~TQuadroA() {} +}; + +class TStampaQuadroA : public TStampaQuadro +{ +protected: + TDicForm* _form; + TCursor* _cur; + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + + virtual bool conta_tipi_per() const { return FALSE; } + virtual TDicForm* get_form() const { return _form; } + virtual TCursor* get_cursor() const { return _cur; } + +public: + TStampaQuadroA(const char* quadro, char livel) : TStampaQuadro(quadro, livel) { } + virtual ~TStampaQuadroA() { } +}; + +/////////////////////////////////////////////// +// QUADRO A1 +/////////////////////////////////////////////// + +class TQuadroA1 : public TQuadroA +{ +protected: + virtual int elementi_pagina(PaginaQuadro p) const; + virtual int prima_riga(PaginaQuadro p) const; + virtual long filtra(const long codditta); + virtual void preprocess_corpo(const TRectype& rec); + +public: + TQuadroA1(const char* form, const char* quadro) : TQuadroA(form, quadro) { } + virtual ~TQuadroA1() { } +}; + +class TStampaQuadroA1 : public TStampaQuadroA +{ +protected: + virtual bool user_create(); + +public: + TStampaQuadroA1(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { } + virtual ~TStampaQuadroA1() { } +}; + +/////////////////////////////////////////////// +// QUADRO A2 +/////////////////////////////////////////////// + +class TQuadroA2 : public TQuadroA +{ +protected: + virtual int elementi_pagina(PaginaQuadro p) const; + virtual int prima_riga(PaginaQuadro p) const; + virtual void preprocess_corpo(const TRectype& rec); + +public: + TQuadroA2(const char* form, const char* quadro) : TQuadroA(form, quadro) { } + virtual ~TQuadroA2() { } +}; + +class TStampaQuadroA2 : public TStampaQuadroA +{ +protected: + virtual bool user_create(); + +public: + TStampaQuadroA2(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { } + virtual ~TStampaQuadroA2() { } +}; + +///////////////////////////////////////////////// +// QUADRO A3 +///////////////////////////////////////////////// + +class TQuadroA3 : public TQuadroA +{ +protected: + virtual int elementi_pagina(PaginaQuadro p) const; + virtual int prima_riga(PaginaQuadro p) const; + +public: + TQuadroA3(const char* form, const char* quadro) : TQuadroA(form, quadro) { } + virtual ~TQuadroA3() { } +}; + +class TStampaQuadroA3 : public TStampaQuadroA +{ +protected: + virtual bool user_create(); + +public: + TStampaQuadroA3(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { } + virtual ~TStampaQuadroA3() { } +}; + +/////////////////////////////////////////////////////// +// QUADRO B +/////////////////////////////////////////////////////// + +class TQuadroB : public TQuadroA +{ +protected: + virtual int elementi_pagina(PaginaQuadro p) const; + virtual int prima_riga(PaginaQuadro p) const; + +public: + TQuadroB(const char* form, const char* quadro) : TQuadroA(form, quadro) { } + virtual ~TQuadroB() { } +}; + +class TStampaQuadroB : public TStampaQuadroA +{ +protected: + virtual bool user_create(); + +public: + TStampaQuadroB(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { } + virtual ~TStampaQuadroB() { } +}; + +/////////////////////////////////////////////////////////////////////////////////////////// +// +// Quadro H +// +/////////////////////////////////////////////////////////////////////////////////////////// + +class TQuadroH : public TQuadroA +{ + enum { QH_FORMLEN = 72 }; + +protected: + virtual bool ultima_pagina() const { return _PaginaCorrente==SECONDA; } + virtual int elementi_pagina(PaginaQuadro p) const; + virtual int prima_riga(PaginaQuadro p) const; + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + virtual void inc_curr_page(); + +public: + TQuadroH(const char* form, const char* quadro) : TQuadroA(form, quadro) { } + virtual ~TQuadroH() { } +}; + +class TStampaQuadroH : public TStampaQuadroA +{ +protected: + virtual bool user_create(); + +public: + TStampaQuadroH(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) {} + virtual ~TStampaQuadroH() {} +}; + +#endif +