campo-sirio/m770/775100.cpp

159 lines
3.7 KiB
C++
Raw Normal View History

// 775100.cpp - Gestione archivio percipienti
#include <relapp.h>
#include <config.h>
#include "77lib.h"
#include "775100a.h"
class TGestionePercipienti : public TRelation_application
{
private:
TRelation* _rel;
TMask* _msk;
long _codditta;
char _tipoa;
long _codanagr;
bool _auto_posiz, _deleted;
int _anno_dic;
protected:
virtual void on_config_change();
virtual void init_query_mode(TMask& m);
virtual void init_modify_mode(TMask& m);
void init_mask(TMask& m);
virtual bool user_create();
virtual bool user_destroy();
virtual TRelation* get_relation() const { return _rel; }
virtual TMask* get_mask(int mode) { return _msk; }
virtual bool changing_mask(int mode) { return FALSE; }
virtual bool remove();
static bool codditta_handler(TMask_field& f, KEY k);
public:
TGestionePercipienti(const long codditta=0L, const char tipoa='\0', const long codanagr=0L);
virtual ~TGestionePercipienti() {};
};
inline TGestionePercipienti& app() { return (TGestionePercipienti&) main_app(); }
bool TGestionePercipienti::remove()
{
bool ok1 = FALSE, ok2 = FALSE, ha_schede = FALSE;
int err;
TPercipiente perc(_rel->curr());
ha_schede = perc.esiste_scheda();
if (ha_schede)
ok1 = yesno_box("Esistono in archivio delle schede riguardanti il percipiente selezionato\nEliminare ugualmente?");
if (!ok1)
return TRUE;
err = _rel->remove();
// Non ri-compilare i dati in init_query_mode()
_deleted = TRUE;
if (err != NOERR)
return TRUE;
if (ha_schede)
{
ok2 = yesno_box("Eliminare anche le schede collegate?");
err = perc.elimina_schede();
}
return TRUE;
}
void TGestionePercipienti::init_mask(TMask& m)
{
TString16 tipo;
m.set(F_ANNODIC, _anno_dic);
tipo << _tipoa;
m.set(F_TIPOA, tipo);
}
void TGestionePercipienti::init_query_mode(TMask& m)
{
init_mask(m);
if (_auto_posiz && !_deleted)
{
TString16 dit, tipo, coda;
dit << _codditta;
tipo << _tipoa;
coda << _codanagr;
m.set(F_CODDITTA, dit);
m.set(F_TIPOA, tipo);
m.set(F_CODANAGR, coda);
m.send_key(K_AUTO_ENTER, 0);
}
}
void TGestionePercipienti::init_modify_mode(TMask& m)
{
init_mask(m);
}
TGestionePercipienti::TGestionePercipienti(const long codditta, const char tipoa, const long codanagr)
: _codditta(codditta), _tipoa(tipoa), _codanagr(codanagr), _auto_posiz(FALSE)
{
_auto_posiz = _codanagr != 0L;
_deleted = FALSE;
}
void TGestionePercipienti::on_config_change()
{
TConfig conf(CONFIG_STUDIO);
_anno_dic = (int)conf.get_long(ANNO_SEL, NULL);
}
bool TGestionePercipienti::codditta_handler(TMask_field& f, KEY k)
{
if (k == K_TAB && !(f.mask().is_running()) )
{
TString16 codditta; codditta << app()._codditta;
if (codditta != "0")
{
f.set(codditta);
f.check();
}
}
return TRUE;
}
bool TGestionePercipienti::user_create()
{
_rel = new TRelation(LF_PERC);
_msk = new TMask("775100a");
if (!_auto_posiz)
_codditta = get_firm_770();
_msk->set_handler(F_CODDITTA, codditta_handler);
set_search_field(F_CODANAGR);
return TRUE;
}
bool TGestionePercipienti::user_destroy()
{
delete _rel; delete _msk;
return TRUE;
}
// 775 -0 10001 F 10
int GestPerc(int argc, char* argv[])
{
long codditta = 0L;
char tipoa = 'F';
long codanagr = 0L;
if (argc >= 5)
{
codditta = atol(argv[2]);
tipoa = *argv[3];
codanagr = atol(argv[4]);
}
TGestionePercipienti a(codditta, tipoa, codanagr);
a.run(argc, argv, "Gestione percipienti");
return 0;
}