Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 01.05 patch 648 git-svn-id: svn://10.65.10.50/trunk@8633 c028cbd2-c16b-5b4b-a496-9718f37d4682
230 lines
6.0 KiB
C++
Executable File
230 lines
6.0 KiB
C++
Executable File
#include <applicat.h>
|
||
#include <msksheet.h>
|
||
#include <relation.h>
|
||
#include <sheet.h>
|
||
#include <utility.h>
|
||
|
||
#include "ef0.h"
|
||
#include "ef0101.h"
|
||
#include "ef0400.h"
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
//Classe per l'eliminazione di effetti di effetti con selezione per gruppi //
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
class TEliminazione_effetti: public TSkeleton_application
|
||
{
|
||
TMask *_msk;
|
||
TRelation *_rel;
|
||
TLocalisamfile *_reff, *_cession;
|
||
TRectype *_from, *_to;
|
||
virtual bool create() ;
|
||
virtual bool destroy() ;
|
||
virtual void main_loop();
|
||
protected:
|
||
static bool from_numero_handler(TMask_field& f, KEY k);
|
||
static bool to_numero_handler(TMask_field& f, KEY k);
|
||
static bool from_data_handler(TMask_field& f, KEY k);
|
||
static bool to_data_handler(TMask_field& f, KEY k);
|
||
static bool conferma_handler(TMask_field& f, KEY k);
|
||
static bool annulla_handler(TMask_field& f, KEY k);
|
||
static void elimina();
|
||
public:
|
||
TEliminazione_effetti() {};
|
||
virtual ~TEliminazione_effetti() {};
|
||
};
|
||
|
||
// restituisce un riferimento all' applicazione
|
||
inline TEliminazione_effetti& app(){return (TEliminazione_effetti&)main_app();}
|
||
|
||
// crea l'applicazione
|
||
bool TEliminazione_effetti::create()
|
||
{
|
||
_msk = new TMask("ef0400a");
|
||
_rel = new TRelation(LF_EFFETTI);
|
||
_reff = new TLocalisamfile(LF_REFFETTI);
|
||
_cession = new TLocalisamfile(LF_CESS);
|
||
_rel->first();
|
||
_from = new TRectype(_rel->lfile().curr());
|
||
_rel->last();
|
||
_to = new TRectype(_rel->lfile().curr());
|
||
_msk->set_handler(F_DA_RIBA, from_numero_handler);
|
||
_msk->set_handler(F_A_RIBA, to_numero_handler);
|
||
_msk->set_handler(F_DA_DATA, from_data_handler);
|
||
_msk->set_handler(F_A_DATA, to_data_handler);
|
||
_msk->set_handler(DLG_OK, conferma_handler);
|
||
_msk->set_handler(DLG_CANCEL, annulla_handler);
|
||
return TSkeleton_application::create();
|
||
}
|
||
|
||
// distrugge l'applicazione
|
||
bool TEliminazione_effetti::destroy()
|
||
{
|
||
delete _msk;
|
||
delete _rel;
|
||
delete _reff;
|
||
delete _cession;
|
||
delete _from;
|
||
delete _to;
|
||
return TRUE;
|
||
}
|
||
|
||
//Carica maschera eliminazione effetti
|
||
void TEliminazione_effetti::main_loop()
|
||
{
|
||
KEY key = K_ENTER;
|
||
while (key != K_QUIT)//finch<63> non si chiude la maschera
|
||
{
|
||
_msk->reset();
|
||
key = _msk->run();
|
||
}
|
||
}
|
||
|
||
//Handler per la gestione della prima chiave (from) del cursore per numero
|
||
bool TEliminazione_effetti::from_numero_handler(TMask_field& f, KEY k)
|
||
{
|
||
TMask &m = f.mask();
|
||
if (k == K_TAB)
|
||
{
|
||
if (!f.get().empty())// se il campo non <20> vuoto
|
||
{
|
||
TRectype* from = app()._from;
|
||
long num = m.get_long(F_DA_RIBA);
|
||
from->put(EFF_NPROGTR, num);
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
//Handler per la gestione della seconda chiave (to) del cursore per numero
|
||
bool TEliminazione_effetti::to_numero_handler(TMask_field& f, KEY k)
|
||
{
|
||
TMask &m = f.mask();
|
||
if (k == K_TAB)
|
||
{
|
||
if (!f.get().empty())// se il campo non <20> vuoto
|
||
{
|
||
TRectype* to = app()._to;
|
||
long num = m.get_long(F_A_RIBA);
|
||
to->put(EFF_NPROGTR, num);
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
//Handler per la gestione della prima chiave (from) del cursore per data
|
||
bool TEliminazione_effetti::from_data_handler(TMask_field& f, KEY k)
|
||
{
|
||
TMask &m = f.mask();
|
||
if (k == K_TAB)
|
||
{
|
||
if (!f.get().empty())// se il campo non <20> vuoto
|
||
{
|
||
TRectype* from = app()._from;
|
||
TDate data = m.get(F_DA_DATA);
|
||
long num = m.get_long(F_DA_RIBA);
|
||
from->put(EFF_NPROGTR, num);
|
||
from->put(EFF_DATASCAD, data);
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
//Handler per la gestione della seconda chiave (to) del cursore per numero
|
||
bool TEliminazione_effetti::to_data_handler(TMask_field& f, KEY k)
|
||
{
|
||
TMask &m = f.mask();
|
||
if (k == K_TAB)
|
||
{
|
||
if (!f.get().empty())// se il campo non <20> vuoto
|
||
{
|
||
TRectype* to = app()._to;
|
||
TDate data = m.get(F_A_DATA);
|
||
long num = m.get_long(F_A_RIBA);
|
||
to->put(EFF_NPROGTR, num);
|
||
to->put(EFF_DATASCAD, data);
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
// Si effettua l'istanziazione del cursore e si eliminano gli effetti che vi
|
||
// appartengono
|
||
void TEliminazione_effetti::elimina()
|
||
{
|
||
const TRectype *from = app()._from;
|
||
const TRectype *to = app()._to;
|
||
TMask *m = app()._msk;
|
||
TRelation *rel = app()._rel;
|
||
TString filter;
|
||
|
||
int key;
|
||
char op1 = m->get(F_TIPOSEL)[0];
|
||
char op2 = m->get(F_TIPODIST)[0];
|
||
char op3 = m->get(F_TIPOCANC)[0];
|
||
switch (op1) //scelgo la chiave per il cursore
|
||
{
|
||
case 'N': //selezione effetti per numero
|
||
key = 1;
|
||
break;
|
||
case 'D': //selezione effetti per data
|
||
key = 3;
|
||
break;
|
||
}
|
||
//scelgo il filtro per il cursore
|
||
filter << "(TIPOCF=\"" << op2 << "\")";
|
||
if (op2 == 'C')
|
||
filter << "||(TIPOCF=\"\")";
|
||
switch (op3)
|
||
{
|
||
case 'S': //cancello effetti stampati
|
||
filter << "&&(EFFSTAMP=\"X\")";
|
||
break;
|
||
case 'C': //cancello effetti contabilizzati
|
||
filter << "&&(EFFCONT=\"X\")";
|
||
break;
|
||
default : //cancello tutti gli effetti
|
||
break;
|
||
}
|
||
TCursor cur(rel,filter,key,from,to); // istanzio il cursore
|
||
TLocalisamfile& delfile = cur.file();// prendo un riferimento al file
|
||
long n = cur.items();// prendo il numero di elementi del cursore
|
||
cur.freeze();// congelo lo stato del cursore
|
||
for (cur=0; cur.pos() < n; ++cur)// scandisco tutti gli elementi del cursore
|
||
{
|
||
TEffetto eff(delfile.curr());// istanzio un effetto
|
||
eff.remove(delfile); // e lo cancello
|
||
}
|
||
}
|
||
|
||
//Handler per gestire la conferma della cancellazione degli effetti
|
||
bool TEliminazione_effetti::conferma_handler(TMask_field& f, KEY k)
|
||
{
|
||
TMask &m = f.mask();
|
||
if (k == K_SPACE)
|
||
{
|
||
if (yesno_box("Si desidera veramente eliminare gli effetti selezionati"))
|
||
elimina();
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
// Handler per gestire la conferma dell'annullamento dei dati
|
||
// inseriti nella maschera
|
||
bool TEliminazione_effetti::annulla_handler(TMask_field& f, KEY k)
|
||
{
|
||
TMask &m = f.mask();
|
||
if (k == K_SPACE)
|
||
{
|
||
if (yesno_box("Si desidera veramente annullare i dati inseriti"))
|
||
m.reset();
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
int ef0400(int argc, char* argv[])
|
||
{
|
||
TEliminazione_effetti a ;
|
||
a.run(argc, argv, "Eliminazione Effetti");
|
||
return 0;
|
||
}
|