4c24bfce1b
git-svn-id: svn://10.65.10.50/trunk@2851 c028cbd2-c16b-5b4b-a496-9718f37d4682
549 lines
15 KiB
C++
Executable File
549 lines
15 KiB
C++
Executable File
// cg5200.cpp - Visualizzazione saldi
|
|
|
|
#include <brwapp.h>
|
|
#include <msksheet.h>
|
|
#include <tabutil.h>
|
|
#include <utility.h>
|
|
#include <urldefid.h>
|
|
|
|
#include <saldi.h>
|
|
#include <clifo.h>
|
|
#include <pconti.h>
|
|
|
|
#include "cglib.h"
|
|
#include "cg5200.h"
|
|
|
|
class TRiga_array : public TArray
|
|
{
|
|
public:
|
|
bool add_riga(const TRectype& rec_saldi);
|
|
};
|
|
|
|
bool TRiga_array::add_riga(const TRectype& rec_saldi)
|
|
{
|
|
bool flsca, found = FALSE;
|
|
int annoes, annoesr;
|
|
char flag = ' ', flagr = ' ';
|
|
char flagfin = ' ', flagfinr = ' ';
|
|
TDate udata, udatar;
|
|
long unum, unumr;
|
|
real saldofin,pdare,pavere,saldoini,pdarepro,paverepro;
|
|
real saldofinr,pdarer,paverer,saldoinir,pdarepror,paverepror;
|
|
|
|
|
|
for (int i = 0; i < items(); i++)
|
|
{
|
|
TRectype& r = (TRectype&)(*this)[i];
|
|
annoes = r.get_int(SLD_ANNOES);
|
|
annoesr = rec_saldi.get_int(SLD_ANNOES);
|
|
|
|
// TBI occhio al flag
|
|
|
|
if ( annoes == annoesr )
|
|
{
|
|
// pdaresca = r.get_real(SLD_PDARESCA);
|
|
// paveresca = r.get_real(SLD_PAVERESCA);
|
|
flsca = r.get_bool(SLD_FLSCA);
|
|
flag = r.get_char(SLD_FLAGSALINI);
|
|
flagfin = r.get_char(SLD_FLAGSALFIN);
|
|
pdare = r.get_real(SLD_PDARE);
|
|
pavere = r.get_real(SLD_PAVERE);
|
|
saldoini = r.get_real(SLD_SALDO);
|
|
saldofin = r.get_real(SLD_SALDOFIN);
|
|
pdarepro = r.get_real(SLD_PDAREPRO);
|
|
paverepro = r.get_real(SLD_PAVEREPRO);
|
|
udata = r.get(SLD_DATAULMOV);
|
|
unum = r.get_long(SLD_NUMULTMOV);
|
|
// pdarescar = rec_saldi.get_real(SLD_PDARESCA);
|
|
// pdarescar += pdaresca;
|
|
// paverescar = rec_saldi.get_real(SLD_PAVERESCA);
|
|
// paverescar+= paveresca;
|
|
flagr = rec_saldi.get_char(SLD_FLAGSALINI);
|
|
flagfinr = rec_saldi.get_char(SLD_FLAGSALFIN);
|
|
pdarer = rec_saldi.get_real(SLD_PDARE);
|
|
pdarer += pdare;
|
|
paverer = rec_saldi.get_real(SLD_PAVERE);
|
|
paverer += pavere;
|
|
saldoinir = rec_saldi.get_real(SLD_SALDO);
|
|
saldofinr = rec_saldi.get_real(SLD_SALDOFIN);
|
|
udatar = rec_saldi.get(SLD_DATAULMOV);
|
|
unumr = rec_saldi.get_long(SLD_NUMULTMOV);
|
|
udatar = fnc_max(udatar,udata);
|
|
//unumr = (unum > unumr) ? unum : unumr;
|
|
if (udata > udatar)
|
|
unumr = unum;
|
|
if (flagr == flag)
|
|
saldoinir += saldoini;
|
|
else saldoinir -= saldoini;
|
|
if (saldoinir < ZERO) // saldoinir e' piu' piccolo di saldoini => vince il flag di saldoini
|
|
{
|
|
flagr = flag;
|
|
saldoinir = -saldoinir;
|
|
}
|
|
pdarepror = rec_saldi.get_real(SLD_PDAREPRO);
|
|
pdarepror += pdarepro;
|
|
paverepror = rec_saldi.get_real(SLD_PAVEREPRO);
|
|
paverepror += paverepro;
|
|
found = TRUE;
|
|
r.put(SLD_FLSCA, flsca ? "X" : " ");
|
|
r.put(SLD_ANNOES, annoes);
|
|
// r.put(SLD_PDARESCA, pdarescar);
|
|
// r.put(SLD_PAVERESCA,paverescar);
|
|
r.put(SLD_PDARE, pdarer);
|
|
r.put(SLD_PAVERE,paverer);
|
|
r.put(SLD_FLAGSALINI,flagr);
|
|
r.put(SLD_FLAGSALFIN,flagfinr);
|
|
r.put(SLD_SALDO, saldoinir);
|
|
r.put(SLD_SALDOFIN, saldofinr);
|
|
r.put(SLD_PDAREPRO, pdarepror);
|
|
r.put(SLD_PAVEREPRO,paverepro);
|
|
r.put(SLD_DATAULMOV, udatar);
|
|
r.put(SLD_NUMULTMOV, unumr);
|
|
}
|
|
}
|
|
if (!found)
|
|
{
|
|
TRectype* r = new TRectype(rec_saldi); // copia anche i valori di rec_saldi
|
|
add(r);
|
|
}
|
|
return found;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// Visualizzazione saldi
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TSaldibrowse_application : public TBrowse_application
|
|
{
|
|
|
|
TMask* _msk;
|
|
TLocalisamfile* _clifo;
|
|
TCursor * _cur;
|
|
TRelation * _rel,* _rel1;
|
|
TRiga_array _riga;
|
|
int _anno, _g, _c;
|
|
long _s;
|
|
bool _saldo_conto, _saldo_gruppo, _saldo_sottoc, _scarongly;
|
|
|
|
protected:
|
|
virtual bool user_create();
|
|
virtual bool user_destroy();
|
|
virtual TRelation* get_relation() const { return _rel; }
|
|
virtual TMask* get_mask(int mode) { return _msk; }
|
|
virtual bool changing_mask(int mode) {return FALSE; }
|
|
virtual int read(TMask& m);
|
|
virtual void init_query_mode(TMask&);
|
|
virtual void init_modify_mode(TMask&);
|
|
|
|
static bool sottoc_handler (TMask_field& f, KEY k);
|
|
static bool sheet_action(TSheet_field& s, int r, KEY k);
|
|
public:
|
|
void add_r(int,int,real&,char,real&,char,real&,real&, real&,real&,
|
|
TDate&,long,real&,real&,real&, real&, real&);
|
|
void compilasheet();
|
|
bool fai_filtro();
|
|
TSheet_field& ss() const { return (TSheet_field&)_msk->field(F_SHEET_SALDI);}
|
|
|
|
TSaldibrowse_application() {}
|
|
};
|
|
|
|
HIDDEN TSaldibrowse_application& app() { return (TSaldibrowse_application&) main_app(); }
|
|
|
|
bool TSaldibrowse_application::sheet_action(TSheet_field& s, int r, KEY k)
|
|
{
|
|
// non si possono cancellare o aggiungere righe
|
|
return (k != K_DEL && k != K_INS);
|
|
}
|
|
|
|
void TSaldibrowse_application::init_query_mode(TMask& m)
|
|
{
|
|
m.disable(DLG_FINDREC);
|
|
}
|
|
|
|
void TSaldibrowse_application::init_modify_mode(TMask& m)
|
|
{
|
|
m.disable(DLG_FINDREC);
|
|
}
|
|
|
|
bool TSaldibrowse_application::fai_filtro()
|
|
{
|
|
TSaldo sld;
|
|
int annop = 0;
|
|
char tipo;
|
|
|
|
_saldo_gruppo = _saldo_conto = _saldo_sottoc = FALSE;
|
|
TMask& m = curr_mask();
|
|
tipo = m.get(F_TIPOCF)[0];
|
|
_anno = m.get_int(F_ANNO);
|
|
_g = m.get_int(F_GRUPPO);
|
|
_c = m.get_int(F_CONTO);
|
|
|
|
if (tipo == '\0')
|
|
_s = m.get_long(F_SOTTOCONTO);
|
|
else if (tipo == 'C')
|
|
_s = m.get_long(F_SOTTOC_CLIENTE);
|
|
else _s = m.get_long(F_SOTTOC_FORN);
|
|
if (_c == 0)
|
|
_saldo_gruppo = TRUE;
|
|
else if (_s == 0l)
|
|
_saldo_conto = TRUE;
|
|
else _saldo_sottoc = TRUE;
|
|
|
|
TLocalisamfile& saldi = _rel1->lfile();
|
|
TRectype from (saldi.curr());
|
|
TRectype to (saldi.curr());
|
|
from.zero();
|
|
to.zero();
|
|
|
|
if (_anno != 0)
|
|
annop = EsePre(_anno);
|
|
|
|
if (annop != 0)
|
|
from.put(SLD_ANNOES,annop);
|
|
else if (_anno != 0)
|
|
from.put(SLD_ANNOES,_anno);
|
|
else from.put(SLD_ANNOES,0);
|
|
|
|
from.put(SLD_GRUPPO,_g);
|
|
if (_c != 0)
|
|
from.put(SLD_CONTO, _c);
|
|
if (_s != 0l)
|
|
from.put(SLD_SOTTOCONTO, _s);
|
|
|
|
if (_anno != 0)
|
|
to.put(SLD_ANNOES,_anno);
|
|
else to.put(SLD_ANNOES, 9999);
|
|
to.put(SLD_GRUPPO,_g);
|
|
if (_c != 0)
|
|
to.put(SLD_CONTO,_c);
|
|
if (_s != 0l)
|
|
to.put(SLD_SOTTOCONTO,_s);
|
|
|
|
_scarongly = m.get_bool(F_SCARICATO);
|
|
|
|
if ( _saldo_gruppo || _saldo_conto )
|
|
_cur->setkey(1);
|
|
|
|
if (_saldo_sottoc)
|
|
_cur->setkey(2);
|
|
|
|
_cur->setregion(from,to);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool TSaldibrowse_application::sottoc_handler(TMask_field& f, KEY key)
|
|
{
|
|
bool ok = TRUE;
|
|
|
|
if (key == K_TAB)
|
|
{
|
|
bool stop = FALSE;
|
|
|
|
TMask& m = f.mask();
|
|
int gruppo = m.get_int(F_GRUPPO);
|
|
int conto = m.get_int(F_CONTO);
|
|
const long sottoconto = atol(f.get());
|
|
|
|
const short id = f.dlg();
|
|
TLocalisamfile& pconti = app().get_relation()->lfile();
|
|
|
|
if (sottoconto != 0)
|
|
{
|
|
if (id == F_SOTTOCONTO)
|
|
{
|
|
if (gruppo != 0 && conto != 0)
|
|
{
|
|
pconti.setkey(1);
|
|
pconti.put(PCN_GRUPPO, gruppo) ;
|
|
pconti.put(PCN_CONTO, conto);
|
|
pconti.put(PCN_SOTTOCONTO, sottoconto);
|
|
ok = stop = pconti.read() == NOERR;
|
|
}
|
|
else ok = FALSE;
|
|
}
|
|
else
|
|
{
|
|
const char tipo = id == F_SOTTOC_CLIENTE ? 'C' : 'F';
|
|
TLocalisamfile clifo (LF_CLIFO);
|
|
clifo.setkey(1);
|
|
clifo.put(CLI_TIPOCF,tipo);
|
|
clifo.put(CLI_CODCF, sottoconto) ;
|
|
ok = stop = clifo.read() == NOERR;
|
|
if (ok && (gruppo == 0 || conto == 0))
|
|
{
|
|
m.set(F_GRUPPO, gruppo = clifo.get_int("GRUPPO"));
|
|
m.set(F_CONTO, conto = clifo.get_int("CONTO"));
|
|
ok = stop = gruppo != 0 && conto != 0;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
if (gruppo != 0 /* && conto != 0 */)
|
|
{
|
|
pconti.setkey(1);
|
|
pconti.zero();
|
|
pconti.put(PCN_GRUPPO, gruppo) ;
|
|
pconti.put(PCN_CONTO, conto);
|
|
ok = stop = pconti.read() == NOERR;
|
|
if (ok)
|
|
m.set(F_DESCR_CONTO, pconti.get(PCN_DESCR));
|
|
else
|
|
m.reset(F_DESCR_CONTO);
|
|
}
|
|
if (stop)
|
|
{
|
|
f.set_focusdirty(FALSE);
|
|
m.stop_run(K_AUTO_ENTER);
|
|
}
|
|
if (!ok) error_box("Conto errato o incompleto");
|
|
}
|
|
|
|
return ok;
|
|
}
|
|
|
|
bool TSaldibrowse_application::user_create()
|
|
{
|
|
_clifo = new TLocalisamfile(LF_CLIFO);
|
|
_rel = new TRelation(LF_PCON);
|
|
_rel1 = new TRelation(LF_SALDI);
|
|
_cur = new TCursor(_rel1, "", 2);
|
|
|
|
_msk = new TMask("cg5200a");
|
|
_msk->set_handler(F_SOTTOCONTO, sottoc_handler);
|
|
_msk->set_handler(F_SOTTOC_CLIENTE, sottoc_handler);
|
|
_msk->set_handler(F_SOTTOC_FORN, sottoc_handler);
|
|
ss().disable();
|
|
ss().set_notify(sheet_action);
|
|
|
|
set_search_field(F_GRUPPO);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool TSaldibrowse_application::user_destroy()
|
|
{
|
|
delete _msk;
|
|
delete _clifo;
|
|
delete _rel;
|
|
delete _rel1;
|
|
delete _cur;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
int TSaldibrowse_application::read(TMask& m)
|
|
{
|
|
m.autoload(*_rel);
|
|
fai_filtro();
|
|
compilasheet();
|
|
ss().force_update();
|
|
|
|
return NOERR;
|
|
}
|
|
|
|
void TSaldibrowse_application::add_r(int numrig,int a,real& slf,char sff,real& sc,char f,real& si,
|
|
real& pd, real& pa,real& s,TDate& d,long n,real& pdp,
|
|
real& pap,real& sp, real& dsc, real& asc)
|
|
{
|
|
TSheet_field& cs = ss();
|
|
char segno = ' ';
|
|
|
|
TToken_string& riga = cs.row(numrig);
|
|
riga.add(a, 0);
|
|
riga.add(si.string(),1);
|
|
if (si != ZERO)
|
|
riga.add(f,2);
|
|
riga.add(pd.string(),3);
|
|
riga.add(pa.string(),4);
|
|
if (s > ZERO)
|
|
segno = 'D';
|
|
else if (s < ZERO)
|
|
{
|
|
s = -s;
|
|
segno = 'A';
|
|
}
|
|
riga.add(s.string(),5);
|
|
riga.add(segno,6);
|
|
segno = ' ';
|
|
if (sc > ZERO)
|
|
segno = 'D';
|
|
else if (sc < ZERO)
|
|
{
|
|
sc = -sc;
|
|
segno = 'A';
|
|
}
|
|
riga.add(slf.string(),7);
|
|
riga.add(sff,8);
|
|
riga.add(sc.string(),9);
|
|
riga.add(segno,10);
|
|
riga.add(d.string(),11);
|
|
riga.add(n,12);
|
|
riga.add(pdp.string(),13);
|
|
riga.add(pap.string(),14);
|
|
segno = ' ';
|
|
if (sp > ZERO)
|
|
segno = 'D';
|
|
else if (sp < ZERO)
|
|
{
|
|
sp = -sp;
|
|
segno = 'A';
|
|
}
|
|
riga.add(sp.string(),15);
|
|
riga.add(segno,16);
|
|
riga.add(dsc.string(),17);
|
|
riga.add(asc.string(),18);
|
|
}
|
|
|
|
void TSaldibrowse_application::compilasheet()
|
|
{
|
|
char flagsal = ' ';
|
|
char flagfin = ' ';
|
|
real saldo = ZERO;
|
|
// real saldosca = ZERO;
|
|
real saldopro = ZERO;
|
|
// real saldo_gc = ZERO;
|
|
// real saldoini_gc = ZERO; ??? a che servono????
|
|
// real saldosca_gc = ZERO;
|
|
// real saldopro_gc = ZERO;
|
|
real saldoini = ZERO;
|
|
real pdare = ZERO;
|
|
real pavere = ZERO;
|
|
real pdaresca = ZERO;
|
|
real paveresca = ZERO;
|
|
real saldofin = ZERO;
|
|
real pdarepro = ZERO;
|
|
real paverepro = ZERO;
|
|
int gruppo, conto, anno;
|
|
long sottoconto;
|
|
long ultimo_num = 0l;
|
|
TDate ultima_data;
|
|
|
|
// nuova struttura archivio saldi
|
|
|
|
ss().reset();
|
|
_riga.destroy();
|
|
|
|
TRecnotype items = _cur->items();
|
|
*_cur = 0l;
|
|
|
|
for (int i = 0; i < items; i++,++(*_cur))
|
|
{
|
|
if (_scarongly &&! _cur->curr().get_bool(SLD_FLSCA))
|
|
continue;
|
|
|
|
anno = _cur->curr().get_int(SLD_ANNOES);
|
|
gruppo = _cur->curr().get_int(SLD_GRUPPO);
|
|
conto = _cur->curr().get_int(SLD_CONTO);
|
|
sottoconto = _cur->curr().get_long(SLD_SOTTOCONTO);
|
|
|
|
if (gruppo != _g) continue;
|
|
|
|
if (_saldo_conto && conto != _c) continue;
|
|
|
|
if (_saldo_conto || _saldo_gruppo)
|
|
_riga.add_riga(_cur->curr());
|
|
|
|
if (_saldo_sottoc)
|
|
{
|
|
flagsal = _cur->curr().get_char(SLD_FLAGSALINI);
|
|
flagfin = _cur->curr().get_char(SLD_FLAGSALFIN);
|
|
saldoini = _cur->curr().get_real(SLD_SALDO);
|
|
saldofin = _cur->curr().get_real(SLD_SALDOFIN);
|
|
pdare = _cur->curr().get_real(SLD_PDARE);
|
|
pavere = _cur->curr().get_real(SLD_PAVERE);
|
|
pdarepro = _cur->curr().get_real(SLD_PDAREPRO);
|
|
paverepro = _cur->curr().get_real(SLD_PAVEREPRO);
|
|
ultima_data = _cur->curr().get(SLD_DATAULMOV);
|
|
ultimo_num = _cur->curr().get_long(SLD_NUMULTMOV);
|
|
|
|
pdaresca = ZERO;
|
|
paveresca = ZERO;
|
|
|
|
// look for scariche'
|
|
if (i < items - 1 && !_scarongly)
|
|
{
|
|
++(*_cur);
|
|
if (_cur->curr().get_bool(SLD_FLSCA) &&
|
|
sottoconto == _cur->curr().get_long(SLD_SOTTOCONTO) &&
|
|
conto == _cur->curr().get_int(SLD_CONTO) &&
|
|
gruppo == _cur->curr().get_int(SLD_GRUPPO) &&
|
|
anno == _cur->curr().get_int(SLD_ANNOES))
|
|
{
|
|
pdaresca = _cur->curr().get_real(SLD_PDARE);
|
|
paveresca = _cur->curr().get_real(SLD_PAVERE);
|
|
}
|
|
else --(*_cur);
|
|
}
|
|
|
|
if (flagsal == 'D')
|
|
saldo = pdare + saldoini - pavere;
|
|
else
|
|
saldo = pdare - saldoini - pavere;
|
|
// saldosca = saldo + pdaresca - paveresca; //in realta' non e' proprio il saldo degli scaricati ma quello complessivo
|
|
// .... ma tanto nessuno lo usa....
|
|
saldopro = pdarepro - paverepro;
|
|
|
|
add_r(i,anno,saldofin,flagfin,saldo,flagsal,saldoini,pdare,pavere,saldo,
|
|
ultima_data,ultimo_num,pdarepro,paverepro,saldopro,pdaresca, paveresca);
|
|
}
|
|
}
|
|
if (_saldo_gruppo || _saldo_conto)
|
|
{
|
|
for (int j = 0; j < _riga.items(); j++)
|
|
{
|
|
TRectype& riga = (TRectype&)_riga[j];
|
|
anno = riga.get_int(SLD_ANNOES);
|
|
flagsal = riga.get_char(SLD_FLAGSALINI);
|
|
flagfin = riga.get_char(SLD_FLAGSALFIN);
|
|
saldoini = riga.get_real(SLD_SALDO);
|
|
saldofin = riga.get_real(SLD_SALDOFIN);
|
|
pdare = riga.get_real(SLD_PDARE);
|
|
pavere = riga.get_real(SLD_PAVERE);
|
|
saldo = pdare - pavere + saldoini;
|
|
pdarepro = riga.get_real(SLD_PDAREPRO);
|
|
paverepro = riga.get_real(SLD_PAVEREPRO);
|
|
saldopro = pdarepro - paverepro;
|
|
ultima_data = riga.get(SLD_DATAULMOV);
|
|
ultimo_num = riga.get_long(SLD_NUMULTMOV);
|
|
|
|
pdaresca = ZERO;
|
|
paveresca = ZERO;
|
|
|
|
if (!_scarongly && (j < _riga.items() - 1))
|
|
{
|
|
TRectype& riga = (TRectype&)_riga[++j];
|
|
if (riga.get_bool(SLD_FLSCA) &&
|
|
sottoconto == riga.get_long(SLD_SOTTOCONTO) &&
|
|
conto == riga.get_int(SLD_CONTO) &&
|
|
gruppo == riga.get_int(SLD_GRUPPO) &&
|
|
anno == riga.get_int(SLD_ANNOES))
|
|
{
|
|
pdaresca = riga.get_real(SLD_PDARE);
|
|
paveresca = riga.get_real(SLD_PAVERE);
|
|
}
|
|
else --j;
|
|
}
|
|
|
|
// a che serve ?????
|
|
// saldosca = saldo + pdaresca - paveresca;
|
|
|
|
// come sopra
|
|
add_r(j,anno,saldofin,flagfin,saldo,flagsal,saldoini,pdare,pavere,saldo,ultima_data,
|
|
ultimo_num,pdarepro,paverepro,saldopro, pdaresca, paveresca);
|
|
}
|
|
_riga.destroy();
|
|
}
|
|
}
|
|
|
|
int cg5200(int argc, char* argv[])
|
|
{
|
|
TSaldibrowse_application a;
|
|
a.run(argc, argv, "Visualizzazione saldi");
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|