Aggiornato il programma di ricalcolo sadli/rinumerazione movimenti

(cg4100.cpp).


git-svn-id: svn://10.65.10.50/trunk@48 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1994-08-22 11:18:48 +00:00
parent a5c5edb20a
commit 16f87d79e6
10 changed files with 1204 additions and 1219 deletions

View File

@ -11,14 +11,19 @@ int main(int argc,char** argv)
switch (n) switch (n)
{ {
case 0:cg4100(argc,argv); break; case 0:
case 2:cg4300(argc,argv); break; cg4100(argc,argv); break;
case 3:cg4400(argc,argv); break; case 2:
case 4:cg4500(argc,argv); break; cg4300(argc,argv); break;
case 5:cg4600(argc,argv); break; case 3:
default: error_box(usage, argv[0]); cg4400(argc,argv); break;
case 4:
cg4500(argc,argv); break;
case 5:
cg4600(argc,argv); break;
default:
error_box(usage, argv[0]);
} }
return n < 0; return n < 0;
} }

View File

@ -1,10 +1,11 @@
#ifndef __CG4_H #ifndef __CG4_H
#define __CG4_H #define __CG4_H
//int cg4100(int argc, char* argv[]); int cg4100(int argc, char* argv[]);
//int cg4300(int argc, char* argv[]); int cg4300(int argc, char* argv[]);
int cg4400(int argc, char* argv[]); int cg4400(int argc, char* argv[]);
int cg4500(int argc, char* argv[]); int cg4500(int argc, char* argv[]);
int cg4600(int argc, char* argv[]); int cg4600(int argc, char* argv[]);
#endif // __CG4_H #endif // __CG4_H

View File

