Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :continua la contabilizzazione cespiti


git-svn-id: svn://10.65.10.50/trunk@15965 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2008-01-10 10:22:56 +00:00
parent c24a56d4f9
commit 6730d44e10

View File

@ -67,7 +67,9 @@ class TRigamov : public TRectype
public:
virtual int compare(const TSortable& s) const;
const TRectype& categoria() const;
TRigamov(const int grp, const TString& spc, const int cat) : TRectype(LF_RMOV) { _grp = grp; _spc = spc; _cat = cat;}
const TString& descr_categoria() const;
TRigamov(const int grp, const TString& spc, const int cat)
: TRectype(LF_RMOV) { _grp = grp; _spc = spc; _cat = cat; }
};
@ -76,6 +78,10 @@ const TRectype& TRigamov::categoria() const
return ditta_cespiti().categoria(_grp, _spc, _cat, true);
}
const TString& TRigamov::descr_categoria() const
{
return ditta_cespiti().categoria(_grp, _spc, _cat, false).get("S0");
}
//confrontatore di saldi_per_codice
int TRigamov::compare(const TSortable& s) const
@ -100,7 +106,7 @@ struct TSaldo_per_codice :public TSortable
{
TString4 _spc;
int _grp, _cat;
TString80 _idcespite;
TString16 _idcespite;
real _qnor, _qant, _qacc;//, _qperse;
void add(const TRectype& rec_ammce);
@ -313,12 +319,12 @@ protected:
virtual bool destroy();
void elabora();
void genera_mov_per_cat(TArray& righe_mov, const TDate& datareg, const TDate& datacomp,
const TString& codcaus, const bool definitivo);
void genera_mov_per_ces(TArray& righe_mov, const TDate& datareg, const TDate& datacomp,
const TString& codcaus, const bool definitivo);
void genera_mov(TArray& righe_mov, const TDate& datareg, const TDate& datacomp,
const TString& codcaus, const int movdett, const bool definitivo, TLog_report& log);
void delete_old_movs(const TDate& ini_es);
long get_new_numreg() const;
void fill_head(TRectype& head, const TDate& datacomp, const TDate& datareg,
const long numreg, const TString& codcaus, const bool definitivo);
public:
@ -357,16 +363,9 @@ long TTrasf_mov_ce_cg::get_new_numreg() const
return mov.curr().get_long(MOV_NUMREG) + 1;
}
//metodo per la generazione di movimenti con righe per categoria (chiamata se movdett=0)
void TTrasf_mov_ce_cg::genera_mov_per_cat(TArray& righe_mov, const TDate& datareg, const TDate& datacomp,
const TString& codcaus, const bool definitivo)
void TTrasf_mov_ce_cg::fill_head(TRectype& head, const TDate& datacomp, const TDate& datareg,
const long numreg, const TString& codcaus, const bool definitivo)
{
//Riempie i campi della testata movimento
long numreg = get_new_numreg();
TMovimentoPN_CE pn;
TRectype& head = pn.curr();
TEsercizi_contabili esc;
const int codes = esc.date2esc(datacomp);
head.put(MOV_ANNOES, codes);
@ -376,7 +375,20 @@ void TTrasf_mov_ce_cg::genera_mov_per_cat(TArray& righe_mov, const TDate& datare
head.put(MOV_CODCAUS, codcaus);
if (!definitivo)
head.put(MOV_PROVVIS, 'C');
head.put(MOV_DESCR, TR("Rilevazione quote ammortamento cespiti"));
}
//metodo per la generazione di movimenti con righe per categoria (chiamata se movdett=0)
void TTrasf_mov_ce_cg::genera_mov(TArray& righe_mov, const TDate& datareg, const TDate& datacomp, const TString& codcaus,
const int movdett, const bool definitivo, TLog_report& log)
{
//Riempie i campi della testata movimento
long numreg = get_new_numreg();
TMovimentoPN_CE pn;
TRectype& head = pn.curr();
fill_head(head, datacomp, datareg, numreg, codcaus, definitivo);
head.put(MOV_DESCR, TR("Rilevazione quote amm. cespiti per categoria"));
//Procedura di inserimento delle righe del movimento
TImporto fondo;
@ -393,7 +405,7 @@ void TTrasf_mov_ce_cg::genera_mov_per_cat(TArray& righe_mov, const TDate& datare
//Controllo dell'eventuale cambio di categoria. Lo fa confrontando la riga iesima appena caricata con..
//..la riga i-1esima (la precedente,insomma)
//Se la categoria e' cambiata...
if (i > 0 && rigamov.compare((const TRigamov&)righe_mov[i-1]) != 0)
if (i > 0 && (rigamov.compare((const TRigamov&)righe_mov[i-1]) != 0 || pn.cg_items() > 95))
{
//crea una nuova riga per metterci il fondo;in questo momento la riga e' aggiunta ma va riempita!!
TRectype& riga_fondo = pn.nuova_riga();
@ -411,17 +423,34 @@ void TTrasf_mov_ce_cg::genera_mov_per_cat(TArray& righe_mov, const TDate& datare
riga_fondo.put(RMV_GRUPPO, stringone.mid(12,3));
riga_fondo.put(RMV_CONTO, stringone.mid(15,3));
riga_fondo.put(RMV_SOTTOCONTO, stringone.mid(18,6));
const TString& descat = prev_riga_mov.descr_categoria();
riga_fondo.put(RMV_DESCR, descat);
//se il movimento supera le 95 righe va salvato sul file MOV, poi distrutto per poter costruirne uno nuovo..
//..con le righe di righe_mov che sono rimaste
if (pn.cg_items() > 95 || i == righe_mov.last())
if (pn.cg_items() > 95 || i == righe_mov.last() || movdett > 0)
{
pn.write(); //scrive il movimento sul file
pn.destroy_rows(++numreg); //ne elimina le righe per poter ricominciare
if (movdett > 0) //se va per cespite la descrizione cambia per ogni movimento in base alla categoria
{
TString desc;
desc << TR("Quote amm. ") << descat;
desc.cut(50);
head.put(MOV_DESCR, desc);
}
int err = pn.write(); //scrive il movimento sul file
if (err != NOERR)
{
TString msg;
msg << TR("Impossibile registrare il movimento ") << numreg << "\n";
log.log(2, msg);
}
pn.destroy_rows(numreg); //ne elimina le righe per poter ricominciare
head.put(MOV_NUMREG, ++numreg); //nuova testata per nuovo movimento
}
//azzera il valore del fondo in modo da ricominciare a calcolarlo con la nuova categoria
fondo.set(' ',0.0);
fondo.reset();
} //if i>0&&rigamov.compare...
//Se la categoria non e' cambiata crea normalmente la nuova riga
@ -433,11 +462,6 @@ void TTrasf_mov_ce_cg::genera_mov_per_cat(TArray& righe_mov, const TDate& datare
}
//metodo per la generazione di movimenti con righe per cespite raggruppate e pareggiate per categoria (chiamata se movdett>0)
void TTrasf_mov_ce_cg::genera_mov_per_ces(TArray& righe_mov, const TDate& datareg, const TDate& datacomp,
const TString& codcaus, const bool definitivo)
{
}
//metodo per gestire la successione degli eventi ad alto livello
void TTrasf_mov_ce_cg::elabora()
@ -478,7 +502,7 @@ void TTrasf_mov_ce_cg::elabora()
//Codice causale da mettere nei movimenti generati
const TString4 codcaus = config_ditta_ce.get("COAUQU");
//Assoc_array Categoria-QammTot-QperseTot
//Assoc_array Categoria-QammTot
TAssoc_array quote_per_codice;
TProgind pi(nrec, TR("Ricalcolo ammortamenti in corso..."), true, true);
@ -528,7 +552,7 @@ void TTrasf_mov_ce_cg::elabora()
saldi_ordinati.add(h->remove_obj());
//accoppa l'assoc
quote_per_codice.destroy();
//e ordina l'array (questo assurdo giro serve perche' l'assoc non e' ordinabile)
//e ordina l'array per categorie e cespite (questo assurdo giro serve perche' l'assoc non e' ordinabile)
saldi_ordinati.sort();
//array con le righe movimento CG
@ -545,15 +569,9 @@ void TTrasf_mov_ce_cg::elabora()
//a questo punto ha l'array con le righe movimento CG completo (righe_mov); da queste righe deve costruire..
//..uno o piu' movimenti di prima nota
if (movdett == 0)
{
genera_mov_per_cat(righe_mov, datareg, datacomp, codcaus, definitivo);
}
else
{
genera_mov_per_ces(righe_mov, datareg, datacomp, codcaus, definitivo);
}
//In base al movdett li creera' con righe per categoria o per cespite ma con fondi per categoria
//E' un metodo semimagico
genera_mov(righe_mov, datareg, datacomp, codcaus, movdett, definitivo, cont_cesp_log);
//stampa il log degli errori