Patch level :4.0 740

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :piano adolfico in corso d'opera


git-svn-id: svn://10.65.10.50/trunk@15437 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2007-06-21 14:59:20 +00:00
parent 6fc87139eb
commit 3dda2dac63
10 changed files with 180 additions and 62 deletions

View File

@ -11,6 +11,8 @@
#define F_CONTO 112
#define F_SOTTOCONTO 113
#define F_DESCR 114
#define F_ANNOES 115
#define F_INDBIL 116
#define F_CODCDC_1 121
#define F_CODCDC_2 122

View File

@ -154,6 +154,30 @@ BEGIN
GROUP 1
END
NUMBER F_ANNOES 4
BEGIN
PROMPT 2 8 "Esercizio "
USE ESC
INPUT CODTAB F_ANNOES
DISPLAY "Codice Esercizio" CODTAB
DISPLAY "Data inizio esercizio" D0
DISPLAY "Data fine esercizio " D1
OUTPUT F_ANNOES CODTAB
FIELD ANNOES
CHECKTYPE NORMAL
END
LIST F_INDBIL 18
BEGIN
PROMPT 2 9 "Indicatore di bilancio "
ITEM "0|0. Non definito"
ITEM "1|1. Attivita'"
ITEM "2|2. Passivita'"
ITEM "3|3. Costi"
ITEM "4|4. Ricavi"
FIELD INDBIL
END
ENDPAGE
PAGE "Righe" -1 -1 78 22

View File

