1994-12-28 11:00:21 +00:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// cglib02.cpp
|
|
|
|
//
|
|
|
|
// Aggiornamento saldi
|
|
|
|
//
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
1995-11-30 09:39:32 +00:00
|
|
|
#include <stdlib.h>
|
1996-09-04 07:50:26 +00:00
|
|
|
|
1995-12-04 11:04:35 +00:00
|
|
|
#include <prefix.h>
|
1995-11-17 10:27:24 +00:00
|
|
|
#include <saldi.h>
|
1996-09-04 07:50:26 +00:00
|
|
|
#include <utility.h>
|
|
|
|
|
1996-05-20 09:26:39 +00:00
|
|
|
#include "cglib.h"
|
|
|
|
|
|
|
|
class TContoExt : public TConto
|
|
|
|
{
|
|
|
|
bool _scaricato;
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
1996-05-30 13:48:03 +00:00
|
|
|
bool scaricato() const { return _scaricato; }
|
1996-05-20 09:26:39 +00:00
|
|
|
|
|
|
|
TContoExt(int g = 0, int c = 0, long s = 0L, char t = ' ', const char* d = NULL, bool sc = FALSE)
|
|
|
|
: TConto(g, c, s, t, d), _scaricato(sc) {}
|
|
|
|
TContoExt(TToken_string& tgcsd, int from, int mode = 0, bool sc = FALSE)
|
|
|
|
: TConto(tgcsd, from, mode), _scaricato(sc) {}
|
|
|
|
virtual ~TContoExt() {}
|
|
|
|
};
|
|
|
|
|
|
|
|
TConto* TTab_conti::add(const TBill& c, int anno, bool scar)
|
1994-12-28 11:00:21 +00:00
|
|
|
{
|
1995-03-10 09:29:07 +00:00
|
|
|
TString80 key;
|
|
|
|
key.format("%4d%3d%3d%6ld", anno, c.gruppo(), c.conto(), c.sottoconto());
|
1996-05-20 09:26:39 +00:00
|
|
|
if (scar) key << "X";
|
|
|
|
TContoExt* tc = new TContoExt(c.gruppo(), c.conto(), c.sottoconto(),
|
|
|
|
c.tipo(), NULL, scar);
|
1995-03-10 09:29:07 +00:00
|
|
|
TAssoc_array::add(key, tc);
|
|
|
|
return tc;
|
|
|
|
}
|
|
|
|
|
1996-05-20 09:26:39 +00:00
|
|
|
TConto* TTab_conti::find(const TBill& c, int anno, bool scar)
|
1995-03-10 09:29:07 +00:00
|
|
|
{
|
|
|
|
TString80 key;
|
|
|
|
key.format("%4d%3d%3d%6ld", anno, c.gruppo(), c.conto(), c.sottoconto());
|
1996-05-20 09:26:39 +00:00
|
|
|
if (scar) key << "X";
|
|
|
|
TContoExt* tc = (TContoExt*)objptr(key);
|
1995-03-10 09:29:07 +00:00
|
|
|
return tc;
|
|
|
|
}
|
|
|
|
|
1996-05-20 09:26:39 +00:00
|
|
|
void TTab_conti::remove(const TBill& c, int anno, bool scar)
|
1995-03-10 09:29:07 +00:00
|
|
|
{
|
|
|
|
TString80 key;
|
|
|
|
key.format("%4d%3d%3d%6ld", anno, c.gruppo(), c.conto(), c.sottoconto());
|
1996-05-20 09:26:39 +00:00
|
|
|
if (scar) key << "X";
|
1995-03-10 09:29:07 +00:00
|
|
|
TAssoc_array::remove(key);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TTab_conti::aggiorna_conto(const TBill& tcon,
|
1996-05-20 09:26:39 +00:00
|
|
|
int anno_es, const TImporto& importo, tiposal movap,
|
|
|
|
bool provv, bool somma, bool movimentato, bool scaricato)
|
1995-03-10 09:29:07 +00:00
|
|
|
{
|
1996-05-20 09:26:39 +00:00
|
|
|
TContoExt* tc = (TContoExt*)find(tcon, anno_es, scaricato);
|
1995-03-10 09:29:07 +00:00
|
|
|
if (tc == NULL)
|
1996-05-20 09:26:39 +00:00
|
|
|
tc = (TContoExt*)add(tcon, anno_es, scaricato);
|
1995-03-10 09:29:07 +00:00
|
|
|
|
1995-04-20 14:29:00 +00:00
|
|
|
const real i(somma ? importo.valore() : -importo.valore());
|
1994-12-28 11:00:21 +00:00
|
|
|
|
1996-09-04 07:50:26 +00:00
|
|
|
if (provv)
|
1996-05-20 09:26:39 +00:00
|
|
|
{
|
|
|
|
if (importo.sezione() == 'D')
|
1996-09-04 07:50:26 +00:00
|
|
|
tc->darepro() += i;
|
1996-05-20 09:26:39 +00:00
|
|
|
else
|
1996-09-04 07:50:26 +00:00
|
|
|
tc->averepro() += i;
|
1994-12-28 11:00:21 +00:00
|
|
|
}
|
|
|
|
else
|
1996-09-04 07:50:26 +00:00
|
|
|
{
|
|
|
|
if (movap == apertura)
|
1994-12-28 11:00:21 +00:00
|
|
|
{
|
1995-04-20 14:29:00 +00:00
|
|
|
if (importo.sezione() == 'D')
|
1996-09-04 07:50:26 +00:00
|
|
|
tc->saldo() += i;
|
1995-04-20 14:29:00 +00:00
|
|
|
else
|
1996-09-04 07:50:26 +00:00
|
|
|
tc->saldo() -= i;
|
|
|
|
}
|
|
|
|
else
|
1994-12-28 11:00:21 +00:00
|
|
|
{
|
1996-09-04 07:50:26 +00:00
|
|
|
if (movap == chiusura)
|
|
|
|
{
|
|
|
|
if (importo.sezione() == 'D')
|
|
|
|
tc->saldofin() += i;
|
|
|
|
else
|
|
|
|
tc->saldofin() -= i;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (importo.sezione() == 'D')
|
|
|
|
tc->dare() += i;
|
|
|
|
else
|
|
|
|
tc->avere() += i;
|
|
|
|
}
|
|
|
|
}
|
1996-05-20 09:26:39 +00:00
|
|
|
}
|
1996-09-04 07:50:26 +00:00
|
|
|
|
1994-12-28 11:00:21 +00:00
|
|
|
|
|
|
|
// rimuovo dalla tabella il conto se dare e avere vanno a zero
|
1995-11-30 09:39:32 +00:00
|
|
|
if (!movimentato)
|
|
|
|
if (tc->dare().is_zero() && tc->avere().is_zero() &&
|
1996-05-20 09:26:39 +00:00
|
|
|
tc->saldofin().is_zero() && tc->darepro().is_zero() &&
|
|
|
|
tc->averepro().is_zero() && tc->saldo().is_zero())
|
|
|
|
remove(*tc, anno_es, scaricato);
|
1994-12-28 11:00:21 +00:00
|
|
|
}
|
|
|
|
|
1996-11-29 14:58:01 +00:00
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
// TDecoder
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
TDecoder::TDecoder(int num, const char* inf, const char* outf)
|
|
|
|
: _file(new TLocalisamfile(num)), _if(inf), _of(outf)
|
|
|
|
{
|
|
|
|
init_firm();
|
|
|
|
}
|
|
|
|
|
|
|
|
TDecoder::TDecoder(const char* tab, const char* outf)
|
|
|
|
: _file(new TTable(tab)), _if("CODTAB"), _of(outf)
|
|
|
|
{
|
|
|
|
init_firm();
|
|
|
|
}
|
|
|
|
|
|
|
|
TDecoder::~TDecoder()
|
|
|
|
{
|
|
|
|
delete _file;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TDecoder::init_firm()
|
|
|
|
{
|
|
|
|
TDir dir;
|
|
|
|
dir.get(_file->num());
|
|
|
|
|
|
|
|
// Se e' un file comune metti a -1, altrimenti alla ditta corrente
|
|
|
|
_last_firm = dir.is_com() ? -1 : prefix().get_codditta();
|
|
|
|
}
|
|
|
|
|
|
|
|
const TString& TDecoder::decode(const char* code)
|
|
|
|
{
|
|
|
|
if (_last_firm >= 0) // Se e' un file di ditta ...
|
|
|
|
{ // ... controlla che non sia cambiata
|
|
|
|
const long cur_firm = prefix().get_codditta();
|
|
|
|
if (cur_firm != _last_firm)
|
|
|
|
{
|
|
|
|
_last_firm = cur_firm;
|
|
|
|
destroy();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (code == NULL)
|
|
|
|
code = "";
|
|
|
|
|
|
|
|
TObject* obj = objptr(code);
|
|
|
|
if (obj == NULL)
|
|
|
|
{
|
|
|
|
int err = ~NOERR;
|
|
|
|
if (*code)
|
|
|
|
{
|
|
|
|
_file->setkey(1);
|
|
|
|
_file->put(_if, code);
|
|
|
|
err = _file->read();
|
|
|
|
}
|
|
|
|
if (err == NOERR)
|
|
|
|
obj = new TString(_file->get(_of)); // Found
|
|
|
|
else
|
|
|
|
obj = new TString(1); // Not found
|
|
|
|
add(code, obj);
|
|
|
|
}
|
|
|
|
const TString& s = (const TString&)*obj;
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
|
|
|
|
const TString& TDecoder::decode(long code)
|
|
|
|
{
|
|
|
|
TString16 c;
|
|
|
|
if (code > 0)
|
|
|
|
c << code;
|
|
|
|
return decode(c);
|
|
|
|
}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
// TSaldo_agg
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
1996-05-20 09:26:39 +00:00
|
|
|
TSaldo_agg::TSaldo_agg() : _anno_es(0), _data_ulmov(""), _num_ulmov(0l),
|
|
|
|
_movap(normale), _provv(FALSE), _movimentato(FALSE)
|
|
|
|
{}
|
1994-12-28 11:00:21 +00:00
|
|
|
|
1996-05-20 09:26:39 +00:00
|
|
|
void TSaldo_agg::aggiorna(const TBill& tc, const TImporto& imp, bool somma, bool scaricato)
|
1995-04-20 14:29:00 +00:00
|
|
|
{
|
1996-05-20 09:26:39 +00:00
|
|
|
_tab_conti.aggiorna_conto(tc, _anno_es, imp, _movap, _provv, somma, _movimentato, scaricato);
|
1994-12-28 11:00:21 +00:00
|
|
|
}
|
|
|
|
|
1996-05-20 09:26:39 +00:00
|
|
|
void TSaldo_agg::aggiorna(int gruppo, int conto, long sottoconto, const real& importo, char sezione,
|
|
|
|
bool somma, bool scaricato)
|
1994-12-28 11:00:21 +00:00
|
|
|
{
|
1995-04-20 14:29:00 +00:00
|
|
|
const TImporto imp(sezione, importo);
|
1996-05-20 09:26:39 +00:00
|
|
|
_tab_conti.aggiorna_conto(TBill(gruppo, conto, sottoconto), _anno_es, imp, _movap,
|
|
|
|
_provv, somma, _movimentato, scaricato);
|
1994-12-28 11:00:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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.
|
|
|
|
//
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
1995-03-10 09:29:07 +00:00
|
|
|
|
1994-12-28 11:00:21 +00:00
|
|
|
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))
|
1996-05-30 13:48:03 +00:00
|
|
|
{
|
|
|
|
if (!saldi.get_bool(SLD_FLSCA))
|
|
|
|
{
|
1996-06-04 14:18:45 +00:00
|
|
|
saldi.remove();
|
1996-05-30 13:48:03 +00:00
|
|
|
}
|
|
|
|
else
|
1996-06-04 14:18:45 +00:00
|
|
|
{
|
|
|
|
saldi.put(SLD_FLSCA, "");
|
|
|
|
saldi.write();
|
|
|
|
saldi.put(SLD_FLSCA, "X");
|
1996-06-14 14:38:05 +00:00
|
|
|
saldi.read(_isequal,_unlock);
|
1996-06-04 14:18:45 +00:00
|
|
|
}
|
1994-12-28 11:00:21 +00:00
|
|
|
}
|
|
|
|
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:
|
1996-05-20 09:26:39 +00:00
|
|
|
// GLOP
|
1994-12-28 11:00:21 +00:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
1996-05-20 09:26:39 +00:00
|
|
|
|
1994-12-28 11:00:21 +00:00
|
|
|
void TSaldo_agg::registra()
|
|
|
|
{
|
1995-03-10 09:29:07 +00:00
|
|
|
real si, r;
|
|
|
|
char flag_salini;
|
1994-12-28 11:00:21 +00:00
|
|
|
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++)
|
|
|
|
{
|
1995-03-10 09:29:07 +00:00
|
|
|
THash_object* hobj = _tab_conti.get_hashobj();
|
1996-05-20 09:26:39 +00:00
|
|
|
TContoExt& tcon = (TContoExt&)hobj->obj();
|
1996-05-30 13:48:03 +00:00
|
|
|
CHECK(tcon.ok(), "Tentativo di saldare un conto incompleto");
|
1996-05-20 09:26:39 +00:00
|
|
|
|
1994-12-28 11:00:21 +00:00
|
|
|
saldi.zero();
|
1995-11-30 09:39:32 +00:00
|
|
|
saldi.put(SLD_ANNOES, atoi(hobj->key().left(4)) );
|
1994-12-28 11:00:21 +00:00
|
|
|
saldi.put(SLD_GRUPPO, tcon.gruppo());
|
|
|
|
saldi.put(SLD_CONTO, tcon.conto());
|
1996-05-20 09:26:39 +00:00
|
|
|
saldi.put(SLD_SOTTOCONTO, tcon.sottoconto());
|
1996-05-30 13:48:03 +00:00
|
|
|
saldi.put(SLD_FLSCA, tcon.scaricato());
|
1994-12-28 11:00:21 +00:00
|
|
|
|
|
|
|
bool update = TRUE;
|
1995-06-22 14:46:26 +00:00
|
|
|
|
1994-12-28 11:00:21 +00:00
|
|
|
if (saldi.read(_isequal, _lock) != NOERR)
|
|
|
|
{
|
|
|
|
saldi.zero();
|
1995-11-30 09:39:32 +00:00
|
|
|
saldi.put(SLD_ANNOES, atoi(hobj->key().left(4)));
|
1994-12-28 11:00:21 +00:00
|
|
|
saldi.put(SLD_GRUPPO, tcon.gruppo());
|
|
|
|
saldi.put(SLD_CONTO, tcon.conto());
|
|
|
|
saldi.put(SLD_SOTTOCONTO, tcon.sottoconto());
|
1996-05-30 13:48:03 +00:00
|
|
|
saldi.put(SLD_FLSCA, tcon.scaricato());
|
1996-05-20 09:26:39 +00:00
|
|
|
|
1995-03-10 09:29:07 +00:00
|
|
|
si = tcon.saldo();
|
|
|
|
if (si < ZERO)
|
|
|
|
{ flag_salini = 'A'; si = -si; }
|
1994-12-28 11:00:21 +00:00
|
|
|
else
|
1995-03-10 09:29:07 +00:00
|
|
|
flag_salini = 'D';
|
1994-12-28 11:00:21 +00:00
|
|
|
|
1995-03-10 09:29:07 +00:00
|
|
|
saldi.put(SLD_FLAGSALINI, flag_salini);
|
|
|
|
saldi.put(SLD_SALDO, si);
|
1994-12-28 11:00:21 +00:00
|
|
|
saldi.put(SLD_PDARE, tcon.dare());
|
1996-09-04 07:50:26 +00:00
|
|
|
saldi.put(SLD_PAVERE, tcon.avere());
|
|
|
|
saldi.put(SLD_PDAREPRO, tcon.darepro());
|
|
|
|
saldi.put(SLD_PAVEREPRO, tcon.averepro());
|
|
|
|
|
1996-05-20 09:26:39 +00:00
|
|
|
real sf = tcon.saldofin();
|
|
|
|
char flag_salfin = sf < ZERO ? 'A' : 'D';
|
|
|
|
if (flag_salfin == 'A') sf = -sf;
|
|
|
|
|
|
|
|
saldi.put(SLD_FLAGSALFIN, flag_salfin);
|
|
|
|
saldi.put(SLD_SALDOFIN, sf);
|
|
|
|
|
1994-12-28 11:00:21 +00:00
|
|
|
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);
|
|
|
|
|
1995-03-10 16:22:00 +00:00
|
|
|
if ((_num_ulmov != 0L) && (_num_ulmov > num_ulmov))
|
1994-12-28 11:00:21 +00:00
|
|
|
saldi.put(SLD_NUMULTMOV, _num_ulmov);
|
1995-03-10 16:22:00 +00:00
|
|
|
if ((_data_ulmov.ok()) && (_data_ulmov > data_ulmov))
|
|
|
|
saldi.put(SLD_DATAULMOV, _data_ulmov);
|
1994-12-28 11:00:21 +00:00
|
|
|
r = tcon.saldo();
|
1995-03-10 09:29:07 +00:00
|
|
|
si = saldi.get_real(SLD_SALDO);
|
|
|
|
flag_salini = saldi.get_char(SLD_FLAGSALINI);
|
1994-12-28 11:00:21 +00:00
|
|
|
if (r != ZERO)
|
|
|
|
{
|
1995-03-10 09:29:07 +00:00
|
|
|
if (flag_salini == 'A') si = r - si;
|
|
|
|
else si += r;
|
|
|
|
if (si < ZERO)
|
1994-12-28 11:00:21 +00:00
|
|
|
{
|
1995-03-10 09:29:07 +00:00
|
|
|
flag_salini = 'A'; si = -si;
|
1994-12-28 11:00:21 +00:00
|
|
|
}
|
|
|
|
else
|
1995-03-10 09:29:07 +00:00
|
|
|
flag_salini = 'D';
|
|
|
|
saldi.put(SLD_FLAGSALINI, flag_salini);
|
|
|
|
saldi.put(SLD_SALDO, si);
|
1996-06-25 12:54:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TImporto sf('D', tcon.saldofin());
|
1996-06-25 16:40:46 +00:00
|
|
|
char old_flag_sf = saldi.get(SLD_FLAGSALFIN)[0];
|
|
|
|
TImporto old_sf(old_flag_sf, saldi.get_real(SLD_SALDOFIN));
|
1996-06-25 12:54:16 +00:00
|
|
|
|
|
|
|
sf += old_sf;
|
|
|
|
sf.normalize();
|
|
|
|
saldi.put(SLD_FLAGSALFIN, sf.sezione());
|
|
|
|
saldi.put(SLD_SALDOFIN, sf.valore());
|
1996-06-14 14:38:05 +00:00
|
|
|
|
1994-12-28 11:00:21 +00:00
|
|
|
r = saldi.get_real(SLD_PDARE);
|
|
|
|
r += tcon.dare();
|
|
|
|
saldi.put(SLD_PDARE, r);
|
1996-09-04 07:50:26 +00:00
|
|
|
|
1994-12-28 11:00:21 +00:00
|
|
|
r = saldi.get_real(SLD_PAVERE);
|
|
|
|
r += tcon.avere();
|
|
|
|
saldi.put(SLD_PAVERE, r);
|
1995-06-22 14:46:26 +00:00
|
|
|
|
1996-09-04 07:50:26 +00:00
|
|
|
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);
|
|
|
|
|
1995-06-22 14:46:26 +00:00
|
|
|
const int err = saldi.rewrite();
|
|
|
|
if (err != NOERR)
|
|
|
|
yesnofatal_box("Errore %d nell'aggiornamento del saldo %d %d %ld",
|
|
|
|
err, tcon.gruppo(), tcon.conto(), tcon.sottoconto());
|
1994-12-28 11:00:21 +00:00
|
|
|
}
|
1995-03-10 09:29:07 +00:00
|
|
|
|
|
|
|
TImporto sf(flag_salini, si);
|
|
|
|
const TImporto dare('D', saldi.get_real(SLD_PDARE));
|
|
|
|
const TImporto avere('A', saldi.get_real(SLD_PAVERE));
|
|
|
|
sf += dare;
|
|
|
|
sf += avere;
|
1995-08-21 07:45:45 +00:00
|
|
|
sf.normalize(+1); // Rendi sempre positivo
|
1995-03-10 09:29:07 +00:00
|
|
|
tcon.saldo_finale() = sf;
|
1994-12-28 11:00:21 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
1995-11-17 10:27:24 +00:00
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
// Gestione Tabella esercizi
|
|
|
|
///////////////////////////////////////////////////////////
|
|
|
|
|
1996-11-27 11:51:03 +00:00
|
|
|
TArray TEsercizi_contabili::_esercizi;
|
|
|
|
long TEsercizi_contabili::_firm = 0;
|
|
|
|
|
1995-11-17 10:27:24 +00:00
|
|
|
TEsercizio::TEsercizio(const TRectype& rec)
|
|
|
|
{
|
1996-03-05 08:40:09 +00:00
|
|
|
_codice = rec.get_int("CODTAB");
|
|
|
|
_inizio = rec.get("D0");
|
|
|
|
_fine = rec.get("D1");
|
|
|
|
_scarico = rec.get("D2");
|
|
|
|
_chiusura = rec.get("D3");
|
1995-11-17 10:27:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int TEsercizio::compare(const TSortable& s) const
|
|
|
|
{
|
|
|
|
const TEsercizio& e = (const TEsercizio&)s;
|
1995-11-23 16:41:48 +00:00
|
|
|
int c = 0;
|
|
|
|
if (_inizio != e._inizio)
|
|
|
|
c = _inizio > e._inizio ? +1 : -1;
|
|
|
|
return c;
|
1995-11-17 10:27:24 +00:00
|
|
|
}
|
|
|
|
|
1996-11-27 11:51:03 +00:00
|
|
|
TEsercizi_contabili::TEsercizi_contabili()
|
|
|
|
{
|
|
|
|
}
|
1995-11-17 10:27:24 +00:00
|
|
|
|
|
|
|
void TEsercizi_contabili::update()
|
|
|
|
{
|
1995-12-04 11:04:35 +00:00
|
|
|
_firm = prefix().get_codditta();
|
1995-11-30 09:39:32 +00:00
|
|
|
|
1996-11-27 11:51:03 +00:00
|
|
|
_esercizi.destroy();
|
|
|
|
TTable tab_esc("ESC");
|
|
|
|
for (int err = tab_esc.first(); err == NOERR; err = tab_esc.next())
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
1996-11-27 11:51:03 +00:00
|
|
|
TEsercizio* e = new TEsercizio(tab_esc.curr());
|
|
|
|
_esercizi.add(e);
|
1995-11-17 10:27:24 +00:00
|
|
|
}
|
1996-11-27 11:51:03 +00:00
|
|
|
_esercizi.sort();
|
1995-11-17 10:27:24 +00:00
|
|
|
}
|
|
|
|
|
1996-11-27 11:51:03 +00:00
|
|
|
void TEsercizi_contabili::check()
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
1995-12-04 11:04:35 +00:00
|
|
|
if (_firm != prefix().get_codditta())
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
|
|
|
#ifdef DBG
|
|
|
|
if (_firm != 0)
|
1996-09-04 07:50:26 +00:00
|
|
|
error_box("Questo programma carinissimo usa gli esercizi,\n"
|
|
|
|
"purtroppo non tiene conto del cambio ditta!");
|
1995-11-17 10:27:24 +00:00
|
|
|
#endif
|
1996-11-27 11:51:03 +00:00
|
|
|
update();
|
1995-11-17 10:27:24 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1996-11-15 14:16:27 +00:00
|
|
|
int TEsercizi_contabili::date2index(const TDate& d) const
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
|
|
|
check();
|
|
|
|
for (int i = items()-1; i >= 0; i--)
|
|
|
|
{
|
|
|
|
const TEsercizio& e = esc(i);
|
|
|
|
if (d >= e.inizio() && d <= e.fine())
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
1996-11-15 14:16:27 +00:00
|
|
|
int TEsercizi_contabili::esc2index(int codice) const
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
|
|
|
check();
|
|
|
|
for (int i = items()-1; i >= 0; i--)
|
|
|
|
{
|
|
|
|
const TEsercizio& e = esc(i);
|
|
|
|
if (codice == e.codice())
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
1996-11-15 14:16:27 +00:00
|
|
|
int TEsercizi_contabili::date2esc(const TDate& d) const
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
|
|
|
const int i = date2index(d);
|
|
|
|
return i >= 0 ? esc(i).codice() : 0;
|
|
|
|
}
|
|
|
|
|
1996-11-15 14:16:27 +00:00
|
|
|
int TEsercizi_contabili::first() const
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
|
|
|
check();
|
|
|
|
return items() ? esc(0).codice() : 0;
|
|
|
|
}
|
|
|
|
|
1996-11-15 14:16:27 +00:00
|
|
|
int TEsercizi_contabili::last() const
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
|
|
|
check();
|
|
|
|
return items() ? esc(items()-1).codice() : 0;
|
|
|
|
}
|
|
|
|
|
1996-11-15 14:16:27 +00:00
|
|
|
int TEsercizi_contabili::pred(int codice) const
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
|
|
|
const int i = esc2index(codice);
|
|
|
|
return i > 0 ? esc(i-1).codice() : 0;
|
|
|
|
}
|
|
|
|
|
1996-11-15 14:16:27 +00:00
|
|
|
int TEsercizi_contabili::next(int anno) const
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
|
|
|
const int i = esc2index(anno);
|
|
|
|
return i < items()-1 ? esc(i+1).codice() : 0;
|
|
|
|
}
|
|
|
|
|
1996-11-15 14:16:27 +00:00
|
|
|
bool TEsercizi_contabili::exist(int codice) const
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
|
|
|
const int i = esc2index(codice);
|
|
|
|
return i >= 0;
|
|
|
|
}
|
|
|
|
|
1996-11-15 14:16:27 +00:00
|
|
|
const TEsercizio& TEsercizi_contabili::esercizio(int codice) const
|
1995-11-17 10:27:24 +00:00
|
|
|
{
|
|
|
|
const int i = esc2index(codice);
|
|
|
|
return esc(i);
|
|
|
|
}
|