@ -21,12 +21,14 @@
//#endif //#endif
#define FLD_CG41_YEAR 100 #define FLD_CG41_YEAR 100
#define MAX_CNT 300
#include <mov.h> #include <mov.h>
#include <rmov.h> #include <rmov.h>
#include <rmoviva.h> #include <rmoviva.h>
#include <saldi.h> #include <saldi.h>
#include <causali.h> #include <causali.h>
#include "cglib.h"
// for access() // for access()
#if XVT_OS == XVT_OS_DOS || XVT_OS == XVT_OS_WIN #if XVT_OS == XVT_OS_DOS || XVT_OS == XVT_OS_WIN
@ -36,24 +38,14 @@
#endif #endif
struct therec { struct therec {
char DATAREG[7]; char DATAREG[9];
char REG[4]; char REG[4];
char DATADOC[7]; char DATADOC[9];
char NUMDOC[7]; char NUMDOC[7];
char ANNOES[5]; char ANNOES[5];
char NUMREG[8]; char NUMREG[8];
}; };
struct truc {
char GRUPPO[4];
char CONTO[4];
char SOTTOCONTO[7];
char SEZIONE[2];
char IMPORTO[19];
char NUMREG[8];
};
class CG4100_App : public TApplication class CG4100_App : public TApplication
{ {
TString _year; TString _year;
@ -81,7 +73,7 @@ bool CG4100_App::create()
{ {
TApplication::create(); TApplication::create();
// UNIX: signal() per intercettare errori // UNIX: signal() per intercettare errori
#if XVT_OS == XVT_OS_SCOUNIX #if XVT_OS == XVT_OS_SCOUNIX
signal(SIGINT,SIG_IGN); signal(SIGINT,SIG_IGN);
#endif #endif
@ -99,7 +91,7 @@ bool CG4100_App::create()
bool CG4100_App::destroy() bool CG4100_App::destroy()
{ {
// UNIX: resettare i segnali // UNIX: resettare i segnali
#if XVT_OS == XVT_OS_SCOUNIX #if XVT_OS == XVT_OS_SCOUNIX
signal(SIGINT,SIG_DFL); signal(SIGINT,SIG_DFL);
#endif #endif
@ -165,7 +157,7 @@ void CG4100_App::restore_mov(TSystemisamfile& mov, TSystemisamfile& rmov,
fscanf(fp,"%ld %ld", &rn, &rec); fscanf(fp,"%ld %ld", &rn, &rec);
mov.readat(rec); mov.readat(rec);
mov.curr().put(MOV_NUMREG,format("%ld",rn)); mov.put(MOV_NUMREG,rn);
mov.rewrite(); mov.rewrite();
for (;;) for (;;)
@ -174,7 +166,7 @@ void CG4100_App::restore_mov(TSystemisamfile& mov, TSystemisamfile& rmov,
fscanf(fp,"%ld",&rec); fscanf(fp,"%ld",&rec);
if (rec == -1l) break; if (rec == -1l) break;
rmov.readat(rec); rmov.readat(rec);
rmov.curr().put(RMV_NUMREG,format("%ld",rn)); rmov.put(RMV_NUMREG,rn);
rmov.rewrite(); rmov.rewrite();
} }
for (;;) for (;;)
@ -183,7 +175,7 @@ void CG4100_App::restore_mov(TSystemisamfile& mov, TSystemisamfile& rmov,
fscanf(fp,"%ld",&rec); fscanf(fp,"%ld",&rec);
if (rec == -1l) break; if (rec == -1l) break;
rmoviva.readat(rec); rmoviva.readat(rec);
rmoviva.curr().put(RMI_NUMREG,format("%ld",rn)); rmoviva.put(RMI_NUMREG,rn);
rmoviva.rewrite(); rmoviva.rewrite();
} }
} }
@ -209,8 +201,8 @@ bool CG4100_App::sort_mov()
return FALSE; return FALSE;
} }
mov.first();
mov.indexoff(); rmov.indexoff(); rmoviva.indexoff(); mov.indexoff(); rmov.indexoff(); rmoviva.indexoff();
mov.first();
TSort sort(sizeof(struct therec)); TSort sort(sizeof(struct therec));
@ -225,10 +217,10 @@ bool CG4100_App::sort_mov()
therec rbuf; therec rbuf;
sort.addsortkey(rbuf.DATAREG - (char*)&rbuf, 6); sort.addsortkey(rbuf.DATAREG - (char*)&rbuf, 8);
sort.addsortkey(rbuf.REG - (char*)&rbuf, 3); sort.addsortkey(rbuf.REG - (char*)&rbuf, 3);
sort.addsortkey(rbuf.NUMDOC - (char*)&rbuf, 6); sort.addsortkey(rbuf.NUMDOC - (char*)&rbuf, 6);
sort.addsortkey(rbuf.DATADOC - (char*)&rbuf, 6); sort.addsortkey(rbuf.DATADOC - (char*)&rbuf, 8);
sort.init(); sort.init();
@ -240,14 +232,14 @@ bool CG4100_App::sort_mov()
while (!mov.eof()) while (!mov.eof())
{ {
do_events(); do_events();
TDate d(mov.curr().get(MOV_DATAREG)); TDate d(mov.get(MOV_DATAREG));
strcpy(rbuf.DATAREG, format("%ld",(long)d)); strcpy(rbuf.DATAREG, d.string(ANSI));
strcpy(rbuf.REG, mov.curr().get(MOV_REG)); strcpy(rbuf.REG, mov.get(MOV_REG));
d = mov.curr().get(MOV_DATADOC); d = mov.get(MOV_DATADOC);
strcpy(rbuf.NUMDOC, mov.curr().get(MOV_NUMDOC)); strcpy(rbuf.NUMDOC, mov.get(MOV_NUMDOC));
strcpy(rbuf.DATADOC, format("%ld",(long)d)); strcpy(rbuf.DATADOC, d.string(ANSI));
strcpy(rbuf.ANNOES, mov.curr().get(MOV_ANNOES)); strcpy(rbuf.ANNOES, mov.get(MOV_ANNOES));
strcpy(rbuf.NUMREG, mov.curr().get(MOV_NUMREG)); strcpy(rbuf.NUMREG, mov.get(MOV_NUMREG));
sort.sort((char*)&rbuf); sort.sort((char*)&rbuf);
mov.next(); mov.next();
@ -260,6 +252,7 @@ bool CG4100_App::sort_mov()
therec* rr; therec* rr;
long num = 1; long num = 1;
TRecnotype recno;
while ((rr = (therec*)sort.retrieve()) != NULL) while ((rr = (therec*)sort.retrieve()) != NULL)
{ {
@ -268,55 +261,53 @@ bool CG4100_App::sort_mov()
{ {
// find record // find record
mov.curr().zero(); mov.curr().zero();
mov.curr().put(MOV_NUMREG, rr->NUMREG); mov.put(MOV_NUMREG, rr->NUMREG);
mov.curr().put(MOV_ANNOES, rr->ANNOES);
mov.read(); mov.read();
// should never happen // should never happen
CHECK(!mov.bad(), "Archivio movimenti inconsistente. Questo si' che e' un casino."); CHECK(mov.good(), "Archivio movimenti inconsistente. Questo si' che e' un casino.");
// retrieve and change NUMREG // retrieve and change NUMREG
recno = mov.recno();
TString rgn = rr->NUMREG; TString rgn = rr->NUMREG;
FILE* fsav = fopen("__mov__.sav","a"); FILE* fsav = fopen("__mov__.sav","a");
fprintf(fsav,"%s %d ", (const char*)rgn, mov.recno()); fprintf(fsav,"%s %d ", (const char*)rgn, recno);
fclose(fsav); fclose(fsav);
mov.curr().put(MOV_NUMREG,num); mov.put(MOV_NUMREG,num);
mov.rewrite(); mov.rewriteat(recno);
// update linked records // update linked records
rmov.curr().zero(); rmov.curr().zero();
rmov.curr().put(RMV_NUMREG,rgn); rmov.put(RMV_NUMREG,rgn);
rmov.read(_isgteq); rmov.read(_isgteq);
while (!rmov.eof()) while (!rmov.eof() && rgn == rmov.get(RMV_NUMREG))
{ {
if (rgn != rmov.curr().get(RMV_NUMREG)) recno = rmov.recno();
break;
fsav = fopen("__mov__.sav","a"); fsav = fopen("__mov__.sav","a");
fprintf(fsav,"%ld ", (long)rmov.recno()); fprintf(fsav,"%ld ", recno);
fclose(fsav); fclose(fsav);
rmov.curr().put(RMV_NUMREG,num); rmov.put(RMV_NUMREG,num);
rmov.rewrite(); rmov.rewriteat(recno);
rmov.next(); rmov.next();
} }
fsav = fopen("__mov__.sav","a"); fsav = fopen("__mov__.sav","a");
fprintf(fsav,"-1"); fclose(fsav); fprintf(fsav,"-1"); fclose(fsav);
rmoviva.curr().zero(); rmoviva.zero();
rmoviva.curr().put(RMI_NUMREG,rgn); rmoviva.put(RMI_NUMREG,rgn);
rmoviva.read(_isgteq); rmoviva.read(_isgteq);
while (!rmoviva.eof()) while (!rmoviva.eof() && rgn == rmoviva.get(RMV_NUMREG))
{ {
if (rgn != rmoviva.curr().get(RMV_NUMREG)) recno = rmoviva.recno();
break;
fsav = fopen("__mov__.sav","a"); fsav = fopen("__mov__.sav","a");
fprintf(fsav,"%ld ", (long)rmov.recno()); fprintf(fsav,"%ld ", recno);
fclose(fsav); fclose(fsav);
rmoviva.curr().put(RMI_NUMREG,num); rmoviva.put(RMI_NUMREG,num);
rmoviva.rewrite(); rmoviva.rewriteat(recno);
rmoviva.next(); rmoviva.next();
} }
fsav = fopen("__mov__.sav","a"); fsav = fopen("__mov__.sav","a");
@ -334,6 +325,7 @@ bool CG4100_App::sort_mov()
// rebuild indexes // rebuild indexes
mov.close(); rmov.close(); rmoviva.close(); mov.close(); rmov.close(); rmoviva.close();
mov.indexon(); rmov.indexon(); rmoviva.indexon();
mov.packfile(); rmov.packfile(); rmoviva.packfile(); mov.packfile(); rmov.packfile(); rmoviva.packfile();
mov.packindex(); rmov.packindex(); rmoviva.packindex(); mov.packindex(); rmov.packindex(); rmoviva.packindex();
@ -345,7 +337,6 @@ bool CG4100_App::sort_mov()
bool CG4100_App::sort_sal() bool CG4100_App::sort_sal()
{ {
bool first;
if (!set_parms(TRUE)) if (!set_parms(TRUE))
return FALSE; return FALSE;
@ -354,155 +345,69 @@ bool CG4100_App::sort_sal()
fclose(fp); fclose(fp);
TLocalisamfile rmov(LF_RMOV); TLocalisamfile rmov(LF_RMOV);
TLocalisamfile saldi(LF_SALDI);
TLocalisamfile mov(LF_MOV); TLocalisamfile mov(LF_MOV);
TLocalisamfile causali(LF_CAUSALI); TLocalisamfile causali(LF_CAUSALI);
TSaldo_agg sal;
long jj = 0l; int gruppo, conto;
const int year = atoi(_year);
rmov.first(); saldi.first(); mov.first(); causali.first(); long oldnumreg = 0L, sottoconto;
TSort sort(sizeof(struct truc));
truc rbuf;
sort.addsortkey(rbuf.GRUPPO - (char*)&rbuf, 3);
sort.addsortkey(rbuf.CONTO - (char*)&rbuf, 3);
sort.addsortkey(rbuf.SOTTOCONTO - (char*)&rbuf, 6);
sort.addsortkey(rbuf.SEZIONE - (char*)&rbuf, 1);
sort.init();
TProgind prnd(rmov.items(), TProgind prnd(rmov.items(),
"Riordino archivio saldi in corso\nOrdinamento archivio movimenti...", "Riordino archivio saldi in corso\nLettura archivio movimenti...",
FALSE,TRUE,30); FALSE,TRUE,30);
causali.zero();
mov.setkey(1);
rmov.first();
sal.reset();
sal.set_anno_es(year);
sal.clear_saldi(year);
while (!rmov.eof()) while (!rmov.eof())
{ {
if (_year == rmov.curr().get(RMV_ANNOES)) if (_year == rmov.get(RMV_ANNOES))
{ {
strcpy(rbuf.GRUPPO, rmov.curr().get(RMV_GRUPPO)); const long numreg = rmov.get_long(RMV_NUMREG);
strcpy(rbuf.CONTO, rmov.curr().get(RMV_CONTO));
strcpy(rbuf.SOTTOCONTO, rmov.curr().get(RMV_SOTTOCONTO)); gruppo = rmov.get_int(RMV_GRUPPO);
strcpy(rbuf.SEZIONE, rmov.curr().get(RMV_SEZIONE)); conto = rmov.get_int(RMV_CONTO);
strcpy(rbuf.IMPORTO, rmov.curr().get(RMV_IMPORTO)); sottoconto = rmov.get_long(RMV_SOTTOCONTO);
strcpy(rbuf.NUMREG, rmov.curr().get(RMV_NUMREG)); if (numreg != oldnumreg)
sort.sort((char*)&rbuf); {
jj++; 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(); rmov.next();
prnd.addstatus(1); prnd.addstatus(1);
do_events(); do_events();
} }
if (sal.items() > 0)
prnd.setstatus(0); sal.registra();
prnd.set_text("Riordino archivio saldi in corso\nRiscrittura file saldi...");
prnd.setmax(jj);
do_events();
sort.endsort();
truc* rr = (truc*)sort.retrieve();
while (rr != NULL)
{
do_events();
real dare = 0.0, avere = 0.0, saldo = 0.0;
TString conto, sottoconto, gruppo, h;
saldi.curr().zero();
saldi.curr().put(SLD_CONTO, rr->CONTO);
saldi.curr().put(SLD_SOTTOCONTO, rr->SOTTOCONTO);
saldi.curr().put(SLD_GRUPPO, rr->GRUPPO);
saldi.curr().put(SLD_ANNOES, _year);
saldi.read();
if (saldi.eof())
{
saldi.curr().zero();
saldi.curr().put(SLD_CONTO, rr->CONTO);
saldi.curr().put(SLD_SOTTOCONTO, rr->SOTTOCONTO);
saldi.curr().put(SLD_GRUPPO, rr->GRUPPO);
saldi.curr().put(SLD_ANNOES, _year);
}
else
{
saldi.curr().put(SLD_SALDO,"");
saldi.curr().put(SLD_PDARESCA,"");
saldi.curr().put(SLD_PAVERESCA,"");
saldi.curr().put(SLD_PDARE,"");
saldi.curr().put(SLD_PAVERE,"");
saldi.curr().put(SLD_DATAULMOV,"");
saldi.curr().put(SLD_NUMULTMOV,"");
saldi.rewrite();
}
first = TRUE;
do
{
bool apertura = FALSE;
conto = rr->CONTO;
sottoconto = rr->SOTTOCONTO;
gruppo = rr->GRUPPO;
h = rr->SEZIONE;
real imp = rr->IMPORTO;
// cerca causale
mov.curr().zero();
mov.curr().put(MOV_ANNOES,_year);
mov.curr().put(MOV_NUMREG, rr->NUMREG);
mov.read();
CHECK(!mov.bad(),"Archivi movimenti e righe inconsistenti");
causali.curr().zero();
causali.curr().put(CAU_CODCAUS,mov.curr().get(MOV_CODCAUS));
CHECK(!causali.bad(),"Archivi causali e movimenti inconsistenti");
if (first)
{ apertura = causali.curr().get_bool(CAU_MOVAP); first = FALSE; }
if (apertura)
{
saldo += imp;
}
else
{
if (rr->SEZIONE[0] == 'D')
dare += imp;
else avere += imp;
}
prnd.addstatus(1);
rr = (truc*)sort.retrieve();
do_events();
}
while (rr && conto == rr->CONTO && sottoconto == rr->SOTTOCONTO &&
gruppo == rr->GRUPPO);
if (dare != 0.0)
{
saldi.curr().put(SLD_PDARE,dare);
saldi.curr().put(SLD_FLAGSALINI,"D");
}
else if (avere != 0.0)
{
saldi.curr().put(SLD_PAVERE,avere);
saldi.curr().put(SLD_FLAGSALINI,"A");
}
else if (saldo != 0.0)
{
saldi.curr().put(SLD_SALDO,saldo);
saldi.curr().put(SLD_FLAGSALINI,h);
}
if (saldi.eof())
saldi.write();
else
saldi.rewrite();
}
remove("__sal__.sav"); remove("__sal__.sav");
return TRUE; return TRUE;
} }

View File

@ -6,7 +6,7 @@
TFixed_string TMP (__tmp, MAXSTR); TFixed_string TMP (__tmp, MAXSTR);
CG4400_application * app() { return (CG4400_application*) MainApp(); } HIDDEN CG4400_application * app() { return (CG4400_application*) MainApp(); }
bool filter_func (const TRelation * r) bool filter_func (const TRelation * r)
{ {
@ -45,13 +45,13 @@ HIDDEN int compare(const TObject** o1, const TObject** o2)
} }
/* /*
bool CG4400_application::libro_giornale_iva_unico() bool CG4400_application::libro_giornale_iva_unico()
{ {
TConfig conf(CONFIG_DITTA); TConfig conf(CONFIG_DITTA);
return conf.get("StLgiU") == "X"; return conf.get("StLgiU") == "X";
} }
*/ */
bool mask_select (TMask_field& f, KEY k) bool mask_select (TMask_field& f, KEY k)
{ {
@ -1033,7 +1033,7 @@ bool CG4400_application::set_print(int n)
stampa_registri_IVA(); stampa_registri_IVA();
} }
else warning_box("Nessuna ditta selezionata!"); else warning_box("Nessuna ditta selezionata!");
return FALSE; return FALSE;
} }
@ -1081,7 +1081,7 @@ bool CG4400_application::set_ditte(TMask& m)
tasto = m.run(); tasto = m.run();
// m.first_focus(tasto); // m.first_focus(tasto);
return tasto == K_ENTER; return tasto == K_ENTER;
} }
@ -1117,7 +1117,7 @@ void CG4400_application::preprocess_header()
_datareg.year()); _datareg.year());
else data.format("%s %s %d", (const char*)"mese di", itom(_fino_a_mese), _annoes); else data.format("%s %s %d", (const char*)"mese di", itom(_fino_a_mese), _annoes);
} }
else else
data = _data_da.string(); data = _data_da.string();
reset_header(); reset_header();
@ -1157,7 +1157,7 @@ void CG4400_application::preprocess_header()
set_header(r,"@10gNum.@19gDocumento@68gT Tipo@103gCod %s@121g@124gT", (const char*) nd1); set_header(r,"@10gNum.@19gDocumento@68gT Tipo@103gCod %s@121g@124gT", (const char*) nd1);
r++; r++;
set_header(r, "Data reg. prot.@17gData@25gNumero Codice Ragione sociale/descrizione@68gO Doc.@76gTotale doc.@91gImponibile Iva %s@112gImposta@124g%s", set_header(r, "Data reg. prot.@17gData@25gNumero Codice Ragione sociale/descrizione@68gO Doc.@76gTotale doc.@91gImponibile Iva %s@112gImposta@124g%s",
(const char*) nd2, (const char*) cor); (const char*) nd2, (const char*) cor);
r++; r++;
} }
riga.fill('-'); riga.fill('-');

