diff --git a/ca/ca0800a.h b/ca/ca0800a.h index 7ba6896e8..914d64b53 100755 --- a/ca/ca0800a.h +++ b/ca/ca0800a.h @@ -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 diff --git a/ca/ca0800a.uml b/ca/ca0800a.uml index 586e44d8d..7adbf82e4 100755 --- a/ca/ca0800a.uml +++ b/ca/ca0800a.uml @@ -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 diff --git a/ca/ca2200.cpp b/ca/ca2200.cpp index db3ffd9a6..3cf33280e 100755 --- a/ca/ca2200.cpp +++ b/ca/ca2200.cpp @@ -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(); diff --git a/ca/ca3700.uml b/ca/ca3700.uml index ffb322cf3..d8f3cf495 100755 --- a/ca/ca3700.uml +++ b/ca/ca3700.uml @@ -59,7 +59,6 @@ BEGIN DISPLAY "Data fine esercizio " D1 OUTPUT F_ANNO CODTAB CHECKTYPE NORMAL - CHECKTYPE NORMAL FLAGS "RZ" ADD NONE END diff --git a/ca/cacnv.cpp b/ca/cacnv.cpp index 125e5c077..4b2a5158d 100755 --- a/ca/cacnv.cpp +++ b/ca/cacnv.cpp @@ -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 //---------------------------------------------------------- diff --git a/ca/calib01.cpp b/ca/calib01.cpp index e32dca4a4..b62403307 100755 --- a/ca/calib01.cpp +++ b/ca/calib01.cpp @@ -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; +} \ No newline at end of file diff --git a/ca/calib01.h b/ca/calib01.h index 528a58969..42e3db51c 100755 --- a/ca/calib01.h +++ b/ca/calib01.h @@ -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 diff --git a/ca/f149.dir b/ca/f149.dir index c1fab620f..8b2f05169 100755 --- a/ca/f149.dir +++ b/ca/f149.dir @@ -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||| diff --git a/ca/f149.trr b/ca/f149.trr index 6f47d1805..6b6c89701 100755 --- a/ca/f149.trr +++ b/ca/f149.trr @@ -1,5 +1,5 @@ 149 -9 +11 TIPO|1|1|0|Tipo Ripartizione (nterattiva, 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 diff --git a/ca/rip.h b/ca/rip.h index f8398742a..4e2315e17 100755 --- a/ca/rip.h +++ b/ca/rip.h @@ -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