#include #include #include #include #include #include #include #include #include #include #include #include #include "ef0600.h" enum pt {undefined = 0, scadenza = 1, banca = 2, distinta = 3}; class TPrint_effetti_app : public TPrintapp { pt _pr_type; TRelation* _rel; int _cur_1, _cur_2, _cur_3; int _interline, i; TString _ban, _cli, _val, _data_stampa, _ban_prec; long _dist_prec; TDate _scad_prec; real _tot_data, _tot_mese, _tot_banca, _tot_distinta, _tot_stampa; bool _prima_volta; public: virtual bool preprocess_page(int file, int counter); virtual bool preprocess_print(int file, int counter); virtual print_action postprocess_print(int file, int counter); virtual void preprocess_header(); void header_scadenza(); void header_banca(); void header_distinta(); virtual bool user_create(); virtual bool user_destroy(); virtual bool set_print(int); virtual void set_page (int file, int counter); void set_scadenza(); void set_banca(); void set_distinta(); const char* get_field(int ln, const char* fn) {return current_cursor()->curr(ln).get(fn);} const char* look_tab(const char* tabname, TString& cod,const char* fld="S0"); TPrint_effetti_app() : TPrintapp(), _ban(11), _ban_prec(11), _cli(60), _val(3){_rel = NULL; _interline = 1;} }; void TPrint_effetti_app::preprocess_header() { reset_header(); const long firm = get_firm(); int j = 1; TLocalisamfile ditte(LF_NDITTE); ditte.zero(); ditte.put("CODDITTA", firm); ditte.read(); if (ditte.bad()) ditte.zero(); TString s(ditte.get("RAGSOC")); set_header(j, "Ditta: %ld %s@125gPag @#", firm, (const char*) s); set_header(j++, "@102gData %s", (const char*) _data_stampa); switch(_pr_type) { case scadenza: header_scadenza(); break; case banca: header_banca(); break; case distinta: header_distinta(); break; default: break; } } void TPrint_effetti_app::header_scadenza() { int j =1; set_header(j, "@52gSTAMPA RI.BA. PER SCADENZA"); j++; set_header(j++, (const char *)(TString(132).fill('-'))); set_header(j++, " Scadenza Banca Cliente N.Riba N.Dist Importo Val N.Rata St.Def. Fattura del. N."); set_header(j, (const char *)(TString(132).fill('-'))); } void TPrint_effetti_app::header_banca() { int j = 1; set_header(j, "@45gSTAMPA RI.BA. PER BANCHE DI PRESENTAZIONE"); j++; set_header(j++, (const char *)(TString(132).fill('-'))); set_header(j++, " Banca Scadenza Cliente N.Riba N.Dist Importo Val. N.Rata St.Def. Fattura del. N."); set_header(j, (const char *)(TString(132).fill('-'))); } void TPrint_effetti_app::header_distinta() { int j = 1; set_header(j, "@55gSTAMPA RI.BA. PER DISTINTE"); j++; set_header(j++, (const char *)(TString(132).fill('-'))); set_header(j++, " Distinta "); set_header(j++, "@1gTipo Num. N.Riba Scadenza Banca Cliente Importo Val. N.Rata St.Def. Fattura del. N."); set_header(j, (const char *)(TString(132).fill('-'))); } print_action TPrint_effetti_app::postprocess_print(int file, int counter) { TString s; TPrintrow pr; TPrinter& p = printer(); if (_tot_data != 0.0) { pr.put("-------------------------------------------",50); p.print(pr); pr.reset(); pr.put("Totale",52); pr.put(_scad_prec.string(),60); pr.put(_tot_data.string("###.###.##@,@@"),72); p.print(pr); _tot_data = 0.0; pr.reset(); } if(_tot_mese != 0.0) { pr.put("Totale ",50); pr.put(itom(_scad_prec.month()),57); pr.put(_tot_mese.string("###.###.##@,@@"),72); p.print(pr); _tot_mese = 0.0; pr.reset(); } if (_tot_banca != 0.0) { pr.put("Totale",50); s = (look_tab("%BAN",_ban_prec)); if (s.empty()) s = "Nessuna Banca "; s = s.left(20); pr.put(s,57); pr.put(_tot_banca.string("###.###.##@,@@"),72); p.print(pr); _tot_banca = 0.0; pr.reset(); } if (_tot_distinta != 0.0) { pr.put("Totale",50); s << "Distinta " << _dist_prec; if (_dist_prec == 0) s = "Nessuna Distinta "; pr.put(s,57); pr.put(_tot_distinta.string("###.###.##@,@@"),72); p.print(pr); _tot_distinta = 0.0; pr.reset(); } if (_tot_stampa != 0.0) { pr.put("-----------------------------------------------------------------------------------------------------------------------------------",1); p.print(pr); pr.reset(); pr.put("Totale Ri.Ba. stampate",50); pr.put(_tot_stampa.string("###.###.##@,@@"),72); p.print(pr); _tot_stampa = 0.0; pr.put("-----------------------------------------------------------------------------------------------------------------------------------",1); p.print(pr); pr.reset(); p.print(pr); } return NEXT_PAGE; } void TPrint_effetti_app::set_page(int file, int counter) { switch(_pr_type) { case scadenza: if (file == LF_EFFETTI) set_scadenza(); break; case banca: if (file == LF_EFFETTI) set_banca(); break; case distinta: if (file == LF_EFFETTI) set_distinta(); break; default: break; } } void TPrint_effetti_app::set_scadenza() { set_row(1,"@1g@s@13g#t@26g#t@50g@pn@59g@pn@72g@pn@88g#t@95g@pn@103g@s@111g@s@121g@pn", FLD(LF_EFFETTI, EFF_DATASCAD), &_ban, &_cli, FLD(LF_EFFETTI, EFF_NPROGTR, "#####@"), FLD(LF_EFFETTI, EFF_NDIST, "#######@"), FLD(LF_EFFETTI, EFF_IMPORTO, "###.###.##@,@@"), &_val, FLD(LF_REFFETTI, REFF_NRATA,"##@"), FLD(LF_EFFETTI, EFF_EFFSTAMP), FLD(LF_REFFETTI, REFF_DATAFATT), FLD(LF_REFFETTI, REFF_NFATT,"######@")); for( i = 0; i < _interline; i++) set_row(i+1," "); } void TPrint_effetti_app::set_banca() { set_row(1,"@1g#t@14g@s@26g#t@54g@pn@63g@pn@72g@pn@91g#t@98g@pn@106g@s@114g@s@124g@pn", &_ban, FLD(LF_EFFETTI, EFF_DATASCAD), &_cli, FLD(LF_EFFETTI, EFF_NPROGTR, "#####@"), FLD(LF_EFFETTI, EFF_NDIST, "#######@"), FLD(LF_EFFETTI, EFF_IMPORTO, "###.###.##@,@@"), &_val, FLD(LF_REFFETTI, REFF_NRATA,"##@"), FLD(LF_EFFETTI, EFF_EFFSTAMP), FLD(LF_REFFETTI, REFF_DATAFATT), FLD(LF_REFFETTI, REFF_NFATT, "######@")); for( i = 0; i < _interline; i++) set_row(i+1,""); } void TPrint_effetti_app::set_distinta() { set_row(1,"@3g@s@5g@pn@16g@pn@27g@s@41g#t@55g#t@72g@pn@91g#t@98g@pn@106g@s@114g@s@124g@pn", FLD(LF_EFFETTI, EFF_TIPODIST), FLD(LF_EFFETTI, EFF_NDIST, "#######@"), FLD(LF_EFFETTI, EFF_NPROGTR, "#####@"), FLD(LF_EFFETTI, EFF_DATASCAD), &_ban, &_cli, FLD(LF_EFFETTI, EFF_IMPORTO, "###.###.##@,@@"), &_val, FLD(LF_REFFETTI, REFF_NRATA,"##@"), FLD(LF_EFFETTI, EFF_EFFSTAMP), FLD(LF_REFFETTI, REFF_DATAFATT), FLD(LF_REFFETTI, REFF_NFATT, "######@")); for( i = 0; i < _interline; i++) set_row(i+1,""); } bool TPrint_effetti_app::preprocess_page(int file, int counter) // no switch/case su file poichè c'è solo quello degli effetti { TString s; TRectype & rec = current_cursor()->curr(); TDate scad = rec.get_date (EFF_DATASCAD); TString ban = rec.get (EFF_CODABIP); if (ban=="00000") ban = ""; long dist = rec.get_long (EFF_NDIST); char tipodist = rec.get_char(EFF_TIPODIST); real importo = rec.get_real(EFF_IMPORTO); TString year; TPrintrow pr; TPrinter& p = printer(); if (_prima_volta) { _prima_volta = FALSE; switch(_pr_type) { case scadenza: _scad_prec = scad; year = _scad_prec.string(); year = year.right(4); pr.put(itom(_scad_prec.month()),1); pr.put(year,10); p.print(pr); pr.reset(); p.print(pr); break; case banca: _scad_prec = scad; _ban_prec = ban; s = (look_tab("%BAN",_ban_prec)); if (s.empty()) s = "Nessuna Banca di Presentazione"; pr.put(s,1); p.print(pr); pr.reset(); p.print(pr); break; case distinta: _scad_prec = scad; _dist_prec = dist; s << "Distinta " << dist << " "; switch(tipodist) { case 'B': s << " Salvo Buon Fine"; break; case 'I': s << " All'Incasso"; break; case 'S': s << " Allo Sconto"; break; case 0: s = "Nessuna Distinta"; break; } pr.put(s,1); p.print(pr); pr.reset(); p.print(pr); s = ""; break; } } if (scad !=_scad_prec) { pr.put("-------------------------------------------",50); p.print(pr); pr.reset(); pr.put("Totale",52); pr.put(_scad_prec.string(),60); pr.put(_tot_data.string("###.###.##@,@@"),72); p.print(pr); _tot_data = 0.0; pr.reset(); if((scad.month() != _scad_prec.month())&&_pr_type == scadenza) { pr.put("Totale ",50); pr.put(itom(_scad_prec.month()),57); pr.put(_tot_mese.string("###.###.##@,@@"),72); p.print(pr); _tot_mese = 0.0; pr.reset(); p.print(pr); year = scad.string(); year = year.right(4); pr.put(itom(scad.month()),1); pr.put(year,10); p.print(pr); pr.reset(); p.print(pr); } } switch(_pr_type) { case scadenza: _tot_mese += importo; break; case banca: if (ban !=_ban_prec) { pr.put("Totale",50); s = (look_tab("%BAN",_ban_prec)); if (s.empty()) s = "Nessuna Banca "; s = s.left(20); pr.put(s,57); pr.put(_tot_banca.string("###.###.##@,@@"),72); p.print(pr); _tot_banca = 0.0; pr.reset(); p.print(pr); _ban_prec = ban; s = (look_tab("%BAN",ban)); if (s.empty()) s = "Nessuna Banca di Presentazione"; pr.put(s,1); p.print(pr); pr.reset(); p.print(pr); } _tot_banca += importo; break; case distinta: if (dist !=_dist_prec) { pr.put("Totale",50); s << "Distinta " << _dist_prec; if (_dist_prec == 0) s = "Nessuna Distinta"; pr.put(s,57); pr.put(_tot_distinta.string("###.###.##@,@@"),72); p.print(pr); _tot_distinta = 0.0; pr.reset(); p.print(pr); _dist_prec = dist; s = ""; s << "Distinta " << dist << " "; switch(tipodist) { case 'B': s <<" Salvo Buon Fine"; break; case 'I': s << " All'Incasso"; break; case 'S': s << " Allo Sconto"; break; case 0: s = "Nessuna Distinta "; break; } pr.put(s,1); p.print(pr); pr.reset(); p.print(pr); s = ""; } _tot_distinta += importo; break; } _scad_prec = scad; _tot_data += importo; _tot_stampa += importo ; _ban = get_field(LF_EFFETTI, EFF_CODABIP); if (_ban=="00000") _ban = ""; s = get_field(LF_EFFETTI, EFF_CODCABP); if (s=="00000") s = ""; _ban << " " << s; s = get_field(LF_EFFETTI, EFF_CODCF); _cli = get_field(LF_CLIFO, CLI_RAGSOC); s = _cli.mid(30,50); s.trim(); _cli = _cli.mid(0,30); _cli.trim(); _cli << " " << s; s = get_field(LF_EFFETTI, EFF_CODVAL); (s.empty())?_val = s:_val = "Lit."; return TRUE; } bool TPrint_effetti_app::preprocess_print(int file, int counter) { reset_print(); return TRUE; } const char* TPrint_effetti_app::look_tab(const char* tabname, TString& cod,const char* fld) { TTable tab(tabname); tab.curr().zero(); tab.curr().put("CODTAB",cod); tab.read(); if (tab.bad()) tab.curr().zero(); return tab.curr().get(fld); } bool TPrint_effetti_app::set_print(int) { disable_links(); set_multiple_link(FALSE); TMask mask("ef0600a.msk"); mask.run(); force_setpage(FALSE); switch (mask.last_key()) { case K_ESC: case K_QUIT: return FALSE; break; } _pr_type = (pt) mask.get_int(RDB_TIPOST); TDate data_stampa (mask.get(F_DATA_STAMPA)); _data_stampa = data_stampa.string(); TRectype from(current_cursor()->curr()); from.zero(); TRectype to(from); TString cod_from, cod_to, filter; filter = ""; switch(_pr_type) { case scadenza: cod_from = mask.get(F_DA_DATA); cod_to = mask.get(F_A_DATA); from.put(EFF_DATASCAD,cod_from); to.put(EFF_DATASCAD,cod_to); select_cursor(_cur_1); break; case banca: cod_from = mask.get(F_DA_DATA2); cod_to = mask.get(F_A_DATA2); from.put(EFF_DATASCAD,cod_from); to.put(EFF_DATASCAD,cod_to); cod_from = mask.get(F_DABAN); cod_to = mask.get(F_ABAN); if (cod_from.empty()) cod_from = "00000"; // per selezionare tutte if (cod_to.empty()) cod_to = "99999"; // le banche di presentazione filter = ""; filter << "(CODABIP>=" << cod_from << ")&&(CODABIP<=" << cod_to << ")" ; select_cursor(_cur_2); break; case distinta: cod_from = mask.get(F_DA_DATA3); cod_to = mask.get(F_A_DATA3); from.put(EFF_DATASCAD,cod_from); to.put(EFF_DATASCAD,cod_to); cod_from = mask.get(F_DADIST); cod_to = mask.get(F_ADIST); if (cod_from.empty()) cod_from = "00000000"; // per selezionare tutte if (cod_to.empty()) cod_to = "99999999"; // le distinte filter = ""; filter << "(NDIST>=" << cod_from << ") && (NDIST<=" << cod_to << ")" ; cod_from = mask.get(F_DATIPODIST); cod_to = mask.get(F_ATIPODIST); if ((!cod_from.empty())&&(!cod_to.empty())&&(cod_from==cod_to)) // per selezionare un tipo filter << "&&(TIPODIST==\"" << cod_from << "\")"; // di distinta select_cursor(_cur_3); break; default: break; } current_cursor()->setfilter(filter,TRUE); current_cursor()->setregion(from, to); set_real_picture("###.###.##@,@@"); _prima_volta=TRUE; return TRUE; } bool TPrint_effetti_app::user_create() { _rel = new TRelation(LF_EFFETTI); _rel->add(LF_REFFETTI, "NPROGTR==NPROGTR"); _rel->add(LF_CLIFO, "TIPOCF=='C'|CODCF==CODCF"); _cur_1 = add_cursor(new TCursor(_rel,"",3));//STAMPA PER SCADENZA TString ordine = "CODABIP|DATASCAD|NPROGTR";//STAMPA PER BANCA _cur_2 = add_cursor(new TSorted_cursor(_rel,ordine,"",3)); ordine = "TIPODIST|NDIST|NRIGADIST|DATASCAD|NPROGTR";//STAMPA PER DISTINTA _cur_3 = add_cursor(new TSorted_cursor(_rel,ordine,"",3)); add_file(LF_EFFETTI); enable_print_menu(); return TRUE; } bool TPrint_effetti_app::user_destroy() { if (_rel) delete _rel; return TRUE; } int ef0600(int argc, char* argv[]) { TPrint_effetti_app app; app.run(argc, argv, "Stampe Controllo Effetti"); return 0; }