View File

@ -61,7 +61,7 @@ public:
CG4600_application() {} CG4600_application() {}
}; };
CG4600_application* app() { return (CG4600_application *) MainApp(); } HIDDEN CG4600_application* app() { return (CG4600_application *) MainApp(); }
bool mask_datac (TMask_field& f, KEY k) bool mask_datac (TMask_field& f, KEY k)
{ {

View File

@ -21,9 +21,9 @@
TLocalisamfile * get_descr_cf(TLocalisamfile * pconti, TLocalisamfile * get_descr_cf(TLocalisamfile * pconti,
TLocalisamfile * clifo , int g, int c, long s); TLocalisamfile * clifo , int g, int c, long s);
class TClifo_list : public TArray class TClifo_list : public TArray
{ {
public: public:
TClifo_list(int g, int c, char tipocf); TClifo_list(int g, int c, char tipocf);
TRectype& clifo(int i)const { return(TRectype&)this->operator[](i); } TRectype& clifo(int i)const { return(TRectype&)this->operator[](i); }
}; };
@ -59,8 +59,14 @@ public:
class TTab_conti : public TAssoc_array 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: public:
void aggiorna_conto (const TConto& tc, const int anno_es, const real& importo, char sezione, bool movap, bool provv, bool somma); 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 class TSaldo_agg : public TObject
@ -76,8 +82,12 @@ class TSaldo_agg : public TObject
TConto& tconti() { return *(TConto*)_tab_conti.get(); } TConto& tconti() { return *(TConto*)_tab_conti.get(); }
public: public:
void clear_saldi(int year);
void registra(); void registra();
void aggiorna (const TConto& tc, const real& importo, char sezione, bool somma=TRUE); 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; } void set_anno_es(int anno) { _anno_es = anno; }
int anno_es() { return _anno_es; } int anno_es() { return _anno_es; }
@ -96,6 +106,7 @@ public:
void reset(); // pulisce l'array dei conti void reset(); // pulisce l'array dei conti
TSaldo_agg(); TSaldo_agg();
int items() const { return _tab_conti.items();}
}; };