@ -130,7 +130,7 @@ protected:
virtual void main_loop();
void implode_rows(const TRecord_array& input_rows, TRecord_array& compact_rows) const;
bool explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows);
bool explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows, const int annoes);
bool ori_present(const TRectype& rec) const;
void copia_campo(const TRectype& src, const char* campo_src, TRectype& dst, const char* campo_dst) const;
@ -229,13 +229,13 @@ void TRib_movanal_app::implode_rows(const TRecord_array& input_rows, TRecord_arr
}
bool TRib_movanal_app::explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows)
bool TRib_movanal_app::explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows, const int annoes)
{
bool ho_cambiato_qualchecosa = false;
for (int r = 1; r <= input_rows.rows(); r++)
{
const TRectype& rec = input_rows.row(r);
const TRecord_array& rrip = _cache_rip.righe(rec.get(RMOVANA_CODCCOSTO), rec.get(RMOVANA_CODCMS));
const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(rec.get(RMOVANA_CODCCOSTO), rec.get(RMOVANA_CODCMS), annoes);
if (rrip.rows() > 0) //ci sono righe di ripartizione
{
@ -348,7 +348,7 @@ bool TRib_movanal_app::cappotta_movimento(TAnal_mov& anal_mov)
bool do_rewrite = false;
//Esploditore
if (explode_rows(compact_rows, output_rows))
if (explode_rows(compact_rows, output_rows, anal_mov.get_int(MOVANA_ANNOES)))
{
input_rows = output_rows; //rimette i record elaborati negli originali
do_rewrite = true;
@ -391,7 +391,7 @@ void TRib_movanal_app::main_loop()
darec.put(MOVANA_DATAREG, dal);
const TDate & al = mask.get_date(F_DATAFIN);
arec.put(MOVANA_DATAREG, al);
_cache_rip.set_esercizio(al);
_cache_rip.set_esercizio(mask.get_int(F_ANNO));
TCursor cur_movana(&rel_movana, "BLOCCATO!=\"X\"", 2, &darec, &arec);
const long items = cur_movana.items();

View File

@ -59,7 +59,6 @@ BEGIN
DISPLAY "Data fine esercizio " D1
OUTPUT F_ANNO CODTAB
CHECKTYPE NORMAL
CHECKTYPE NORMAL
FLAGS "RZ"
ADD NONE
END

View File

@ -84,6 +84,21 @@ bool TConversione_anal_msk::on_field_event(TOperable_field& o, TField_event e, l
}
return true;
}
//---------------------------------------------------------
// RIPARTITORE
//---------------------------------------------------------
class TAnal_rip : public TMultiple_rectype
{
public:
TAnal_rip();
};
TAnal_rip::TAnal_rip() : TMultiple_rectype(LF_RIP)
{
add_file(LF_RRIP, RRIP_NRIGA);
}
//----------------------------------------------------------
// APPLICAZIONE
//----------------------------------------------------------

View File

@ -1421,12 +1421,73 @@ TAnal_mov::TAnal_mov(const TRectype& rec) : TMultiple_rectype(LF_MOVANA)
}
///////////////////////////////////////////////////////////
// TAnal_rip
///////////////////////////////////////////////////////////
// TAnal_ripartizioni_batch
//////////////////////////////////////////////////////////
int TAnal_ripartizioni_batch::indbil() const
{
return head().get_int(RIP_INDBIL);
}
TAnal_rip::TAnal_rip() : TMultiple_rectype(LF_RIP)
int TAnal_ripartizioni_batch::read (const char* codice)
{
add_file(LF_RRIP, RRIP_NRIGA);
TLocalisamfile rip(LF_RIP);
_rip.put(RIP_TIPO, "B"); //solo tipi batch!
_rip.put(RIP_CODICE, codice);
int err = _rip.read(rip); //leggi il record dal file
if (err == NOERR)
{
TRectype rrip(LF_RRIP);
rrip.put(RRIP_TIPO, 'B');
rrip.put(RRIP_CODICE, codice);
TRecord_array::read(rrip);
}
return err;
}
int TAnal_ripartizioni_batch::read (const char* codcosto, const char* commessa, const int annoes)
{
TLocalisamfile rip(LF_RIP);
rip.setkey(4);
rip.put(RIP_TIPO, "B"); //solo tipi batch!
rip.put(RIP_CODCOSTO, codcosto);
rip.put(RIP_CODCMS, commessa);
rip.put(RIP_ANNOES, annoes);
int err = rip.read();
if (err != NOERR && annoes != 0)
{
rip.put(RIP_ANNOES, 0);
err = rip.read();
}
if (err == NOERR)
err = read(rip.get(RIP_CODICE));
return err;
}
int TAnal_ripartizioni_batch::read (const int gr, const int co, const long sot, const int annoes)
{
TLocalisamfile rip(LF_RIP);
rip.setkey(3);
rip.put(RIP_TIPO, "B"); //solo tipi batch!
rip.put(RIP_GRUPPO, gr);
rip.put(RIP_CONTO, co);
rip.put(RIP_SOTTOCONTO, sot);
rip.put(RIP_ANNOES, annoes);
int err = rip.read();
if (err != NOERR && annoes != 0)
{
rip.put(RIP_ANNOES, 0);
err = rip.read();
}
if (err == NOERR)
err = read(rip.get(RIP_CODICE));
return err;
}
TAnal_ripartizioni_batch::TAnal_ripartizioni_batch() : TRecord_array (LF_RRIP, RRIP_NRIGA), _rip(LF_RIP)
{
}
///////////////////////////////////////////////////////////
@ -1435,41 +1496,36 @@ TAnal_rip::TAnal_rip() : TMultiple_rectype(LF_RIP)
TObject* TCache_ripartizioni::key2obj(const char* key)
{
TToken_string parametro(key);
TLocalisamfile rip(LF_RIP);
const int nkey = parametro.get_int(0);
rip.setkey(nkey);
rip.put(RIP_TIPO, "B");
switch (nkey)
TAnal_ripartizioni_batch* rip = new TAnal_ripartizioni_batch;
if (nkey == 3)
{
case 3: //chiave 3 (tipo+gr/co/stc)
rip.put(RIP_GRUPPO, parametro.get(1));
rip.put(RIP_CONTO, parametro.get());
rip.put(RIP_SOTTOCONTO, parametro.get());
break;
case 4: //chiave 4 (tipo+codcosto+codcms)
rip.put(RIP_CODCOSTO, parametro.get(1));
rip.put(RIP_CODCMS, parametro.get());
break;
default:
break;
const int gruppo = parametro.get_int(1);
const int conto = parametro.get_int(2);
const long sottoconto = parametro.get_long(3);
const int anno = parametro.get_int(4);
rip->read(gruppo, conto, sottoconto, anno);
}
else //chiave 4
{
const TString codcosto = parametro.get(1);
const TString commessa = parametro.get(2);
const int anno = parametro.get_int(3);
rip->read(codcosto, commessa, anno);
}
TString80 chiave;
const bool found = (rip.read() == NOERR);
if (found)
chiave << "B|" << rip.get(RIP_CODICE);
TRecord_array* rows = new TRecord_array(chiave, LF_RRIP);
if (found && rip.get_int(RIP_TIPORIP) == 1)
if (rip->head().get_int(RIP_TIPORIP) == 1)
{
bool some_value = false;
const int items = rows->rows();
const int items = rip->rows();
for (int i = 1; i <= items; i++)
{
TRectype & rec = (*rows)[i];
TRectype & rec = (*rip)[i];
TAnal_bill bill;
bill.set_conto(rec.get(RRIP_CODCONTO));
@ -1488,40 +1544,49 @@ TObject* TCache_ripartizioni::key2obj(const char* key)
{
for (int i = 1; i <= items; i++)
{
TRectype& rec = (*rows)[i];
TRectype& rec = (*rip)[i];
rec.put(RRIP_RIPARTO, 1);
}
}
}
return (TObject*)rows;
return (TObject*)rip;
}
void TCache_ripartizioni::set_esercizio(const TDate & d)
void TCache_ripartizioni::set_esercizio(const int codes)
{
TEsercizi_contabili e;
const TEsercizio& esc = e.esercizio(d);
_dal = esc.inizio();
_al = esc.fine();
destroy();
if (codes != _codes)
{
TEsercizi_contabili e;
const TEsercizio& esc = e.esercizio(codes);
_codes = codes;
_dal = esc.inizio();
_al = esc.fine();
destroy();
}
}
const TRecord_array& TCache_ripartizioni::righe(const char* costo, const char* commessa)
const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const char* costo, const char* commessa, const int annoes)
{
TToken_string parametro;
parametro << "4|" << costo << '|' << commessa; //per chiave 4
return *(const TRecord_array*)objptr(parametro);
parametro << "4|" << costo << '|' << commessa << '|' << annoes; //per chiave 4
return *(const TAnal_ripartizioni_batch*)objptr(parametro);
}
const TRecord_array& TCache_ripartizioni::righe(const int gruppo, const int conto, const long sottoconto)
const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const int gruppo, const int conto, const long sottoconto, const int annoes)
{
TToken_string parametro;
parametro << "3|" << gruppo << '|' << conto << '|' << sottoconto; //per chiave 3
return *(const TRecord_array*)objptr(parametro);
parametro << "3|" << gruppo << '|' << conto << '|' << sottoconto << '|' << annoes; //per chiave 3
return *(const TAnal_ripartizioni_batch*)objptr(parametro);
}
const TRecord_array& TCache_ripartizioni::righe(const TBill& bill)
const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, const int annoes)
{
return righe(bill.gruppo(), bill.conto(), bill.sottoconto());
return righe(bill.gruppo(), bill.conto(), bill.sottoconto(), annoes);
}
TCache_ripartizioni::TCache_ripartizioni()
{
_codes = 0;
}

