diff --git a/ca/ca0800.cpp b/ca/ca0800.cpp index 1d0f8b0b3..16032762c 100755 --- a/ca/ca0800.cpp +++ b/ca/ca0800.cpp @@ -233,7 +233,7 @@ TRiparti_msk::TRiparti_msk() : TAutomask("ca0800a") // Crea gli eventuali campi per commessa e centro di costo - int y = 10; + int y = 11; for (int i = 0; i < 2; i++) { const char* prompt = NULL; diff --git a/ca/ca0800a.h b/ca/ca0800a.h index 40464d0d2..3266cc3b6 100755 --- a/ca/ca0800a.h +++ b/ca/ca0800a.h @@ -13,6 +13,7 @@ #define F_DESCR 114 #define F_ANNOES 115 #define F_INDBIL 116 +#define F_CLASSEMOV 117 #define F_CODCDC_1 121 #define F_CODCDC_2 122 diff --git a/ca/ca0800a.uml b/ca/ca0800a.uml index c5af340b8..163812bc7 100755 --- a/ca/ca0800a.uml +++ b/ca/ca0800a.uml @@ -1,12 +1,10 @@ #include "ca0800a.h" -TOOLBAR "topbar" 0 0 0 2 - -#include - +TOOLBAR "" 0 -2 0 2 +#include ENDPAGE -PAGE "Ripartizioni" 0 0 0 2 +PAGE "Ripartizioni" -1 -1 64 6 GROUPBOX DLG_NULL 78 4 BEGIN @@ -181,6 +179,16 @@ BEGIN FIELD INDBIL END +LIST F_CLASSEMOV 25 +BEGIN + PROMPT 2 9 "Classe movimento " + ITEM "0|Tutti" + ITEM "1|Normali e Temporanei" + ITEM "2|Preventivi e Variazioni" + FIELD CLASSEMOV + GROUP 2 +END + ENDPAGE PAGE "Righe" -1 -1 78 22 diff --git a/ca/ca2200.cpp b/ca/ca2200.cpp index 51792d50d..fa18b0c13 100755 --- a/ca/ca2200.cpp +++ b/ca/ca2200.cpp @@ -129,7 +129,8 @@ class TRib_movanal_app : public TSkeleton_application protected: virtual void main_loop(); - bool explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows, const int annoes); + bool explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows, const int annoes, + const char tipomov); bool pareggia_commessa(TAnal_mov& anal_mov); public: @@ -137,7 +138,8 @@ public: TRib_movanal_app(){} }; -bool TRib_movanal_app::explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows, const int annoes) +bool TRib_movanal_app::explode_rows(const TRecord_array& input_rows, TRecord_array& output_rows, + const int annoes, const char tipomov) { bool ho_cambiato_qualchecosa = false; for (int r = 1; r <= input_rows.rows(); r++) @@ -146,7 +148,7 @@ bool TRib_movanal_app::explode_rows(const TRecord_array& input_rows, TRecord_arr TAnal_bill zio(rec); const int rmovana_indbil = zio.indicatore_bilancio(); const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(rec.get(RMOVANA_CODCCOSTO), - rec.get(RMOVANA_CODCMS), annoes, rmovana_indbil); + rec.get(RMOVANA_CODCMS), annoes, rmovana_indbil, tipomov); //ci sono righe di ripartizione const int righe_ripartizione = rrip.rows(); bool ripartisci = righe_ripartizione > 0; @@ -262,7 +264,7 @@ bool TRib_movanal_app::cappotta_movimento(TAnal_mov& anal_mov) bool do_rewrite = false; //Esploditore - if (explode_rows(compact_rows, output_rows, anal_mov.get_int(MOVANA_ANNOES))) + if (explode_rows(compact_rows, output_rows, anal_mov.get_int(MOVANA_ANNOES), anal_mov.get_char(MOVANA_TIPOMOV))) { input_rows = output_rows; //rimette i record elaborati negli originali do_rewrite = true; @@ -334,7 +336,7 @@ void TRib_movanal_app::main_loop() } } - cur_movana.scan(cappotta_callback, this, TR("Ribaltamento movimenti...")); + cur_movana.scan(cappotta_callback, this, TR("Ripartizione movimenti...")); } } else @@ -345,6 +347,6 @@ void TRib_movanal_app::main_loop() int ca2200(int argc, char* argv[]) { TRib_movanal_app app; - app.run(argc, argv, TR("Ribaltamento movimenti di analitica")); + app.run(argc, argv, TR("Ripartizione movimenti di analitica")); return 0; } diff --git a/ca/ca2200a.uml b/ca/ca2200a.uml index ca1f8635b..af5b22f44 100755 --- a/ca/ca2200a.uml +++ b/ca/ca2200a.uml @@ -1,7 +1,13 @@ #include "ca2200a.h" #include "camask.h" -TOOLBAR "topbar" 0 0 0 2 +TOOLBAR "" 0 -3 0 3 + +STRING DLG_PROFILE 50 +BEGIN + PROMPT 9 0 "Profilo " + PSELECT +END BUTTON DLG_OK 10 2 BEGIN @@ -23,17 +29,7 @@ END ENDPAGE -TOOLBAR "" 0 -2 0 2 - -STRING DLG_PROFILE 50 -BEGIN - PROMPT 9 -11 "Profilo " - PSELECT -END - -ENDPAGE - -PAGE "Ribaltamento movimenti" 0 0 0 2 +PAGE "Ripartizione movimenti" 0 0 64 12 GROUPBOX DLG_NULL 78 4 BEGIN diff --git a/ca/cacnv.cpp b/ca/cacnv.cpp index ddd942d5f..9b77e2cf1 100755 --- a/ca/cacnv.cpp +++ b/ca/cacnv.cpp @@ -470,7 +470,8 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss //..alla ripartizione delle righe del movimento //Per prima cosa crea l'array delle righe di ripartizione con questo gr/co/stc/annoes const int annoes = mov_head.get_int(MOV_ANNOES); - const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(zio, annoes); + + const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(zio, annoes, ' '); const int righe_ripartizione = rrip.rows(); const bool ripartisci = righe_ripartizione > 0; diff --git a/ca/calib01.cpp b/ca/calib01.cpp index d61df5119..3dd824df5 100755 --- a/ca/calib01.cpp +++ b/ca/calib01.cpp @@ -1482,48 +1482,49 @@ int TAnal_ripartizioni_batch::read (const char* codice) return err; } -int TAnal_ripartizioni_batch::read (const char* codcosto, const char* commessa, - const int annoes, const int indbil) +int TAnal_ripartizioni_batch::read_rip_4(TLocalisamfile& rip, const char* codcosto, const char* commessa, + const int annoes, const int indbil, const int classe_mov) const { - 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); rip.put(RIP_INDBIL, indbil); - int err = rip.read(); + rip.put(RIP_CLASSEMOV, classe_mov); + return rip.read(); +} + +int TAnal_ripartizioni_batch::read (const char* codcosto, const char* commessa, + const int annoes, const int indbil, const int classe_mov) +{ + CHECKD(classe_mov > 0, "Classe movimento non valida ", classe_mov); + TLocalisamfile rip(LF_RIP); + rip.setkey(4); + + int err = read_rip_4(rip, codcosto, commessa, annoes, indbil, classe_mov); + if (err != NOERR) + err = read_rip_4(rip, codcosto, commessa, annoes, indbil, 0); //la put va rifatta la put perche' potrebbe essersi spostato al record successivo!!! //se fallisce il primo tentativo prova con lo stesso anno e indbil=0 if (err != NOERR && indbil != 0) { - rip.put(RIP_TIPO, "B"); - rip.put(RIP_CODCOSTO, codcosto); - rip.put(RIP_CODCMS, commessa); - rip.put(RIP_ANNOES, annoes); - rip.put(RIP_INDBIL, 0); - err = rip.read(); + err = read_rip_4(rip, codcosto, commessa, annoes, 0, classe_mov); + if (err != NOERR) + err = read_rip_4(rip, codcosto, commessa, annoes, 0, 0); } //se fallisce ancora riprova con anno=0 e lo stesso indbil if (err != NOERR && annoes != 0) { - rip.put(RIP_TIPO, "B"); - rip.put(RIP_CODCOSTO, codcosto); - rip.put(RIP_CODCMS, commessa); - rip.put(RIP_ANNOES, 0); - rip.put(RIP_INDBIL, indbil); - err = rip.read(); + err = read_rip_4(rip, codcosto, commessa, 0, indbil, classe_mov); + if (err != NOERR) + err = read_rip_4(rip, codcosto, commessa, 0, indbil, 0); //estremo tentativo con annoes e indbil = 0 if (err != NOERR && indbil != 0) { - rip.put(RIP_TIPO, "B"); - rip.put(RIP_CODCOSTO, codcosto); - rip.put(RIP_CODCMS, commessa); - rip.put(RIP_ANNOES, 0); - rip.put(RIP_INDBIL, 0); - err = rip.read(); + err = read_rip_4(rip, codcosto, commessa, 0, 0, classe_mov); + if (err != NOERR) + err = read_rip_4(rip, codcosto, commessa, 0, 0, 0); } } @@ -1532,52 +1533,51 @@ int TAnal_ripartizioni_batch::read (const char* codcosto, const char* commessa, return err; } -int TAnal_ripartizioni_batch::read (const int gr, const int co, const long sot, - const int annoes, const int indbil) +int TAnal_ripartizioni_batch::read_rip_3(TLocalisamfile& rip, const int gr, const int co, const long sot, + const int annoes, const int indbil, const int classe_mov) const { - 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); rip.put(RIP_INDBIL, indbil); - int err = rip.read(); - //la put va rifatta la put perche' potrebbe essersi spostato al record successivo!!! + rip.put(RIP_CLASSEMOV, classe_mov); + return rip.read(); +} + +int TAnal_ripartizioni_batch::read (const int gr, const int co, const long sot, + const int annoes, const int indbil, const int classe_mov) +{ + CHECKD(classe_mov > 0, "Classe movimento non valida ", classe_mov); + TLocalisamfile rip(LF_RIP); + rip.setkey(3); + + int err = read_rip_3(rip, gr, co, sot, annoes, indbil, classe_mov); + if (err != NOERR) + err = read_rip_3(rip, gr, co, sot, annoes, indbil, 0); + + //la put va rifatta perche' potrebbe essersi spostato al record successivo!!! //se fallisce il primo tentativo prova con lo stesso anno e indbil=0 if (err != NOERR && indbil != 0) { - rip.put(RIP_TIPO, "B"); - rip.put(RIP_GRUPPO, gr); - rip.put(RIP_CONTO, co); - rip.put(RIP_SOTTOCONTO, sot); - rip.put(RIP_ANNOES, annoes); - rip.put(RIP_INDBIL, 0); - err = rip.read(); + err = read_rip_3(rip, gr, co, sot, annoes, 0, classe_mov); + if (err != NOERR) + err = read_rip_3(rip, gr, co, sot, annoes, 0, 0); } //se fallisce ancora riprova con anno=0 e lo stesso indbil if (err != NOERR && annoes != 0) { - rip.put(RIP_TIPO, "B"); - rip.put(RIP_GRUPPO, gr); - rip.put(RIP_CONTO, co); - rip.put(RIP_SOTTOCONTO, sot); - rip.put(RIP_ANNOES, 0); - rip.put(RIP_INDBIL, indbil); - err = rip.read(); - + err = read_rip_3(rip, gr, co, sot, 0, indbil, classe_mov); + if (err != NOERR) + err = read_rip_3(rip, gr, co, sot, 0, indbil, 0); + //estremo tentativo con annoes e indbil = 0 if (err != NOERR && indbil != 0) { - rip.put(RIP_TIPO, "B"); - rip.put(RIP_GRUPPO, gr); - rip.put(RIP_CONTO, co); - rip.put(RIP_SOTTOCONTO, sot); - rip.put(RIP_ANNOES, 0); - rip.put(RIP_INDBIL, 0); - err = rip.read(); + err = read_rip_3(rip, gr, co, sot, 0, 0, classe_mov); + if (err != NOERR) + err = read_rip_3(rip, gr, co, sot, 0, 0, 0); } } @@ -1608,8 +1608,9 @@ TObject* TCache_ripartizioni::key2obj(const char* key) const long sottoconto = parametro.get_long(3); const int anno = parametro.get_int(4); const int indbil = parametro.get_int(5); + const int classe_mov = parametro.get_int(6); - rip->read(gruppo, conto, sottoconto, anno, indbil); + rip->read(gruppo, conto, sottoconto, anno, indbil, classe_mov); } else //chiave 4 { @@ -1617,8 +1618,9 @@ TObject* TCache_ripartizioni::key2obj(const char* key) const TString80 commessa = parametro.get(2); const int anno = parametro.get_int(3); const int indbil = parametro.get_int(4); + const int classe_mov = parametro.get_int(5); - rip->read(codcosto, commessa, anno, indbil); + rip->read(codcosto, commessa, anno, indbil, classe_mov); } if (rip->head().get_int(RIP_TIPORIP) == 1) @@ -1669,18 +1671,33 @@ void TCache_ripartizioni::set_esercizio(const int codes) } } -const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const char* costo, const char* commessa, const int annoes, const int indbil) +const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const char* costo, const char* commessa, + const int annoes, const int indbil, const char tipomov) { + //classi di movimento: se preventivi 2, se normali 1 + int classe_movimento; + if (tipomov == 'P' || tipomov == 'V') + classe_movimento = 2; + else + classe_movimento = 1; + TToken_string parametro; - parametro << "4|" << costo << '|' << commessa << '|' << annoes << '|' << indbil; //per chiave 4 + parametro << "4|" << costo << '|' << commessa << '|' << annoes << '|' << indbil << '|' << classe_movimento; //per chiave 4 return *(const TAnal_ripartizioni_batch*)objptr(parametro); } -const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, const int annoes) +const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, const int annoes, const char tipomov) { + //classi di movimento: se preventivi 2, se normali 1 + int classe_movimento; + if (tipomov == 'P' || tipomov == 'V') + classe_movimento = 2; + else + classe_movimento = 1; + TToken_string parametro; parametro << "3|" << bill.gruppo() << '|' << bill.conto() << '|' << bill.sottoconto() << '|' - << annoes << '|' << bill.indicatore_bilancio(); //per chiave 3 + << annoes << '|' << bill.indicatore_bilancio() << '|' << classe_movimento; //per chiave 3 return *(const TAnal_ripartizioni_batch*)objptr(parametro); } diff --git a/ca/calib01.h b/ca/calib01.h index 2a88a2f4d..c7ee3df9a 100755 --- a/ca/calib01.h +++ b/ca/calib01.h @@ -168,12 +168,17 @@ public: class TAnal_ripartizioni_batch : public TRecord_array { TRectype _rip; +private: + int read_rip_3(TLocalisamfile& rip, const int gr, const int co, const long sot, + const int annoes, const int indbil, const int classe_mov) const; + int read_rip_4(TLocalisamfile& rip, const char* codcosto, const char* commessa, + const int annoes, const int indbil, const int classe_mov) const; public: 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, const int indbil); - int read (const int gr, const int co, const long sot, const int annoes, const int indbil); + int read (const char* codcosto, const char* commessa, const int annoes, const int indbil, const int classe_mov); + int read (const int gr, const int co, const long sot, const int annoes, const int indbil, const int classe_mov); TAnal_ripartizioni_batch(); }; @@ -192,8 +197,8 @@ protected: public: void set_esercizio(const int codes); const TAnal_ripartizioni_batch& righe(const char* costo, const char* commessa, - const int annoes, const int indbil); - const TAnal_ripartizioni_batch& righe(const TBill& bill, const int annoes); + const int annoes, const int indbil, const char tipomov); + const TAnal_ripartizioni_batch& righe(const TBill& bill, const int annoes, const char tipomov); TCache_ripartizioni(); }; diff --git a/ca/f149.dir b/ca/f149.dir index adb641786..004c044d8 100755 --- a/ca/f149.dir +++ b/ca/f149.dir @@ -1,3 +1,3 @@ 149 0 -$rip|284|284|118|0|Archivio tabelle di ripartizione analitica||| +$rip|||119|0|Archivio tabelle di ripartizione analitica||| diff --git a/ca/f149.trr b/ca/f149.trr index 9e53cdfb9..c712a718a 100755 --- a/ca/f149.trr +++ b/ca/f149.trr @@ -1,5 +1,5 @@ 149 -11 +12 TIPO|1|1|0|Tipo Ripartizione (nterattiva, atch) CODICE|1|8|0|Codice ripartizione GRUPPO|2|3|0|Gruppo @@ -11,8 +11,9 @@ 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 +CLASSEMOV|2|1|0|Classe movimento (0=tutti,1=normali e temp.,2=preventivi e variaz.) 4 TIPO+CODICE| TIPO+DESCRIZ|X -TIPO+GRUPPO+CONTO+SOTTOCONTO+ANNOES+INDBIL|X -TIPO+CODCOSTO+CODCMS+ANNOES+INDBIL|X +TIPO+GRUPPO+CONTO+SOTTOCONTO+ANNOES+INDBIL+CLASSEMOV|X +TIPO+CODCOSTO+CODCMS+ANNOES+INDBIL+CLASSEMOV|X diff --git a/ca/rip.h b/ca/rip.h index 4e2315e17..f34dfa012 100755 --- a/ca/rip.h +++ b/ca/rip.h @@ -12,5 +12,6 @@ #define RIP_TIPORIP "TIPORIP" #define RIP_ANNOES "ANNOES" #define RIP_INDBIL "INDBIL" +#define RIP_CLASSEMOV "CLASSEMOV" #endif