campo-sirio/sc/sc1300.cpp
villa 0184ad1f8b sc1300 (sc1 -2): gestione archivio storico solleciti
git-svn-id: svn://10.65.10.50/trunk@1160 c028cbd2-c16b-5b4b-a496-9718f37d4682
1995-03-24 11:02:15 +00:00

121 lines
2.8 KiB
C++
Executable File

#include <mask.h>
#include <relapp.h>
#include "sc1.h"
#include "sc1300a.h"
class SollecitiStorici_app : public TRelation_application
{
TMask* _msk;
TRelation* _rel;
protected:
virtual TMask* get_mask(int mode) { return _msk;}
virtual bool changing_mask(int mode) { return FALSE;}
virtual TRelation* get_relation() const { return _rel;}
virtual bool user_create() ;
virtual bool user_destroy() ;
virtual int write(const TMask& m);
static bool zap_handler(TMask_field& f, KEY k);
static SollecitiStorici_app& app()
{ return (SollecitiStorici_app&)main_app();}
public:
void zap_cliente(const char* c);
SollecitiStorici_app() {}
virtual ~SollecitiStorici_app() {}
};
bool SollecitiStorici_app::user_create()
{
_rel = new TRelation(LF_STOSOLL);
_msk = new TMask("sc1300a");
_msk->set_handler(F_ZAP, zap_handler);
set_search_field(F_TIPO);
return TRUE;
}
bool SollecitiStorici_app::user_destroy()
{
delete _rel;
delete _msk;
return TRUE;
}
bool SollecitiStorici_app::zap_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE && !f.mask().get(F_CODICE).empty())
{
if (yesno_box("Si desidera azzerare l'archivio solleciti per "
"il cliente %s?", (const char*)f.mask().get(F_DESCR)))
{
app().zap_cliente(f.mask().get(F_CODICE));
f.mask().stop_run(K_ESC);
}
}
return TRUE;
}
void SollecitiStorici_app::zap_cliente(const char* cod)
{
TLocalisamfile& sr = _rel->lfile();
sr.zero(); sr.put("CODICE", cod);
int err = NOERR;
for (err = sr.read(_isgteq);
err == NOERR && sr.get("CODICE") == cod;
err = sr.next())
sr.remove();
}
int SollecitiStorici_app::write(const TMask& m)
{
TLocalisamfile& sr = _rel->lfile();
_rel->save_status();
sr.zero(); sr.put("CODICE", m.get(F_CODICE));
int err = NOERR;
bool ok = TRUE;
TDate data;
TDate dmsk(m.get(F_DATA));
for (err = sr.read(_isgteq);
err == NOERR && sr.get("CODICE") == m.get(F_CODICE);
err = sr.next())
{
int tipo = sr.get_int("TIPO");
data = sr.get_date("DATASPED");
if (tipo >= m.get_int(F_TIPO) && data <= dmsk)
{
error_box("Sollecito di grado inferiore ad uno precedente (%s, grado %d)",
(const char*)data.string(), tipo);
ok = FALSE;
break;
}
}
_rel->restore_status();
if (ok) return TRelation_application::write(m);
return ok;
}
int sc1300(int argc, char** argv)
{
SollecitiStorici_app a;
a.run(argc, argv, "Archivio Storico Solleciti");
return 0;
}