View File

@ -13,28 +13,9 @@
#include "conto.h" #include "conto.h"
#include "cglib.h" #include "cglib.h"
void TTab_conti::aggiorna_conto(const TConto& tcon, const int anno_es, const real& importo, char sezione, bool movap, bool provv, bool somma) void TTab_conti::do_agg(TConto* tc, int anno_es, const real& importo,
char sezione, bool movap, bool provv, bool somma, const char* key)
{ {
// TString16 key;
// key.format("%4d%3d%3d%6ld", anno_es, tcon.gruppo(),tcon.conto(),tcon.sottoconto());
TString 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);
add(key, tc);
tc->dare() = ZERO;
tc->avere() = ZERO;
tc->darepro() = ZERO;
tc->averepro() = ZERO;
tc->saldo() = ZERO;
}
real i = somma ? importo : -importo; real i = somma ? importo : -importo;
if (movap) if (movap)
@ -54,10 +35,52 @@ void TTab_conti::aggiorna_conto(const TConto& tcon, const int anno_es, const rea
else tc->avere() += i; else tc->avere() += i;
} }
// rimuovo dalla tabella il conto se dare e avere vanno a zero // rimuovo dalla tabella il conto se dare e avere vanno a zero
if (tc->dare().is_zero() && tc->avere().is_zero() && if (tc->dare().is_zero() && tc->avere().is_zero() &&
tc->darepro().is_zero() && tc->averepro().is_zero() && tc->darepro().is_zero() && tc->averepro().is_zero() &&
tc->saldo().is_zero()) remove((const char*)key); tc->saldo().is_zero()) remove(key);
}
void TTab_conti::aggiorna_conto(const TConto& tcon, const int anno_es, const real& importo, char sezione, bool movap, bool provv, bool somma)
{
TString 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);
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)
{
TString 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);
} }
@ -71,9 +94,17 @@ TSaldo_agg::TSaldo_agg()
reset(); // pulizia dell'array dei conti reset(); // pulizia dell'array dei conti
} }
void TSaldo_agg::aggiorna(const TConto& tc, const real& importo, char sezione, bool somma) 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); _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() void TSaldo_agg::reset()
@ -81,6 +112,41 @@ void TSaldo_agg::reset()
_tab_conti.destroy(); _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.zero(SLD_NUMULTMOV);
saldi.zero(SLD_DATAULMOV);
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.rewrite();
}
saldi.reread(_unlock);
}
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Aggiornamento file saldi // Aggiornamento file saldi
// //

