#include #include #include #include #include #include #include #include #include #include "sc1100.h" class TDeletepart_app : public TApplication { static TDate _datalimite; protected: virtual bool create(); virtual bool destroy(); virtual bool menu(MENU_TAG m); static bool partchiuseal(const TRelation *r); public: TDeletepart_app() {}; ~TDeletepart_app() {}; }; bool TDeletepart_app::create() { TApplication::create(); dispatch_e_menu(BAR_ITEM(1)); return TRUE; } bool TDeletepart_app::destroy() { return TApplication::destroy(); } bool TDeletepart_app::partchiuseal(const TRelation *r) { return (r->lfile().get_bool(PART_CHIUSA) && (r->lfile().get_date(PART_DATAREG) <= _datalimite)); } bool TDeletepart_app::menu(MENU_TAG) { TMask m("sc1100a"); TRelation partite(LF_PARTITE); TCursor cur(&partite); TLocalisamfile scadenze(LF_SCADENZE); while (m.run() != K_QUIT) { _datalimite = m.get(F_DATE); cur.set_filterfunction(partchiuseal); TRecnotype last = cur.items()-1; const TRecnotype first = cur.read(); TRecnotype total = 0; int lastanno = -1; TString16 lastpart = ""; for (cur = 0; cur.pos() <= last; ++cur) { if (lastanno != cur.curr().get_int(PART_ANNO) || lastpart != cur.curr().get(PART_NUMPART)); { total++; lastanno = cur.curr().get_int(PART_ANNO); lastpart = cur.curr().get(PART_NUMPART); } } TString80 caption("Cancellazione di "); caption.add_plural(total, "cur.curr()"); if (!yesno_box(caption) || total < 1) continue; TProgind pi(total, caption, FALSE, TRUE, 24); cur.freeze(); lastanno = -1; int err = NOERR; for (cur = 0; cur.pos() <= last; ++cur) { const int anno = cur.curr().get_int(PART_ANNO); const TString16 partita = cur.curr().get(PART_NUMPART); err = cur.lock(); if (err == NOERR && (lastanno != cur.curr().get_int(PART_ANNO) || lastpart != cur.curr().get(PART_NUMPART))); { for (int rig = 1; err == NOERR; rig++) { scadenze.put(PART_ANNO, lastanno); scadenze.put(PART_NUMPART, lastpart); scadenze.put(PART_NRIGA, rig); if (scadenze.read(_isequal, _lock) == NOERR) err = scadenze.remove(); if (err != NOERR) caption.format("riga scadenza %d", rig); } pi.addstatus(1); lastanno = cur.curr().get_int(PART_ANNO); lastpart = cur.curr().get(PART_NUMPART); } if (err == NOERR) { err = cur.file().remove(); if (err != NOERR) caption = "riga %d"; } else { error_box("Errore %d nella cancellazione della %s della partita %d/%s", err, (const char*)caption, anno, partita); break; } } for (int rig = 1; lastanno > 0 && err == NOERR; rig++) { scadenze.put(SCAD_ANNO, lastanno); scadenze.put(SCAD_NUMPART, lastpart); scadenze.put(SCAD_NRATA, rig); if (scadenze.read(_isequal, _lock) == NOERR) err = scadenze.remove(); if (err != NOERR) caption.format("riga scadenza %d", rig); } cur.freeze(FALSE); } return FALSE; } int sc1100(int argc, char** argv) { TDeletepart_app a; a.run(argc, argv, "Eliminazione partita chiuse"); return 0; }