campo-sirio/ve/ve5200.cpp

102 lines
2.4 KiB
C++
Raw Normal View History

#include <applicat.h>
#include <mask.h>
#include <progind.h>
#include <relation.h>
#include <urldefid.h>
#include "ve5200.h"
#include "velib.h"
class TStatus_mask : public TMask
{
public:
TStatus_mask() : TMask("ve5200") { }
virtual ~TStatus_mask() { }
};
class TStatus_change : public TSkeleton_application
{
TArray _file;
protected: // TSkeleton_application
virtual void main_loop();
void open_files(int logicnum, ...);
virtual bool create();
public:
TStatus_change() { }
virtual ~TStatus_change() { }
};
void TStatus_change::open_files(int logicnum, ...)
{
va_list marker;
va_start(marker, logicnum);
while (logicnum > 0)
{
CHECKD(_file.objptr(logicnum) == NULL, "File gia' aperto: ", logicnum);
_file.add(new TLocalisamfile(logicnum), logicnum);
logicnum = va_arg(marker, int);
}
}
bool TStatus_change::create()
{
TApplication::create();
open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_OCCAS, LF_INDSP, LF_CFVEN, LF_DOC, LF_RIGHEDOC, LF_ANAMAG, LF_MOVMAG, LF_RMOVMAG, LF_CONDV, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_CESS, 0);
dispatch_e_menu(BAR_ITEM(1));
return TRUE;
}
void TStatus_change::main_loop()
{
TStatus_mask m;
while (m.run() == K_ENTER)
{
TRelation rel(LF_DOC);
m.autosave(rel);
const TRectype recini(rel.curr());
const TRectype recfin(rel.curr());
TString filter;
filter << DOC_STATO << "==" << m.get(F_INIZIALE);
TCursor cur(&rel, filter, 1, &recini, &recfin);
const long total = cur.items();
if (total > 0)
{
TString msg = "Confermare l'aggiornamento di ";
msg.add_plural(total, "documento");
if (yesno_box(msg))
{
TProgind pi(total, "Elaborazione in corso...", TRUE, TRUE, 60);
const char finale = m.get(F_FINALE)[0];
TDocumento* doc = new TDocumento;
rel.lfile().set_curr(doc);
for (cur = 0; cur.pos() < total && !pi.iscancelled(); ++cur)
{
pi.addstatus(1);
doc->put(DOC_STATO, finale);
doc->rewrite();
}
// Forza l'aggiornamento dell'indice del cursore
TEdit_field& ef = m.efield(F_DANUMERO);
TCursor* cur = ef.browse()->cursor();
filter = cur->filter();
cur->setfilter("");
cur->setfilter(filter);
}
}
}
}
int ve5200(int argc, char* argv[])
{
TStatus_change a;
a.run(argc, argv, "Aggiornamento stato");
return 0;
}