Patch level : 10.0

Files correlati     : cg0
Ricompilazione Demo : [ ]
Commento            :
Migliorato controllo di protezione dalla cancellazione dei sottoconti


git-svn-id: svn://10.65.10.50/trunk@17360 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2008-10-07 09:09:01 +00:00
parent ade0661ad8
commit f25b2776e7

View File

@ -1,6 +1,5 @@
#include <recarray.h>
#include <relapp.h>
#include <defmask.h>
#include "cg0.h"
#include "cg0100.h"
@ -8,17 +7,12 @@
#include <pconti.h>
#include <saldi.h>
#define ATTIVITA 1
#define PASSIVITA 2
#define COSTI 3
#define RICAVI 4
#define ORDINE 5
enum TIndicatore_bilancio { ATTIVITA=1, PASSIVITA, COSTI, RICAVI, ORDINE };
class TPianoconti_app : public TRelation_application
{
TMask* _msk;
TRelation *_rel;
bool _pcon_com;
bool user_create();
bool user_destroy();
@ -31,22 +25,18 @@ class TPianoconti_app : public TRelation_application
virtual int write(const TMask& m);
virtual int rewrite(const TMask & m);
virtual int read(TMask& m);
virtual void on_firm_change();
public:
// @cmember Disabilita la verifica del modulo : essendo una anagrafica, va sempre abilitata
virtual bool check_autorization() const
{return FALSE;}
virtual bool check_autorization() const { return false; }
virtual TRelation* get_relation() const {return _rel;}
TPianoconti_app() : _pcon_com(FALSE) {}
};
HIDDEN inline TPianoconti_app & app() { return (TPianoconti_app &) main_app();}
HIDDEN inline TPianoconti_app& app() { return (TPianoconti_app&) main_app();}
int TPianoconti_app::read(TMask& m)
{
const TRelation *r = get_relation();
const TRelation* r = get_relation();
m.autoload(*r);
if (m.get(FLD_CM1_LETTIVD).empty())
{
@ -115,60 +105,39 @@ int TPianoconti_app::write(const TMask& m)
return r->write();
}
// Controlla se puo' essere effettuata la cancellazione di un conto
void TPianoconti_app::on_firm_change()
{
TDir d;
d.get(LF_PCON, _nolock, _nordir, _sysdirop);
_pcon_com = d.is_com();
}
bool TPianoconti_app::protected_record(TRectype &rec)
{
if (!_pcon_com )
bool prot = false;
const int gruppo = rec.get_int(PCN_GRUPPO);
const int conto = rec.get_int(PCN_CONTO);
const long sottoc = rec.get_long(PCN_SOTTOCONTO);
// Se e' un sottoconto posso cancellarlo se non esistono saldi
if (sottoc != 0)
{
TMask* m = get_mask(MODE_MOD);
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);
// Se e' un sottoconto posso cancellarlo se non esistono saldi
if ((gruppo != 0) && (conto != 0) && (sottoc != 0))
{
TLocalisamfile saldi(LF_SALDI);
saldi.setkey(2);
saldi.put(PCN_GRUPPO, gruppo);
saldi.put(PCN_CONTO, conto);
saldi.put(PCN_SOTTOCONTO, sottoc);
saldi.read(_isgteq);
return saldi.good() &&
gruppo == saldi.get_int(PCN_GRUPPO) && conto == saldi.get_int(PCN_CONTO) && sottoc == saldi.get_long(PCN_SOTTOCONTO) &&
(saldi.get_real(SLD_SALDO) != ZERO || saldi.get_real(SLD_PDARE) != ZERO ||
saldi.get_real(SLD_PAVERE) != ZERO || saldi.get_real(SLD_SALDOFIN) != ZERO ||
saldi.get_real(SLD_PDAREPRO) != ZERO || saldi.get_real(SLD_PAVEREPRO) != ZERO);
}
else
{
TLocalisamfile& pconti = _rel->lfile();
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();
bool prot = (pconti.good() && (pconti.curr() == rec1));
get_relation()->restore_status();
return prot;
}
TLocalisamfile saldi(LF_SALDI);
saldi.setkey(2);
saldi.put(PCN_GRUPPO, gruppo);
saldi.put(PCN_CONTO, conto);
saldi.put(PCN_SOTTOCONTO, sottoc);
prot = saldi.read(_isgteq) == NOERR &&
gruppo == saldi.get_int(PCN_GRUPPO) && conto == saldi.get_int(PCN_CONTO) && sottoc == saldi.get_long(PCN_SOTTOCONTO) &&
(saldi.get_real(SLD_SALDO) != ZERO || saldi.get_real(SLD_PDARE) != ZERO ||
saldi.get_real(SLD_PAVERE) != ZERO || saldi.get_real(SLD_SALDOFIN) != ZERO ||
saldi.get_real(SLD_PDAREPRO) != ZERO || saldi.get_real(SLD_PAVEREPRO) != ZERO);
}
return FALSE;
else
{
TLocalisamfile pconti(LF_PCON);
pconti.put(PCN_GRUPPO, gruppo);
// Se e' un conto controllo se ha dei sottoconti
if (conto != 0)
pconti.put(PCN_CONTO, conto);
const TRectype rec1(pconti.curr());
prot = pconti.read(_isgreat) == NOERR && pconti.curr().same_key(rec1, 1, 1);
}
return prot;
}
void TPianoconti_app::init_query_mode(TMask& m)
@ -289,71 +258,47 @@ void TPianoconti_app::init_insert_mode(TMask& m)
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();
TMask& m = f.mask();
const int gruppo = m.get_int(FLD_CM1_GRUPPO);
const int conto = m.get_int(FLD_CM1_CONTO);
if (gruppo != 0 && conto != 0)
{
pconti.zero() ;
TLocalisamfile pconti(LF_PCON);
pconti.put(PCN_GRUPPO, gruppo) ;
pconti.setkey(1) ;
pconti.read();
if (pconti.bad())
return f.warning_box (TR("Il gruppo non esiste"));
if (pconti.read() != NOERR)
return f.error_box (TR("Il gruppo non esiste"));
}
}
return TRUE;
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();
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 (gruppo != 0 && conto != 0 && sottoc != 0)
{
pconti.zero() ;
TLocalisamfile pconti(LF_PCON);
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 (TR("Il conto non esiste"));
if (pconti.read() != NOERR)
return m.field(FLD_CM1_CONTO).error_box (TR("Il conto non esiste"));
else
{
if (pconti.get(PCN_TMCF).not_empty())
return m.field(FLD_CM1_SOTTOCONTO).warning_box (TR("Non e' possibile inserire un sottoconto di un conto relativo ad un cliente/fornitore"));
return m.field(FLD_CM1_SOTTOCONTO).error_box (TR("Non e' possibile inserire un sottoconto di un conto relativo ad un cliente/fornitore"));
}
}
}
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);
if (gruppo == 0) return TRUE;
}
return TRUE;
}
bool TPianoconti_app::user_create()
{
open_files(LF_PCON, LF_SALDI, LF_TABCOM, LF_ABPCON, 0);
@ -361,7 +306,6 @@ bool TPianoconti_app::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);
// set_search_field(FH_SOTTOCONTO); // Ottima trovata, ma non funziona