Correzione errori marginali
git-svn-id: svn://10.65.10.50/trunk@792 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
471dfd167d
commit
af3b1f3113
686
cg/cg0100.cpp
686
cg/cg0100.cpp
@ -1,343 +1,343 @@
|
||||
#include <relapp.h>
|
||||
#include <pconti.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 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);
|
||||
|
||||
public:
|
||||
virtual TRelation* get_relation() const {return _rel;}
|
||||
CG0100_application() {}
|
||||
};
|
||||
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);
|
||||
}
|
||||
return r->rewrite();
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
bool CG0100_application::protected_record(TRectype &rec)
|
||||
{
|
||||
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);
|
||||
|
||||
return _saldi->good() && 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.send_key(K_SHIFT + K_CTRL + 's', -1);
|
||||
m.send_key(K_SHIFT + K_CTRL + 's', -2);
|
||||
m.send_key(K_SHIFT + K_CTRL + 's', -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.send_key(K_SHIFT + K_CTRL + 'h', -1);
|
||||
else
|
||||
if (sottoc == 0)
|
||||
m.send_key(K_SHIFT + K_CTRL + 'h', -2);
|
||||
else
|
||||
m.send_key(K_SHIFT + K_CTRL + 'h', -3);
|
||||
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
m.show(FLD_CM1_CODTABANALISI);
|
||||
m.hide(FLD_CM1_CODANALISIH);
|
||||
}
|
||||
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)
|
||||
{
|
||||
if (key == K_ENTER)
|
||||
{
|
||||
const TMask& m = f.mask();
|
||||
const int gruppo = atoi(m.get(FLD_CM1_GRUPPO));
|
||||
const int conto = atoi(m.get(FLD_CM1_CONTO));
|
||||
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");
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HIDDEN bool conto_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_ENTER)
|
||||
{
|
||||
const TMask& m = f.mask();
|
||||
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));
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HIDDEN bool sottoc_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_TAB)
|
||||
{
|
||||
const int gruppo = f.mask().get_int(FLD_CM1_GRUPPO);
|
||||
if (gruppo == 0) return TRUE;
|
||||
const int conto = f.mask().get_int(FLD_CM1_CONTO);
|
||||
const long sottoconto = f.mask().get_long(FLD_CM1_SOTTOCONTO);
|
||||
if (sottoconto != 0 && conto == 0)
|
||||
return f.mask().field(FLD_CM1_CONTO).error_box("Manca il conto");
|
||||
return f.mask().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;
|
||||
}
|
||||
#include <relapp.h>
|
||||
#include <pconti.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 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);
|
||||
|
||||
public:
|
||||
virtual TRelation* get_relation() const {return _rel;}
|
||||
CG0100_application() {}
|
||||
};
|
||||
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);
|
||||
}
|
||||
return r->rewrite();
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
bool CG0100_application::protected_record(TRectype &rec)
|
||||
{
|
||||
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);
|
||||
|
||||
return _saldi->good() && 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.send_key(K_SHIFT + K_CTRL + 's', -1);
|
||||
m.show(-2); //m.send_key(K_SHIFT + K_CTRL + 's', -2);
|
||||
m.show(-3); //m.send_key(K_SHIFT + K_CTRL + 's', -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); // send_key(K_SHIFT + K_CTRL + 'h', -1);
|
||||
else
|
||||
if (sottoc == 0)
|
||||
m.show(-2, FALSE); //m.send_key(K_SHIFT + K_CTRL + 'h', -2);
|
||||
else
|
||||
m.show(-3, FALSE); //m.send_key(K_SHIFT + K_CTRL + 'h', -3);
|
||||
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
m.show(FLD_CM1_CODTABANALISI);
|
||||
m.hide(FLD_CM1_CODANALISIH);
|
||||
}
|
||||
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)
|
||||
{
|
||||
if (key == K_ENTER)
|
||||
{
|
||||
const TMask& m = f.mask();
|
||||
const int gruppo = atoi(m.get(FLD_CM1_GRUPPO));
|
||||
const int conto = atoi(m.get(FLD_CM1_CONTO));
|
||||
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");
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HIDDEN bool conto_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_ENTER)
|
||||
{
|
||||
const TMask& m = f.mask();
|
||||
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));
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HIDDEN bool sottoc_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (key == K_TAB)
|
||||
{
|
||||
const int gruppo = f.mask().get_int(FLD_CM1_GRUPPO);
|
||||
if (gruppo == 0) return TRUE;
|
||||
const int conto = f.mask().get_int(FLD_CM1_CONTO);
|
||||
const long sottoconto = f.mask().get_long(FLD_CM1_SOTTOCONTO);
|
||||
if (sottoconto != 0 && conto == 0)
|
||||
return f.mask().field(FLD_CM1_CONTO).error_box("Manca il conto");
|
||||
return f.mask().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;
|
||||
}
|
||||
|
708
cg/cg0100a.uml
708
cg/cg0100a.uml
@ -1,354 +1,354 @@
|
||||
#include "cg0100.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
#include <toolbar.h>
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Piano dei conti " 0 -1 0 19
|
||||
|
||||
GROUPBOX DLG_NULL 76 5
|
||||
BEGIN
|
||||
PROMPT 1 0 ""
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_GRUPPO 3
|
||||
BEGIN
|
||||
PROMPT 2 1 "Gruppo "
|
||||
HELP "Codice del gruppo"
|
||||
FIELD LF_PCON->GRUPPO
|
||||
FLAGS "R"
|
||||
KEY 1
|
||||
USE LF_PCON KEY 1 SELECT CONTO=""
|
||||
INPUT GRUPPO FLD_CM1_GRUPPO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT FLD_CM1_GRUPPO GRUPPO
|
||||
OUTPUT FLD_CM1_DESCG DESCR
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING FLD_CM1_DESCG 50
|
||||
BEGIN
|
||||
PROMPT 23 1 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_CONTO 3
|
||||
BEGIN
|
||||
PROMPT 2 2 "Conto "
|
||||
HELP "Codice dell'eventuale conto"
|
||||
FIELD LF_PCON->CONTO
|
||||
FLAGS "R"
|
||||
KEY 1
|
||||
USE LF_PCON KEY 1 SELECT ((CONTO!="") && (SOTTOCONTO=""))
|
||||
COPY INPUT FLD_CM1_GRUPPO
|
||||
INPUT CONTO FLD_CM1_CONTO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT FLD_CM1_GRUPPO GRUPPO
|
||||
OUTPUT FLD_CM1_CONTO CONTO
|
||||
OUTPUT FLD_CM1_DESCC DESCR
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING FLD_CM1_DESCC 50
|
||||
BEGIN
|
||||
PROMPT 23 2 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_SOTTOCONTO 6
|
||||
BEGIN
|
||||
PROMPT 2 3 "Sottoconto "
|
||||
HELP "Codice dell'eventuale sottoconto"
|
||||
FIELD LF_PCON->SOTTOCONTO
|
||||
FLAGS "R"
|
||||
KEY 1
|
||||
USE LF_PCON KEY 1 SELECT SOTTOCONTO!=""
|
||||
COPY INPUT FLD_CM1_CONTO
|
||||
INPUT SOTTOCONTO FLD_CM1_SOTTOCONTO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
DISPLAY "Sospeso" SOSPESO
|
||||
DISPLAY "Descrizione@70" DESCR
|
||||
OUTPUT FLD_CM1_SOTTOCONTO SOTTOCONTO
|
||||
OUTPUT FLD_CM1_GRUPPO GRUPPO
|
||||
OUTPUT FLD_CM1_CONTO CONTO
|
||||
OUTPUT FLD_CM1_DESC DESCR
|
||||
END
|
||||
|
||||
STRING FLD_CM1_DESC 50
|
||||
BEGIN
|
||||
PROMPT 23 3 ""
|
||||
FIELD LF_PCON->DESCR
|
||||
KEY 2
|
||||
USE LF_PCON KEY 2
|
||||
INPUT DESCR FLD_CM1_DESC
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Sospeso" SOSPESO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto " SOTTOCONTO
|
||||
COPY OUTPUT FLD_CM1_SOTTOCONTO
|
||||
CHECKTYPE REQUIRED
|
||||
HELP "Descrizione del gruppo o del conto o del sottoconto"
|
||||
WARNING "Manca la descrizione"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_CODTABANALISI 10
|
||||
BEGIN
|
||||
PROMPT 1 5 "Codice Tabella Analisi "
|
||||
HELP "Codice di raggruppamento per l'analisi di bilancio"
|
||||
FIELD LF_PCON->CODCBL
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_CODANALISIH 10
|
||||
BEGIN
|
||||
PROMPT 1 5 "Codice Tabella Analisi "
|
||||
FLAGS "RHD"
|
||||
END
|
||||
|
||||
LIST FLD_CM1_INDBIL 1 22
|
||||
BEGIN
|
||||
PROMPT 1 6 "Sezione di bilancio "
|
||||
FIELD LF_PCON->INDBIL
|
||||
GROUP 1 3
|
||||
HELP "Sezione di appartenenza del conto"
|
||||
ITEM "1|1. Attivita'"
|
||||
ITEM "2|2. Passivita'"
|
||||
ITEM "3|3. Costi"
|
||||
ITEM "4|4. Ricavi"
|
||||
ITEM "5|5. Conti d'ordine"
|
||||
END
|
||||
|
||||
LIST FLD_CM1_SEZIVD 1 22
|
||||
BEGIN
|
||||
PROMPT 1 7 "Sez. e classe IV dir. "
|
||||
FIELD LF_PCON->SEZIVD
|
||||
GROUP 1 4
|
||||
ITEM "0|0. Nessuna" MESSAGE CLEAR,5@|CLEAR,6@
|
||||
ITEM "1|1. Attivita'" MESSAGE ENABLE,5@|ENABLE,6@
|
||||
ITEM "2|2. Passivita'" MESSAGE ENABLE,5@|ENABLE,6@
|
||||
ITEM "5|5. Conto d'ordine" MESSAGE CLEAR,5@|ENABLE,6@
|
||||
ITEM "6|6. C.ordine attivo" MESSAGE CLEAR,5@|ENABLE,6@
|
||||
ITEM "7|7. C.ordine passivo" MESSAGE CLEAR,5@|ENABLE,6@
|
||||
ITEM "9|9. Conto economico" MESSAGE ENABLE,5@|ENABLE,6@
|
||||
HELP "Codice del conto secondo la IV direttiva CEE"
|
||||
END
|
||||
|
||||
STRING FLD_CM1_LETTIVD 1 1
|
||||
BEGIN
|
||||
PROMPT 56 7 ""
|
||||
HELP "Codice del conto secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->LETTIVD
|
||||
GROUP 1 5
|
||||
FLAGS "U"
|
||||
END
|
||||
|
||||
STRING FLD_CM1_LETTIVDH 1
|
||||
BEGIN
|
||||
PROMPT 56 7 ""
|
||||
FLAGS "HDU"
|
||||
GROUP 5
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMRIVD 8 4
|
||||
BEGIN
|
||||
PROMPT 60 7 ""
|
||||
HELP "Codice del conto secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->NUMRIVD
|
||||
GROUP 1 5
|
||||
FLAGS "MZ"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMRIVDH 8 4
|
||||
BEGIN
|
||||
PROMPT 60 7 ""
|
||||
FLAGS "HDMZ"
|
||||
GROUP 5
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMIVD 2
|
||||
BEGIN
|
||||
PROMPT 71 7 ""
|
||||
HELP "Codice del conto secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->NUMIVD
|
||||
FLAGS "RZ"
|
||||
GROUP 1 5
|
||||
USE %IVD
|
||||
INPUT CODTAB[1,1] FLD_CM1_SEZIVD
|
||||
INPUT CODTAB[2,2] FLD_CM1_LETTIVD
|
||||
INPUT CODTAB[3,6] FLD_CM1_NUMRIVD
|
||||
INPUT CODTAB[7,8] FLD_CM1_NUMIVD
|
||||
DISPLAY "Sezione" CODTAB[1,1]
|
||||
DISPLAY "Lettera" CODTAB[2,2]
|
||||
DISPLAY "Classe @M" CODTAB[3,6]
|
||||
DISPLAY "Numero" CODTAB[7,8]
|
||||
DISPLAY "Descrizione@70" S0
|
||||
OUTPUT FLD_CM1_SEZIVD CODTAB[1,1]
|
||||
OUTPUT FLD_CM1_LETTIVD CODTAB[2,2]
|
||||
OUTPUT FLD_CM1_NUMRIVD CODTAB[3,6]
|
||||
OUTPUT FLD_CM1_NUMIVD CODTAB[7,8]
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice non presente"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMIVDH 2
|
||||
BEGIN
|
||||
PROMPT 71 7 ""
|
||||
FLAGS "HDRZ"
|
||||
GROUP 1 5
|
||||
END
|
||||
|
||||
LIST FLD_CM1_SEZIVDOPP 1 22
|
||||
BEGIN
|
||||
PROMPT 1 8 "Classe segno opposto "
|
||||
FIELD LF_PCON->SEZIVDOPP
|
||||
GROUP 1 2 4 6
|
||||
ITEM "0|0. Nessuna" MESSAGE CLEAR,7@
|
||||
ITEM "1|1. Attivita'" MESSAGE ENABLE,7@
|
||||
ITEM "2|2. Passivita'" MESSAGE ENABLE,7@
|
||||
ITEM "5|5. Conto d'ordine" MESSAGE CLEAR,7@
|
||||
ITEM "6|6. C.ordine attivo" MESSAGE CLEAR,7@
|
||||
ITEM "7|7. C.ordine passivo" MESSAGE CLEAR,7@
|
||||
ITEM "9|9. Conto economico" MESSAGE ENABLE,7@
|
||||
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
|
||||
END
|
||||
|
||||
STRING FLD_CM1_LETTIVDOPP 1
|
||||
BEGIN
|
||||
PROMPT 56 8 ""
|
||||
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->LETTIVDOPP
|
||||
FLAGS "U"
|
||||
GROUP 1 2 4 7
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMRIVDOPP 8 4
|
||||
BEGIN
|
||||
PROMPT 60 8 ""
|
||||
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->NUMRIVDOPP
|
||||
FLAGS "MZ"
|
||||
GROUP 1 2 4 7
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMIVDOPP 2
|
||||
BEGIN
|
||||
PROMPT 71 8 ""
|
||||
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->NUMIVDOPP
|
||||
FLAGS "RZ"
|
||||
GROUP 1 2 4 7
|
||||
COPY USE FLD_CM1_NUMIVD
|
||||
INPUT CODTAB[1,1] FLD_CM1_SEZIVDOPP
|
||||
INPUT CODTAB[2,2] FLD_CM1_LETTIVDOPP
|
||||
INPUT CODTAB[3,6] FLD_CM1_NUMRIVDOPP
|
||||
INPUT CODTAB[7,8] FLD_CM1_NUMIVDOPP
|
||||
COPY DISPLAY FLD_CM1_NUMIVD
|
||||
OUTPUT FLD_CM1_SEZIVDOPP CODTAB[1,1]
|
||||
OUTPUT FLD_CM1_LETTIVDOPP CODTAB[2,2]
|
||||
OUTPUT FLD_CM1_NUMRIVDOPP CODTAB[3,6]
|
||||
OUTPUT FLD_CM1_NUMIVDOPP CODTAB[7,8]
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice non presente"
|
||||
END
|
||||
|
||||
LIST FLD_CM1_TIPOSPRIC 1 50
|
||||
BEGIN
|
||||
PROMPT 1 9 "Tipo Spesa/Ricavo "
|
||||
FIELD LF_PCON->TIPOSPRIC
|
||||
GROUP 1 2
|
||||
HELP "Specificare il tipo do conto"
|
||||
ITEM "0|0. Acquisti o vendite in genere"
|
||||
ITEM "1|1. Acquisti beni per rivendita"
|
||||
ITEM "2|2. Acquisti beni ammortizzabili"
|
||||
ITEM "3|3. Acquisti beni ammortizzabili con detr. 6%"
|
||||
ITEM "4|4. Vendita beni strumentali art. 17"
|
||||
ITEM "5|5. Beni per rivendita da non ventilare"
|
||||
ITEM "8|8. Altri beni strumentali acquistati in leasing"
|
||||
ITEM "9|9. Spese Generali"
|
||||
END
|
||||
|
||||
LIST FLD_CM1_RICSER 1 18
|
||||
BEGIN
|
||||
PROMPT 1 10 "Ricavi per servizi "
|
||||
FIELD RICSER
|
||||
FLAGS "H"
|
||||
ITEM "0|Altre attivita'"
|
||||
ITEM "1|Servizi"
|
||||
END
|
||||
|
||||
LIST FLD_CM1_TMCF 1 13
|
||||
BEGIN
|
||||
PROMPT 1 11 "Tipo sottoconti "
|
||||
FIELD LF_PCON->TMCF
|
||||
GROUP 1 3
|
||||
HELP "Tipo dei sottoconti (Normale o clienti/fornitori)"
|
||||
ITEM " |Normali"
|
||||
ITEM "C|Clienti"
|
||||
ITEM "F|Fornitori"
|
||||
END
|
||||
|
||||
LIST FLD_CM2_SEZSALDI 1 10
|
||||
BEGIN
|
||||
PROMPT 1 12 "Controllo saldo primanota "
|
||||
HELP "Tipo di controllo del saldo in prima nota"
|
||||
FIELD LF_PCON->SEZSALDI
|
||||
GROUP 1
|
||||
ITEM " |Nessuno"
|
||||
ITEM "A|Avere"
|
||||
ITEM "D|Dare"
|
||||
END
|
||||
|
||||
BOOLEAN FLD_CM2_STSOTTBIL
|
||||
BEGIN
|
||||
PROMPT 1 14 "Stampa dettaglio sottoconti su bilanci "
|
||||
HELP "Indicare se stampare il dettaglio dei sottoconti nei bilanci di verifica"
|
||||
FIELD LF_PCON->STSOTTBIL
|
||||
GROUP 1 3
|
||||
END
|
||||
|
||||
BOOLEAN FLD_CM2_COMPENS
|
||||
BEGIN
|
||||
PROMPT 50 14 "Compensazione saldi "
|
||||
HELP "Indicare se e' ammessa la compensazione dei saldi"
|
||||
FIELD LF_PCON->COMPENS
|
||||
GROUP 1 3
|
||||
END
|
||||
|
||||
BOOLEAN FLD_CM2_STSOTTAB
|
||||
BEGIN
|
||||
PROMPT 1 15 "Stampa dettaglio sottoconti su analisi "
|
||||
HELP "Indicare se stampare il dettaglio dei sottoconti nell'analisi di bilancio"
|
||||
FIELD LF_PCON->STSOTTAB
|
||||
GROUP 1 3
|
||||
MESSAGE COPY,FLD_CM2_STSOTTABS
|
||||
END
|
||||
|
||||
BOOLEAN FLD_CM2_STSOTTABS
|
||||
BEGIN
|
||||
PROMPT 1 15 "Stampa dettaglio movimenti su analisi "
|
||||
FIELD LF_PCON->STSOTTAB
|
||||
FLAGS "H"
|
||||
GROUP 1 2
|
||||
MESSAGE COPY,FLD_CM2_STSOTTAB
|
||||
END
|
||||
|
||||
BOOLEAN FLD_CM2_SOSPESO
|
||||
BEGIN
|
||||
PROMPT 50 15 "Conto sospeso"
|
||||
HELP "Indicare se sospendere il conto in prima nota"
|
||||
FIELD LF_PCON->SOSPESO
|
||||
GROUP 1 2
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
#include "cg0100.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
#include <toolbar.h>
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Piano dei conti " 0 -1 0 19
|
||||
|
||||
GROUPBOX DLG_NULL 76 5
|
||||
BEGIN
|
||||
PROMPT 1 0 ""
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_GRUPPO 3
|
||||
BEGIN
|
||||
PROMPT 2 1 "Gruppo "
|
||||
HELP "Codice del gruppo"
|
||||
FIELD LF_PCON->GRUPPO
|
||||
FLAGS "R"
|
||||
KEY 1
|
||||
USE LF_PCON KEY 1 SELECT CONTO=""
|
||||
INPUT GRUPPO FLD_CM1_GRUPPO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT FLD_CM1_GRUPPO GRUPPO
|
||||
OUTPUT FLD_CM1_DESCG DESCR
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING FLD_CM1_DESCG 50
|
||||
BEGIN
|
||||
PROMPT 23 1 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_CONTO 3
|
||||
BEGIN
|
||||
PROMPT 2 2 "Conto "
|
||||
HELP "Codice dell'eventuale conto"
|
||||
FIELD LF_PCON->CONTO
|
||||
FLAGS "R"
|
||||
KEY 1
|
||||
USE LF_PCON KEY 1 SELECT ((CONTO!="") && (SOTTOCONTO=""))
|
||||
COPY INPUT FLD_CM1_GRUPPO
|
||||
INPUT CONTO FLD_CM1_CONTO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT FLD_CM1_GRUPPO GRUPPO
|
||||
OUTPUT FLD_CM1_CONTO CONTO
|
||||
OUTPUT FLD_CM1_DESCC DESCR
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING FLD_CM1_DESCC 50
|
||||
BEGIN
|
||||
PROMPT 23 2 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_SOTTOCONTO 6
|
||||
BEGIN
|
||||
PROMPT 2 3 "Sottoconto "
|
||||
HELP "Codice dell'eventuale sottoconto"
|
||||
FIELD LF_PCON->SOTTOCONTO
|
||||
FLAGS "R"
|
||||
KEY 1
|
||||
USE LF_PCON KEY 1 SELECT SOTTOCONTO!=""
|
||||
COPY INPUT FLD_CM1_CONTO
|
||||
INPUT SOTTOCONTO FLD_CM1_SOTTOCONTO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
DISPLAY "Sospeso" SOSPESO
|
||||
DISPLAY "Descrizione@70" DESCR
|
||||
OUTPUT FLD_CM1_SOTTOCONTO SOTTOCONTO
|
||||
OUTPUT FLD_CM1_GRUPPO GRUPPO
|
||||
OUTPUT FLD_CM1_CONTO CONTO
|
||||
OUTPUT FLD_CM1_DESC DESCR
|
||||
END
|
||||
|
||||
STRING FLD_CM1_DESC 50
|
||||
BEGIN
|
||||
PROMPT 23 3 ""
|
||||
FIELD LF_PCON->DESCR
|
||||
KEY 2
|
||||
USE LF_PCON KEY 2
|
||||
INPUT DESCR FLD_CM1_DESC
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Sospeso" SOSPESO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto " SOTTOCONTO
|
||||
COPY OUTPUT FLD_CM1_SOTTOCONTO
|
||||
CHECKTYPE REQUIRED
|
||||
HELP "Descrizione del gruppo o del conto o del sottoconto"
|
||||
WARNING "Manca la descrizione"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_CODTABANALISI 10
|
||||
BEGIN
|
||||
PROMPT 1 5 "Codice Tabella Analisi "
|
||||
HELP "Codice di raggruppamento per l'analisi di bilancio"
|
||||
FIELD LF_PCON->CODCBL
|
||||
FLAGS "R"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_CODANALISIH 10
|
||||
BEGIN
|
||||
PROMPT 1 5 "Codice Tabella Analisi "
|
||||
FLAGS "RHD"
|
||||
END
|
||||
|
||||
LIST FLD_CM1_INDBIL 1 22
|
||||
BEGIN
|
||||
PROMPT 1 6 "Sezione di bilancio "
|
||||
FIELD LF_PCON->INDBIL
|
||||
GROUP 1 3
|
||||
HELP "Sezione di appartenenza del conto"
|
||||
ITEM "1|1. Attivita'"
|
||||
ITEM "2|2. Passivita'"
|
||||
ITEM "3|3. Costi"
|
||||
ITEM "4|4. Ricavi"
|
||||
ITEM "5|5. Conti d'ordine"
|
||||
END
|
||||
|
||||
LIST FLD_CM1_SEZIVD 1 22
|
||||
BEGIN
|
||||
PROMPT 1 7 "Sez. e classe IV dir. "
|
||||
FIELD LF_PCON->SEZIVD
|
||||
ITEM "0|0. Nessuna" MESSAGE CLEAR,5@|CLEAR,6@
|
||||
ITEM "1|1. Attivita'" MESSAGE ENABLE,5@|ENABLE,6@
|
||||
ITEM "2|2. Passivita'" MESSAGE ENABLE,5@|ENABLE,6@
|
||||
ITEM "5|5. Conto d'ordine" MESSAGE CLEAR,5@|ENABLE,6@
|
||||
ITEM "6|6. C.ordine attivo" MESSAGE CLEAR,5@|ENABLE,6@
|
||||
ITEM "7|7. C.ordine passivo" MESSAGE CLEAR,5@|ENABLE,6@
|
||||
ITEM "9|9. Conto economico" MESSAGE ENABLE,5@|ENABLE,6@
|
||||
HELP "Codice del conto secondo la IV direttiva CEE"
|
||||
GROUP 1 4
|
||||
END
|
||||
|
||||
STRING FLD_CM1_LETTIVD 1 1
|
||||
BEGIN
|
||||
PROMPT 56 7 ""
|
||||
HELP "Codice del conto secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->LETTIVD
|
||||
GROUP 1 5
|
||||
FLAGS "U"
|
||||
END
|
||||
|
||||
STRING FLD_CM1_LETTIVDH 1
|
||||
BEGIN
|
||||
PROMPT 56 7 ""
|
||||
FLAGS "HDU"
|
||||
GROUP 1 5
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMRIVD 8 4
|
||||
BEGIN
|
||||
PROMPT 60 7 ""
|
||||
HELP "Codice del conto secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->NUMRIVD
|
||||
GROUP 1 5
|
||||
FLAGS "MZ"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMRIVDH 8 4
|
||||
BEGIN
|
||||
PROMPT 60 7 ""
|
||||
FLAGS "HDMZ"
|
||||
GROUP 1 5
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMIVD 2
|
||||
BEGIN
|
||||
PROMPT 71 7 ""
|
||||
HELP "Codice del conto secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->NUMIVD
|
||||
FLAGS "RZ"
|
||||
GROUP 1 5
|
||||
USE %IVD
|
||||
INPUT CODTAB[1,1] FLD_CM1_SEZIVD
|
||||
INPUT CODTAB[2,2] FLD_CM1_LETTIVD
|
||||
INPUT CODTAB[3,6] FLD_CM1_NUMRIVD
|
||||
INPUT CODTAB[7,8] FLD_CM1_NUMIVD
|
||||
DISPLAY "Sezione" CODTAB[1,1]
|
||||
DISPLAY "Lettera" CODTAB[2,2]
|
||||
DISPLAY "Classe @M" CODTAB[3,6]
|
||||
DISPLAY "Numero" CODTAB[7,8]
|
||||
DISPLAY "Descrizione@70" S0
|
||||
OUTPUT FLD_CM1_SEZIVD CODTAB[1,1]
|
||||
OUTPUT FLD_CM1_LETTIVD CODTAB[2,2]
|
||||
OUTPUT FLD_CM1_NUMRIVD CODTAB[3,6]
|
||||
OUTPUT FLD_CM1_NUMIVD CODTAB[7,8]
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice non presente"
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMIVDH 2
|
||||
BEGIN
|
||||
PROMPT 71 7 ""
|
||||
FLAGS "HDRZ"
|
||||
GROUP 1 5
|
||||
END
|
||||
|
||||
LIST FLD_CM1_SEZIVDOPP 1 22
|
||||
BEGIN
|
||||
PROMPT 1 8 "Classe segno opposto "
|
||||
FIELD LF_PCON->SEZIVDOPP
|
||||
GROUP 1 2 4 6
|
||||
ITEM "0|0. Nessuna" MESSAGE CLEAR,7@
|
||||
ITEM "1|1. Attivita'" MESSAGE ENABLE,7@
|
||||
ITEM "2|2. Passivita'" MESSAGE ENABLE,7@
|
||||
ITEM "5|5. Conto d'ordine" MESSAGE CLEAR,7@
|
||||
ITEM "6|6. C.ordine attivo" MESSAGE CLEAR,7@
|
||||
ITEM "7|7. C.ordine passivo" MESSAGE CLEAR,7@
|
||||
ITEM "9|9. Conto economico" MESSAGE ENABLE,7@
|
||||
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
|
||||
END
|
||||
|
||||
STRING FLD_CM1_LETTIVDOPP 1
|
||||
BEGIN
|
||||
PROMPT 56 8 ""
|
||||
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->LETTIVDOPP
|
||||
FLAGS "U"
|
||||
GROUP 1 2 4 7
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMRIVDOPP 8 4
|
||||
BEGIN
|
||||
PROMPT 60 8 ""
|
||||
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->NUMRIVDOPP
|
||||
FLAGS "MZ"
|
||||
GROUP 1 2 4 7
|
||||
END
|
||||
|
||||
NUMBER FLD_CM1_NUMIVDOPP 2
|
||||
BEGIN
|
||||
PROMPT 71 8 ""
|
||||
HELP "Codice del conto di sezione opposta secondo la IV direttiva CEE"
|
||||
FIELD LF_PCON->NUMIVDOPP
|
||||
FLAGS "RZ"
|
||||
GROUP 1 2 4 7
|
||||
COPY USE FLD_CM1_NUMIVD
|
||||
INPUT CODTAB[1,1] FLD_CM1_SEZIVDOPP
|
||||
INPUT CODTAB[2,2] FLD_CM1_LETTIVDOPP
|
||||
INPUT CODTAB[3,6] FLD_CM1_NUMRIVDOPP
|
||||
INPUT CODTAB[7,8] FLD_CM1_NUMIVDOPP
|
||||
COPY DISPLAY FLD_CM1_NUMIVD
|
||||
OUTPUT FLD_CM1_SEZIVDOPP CODTAB[1,1]
|
||||
OUTPUT FLD_CM1_LETTIVDOPP CODTAB[2,2]
|
||||
OUTPUT FLD_CM1_NUMRIVDOPP CODTAB[3,6]
|
||||
OUTPUT FLD_CM1_NUMIVDOPP CODTAB[7,8]
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice non presente"
|
||||
END
|
||||
|
||||
LIST FLD_CM1_TIPOSPRIC 1 50
|
||||
BEGIN
|
||||
PROMPT 1 9 "Tipo Spesa/Ricavo "
|
||||
FIELD LF_PCON->TIPOSPRIC
|
||||
GROUP 1 2
|
||||
HELP "Specificare il tipo do conto"
|
||||
ITEM "0|0. Acquisti o vendite in genere"
|
||||
ITEM "1|1. Acquisti beni per rivendita"
|
||||
ITEM "2|2. Acquisti beni ammortizzabili"
|
||||
ITEM "3|3. Acquisti beni ammortizzabili con detr. 6%"
|
||||
ITEM "4|4. Vendita beni strumentali art. 17"
|
||||
ITEM "5|5. Beni per rivendita da non ventilare"
|
||||
ITEM "8|8. Altri beni strumentali acquistati in leasing"
|
||||
ITEM "9|9. Spese Generali"
|
||||
END
|
||||
|
||||
LIST FLD_CM1_RICSER 1 18
|
||||
BEGIN
|
||||
PROMPT 1 10 "Ricavi per servizi "
|
||||
FIELD RICSER
|
||||
FLAGS "H"
|
||||
ITEM "0|Altre attivita'"
|
||||
ITEM "1|Servizi"
|
||||
END
|
||||
|
||||
LIST FLD_CM1_TMCF 1 13
|
||||
BEGIN
|
||||
PROMPT 1 11 "Tipo sottoconti "
|
||||
FIELD LF_PCON->TMCF
|
||||
GROUP 1 3
|
||||
HELP "Tipo dei sottoconti (Normale o clienti/fornitori)"
|
||||
ITEM " |Normali"
|
||||
ITEM "C|Clienti"
|
||||
ITEM "F|Fornitori"
|
||||
END
|
||||
|
||||
LIST FLD_CM2_SEZSALDI 1 10
|
||||
BEGIN
|
||||
PROMPT 1 12 "Controllo saldo primanota "
|
||||
HELP "Tipo di controllo del saldo in prima nota"
|
||||
FIELD LF_PCON->SEZSALDI
|
||||
GROUP 1
|
||||
ITEM " |Nessuno"
|
||||
ITEM "A|Avere"
|
||||
ITEM "D|Dare"
|
||||
END
|
||||
|
||||
BOOLEAN FLD_CM2_STSOTTBIL
|
||||
BEGIN
|
||||
PROMPT 1 14 "Stampa dettaglio sottoconti su bilanci "
|
||||
HELP "Indicare se stampare il dettaglio dei sottoconti nei bilanci di verifica"
|
||||
FIELD LF_PCON->STSOTTBIL
|
||||
GROUP 1 3
|
||||
END
|
||||
|
||||
BOOLEAN FLD_CM2_COMPENS
|
||||
BEGIN
|
||||
PROMPT 50 14 "Compensazione saldi "
|
||||
HELP "Indicare se e' ammessa la compensazione dei saldi"
|
||||
FIELD LF_PCON->COMPENS
|
||||
GROUP 1 3
|
||||
END
|
||||
|
||||
BOOLEAN FLD_CM2_STSOTTAB
|
||||
BEGIN
|
||||
PROMPT 1 15 "Stampa dettaglio sottoconti su analisi "
|
||||
HELP "Indicare se stampare il dettaglio dei sottoconti nell'analisi di bilancio"
|
||||
FIELD LF_PCON->STSOTTAB
|
||||
GROUP 1 3
|
||||
MESSAGE COPY,FLD_CM2_STSOTTABS
|
||||
END
|
||||
|
||||
BOOLEAN FLD_CM2_STSOTTABS
|
||||
BEGIN
|
||||
PROMPT 1 15 "Stampa dettaglio movimenti su analisi "
|
||||
FIELD LF_PCON->STSOTTAB
|
||||
FLAGS "H"
|
||||
GROUP 1 2
|
||||
MESSAGE COPY,FLD_CM2_STSOTTAB
|
||||
END
|
||||
|
||||
BOOLEAN FLD_CM2_SOSPESO
|
||||
BEGIN
|
||||
PROMPT 50 15 "Conto sospeso"
|
||||
HELP "Indicare se sospendere il conto in prima nota"
|
||||
FIELD LF_PCON->SOSPESO
|
||||
GROUP 1 2
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
76
cg/cg1.url
76
cg/cg1.url
@ -1,43 +1,33 @@
|
||||
#include <default.url>
|
||||
|
||||
|
||||
MENU TASK_MENUBAR
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
|
||||
MENUBAR MENU_BAR(1)
|
||||
|
||||
MENU MENU_BAR(1)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
|
||||
MENUBAR MENU_BAR(2)
|
||||
|
||||
MENU MENU_BAR(2)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
MENU BAR_ITEM(1)
|
||||
ITEM MENU_ITEM(1) "~Header"
|
||||
ITEM MENU_ITEM(2) "~Body"
|
||||
ITEM MENU_ITEM(3) "~Footer"
|
||||
|
||||
MENUBAR MENU_BAR(3)
|
||||
|
||||
MENU MENU_BAR(3)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
MENUBAR MENU_BAR(4)
|
||||
|
||||
MENU MENU_BAR(4)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
MENUBAR MENU_BAR(5)
|
||||
|
||||
MENU MENU_BAR(5)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
MENUBAR MENU_BAR(6)
|
||||
|
||||
MENU MENU_BAR(6)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
#include <default.url>
|
||||
|
||||
|
||||
MENU TASK_MENUBAR
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
|
||||
MENUBAR MENU_BAR(1)
|
||||
|
||||
MENU MENU_BAR(1)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
|
||||
MENUBAR MENU_BAR(3)
|
||||
|
||||
MENU MENU_BAR(3)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
MENUBAR MENU_BAR(4)
|
||||
|
||||
MENU MENU_BAR(4)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
MENUBAR MENU_BAR(5)
|
||||
|
||||
MENU MENU_BAR(5)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
MENUBAR MENU_BAR(6)
|
||||
|
||||
MENU MENU_BAR(6)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
|
1898
cg/cg1200.cpp
1898
cg/cg1200.cpp
File diff suppressed because it is too large
Load Diff
109
cg/cg1300.cpp
109
cg/cg1300.cpp
@ -1,102 +1,7 @@
|
||||
#include <applicat.h>
|
||||
#include <mask.h>
|
||||
#include <form.h>
|
||||
#include <utility.h>
|
||||
#include <urldefid.h>
|
||||
|
||||
|
||||
class TEdit_form : public TApplication
|
||||
{
|
||||
const char* _name;
|
||||
TForm* _form;
|
||||
|
||||
protected:
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
virtual bool menu(MENU_TAG);
|
||||
|
||||
public:
|
||||
TEdit_form(const char* name);
|
||||
const char* name() const { return _name; }
|
||||
};
|
||||
|
||||
|
||||
TEdit_form::TEdit_form(const char* name)
|
||||
: _name(name), _form(NULL)
|
||||
{}
|
||||
|
||||
|
||||
bool TEdit_form::create()
|
||||
{
|
||||
_form = new TForm(name());
|
||||
dispatch_e_menu(MENU_ITEM(2));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool TEdit_form::destroy()
|
||||
{
|
||||
delete _form;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool TEdit_form::menu(MENU_TAG tag)
|
||||
{
|
||||
char sec = 'B';
|
||||
switch(tag)
|
||||
{
|
||||
case MENU_ITEM(1):
|
||||
sec = 'H'; break;
|
||||
case MENU_ITEM(3):
|
||||
sec = 'F'; break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
_form->edit(sec, odd_page);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
int cg1300(int argc, char* argv[])
|
||||
{
|
||||
TApplication::check_parameters(argc, argv);
|
||||
if (argc < 3)
|
||||
{
|
||||
error_box("Specificare il nome del profilo di stampa");
|
||||
return 1;
|
||||
}
|
||||
|
||||
TFilename form(argv[2]); form.ext("frm");
|
||||
|
||||
const char mode = argc > 3 ? toupper(argv[3][1]) : 'M';
|
||||
const bool crea = (mode == 'C') || !fexist(form);
|
||||
|
||||
if (crea)
|
||||
{
|
||||
TFilename base(form.left(3)); base.ext("frm");
|
||||
if (!fexist(base))
|
||||
{
|
||||
error_box("Non esiste il file %s", (const char*)base);
|
||||
return 1;
|
||||
}
|
||||
if (!fcopy(base, form))
|
||||
{
|
||||
error_box("Impossibile copiare %s in %s", (const char*)base, (const char*)form);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fexist(form))
|
||||
{
|
||||
error_box("Non esiste il file %s", (const char*)form);
|
||||
return 1;
|
||||
}
|
||||
|
||||
TEdit_form a(form);
|
||||
TString80 title;
|
||||
title << (crea ? "Creazione" : "Modifica") << ": " << a.name();
|
||||
a.run(argc, argv, title);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#include <checks.h>
|
||||
|
||||
int cg1300(int argc, char* argv[])
|
||||
{
|
||||
error_box("Applicazione ancora da sviluppare");
|
||||
return 1;
|
||||
}
|
||||
|
1903
cg/cg2100.cpp
1903
cg/cg2100.cpp
File diff suppressed because it is too large
Load Diff
653
cg/cg2101.cpp
653
cg/cg2101.cpp
@ -1,323 +1,330 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <xvtmacro.h>
|
||||
#include <applicat.h>
|
||||
#include <tabutil.h>
|
||||
|
||||
#include "cg2101.h"
|
||||
#include "cg2103.h"
|
||||
|
||||
#include <mov.h>
|
||||
#include <rmov.h>
|
||||
#include <rmoviva.h>
|
||||
|
||||
|
||||
// Calcola l'anno di esercizio di una data
|
||||
// Certified 99%
|
||||
int date2esc(const TDate& d, int* prevesc)
|
||||
{
|
||||
if (prevesc) *prevesc = 0;
|
||||
TTable esc("ESC");
|
||||
for (int err = esc.first(); err == NOERR; err = esc.next())
|
||||
{
|
||||
const TDate ia(esc.get("D0")); // Data inizio esercizio
|
||||
const TDate fa(esc.get("D1")); // Data fine esercizio
|
||||
TString16 sanno(esc.get("CODTAB")); sanno.cut(4);
|
||||
const int anno = atoi(sanno);
|
||||
if (d >= ia && d <= fa)
|
||||
return anno;
|
||||
if (prevesc) *prevesc = anno;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Movimento di prima nota
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
TMovimentoPN::TMovimentoPN()
|
||||
: TRelation(LF_MOV), _oldcg(0), _oldiva(0)
|
||||
{
|
||||
add(LF_RMOV, "NUMREG=NUMREG");
|
||||
add(LF_RMOVIVA, "NUMREG=NUMREG");
|
||||
}
|
||||
|
||||
void TMovimentoPN::destroy_rows()
|
||||
{
|
||||
_cg.destroy();
|
||||
_iva.destroy();
|
||||
}
|
||||
|
||||
|
||||
TRectype& TMovimentoPN::cg(int i)
|
||||
{
|
||||
TRectype* r = (TRectype*)_cg.objptr(i);
|
||||
if (r == NULL)
|
||||
{
|
||||
r = new TRectype(LF_RMOV);
|
||||
_cg.add(r, i);
|
||||
}
|
||||
return *r;
|
||||
}
|
||||
|
||||
TRectype& TMovimentoPN::iva(int i)
|
||||
{
|
||||
TRectype* r = (TRectype*)_iva.objptr(i);
|
||||
if (r == NULL)
|
||||
{
|
||||
r = new TRectype(LF_RMOVIVA);
|
||||
_iva.add(r, i);
|
||||
}
|
||||
return *r;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::read_mov_rows()
|
||||
{
|
||||
const TLocalisamfile& rm = lfile(LF_RMOV);
|
||||
const TLocalisamfile& ri = lfile(LF_RMOVIVA);
|
||||
position_rels();
|
||||
|
||||
destroy_rows();
|
||||
for(bool ok = is_first_match(LF_RMOV); ok; ok = next_match(LF_RMOV))
|
||||
{
|
||||
const int row = rm.get_int(RMV_NUMRIG) - 1;
|
||||
cg(row) = rm.curr();
|
||||
}
|
||||
_oldcg = cg_items();
|
||||
|
||||
for(ok = is_first_match(LF_RMOVIVA); ok; ok = next_match(LF_RMOVIVA))
|
||||
{
|
||||
const int row = ri.get_int(RMI_NUMRIG) - 1;
|
||||
iva(row) = ri.curr();
|
||||
}
|
||||
_oldiva = iva_items();
|
||||
|
||||
return NOERR;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::read(TIsamop op, TReclock lockop, TDate& atdate)
|
||||
{
|
||||
int err = file().read(op, lockop, atdate);
|
||||
if (err == NOERR)
|
||||
{
|
||||
_olddate = file().get("DATAREG");
|
||||
err = read_mov_rows();
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::write_rec(bool re, const TRectype& rec, TLocalisamfile& f)
|
||||
{
|
||||
const bool scrivi = re ? (f.rewrite(rec) != NOERR) : TRUE;
|
||||
if (scrivi)
|
||||
f.write(rec);
|
||||
|
||||
return f.status();
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::cancella(TLocalisamfile& f, int da, int a)
|
||||
{
|
||||
const long numreg = lfile().get_long(MOV_NUMREG);
|
||||
for (int i = da; i <= a; i++)
|
||||
{
|
||||
f.put(MOV_NUMREG, numreg);
|
||||
f.put(RMV_NUMRIG, i);
|
||||
if (f.read(_isequal, _lock) == NOERR)
|
||||
f.remove();
|
||||
}
|
||||
return f.status();
|
||||
}
|
||||
|
||||
char TMovimentoPN::frequenza_versamenti(int year) const
|
||||
{
|
||||
static int last_year = 0;
|
||||
static char last_freq = ' ';
|
||||
|
||||
if (year != last_year)
|
||||
{
|
||||
TString16 key;
|
||||
key << year;
|
||||
TTable lia("LIA");
|
||||
lia.setkey(1);
|
||||
lia.put("CODTAB", key);
|
||||
if (lia.read() != NOERR)
|
||||
{
|
||||
TLocalisamfile nditte(LF_NDITTE);
|
||||
nditte.setkey(1);
|
||||
nditte.put("CODDITTA", main_app().get_firm());
|
||||
nditte.read();
|
||||
last_freq = nditte.get_char("FREQVIVA");
|
||||
}
|
||||
else
|
||||
last_freq = lia.get_char("S7");
|
||||
CHECK(last_freq == 'M' || last_freq == 'T', "Frequenza versamenti IVA assurda");
|
||||
}
|
||||
|
||||
return last_freq;
|
||||
}
|
||||
|
||||
int TMovimentoPN::date2liq(const TDate& data) const
|
||||
{
|
||||
const int anno = data.year();
|
||||
int mese = data.month();
|
||||
if (frequenza_versamenti(anno) == 'T')
|
||||
mese += 2 - ((mese-1) % 3);
|
||||
return mese;
|
||||
}
|
||||
|
||||
|
||||
bool TMovimentoPN::controlla_liquidazione(const TDate& data, bool reset) const
|
||||
{
|
||||
bool calcolata = FALSE;
|
||||
|
||||
const int anno = data.year();
|
||||
const int mese = date2liq(data);
|
||||
|
||||
// Chiave di LIM: Anno (1-4), Mese (5-6)
|
||||
TString16 key;
|
||||
key << anno << mese;
|
||||
TTable lim("LIM");
|
||||
lim.setkey(1);
|
||||
lim.put("CODTAB", key);
|
||||
if (lim.read() == NOERR)
|
||||
calcolata = lim.get_bool("B1"); // Controlla se calcolata in definitivo
|
||||
|
||||
if (reset && lim.get_bool("B0"))
|
||||
{
|
||||
// Resetta i flag di calcolato sulla liquidazione IVA del mese di registrazione
|
||||
lim.put("B0", FALSE); // calcolato
|
||||
lim.put("B1", FALSE); // definitivo
|
||||
lim.rewrite();
|
||||
}
|
||||
|
||||
return calcolata;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::registra(bool re, bool force)
|
||||
{
|
||||
TLocalisamfile& m = lfile();
|
||||
|
||||
const int err = write_rec(re, m.curr(), m);
|
||||
if (err != NOERR) return err;
|
||||
|
||||
TLocalisamfile& rm = lfile(LF_RMOV);
|
||||
TLocalisamfile& ri = lfile(LF_RMOVIVA);
|
||||
|
||||
const long numreg = m.get_long("NUMREG");
|
||||
|
||||
for (int i = 0 ; i < cg_items(); i++)
|
||||
{
|
||||
if (!re) cg(i).put("NUMREG", numreg);
|
||||
const int err = write_rec(re, cg(i), rm);
|
||||
if (!force && err != NOERR) return err;
|
||||
}
|
||||
if (i < _oldcg)
|
||||
cancella(rm, i+1, _oldcg);
|
||||
_oldcg = cg_items();
|
||||
|
||||
|
||||
const int annoiva = m.get_int("ANNOIVA");
|
||||
const TString16 reg(m.get("REG"));
|
||||
TRegistro registro(reg, annoiva);
|
||||
const bool att_mista = reg.empty() ? FALSE : registro.attivita_mista();
|
||||
|
||||
for (i = 0 ; i < iva_items(); i++)
|
||||
{
|
||||
TRectype& r = iva(i);
|
||||
|
||||
if (!re) r.put("NUMREG", numreg); // Force correct number
|
||||
|
||||
int tipoatt = 1;
|
||||
if (att_mista)
|
||||
{
|
||||
const char tipo = r.get_char("TIPOC");
|
||||
if (tipo <= ' ')
|
||||
{
|
||||
TBill c(r.get_int("GRUPPO"), r.get_int("CONTO"), r.get_long("SOTTOCONTO"));
|
||||
tipoatt = c.tipo_att();
|
||||
}
|
||||
}
|
||||
r.put("TIPOATT", tipoatt);
|
||||
|
||||
const int err = write_rec(re, r, ri);
|
||||
if (!force && err != NOERR) return err;
|
||||
}
|
||||
|
||||
if (i < _oldiva)
|
||||
cancella(ri, i+1, _oldiva);
|
||||
_oldiva = iva_items();
|
||||
|
||||
// Aggiorna data registrazione e protocollo IVA sul registro
|
||||
const TDate datareg(m.get("DATAREG"));
|
||||
if (reg.not_empty())
|
||||
{
|
||||
const long protiva = m.get_long("PROTIVA");
|
||||
const long uprotiva = m.get_long("UPROTIVA");
|
||||
registro.update(max(protiva, uprotiva), datareg);
|
||||
}
|
||||
|
||||
// Aggiorna flags di ricalcolo liquidazione
|
||||
|
||||
controlla_liquidazione(datareg, TRUE);
|
||||
if (re && datareg != _olddate)
|
||||
controlla_liquidazione(_olddate, TRUE);
|
||||
|
||||
const int att = att_mista ? 2 : 1;
|
||||
// Chiave di PLM: Anno (1-4), Cod. Att. (5-9), Tipo att. (10-10), Mese (11-12)
|
||||
TTable plm("PLM");
|
||||
plm.setkey(1);
|
||||
for (int a = 1; a <= att; a++)
|
||||
{
|
||||
TString16 chiave;
|
||||
chiave << annoiva << registro.attivita() << a << date2liq(datareg);
|
||||
plm.put("CODTAB", chiave);
|
||||
if (plm.read() == NOERR)
|
||||
{
|
||||
const bool calcolato = plm.get_bool("B0");
|
||||
if (calcolato)
|
||||
{
|
||||
plm.put("B0", FALSE);
|
||||
plm.rewrite();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::write(bool force, TDate&)
|
||||
{
|
||||
const TRectype& r = lfile().curr();
|
||||
|
||||
_oldcg = _oldiva = 0;
|
||||
int err = registra(FALSE, force);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::rewrite(bool force, TDate&)
|
||||
{
|
||||
return registra(TRUE, force);
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::remove(TDate&)
|
||||
{
|
||||
TLocalisamfile& m = lfile();
|
||||
TLocalisamfile& rm = lfile(LF_RMOV);
|
||||
TLocalisamfile& ri = lfile(LF_RMOVIVA);
|
||||
|
||||
cancella(rm, 1, _oldcg);
|
||||
cancella(ri, 1, _oldiva);
|
||||
m.remove();
|
||||
_oldcg = _oldiva = 0;
|
||||
return m.status();
|
||||
}
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <xvtmacro.h>
|
||||
#include <applicat.h>
|
||||
#include <tabutil.h>
|
||||
|
||||
#include "cg2101.h"
|
||||
#include "cg2103.h"
|
||||
|
||||
#include <mov.h>
|
||||
#include <rmov.h>
|
||||
#include <rmoviva.h>
|
||||
|
||||
|
||||
// Calcola l'anno di esercizio di una data
|
||||
// Certified 99%
|
||||
int date2esc(const TDate& d, int* prevesc)
|
||||
{
|
||||
if (prevesc) *prevesc = 0;
|
||||
TTable esc("ESC");
|
||||
for (int err = esc.first(); err == NOERR; err = esc.next())
|
||||
{
|
||||
const TDate ia(esc.get("D0")); // Data inizio esercizio
|
||||
const TDate fa(esc.get("D1")); // Data fine esercizio
|
||||
TString16 sanno(esc.get("CODTAB")); sanno.cut(4);
|
||||
const int anno = atoi(sanno);
|
||||
if (d >= ia && d <= fa)
|
||||
return anno;
|
||||
if (prevesc) *prevesc = anno;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Movimento di prima nota
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
TMovimentoPN::TMovimentoPN()
|
||||
: TRelation(LF_MOV), _oldcg(0), _oldiva(0)
|
||||
{
|
||||
add(LF_RMOV, "NUMREG=NUMREG");
|
||||
add(LF_RMOVIVA, "NUMREG=NUMREG");
|
||||
}
|
||||
|
||||
void TMovimentoPN::destroy_rows()
|
||||
{
|
||||
_cg.destroy();
|
||||
_iva.destroy();
|
||||
}
|
||||
|
||||
|
||||
TRectype& TMovimentoPN::cg(int i)
|
||||
{
|
||||
TRectype* r = (TRectype*)_cg.objptr(i);
|
||||
if (r == NULL)
|
||||
{
|
||||
r = new TRectype(LF_RMOV);
|
||||
_cg.add(r, i);
|
||||
}
|
||||
return *r;
|
||||
}
|
||||
|
||||
TRectype& TMovimentoPN::iva(int i)
|
||||
{
|
||||
TRectype* r = (TRectype*)_iva.objptr(i);
|
||||
if (r == NULL)
|
||||
{
|
||||
r = new TRectype(LF_RMOVIVA);
|
||||
_iva.add(r, i);
|
||||
}
|
||||
return *r;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::read_mov_rows()
|
||||
{
|
||||
const TLocalisamfile& rm = lfile(LF_RMOV);
|
||||
const TLocalisamfile& ri = lfile(LF_RMOVIVA);
|
||||
position_rels();
|
||||
|
||||
destroy_rows();
|
||||
for(bool ok = is_first_match(LF_RMOV); ok; ok = next_match(LF_RMOV))
|
||||
{
|
||||
const int row = rm.get_int(RMV_NUMRIG) - 1;
|
||||
cg(row) = rm.curr();
|
||||
}
|
||||
_oldcg = cg_items();
|
||||
|
||||
for(ok = is_first_match(LF_RMOVIVA); ok; ok = next_match(LF_RMOVIVA))
|
||||
{
|
||||
const int row = ri.get_int(RMI_NUMRIG) - 1;
|
||||
iva(row) = ri.curr();
|
||||
}
|
||||
_oldiva = iva_items();
|
||||
|
||||
return NOERR;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::read(TIsamop op, TReclock lockop, TDate& atdate)
|
||||
{
|
||||
int err = file().read(op, lockop, atdate);
|
||||
if (err == NOERR)
|
||||
{
|
||||
_olddate = file().get("DATAREG");
|
||||
err = read_mov_rows();
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::write_rec(bool re, const TRectype& rec, TLocalisamfile& f)
|
||||
{
|
||||
const bool scrivi = re ? (f.rewrite(rec) != NOERR) : TRUE;
|
||||
if (scrivi)
|
||||
f.write(rec);
|
||||
|
||||
#ifdef TRC
|
||||
const long numreg = rec.get_long("NUMREG");
|
||||
const int numrig = f.num() == LF_MOV ? 0 : rec.get_int("NUMRIG");
|
||||
TRACE("write file=%d record=%ld nummov=%ld numrig=%d status=%d",
|
||||
f.num(), f.recno(), numreg, numrig, f.status());
|
||||
#endif
|
||||
|
||||
return f.status();
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::cancella(TLocalisamfile& f, int da, int a)
|
||||
{
|
||||
const long numreg = lfile().get_long(MOV_NUMREG);
|
||||
for (int i = da; i <= a; i++)
|
||||
{
|
||||
f.put(MOV_NUMREG, numreg);
|
||||
f.put(RMV_NUMRIG, i);
|
||||
if (f.read(_isequal, _lock) == NOERR)
|
||||
f.remove();
|
||||
}
|
||||
return f.status();
|
||||
}
|
||||
|
||||
char TMovimentoPN::frequenza_versamenti(int year) const
|
||||
{
|
||||
static int last_year = 0;
|
||||
static char last_freq = ' ';
|
||||
|
||||
if (year != last_year)
|
||||
{
|
||||
TString16 key;
|
||||
key << year;
|
||||
TTable lia("LIA");
|
||||
lia.setkey(1);
|
||||
lia.put("CODTAB", key);
|
||||
if (lia.read() != NOERR)
|
||||
{
|
||||
TLocalisamfile nditte(LF_NDITTE);
|
||||
nditte.setkey(1);
|
||||
nditte.put("CODDITTA", main_app().get_firm());
|
||||
nditte.read();
|
||||
last_freq = nditte.get_char("FREQVIVA");
|
||||
}
|
||||
else
|
||||
last_freq = lia.get_char("S7");
|
||||
CHECK(last_freq == 'M' || last_freq == 'T', "Frequenza versamenti IVA assurda");
|
||||
}
|
||||
|
||||
return last_freq;
|
||||
}
|
||||
|
||||
int TMovimentoPN::date2liq(const TDate& data) const
|
||||
{
|
||||
const int anno = data.year();
|
||||
int mese = data.month();
|
||||
if (frequenza_versamenti(anno) == 'T')
|
||||
mese += 2 - ((mese-1) % 3);
|
||||
return mese;
|
||||
}
|
||||
|
||||
|
||||
bool TMovimentoPN::controlla_liquidazione(const TDate& data, bool reset) const
|
||||
{
|
||||
bool calcolata = FALSE;
|
||||
|
||||
const int anno = data.year();
|
||||
const int mese = date2liq(data);
|
||||
|
||||
// Chiave di LIM: Anno (1-4), Mese (5-6)
|
||||
TString16 key;
|
||||
key << anno << mese;
|
||||
TTable lim("LIM");
|
||||
lim.setkey(1);
|
||||
lim.put("CODTAB", key);
|
||||
if (lim.read() == NOERR)
|
||||
calcolata = lim.get_bool("B1"); // Controlla se calcolata in definitivo
|
||||
|
||||
if (reset && lim.get_bool("B0"))
|
||||
{
|
||||
// Resetta i flag di calcolato sulla liquidazione IVA del mese di registrazione
|
||||
lim.put("B0", FALSE); // calcolato
|
||||
lim.put("B1", FALSE); // definitivo
|
||||
lim.rewrite();
|
||||
}
|
||||
|
||||
return calcolata;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::registra(bool re, bool force)
|
||||
{
|
||||
TLocalisamfile& m = lfile();
|
||||
|
||||
const int err = write_rec(re, m.curr(), m);
|
||||
if (err != NOERR) return err;
|
||||
|
||||
TLocalisamfile& rm = lfile(LF_RMOV);
|
||||
TLocalisamfile& ri = lfile(LF_RMOVIVA);
|
||||
|
||||
const long numreg = m.get_long("NUMREG");
|
||||
|
||||
for (int i = 0 ; i < cg_items(); i++)
|
||||
{
|
||||
if (!re) cg(i).put("NUMREG", numreg);
|
||||
const int err = write_rec(re, cg(i), rm);
|
||||
if (!force && err != NOERR) return err;
|
||||
}
|
||||
if (i < _oldcg)
|
||||
cancella(rm, i+1, _oldcg);
|
||||
_oldcg = cg_items();
|
||||
|
||||
|
||||
const int annoiva = m.get_int("ANNOIVA");
|
||||
const TString16 reg(m.get("REG"));
|
||||
TRegistro registro(reg, annoiva);
|
||||
const bool att_mista = reg.empty() ? FALSE : registro.attivita_mista();
|
||||
|
||||
for (i = 0 ; i < iva_items(); i++)
|
||||
{
|
||||
TRectype& r = iva(i);
|
||||
|
||||
if (!re) r.put("NUMREG", numreg); // Force correct number
|
||||
|
||||
int tipoatt = 1;
|
||||
if (att_mista)
|
||||
{
|
||||
const char tipo = r.get_char("TIPOC");
|
||||
if (tipo <= ' ')
|
||||
{
|
||||
TBill c(r.get_int("GRUPPO"), r.get_int("CONTO"), r.get_long("SOTTOCONTO"));
|
||||
tipoatt = c.tipo_att();
|
||||
}
|
||||
}
|
||||
r.put("TIPOATT", tipoatt);
|
||||
|
||||
const int err = write_rec(re, r, ri);
|
||||
if (!force && err != NOERR) return err;
|
||||
}
|
||||
|
||||
if (i < _oldiva)
|
||||
cancella(ri, i+1, _oldiva);
|
||||
_oldiva = iva_items();
|
||||
|
||||
// Aggiorna data registrazione e protocollo IVA sul registro
|
||||
const TDate datareg(m.get("DATAREG"));
|
||||
if (reg.not_empty())
|
||||
{
|
||||
const long protiva = m.get_long("PROTIVA");
|
||||
const long uprotiva = m.get_long("UPROTIVA");
|
||||
registro.update(max(protiva, uprotiva), datareg);
|
||||
}
|
||||
|
||||
// Aggiorna flags di ricalcolo liquidazione
|
||||
|
||||
controlla_liquidazione(datareg, TRUE);
|
||||
if (re && datareg != _olddate)
|
||||
controlla_liquidazione(_olddate, TRUE);
|
||||
|
||||
const int att = att_mista ? 2 : 1;
|
||||
// Chiave di PLM: Anno (1-4), Cod. Att. (5-9), Tipo att. (10-10), Mese (11-12)
|
||||
TTable plm("PLM");
|
||||
plm.setkey(1);
|
||||
for (int a = 1; a <= att; a++)
|
||||
{
|
||||
TString16 chiave;
|
||||
chiave << annoiva << registro.attivita() << a << date2liq(datareg);
|
||||
plm.put("CODTAB", chiave);
|
||||
if (plm.read() == NOERR)
|
||||
{
|
||||
const bool calcolato = plm.get_bool("B0");
|
||||
if (calcolato)
|
||||
{
|
||||
plm.put("B0", FALSE);
|
||||
plm.rewrite();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::write(bool force, TDate&)
|
||||
{
|
||||
const TRectype& r = lfile().curr();
|
||||
|
||||
_oldcg = _oldiva = 0;
|
||||
int err = registra(FALSE, force);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::rewrite(bool force, TDate&)
|
||||
{
|
||||
return registra(TRUE, force);
|
||||
}
|
||||
|
||||
|
||||
int TMovimentoPN::remove(TDate&)
|
||||
{
|
||||
TLocalisamfile& m = lfile();
|
||||
TLocalisamfile& rm = lfile(LF_RMOV);
|
||||
TLocalisamfile& ri = lfile(LF_RMOVIVA);
|
||||
|
||||
cancella(rm, 1, _oldcg);
|
||||
cancella(ri, 1, _oldiva);
|
||||
m.remove();
|
||||
_oldcg = _oldiva = 0;
|
||||
return m.status();
|
||||
}
|
||||
|
||||
|
533
cg/cg21iva.uml
533
cg/cg21iva.uml
@ -1,266 +1,267 @@
|
||||
PAGE "RIGA IVA" -1 -1 78 13
|
||||
|
||||
GROUPBOX DLG_NULL 76 5
|
||||
BEGIN
|
||||
PROMPT 1 1 "@BImposta"
|
||||
END
|
||||
|
||||
STRING 102 4
|
||||
BEGIN
|
||||
PROMPT 2 2 "IVA "
|
||||
HELP "Codice IVA della riga"
|
||||
FLAGS "U"
|
||||
USE %IVA
|
||||
INPUT CODTAB 102
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "%@6" R0
|
||||
DISPLAY "Tipo" S1
|
||||
OUTPUT 102 CODTAB
|
||||
OUTPUT 211 S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice IVA assente"
|
||||
VALIDATE ZEROFILL_FUNC 2
|
||||
END
|
||||
|
||||
STRING 211 58
|
||||
BEGIN
|
||||
PROMPT 16 2 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER 103 1
|
||||
BEGIN
|
||||
PROMPT 2 3 "Detraibilita' "
|
||||
HELP "Indicare il tipo di detraibilita' della riga"
|
||||
SHEET "Codice|Tipo detraibilita'@75"
|
||||
INPUT 103
|
||||
ITEM " |Regime normale"
|
||||
ITEM "1|IVA indetraibile su acquisti riferiti a ricavi esenti"
|
||||
ITEM "3|IVA indicata per passaggi interni al solo fine del calcolo di ventilazione"
|
||||
ITEM "9|IVA non detraibile per l'articolo 19"
|
||||
OUTPUT 103
|
||||
OUTPUT 130
|
||||
END
|
||||
|
||||
STRING 130 75 52
|
||||
BEGIN
|
||||
PROMPT 22 3 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER 101 15
|
||||
BEGIN
|
||||
PROMPT 2 4 "Imponibile "
|
||||
HELP "Importo imponibile"
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER 104 15
|
||||
BEGIN
|
||||
PROMPT 48 4 "Imposta "
|
||||
HELP "Importo dell'IVA. Se e' nullo, col tasto F8 si puo' effettuare lo scorporo"
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 76 5
|
||||
BEGIN
|
||||
PROMPT 1 6 "@BConto"
|
||||
END
|
||||
|
||||
LIST 106 1 12
|
||||
BEGIN
|
||||
PROMPT 2 7 "Tipo "
|
||||
HELP "Tipo del conto"
|
||||
FIELD TMCF
|
||||
ITEM " |Conto"
|
||||
MESSAGE SHOW,109|HIDE,209|HIDE,309|SHOW,110|HIDE,210|HIDE,310
|
||||
ITEM "C|Cliente"
|
||||
MESSAGE SHOW,209|HIDE,109|HIDE,309|SHOW,210|HIDE,110|HIDE,310
|
||||
ITEM "F|Fornitore"
|
||||
MESSAGE SHOW,309|HIDE,109|HIDE,209|SHOW,310|HIDE,110|HIDE,210
|
||||
FLAGS "U"
|
||||
END
|
||||
|
||||
NUMBER 107 3
|
||||
BEGIN
|
||||
PROMPT 22 7 "Gruppo "
|
||||
HELP "Codice del gruppo"
|
||||
FIELD GRUPPO
|
||||
END
|
||||
|
||||
NUMBER 108 3
|
||||
BEGIN
|
||||
PROMPT 38 7 "Conto "
|
||||
HELP "Codice del conto"
|
||||
FIELD CONTO
|
||||
USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO="")
|
||||
INPUT GRUPPO 107
|
||||
INPUT CONTO 108
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Tipo" TMCF
|
||||
OUTPUT 106 TMCF
|
||||
OUTPUT 107 GRUPPO
|
||||
OUTPUT 108 CONTO
|
||||
OUTPUT 110 DESCR
|
||||
ADD RUN cg0 -0
|
||||
MESSAGE DIRTY,109|DIRTY,209|DIRTY,309
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Conto assente"
|
||||
END
|
||||
|
||||
|
||||
NUMBER 109 6
|
||||
BEGIN
|
||||
PROMPT 55 7 "Sottoconto "
|
||||
HELP "Codice del sottoconto"
|
||||
FIELD SOTTOCONTO
|
||||
USE LF_PCON SELECT SOTTOCONTO!=""
|
||||
INPUT GRUPPO 107
|
||||
INPUT CONTO 108
|
||||
INPUT SOTTOCONTO 109
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "C/R" TIPOSPRIC
|
||||
OUTPUT 109 SOTTOCONTO
|
||||
OUTPUT 107 GRUPPO
|
||||
OUTPUT 108 CONTO
|
||||
OUTPUT 110 DESCR
|
||||
ADD RUN cg0 -0
|
||||
CHECKTYPE NORMAL
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
WARNING "Sottoconto assente"
|
||||
END
|
||||
|
||||
|
||||
NUMBER 209 6
|
||||
BEGIN
|
||||
PROMPT 55 7 "Cliente "
|
||||
HELP "Codice del cliente"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "C"
|
||||
INPUT CODCF 209
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
OUTPUT 209 CODCF
|
||||
OUTPUT 210 RAGSOC
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg0 -1
|
||||
MESSAGE COPY,109
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
WARNING "Cliente assente"
|
||||
END
|
||||
|
||||
NUMBER 309 6
|
||||
BEGIN
|
||||
PROMPT 55 7 "Fornitore "
|
||||
HELP "Codice del fornitore"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "F"
|
||||
INPUT CODCF 309
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
|
||||
OUTPUT 107 GRUPPO
|
||||
OUTPUT 108 CONTO
|
||||
OUTPUT 309 CODCF
|
||||
OUTPUT 310 RAGSOC
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg0 -1
|
||||
MESSAGE COPY,109
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
WARNING "Fornitore assente"
|
||||
END
|
||||
|
||||
STRING 110 50
|
||||
BEGIN
|
||||
PROMPT 2 8 "Descrizione "
|
||||
HELP "Descrizione del conto"
|
||||
FIELD LF_PCON->DESCR
|
||||
USE LF_PCON KEY 2
|
||||
INPUT DESCR 110
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
COPY OUTPUT 109
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg0 -0
|
||||
END
|
||||
|
||||
STRING 210 50
|
||||
BEGIN
|
||||
PROMPT 2 8 "Cliente "
|
||||
HELP "Ragione sociale del cliente"
|
||||
FIELD LF_CLIFO->RAGSOC
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "C"
|
||||
INPUT RAGSOC 210
|
||||
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Codice" CODCF
|
||||
COPY OUTPUT 209
|
||||
MESSAGE COPY,110
|
||||
ADD RUN cg0 -1
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING 310 50
|
||||
BEGIN
|
||||
PROMPT 2 8 "Fornitore "
|
||||
HELP "Ragione sociale del forntore"
|
||||
FIELD LF_PCON->SOTTOCONTO
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "F"
|
||||
INPUT RAGSOC 310
|
||||
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Codice" CODCF
|
||||
COPY OUTPUT 309
|
||||
MESSAGE COPY,110
|
||||
ADD RUN cg0 -1
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
LIST 105 1 53
|
||||
BEGIN
|
||||
PROMPT 2 9 "Tipo Costo/Ricavo "
|
||||
ITEM " |0. Acquisti o vendite in genere"
|
||||
ITEM "1|1. Acquisti beni per rivendita"
|
||||
ITEM "2|2. Acquisti beni ammortizzabili"
|
||||
ITEM "3|3. Acquisti beni ammortizzabili con detr. 6%"
|
||||
ITEM "4|4. Vendita beni strumentali art. 17"
|
||||
ITEM "5|5. Beni per rivendita da non ventilare"
|
||||
ITEM "8|8. Altri beni strumentali acquistati in leasing"
|
||||
FLAGS "D"
|
||||
HELP "Tipo Costo/Ricavo del conto"
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 9 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 9 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 "Elimina"
|
||||
MESSAGE EXIT,K_DEL
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
PAGE "RIGA IVA" -1 -1 78 13
|
||||
|
||||
GROUPBOX DLG_NULL 76 5
|
||||
BEGIN
|
||||
PROMPT 1 1 "@BImposta"
|
||||
END
|
||||
|
||||
STRING 102 4
|
||||
BEGIN
|
||||
PROMPT 2 2 "IVA "
|
||||
HELP "Codice IVA della riga"
|
||||
FLAGS "U"
|
||||
USE %IVA
|
||||
INPUT CODTAB 102
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "%@6" R0
|
||||
DISPLAY "Tipo" S1
|
||||
OUTPUT 102 CODTAB
|
||||
OUTPUT 211 S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice IVA assente"
|
||||
VALIDATE ZEROFILL_FUNC 2
|
||||
END
|
||||
|
||||
STRING 211 58
|
||||
BEGIN
|
||||
PROMPT 16 2 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER 103 1
|
||||
BEGIN
|
||||
PROMPT 2 3 "Detraibilita' "
|
||||
HELP "Indicare il tipo di detraibilita' della riga"
|
||||
SHEET "Codice|Tipo detraibilita'@75"
|
||||
INPUT 103
|
||||
ITEM " |Regime normale"
|
||||
ITEM "1|IVA indetraibile su acquisti riferiti a ricavi esenti"
|
||||
ITEM "3|IVA indicata per passaggi interni al solo fine del calcolo di ventilazione"
|
||||
ITEM "9|IVA non detraibile per l'articolo 19"
|
||||
OUTPUT 103
|
||||
OUTPUT 130
|
||||
END
|
||||
|
||||
STRING 130 75 52
|
||||
BEGIN
|
||||
PROMPT 22 3 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER 101 15
|
||||
BEGIN
|
||||
PROMPT 2 4 "Imponibile "
|
||||
HELP "Importo imponibile"
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
NUMBER 104 15
|
||||
BEGIN
|
||||
PROMPT 48 4 "Imposta "
|
||||
HELP "Importo dell'IVA. Se e' nullo, col tasto F8 si puo' effettuare lo scorporo"
|
||||
FLAGS "RV"
|
||||
PICTURE "."
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 76 5
|
||||
BEGIN
|
||||
PROMPT 1 6 "@BConto"
|
||||
END
|
||||
|
||||
LIST 106 1 12
|
||||
BEGIN
|
||||
PROMPT 2 7 "Tipo "
|
||||
HELP "Tipo del conto"
|
||||
FIELD TMCF
|
||||
ITEM " |Conto"
|
||||
MESSAGE SHOW,109|HIDE,209|HIDE,309|SHOW,110|HIDE,210|HIDE,310
|
||||
ITEM "C|Cliente"
|
||||
MESSAGE SHOW,209|HIDE,109|HIDE,309|SHOW,210|HIDE,110|HIDE,310
|
||||
ITEM "F|Fornitore"
|
||||
MESSAGE SHOW,309|HIDE,109|HIDE,209|SHOW,310|HIDE,110|HIDE,210
|
||||
FLAGS "U"
|
||||
END
|
||||
|
||||
NUMBER 107 3
|
||||
BEGIN
|
||||
PROMPT 22 7 "Gruppo "
|
||||
HELP "Codice del gruppo"
|
||||
FIELD GRUPPO
|
||||
END
|
||||
|
||||
NUMBER 108 3
|
||||
BEGIN
|
||||
PROMPT 38 7 "Conto "
|
||||
HELP "Codice del conto"
|
||||
FIELD CONTO
|
||||
USE LF_PCON SELECT (CONTO!="") && (SOTTOCONTO="")
|
||||
INPUT GRUPPO 107
|
||||
INPUT CONTO 108
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Tipo" TMCF
|
||||
OUTPUT 106 TMCF
|
||||
OUTPUT 107 GRUPPO
|
||||
OUTPUT 108 CONTO
|
||||
OUTPUT 110 DESCR
|
||||
ADD RUN cg0 -0
|
||||
MESSAGE DIRTY,109|DIRTY,209|DIRTY,309
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Conto assente"
|
||||
END
|
||||
|
||||
|
||||
NUMBER 109 6
|
||||
BEGIN
|
||||
PROMPT 55 7 "Sottoconto "
|
||||
HELP "Codice del sottoconto"
|
||||
FIELD SOTTOCONTO
|
||||
USE LF_PCON SELECT SOTTOCONTO!=""
|
||||
INPUT GRUPPO 107
|
||||
INPUT CONTO 108
|
||||
INPUT SOTTOCONTO 109
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "C/R" TIPOSPRIC
|
||||
OUTPUT 109 SOTTOCONTO
|
||||
OUTPUT 107 GRUPPO
|
||||
OUTPUT 108 CONTO
|
||||
OUTPUT 110 DESCR
|
||||
ADD RUN cg0 -0
|
||||
CHECKTYPE NORMAL
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
WARNING "Sottoconto assente"
|
||||
END
|
||||
|
||||
|
||||
NUMBER 209 6
|
||||
BEGIN
|
||||
PROMPT 55 7 "Cliente "
|
||||
HELP "Codice del cliente"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "C"
|
||||
INPUT CODCF 209
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
OUTPUT 209 CODCF
|
||||
OUTPUT 210 RAGSOC
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg0 -1
|
||||
MESSAGE COPY,109
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
WARNING "Cliente assente"
|
||||
END
|
||||
|
||||
NUMBER 309 6
|
||||
BEGIN
|
||||
PROMPT 55 7 "Fornitore "
|
||||
HELP "Codice del fornitore"
|
||||
USE LF_CLIFO
|
||||
INPUT TIPOCF "F"
|
||||
INPUT CODCF 309
|
||||
DISPLAY "Codice" CODCF
|
||||
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
|
||||
OUTPUT 107 GRUPPO
|
||||
OUTPUT 108 CONTO
|
||||
OUTPUT 309 CODCF
|
||||
OUTPUT 310 RAGSOC
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg0 -1
|
||||
MESSAGE COPY,109
|
||||
VALIDATE REQIF_FUNC 1 101
|
||||
WARNING "Fornitore assente"
|
||||
END
|
||||
|
||||
STRING 110 50
|
||||
BEGIN
|
||||
PROMPT 2 8 "Descrizione "
|
||||
HELP "Descrizione del conto"
|
||||
FIELD LF_PCON->DESCR
|
||||
USE LF_PCON KEY 2
|
||||
INPUT DESCR 110
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
COPY OUTPUT 109
|
||||
CHECKTYPE NORMAL
|
||||
ADD RUN cg0 -0
|
||||
END
|
||||
|
||||
STRING 210 50
|
||||
BEGIN
|
||||
PROMPT 2 8 "Cliente "
|
||||
HELP "Ragione sociale del cliente"
|
||||
FIELD LF_CLIFO->RAGSOC
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "C"
|
||||
INPUT RAGSOC 210
|
||||
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Codice" CODCF
|
||||
COPY OUTPUT 209
|
||||
MESSAGE COPY,110
|
||||
ADD RUN cg0 -1
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING 310 50
|
||||
BEGIN
|
||||
PROMPT 2 8 "Fornitore "
|
||||
HELP "Ragione sociale del forntore"
|
||||
FIELD LF_PCON->SOTTOCONTO
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "F"
|
||||
INPUT RAGSOC 310
|
||||
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Codice" CODCF
|
||||
COPY OUTPUT 309
|
||||
MESSAGE COPY,110
|
||||
ADD RUN cg0 -1
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
LIST 105 1 53
|
||||
BEGIN
|
||||
PROMPT 2 9 "Tipo Costo/Ricavo "
|
||||
ITEM " |0. Acquisti o vendite in genere"
|
||||
ITEM "1|1. Acquisti beni per rivendita"
|
||||
ITEM "2|2. Acquisti beni ammortizzabili"
|
||||
ITEM "3|3. Acquisti beni ammortizzabili con detr. 6%"
|
||||
ITEM "4|4. Vendita beni strumentali art. 17"
|
||||
ITEM "5|5. Beni per rivendita da non ventilare"
|
||||
ITEM "8|8. Altri beni strumentali acquistati in leasing"
|
||||
ITEM "9|9. Spese generali"
|
||||
FLAGS "D"
|
||||
HELP "Tipo Costo/Ricavo del conto"
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 9 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 9 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 "Elimina"
|
||||
MESSAGE EXIT,K_DEL
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
846
cg/cg4100.cpp
846
cg/cg4100.cpp
@ -1,423 +1,423 @@
|
||||
// Rinumerazione movimenti e saldi
|
||||
// fv 12/12/93
|
||||
// -------------------------------------------------------------------------
|
||||
// *TBI* Partenza dall'ultimo movimento stampato
|
||||
// *TBI* Aggiornamento scadenziario
|
||||
// *TBI* Aggiornamento cespiti
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
#include <stdlib.h>
|
||||
//#if XVT_OS == XVT_OS_SCOUNIX
|
||||
#include <signal.h>
|
||||
//#endif
|
||||
|
||||
#include <applicat.h>
|
||||
#include <isam.h>
|
||||
#include <mask.h>
|
||||
#include <progind.h>
|
||||
#include <sort.h>
|
||||
#include <urldefid.h>
|
||||
#include <utility.h>
|
||||
|
||||
#define FLD_CG41_YEAR 100
|
||||
#define MAX_CNT 300
|
||||
|
||||
#include <mov.h>
|
||||
#include <rmov.h>
|
||||
#include <rmoviva.h>
|
||||
#include <saldi.h>
|
||||
#include <causali.h>
|
||||
|
||||
#include "cglib.h"
|
||||
|
||||
struct therec {
|
||||
char DATAREG[9];
|
||||
char REG[4];
|
||||
char DATADOC[9];
|
||||
char NUMPROT[9];
|
||||
char ANNOES[5];
|
||||
char NUMREG[8];
|
||||
};
|
||||
|
||||
class CG4100_App : public TApplication
|
||||
{
|
||||
TString _year;
|
||||
char _optype;
|
||||
|
||||
public:
|
||||
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
|
||||
bool set_parms();
|
||||
virtual bool menu(MENU_TAG m);
|
||||
|
||||
void restore_mov(TSystemisamfile& a, TSystemisamfile& b, TSystemisamfile& c);
|
||||
void sort_all();
|
||||
bool sort_mov();
|
||||
bool sort_sal();
|
||||
|
||||
CG4100_App() : TApplication(), _year(4), _optype('S') {}
|
||||
virtual ~CG4100_App() {}
|
||||
};
|
||||
|
||||
|
||||
bool CG4100_App::create()
|
||||
{
|
||||
TApplication::create();
|
||||
|
||||
// UNIX: signal() per intercettare errori
|
||||
#if XVT_OS == XVT_OS_SCOUNIX
|
||||
signal(SIGINT,SIG_IGN);
|
||||
#endif
|
||||
|
||||
if (fexist("__sal__.sav"))
|
||||
warning_box("Un'operazione di riordino saldi si e' conclusa"
|
||||
" impropriamente. Si raccomanda di rieseguirla");
|
||||
|
||||
if (fexist("__mov__.sav"))
|
||||
warning_box("Un'operazione di riordino movimenti si e' conclusa"
|
||||
" impropriamente. Si raccomanda di rieseguirla");
|
||||
if (argc() > 2)
|
||||
_optype = toupper(argv(2)[0]);
|
||||
dispatch_e_menu(MENU_ITEM(1));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool CG4100_App::destroy()
|
||||
{
|
||||
// UNIX: resettare i segnali
|
||||
#if XVT_OS == XVT_OS_SCOUNIX
|
||||
signal(SIGINT,SIG_DFL);
|
||||
#endif
|
||||
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
bool CG4100_App::set_parms()
|
||||
{
|
||||
const bool saldi = _optype == 'S';
|
||||
TMask m(saldi ? "cg4100b" : "cg4100a");
|
||||
|
||||
m.run();
|
||||
|
||||
if (saldi)
|
||||
_year = m.get(FLD_CG41_YEAR);
|
||||
else
|
||||
_year = 0;
|
||||
|
||||
return m.last_key() == K_ENTER;
|
||||
}
|
||||
|
||||
|
||||
bool CG4100_App::menu(MENU_TAG m)
|
||||
{
|
||||
if (_optype == 'S')
|
||||
sort_sal();
|
||||
else
|
||||
if (_optype == 'M')
|
||||
sort_mov();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
void CG4100_App::restore_mov(TSystemisamfile& mov, TSystemisamfile& rmov,
|
||||
TSystemisamfile& rmoviva)
|
||||
{
|
||||
long rn, rec;
|
||||
if (fexist("__mov__.ind"))
|
||||
{
|
||||
// rebuild all indexes
|
||||
mov.close(); rmov.close(); rmoviva.close();
|
||||
mov.packfile(); rmov.packfile(); rmoviva.packfile();
|
||||
mov.packindex(); rmov.packindex(); rmoviva.packindex();
|
||||
remove("__mov__.ind");
|
||||
return;
|
||||
}
|
||||
|
||||
FILE* fp = fopen("__mov__.sav","r");
|
||||
if (feof(fp))
|
||||
{
|
||||
warning_box("File di ripristino vuoto; il ripristino non e' necessario");
|
||||
remove("__mov__.sav");
|
||||
return;
|
||||
};
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (feof(fp)) break;
|
||||
fscanf(fp,"%ld %ld", &rn, &rec);
|
||||
|
||||
mov.readat(rec);
|
||||
mov.put(MOV_NUMREG,rn);
|
||||
mov.rewrite();
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (feof(fp)) break;
|
||||
fscanf(fp,"%ld",&rec);
|
||||
if (rec == -1l) break;
|
||||
rmov.readat(rec);
|
||||
rmov.put(RMV_NUMREG,rn);
|
||||
rmov.rewrite();
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
if (feof(fp)) break;
|
||||
fscanf(fp,"%ld",&rec);
|
||||
if (rec == -1l) break;
|
||||
rmoviva.readat(rec);
|
||||
rmoviva.put(RMI_NUMREG,rn);
|
||||
rmoviva.rewrite();
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
remove("__mov__.sav");
|
||||
}
|
||||
|
||||
|
||||
bool CG4100_App::sort_mov()
|
||||
{
|
||||
if (!set_parms())
|
||||
return FALSE;
|
||||
|
||||
TSystemisamfile mov(LF_MOV);
|
||||
TSystemisamfile rmov(LF_RMOV);
|
||||
TSystemisamfile rmoviva(LF_RMOVIVA);
|
||||
|
||||
if (mov.open(_excllock) || rmov.open(_excllock) ||
|
||||
rmoviva.open(_excllock))
|
||||
{
|
||||
warning_box("Gli archivi sono in uso. Operazione interrotta");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
mov.indexoff(); rmov.indexoff(); rmoviva.indexoff();
|
||||
mov.first();
|
||||
|
||||
TSort sort(sizeof(struct therec));
|
||||
|
||||
if (fexist("__mov__.sav") || fexist("__mov__.ind"))
|
||||
{
|
||||
// previous operation failed
|
||||
if (yesno_box("Un riordinamento precedente e' fallito.\n"
|
||||
" Ripristino la situazione iniziale ora?" ))
|
||||
restore_mov(mov, rmov, rmoviva);
|
||||
else return FALSE;
|
||||
}
|
||||
|
||||
therec rbuf;
|
||||
|
||||
sort.addsortkey(rbuf.DATAREG - (char*)&rbuf, 8);
|
||||
sort.addsortkey(rbuf.REG - (char*)&rbuf, 3);
|
||||
sort.addsortkey(rbuf.NUMPROT - (char*)&rbuf, 8);
|
||||
sort.addsortkey(rbuf.DATADOC - (char*)&rbuf, 8);
|
||||
sort.addsortkey(rbuf.NUMREG - (char*)&rbuf, 7);
|
||||
|
||||
sort.init();
|
||||
|
||||
TProgind prnd(mov.items(),
|
||||
"Riordino archivio movimenti in corso\nOrdinamento file movimenti...",
|
||||
FALSE,TRUE,30);
|
||||
TString16 s;
|
||||
|
||||
while (!mov.eof())
|
||||
{
|
||||
do_events();
|
||||
TDate d(mov.get(MOV_DATAREG));
|
||||
strcpy(rbuf.DATAREG, d.string(ANSI));
|
||||
strcpy(rbuf.REG, mov.get(MOV_REG));
|
||||
d = mov.get(MOV_DATADOC);
|
||||
s = mov.get(MOV_PROTIVA);
|
||||
if (s.len() > 0 && isdigit(s[s.len() - 1])) s << " ";
|
||||
s.right_just(8);
|
||||
strcpy(rbuf.NUMPROT, (const char *) s);
|
||||
strcpy(rbuf.DATADOC, d.string(ANSI));
|
||||
strcpy(rbuf.ANNOES, mov.get(MOV_ANNOES));
|
||||
strcpy(rbuf.NUMREG, mov.get(MOV_NUMREG));
|
||||
|
||||
sort.sort((char*)&rbuf);
|
||||
mov.next();
|
||||
prnd.addstatus(1);
|
||||
}
|
||||
sort.endsort();
|
||||
|
||||
prnd.setstatus(0);
|
||||
prnd.set_text("Riordino archivio movimenti in corso\nRiscrittura file movimenti...");
|
||||
|
||||
therec* rr;
|
||||
long num = 1;
|
||||
TRecnotype recno;
|
||||
|
||||
while ((rr = (therec*)sort.retrieve()) != NULL)
|
||||
{
|
||||
do_events();
|
||||
if (atol(rr->NUMREG) != num)
|
||||
{
|
||||
// find record
|
||||
mov.curr().zero();
|
||||
mov.put(MOV_NUMREG, rr->NUMREG);
|
||||
|
||||
mov.read();
|
||||
// should never happen
|
||||
CHECK(mov.good(), "Archivio movimenti inconsistente. Questo si' che e' un casino.");
|
||||
|
||||
// retrieve and change NUMREG
|
||||
recno = mov.recno();
|
||||
TString rgn = rr->NUMREG;
|
||||
FILE* fsav = fopen("__mov__.sav","a");
|
||||
fprintf(fsav,"%s %d ", (const char*)rgn, recno);
|
||||
fclose(fsav);
|
||||
|
||||
mov.put(MOV_NUMREG,num);
|
||||
mov.rewriteat(recno);
|
||||
// update linked records
|
||||
|
||||
rmov.curr().zero();
|
||||
rmov.put(RMV_NUMREG,rgn);
|
||||
rmov.read(_isgteq);
|
||||
|
||||
int row = 0;
|
||||
|
||||
while (!rmov.eof() && rgn == rmov.get(RMV_NUMREG) &&
|
||||
row++ < rmov.get_int(RMV_NUMRIG))
|
||||
{
|
||||
recno = rmov.recno();
|
||||
fsav = fopen("__mov__.sav","a");
|
||||
fprintf(fsav,"%ld ", recno);
|
||||
fclose(fsav);
|
||||
rmov.put(RMV_NUMREG,num);
|
||||
rmov.rewriteat(recno);
|
||||
rmov.next();
|
||||
}
|
||||
fsav = fopen("__mov__.sav","a");
|
||||
fprintf(fsav,"-1"); fclose(fsav);
|
||||
|
||||
rmoviva.zero();
|
||||
rmoviva.put(RMI_NUMREG,rgn);
|
||||
rmoviva.read(_isgteq);
|
||||
|
||||
row = 0;
|
||||
|
||||
while (!rmoviva.eof() && rgn == rmoviva.get(RMV_NUMREG) &&
|
||||
row++ < rmoviva.get_int(RMV_NUMRIG))
|
||||
{
|
||||
recno = rmoviva.recno();
|
||||
fsav = fopen("__mov__.sav","a");
|
||||
fprintf(fsav,"%ld ", recno);
|
||||
fclose(fsav);
|
||||
rmoviva.put(RMI_NUMREG,num);
|
||||
rmoviva.rewriteat(recno);
|
||||
rmoviva.next();
|
||||
}
|
||||
fsav = fopen("__mov__.sav","a");
|
||||
fprintf(fsav,"-1"); fclose(fsav);
|
||||
}
|
||||
num++;
|
||||
prnd.addstatus(1);
|
||||
}
|
||||
|
||||
remove("__mov__.sav");
|
||||
|
||||
FILE* fsav = fopen("__mov__.ind","w"); fclose(fsav);
|
||||
|
||||
prnd.set_text("Riordino archivio movimenti in corso\nRicostruzione files indice...");
|
||||
|
||||
// rebuild indexes
|
||||
mov.close(); rmov.close(); rmoviva.close();
|
||||
mov.indexon(); rmov.indexon(); rmoviva.indexon();
|
||||
mov.packfile(); rmov.packfile(); rmoviva.packfile();
|
||||
mov.packindex(); rmov.packindex(); rmoviva.packindex();
|
||||
|
||||
remove("__mov__.ind");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool CG4100_App::sort_sal()
|
||||
{
|
||||
|
||||
if (!set_parms())
|
||||
return FALSE;
|
||||
|
||||
FILE* fp = fopen ("__sal__.sav","w");
|
||||
fclose(fp);
|
||||
|
||||
TLocalisamfile rmov(LF_RMOV);
|
||||
TLocalisamfile mov(LF_MOV);
|
||||
TLocalisamfile causali(LF_CAUSALI);
|
||||
TSaldo_agg sal;
|
||||
int gruppo, conto;
|
||||
const int year = atoi(_year);
|
||||
long oldnumreg = 0L, sottoconto;
|
||||
TProgind prnd(rmov.items(),
|
||||
"Riordino archivio saldi in corso\nLettura archivio movimenti...",
|
||||
FALSE,TRUE,30);
|
||||
|
||||
causali.zero();
|
||||
mov.setkey(1);
|
||||
rmov.first();
|
||||
sal.reset();
|
||||
sal.set_anno_es(year);
|
||||
sal.clear_saldi(year);
|
||||
while (!rmov.eof())
|
||||
{
|
||||
if (_year == rmov.get(RMV_ANNOES))
|
||||
{
|
||||
const long numreg = rmov.get_long(RMV_NUMREG);
|
||||
|
||||
gruppo = rmov.get_int(RMV_GRUPPO);
|
||||
conto = rmov.get_int(RMV_CONTO);
|
||||
sottoconto = rmov.get_long(RMV_SOTTOCONTO);
|
||||
if (numreg != oldnumreg)
|
||||
{
|
||||
oldnumreg = numreg;
|
||||
mov.zero();
|
||||
mov.put(MOV_NUMREG, numreg);
|
||||
mov.read();
|
||||
CHECK(mov.good(),"Archivi movimenti e righe inconsistenti");
|
||||
|
||||
const char* codcaus = mov.get(MOV_CODCAUS);
|
||||
|
||||
// cerca causale
|
||||
causali.zero();
|
||||
if (*codcaus)
|
||||
{
|
||||
causali.put(CAU_CODCAUS, codcaus);
|
||||
causali.read();
|
||||
CHECK(causali.good(),"Archivi causali e movimenti inconsistenti");
|
||||
}
|
||||
}
|
||||
const char sezione = rmov.get(RMV_SEZIONE)[0];
|
||||
real importo(rmov.get(RMV_IMPORTO));
|
||||
|
||||
sal.set_movap(causali.get(CAU_MOVAP) == "A");
|
||||
sal.set_movprovv(mov.get(MOV_PROVVIS).not_empty());
|
||||
sal.aggiorna(gruppo, conto, sottoconto, importo, sezione);
|
||||
if (sal.items() > MAX_CNT)
|
||||
{
|
||||
sal.registra();
|
||||
sal.reset();
|
||||
sal.set_anno_es(atoi(_year));
|
||||
}
|
||||
}
|
||||
rmov.next();
|
||||
prnd.addstatus(1);
|
||||
do_events();
|
||||
}
|
||||
if (sal.items() > 0)
|
||||
sal.registra();
|
||||
remove("__sal__.sav");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
int cg4100(int argc, char* argv[])
|
||||
{
|
||||
CG4100_App main_app;
|
||||
main_app.run(argc, argv, "Riordinamento movimenti/Ricalcolo Saldi");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Rinumerazione movimenti e saldi
|
||||
// fv 12/12/93
|
||||
// -------------------------------------------------------------------------
|
||||
// *TBI* Partenza dall'ultimo movimento stampato
|
||||
// *TBI* Aggiornamento scadenziario
|
||||
// *TBI* Aggiornamento cespiti
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <applicat.h>
|
||||
#include <isam.h>
|
||||
#include <mask.h>
|
||||
#include <progind.h>
|
||||
#include <sort.h>
|
||||
#include <urldefid.h>
|
||||
#include <utility.h>
|
||||
|
||||
#define FLD_CG41_YEAR 100
|
||||
#define MAX_CNT 300
|
||||
|
||||
#include <mov.h>
|
||||
#include <rmov.h>
|
||||
#include <rmoviva.h>
|
||||
#include <saldi.h>
|
||||
#include <causali.h>
|
||||
|
||||
#include "cglib.h"
|
||||
|
||||
struct therec {
|
||||
char DATAREG[9];
|
||||
char REG[4];
|
||||
char DATADOC[9];
|
||||
char NUMPROT[9];
|
||||
char ANNOES[5];
|
||||
char NUMREG[8];
|
||||
};
|
||||
|
||||
class CG4100_App : public TApplication
|
||||
{
|
||||
TString _year;
|
||||
char _optype;
|
||||
TMask* _msk;
|
||||
|
||||
public:
|
||||
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
|
||||
bool set_parms();
|
||||
virtual bool menu(MENU_TAG m);
|
||||
|
||||
void restore_mov(TSystemisamfile& a, TSystemisamfile& b, TSystemisamfile& c);
|
||||
void sort_all();
|
||||
bool sort_mov();
|
||||
bool sort_sal();
|
||||
|
||||
CG4100_App() : TApplication(), _year(4), _optype('S') {}
|
||||
virtual ~CG4100_App() {}
|
||||
};
|
||||
|
||||
|
||||
bool CG4100_App::create()
|
||||
{
|
||||
TApplication::create();
|
||||
|
||||
// UNIX: signal() per intercettare errori
|
||||
#if XVT_OS == XVT_OS_SCOUNIX
|
||||
signal(SIGINT,SIG_IGN);
|
||||
#endif
|
||||
|
||||
if (fexist("__sal__.sav"))
|
||||
warning_box("Un'operazione di riordino saldi si e' conclusa"
|
||||
" impropriamente. Si raccomanda di rieseguirla");
|
||||
|
||||
if (fexist("__mov__.sav"))
|
||||
warning_box("Un'operazione di riordino movimenti si e' conclusa"
|
||||
" impropriamente. Si raccomanda di rieseguirla");
|
||||
|
||||
if (argc() > 2)
|
||||
_optype = toupper(argv(2)[0]);
|
||||
|
||||
_msk = new TMask(_optype == 'S' ? "cg4100b" : "cg4100a");
|
||||
|
||||
dispatch_e_menu(MENU_ITEM(1));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool CG4100_App::destroy()
|
||||
{
|
||||
// UNIX: resettare i segnali
|
||||
#if XVT_OS == XVT_OS_SCOUNIX
|
||||
signal(SIGINT,SIG_DFL);
|
||||
#endif
|
||||
delete _msk;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
bool CG4100_App::set_parms()
|
||||
{
|
||||
_msk->run();
|
||||
|
||||
if (_optype == 'S')
|
||||
_year = _msk->get(FLD_CG41_YEAR);
|
||||
else
|
||||
_year = 0;
|
||||
|
||||
return _msk->last_key() == K_ENTER;
|
||||
}
|
||||
|
||||
|
||||
bool CG4100_App::menu(MENU_TAG)
|
||||
{
|
||||
if (_optype == 'S')
|
||||
sort_sal();
|
||||
else
|
||||
sort_mov();
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
void CG4100_App::restore_mov(TSystemisamfile& mov, TSystemisamfile& rmov,
|
||||
TSystemisamfile& rmoviva)
|
||||
{
|
||||
long rn, rec;
|
||||
if (fexist("__mov__.ind"))
|
||||
{
|
||||
// rebuild all indexes
|
||||
mov.close(); rmov.close(); rmoviva.close();
|
||||
mov.packfile(); rmov.packfile(); rmoviva.packfile();
|
||||
mov.packindex(); rmov.packindex(); rmoviva.packindex();
|
||||
remove("__mov__.ind");
|
||||
return;
|
||||
}
|
||||
|
||||
FILE* fp = fopen("__mov__.sav","r");
|
||||
if (feof(fp))
|
||||
{
|
||||
warning_box("File di ripristino vuoto; il ripristino non e' necessario");
|
||||
remove("__mov__.sav");
|
||||
return;
|
||||
};
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (feof(fp)) break;
|
||||
fscanf(fp,"%ld %ld", &rn, &rec);
|
||||
|
||||
mov.readat(rec);
|
||||
mov.put(MOV_NUMREG,rn);
|
||||
mov.rewrite();
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (feof(fp)) break;
|
||||
fscanf(fp,"%ld",&rec);
|
||||
if (rec == -1l) break;
|
||||
rmov.readat(rec);
|
||||
rmov.put(RMV_NUMREG,rn);
|
||||
rmov.rewrite();
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
if (feof(fp)) break;
|
||||
fscanf(fp,"%ld",&rec);
|
||||
if (rec == -1l) break;
|
||||
rmoviva.readat(rec);
|
||||
rmoviva.put(RMI_NUMREG,rn);
|
||||
rmoviva.rewrite();
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
remove("__mov__.sav");
|
||||
}
|
||||
|
||||
|
||||
bool CG4100_App::sort_mov()
|
||||
{
|
||||
if (!set_parms())
|
||||
return FALSE;
|
||||
|
||||
TSystemisamfile mov(LF_MOV);
|
||||
TSystemisamfile rmov(LF_RMOV);
|
||||
TSystemisamfile rmoviva(LF_RMOVIVA);
|
||||
|
||||
if (mov.open(_excllock) || rmov.open(_excllock) ||
|
||||
rmoviva.open(_excllock))
|
||||
{
|
||||
warning_box("Gli archivi sono in uso. Operazione interrotta");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
mov.indexoff(); rmov.indexoff(); rmoviva.indexoff();
|
||||
mov.first();
|
||||
|
||||
TSort sort(sizeof(struct therec));
|
||||
|
||||
if (fexist("__mov__.sav") || fexist("__mov__.ind"))
|
||||
{
|
||||
// previous operation failed
|
||||
if (yesno_box("Un riordinamento precedente e' fallito.\n"
|
||||
" Ripristino la situazione iniziale ora?" ))
|
||||
restore_mov(mov, rmov, rmoviva);
|
||||
else return FALSE;
|
||||
}
|
||||
|
||||
therec rbuf;
|
||||
|
||||
sort.addsortkey(rbuf.DATAREG - (char*)&rbuf, 8);
|
||||
sort.addsortkey(rbuf.REG - (char*)&rbuf, 3);
|
||||
sort.addsortkey(rbuf.NUMPROT - (char*)&rbuf, 8);
|
||||
sort.addsortkey(rbuf.DATADOC - (char*)&rbuf, 8);
|
||||
sort.addsortkey(rbuf.NUMREG - (char*)&rbuf, 7);
|
||||
|
||||
sort.init();
|
||||
|
||||
TProgind prnd(mov.items(),
|
||||
"Riordino archivio movimenti in corso\nOrdinamento file movimenti...",
|
||||
FALSE,TRUE,30);
|
||||
TString16 s;
|
||||
|
||||
while (!mov.eof())
|
||||
{
|
||||
do_events();
|
||||
TDate d(mov.get(MOV_DATAREG));
|
||||
strcpy(rbuf.DATAREG, d.string(ANSI));
|
||||
strcpy(rbuf.REG, mov.get(MOV_REG));
|
||||
d = mov.get(MOV_DATADOC);
|
||||
s = mov.get(MOV_PROTIVA);
|
||||
if (s.len() > 0 && isdigit(s[s.len() - 1])) s << " ";
|
||||
s.right_just(8);
|
||||
strcpy(rbuf.NUMPROT, (const char *) s);
|
||||
strcpy(rbuf.DATADOC, d.string(ANSI));
|
||||
strcpy(rbuf.ANNOES, mov.get(MOV_ANNOES));
|
||||
strcpy(rbuf.NUMREG, mov.get(MOV_NUMREG));
|
||||
|
||||
sort.sort((char*)&rbuf);
|
||||
mov.next();
|
||||
prnd.addstatus(1);
|
||||
}
|
||||
sort.endsort();
|
||||
|
||||
prnd.setstatus(0);
|
||||
prnd.set_text("Riordino archivio movimenti in corso\nRiscrittura file movimenti...");
|
||||
|
||||
therec* rr;
|
||||
long num = 1;
|
||||
TRecnotype recno;
|
||||
|
||||
while ((rr = (therec*)sort.retrieve()) != NULL)
|
||||
{
|
||||
do_events();
|
||||
if (atol(rr->NUMREG) != num)
|
||||
{
|
||||
// find record
|
||||
mov.curr().zero();
|
||||
mov.put(MOV_NUMREG, rr->NUMREG);
|
||||
|
||||
mov.read();
|
||||
// should never happen
|
||||
CHECK(mov.good(), "Archivio movimenti inconsistente. Questo si' che e' un casino.");
|
||||
|
||||
// retrieve and change NUMREG
|
||||
recno = mov.recno();
|
||||
TString rgn = rr->NUMREG;
|
||||
FILE* fsav = fopen("__mov__.sav","a");
|
||||
fprintf(fsav,"%s %d ", (const char*)rgn, recno);
|
||||
fclose(fsav);
|
||||
|
||||
mov.put(MOV_NUMREG,num);
|
||||
mov.rewriteat(recno);
|
||||
// update linked records
|
||||
|
||||
rmov.curr().zero();
|
||||
rmov.put(RMV_NUMREG,rgn);
|
||||
rmov.read(_isgteq);
|
||||
|
||||
int row = 0;
|
||||
|
||||
while (!rmov.eof() && rgn == rmov.get(RMV_NUMREG) &&
|
||||
row++ < rmov.get_int(RMV_NUMRIG))
|
||||
{
|
||||
recno = rmov.recno();
|
||||
fsav = fopen("__mov__.sav","a");
|
||||
fprintf(fsav,"%ld ", recno);
|
||||
fclose(fsav);
|
||||
rmov.put(RMV_NUMREG,num);
|
||||
rmov.rewriteat(recno);
|
||||
rmov.next();
|
||||
}
|
||||
fsav = fopen("__mov__.sav","a");
|
||||
fprintf(fsav,"-1"); fclose(fsav);
|
||||
|
||||
rmoviva.zero();
|
||||
rmoviva.put(RMI_NUMREG,rgn);
|
||||
rmoviva.read(_isgteq);
|
||||
|
||||
row = 0;
|
||||
|
||||
while (!rmoviva.eof() && rgn == rmoviva.get(RMV_NUMREG) &&
|
||||
row++ < rmoviva.get_int(RMV_NUMRIG))
|
||||
{
|
||||
recno = rmoviva.recno();
|
||||
fsav = fopen("__mov__.sav","a");
|
||||
fprintf(fsav,"%ld ", recno);
|
||||
fclose(fsav);
|
||||
rmoviva.put(RMI_NUMREG,num);
|
||||
rmoviva.rewriteat(recno);
|
||||
rmoviva.next();
|
||||
}
|
||||
fsav = fopen("__mov__.sav","a");
|
||||
fprintf(fsav,"-1"); fclose(fsav);
|
||||
}
|
||||
num++;
|
||||
prnd.addstatus(1);
|
||||
}
|
||||
|
||||
remove("__mov__.sav");
|
||||
|
||||
FILE* fsav = fopen("__mov__.ind","w"); fclose(fsav);
|
||||
|
||||
prnd.set_text("Riordino archivio movimenti in corso\nRicostruzione files indice...");
|
||||
|
||||
// rebuild indexes
|
||||
mov.close(); rmov.close(); rmoviva.close();
|
||||
mov.indexon(); rmov.indexon(); rmoviva.indexon();
|
||||
mov.packfile(); rmov.packfile(); rmoviva.packfile();
|
||||
mov.packindex(); rmov.packindex(); rmoviva.packindex();
|
||||
|
||||
remove("__mov__.ind");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool CG4100_App::sort_sal()
|
||||
{
|
||||
|
||||
if (!set_parms())
|
||||
return FALSE;
|
||||
|
||||
FILE* fp = fopen ("__sal__.sav","w");
|
||||
fclose(fp);
|
||||
|
||||
TLocalisamfile rmov(LF_RMOV);
|
||||
TLocalisamfile mov(LF_MOV);
|
||||
TLocalisamfile causali(LF_CAUSALI);
|
||||
TSaldo_agg sal;
|
||||
int gruppo, conto;
|
||||
const int year = atoi(_year);
|
||||
long oldnumreg = 0L, sottoconto;
|
||||
TProgind prnd(rmov.items(),
|
||||
"Riordino archivio saldi in corso\nLettura archivio movimenti...",
|
||||
FALSE,TRUE,30);
|
||||
|
||||
causali.zero();
|
||||
mov.setkey(1);
|
||||
rmov.first();
|
||||
sal.reset();
|
||||
sal.set_anno_es(year);
|
||||
sal.clear_saldi(year);
|
||||
while (!rmov.eof())
|
||||
{
|
||||
if (_year == rmov.get(RMV_ANNOES))
|
||||
{
|
||||
const long numreg = rmov.get_long(RMV_NUMREG);
|
||||
|
||||
gruppo = rmov.get_int(RMV_GRUPPO);
|
||||
conto = rmov.get_int(RMV_CONTO);
|
||||
sottoconto = rmov.get_long(RMV_SOTTOCONTO);
|
||||
if (numreg != oldnumreg)
|
||||
{
|
||||
oldnumreg = numreg;
|
||||
mov.zero();
|
||||
mov.put(MOV_NUMREG, numreg);
|
||||
mov.read();
|
||||
CHECK(mov.good(),"Archivi movimenti e righe inconsistenti");
|
||||
|
||||
const char* codcaus = mov.get(MOV_CODCAUS);
|
||||
|
||||
// cerca causale
|
||||
causali.zero();
|
||||
if (*codcaus)
|
||||
{
|
||||
causali.put(CAU_CODCAUS, codcaus);
|
||||
causali.read();
|
||||
CHECK(causali.good(),"Archivi causali e movimenti inconsistenti");
|
||||
}
|
||||
}
|
||||
const char sezione = rmov.get(RMV_SEZIONE)[0];
|
||||
real importo(rmov.get(RMV_IMPORTO));
|
||||
|
||||
sal.set_movap(causali.get(CAU_MOVAP) == "A");
|
||||
sal.set_movprovv(mov.get(MOV_PROVVIS).not_empty());
|
||||
sal.aggiorna(gruppo, conto, sottoconto, importo, sezione);
|
||||
if (sal.items() > MAX_CNT)
|
||||
{
|
||||
sal.registra();
|
||||
sal.reset();
|
||||
sal.set_anno_es(atoi(_year));
|
||||
}
|
||||
}
|
||||
rmov.next();
|
||||
prnd.addstatus(1);
|
||||
do_events();
|
||||
}
|
||||
if (sal.items() > 0)
|
||||
sal.registra();
|
||||
remove("__sal__.sav");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
int cg4100(int argc, char* argv[])
|
||||
{
|
||||
CG4100_App main_app;
|
||||
main_app.run(argc, argv, "Ricalcolo Saldi");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
5726
cg/cg4400.cpp
5726
cg/cg4400.cpp
File diff suppressed because it is too large
Load Diff
282
cg/cglib.h
282
cg/cglib.h
@ -1,141 +1,141 @@
|
||||
#ifndef __CGLIB_H
|
||||
#define __CGLIB_H
|
||||
|
||||
#ifndef __ISAM_H
|
||||
#include <isam.h>
|
||||
#endif
|
||||
#ifndef __REAL_H
|
||||
#include <real.h>
|
||||
#endif
|
||||
#ifndef __DATE_H
|
||||
#include <date.h>
|
||||
#endif
|
||||
|
||||
#include <assoc.h>
|
||||
#include "conto.h"
|
||||
|
||||
//TLocalisamfile * get_descr_cf(TLocalisamfile * pconti,TLocalisamfile * clifo , int g, int c, long s);
|
||||
|
||||
class TSaldi_list : public TAssoc_array
|
||||
{
|
||||
public:
|
||||
TSaldi_list (int g, int c, int aec, int aep=0);
|
||||
TRectype* saldi() const;
|
||||
};
|
||||
|
||||
#define Saldo TSaldo
|
||||
|
||||
enum tipobil { DataLimite=1, UltimaImmissione };
|
||||
|
||||
class TSaldo
|
||||
{
|
||||
real _saldo, _saldo_iniziale;
|
||||
real _prg_dare, _prg_avere, _prg_daresca, _prg_averesca;
|
||||
int _indbil;
|
||||
TRectype _saldo_ep;
|
||||
int _annoes;
|
||||
TDate _inizioEs, _fineEs;
|
||||
TString16 _codcaus;
|
||||
TDate _datareg;
|
||||
TDate _datacomp;
|
||||
TString _provv;
|
||||
|
||||
bool _movimentato;
|
||||
bool _significativo;
|
||||
bool _rec_presente_ec;
|
||||
bool _rec_presente_ep;
|
||||
|
||||
protected:
|
||||
void InFinEs(int);
|
||||
void leggi_mov(long numreg); // Leggi testata
|
||||
real calcola_saldo_iniziale(int g, int c, long s, int indbil);
|
||||
|
||||
public:
|
||||
|
||||
bool movimentato() const { return _movimentato; }
|
||||
bool significativo() const { return _significativo; }
|
||||
bool esiste_saldo() const { return _rec_presente_ec || _rec_presente_ep;}
|
||||
|
||||
const int EsePre (const int annocorr); // Determina esercizio precedente
|
||||
int annoes () const { return _annoes; }
|
||||
void set_annoes (int anno) { _annoes = anno; }
|
||||
|
||||
bool causale_mov(long, const TDate&, const TDate&, TString&);
|
||||
const char* causale_chiusura_es();
|
||||
const char* causale_apertura_es();
|
||||
|
||||
bool ultima_immissione_bilancio(int anno,int g,int c,long s,int indbil);
|
||||
bool ultima_immissione_verifica(int anno,int g,int c,long s,int indbil);
|
||||
bool data_limite_bilancio(int,int,int,long,const TDate&,const TDate&,int,bool);
|
||||
|
||||
TRectype& ricerca_progr_prec(int, int, int, long);
|
||||
|
||||
real saldofin_esprec(int,int,int,long);
|
||||
bool prg_attuali(int,TConto&,real&,real&);
|
||||
bool prg_mov_eliminati(int,TConto&,real&,real&);
|
||||
|
||||
real saldo() const {return _saldo;}
|
||||
real saldoini() const {return _saldo_iniziale;}
|
||||
real prgdare() const {return _prg_dare;}
|
||||
real prgavere() const {return _prg_avere;}
|
||||
bool prg_attuali(int,TConto&,int,real&,real&);
|
||||
bool prg_mov_eliminati(int,TConto&,int,real&,real&);
|
||||
Saldo();
|
||||
~Saldo();
|
||||
};
|
||||
|
||||
class TTab_conti : public TAssoc_array
|
||||
{
|
||||
void do_agg(TConto* tc, int anno_es, const real& importo, char sezione,
|
||||
bool movap, bool provv, bool somma, const char* key);
|
||||
public:
|
||||
void aggiorna_conto(const TConto& tc, int anno_es, const real& importo,
|
||||
char sezione, bool movap, bool provv, bool somma);
|
||||
void aggiorna_conto (int gruppo, int conto, long sottoconto, int anno_es,
|
||||
const real& importo, char sezione, bool movap,
|
||||
bool provv, bool somma);
|
||||
};
|
||||
|
||||
class TSaldo_agg : public TObject
|
||||
{
|
||||
TTab_conti _tab_conti;
|
||||
bool _movap; // se e' mov. d'apertura (aggiorno SALDO e FLAGSALINI in
|
||||
// saldi)
|
||||
bool _provv;
|
||||
int _anno_es; // anno esercizio
|
||||
TDate _data_ulmov; // data ultimo movimento
|
||||
long _num_ulmov; // numero ultimo movimento
|
||||
TRectype * _rec; // record corrente sui saldi
|
||||
THash_object * tconti() { return _tab_conti.get_hashobj(); }
|
||||
|
||||
public:
|
||||
void clear_saldi(int year);
|
||||
void registra();
|
||||
void aggiorna (const TConto& tc, const real& importo, char sezione,
|
||||
bool somma=TRUE);
|
||||
void aggiorna (int gruppo, int conto, long sottoconto, const real& importo,
|
||||
char sezione, bool somma=TRUE);
|
||||
|
||||
void set_anno_es(int anno) { _anno_es = anno; }
|
||||
int anno_es() const { return _anno_es; }
|
||||
|
||||
void set_movap (bool movap) { _movap = movap; }
|
||||
bool movap() const { return _movap; }
|
||||
|
||||
void set_movprovv (bool p) { _provv = p; }
|
||||
bool movprovv() { return _provv; }
|
||||
|
||||
void set_data_ulmov (const TDate& data) { _data_ulmov = data; }
|
||||
const TDate& data_ulmov() const { return _data_ulmov; }
|
||||
|
||||
void set_num_ulmov (long num) { _num_ulmov = num; }
|
||||
long num_ulmov() const { return _num_ulmov; }
|
||||
|
||||
void reset(); // pulisce l'array dei conti
|
||||
TSaldo_agg();
|
||||
int items() const { return _tab_conti.items();}
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef __CGLIB_H
|
||||
#define __CGLIB_H
|
||||
|
||||
#ifndef __ISAM_H
|
||||
#include <isam.h>
|
||||
#endif
|
||||
#ifndef __REAL_H
|
||||
#include <real.h>
|
||||
#endif
|
||||
#ifndef __DATE_H
|
||||
#include <date.h>
|
||||
#endif
|
||||
|
||||
#include <assoc.h>
|
||||
#include "conto.h"
|
||||
|
||||
//TLocalisamfile * get_descr_cf(TLocalisamfile * pconti,TLocalisamfile * clifo , int g, int c, long s);
|
||||
|
||||
class TSaldi_list : public TAssoc_array
|
||||
{
|
||||
public:
|
||||
TSaldi_list (int g, int c, int aec, int aep=0);
|
||||
TRectype* saldi() const;
|
||||
};
|
||||
|
||||
#define Saldo TSaldo
|
||||
|
||||
enum tipobil { DataLimite=1, UltimaImmissione };
|
||||
|
||||
class TSaldo
|
||||
{
|
||||
real _saldo, _saldo_iniziale;
|
||||
real _prg_dare, _prg_avere, _prg_daresca, _prg_averesca;
|
||||
int _indbil;
|
||||
TRectype _saldo_ep;
|
||||
int _annoes;
|
||||
TDate _inizioEs, _fineEs;
|
||||
TString16 _codcaus;
|
||||
TDate _datareg;
|
||||
TDate _datacomp;
|
||||
TString _provv;
|
||||
|
||||
bool _movimentato;
|
||||
bool _significativo;
|
||||
bool _rec_presente_ec;
|
||||
bool _rec_presente_ep;
|
||||
|
||||
protected:
|
||||
void InFinEs(int);
|
||||
void leggi_mov(long numreg); // Leggi testata
|
||||
real calcola_saldo_iniziale(int g, int c, long s, int indbil);
|
||||
|
||||
public:
|
||||
|
||||
bool movimentato() const { return _movimentato; }
|
||||
bool significativo() const { return _significativo; }
|
||||
bool esiste_saldo() const { return _rec_presente_ec || _rec_presente_ep;}
|
||||
|
||||
const int EsePre (const int annocorr); // Determina esercizio precedente
|
||||
int annoes () const { return _annoes; }
|
||||
void set_annoes (int anno) { _annoes = anno; }
|
||||
|
||||
bool causale_mov(long, const TDate&, const TDate&, TString&);
|
||||
const char* causale_chiusura_es();
|
||||
const char* causale_apertura_es();
|
||||
|
||||
bool ultima_immissione_bilancio(int anno,int g,int c,long s,int indbil);
|
||||
bool ultima_immissione_verifica(int anno,int g,int c,long s,int indbil);
|
||||
bool data_limite_bilancio(int,int,int,long,const TDate&,const TDate&,int,bool);
|
||||
|
||||
TRectype& ricerca_progr_prec(int, int, int, long);
|
||||
|
||||
real saldofin_esprec(int,int,int,long);
|
||||
bool prg_attuali(int,TConto&,real&,real&);
|
||||
bool prg_mov_eliminati(int,TConto&,real&,real&);
|
||||
|
||||
const real& saldo() const { return _saldo;}
|
||||
const real& saldoini() const { return _saldo_iniziale;}
|
||||
const real& prgdare() const { return _prg_dare;}
|
||||
const real& prgavere() const { return _prg_avere;}
|
||||
bool prg_attuali(int,TConto&,int,real&,real&);
|
||||
bool prg_mov_eliminati(int,TConto&,int,real&,real&);
|
||||
Saldo();
|
||||
~Saldo();
|
||||
};
|
||||
|
||||
class TTab_conti : public TAssoc_array
|
||||
{
|
||||
void do_agg(TConto* tc, int anno_es, const real& importo, char sezione,
|
||||
bool movap, bool provv, bool somma, const char* key);
|
||||
public:
|
||||
void aggiorna_conto(const TConto& tc, int anno_es, const real& importo,
|
||||
char sezione, bool movap, bool provv, bool somma);
|
||||
void aggiorna_conto (int gruppo, int conto, long sottoconto, int anno_es,
|
||||
const real& importo, char sezione, bool movap,
|
||||
bool provv, bool somma);
|
||||
};
|
||||
|
||||
class TSaldo_agg : public TObject
|
||||
{
|
||||
TTab_conti _tab_conti;
|
||||
bool _movap; // se e' mov. d'apertura (aggiorno SALDO e FLAGSALINI in
|
||||
// saldi)
|
||||
bool _provv;
|
||||
int _anno_es; // anno esercizio
|
||||
TDate _data_ulmov; // data ultimo movimento
|
||||
long _num_ulmov; // numero ultimo movimento
|
||||
TRectype * _rec; // record corrente sui saldi
|
||||
THash_object * tconti() { return _tab_conti.get_hashobj(); }
|
||||
|
||||
public:
|
||||
void clear_saldi(int year);
|
||||
void registra();
|
||||
void aggiorna (const TConto& tc, const real& importo, char sezione,
|
||||
bool somma=TRUE);
|
||||
void aggiorna (int gruppo, int conto, long sottoconto, const real& importo,
|
||||
char sezione, bool somma=TRUE);
|
||||
|
||||
void set_anno_es(int anno) { _anno_es = anno; }
|
||||
int anno_es() const { return _anno_es; }
|
||||
|
||||
void set_movap (bool movap) { _movap = movap; }
|
||||
bool movap() const { return _movap; }
|
||||
|
||||
void set_movprovv (bool p) { _provv = p; }
|
||||
bool movprovv() const { return _provv; }
|
||||
|
||||
void set_data_ulmov (const TDate& data) { _data_ulmov = data; }
|
||||
const TDate& data_ulmov() const { return _data_ulmov; }
|
||||
|
||||
void set_num_ulmov (long num) { _num_ulmov = num; }
|
||||
long num_ulmov() const { return _num_ulmov; }
|
||||
|
||||
void reset(); // pulisce l'array dei conti
|
||||
TSaldo_agg();
|
||||
int items() const { return _tab_conti.items();}
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
507
cg/cglib02.cpp
507
cg/cglib02.cpp
@ -1,251 +1,256 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// cglib02.cpp
|
||||
//
|
||||
// Aggiornamento saldi
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <isam.h>
|
||||
#include <saldi.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include "conto.h"
|
||||
#include "cglib.h"
|
||||
|
||||
void TTab_conti::do_agg(TConto* tc, int anno_es, const real& importo,
|
||||
char sezione, bool movap, bool provv, bool somma, const char* key)
|
||||
{
|
||||
real i = somma ? importo : -importo;
|
||||
|
||||
if (movap)
|
||||
{
|
||||
if (sezione == 'D') tc->saldo() += i;
|
||||
else tc->saldo() -= i;
|
||||
}
|
||||
else
|
||||
if (provv)
|
||||
{
|
||||
if (sezione == 'D') tc->darepro() += i;
|
||||
else tc->averepro() += i;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sezione == 'D') tc->dare() += i;
|
||||
else tc->avere() += i;
|
||||
}
|
||||
|
||||
// rimuovo dalla tabella il conto se dare e avere vanno a zero
|
||||
if (tc->dare().is_zero() && tc->avere().is_zero() &&
|
||||
tc->darepro().is_zero() && tc->averepro().is_zero() &&
|
||||
tc->saldo().is_zero()) remove(key);
|
||||
}
|
||||
|
||||
|
||||
void TTab_conti::aggiorna_conto(const TConto& tcon, int anno_es, const real& importo, char sezione, bool movap, bool provv, bool somma)
|
||||
{
|
||||
TString80 key;
|
||||
key << format("%4d", anno_es);
|
||||
key << format("%3d", tcon.gruppo());
|
||||
key << format("%3d", tcon.conto());
|
||||
key << format("%6ld", tcon.sottoconto());
|
||||
|
||||
TConto* tc = (TConto*) objptr(key);
|
||||
if (tc == NULL)
|
||||
{
|
||||
tc = new TConto(tcon.gruppo(), tcon.conto(), tcon.sottoconto(),
|
||||
tcon.tipo());
|
||||
add(key, tc);
|
||||
tc->dare() = ZERO;
|
||||
tc->avere() = ZERO;
|
||||
tc->darepro() = ZERO;
|
||||
tc->averepro() = ZERO;
|
||||
tc->saldo() = ZERO;
|
||||
}
|
||||
do_agg(tc, anno_es, importo, sezione, movap, provv, somma, key);
|
||||
}
|
||||
|
||||
void TTab_conti::aggiorna_conto(int gruppo, int conto, long sottoconto,
|
||||
int anno_es, const real& importo, char sezione,
|
||||
bool movap, bool provv, bool somma)
|
||||
{
|
||||
TString80 key;
|
||||
key << format("%4d", anno_es);
|
||||
key << format("%3d", gruppo);
|
||||
key << format("%3d", conto);
|
||||
key << format("%6ld", sottoconto);
|
||||
|
||||
TConto* tc = (TConto*) objptr(key);
|
||||
if (tc == NULL)
|
||||
{
|
||||
tc = new TConto(gruppo, conto, sottoconto);
|
||||
add(key, tc);
|
||||
}
|
||||
do_agg(tc, anno_es, importo, sezione, movap, provv, somma, key);
|
||||
}
|
||||
|
||||
|
||||
TSaldo_agg::TSaldo_agg()
|
||||
{
|
||||
_anno_es = 0;
|
||||
_data_ulmov = "";
|
||||
_num_ulmov = 0l;
|
||||
_movap = FALSE;
|
||||
_provv = FALSE;
|
||||
reset(); // pulizia dell'array dei conti
|
||||
}
|
||||
|
||||
void TSaldo_agg::aggiorna(const TConto& tc, const real& importo, char sezione,
|
||||
bool somma)
|
||||
{
|
||||
_tab_conti.aggiorna_conto(tc, _anno_es, importo, sezione, _movap, _provv,
|
||||
somma);
|
||||
}
|
||||
|
||||
void TSaldo_agg::aggiorna(int gruppo, int conto, long sottoconto, const real& importo, char sezione, bool somma)
|
||||
{
|
||||
_tab_conti.aggiorna_conto(gruppo, conto, sottoconto, _anno_es, importo,
|
||||
sezione, _movap, _provv, somma);
|
||||
}
|
||||
|
||||
void TSaldo_agg::reset()
|
||||
{
|
||||
_tab_conti.destroy();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// pulizia file saldi
|
||||
//
|
||||
// Scorro il file saldi per l' anno year o per tutti gli anni se year = 0
|
||||
// e azzero i progressivi.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void TSaldo_agg::clear_saldi(int year)
|
||||
{
|
||||
TLocalisamfile saldi(LF_SALDI);
|
||||
|
||||
set_anno_es(year);
|
||||
saldi.zero();
|
||||
if (anno_es() != 0)
|
||||
saldi.put(SLD_ANNOES, anno_es());
|
||||
|
||||
TRectype last(saldi.curr());
|
||||
|
||||
for (saldi.read(_isgteq, _lock);
|
||||
!saldi.eof() && saldi.curr() <= last;
|
||||
saldi.next(_lock))
|
||||
{
|
||||
saldi.put(SLD_FLAGSALINI, "D");
|
||||
saldi.zero(SLD_SALDO);
|
||||
saldi.zero(SLD_PDAREPRO);
|
||||
saldi.zero(SLD_PAVEREPRO);
|
||||
saldi.zero(SLD_PDARE);
|
||||
saldi.zero(SLD_PAVERE);
|
||||
saldi.zero(SLD_NUMULTMOV);
|
||||
saldi.zero(SLD_DATAULMOV);
|
||||
saldi.rewrite();
|
||||
}
|
||||
saldi.reread(_unlock);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Aggiornamento file saldi
|
||||
//
|
||||
// Scorro la tabella dei conti interna _tab_conti.
|
||||
// Per ogni conto cerco il record su saldi, se non c'e' lo creo.
|
||||
// Se c'e' gia' lo aggiorno nel seguente modo:
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void TSaldo_agg::registra()
|
||||
{
|
||||
real s, r;
|
||||
TString Flagsalini;
|
||||
TDate data_ulmov;
|
||||
long num_ulmov;
|
||||
TLocalisamfile saldi(LF_SALDI);
|
||||
int conti = _tab_conti.items();
|
||||
|
||||
_tab_conti.restart();
|
||||
for (int i=0; i < conti; i++)
|
||||
{
|
||||
THash_object * hobj = tconti();
|
||||
TConto & tcon = (TConto &)hobj->obj();
|
||||
|
||||
if (!tcon.ok()) continue;
|
||||
saldi.zero();
|
||||
saldi.put(SLD_ANNOES, atoi(hobj->key().left(4)) );
|
||||
saldi.put(SLD_GRUPPO, tcon.gruppo());
|
||||
saldi.put(SLD_CONTO, tcon.conto());
|
||||
saldi.put(SLD_SOTTOCONTO, tcon.sottoconto());
|
||||
if (saldi.read(_isequal, _lock) == NOERR)
|
||||
{
|
||||
num_ulmov = saldi.get_long(SLD_NUMULTMOV);
|
||||
data_ulmov = saldi.get_date(SLD_DATAULMOV);
|
||||
|
||||
if (((_num_ulmov != 0L) && (_num_ulmov > num_ulmov)) ||
|
||||
((_data_ulmov.ok()) && (_data_ulmov > data_ulmov)))
|
||||
{
|
||||
saldi.put(SLD_DATAULMOV, _data_ulmov);
|
||||
saldi.put(SLD_NUMULTMOV, _num_ulmov);
|
||||
}
|
||||
r = tcon.saldo();
|
||||
if (r != ZERO)
|
||||
{
|
||||
s = saldi.get_real(SLD_SALDO);
|
||||
Flagsalini = saldi.get(SLD_FLAGSALINI);
|
||||
if (Flagsalini == "A") s = r - s;
|
||||
else s = r + s;
|
||||
if (s < ZERO)
|
||||
{
|
||||
Flagsalini = "A"; s = -s;
|
||||
}
|
||||
else
|
||||
Flagsalini = "D";
|
||||
saldi.put(SLD_FLAGSALINI, (const char *) Flagsalini);
|
||||
saldi.put(SLD_SALDO, s);
|
||||
}
|
||||
r = saldi.get_real(SLD_PDAREPRO);
|
||||
r += tcon.darepro();
|
||||
saldi.put(SLD_PDAREPRO, r);
|
||||
r = saldi.get_real(SLD_PAVEREPRO);
|
||||
r += tcon.averepro();
|
||||
saldi.put(SLD_PAVEREPRO, r);
|
||||
r = saldi.get_real(SLD_PDARE);
|
||||
r += tcon.dare();
|
||||
saldi.put(SLD_PDARE, r);
|
||||
r = saldi.get_real(SLD_PAVERE);
|
||||
r += tcon.avere();
|
||||
saldi.put(SLD_PAVERE, r);
|
||||
saldi.rewrite();
|
||||
}
|
||||
else
|
||||
{
|
||||
saldi.zero();
|
||||
saldi.put(SLD_ANNOES, anno_es());
|
||||
saldi.put(SLD_GRUPPO, tcon.gruppo());
|
||||
saldi.put(SLD_CONTO, tcon.conto());
|
||||
saldi.put(SLD_SOTTOCONTO, tcon.sottoconto());
|
||||
s = tcon.saldo();
|
||||
if (s < ZERO)
|
||||
{
|
||||
Flagsalini = "A"; s = -s;
|
||||
}
|
||||
else
|
||||
Flagsalini = "D";
|
||||
|
||||
saldi.put(SLD_FLAGSALINI, (const char *) Flagsalini);
|
||||
saldi.put(SLD_SALDO, s);
|
||||
saldi.put(SLD_PDAREPRO, tcon.darepro());
|
||||
saldi.put(SLD_PAVEREPRO, tcon.averepro());
|
||||
saldi.put(SLD_PDARE, tcon.dare());
|
||||
|
||||
saldi.put(SLD_PAVERE, tcon.avere());
|
||||
if (_num_ulmov != 0L) saldi.put(SLD_NUMULTMOV, _num_ulmov);
|
||||
if (_data_ulmov.ok()) saldi.put(SLD_DATAULMOV, _data_ulmov);
|
||||
saldi.write();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// cglib02.cpp
|
||||
//
|
||||
// Aggiornamento saldi
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <isam.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include <saldi.h>
|
||||
|
||||
#include "conto.h"
|
||||
#include "cglib.h"
|
||||
|
||||
void TTab_conti::do_agg(TConto* tc, int anno_es, const real& importo,
|
||||
char sezione, bool movap, bool provv, bool somma, const char* key)
|
||||
{
|
||||
real i = somma ? importo : -importo;
|
||||
|
||||
if (movap)
|
||||
{
|
||||
if (sezione == 'D') tc->saldo() += i;
|
||||
else tc->saldo() -= i;
|
||||
}
|
||||
else
|
||||
if (provv)
|
||||
{
|
||||
if (sezione == 'D') tc->darepro() += i;
|
||||
else tc->averepro() += i;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sezione == 'D') tc->dare() += i;
|
||||
else tc->avere() += i;
|
||||
}
|
||||
|
||||
// rimuovo dalla tabella il conto se dare e avere vanno a zero
|
||||
if (tc->dare().is_zero() && tc->avere().is_zero() &&
|
||||
tc->darepro().is_zero() && tc->averepro().is_zero() &&
|
||||
tc->saldo().is_zero()) remove(key);
|
||||
}
|
||||
|
||||
|
||||
void TTab_conti::aggiorna_conto(const TConto& tcon, int anno_es, const real& importo, char sezione, bool movap, bool provv, bool somma)
|
||||
{
|
||||
TString80 key;
|
||||
key << format("%4d", anno_es);
|
||||
key << format("%3d", tcon.gruppo());
|
||||
key << format("%3d", tcon.conto());
|
||||
key << format("%6ld", tcon.sottoconto());
|
||||
|
||||
TConto* tc = (TConto*) objptr(key);
|
||||
if (tc == NULL)
|
||||
{
|
||||
tc = new TConto(tcon.gruppo(), tcon.conto(), tcon.sottoconto(),
|
||||
tcon.tipo());
|
||||
add(key, tc);
|
||||
tc->dare() = ZERO;
|
||||
tc->avere() = ZERO;
|
||||
tc->darepro() = ZERO;
|
||||
tc->averepro() = ZERO;
|
||||
tc->saldo() = ZERO;
|
||||
}
|
||||
do_agg(tc, anno_es, importo, sezione, movap, provv, somma, key);
|
||||
}
|
||||
|
||||
void TTab_conti::aggiorna_conto(int gruppo, int conto, long sottoconto,
|
||||
int anno_es, const real& importo, char sezione,
|
||||
bool movap, bool provv, bool somma)
|
||||
{
|
||||
TString80 key;
|
||||
key << format("%4d", anno_es);
|
||||
key << format("%3d", gruppo);
|
||||
key << format("%3d", conto);
|
||||
key << format("%6ld", sottoconto);
|
||||
|
||||
TConto* tc = (TConto*) objptr(key);
|
||||
if (tc == NULL)
|
||||
{
|
||||
tc = new TConto(gruppo, conto, sottoconto);
|
||||
add(key, tc);
|
||||
}
|
||||
do_agg(tc, anno_es, importo, sezione, movap, provv, somma, key);
|
||||
}
|
||||
|
||||
|
||||
TSaldo_agg::TSaldo_agg()
|
||||
{
|
||||
_anno_es = 0;
|
||||
_data_ulmov = "";
|
||||
_num_ulmov = 0l;
|
||||
_movap = FALSE;
|
||||
_provv = FALSE;
|
||||
reset(); // pulizia dell'array dei conti
|
||||
}
|
||||
|
||||
void TSaldo_agg::aggiorna(const TConto& tc, const real& importo, char sezione,
|
||||
bool somma)
|
||||
{
|
||||
_tab_conti.aggiorna_conto(tc, _anno_es, importo, sezione, _movap, _provv,
|
||||
somma);
|
||||
}
|
||||
|
||||
void TSaldo_agg::aggiorna(int gruppo, int conto, long sottoconto, const real& importo, char sezione, bool somma)
|
||||
{
|
||||
_tab_conti.aggiorna_conto(gruppo, conto, sottoconto, _anno_es, importo,
|
||||
sezione, _movap, _provv, somma);
|
||||
}
|
||||
|
||||
void TSaldo_agg::reset()
|
||||
{
|
||||
_tab_conti.destroy();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// pulizia file saldi
|
||||
//
|
||||
// Scorro il file saldi per l' anno year o per tutti gli anni se year = 0
|
||||
// e azzero i progressivi.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void TSaldo_agg::clear_saldi(int year)
|
||||
{
|
||||
TLocalisamfile saldi(LF_SALDI);
|
||||
|
||||
set_anno_es(year);
|
||||
saldi.zero();
|
||||
if (anno_es() != 0)
|
||||
saldi.put(SLD_ANNOES, anno_es());
|
||||
|
||||
TRectype last(saldi.curr());
|
||||
|
||||
for (saldi.read(_isgteq, _lock);
|
||||
!saldi.eof() && saldi.curr() <= last;
|
||||
saldi.next(_lock))
|
||||
{
|
||||
saldi.put(SLD_FLAGSALINI, "D");
|
||||
saldi.zero(SLD_SALDO);
|
||||
saldi.zero(SLD_PDAREPRO);
|
||||
saldi.zero(SLD_PAVEREPRO);
|
||||
saldi.zero(SLD_PDARE);
|
||||
saldi.zero(SLD_PAVERE);
|
||||
saldi.zero(SLD_NUMULTMOV);
|
||||
saldi.zero(SLD_DATAULMOV);
|
||||
saldi.rewrite();
|
||||
}
|
||||
saldi.reread(_unlock);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Aggiornamento file saldi
|
||||
//
|
||||
// Scorro la tabella dei conti interna _tab_conti.
|
||||
// Per ogni conto cerco il record su saldi, se non c'e' lo creo.
|
||||
// Se c'e' gia' lo aggiorno nel seguente modo:
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void TSaldo_agg::registra()
|
||||
{
|
||||
real s, r;
|
||||
TString Flagsalini;
|
||||
TDate data_ulmov;
|
||||
long num_ulmov;
|
||||
TLocalisamfile saldi(LF_SALDI);
|
||||
int conti = _tab_conti.items();
|
||||
|
||||
_tab_conti.restart();
|
||||
for (int i = 0; i < conti; i++)
|
||||
{
|
||||
THash_object * hobj = tconti();
|
||||
const TConto& tcon = (TConto &)hobj->obj();
|
||||
CHECK(tcon.ok(), "Tentativo di saldare un conto incompleto");
|
||||
|
||||
saldi.zero();
|
||||
saldi.put(SLD_ANNOES, atoi(hobj->key().left(4)) );
|
||||
saldi.put(SLD_GRUPPO, tcon.gruppo());
|
||||
saldi.put(SLD_CONTO, tcon.conto());
|
||||
saldi.put(SLD_SOTTOCONTO, tcon.sottoconto());
|
||||
|
||||
bool update = TRUE;
|
||||
|
||||
if (saldi.read(_isequal, _lock) != NOERR)
|
||||
{
|
||||
saldi.zero();
|
||||
saldi.put(SLD_ANNOES, anno_es());
|
||||
saldi.put(SLD_GRUPPO, tcon.gruppo());
|
||||
saldi.put(SLD_CONTO, tcon.conto());
|
||||
saldi.put(SLD_SOTTOCONTO, tcon.sottoconto());
|
||||
s = tcon.saldo();
|
||||
if (s < ZERO)
|
||||
{ Flagsalini = "A"; s = -s; }
|
||||
else
|
||||
Flagsalini = "D";
|
||||
|
||||
saldi.put(SLD_FLAGSALINI, (const char *) Flagsalini);
|
||||
saldi.put(SLD_SALDO, s);
|
||||
saldi.put(SLD_PDAREPRO, tcon.darepro());
|
||||
saldi.put(SLD_PAVEREPRO, tcon.averepro());
|
||||
saldi.put(SLD_PDARE, tcon.dare());
|
||||
|
||||
saldi.put(SLD_PAVERE, tcon.avere());
|
||||
if (_num_ulmov != 0L) saldi.put(SLD_NUMULTMOV, _num_ulmov);
|
||||
if (_data_ulmov.ok()) saldi.put(SLD_DATAULMOV, _data_ulmov);
|
||||
update = saldi.write() == _isreinsert;
|
||||
if (update)
|
||||
saldi.read(_isequal, _lock);
|
||||
}
|
||||
|
||||
if (update)
|
||||
{
|
||||
num_ulmov = saldi.get_long(SLD_NUMULTMOV);
|
||||
data_ulmov = saldi.get_date(SLD_DATAULMOV);
|
||||
|
||||
if (((_num_ulmov != 0L) && (_num_ulmov > num_ulmov)) ||
|
||||
((_data_ulmov.ok()) && (_data_ulmov > data_ulmov)))
|
||||
{
|
||||
saldi.put(SLD_DATAULMOV, _data_ulmov);
|
||||
saldi.put(SLD_NUMULTMOV, _num_ulmov);
|
||||
}
|
||||
r = tcon.saldo();
|
||||
if (r != ZERO)
|
||||
{
|
||||
s = saldi.get_real(SLD_SALDO);
|
||||
Flagsalini = saldi.get(SLD_FLAGSALINI);
|
||||
if (Flagsalini == "A") s = r - s;
|
||||
else s = r + s;
|
||||
if (s < ZERO)
|
||||
{
|
||||
Flagsalini = "A"; s = -s;
|
||||
}
|
||||
else
|
||||
Flagsalini = "D";
|
||||
saldi.put(SLD_FLAGSALINI, Flagsalini);
|
||||
saldi.put(SLD_SALDO, s);
|
||||
}
|
||||
r = saldi.get_real(SLD_PDAREPRO);
|
||||
r += tcon.darepro();
|
||||
saldi.put(SLD_PDAREPRO, r);
|
||||
r = saldi.get_real(SLD_PAVEREPRO);
|
||||
r += tcon.averepro();
|
||||
saldi.put(SLD_PAVEREPRO, r);
|
||||
r = saldi.get_real(SLD_PDARE);
|
||||
r += tcon.dare();
|
||||
saldi.put(SLD_PDARE, r);
|
||||
r = saldi.get_real(SLD_PAVERE);
|
||||
r += tcon.avere();
|
||||
saldi.put(SLD_PAVERE, r);
|
||||
saldi.rewrite();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
177
cg/conto.h
177
cg/conto.h
@ -1,84 +1,93 @@
|
||||
#ifndef __CONTO_H
|
||||
#define __CONTO_H
|
||||
|
||||
#ifndef __STRINGS_H
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
#ifndef __REAL_H
|
||||
#include <real.h>
|
||||
#endif
|
||||
|
||||
class TBill : public TSortable
|
||||
{
|
||||
char _tipo; // ' ' = Conto, 'C' = Cliente, 'F' = 'Fornitore'
|
||||
int _gruppo, _conto;
|
||||
long _sottoconto; // Sottoconto, codice cliente o fornitore
|
||||
TString80 _descrizione; // Vuota fino alla chiamata di describe
|
||||
int _tipo_cr; // Tipo costo/ricavo
|
||||
bool _sospeso;
|
||||
|
||||
protected:
|
||||
virtual int compare(const TSortable& s) const;
|
||||
virtual const char* class_name() const { return "Conto"; }
|
||||
void describe();
|
||||
|
||||
const TBill& copy(const TBill& b);
|
||||
|
||||
public:
|
||||
TBill(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL, int r = -1)
|
||||
: _tipo(t), _gruppo(g), _conto(c), _sottoconto(s), _descrizione(d), _tipo_cr(r) { set(g,c,s,t,d,r);}
|
||||
|
||||
TBill(TToken_string& tgcsd, int from, int mode = 0);
|
||||
TBill(const TBill& b) { copy(b); }
|
||||
virtual ~TBill() {}
|
||||
|
||||
const TBill& set(int g = 0, int c = 0, long s = 0L, char t = ' ',
|
||||
const char* d = NULL, int r = -1);
|
||||
const TBill& add_to(TToken_string& ts, int from, int mode = 0);
|
||||
const TBill& operator=(const TBill& b) { return copy(b); }
|
||||
|
||||
virtual bool ok() const; // Gruppo, Conto e Sottoconto non nulli
|
||||
bool empty() const { return _gruppo==0 && _conto==0 && _sottoconto == 0; }
|
||||
|
||||
char tipo() const { return _tipo; }
|
||||
int gruppo() const { return _gruppo; }
|
||||
int conto() const { return _conto; }
|
||||
long sottoconto() const { return _sottoconto; }
|
||||
|
||||
const TString& descrizione();
|
||||
int tipo_cr();
|
||||
void tipo_cr(int tcr) { _tipo_cr = tcr; }
|
||||
|
||||
int tipo_att();
|
||||
bool read(TRectype& r);
|
||||
bool sospeso() const { return _sospeso;} // _sospeso e' letto nella read()
|
||||
|
||||
const char* string(int mode = 0);
|
||||
};
|
||||
|
||||
|
||||
enum TIndbil { ib_null, ib_attivita, ib_passivita, ib_costi, ib_ricavi, ib_conti_ordine };
|
||||
|
||||
class TConto : public TBill
|
||||
{
|
||||
real _dare, _avere, _darepro, _averepro, _saldo;
|
||||
|
||||
public:
|
||||
TConto(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL)
|
||||
: TBill(g, c, s, t, d) {}
|
||||
TConto (TToken_string& tgcsd, int from, int mode = 0)
|
||||
: TBill(tgcsd, from, mode) {};
|
||||
|
||||
real& dare() { return _dare; }
|
||||
real& avere() { return _avere; }
|
||||
real& darepro() { return _darepro; }
|
||||
real& averepro() { return _averepro; }
|
||||
real& saldo() { return _saldo; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef __CONTO_H
|
||||
#define __CONTO_H
|
||||
|
||||
#ifndef __STRINGS_H
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
#ifndef __REAL_H
|
||||
#include <real.h>
|
||||
#endif
|
||||
|
||||
class TBill : public TSortable
|
||||
{
|
||||
char _tipo; // ' ' = Conto, 'C' = Cliente, 'F' = 'Fornitore'
|
||||
int _gruppo, _conto;
|
||||
long _sottoconto; // Sottoconto, codice cliente o fornitore
|
||||
TString80 _descrizione; // Vuota fino alla chiamata di describe
|
||||
int _tipo_cr; // Tipo costo/ricavo
|
||||
bool _sospeso;
|
||||
|
||||
protected:
|
||||
virtual int compare(const TSortable& s) const;
|
||||
virtual const char* class_name() const { return "Conto"; }
|
||||
void describe();
|
||||
|
||||
const TBill& copy(const TBill& b);
|
||||
|
||||
public:
|
||||
TBill(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL, int r = -1)
|
||||
: _tipo(t), _gruppo(g), _conto(c), _sottoconto(s), _descrizione(d), _tipo_cr(r) { set(g,c,s,t,d,r);}
|
||||
|
||||
TBill(TToken_string& tgcsd, int from, int mode = 0);
|
||||
TBill(const TBill& b) { copy(b); }
|
||||
virtual ~TBill() {}
|
||||
|
||||
const TBill& set(int g = 0, int c = 0, long s = 0L, char t = ' ',
|
||||
const char* d = NULL, int r = -1);
|
||||
const TBill& add_to(TToken_string& ts, int from, int mode = 0);
|
||||
const TBill& operator=(const TBill& b) { return copy(b); }
|
||||
|
||||
virtual bool ok() const; // Gruppo, Conto e Sottoconto non nulli
|
||||
bool empty() const { return _gruppo==0 && _conto==0 && _sottoconto == 0; }
|
||||
|
||||
char tipo() const { return _tipo; }
|
||||
int gruppo() const { return _gruppo; }
|
||||
int conto() const { return _conto; }
|
||||
long sottoconto() const { return _sottoconto; }
|
||||
|
||||
const TString& descrizione();
|
||||
int tipo_cr();
|
||||
void tipo_cr(int tcr) { _tipo_cr = tcr; }
|
||||
|
||||
int tipo_att();
|
||||
bool read(TRectype& r);
|
||||
bool sospeso() const { return _sospeso;} // _sospeso e' letto nella read()
|
||||
|
||||
const char* string(int mode = 0);
|
||||
};
|
||||
|
||||
|
||||
enum TIndbil { ib_null, ib_attivita, ib_passivita, ib_costi, ib_ricavi, ib_conti_ordine };
|
||||
|
||||
class TConto : public TBill
|
||||
{
|
||||
real _dare, _avere, _darepro, _averepro, _saldo;
|
||||
|
||||
public:
|
||||
TConto(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL)
|
||||
: TBill(g, c, s, t, d) {}
|
||||
TConto (TToken_string& tgcsd, int from, int mode = 0)
|
||||
: TBill(tgcsd, from, mode) {};
|
||||
|
||||
real& dare() { return _dare; }
|
||||
const real& dare() const { return _dare; }
|
||||
|
||||
real& avere() { return _avere; }
|
||||
const real& avere() const { return _avere; }
|
||||
|
||||
real& darepro() { return _darepro; }
|
||||
const real& darepro() const { return _darepro; }
|
||||
|
||||
real& averepro() { return _averepro; }
|
||||
const real& averepro() const { return _averepro; }
|
||||
|
||||
real& saldo() { return _saldo; }
|
||||
const real& saldo() const { return _saldo; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user