campo-sirio/cg/cg3500.cpp
guy 66fe24764c Aumentate ad uno sproposito di colonne tutte le stampe relative
alla contabilita'.

cglib01.cpp  Cambiato il campo TIPOAPERS in TIPOPER per stabilire il
             tipo di anagrafica nell'oggetto TBill


git-svn-id: svn://10.65.10.50/trunk@5400 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-20 14:23:01 +00:00

984 lines
28 KiB
C++
Executable File

//Stampa riepilogo gruppi/conti
// W96SALDI e' la sigla di tutte le modifiche effettuate riguardo il cambiamento dell' archivio
// SALDI. L' archivio e' cambiato nel seguente modo:
// - Non esistono piu' i progressivi dei movimenti scaricati PDARESCA e PAVERESCA;
// - Ora esistono un record per i movimenti normali e un record per i movimenti scaricati; la
// distinzione e' resa possibile dall' introduzione in chiave di un flag FLSCA (vedi tracciato)
// che e' un booleano. Il record con FLSCA = FALSE contiene la somma dei saldi dei movimenti
// normali e dei movimenti scaricati, mentre il record con FLSCA = TRUE, contiene solo i saldi
// dei movimenti scaricati.
// Tutti i saldi che nel programma venivano memorizzati nei campi PDARESCA e PAVERESCA dei
// file temporanei ora sono memorizzati in PDAREPRO e PAVEREPRO.
// Le funzioni che sono state modificate sono:
// - riepilogo();
// - ricerca_cf(...);
// - leggi_conti(...);
// - leggi_gruppi(...);
// - CercaConto(...);
// - CercaGruppo(...);
// - UltimaData(...);
#include <config.h>
#include <mask.h>
#include <printapp.h>
#include <progind.h>
#include <tabutil.h>
#include <utility.h>
#include <pconti.h>
#include <comuni.h>
#include <clifo.h>
#include <saldi.h>
#include <nditte.h>
#include <anagr.h>
#include "cg3.h"
#include "cg3500.h"
#include "cglib02.h"
typedef enum {stampagruppo, stampaconto, stampasottoconto, fine} tipo;
class TStampa_riepilogo : public TPrintapp
{
TProgind * _prog;
TSaldi_list* _lista;
TLocalisamfile* _com, * _pcn, * _clifo, * _saldi, * _nditte,* _anag;
TIsamtempfile * _tmp_saldi;
tipo _tp;
real _prg_dare,_prg_avere,_saldo_dare,_saldo_avere,_prg_dare_tot,_prg_avere_tot,_saldo_tot;
real _prg_dare_gruppo,_prg_avere_gruppo,_saldo_dare_gruppo,_saldo_avere_gruppo,_prg_dare_conto,_prg_avere_conto,_saldo_dare_conto,_saldo_avere_conto;
int _ggruppo,_gconto,_cgruppo,_cconto,_gcorr,_ccorr,_gprec,_cprec,_scelta,_richiesta,_annoese,_eof;
long _scorr;
char _tipo;
TDate _ultima_data,_data,_udata_max;
TString _descr,_descrconto,_descrgruppo,_cofi,_cap,_paiva,_ragsoc,_comunefis,_provfis,_viafis,_g_descr,_c_descr;
public:
bool menu (MENU_TAG m) { return TPrintapp::menu(m) ; }
bool user_create() ;
bool user_destroy();
bool set_print(int);
virtual bool preprocess_print(int,int);
virtual void preprocess_header();
virtual bool preprocess_page(int,int);
virtual print_action postprocess_page(int,int);
virtual void postclose_print();
bool riepilogo();
bool ricerca_cf(TConto&,int,real&,real&);
tipo leggi_conti(int);
tipo leggi_gruppi(int);
bool CercaConto(int,int);
bool CercaGruppo(int);
void setta_riga_conto();
void setta_riga_gruppo();
void setta_riga_sottoconto();
void setta_riga_totale();
void get_dati_ditta();
int stampa_intestazione_ditta();
TDate UltimaData(int,int,long);
TStampa_riepilogo() { }
virtual ~TStampa_riepilogo() { }
};
bool TStampa_riepilogo::riepilogo()
{
TSaldo sld;
int g, c, gp, cp, indbil;
long s;
char tipo_conto = ' ';
bool esiste_conto = FALSE, esiste_sc = FALSE;
real saldo_conto,prg_conto_dare,prg_conto_avere,saldo_gruppo,prg_gruppo_dare,prg_gruppo_avere,prg_dare,prg_avere,saldo;
CHECK(_tmp_saldi == NULL, "La minchia che riapro cg01!");
_tmp_saldi = new TIsamtempfile(LF_SALDI, "cg01", TRUE, TRUE);
gp=-1;
cp=-1;
_udata_max = 0l;
for (_pcn->first(); !_pcn->eof(); _pcn->next())
{
_prog->addstatus(1);
g = _pcn->get_int (PCN_GRUPPO);
c = _pcn->get_int (PCN_CONTO);
s = _pcn->get_long(PCN_SOTTOCONTO);
tipo_conto = _pcn->get_char(PCN_TMCF);
TConto conto (g,c,s,tipo_conto);
//il "conto" e' cambiato anche se e' rimasto invariato il conto ma e' cambiato il gruppo
if ( (((cp != -1) && (conto.conto() != cp)) || ((gp != -1) && (conto.gruppo() != gp)))
&& esiste_sc )
{
saldo_conto = prg_conto_dare - prg_conto_avere;
prg_gruppo_dare += prg_conto_dare;
prg_gruppo_avere += prg_conto_avere;
//scrivo il record del conto;
_tmp_saldi->zero();
_tmp_saldi->put(SLD_GRUPPO,gp);
_tmp_saldi->put(SLD_CONTO,cp);
_tmp_saldi->put(SLD_SOTTOCONTO,0L);
_tmp_saldi->put(SLD_ANNOES,_annoese);
_tmp_saldi->put(SLD_DATAULMOV,_udata_max);
_tmp_saldi->put(SLD_PDARE,prg_conto_dare);
_tmp_saldi->put(SLD_PAVERE,prg_conto_avere);
if (saldo_conto > 0.00) //va stampato in Dare
_tmp_saldi->put(SLD_PDAREPRO,saldo_conto); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PDARESCA,saldo_conto);
else
{
saldo_conto = saldo_conto * (-1.00);
_tmp_saldi->put(SLD_PAVEREPRO,saldo_conto); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PAVERESCA,saldo_conto);
}
_tmp_saldi->write();
esiste_conto = TRUE;
esiste_sc = FALSE;
cp = conto.conto();
prg_conto_dare = 0.00;
prg_conto_avere = 0.00;
}
if ( ((gp != -1) && (conto.gruppo() != gp)) && esiste_conto )
{
saldo_gruppo = prg_gruppo_dare - prg_gruppo_avere;
//scrivo il record del gruppo
_tmp_saldi->zero();
_tmp_saldi->put(SLD_GRUPPO,gp);
_tmp_saldi->put(SLD_CONTO,0);
_tmp_saldi->put(SLD_SOTTOCONTO,0L);
_tmp_saldi->put(SLD_ANNOES,_annoese);
_tmp_saldi->put(SLD_PDARE,prg_gruppo_dare);
_tmp_saldi->put(SLD_PAVERE,prg_gruppo_avere);
if (saldo_gruppo > 0.00) //va stampato in Dare
_tmp_saldi->put(SLD_PDAREPRO,saldo_gruppo); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PDARESCA,saldo_gruppo);
else
{
saldo_gruppo = saldo_gruppo * (-1.00);
_tmp_saldi->put(SLD_PAVEREPRO,saldo_gruppo); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PAVERESCA,saldo_gruppo);
}
_tmp_saldi->write();
gp = conto.gruppo();
esiste_conto = FALSE;
prg_gruppo_dare = 0.00;
prg_gruppo_avere = 0.00;
}
if ( (conto.sottoconto() == 0) && (conto.conto() != 0) ) //si tratta di un conto
{
if ( (tipo_conto == 'C') || (tipo_conto == 'F') ) //si tratta di un conto cliente/fornitore
{
_udata_max = 0l;
indbil = _pcn->get_int(PCN_INDBIL);
esiste_sc = ricerca_cf(conto,indbil,prg_conto_dare,prg_conto_avere);
if (esiste_sc)
{
gp = conto.gruppo();
cp = conto.conto();
}
TRecnotype recnum = _pcn->recno();
_pcn->next();
if (_pcn->eof())
{
saldo_conto = prg_conto_dare - prg_conto_avere;
prg_gruppo_dare += prg_conto_dare;
prg_gruppo_avere += prg_conto_avere;
if (esiste_sc)
{
//scrivo il record del conto;
_tmp_saldi->zero();
_tmp_saldi->put(SLD_GRUPPO,gp);
_tmp_saldi->put(SLD_CONTO,cp);
_tmp_saldi->put(SLD_SOTTOCONTO,0L);
_tmp_saldi->put(SLD_ANNOES,_annoese);
_tmp_saldi->put(SLD_DATAULMOV,_udata_max);
_tmp_saldi->put(SLD_PDARE,prg_conto_dare);
_tmp_saldi->put(SLD_PAVERE,prg_conto_avere);
if (saldo_conto > 0.00) //va stampato in Dare
_tmp_saldi->put(SLD_PDAREPRO,saldo_conto); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PDARESCA,saldo_conto);
else
{
saldo_conto = saldo_conto * (-1.00);
_tmp_saldi->put(SLD_PAVEREPRO,saldo_conto); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PAVERESCA,saldo_conto);
}
_tmp_saldi->write();
esiste_conto = TRUE;
esiste_sc = FALSE;
}
if (esiste_conto)
{
saldo_gruppo = prg_gruppo_dare - prg_gruppo_avere;
//scrivo il record del gruppo
_tmp_saldi->zero();
_tmp_saldi->put(SLD_GRUPPO,gp);
_tmp_saldi->put(SLD_CONTO,0);
_tmp_saldi->put(SLD_SOTTOCONTO,0L);
_tmp_saldi->put(SLD_ANNOES,_annoese);
_tmp_saldi->put(SLD_PDARE,prg_gruppo_dare);
_tmp_saldi->put(SLD_PAVERE,prg_gruppo_avere);
if (saldo_gruppo > 0.00) //va stampato in Dare
_tmp_saldi->put(SLD_PDAREPRO,saldo_gruppo);
//_tmp_saldi->put(SLD_PDARESCA,saldo_gruppo); // W96SALDI del 10-06-96
else
{
saldo_gruppo = saldo_gruppo * (-1.00);
_tmp_saldi->put(SLD_PAVEREPRO,saldo_gruppo); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PAVERESCA,saldo_gruppo);
}
_tmp_saldi->write();
}
}
_pcn->readat(recnum);
continue;
}
}
if (conto.conto() == 0)
indbil = _pcn->get_int(PCN_INDBIL);
if ( (conto.conto() == 0) || (conto.sottoconto() == 0) ) //e' un gruppo o un conto
{
_udata_max = 0l;
esiste_sc = FALSE;
continue;
}
// ho trovato un sottoconto
//esiste_sc = TRUE;
prg_dare = 0.00;
prg_avere = 0.00;
if (_richiesta == 1)
sld.prg_attuali(_annoese,conto,prg_dare,prg_avere);
else sld.prg_mov_eliminati(_annoese,conto,prg_dare,prg_avere);
saldo = prg_dare - prg_avere;
prg_conto_dare += prg_dare;
prg_conto_avere += prg_avere;
if (prg_dare != ZERO || prg_avere != ZERO)
{
esiste_sc = TRUE;
if (_scelta == 1) //riepilogo conti
{
_tmp_saldi->zero();
_tmp_saldi->put(SLD_GRUPPO,conto.gruppo());
_tmp_saldi->put(SLD_CONTO,conto.conto());
_tmp_saldi->put(SLD_SOTTOCONTO,conto.sottoconto());
_tmp_saldi->put(SLD_ANNOES,_annoese);
_tmp_saldi->put(SLD_FLAGSALINI,tipo_conto);
_tmp_saldi->put(SLD_PDARE,prg_dare);
_tmp_saldi->put(SLD_PAVERE,prg_avere);
if (saldo > 0.00) //va stampato in Dare
_tmp_saldi->put(SLD_PDAREPRO,saldo); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PDARESCA,saldo);
else
{
saldo = saldo * (-1.00);
_tmp_saldi->put(SLD_PAVEREPRO,saldo); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PAVERESCA,saldo);
}
_tmp_saldi->write();
}
if (_scelta == 2)
{
_ultima_data = UltimaData(conto.gruppo(),conto.conto(),conto.sottoconto());
_udata_max = fnc_max(_udata_max,_ultima_data);
}
gp = conto.gruppo();
cp = conto.conto();
}
TRecnotype recnum = _pcn->recno();
_pcn->next();
if (_pcn->eof())
{
saldo_conto = prg_conto_dare - prg_conto_avere;
prg_gruppo_dare += prg_conto_dare;
prg_gruppo_avere += prg_conto_avere;
if (esiste_sc)
{
esiste_conto = TRUE;
//scrivo il record del conto;
_tmp_saldi->zero();
_tmp_saldi->put(SLD_GRUPPO,gp);
_tmp_saldi->put(SLD_CONTO,cp);
_tmp_saldi->put(SLD_SOTTOCONTO,0L);
_tmp_saldi->put(SLD_ANNOES,_annoese);
_tmp_saldi->put(SLD_DATAULMOV,_udata_max);
_tmp_saldi->put(SLD_PDARE,prg_conto_dare);
_tmp_saldi->put(SLD_PAVERE,prg_conto_avere);
if (saldo_conto > 0.00) //va stampato in Dare
_tmp_saldi->put(SLD_PDAREPRO,saldo_conto); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PDARESCA,saldo_conto);
else
{
saldo_conto = saldo_conto * (-1.00);
_tmp_saldi->put(SLD_PAVEREPRO,saldo_conto); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PAVERESCA,saldo_conto);
}
_tmp_saldi->write();
}
saldo_gruppo = prg_gruppo_dare - prg_gruppo_avere;
if (esiste_conto)
{
//scrivo il record del gruppo
_tmp_saldi->zero();
_tmp_saldi->put(SLD_GRUPPO,gp);
_tmp_saldi->put(SLD_CONTO,0);
_tmp_saldi->put(SLD_SOTTOCONTO,0L);
_tmp_saldi->put(SLD_ANNOES,_annoese);
_tmp_saldi->put(SLD_PDARE,prg_gruppo_dare);
_tmp_saldi->put(SLD_PAVERE,prg_gruppo_avere);
if (saldo_gruppo > 0.00) //va stampato in Dare
_tmp_saldi->put(SLD_PDAREPRO,saldo_gruppo); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PDARESCA,saldo_gruppo);
else
{
saldo_gruppo = saldo_gruppo * (-1.00);
_tmp_saldi->put(SLD_PAVEREPRO,saldo_gruppo); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PAVERESCA,saldo_gruppo);
}
_tmp_saldi->write();
}
}
_pcn->readat(recnum);
}
return TRUE;
}
bool TStampa_riepilogo::ricerca_cf(TConto& conto,int indbil,real& prg_conto_dare,real& prg_conto_avere)
{
TSaldo sld;
bool esiste_sc = FALSE;
int g = conto.gruppo();
int c = conto.conto();
char tipo = conto.tipo();
long s;
real prg_dare, prg_avere, saldo;
_lista = new TSaldi_list (g,c,_annoese);
TRecnotype items = _lista->items();
prg_conto_dare = 0.00;
prg_conto_avere = 0.00;
for (int i = 0; i < items; i++)
{
_prog->addstatus(1);
const TRectype* r = _lista->saldi();
s = r->get_long(SLD_SOTTOCONTO);
prg_dare = 0.00;
prg_avere = 0.00;
conto.set(g, c, s, tipo); //aggiunge a conto s
if (_richiesta == 1)
sld.prg_attuali(_annoese,conto,prg_dare,prg_avere);
else sld.prg_mov_eliminati(_annoese,conto,prg_dare,prg_avere);
saldo = prg_dare - prg_avere;
prg_conto_dare += prg_dare;
prg_conto_avere += prg_avere;
if (prg_dare != ZERO || prg_avere != ZERO)
{
esiste_sc = TRUE;
if (_scelta == 1)
{
_tmp_saldi->zero();
_tmp_saldi->put(SLD_GRUPPO,g);
_tmp_saldi->put(SLD_CONTO,c);
_tmp_saldi->put(SLD_SOTTOCONTO,s);
_tmp_saldi->put(SLD_ANNOES,_annoese);
_tmp_saldi->put(SLD_FLAGSALINI,tipo);
_tmp_saldi->put(SLD_PDARE,prg_dare);
_tmp_saldi->put(SLD_PAVERE,prg_avere);
if (saldo > 0.00) //va stampato in Dare
_tmp_saldi->put(SLD_PDAREPRO,saldo); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PDARESCA,saldo);
else
{
saldo = saldo * (-1.00);
_tmp_saldi->put(SLD_PAVEREPRO,saldo); // W96SALDI del 10-06-96
//_tmp_saldi->put(SLD_PAVERESCA,saldo);
}
_tmp_saldi->write();
}
if (_scelta == 2)
{
_ultima_data = UltimaData(conto.gruppo(),conto.conto(),conto.sottoconto());
_udata_max = fnc_max(_udata_max,_ultima_data);
}
}
}
delete _lista;
return esiste_sc;
}
bool TStampa_riepilogo::preprocess_print(int file, int counter)
{
#ifdef DBG
set_real_picture ("@@@.@@@.###.###.###");
#else
set_real_picture ("###.###.###.###.###");
#endif
set_print_zero(FALSE);
_tmp_saldi->setkey(2);
_prg_dare_tot = 0.00;
_prg_avere_tot = 0.00;
_gprec = -1;
_cprec = -1;
return TRUE;
}
tipo TStampa_riepilogo::leggi_conti(int counter)
{
TRecnotype pos;
if (counter == 0)
{
_eof = _tmp_saldi->first();
if (_eof)
return fine;
}
do
{
_gcorr = _tmp_saldi->get_int(SLD_GRUPPO);
_ccorr = _tmp_saldi->get_int(SLD_CONTO);
_scorr = _tmp_saldi->get_long(SLD_SOTTOCONTO);
pos = _tmp_saldi->recno();
_eof = _tmp_saldi->next();
} while ( (_scorr == 0l) && (!_eof) );
if ( (_gprec != _gcorr) && (_gprec != -1) )
{
CercaConto(_gprec,_cprec);
CercaGruppo(_gprec);
_cprec = _ccorr;
_gprec = _gcorr;
_tmp_saldi->readat(pos);
return stampagruppo;
}
if ( (_cprec != _ccorr)&&(_cprec != -1) )
{
CercaConto(_gprec,_cprec);
_cprec = _ccorr;
_tmp_saldi->readat(pos);
return stampaconto;
}
if (_eof)
{
_ultima_data = UltimaData(_gcorr,_ccorr,_scorr);
_tmp_saldi->readat(pos);
_tipo = _tmp_saldi->get_char(SLD_FLAGSALINI);
if (_tipo != 'C' && _tipo != 'F')
_tipo = ' ';
TConto conto (_gcorr,_ccorr,_scorr,_tipo);
_descr = conto.descrizione();
_prg_dare = _tmp_saldi->get_real(SLD_PDARE);
_prg_avere = _tmp_saldi->get_real(SLD_PAVERE);
_saldo_dare = _tmp_saldi->get_real(SLD_PDAREPRO); // W96SALDI del 10-06-96
_saldo_avere = _tmp_saldi->get_real(SLD_PAVEREPRO);
CercaConto(_gcorr,_ccorr);
CercaGruppo(_gcorr);
return fine;
}
if ( (_gprec == -1) && (_cprec == -1) )
{
_gprec = _gcorr;
_cprec = _ccorr;
}
_ultima_data = UltimaData(_gcorr,_ccorr,_scorr);
_tmp_saldi->readat(pos);
_tipo = _tmp_saldi->get_char(SLD_FLAGSALINI);
if (_tipo != 'C' && _tipo != 'F')
_tipo = ' ';
TConto conto (_gcorr,_ccorr,_scorr,_tipo);
_descr = conto.descrizione();
_prg_dare = _tmp_saldi->get_real(SLD_PDARE);
_prg_avere = _tmp_saldi->get_real(SLD_PAVERE);
_saldo_dare = _tmp_saldi->get_real(SLD_PDAREPRO); // W96SALDI del 10-06-96
//_saldo_dare = _tmp_saldi->get_real(SLD_PDARESCA);
_saldo_avere = _tmp_saldi->get_real(SLD_PAVEREPRO);
//_saldo_avere = _tmp_saldi->get_real(SLD_PAVERESCA);
_tmp_saldi->next();
return stampasottoconto;
}
tipo TStampa_riepilogo::leggi_gruppi(int counter)
{
TRecnotype pos;
if (counter == 0)
{
_eof = _tmp_saldi->first();
if (_eof)
return fine;
}
do
{
_gcorr = _tmp_saldi->get_int(SLD_GRUPPO);
_ccorr = _tmp_saldi->get_int(SLD_CONTO);
pos = _tmp_saldi->recno();
_eof = _tmp_saldi->next();
} while ( (_ccorr == 0l) && (!_eof) ); //esco dal ciclo quando ho trovato un gruppo oppure quando e' finito il file
if ( (_gprec != _gcorr) && (_gprec != -1) )
{
CercaGruppo(_gprec);
_gprec = _gcorr;
_tmp_saldi->readat(pos);
return stampagruppo;
}
if (_eof)
{
_tmp_saldi->readat(pos);
_ultima_data = _tmp_saldi->get_date(SLD_DATAULMOV);
_tipo = _tmp_saldi->get_char(SLD_FLAGSALINI);
if (_tipo != 'C' && _tipo != 'F')
_tipo = ' ';
TConto conto (_gcorr,_ccorr,0l,_tipo);
_descrconto = conto.descrizione();
_prg_dare_conto = _tmp_saldi->get_real(SLD_PDARE);
_prg_avere_conto = _tmp_saldi->get_real(SLD_PAVERE);
_saldo_dare_conto = _tmp_saldi->get_real(SLD_PDAREPRO); // W96SALDI del 10-06-96
//_saldo_dare_conto = _tmp_saldi->get_real(SLD_PDARESCA);
_saldo_avere_conto = _tmp_saldi->get_real(SLD_PAVEREPRO);
//_saldo_avere_conto = _tmp_saldi->get_real(SLD_PAVERESCA);
CercaGruppo(_gcorr);
return fine;
}
if (_gprec == -1)
_gprec = _gcorr;
_tmp_saldi->readat(pos);
_ultima_data = _tmp_saldi->get_date(SLD_DATAULMOV);
_tipo = _tmp_saldi->get_char(SLD_FLAGSALINI);
if (_tipo != 'C' && _tipo != 'F')
_tipo = ' ';
TConto conto (_gcorr,_ccorr,0l,_tipo);
_descrconto = conto.descrizione();
_prg_dare_conto = _tmp_saldi->get_real(SLD_PDARE);
_prg_avere_conto = _tmp_saldi->get_real(SLD_PAVERE);
_saldo_dare_conto = _tmp_saldi->get_real(SLD_PDAREPRO); // W96SALDI del 10-06-96
//_saldo_dare_conto = _tmp_saldi->get_real(SLD_PDARESCA);
_saldo_avere_conto = _tmp_saldi->get_real(SLD_PAVEREPRO);
//_saldo_avere_conto = _tmp_saldi->get_real(SLD_PAVERESCA);
_tmp_saldi->next();
return stampaconto;
}
bool TStampa_riepilogo::CercaConto(int g, int c)
{
_tmp_saldi->zero();
_tmp_saldi->put(SLD_GRUPPO,g);
_tmp_saldi->put(SLD_CONTO,c);
_tmp_saldi->put(SLD_SOTTOCONTO,0l);
_tmp_saldi->put(SLD_ANNOES,_annoese);
_tmp_saldi->put(SLD_FLSCA,FALSE); // W96SALDI del 10-06-96
if (_tmp_saldi->read() == NOERR)
{
_gconto = _tmp_saldi->get_int(SLD_GRUPPO);
_cconto = _tmp_saldi->get_int(SLD_CONTO);
_tipo = _tmp_saldi->get_char(SLD_FLAGSALINI);
if (_tipo != 'C' && _tipo != 'F')
_tipo = ' ';
if (_scelta == 2)
_ultima_data = _tmp_saldi->get_date(SLD_DATAULMOV);
TConto conto (_gconto,_cconto,0l,_tipo);
_descrconto = conto.descrizione();
_prg_dare_conto = _tmp_saldi->get_real(SLD_PDARE);
_prg_avere_conto = _tmp_saldi->get_real(SLD_PAVERE);
_saldo_dare_conto = _tmp_saldi->get_real(SLD_PDAREPRO);
//_saldo_dare_conto = _tmp_saldi->get_real(SLD_PDARESCA); // W96SALDI del 10-06-96
_saldo_avere_conto = _tmp_saldi->get_real(SLD_PAVEREPRO);
//_saldo_avere_conto = _tmp_saldi->get_real(SLD_PAVERESCA);
return TRUE;
}
return FALSE;
}
bool TStampa_riepilogo::CercaGruppo(int g)
{
_tmp_saldi->zero();
_tmp_saldi->put(SLD_GRUPPO,g);
_tmp_saldi->put(SLD_CONTO,0);
_tmp_saldi->put(SLD_SOTTOCONTO,0l);
_tmp_saldi->put(SLD_ANNOES,_annoese);
_tmp_saldi->put(SLD_FLSCA, "");
if (_tmp_saldi->read() == NOERR)
{
_ggruppo = _tmp_saldi->get_int(SLD_GRUPPO);
_tipo = _tmp_saldi->get_char(SLD_FLAGSALINI);
if (_tipo != 'C' && _tipo != 'F')
_tipo = ' ';
TConto conto (_ggruppo,0,0l,_tipo);
_descrgruppo = conto.descrizione();
_prg_dare_gruppo = _tmp_saldi->get_real(SLD_PDARE);
_prg_avere_gruppo = _tmp_saldi->get_real(SLD_PAVERE);
_saldo_dare_gruppo = _tmp_saldi->get_real(SLD_PDAREPRO); // W96SALDI del 10-06-96
//_saldo_dare_gruppo = _tmp_saldi->get_real(SLD_PDARESCA);
_saldo_avere_gruppo = _tmp_saldi->get_real(SLD_PAVEREPRO);
//_saldo_avere_gruppo = _tmp_saldi->get_real(SLD_PAVERESCA);
_prg_dare_tot += _prg_dare_gruppo;
_prg_avere_tot += _prg_avere_gruppo;
return TRUE;
}
return FALSE;
}
bool TStampa_riepilogo::preprocess_page(int file, int counter)
{
reset_print();
if (_scelta == 1)
_tp = leggi_conti(counter);
if (_scelta == 2)
_tp = leggi_gruppi(counter);
if (_tp == fine && counter == 0)
return FALSE;
if (_tp == fine)
{
if (_scelta == 1)
setta_riga_sottoconto();
setta_riga_conto();
setta_riga_gruppo();
setta_riga_totale();
}
if (_tp == stampagruppo)
{
if ( _scelta == 1) setta_riga_conto();
setta_riga_gruppo();
}
if (_tp == stampaconto)
setta_riga_conto();
if (_tp == stampasottoconto)
setta_riga_sottoconto();
return TRUE;
}
void TStampa_riepilogo::postclose_print()
{
if (_tmp_saldi)
{ delete _tmp_saldi; _tmp_saldi = NULL; }
//return NEXT_PAGE;
}
print_action TStampa_riepilogo::postprocess_page(int file, int counter)
{
if (_tp == fine)
return NEXT_PAGE;
return REPEAT_PAGE;
}
void TStampa_riepilogo::setta_riga_sottoconto()
{
TString udata = _ultima_data.string();
set_row(1,"%6ld", _scorr);
set_row(1," %.34s@r",(const char*) _descr);
set_row(1,"@42g%s",(const char*) udata);
set_row(1,"@53g%r@73g%r@93g%r@113g%r",&_prg_dare,&_prg_avere,&_saldo_dare,&_saldo_avere);
}
void TStampa_riepilogo::setta_riga_conto()
{
TString riga (132);
TString udata = _ultima_data.string();
int r;
riga = "";
if ( (_tp == fine) && (_scelta == 1) )
r = 2;
else
r = 1;
if (_scelta == 1)
{
set_row(r++,"%s",(const char*)riga);
set_row(r,"**** Totali conto %3d %3d",_gconto,_cconto);
set_row(r,"@27g%.25s@r",(const char*)_descrconto);
}
if (_scelta == 2)
{
set_row(r,"%3d", _ccorr);
set_row(r," %.25s@r",(const char*)_descrconto);
set_row(r,"@42g%s",(const char*)udata);
}
set_row(r++,"@53g%r@73g%r@93g%r@113g%r",&_prg_dare_conto,&_prg_avere_conto,&_saldo_dare_conto,&_saldo_avere_conto);
if ( (_scelta == 1) || ((_scelta == 2) && (_tp == fine)) )
set_row(r,"%s",(const char*)riga);
}
void TStampa_riepilogo::setta_riga_gruppo()
{
TString riga (132);
int r = 0;
riga.fill('-');
if (_scelta == 1)
if (_tp == fine) r = 5;
else r = 4;
if (_scelta == 2)
if (_tp == fine) r = 3;
else r = 2;
set_row(r,"**** TOTALI GRUPPO %3d",_ggruppo);
set_row(r,"@27g%.25s@r",(const char*)_descrgruppo);
set_row(r++,"@53g%r@73g%r@93g%r@113g%r",&_prg_dare_gruppo,&_prg_avere_gruppo,&_saldo_dare_gruppo,&_saldo_avere_gruppo);
set_row(r++,"%s",(const char*)riga);
riga = "";
set_row(r,"%s",(const char*)riga);
}
void TStampa_riepilogo::setta_riga_totale()
{
_saldo_tot = _prg_dare_tot - _prg_avere_tot;
const int r = _scelta == 1 ? 8 : 6;
//17/11/1995
set_row(r, "**** TOTALE GENERALE @53g%r@73g%r", &_prg_dare_tot, &_prg_avere_tot);
// Guy: 10/01/97 errore MI6125
if (_saldo_tot != 0.0)
{
int go = 93;
if (_saldo_tot < 0.0)
{
_saldo_tot = -_saldo_tot;
go += 20;
}
TString st(24);
st << '@' << go << 'g' << _saldo_tot.string("###.###.###.###.###");
set_row(r, (const char*)st);
}
}
TDate TStampa_riepilogo::UltimaData(int g, int c, long s)
{
TLocalisamfile saldi(LF_SALDI);
TDate uldata;
saldi.zero();
if (_annoese != 0)
saldi.put(SLD_ANNOES, _annoese);
saldi.put(SLD_FLSCA, FALSE); // W96SALDI del 10-06-96
saldi.put(SLD_GRUPPO,g);
if (c != 0)
saldi.put(SLD_CONTO, c);
if (s != 0)
saldi.put(SLD_SOTTOCONTO, s);
saldi.read();
if (saldi.bad())
saldi.zero();
uldata = saldi.get(SLD_DATAULMOV);
return uldata;
}
bool TStampa_riepilogo::user_create()
{
_clifo = new TLocalisamfile(LF_CLIFO);
_com = new TLocalisamfile(LF_COMUNI);
_pcn = new TLocalisamfile(LF_PCON);
_saldi = new TLocalisamfile(LF_SALDI);
_nditte = new TLocalisamfile(LF_NDITTE);
_anag = new TLocalisamfile(LF_ANAG);
_tmp_saldi = NULL;
return TRUE;
}
bool TStampa_riepilogo::user_destroy()
{
delete _com;
delete _pcn;
delete _clifo;
delete _saldi;
delete _nditte;
delete _anag;
delete _tmp_saldi;
return TRUE;
}
bool TStampa_riepilogo::set_print(int)
{
TMask m ("cg3500a");
KEY tasto = m.run();
if (tasto == K_ENTER)
{
_annoese = atoi(m.get(F_ANNO));
_scelta = atoi(m.get(F_STAMPA));
_richiesta = atoi(m.get(F_RICHIESTA));
_data = m.get(F_DATASTAMPA);
_prog = new TProgind(_pcn->items(), "Elaborazione in corso...", FALSE);
riepilogo();
delete _prog;
return TRUE;
}
return FALSE;
}
TRectype& cerca_com (const char * cod, TLocalisamfile *comuni)
{
comuni->zero();
comuni->put(COM_COM, cod);
comuni->read();
if (comuni->bad())
comuni->zero();
return comuni->curr();
}
void TStampa_riepilogo::get_dati_ditta()
{
TLocalisamfile nditte(LF_NDITTE);
TLocalisamfile anag(LF_ANAG);
TString codanagr;
TString tipoa;
nditte.zero();
nditte.put(NDT_CODDITTA, get_firm());
nditte.read();
if (nditte.bad()) nditte.zero();
codanagr = nditte.get(NDT_CODANAGR);
tipoa = nditte.get(NDT_TIPOA);
_ragsoc = nditte.get(NDT_RAGSOC);
anag.setkey(1);
anag.zero();
anag.put (ANA_TIPOA, tipoa);
anag.put (ANA_CODANAGR, codanagr);
anag.read();
if (anag.bad()) anag.zero();
_cofi = anag.get(ANA_COFI);
_paiva = anag.get(ANA_PAIV);
_comunefis = anag.get(ANA_COMRF);
if (_comunefis.empty())
_comunefis = anag.get(ANA_COMRES);
TRectype dep = cerca_com (_comunefis, _com);
_comunefis = dep.get(COM_DENCOM);
_provfis = dep.get(COM_PROVCOM);
_cap = dep.get(COM_CAPCOM);
if (_comunefis.empty())
{
_viafis = anag.get(ANA_INDRF);
_viafis.rtrim();
_viafis << " " << anag.get (ANA_CIVRF);
}
else
{
_viafis = anag.get(ANA_INDRES);
_viafis.rtrim();
_viafis << " " << anag.get (ANA_CIVRES);
}
}
int TStampa_riepilogo::stampa_intestazione_ditta()
{
int r = 1;
TString codice_ditta;
TString riga(132);
get_dati_ditta();
codice_ditta << get_firm();
set_header (r, "Ditta %s %s %s %s %s %s", (const char*)codice_ditta,
(const char*)_ragsoc, (const char*)_viafis,
(const char*)_cap, (const char*)_comunefis,
(const char*)_provfis);
r++;
printer().setdate(_data);
riga = "Data @< Pag. @#";
riga.right_just(127);
riga.overwrite (format ("Partita iva %s Codice fiscale %s", (const char*)_paiva, (const char*)_cofi));
set_header (r, "%s", (const char*) riga);
r++;
return r;
}
void TStampa_riepilogo::preprocess_header()
{
int r;
reset_header();
r = stampa_intestazione_ditta();
TString riga (132);
r++;
if (_scelta == 1) //stampa riepilogo conti
set_header(r,"*** MASTRO DI CONTO ***");
else set_header(r,"*** MASTRO DI GRUPPO ***");
set_header(r,"@33gCod. esercizio %d", _annoese);
if (_richiesta == 1)
set_header(r,"@70gPROGRESSIVI ATTUALI@114gSALDO ATTUALE");
else set_header(r,"@70gPROG. MOV. ELIMINATI@110gSALDO MOV. ELIMINATI");
r++;
r++;
if (_scelta == 1)
set_header(r,"SOTTOC DESCRIZIONE");
else set_header(r,"CONTO DESCRIZIONE");
set_header(r++,"@40gDATA ULT.MOV@68gDARE@87gAVERE@108gDARE@127gAVERE");
riga.fill('-');
set_header(r,"%s",(const char*)riga);
r++;
riga = "";
set_header(r,"%s",(const char*)riga);
}
int cg3500 (int argc, char* argv[])
{
TStampa_riepilogo a;
a.run(argc, argv, "Stampa riepilogo gruppi/conti");
return 0;
}