#include <config.h> #include <currency.h> #include <execp.h> #include <mask.h> #include <printapp.h> #include <progind.h> #include <utility.h> #include "../cg/cgsaldac.h" #include "../cg/cglib02.h" #include "pd1890.h" #include "pd1890100.h" #include <clifo.h> #include <nditte.h> #include <pconti.h> 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()<items && !p.iscancelled() && err==NOERR; ++(cur)) { p.addstatus(1); const int nriga = recscad.get_int(SCAD_NRIGA); const int nrata = recscad.get_int(SCAD_NRATA); const long codcli = recscad.get_long(SCAD_SOTTOCONTO); if (codcli == 11062) { int i = 0; i++; } TPartita partita(recpartita); const TRiga_scadenze& scad = partita.rata(nriga, nrata); const TRiga_partite& rigapartite = scad.riga(); TDate datascad = scad.get(SCAD_DATASCAD); TImporto esposto; const int tipop = calcola_esposto(scad, dataanalisi, dataesposto, datascad, esposto); if (!scad.chiusa() || !esposto.is_zero()) { TImporto importo = scad.residuo(FALSE); importo.normalize('D'); filescad.zero(); filescad.put("DATAGEN", oggi); filescad.put("ORAGEN", ora); filescad.put("GIORNI", giorni); filescad.put("DATA", dataanalisi); filescad.put("CLIENTE", recscad.get(SCAD_SOTTOCONTO)); TString16 tipodoc = " "; if (rigapartite.is_fattura()) tipodoc = "FV"; else if (rigapartite.is_nota_credito()) tipodoc = "NC"; filescad.put("TIPODOC", tipodoc); filescad.put("NUMDOC", recpartita.get(PART_NUMDOC)); TString16 strpartita = recpartita.get(PART_ANNO); strpartita << "/"; strpartita << recpartita.get(PART_NUMPART); filescad.put("PARTITA", strpartita); if (tipop >= 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; }