435 lines
11 KiB
C++
Executable File
435 lines
11 KiB
C++
Executable File
#include <relapp.h>
|
|
#include <defmask.h>
|
|
#include <pconti.h>
|
|
#include <saldi.h>
|
|
|
|
#include "cg0.h"
|
|
#include "cg0100.h"
|
|
|
|
#define ATTIVITA 1
|
|
#define PASSIVITA 2
|
|
#define COSTI 3
|
|
#define RICAVI 4
|
|
#define ORDINE 5
|
|
|
|
class CG0100_application : public TRelation_application
|
|
{
|
|
TMask* _msk;
|
|
TRelation *_rel;
|
|
TLocalisamfile* _saldi;
|
|
TLocalisamfile* _tabcom;
|
|
bool _pcon_com;
|
|
|
|
bool user_create();
|
|
bool user_destroy();
|
|
virtual TMask* get_mask(int mode) {return _msk;}
|
|
virtual bool changing_mask(int mode) {return FALSE;}
|
|
virtual bool protected_record(TRectype &rec);
|
|
virtual void init_query_mode(TMask& m);
|
|
virtual void init_insert_mode(TMask& m);
|
|
virtual void init_modify_mode(TMask& m) {init_insert_mode(m);}
|
|
virtual int write(const TMask& m);
|
|
virtual int rewrite(const TMask & m);
|
|
virtual int read(TMask& m);
|
|
virtual void on_firm_change();
|
|
|
|
public:
|
|
virtual TRelation* get_relation() const {return _rel;}
|
|
CG0100_application() : _pcon_com(FALSE) {}
|
|
};
|
|
HIDDEN inline CG0100_application & app() { return (CG0100_application &) main_app();}
|
|
|
|
|
|
int CG0100_application::read(TMask& m)
|
|
|
|
{
|
|
const TRelation *r = get_relation();
|
|
m.autoload(r);
|
|
if (m.get(FLD_CM1_LETTIVD).empty())
|
|
{
|
|
int sezivd = m.get_int(FLD_CM1_SEZIVD);
|
|
if (sezivd == 1 || sezivd == 2)
|
|
m.set(FLD_CM1_SEZIVD, sezivd + 5);
|
|
}
|
|
if (m.get(FLD_CM1_LETTIVDOPP).empty())
|
|
{
|
|
int sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
|
|
if (sezivd == 1 || sezivd == 2)
|
|
m.set(FLD_CM1_SEZIVDOPP, sezivd + 5);
|
|
}
|
|
return NOERR;
|
|
}
|
|
|
|
int CG0100_application::rewrite(const TMask& m)
|
|
|
|
{
|
|
TRelation *r = get_relation();
|
|
|
|
m.autosave(r);
|
|
int sezivd = m.get_int(FLD_CM1_SEZIVD);
|
|
TString16 sez;
|
|
|
|
if (sezivd == 6 || sezivd == 7)
|
|
{
|
|
sez.format("%d", sezivd - 5);
|
|
r->lfile().put(PCN_SEZIVD, sez);
|
|
}
|
|
sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
|
|
if (sezivd == 6 || sezivd == 7)
|
|
{
|
|
sez.format("%d", sezivd - 5);
|
|
r->lfile().put(PCN_SEZIVDOPP, sez);
|
|
}
|
|
const int err = r->rewrite();
|
|
if (err == NOERR)
|
|
{
|
|
const long sottoconto = m.get_long(FLD_CM1_SOTTOCONTO);
|
|
if (sottoconto == 0)
|
|
{
|
|
const TString16 cod_anbi(m.get(FLD_CM1_CODTABANALISI));
|
|
|
|
if (cod_anbi.not_empty())
|
|
{
|
|
r->save_status();
|
|
TLocalisamfile & pcon = r->lfile();
|
|
TRectype rec_pcon(r->curr()) ;
|
|
|
|
rec_pcon.zero();
|
|
rec_pcon.put(PCN_GRUPPO, m.get(FLD_CM1_GRUPPO));
|
|
rec_pcon.put(PCN_CONTO, m.get(FLD_CM1_CONTO));
|
|
pcon.curr() = rec_pcon;
|
|
for (pcon.read(_isgreat, _lock); pcon.good() && pcon.curr() <= rec_pcon; pcon.next(_lock))
|
|
{
|
|
if (pcon.get(PCN_CODCBL).not_empty())
|
|
{
|
|
pcon.zero(PCN_CODCBL);
|
|
pcon.rewrite();
|
|
}
|
|
}
|
|
r->restore_status();
|
|
}
|
|
}
|
|
}
|
|
return err;
|
|
}
|
|
|
|
int CG0100_application::write(const TMask& m)
|
|
|
|
{
|
|
TRelation *r = get_relation();
|
|
TString16 sez;
|
|
|
|
m.autosave(r);
|
|
int sezivd = m.get_int(FLD_CM1_SEZIVD);
|
|
|
|
if (sezivd == 6 || sezivd == 7)
|
|
{
|
|
sez.format("%d", sezivd - 5);
|
|
r->lfile().put(PCN_SEZIVD, sez);
|
|
}
|
|
sezivd = m.get_int(FLD_CM1_SEZIVDOPP);
|
|
if (sezivd == 6 || sezivd == 7)
|
|
{
|
|
sez.format("%d", sezivd - 5);
|
|
r->lfile().put(PCN_SEZIVDOPP, sez);
|
|
}
|
|
return r->write();
|
|
}
|
|
|
|
// Controlla se puo' essere effettuata la cancellazione di un conto
|
|
void CG0100_application::on_firm_change()
|
|
{
|
|
TDir d;
|
|
d.get(LF_PCON, _nolock, _nordir, _sysdirop);
|
|
_pcon_com = d.is_com();
|
|
}
|
|
|
|
bool CG0100_application::protected_record(TRectype &rec)
|
|
{
|
|
if (_pcon_com ) return TRUE;
|
|
TMask* m = get_mask(MODE_MOD);
|
|
TLocalisamfile& pconti = _rel->lfile();
|
|
const int gruppo = atoi(m->get(FLD_CM1_GRUPPO));
|
|
const int conto = atoi(m->get(FLD_CM1_CONTO));
|
|
const long sottoc = atol(m->get(FLD_CM1_SOTTOCONTO));
|
|
|
|
// Se e' un sottoconto posso cancellarlo se non esistono saldi
|
|
if ((gruppo != 0) && (conto != 0) && (sottoc != 0))
|
|
{
|
|
_saldi->zero();
|
|
_saldi->put(PCN_GRUPPO, gruppo);
|
|
_saldi->put(PCN_CONTO, conto);
|
|
_saldi->put(PCN_SOTTOCONTO, sottoc);
|
|
_saldi->read(_isgteq);
|
|
bool ok = FALSE;
|
|
|
|
if (_saldi->good())
|
|
ok = _saldi->get_real(SLD_SALDO) != ZERO ||
|
|
_saldi->get_real(SLD_PDARE) != ZERO ||
|
|
_saldi->get_real(SLD_PAVERE) != ZERO ||
|
|
_saldi->get_real(SLD_PDARESCA) != ZERO ||
|
|
_saldi->get_real(SLD_PAVERESCA) != ZERO ||
|
|
_saldi->get_real(SLD_PDAREPRO) != ZERO ||
|
|
_saldi->get_real(SLD_PAVEREPRO) != ZERO;
|
|
return ok && gruppo ==_saldi->get_int(PCN_GRUPPO) &&
|
|
conto ==_saldi->get_int(PCN_CONTO) &&
|
|
sottoc ==_saldi->get_long(PCN_SOTTOCONTO);
|
|
}
|
|
get_relation()->save_status();
|
|
pconti.zero() ;
|
|
pconti.put(PCN_GRUPPO, gruppo);
|
|
// Se e' un conto controllo se ha dei sottoconti
|
|
if (conto != 0)
|
|
pconti.put(PCN_CONTO, conto);
|
|
TRectype rec1(pconti.curr());
|
|
|
|
pconti.setkey(1) ;
|
|
pconti.read();
|
|
pconti.next();
|
|
const bool prot = (pconti.good() && (pconti.curr() == rec1));
|
|
get_relation()->restore_status();
|
|
return prot;
|
|
}
|
|
|
|
void CG0100_application::init_query_mode(TMask& m)
|
|
|
|
{
|
|
m.show(-1);
|
|
m.show(-2);
|
|
m.show(-3);
|
|
}
|
|
|
|
HIDDEN bool tmcf_handler(TMask_field& f, KEY key)
|
|
|
|
{
|
|
if (f.active() && key == K_SPACE)
|
|
{
|
|
TMask& m = f.mask();
|
|
const int conto = atoi(m.get(FLD_CM1_CONTO));
|
|
const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
|
|
const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
|
|
|
|
m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void CG0100_application::init_insert_mode(TMask& m)
|
|
|
|
{
|
|
const int gruppo = atoi(m.get(FLD_CM1_GRUPPO));
|
|
const int conto = atoi(m.get(FLD_CM1_CONTO));
|
|
const long sottoc = atol(m.get(FLD_CM1_SOTTOCONTO));
|
|
bool ivd_enable = TRUE;
|
|
|
|
if (conto == 0 && sottoc == 0)
|
|
m.show(-1, FALSE);
|
|
else
|
|
if (sottoc == 0)
|
|
m.show(-2, FALSE);
|
|
else
|
|
m.show(-3, FALSE);
|
|
|
|
TLocalisamfile& pconti = _rel->lfile();
|
|
TString s(15), s2(1), s3(8), s4(2);
|
|
int s1 = 0;
|
|
|
|
pconti.setkey(1) ;
|
|
|
|
int indbil = 0;
|
|
|
|
if (sottoc != 0)
|
|
{
|
|
pconti.zero();
|
|
pconti.put(PCN_GRUPPO, gruppo);
|
|
pconti.put(PCN_CONTO, conto);
|
|
pconti.read();
|
|
if (pconti.good())
|
|
{
|
|
s = pconti.get(PCN_CODCBL);
|
|
s1 = atoi(pconti.get(PCN_SEZIVD));
|
|
s2 = pconti.get(PCN_LETTIVD);
|
|
s3 = pconti.get(PCN_NUMRIVD);
|
|
s4 = pconti.get(PCN_NUMIVD);
|
|
indbil = pconti.get_int(PCN_INDBIL);
|
|
}
|
|
ivd_enable = (s1 == 0) && s2.empty() && s3.empty() && s4.empty();
|
|
}
|
|
m.show(FLD_CM1_RICSER, indbil == PASSIVITA || indbil == RICAVI);
|
|
if (conto != 0)
|
|
{
|
|
m.enable(FLD_CM1_SEZIVD, ivd_enable);
|
|
m.show(FLD_CM1_LETTIVD, ivd_enable);
|
|
m.show(FLD_CM1_NUMRIVD, ivd_enable);
|
|
m.show(FLD_CM1_NUMIVD, ivd_enable);
|
|
m.show(FLD_CM1_LETTIVDH, !ivd_enable);
|
|
m.show(FLD_CM1_NUMRIVDH, !ivd_enable);
|
|
m.show(FLD_CM1_NUMIVDH, !ivd_enable);
|
|
if (!ivd_enable)
|
|
{
|
|
m.set(FLD_CM1_SEZIVD, s1);
|
|
m.set(FLD_CM1_LETTIVDH, s2);
|
|
m.set(FLD_CM1_NUMRIVDH, s3);
|
|
m.set(FLD_CM1_NUMIVDH, s4);
|
|
m.enable(FLD_CM1_SEZIVDOPP);
|
|
}
|
|
pconti.zero();
|
|
pconti.put(PCN_GRUPPO, gruppo);
|
|
pconti.read();
|
|
if (pconti.good())
|
|
if (s.empty()) s = pconti.get(PCN_CODCBL);
|
|
}
|
|
if (s.not_empty())
|
|
{
|
|
m.set(FLD_CM1_CODANALISIH, s);
|
|
m.show(FLD_CM1_CODANALISIH);
|
|
m.hide(FLD_CM1_CODTABANALISI);
|
|
m.disable(FLD_CM1_DESCRANALISI);
|
|
}
|
|
else
|
|
{
|
|
m.show(FLD_CM1_CODTABANALISI);
|
|
m.hide(FLD_CM1_CODANALISIH);
|
|
m.enable(FLD_CM1_DESCRANALISI);
|
|
}
|
|
const bool enable_sezsaldi = (sottoc != 0) || (sottoc == 0 && conto != 0 && m.get(FLD_CM1_TMCF).not_empty());
|
|
m.show(FLD_CM2_SEZSALDI, enable_sezsaldi);
|
|
}
|
|
|
|
|
|
HIDDEN bool gruppo_handler(TMask_field& f, KEY key)
|
|
{
|
|
TMask& m = f.mask();
|
|
const int gruppo = m.get_int(FLD_CM1_GRUPPO);
|
|
const int conto = m.get_int(FLD_CM1_CONTO);
|
|
const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
|
|
|
|
if (key == K_ENTER)
|
|
{
|
|
TLocalisamfile& pconti = app().get_relation()->lfile();
|
|
if (gruppo != 0 && conto != 0)
|
|
{
|
|
pconti.zero() ;
|
|
pconti.put(PCN_GRUPPO, gruppo) ;
|
|
pconti.setkey(1) ;
|
|
pconti.read();
|
|
if (pconti.bad())
|
|
return f.warning_box ("Il gruppo non esiste");
|
|
}
|
|
}
|
|
else
|
|
if (m.query_mode() && key == K_TAB)
|
|
{
|
|
const int next = m.next_fld();
|
|
bool key_ok = TRUE;
|
|
|
|
if (sottoc > 0)
|
|
key_ok = gruppo > 0 && conto > 0;
|
|
else
|
|
if (conto > 0)
|
|
key_ok = gruppo > 0;
|
|
if (key_ok && next != DLG_NULL && next != f.dlg() &&
|
|
!m.field(next).in_key(1))
|
|
return m.stop_run(K_AUTO_ENTER);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
HIDDEN bool conto_handler(TMask_field& f, KEY key)
|
|
{
|
|
TMask& m = f.mask();
|
|
const int gruppo = m.get_int(FLD_CM1_GRUPPO);
|
|
const int conto = m.get_int(FLD_CM1_CONTO);
|
|
const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
|
|
|
|
if (key == K_ENTER)
|
|
{
|
|
TLocalisamfile& pconti = app().get_relation()->lfile();
|
|
|
|
if (gruppo != 0 && conto != 0 && sottoc != 0)
|
|
{
|
|
pconti.zero() ;
|
|
pconti.put(PCN_GRUPPO, gruppo) ;
|
|
pconti.put(PCN_CONTO, conto) ;
|
|
pconti.setkey(1) ;
|
|
pconti.read();
|
|
if (pconti.bad())
|
|
return m.field(FLD_CM1_CONTO).warning_box ("Il conto non esiste");
|
|
else
|
|
{
|
|
if (pconti.get(PCN_TMCF).not_empty())
|
|
return m.field(FLD_CM1_SOTTOCONTO).warning_box ("Non e' possibile inserire un sottoconto di un conto relativo ad un cliente/fornitore");
|
|
}
|
|
}
|
|
}
|
|
else
|
|
if (m.query_mode() && key == K_TAB)
|
|
{
|
|
const int next = m.next_fld();
|
|
bool key_ok = TRUE;
|
|
|
|
if (sottoc > 0)
|
|
key_ok = gruppo > 0 && conto > 0;
|
|
else
|
|
if (conto > 0)
|
|
key_ok = gruppo > 0;
|
|
if (key_ok && next != DLG_NULL && next != f.dlg() &&
|
|
!m.field(next).in_key(1))
|
|
return m.stop_run(K_AUTO_ENTER);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
HIDDEN bool sottoc_handler(TMask_field& f, KEY key)
|
|
{
|
|
TMask& m = f.mask();
|
|
if (m.query_mode() && key == K_TAB)
|
|
{
|
|
const int gruppo = m.get_int(FLD_CM1_GRUPPO);
|
|
const int conto = m.get_int(FLD_CM1_CONTO);
|
|
const long sottoc = m.get_long(FLD_CM1_SOTTOCONTO);
|
|
const int next = m.next_fld();
|
|
|
|
if (gruppo == 0) return TRUE;
|
|
if (sottoc != 0 && conto == 0)
|
|
return m.field(FLD_CM1_CONTO).error_box("Manca il conto");
|
|
if (next != DLG_NULL && next != f.dlg() && !m.field(next).in_key(1))
|
|
return m.stop_run(K_AUTO_ENTER);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool CG0100_application::user_create()
|
|
{
|
|
_msk = new TMask("cg0100a") ;
|
|
_msk->set_handler(FLD_CM1_GRUPPO, gruppo_handler);
|
|
_msk->set_handler(FLD_CM1_CONTO, conto_handler);
|
|
_msk->set_handler(FLD_CM1_SOTTOCONTO, sottoc_handler);
|
|
_msk->set_handler(FLD_CM1_TMCF, tmcf_handler);
|
|
|
|
_rel = new TRelation(LF_PCON);
|
|
_saldi = new TLocalisamfile(LF_SALDI);
|
|
_saldi->setkey(2);
|
|
set_search_field(FLD_CM1_GRUPPO);
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
bool CG0100_application::user_destroy()
|
|
{
|
|
delete _msk;
|
|
delete _rel;
|
|
delete _saldi;
|
|
return TRUE;
|
|
}
|
|
|
|
int cg0100(int argc, char* argv[])
|
|
{
|
|
CG0100_application a ;
|
|
a.run(argc, argv, "Piano dei conti");
|
|
return 0;
|
|
}
|