View File

@ -10,7 +10,7 @@
// Certified 100% // Certified 100%
TConto::TConto(int g, int c, long s, char t, const char* d) TConto::TConto(int g, int c, long s, char t, const char* d)
: _tipo(toupper(t)), _gruppo(g), _conto(c), _sottoconto(s), : _tipo(toupper(t)), _gruppo(g), _conto(c), _sottoconto(s),
_descrizione(d) _descrizione(d)
{} {}

View File

@ -1,6 +1,6 @@
EXE=$(EP)cg0 $(EP)cg1 $(EP)cg3 $(EP)cg4 $(EP)cg5 EXE=$(EP)cg0 $(EP)cg1 $(EP)cg3 $(EP)cg4 $(EP)cg5
FRL=$(EP)cg0.frl $(EP)cg1.frl $(EP)cg3.frl $(EP)cg4.frl $(EP)cg5.frl FRL=$(EP)cg0.frl $(EP)cg1.frl $(EP)cg3.frl $(EP)cg4.frl $(EP)cg5.frl
MSK=$(EP)cg0100a.msk $(EP)cg0200a.msk $(EP)cg0300a.msk $(EP)cg0400a.msk $(EP)cg0500a.msk $(EP)cg1100a.msk $(EP)cg1200a.msk $(EP)cg1200b.msk $(EP)cg1400a.msk $(EP)cg1500a.msk $(EP)cg1600a.msk $(EP)cg1700a.msk $(EP)cg2100a.msk $(EP)cg2100b.msk $(EP)cg2100c.msk $(EP)cg2100i.msk $(EP)cg2100o.msk $(EP)cg3300a.msk $(EP)cg3100a.msk $(EP)cg3100b.msk $(EP)cg3100c.msk $(EP)cg3200a.msk $(EP)cg3500a.msk $(EP)cg4300a.msk $(EP)cg5000a.msk $(EP)cg4400a.msk $(EP)cg4500a.msk $(EP)cg4500b.msk $(EP)cg4600a.msk MSK=$(EP)cg0100a.msk $(EP)cg0200a.msk $(EP)cg0300a.msk $(EP)cg0400a.msk $(EP)cg0500a.msk $(EP)cg1100a.msk $(EP)cg1200a.msk $(EP)cg1200b.msk $(EP)cg1400a.msk $(EP)cg1500a.msk $(EP)cg1600a.msk $(EP)cg1700a.msk $(EP)cg2100a.msk $(EP)cg2100b.msk $(EP)cg2100c.msk $(EP)cg2100i.msk $(EP)cg2100o.msk $(EP)cg3300a.msk $(EP)cg3100a.msk $(EP)cg3100b.msk $(EP)cg3100c.msk $(EP)cg3200a.msk $(EP)cg3500a.msk $(EP)cg4100a.msk $(EP)cg4300a.msk $(EP)cg4300b.msk $(EP)cg4300c.msk $(EP)cg5000a.msk $(EP)cg4400a.msk $(EP)cg4500a.msk $(EP)cg4500b.msk $(EP)cg4600a.msk
$(O)/%.o: %.cpp $(O)/%.o: %.cpp
$(CCOMP) $(CFLAGSD) $(<:.cpp= ) $(O)/$* $(CCOMP) $(CFLAGSD) $(<:.cpp= ) $(O)/$*
@ -108,7 +108,7 @@ $(O)/cg2102.o: cg2102.cpp cg2102.h $(I6) $(I10) $(I24) $(I27) $(I33)
$(O)/cg2103.o: cg2103.cpp cg2103.h $(O)/cg2103.o: cg2103.cpp cg2103.h
$(O)/cglib02.o: cglib02.cpp cglib.h $(O)/cglib02.o: conto.h cglib02.cpp $(I24) $(I31) $(I33) $(I40) $(I42) $(I51) cglib.h
$(O)/conto.o: conto.cpp $(I6) $(I10) $(I24) $(I27) $(I33) $(O)/conto.o: conto.cpp $(I6) $(I10) $(I24) $(I27) $(I33)
@ -214,20 +214,17 @@ $(O)/cg4500.o: cg4500.cpp $(I24) $(I31) $(I33) $(I40) $(I42) $(I51) cg4500a.h
$(O)/cglib01.o: cglib01.cpp $(I24) $(I31) $(I33) $(I40) $(I42) $(I51) cglib.h $(O)/cglib01.o: cglib01.cpp $(I24) $(I31) $(I33) $(I40) $(I42) $(I51) cglib.h
$(O)/cglib02.o: cglib02.cpp $(I24) $(I31) $(I33) $(I40) $(I42) $(I51) cglib.h
$(O)/conto.o: conto.cpp conto.h $(O)/conto.o: conto.cpp conto.h
$(O)/cg2101.o: cg2101.cpp $(I6) $(I10) $(I24) $(I27) $(I33) $(EP)cg4: $(O)/cg4.o $(LIBD1) $(O)/cg4300.o $(O)/cg4301.o $(O)/cg4302.o $(O)/cg4303.o $(O)/cg4304.o $(O)/cg4305.o $(O)/cg4400.o $(O)/cg4401.o $(O)/conto.o $(O)/cglib01.o $(O)/cglib02.o $(O)/cg4500.o $(O)/cg2101.o $(O)/cg2103.o $(O)/cg4100.o $(O)/cg4600.o $(EP)cg4.frl $(EP)cg4300a.msk $(EP)cg4300b.msk $(EP)cg4300c.msk $(O)/cglib03.o
$(LINK) $(LFLAGSD1) $@ $(O)/cg4.o $(O)/cg4300.o $(O)/cg4301.o $(O)/cg4302.o $(O)/cg4303.o $(O)/cg4304.o $(O)/cg4305.o $(O)/cg4400.o $(O)/cg4401.o $(O)/conto.o $(O)/cglib01.o $(O)/cglib02.o $(O)/cg4500.o $(O)/cglib03.o $(O)/cg2101.o $(O)/cg2103.o $(O)/cg4100.o $(O)/cg4600.o
$(O)/cg2103.o: cg2103.cpp cg2103.h
$(EP)cg4: $(O)/cg4.o $(LIBD1) $(O)/cg4300.o $(O)/cg4301.o $(O)/cg4302.o $(O)/cg4303.o $(O)/cg4304.o $(O)/cg4305.o $(O)/cg4400.o $(O)/cg4401.o $(O)/conto.o $(O)/cglib01.o $(O)/cglib02.o $(O)/cg4500.o $(O)/cg2101.o $(O)/cg2103.o $(EP)cg4.frl $(EP)cg4300a.msk $(EP)cg4300b.msk $(EP)cg4300c.msk $(O)/cglib03.o
$(LINK) $(LFLAGSD1) $@ $(O)/cg4.o $(O)/cg4300.o $(O)/cg4301.o $(O)/cg4302.o $(O)/cg4303.o $(O)/cg4304.o $(O)/cg4305.o $(O)/cg4400.o $(O)/cg4401.o $(O)/conto.o $(O)/cglib01.o $(O)/cglib02.o $(O)/cg4500.o $(O)/cglib03.o $(O)/cg2101.o $(O)/cg2103.o
$(EP)cg4400.frl: cg4400.url $(U1) $(EP)cg4400.frl: cg4400.url $(U1)
$(RCOMP) cg4400 -l $(EP)cg4400 $(RCOMP) cg4400 -l $(EP)cg4400
$(EP)cg4100a.msk : cg4100a.uml
$(MCOMP) $(basename $?) $(basename $@)
$(EP)cg4300a.msk : cg4300a.uml $(EP)cg4300a.msk : cg4300a.uml
$(MCOMP) $(basename $?) $(basename $@) $(MCOMP) $(basename $?) $(basename $@)