#include #include #include #include #include #include #include #include "../cg/cgsaldac.h" #include "../cg/cglib02.h" #include "pd1890.h" #include "pd1890100.h" #include #include #include class TPartite2Euroasis : public TSkeleton_application { TMask* _msk; protected: virtual bool create(); virtual bool destroy(); virtual void main_loop(); int calcola_esposto(const TRiga_scadenze& scad, const TDate& dataanalisi, const TDate& dataesposto, TDate& datascad, TImporto& esposto) const; public: TMask& mask() { return *_msk; } TPartite2Euroasis() {}; virtual ~TPartite2Euroasis() {} }; bool TPartite2Euroasis::create() { open_files(LF_SCADENZE, LF_PARTITE, LF_CLIFO, 0); _msk = new TMask("pd1890100a"); return TSkeleton_application::create(); } bool TPartite2Euroasis::destroy() { delete _msk; return TSkeleton_application::destroy(); } int TPartite2Euroasis::calcola_esposto(const TRiga_scadenze& scad, const TDate& dataanalisi, const TDate& dataesposto, TDate& datascad, TImporto& esposto) const { const bool rischio = dataanalisi != dataesposto; int tipo = scad.get_int(SCAD_TIPOPAG); datascad = scad.get_date(SCAD_DATASCAD); for (int i=scad.last(); i>0; i= scad.pred(i)) { const TRiga_partite& pag = scad.partita().riga(i); const int tp = pag.get_int(PART_TIPOPAG); if (tp >= 2 && tp <= 7) { tipo = tp; const TDate datapag = pag.get_date(PART_DATAPAG); bool is_esposto = FALSE; if (rischio && datapag > dataesposto && datapag <= dataanalisi) is_esposto = TRUE; else if (datapag > dataanalisi) is_esposto = TRUE; if (is_esposto) { const char sez = pag.sezione(); const TImporto imp(sez, scad.row(i).get_real(PAGSCA_IMPORTO)); esposto+=imp; } if (datapag > datascad) datascad = datapag; } } return tipo; } void TPartite2Euroasis::main_loop() { TRelation rel(LF_SCADENZE); rel.add(LF_PARTITE,"TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO=ANNO|NUMPART==NUMPART",1,0); rel.add(LF_PAGSCA, "TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO==ANNO|NUMPART==NUMPART|NRIGA==NRIGA|NRATA==NRATA"); TCursor cur(&rel, "29->TIPOC == \"C\"", 2); // verificare la chiave TMask& m = mask(); TConfig config("pd1890100.ini"); TString80 exe = config.get("EXE"); m.set(F_PATH, config.get("PATH")); while (m.run() != K_QUIT) { const TString& path = m.get(F_PATH); config.set("PATH", path); TFilename scadname = path; scadname.ext("dbf"); TFilename scadtrr = "pd1890.trr"; scadtrr.custom_path(); TExternisamfile filescad(scadname, scadtrr); filescad.zap(); const TDate oggi(TODAY); TString16 ora; time_t tempo; time(&tempo); const struct tm* d = localtime(&tempo); ora.format("%02d:%02d:%02d", d->tm_hour, d->tm_min, d->tm_sec); const TDate dataanalisi = m.get_date(F_DATA); const int giorni = m.get_int(F_GIORNI); const TDate dataesposto = dataanalisi - (long) giorni; TRectype& recscad = cur.curr(); const TRectype& recpartita = cur.curr(LF_PARTITE); const long items = cur.items(); TProgind p(items, "Elaborazione scadenze in corso ...", TRUE, TRUE, 10); p.setstatus(1); int err = NOERR; for (cur=0; cur.pos()= 2 && tipop <= 7) filescad.put("TIPOPAG", "RB"); else filescad.put("TIPOPAG", "RD"); filescad.put("DATASCAD", datascad); filescad.put("IMPORTO", importo.valore()); filescad.put("ESPOSTO", esposto.valore()); err = filescad.write(); } } if (err == NOERR) { if (exe.not_empty()) { TExternal_app oasis(exe); if (oasis.can_run()) oasis.run(); } } else error_box("Errore %d in scrittura file dbf. Elaborazione non terminata.", err); } } int pd1890100(int argc, char** argv) { TPartite2Euroasis app; app.run(argc, argv, "Esportazione scadenzario"); return 0; }