View File

@ -162,13 +162,19 @@ public:
};
///////////////////////////////////////////////////////////
// TAnal_rip
// TAnal_ripartizioni_batch (ahi!)
///////////////////////////////////////////////////////////
class TAnal_rip : public TMultiple_rectype
class TAnal_ripartizioni_batch : public TRecord_array
{
TRectype _rip;
public:
TAnal_rip();
const TRectype& head() const { return _rip; }
int indbil() const;
int read (const char* codice);
int read (const char* codcosto, const char* commessa, const int annoes);
int read (const int gr, const int co, const long sot, const int annoes);
TAnal_ripartizioni_batch();
};
///////////////////////////////////////////////////////////
@ -177,16 +183,19 @@ public:
class TCache_ripartizioni : public TCache
{
int _codes;
TDate _dal, _al;
protected:
virtual TObject* key2obj(const char* key);
public:
void set_esercizio(const TDate & d);
const TRecord_array& righe(const char* costo, const char* commessa);
const TRecord_array& righe(const int gruppo, const int conto, const long sottoconto);
const TRecord_array& righe(const TBill& bill);
void set_esercizio(const int codes);
const TAnal_ripartizioni_batch& righe(const char* costo, const char* commessa, const int annoes);
const TAnal_ripartizioni_batch& righe(const int gruppo, const int conto, const long sottoconto, const int annoes);
const TAnal_ripartizioni_batch& righe(const TBill& bill, const int annoes);
TCache_ripartizioni();
};
#endif

View File

@ -1,3 +1,3 @@
149
0
$rip|2|2|113|0|Archivio tabelle di ripartizione analitica|||
$rip|242|242|118|0|Archivio tabelle di ripartizione analitica|||

View File

@ -1,5 +1,5 @@
149
9
11
TIPO|1|1|0|Tipo Ripartizione (<I>nterattiva, <B>atch)
CODICE|1|8|0|Codice ripartizione
GRUPPO|2|3|0|Gruppo
@ -9,8 +9,10 @@ CODCOSTO|1|20|0|Codice centro di costo
CODCMS|1|20|0|Codice commessa
DESCRIZ|1|50|0|Descrizione
TIPORIP|1|1|0|Modalita' ripartizione (percentuale, quote, parti)
ANNOES|9|4|0|Codice esercizio
INDBIL|2|1|0|Indicatore bilancio conti di destinazione
4
TIPO+CODICE|
TIPO+DESCRIZ|X
TIPO+GRUPPO+CONTO+SOTTOCONTO|X
TIPO+CODCOSTO+CODCMS|X
TIPO+GRUPPO+CONTO+SOTTOCONTO+ANNOES|X
TIPO+CODCOSTO+CODCMS+ANNOES|X

View File

@ -10,5 +10,7 @@
#define RIP_CODCMS "CODCMS"
#define RIP_DESCRIZ "DESCRIZ"
#define RIP_TIPORIP "TIPORIP"
#define RIP_ANNOES "ANNOES"
#define RIP_INDBIL "INDBIL"
#endif