From 6b0652c746a6068632c7d6c077eec9d8f871269b Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 10 Sep 1996 07:10:37 +0000 Subject: [PATCH] Quadro base git-svn-id: svn://10.65.10.50/trunk@3560 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- m770/77stq.cpp | 915 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 839 insertions(+), 76 deletions(-) diff --git a/m770/77stq.cpp b/m770/77stq.cpp index 0948b57e8..3a7b07cff 100755 --- a/m770/77stq.cpp +++ b/m770/77stq.cpp @@ -40,15 +40,14 @@ HIDDEN TString80 __dep80; // Vega-Key di Modulaser HIDDEN const char* VK_STARTDOC = "&MA796&0&1"; HIDDEN const char* VK_ENDDOC = "!0"; -HIDDEN const char* VK_STARTPAGE[] = { "*1*1", "*1*2", "*1*3", "*1*4" }; 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 TOT_IMPON 3 +#define TOT_IMPOR 4 +#define TOT_NETTO 5 #define D_TOTALE 16 #define D_SNSRIT 17 @@ -98,6 +97,18 @@ HIDDEN const int HEADER_D1_QUARTA = 14; typedef enum { PRIMA=1, SECONDA, TERZA, QUARTA } PaginaQuadro; typedef enum { fisiche, nofisiche } TipoPagina; +const char* get_ragsoc(const long codditta) +{ + TLocalisamfile ndt(LF_NDITTE); + ndt.zero(); + ndt.put("CODDITTA",(long)codditta); + if (ndt.read() == NOERR) + __dep80=ndt.get("RAGSOC"); + else + __dep80=""; + return __dep80; +} + // Stampa quadro /////////////////////////////////////////////////////////////////////////////////////////// @@ -132,11 +143,12 @@ class TDicForm : public TForm 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; // ditta in stampa + 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); @@ -144,6 +156,7 @@ class TDicForm : public TForm 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; @@ -168,7 +181,7 @@ class TDicForm : public TForm bool ultima_fis(); bool ultima_nofis(); TString& cofi_dic() { return _cofi_dic; } - void set_cofi_dic(const char* cofi) { _cofi_dic = cofi; } + 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; } @@ -193,6 +206,13 @@ class TDicForm : public TForm virtual ~TDicForm() {} }; +void TDicForm::set_cofi_dic(const char* cofi) +{ + _cofi_dic = cofi; +// salva il cod.dich. (serve per modulaser) + _codditta_dic = sogg_estinto(_codditta); +} + TCursor& TDicForm::cur() { return *_cur; @@ -217,11 +237,10 @@ TDicForm::TDicForm(const char* form, const char* quadro) long TDicForm::filtra(const long codditta) { TString filtr(24); + _codditta=codditta; filtr.format("CODDITTA=%ld", codditta); - _cur->setfilter(filtr, TRUE); const long items = _cur->items(); - return items; } @@ -553,6 +572,58 @@ void TDicForm::inc_curr_page() _PaginaCorrente = PRIMA; } +const char* TDicForm::BuildModulaserStartPage() +{ + __dep16="*"; + if (_quadro=="Base") + __dep16<<"1"; + else if (_quadro=="A") + __dep16<<"2"; + else if (_quadro=="A1") + __dep16<<"3"; + else if (_quadro=="A2") + __dep16<<"4"; + else if (_quadro=="A3") + __dep16<<"5"; + else if (_quadro=="B") + __dep16<<"6"; + else if (_quadro=="B1") + __dep16<<"7"; + else if (_quadro=="C") + __dep16<<"8"; + else if (_quadro=="D") + __dep16<<"9"; + else if (_quadro=="D1") + __dep16<<"10"; + else if (_quadro=="E") + __dep16<<"11"; + else if (_quadro=="E1") + __dep16<<"12"; + else if (_quadro=="E2") + __dep16<<"13"; + else if (_quadro=="F") + __dep16<<"14"; + else if (_quadro=="F1") + __dep16<<"15"; + else if (_quadro=="F2") + __dep16<<"16"; + else if (_quadro=="G") + __dep16<<"17"; + else if (_quadro=="G1") + __dep16<<"18"; + else if (_quadro=="H") + __dep16<<"19"; + else if (_quadro=="La") + __dep16<<"20"; + else if (_quadro=="Na") + __dep16<<"21"; + else if (_quadro=="Es") + __dep16<<"22"; + + __dep16<<"*"; + return __dep16; +} + void TDicForm::put_modulaser(TPrintrow& row, ModulaserKey Cmd, int page) { TString riga(80); @@ -562,7 +633,6 @@ void TDicForm::put_modulaser(TPrintrow& row, ModulaserKey Cmd, int page) case STARTDOC: if (!_GiaMessoStartDoc) { -// riga = VK_STARTDOC; riga = "\xf"; // Printer escape: font 17cpi riga << VK_STARTDOC; _GiaMessoStartDoc = TRUE; @@ -570,18 +640,36 @@ void TDicForm::put_modulaser(TPrintrow& row, ModulaserKey Cmd, int page) break; case STARTDITTA: { - TString cofi(16); - cofi.format("%-16s", (const char*)_cur->file(-116).get(ANA_COFI)); - TString ragsoc(50); - ragsoc = _cur->file(LF_NDITTE).get(NDT_RAGSOC); riga = "$"; - riga << cofi; // Cod.Fiscale - riga << "$0$"; // Cod.Studio/Cod.Cliente + TString cofi(16); + TString ragsoc(50); +// Legge il codice fisc.e la rag.soc. del sogg.dich. oppure della ditta corrente + if (_tipo_ditta == estinto) + { + cofi = _cofi_dic; + ragsoc = get_ragsoc(_codditta_dic); + } + else + { + cofi = cod_fis(_codditta); + ragsoc = get_ragsoc(_codditta); + } +// cofi.format("%-16s", (const char*)_cur->file(-116).get(ANA_COFI)); +// ragsoc = _cur->file(LF_NDITTE).get(NDT_RAGSOC); + + riga << cofi; // Cod.Fiscale + riga << "$00/"; // Cod.Studio/ + if (_tipo_ditta == estinto) + riga << _codditta_dic; // Cod.Cliente + else + riga << _codditta; + riga << "$"; riga << ragsoc; // RagSoc } break; case STARTPAGE: - riga = "*1*"; +// riga = "*1*"; + riga = BuildModulaserStartPage(); riga << page; _GiaMessoStartPage[page] = TRUE; break; @@ -633,16 +721,17 @@ void TDicForm::fill_page(TPrinter& pr, const int righe) // Sull'ultima riga metto il codice ditta if (i == stop - 2) { - if (_modulaser && EndJob() && curr_page() == QUARTA) +// if (_modulaser && EndJob() && curr_page() == QUARTA) + if (_modulaser && EndJob() && ultima_pagina()) put_modulaser(row, ENDDOC); TString16 ditta; ditta << _codditta; row.put(ditta, POS_DITTA); pr.print(row); - row.reset(); } else pr.print(row); + row.reset(); } _RigaCorr = 0; return; @@ -656,6 +745,7 @@ void TDicForm::fill_page(TPrinter& pr, const int righe) else row.reset(); pr.print(row); + row.reset(); _RigaCorr++; } } @@ -813,7 +903,8 @@ class TQuadroG : public TDicForm void stampa_prospetti1_2(TPrinter& pr); void stampa_prospetti3_4(TPrinter& pr); - protected: + protected: + virtual bool ultima_pagina() const { return _PaginaCorrente==SECONDA; } virtual void inc_curr_page(); virtual void next_page(TPrinter& pr); virtual void stampa_totali(TPrinter& pr) {} @@ -935,7 +1026,9 @@ void TQuadroG::stampa_prospetti1_2(TPrinter& pr) _RigaCorr++; } } -} + fill_page(pr, -1); // formfeed "adattato" + inc_curr_page(); +} void TQuadroG::stampa_prospetti3_4(TPrinter& pr) { @@ -1062,6 +1155,8 @@ void TQuadroG::stampa_prospetti3_4(TPrinter& pr) } if (usa_progind()) progind()->addstatus(1); + fill_page(pr, -1); // formfeed "adattato" + inc_curr_page(); } @@ -1087,27 +1182,27 @@ bool TQuadroG::print(const long codditta, const long NumFis, const long NumNoFis if (!InitPrint(codditta)) return FALSE; - for (int pagina=1; pagina <= QG_PAGINE; pagina++, next_page(pr)) - { - pr.formlen(QG_FORMLEN); + for (int pagina=1; pagina <= QG_PAGINE; pagina++, next_page(pr)) + { + pr.formlen(QG_FORMLEN); - if (_PaginaCorrente == PRIMA) - { - if (_modulaser) ClearFlagModulaser(); + if (_PaginaCorrente == PRIMA) + { + if (_modulaser) ClearFlagModulaser(); - (*cur) = PtrFis >= 0L ? PtrFis : 0L; - stampa_prospetti1_2(pr); - } + (*cur) = PtrFis >= 0L ? PtrFis : 0L; + stampa_prospetti1_2(pr); + } - if (_PaginaCorrente == SECONDA) - { + if (_PaginaCorrente == SECONDA) + { // Reset del flag di pagina con posiz. - if (_posiziona && _PaginaPosizionamento) _PaginaPosizionamento = FALSE; + if (_posiziona && _PaginaPosizionamento) _PaginaPosizionamento = FALSE; - fill_page(pr, HEADER_SECONDA_G); - stampa_prospetti3_4(pr); - } - } // for pagina.. + fill_page(pr, HEADER_SECONDA_G); + stampa_prospetti3_4(pr); + } + } // for pagina.. return TRUE; } @@ -3290,7 +3385,8 @@ class TQuadroF : public TDicForm void azzera_contatori(); void aggiorna_totali(char tipoprosp, TRectype& r); void stampa_totali(char tipoprosp, TPrinter& pr); - + virtual bool ultima_pagina() const { return _PaginaCorrente==SECONDA; } + public: virtual bool print(const long codditta, const long numfis=0L, const long numnofis=0L); virtual void inc_curr_page(); @@ -3384,6 +3480,8 @@ void TQuadroF::stampa_totali(char tipoprosp, TPrinter& pr) if (usa_progind()) progind()->addstatus(1); + fill_page(pr, -1); // formfeed "adattato" + inc_curr_page(); } void TQuadroF::aggiorna_totali(char tipoprosp, TRectype& r) @@ -3489,7 +3587,7 @@ bool TQuadroF::print(const long codditta, const long numfis, const long numnofis End_A = (residui_A == 0); if (End_A) stampa_totali('A', pr); - EndPrint = End_A && End_B && End_C && End_D; + _EndPrintDitta=EndPrint = End_A && End_B && End_C && End_D; } if (_PaginaCorrente == SECONDA) @@ -3514,7 +3612,7 @@ bool TQuadroF::print(const long codditta, const long numfis, const long numnofis End_D = (residui_D == 0); if (End_D) stampa_totali('D', pr); - EndPrint = End_A && End_B && End_C && End_D; + _EndPrintDitta=EndPrint = End_A && End_B && End_C && End_D; } } // for pagina.. } // EndPrint() @@ -4170,7 +4268,9 @@ bool TQuadroA::print(const long codditta, const long NumFis, const long NumNoFis else // Usa indice del cursore stampero_ultimo &= cur.pos() == cur.items()-1; } - + +// Usato per stampare la VK_ENDDOC in fill_page() + _EndPrintDitta=stampato_ultimo; if (!stampato_ultimo) preprocess_corpo(cur.curr()); @@ -4824,7 +4924,8 @@ bool TQuadroC::print(const long codditta, const long NumFis, const long NumNoFis else // Usa indice del cursore stampero_ultimo &= cur.pos() == cur.items()-1; } - + + _EndPrintDitta=stampato_ultimo; switch(_PaginaCorrente) { case PRIMA: @@ -4956,6 +5057,12 @@ bool TStampaQuadroC::user_create() /////////////////////////////////////////////////////////////////////////////////////////// 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 { @@ -5079,7 +5186,7 @@ bool TBase1::print(const long codditta, const long NumFis, const long NumNoFis) stampa_corpo(pr); stampa_soci(pr); next_page(pr); - + close_print(); return TRUE; } @@ -5092,7 +5199,7 @@ class TBase2 : public TDicForm 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 4;} + 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) {} @@ -5125,7 +5232,7 @@ bool TBase2::print(const long codditta, const long NumFis, const long NumNoFis) jump_to_line(pr, prima_riga(PRIMA)); stampa_corpo(pr); next_page(pr); - + close_print(); return TRUE; } @@ -5133,13 +5240,16 @@ class TBase3 : public TDicForm { private: long _codditta; + bool _bAggiuntivoL; // se necessario stampare aggiuntivo L protected: - void stampa_testata(TPrinter& pr); - void stampa_corpo(TPrinter& pr); + 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 4;} + 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) {} @@ -5161,47 +5271,410 @@ void TBase3::stampa_testata(TPrinter& pr) progind()->addstatus(1); } -void TBase3::stampa_corpo(TPrinter& pr) +int TBase3::stampa_L(TPrinter& pr,const int iChiaveL) { + long codit=0L; TPrint_section& body = section('B', odd_page); - body.reset(); - body.update(); - const int body_righe = body.height(); - for (int i = 0; i < body_righe; i++) + 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) { - pr.print(body.row(i)); + 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); } +const int _RIGA_TOTALI_L = 65; + 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; + _RigaCorr=0; (*cur)=0L; jump_to_line(pr, prima_riga(PRIMA)); - stampa_testata(pr); - stampa_corpo(pr); +// 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; } +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() { } +}; + +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"); +} + +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() { } +}; + +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; +} + +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() { } +}; + +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"); +} + +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() {} +}; + +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; +} + +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 char* pic) const { return _dDv.string(); } + 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() { } +}; + +// 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; +} + class TBase4 : public TDicForm { private: - long _codditta; - protected: + 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_corpo(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 4;} + 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) {} @@ -5221,17 +5694,296 @@ void TBase4::stampa_testata(TPrinter& pr) } 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_corpo(TPrinter& pr) +void TBase4::stampa_T(TPrinter& pr) { - TPrint_section& body = section('B', odd_page); - body.reset(); - body.update(); - const int body_righe = body.height(); - for (int i = 0; i < body_righe; i++) + 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) { - pr.print(body.row(i)); +// 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(fi.picture()); + else if (i==start+1) + sVal=rN.sIntDip(fi.picture()); + else if (i==start+2) + sVal=rN.sIntDat(fi.picture()); + else if (i==start+3) + sVal=rN.sTipoVers(); + else if (i==start+4) + sVal=rN.sCodTrib(); + else if (i==start+5) + sVal=rN.sDataVers(fi.picture()); + else if (i==start+6) + sVal=rN.sSerie(); + else if (i==start+7) + sVal=rN.sNumero(); + } + else + sVal=""; + fi.set(sVal); + 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) + { +// Stampa la parte sinistra (primi 4 campi) + 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', odd_page); + body.reset(); + TLocalisamfile qp(LF_QUAS); + _righePS.fill(_codditta,qp); + _bAggS = _righePS.items() > _RIGHE_S; + + int riga=0; + bool FinitaSezione=FALSE; + while (!FinitaSezione) + { +// Stampa la parte sinistra (primi 4 campi) + 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); +} + +const int _FIELD_L = 740; + +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()) @@ -5240,16 +5992,25 @@ void TBase4::stampa_corpo(TPrinter& pr) 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; + (*cur)=0L; jump_to_line(pr, prima_riga(PRIMA)); +// Stampa da M1 a M6 stampa_testata(pr); - stampa_corpo(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; } @@ -5292,13 +6053,11 @@ bool TStampaBase::user_create() _fBase3->set_cursor(_cur3); _cur4 = _fBase4->TForm::cursor(); _fBase4->set_cursor(_cur4); - return TRUE; } bool TStampaBase::user_destroy() { -// delete _cur; delete _fBase1; delete _fBase2; delete _fBase3; @@ -5388,7 +6147,8 @@ class TQuadroH : public TQuadroA { enum { QH_FORMLEN = 72 }; -protected: +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); @@ -5458,7 +6218,9 @@ bool TQuadroH::print(const long codditta, const long NumFis, const long NumNoFis stampa_corpo(pr); stampato_ultimo = stampero_ultimo; } - + + _EndPrintDitta=stampato_ultimo; + elementi++; if (elementi >= elementi_pagina(PRIMA)) { @@ -5475,7 +6237,8 @@ bool TQuadroH::print(const long codditta, const long NumFis, const long NumNoFis stampa_corpo(pr); stampato_ultimo = stampero_ultimo; } - + _EndPrintDitta=stampato_ultimo; + elementi++; if (elementi >= elementi_pagina(SECONDA)) @@ -5601,4 +6364,4 @@ int stampa_quadro(int argc, char* argv[]) } return 0; -} \ No newline at end of file +}