campo-sirio/sc/sc1100.cpp
alex 1b4f6faaae Prime implementazioni
git-svn-id: svn://10.65.10.50/trunk@1130 c028cbd2-c16b-5b4b-a496-9718f37d4682
1995-03-16 08:50:33 +00:00

143 lines
3.7 KiB
C++
Executable File

#include <applicat.h>
#include <isam.h>
#include <relation.h>
#include <mask.h>
#include <progind.h>
#include <urldefid.h>
#include <scadenze.h>
#include <partite.h>
#include <lffiles.h>
#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;
}