Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :aggiunto il campo classemov alle ripartizioni e sua gestione nel calcolo delle medesime


git-svn-id: svn://10.65.10.50/trunk@16520 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2008-04-15 14:29:54 +00:00
parent f299d2a050
commit faf3b218e5
11 changed files with 124 additions and 92 deletions

View File

@ -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;

View File

@ -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

View File

@ -1,12 +1,10 @@
#include "ca0800a.h"
TOOLBAR "topbar" 0 0 0 2
#include <relapbar.h>
TOOLBAR "" 0 -2 0 2
#include <toolbar.h>
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

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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);
}

View File

@ -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();
};

View File

@ -1,3 +1,3 @@
149
0
$rip|284|284|118|0|Archivio tabelle di ripartizione analitica|||
$rip|||119|0|Archivio tabelle di ripartizione analitica|||

View File

@ -1,5 +1,5 @@
149
11
12
TIPO|1|1|0|Tipo Ripartizione (<I>nterattiva, <B>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

View File

@ -12,5 +12,6 @@
#define RIP_TIPORIP "TIPORIP"
#define RIP_ANNOES "ANNOES"
#define RIP_INDBIL "INDBIL"
#define RIP_CLASSEMOV "CLASSEMOV"
#endif