1996-07-29 10:56:41 +00:00
|
|
|
// quadn_t.cpp
|
|
|
|
#include <relapp.h>
|
|
|
|
#include <config.h>
|
1997-06-18 09:52:29 +00:00
|
|
|
|
1996-07-29 10:56:41 +00:00
|
|
|
#include "774200.h"
|
|
|
|
#include "77lib.h"
|
|
|
|
#include "quadron.h"
|
|
|
|
#include "77qn.h"
|
|
|
|
#include "77qq.h"
|
|
|
|
#include "77qp.h"
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
#define CODDITTA77 181
|
|
|
|
#define ANNODIC77 182
|
1996-07-29 10:56:41 +00:00
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
class TQuadriNT_app : public TRelation_application
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
static bool nprog_handler (TMask_field& m, KEY k);
|
|
|
|
static bool anno_handler (TMask_field& m, KEY k);
|
|
|
|
static bool mese_handler (TMask_field& f, KEY k);
|
|
|
|
static bool codreg_handler (TMask_field& f, KEY k);
|
|
|
|
static bool codtrib_handler (TMask_field& f, KEY k);
|
|
|
|
static bool tipo (TMask_field& f , KEY k);
|
|
|
|
static bool luogo (TMask_field& f , KEY k);
|
1997-06-18 09:52:29 +00:00
|
|
|
TString16 _maskname;
|
1996-07-29 10:56:41 +00:00
|
|
|
int _num;
|
1997-06-18 09:52:29 +00:00
|
|
|
int _pos_quadro; // posizione nell'array dei quadri. Usato in set_comp
|
1996-07-29 10:56:41 +00:00
|
|
|
TString16 _quadro;
|
|
|
|
TRiporti _rip;
|
|
|
|
TRelation* _rel;
|
|
|
|
TMask* _msk;
|
|
|
|
bool _registra;
|
1997-06-18 09:52:29 +00:00
|
|
|
int _anno_dic;
|
|
|
|
bool _MaskConAnnoDic, _MaskConCodditta;
|
|
|
|
bool MaskConAnnoDic() const;
|
|
|
|
bool MaskConCodditta() const { return _MaskConCodditta; }
|
|
|
|
void LeggiMask();
|
|
|
|
bool EsisteUnRec();
|
|
|
|
bool QuadroNoR() const { return _num == LF_QUAN || _num == LF_QUAR; }
|
|
|
|
bool QuadroPoS() const { return _num == LF_QUAP || _num == LF_QUAS; }
|
|
|
|
bool QuadroQoT() const { return _num == LF_QUAQ || _num == LF_QUAT; }
|
|
|
|
bool CheckImporti(const TMask& m);
|
|
|
|
long Get_newprog();
|
|
|
|
long _codditta;
|
1997-01-15 14:38:42 +00:00
|
|
|
|
1996-07-29 10:56:41 +00:00
|
|
|
protected:
|
|
|
|
virtual bool user_create();
|
|
|
|
virtual bool user_destroy();
|
|
|
|
virtual int rewrite(const TMask& m);
|
|
|
|
virtual int write (const TMask& m);
|
|
|
|
virtual bool remove();
|
|
|
|
virtual void on_config_change();
|
|
|
|
virtual TMask* get_mask(int) { return _msk; }
|
|
|
|
virtual bool changing_mask(int) { return FALSE;}
|
|
|
|
virtual TRelation* get_relation() const { return _rel; }
|
|
|
|
virtual void init_mask(TMask&);
|
|
|
|
virtual void init_query_mode(TMask&);
|
|
|
|
virtual void init_insert_mode(TMask&);
|
|
|
|
virtual void init_query_insert_mode(TMask&);
|
1997-06-18 09:52:29 +00:00
|
|
|
|
|
|
|
void set_data_cong(const TMask& m);
|
|
|
|
|
1996-07-29 10:56:41 +00:00
|
|
|
public:
|
1997-06-18 09:52:29 +00:00
|
|
|
TQuadriNT_app(char quadro);
|
|
|
|
virtual ~TQuadriNT_app() { }
|
1996-07-29 10:56:41 +00:00
|
|
|
};
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
TQuadriNT_app::TQuadriNT_app(char quadro)
|
|
|
|
: _MaskConCodditta(FALSE), _MaskConAnnoDic(FALSE), _msk(NULL), _rel(NULL)
|
|
|
|
{
|
|
|
|
_quadro << quadro;
|
|
|
|
|
|
|
|
_maskname << "77q" << quadro;
|
|
|
|
_maskname.lower();
|
|
|
|
|
|
|
|
switch (quadro)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
1997-06-18 09:52:29 +00:00
|
|
|
case 'N': _num = LF_QUAN; _pos_quadro = N; break;
|
|
|
|
case 'P': _num = LF_QUAP; _pos_quadro = P; break;
|
|
|
|
case 'Q': _num = LF_QUAQ; _pos_quadro = Q; break;
|
|
|
|
case 'R': _num = LF_QUAR; _pos_quadro = R; break;
|
|
|
|
case 'S': _num = LF_QUAS; _pos_quadro = S; break;
|
|
|
|
case 'T': _num = LF_QUAT; _pos_quadro = T; break;
|
|
|
|
default : fatal_box("Codice quadro errato"); break;
|
1996-07-29 10:56:41 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
TQuadriNT_app& app() { return (TQuadriNT_app&)main_app(); }
|
1996-07-29 10:56:41 +00:00
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
void TQuadriNT_app::LeggiMask()
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
_MaskConAnnoDic = _msk->id2pos(ANNODIC77) > 0;
|
|
|
|
_MaskConCodditta = _msk->id2pos(CODDITTA77) > 0;
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::MaskConAnnoDic() const
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
return _MaskConAnnoDic;
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
void TQuadriNT_app::on_config_change()
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
TConfig conf(CONFIG_STUDIO);
|
|
|
|
_anno_dic = (int)conf.get_long(ANNO_SEL, NULL, -1, TDate(TODAY).year());
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::user_create()
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
_msk = new TMask(_maskname);
|
|
|
|
_rel = new TRelation(_num);
|
1997-01-15 14:38:42 +00:00
|
|
|
_codditta = get_firm_770();
|
|
|
|
_msk->set_handler(QNF_NPROG, nprog_handler);
|
|
|
|
_msk->field(CODDITTA77).set(_codditta);
|
|
|
|
|
1996-07-29 10:56:41 +00:00
|
|
|
if (QuadroNoR())
|
|
|
|
{
|
|
|
|
_msk->set_handler(QNF_ANNORIF, anno_handler);
|
|
|
|
_msk->set_handler(QNF_MESERIF, mese_handler);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (QuadroQoT())
|
|
|
|
{
|
|
|
|
_msk->set_handler(QNF_ANNORIF, anno_handler);
|
|
|
|
_msk->set_handler(QNF_MESERIF, mese_handler);
|
|
|
|
_msk->set_handler(QQF_CODREG, codreg_handler);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (QuadroPoS())
|
|
|
|
_msk->set_handler(QPF_CODTRIB, codtrib_handler);
|
|
|
|
|
|
|
|
_registra = FALSE;
|
|
|
|
set_search_field(QNF_NPROG);
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::EsisteUnRec()
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
TLocalisamfile qn(_num);
|
1997-06-18 09:52:29 +00:00
|
|
|
qn.put(QN_CODDITTA, _codditta);
|
|
|
|
int err = qn.read(_isgteq);
|
|
|
|
bool yes = err == NOERR && qn.get_long(QN_CODDITTA) == _codditta;
|
|
|
|
return yes;
|
1996-07-29 10:56:41 +00:00
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::user_destroy()
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
if (_quadro != "")
|
|
|
|
if (_registra)
|
|
|
|
_rip.set_compilato(_codditta, _pos_quadro, EsisteUnRec());
|
|
|
|
delete _msk;
|
|
|
|
delete _rel;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Controlla che ci siano o l'imposta o i compensi
|
|
|
|
// NB che siano uguali QNF_IMPOSTA anche nei corrispondenti campi dei
|
|
|
|
// quadri Q, R e T (107 e 106)
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::CheckImporti(const TMask& m)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
1997-06-18 09:52:29 +00:00
|
|
|
const real impost(m.get(QNF_IMPOSTA));
|
|
|
|
const real compen(m.get(QNF_COMPENSI));
|
|
|
|
return impost != 0.0 || compen != 0.0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TQuadriNT_app::set_data_cong(const TMask& m)
|
|
|
|
{
|
|
|
|
const char q = _quadro[0];
|
|
|
|
if (q == 'P' || q == 'S')
|
|
|
|
{
|
|
|
|
const int mese = m.get_int(QPF_MESECON);
|
|
|
|
((TMask&)m).set(QPF_DATACON, TDate(1, mese, q == 'P' ? 1996 : 1997));
|
|
|
|
}
|
1996-07-29 10:56:41 +00:00
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
int TQuadriNT_app::rewrite(const TMask& m)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
1997-06-18 09:52:29 +00:00
|
|
|
set_data_cong(m);
|
|
|
|
const int err = TRelation_application::rewrite(m);
|
1996-07-29 10:56:41 +00:00
|
|
|
_registra = err == NOERR;
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
int TQuadriNT_app::write(const TMask& m)
|
|
|
|
{
|
|
|
|
set_data_cong(m);
|
|
|
|
const int err = TRelation_application::write(m);
|
1996-07-29 10:56:41 +00:00
|
|
|
_registra = err == NOERR;
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::remove()
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
1997-06-18 09:52:29 +00:00
|
|
|
const bool ok = TRelation_application::remove();
|
|
|
|
_registra = ok;
|
|
|
|
return ok;
|
1996-07-29 10:56:41 +00:00
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
void TQuadriNT_app::init_mask(TMask& m)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
m.set(ANNODIC77, _anno_dic);
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
void TQuadriNT_app::init_query_mode(TMask& m)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
init_mask(m);
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
void TQuadriNT_app::init_insert_mode(TMask& m)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
1997-06-18 09:52:29 +00:00
|
|
|
init_mask(m);
|
1996-07-29 10:56:41 +00:00
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
void TQuadriNT_app::init_query_insert_mode(TMask& m)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
1997-06-18 09:52:29 +00:00
|
|
|
init_insert_mode(m);
|
|
|
|
m.set(QNF_NPROG, Get_newprog());
|
1997-01-15 14:38:42 +00:00
|
|
|
m.send_key(K_TAB,QNF_NPROG);
|
1996-07-29 10:56:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
// 2 modi :
|
|
|
|
// RUN,773,-1,771230m,89,"Prospetto del Quadro E1","E1" [771230i.uml]
|
|
|
|
// oppure
|
|
|
|
// 773 -1 menu_st "Stampe dichiarazioni" [prassi.mnu]
|
|
|
|
// QUADRO N:
|
|
|
|
// 773,-2,77qn,72,"Quadro N","N"
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
int quadriN_T(int argc, char* argv[])
|
1997-06-18 09:52:29 +00:00
|
|
|
{
|
|
|
|
TApplication::check_parameters(argc, argv);
|
|
|
|
|
|
|
|
char quadro = 'N';
|
|
|
|
if (argc > 5)
|
|
|
|
quadro = toupper(*argv[5]);
|
|
|
|
else
|
|
|
|
quadro = toupper(*argv[2]);
|
|
|
|
|
|
|
|
TString16 title;
|
|
|
|
title << "Quadro " << quadro;
|
|
|
|
|
|
|
|
TQuadriNT_app a(quadro);
|
|
|
|
a.run(argc, argv, title);
|
1996-07-29 10:56:41 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::anno_handler(TMask_field& f, KEY k)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
TMask& m = f.mask();
|
|
|
|
if (k == K_ENTER && (modifica(m) || inserimento(m)) )
|
|
|
|
{
|
|
|
|
TString dep(f.get());
|
|
|
|
if (dep.empty())
|
|
|
|
return f.warning_box("Manca l'anno");
|
|
|
|
else
|
|
|
|
if (!app().CheckImporti(m))
|
|
|
|
return f.warning_box("Manca almeno un importo");
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::mese_handler(TMask_field& f, KEY k)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
TMask& m = f.mask();
|
|
|
|
if (k == K_ENTER && (modifica(m) || inserimento(m)) )
|
|
|
|
{
|
|
|
|
TString dep(f.get());
|
|
|
|
if (dep.empty())
|
|
|
|
return f.warning_box("Manca il mese");
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Per i Quadri Q e T
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::codreg_handler(TMask_field& f, KEY k)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
TMask& m = f.mask();
|
|
|
|
if (k == K_ENTER && (modifica(m) || inserimento(m)) )
|
|
|
|
{
|
|
|
|
TString dep(f.get());
|
|
|
|
if (dep.empty())
|
|
|
|
return f.warning_box("Manca il codice regione");
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Per i Quadri P e S. Codice tributo REQUIRED
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::codtrib_handler(TMask_field& f, KEY k)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
TMask& m = f.mask();
|
|
|
|
if (k == K_ENTER && (modifica(m) || inserimento(m)) )
|
|
|
|
{
|
|
|
|
TString dep(f.get());
|
|
|
|
if (dep.empty())
|
|
|
|
return f.warning_box("Manca il codice tributo");
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::nprog_handler(TMask_field& f, KEY k)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
1997-01-15 14:38:42 +00:00
|
|
|
if (k == K_TAB)
|
1997-06-18 09:52:29 +00:00
|
|
|
f.set_dirty();
|
1996-07-29 10:56:41 +00:00
|
|
|
return TRUE;
|
1997-01-15 14:38:42 +00:00
|
|
|
}
|
1996-07-29 10:56:41 +00:00
|
|
|
|
1997-01-15 14:38:42 +00:00
|
|
|
// ritorna nuovo progressivo da utilizzare
|
1997-06-18 09:52:29 +00:00
|
|
|
long TQuadriNT_app::Get_newprog()
|
1997-01-15 14:38:42 +00:00
|
|
|
{
|
1997-06-18 09:52:29 +00:00
|
|
|
long nprog = 0L;
|
|
|
|
TLocalisamfile qnr(_num);
|
|
|
|
qnr.zero();
|
|
|
|
qnr.put(QN_CODDITTA, _codditta);
|
|
|
|
TRectype dep(qnr.curr());
|
|
|
|
for (qnr.read(_isgteq); !qnr.eof(); qnr.next())
|
|
|
|
{
|
|
|
|
if (qnr.curr() > dep) break;
|
|
|
|
nprog = qnr.get_long(QN_NPROG);
|
|
|
|
}
|
|
|
|
return ++nprog;
|
1997-01-15 14:38:42 +00:00
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::tipo(TMask_field& f , KEY k)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
if (k == K_SPACE)
|
|
|
|
{
|
|
|
|
char tipo = f.mask().get(F_QLTIPOVERS)[0];
|
|
|
|
char luogo = f.mask().get(F_QLLUOVERS)[0];
|
|
|
|
|
|
|
|
if (tipo == 'D' && luogo == 'T')
|
|
|
|
f.mask().hide(F_QLSERIE);
|
|
|
|
else
|
|
|
|
f.mask().show(F_QLSERIE);
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
1997-06-18 09:52:29 +00:00
|
|
|
bool TQuadriNT_app::luogo(TMask_field& f , KEY k)
|
1996-07-29 10:56:41 +00:00
|
|
|
{
|
|
|
|
/*
|
|
|
|
if (k == K_SPACE)
|
|
|
|
{
|
|
|
|
char tipo = f.mask().get(F_QLTIPOVERS)[0];
|
|
|
|
char luogo = f.mask().get(F_QLLUOVERS)[0];
|
|
|
|
|
|
|
|
if (tipo == 'D' && luogo == 'T')
|
|
|
|
f.mask().hide(F_QLSERIE);
|
|
|
|
else
|
|
|
|
f.mask().show(F_QLSERIE);
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|