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: public:
virtual int compare(const TSortable& s) const; virtual int compare(const TSortable& s) const;
const TRectype& categoria() 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); 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 //confrontatore di saldi_per_codice
int TRigamov::compare(const TSortable& s) const int TRigamov::compare(const TSortable& s) const
@ -100,7 +106,7 @@ struct TSaldo_per_codice :public TSortable
{ {
TString4 _spc; TString4 _spc;
int _grp, _cat; int _grp, _cat;
TString80 _idcespite; TString16 _idcespite;
real _qnor, _qant, _qacc;//, _qperse; real _qnor, _qant, _qacc;//, _qperse;
void add(const TRectype& rec_ammce); void add(const TRectype& rec_ammce);
@ -313,12 +319,12 @@ protected:
virtual bool destroy(); virtual bool destroy();
void elabora(); void elabora();
void genera_mov_per_cat(TArray& righe_mov, const TDate& datareg, const TDate& datacomp, void genera_mov(TArray& righe_mov, const TDate& datareg, const TDate& datacomp,
const TString& codcaus, const bool definitivo); const TString& codcaus, const int movdett, const bool definitivo, TLog_report& log);
void genera_mov_per_ces(TArray& righe_mov, const TDate& datareg, const TDate& datacomp,
const TString& codcaus, const bool definitivo);
void delete_old_movs(const TDate& ini_es); void delete_old_movs(const TDate& ini_es);
long get_new_numreg() const; 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: public:
@ -357,16 +363,9 @@ long TTrasf_mov_ce_cg::get_new_numreg() const
return mov.curr().get_long(MOV_NUMREG) + 1; 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::fill_head(TRectype& head, const TDate& datacomp, const TDate& datareg,
void TTrasf_mov_ce_cg::genera_mov_per_cat(TArray& righe_mov, const TDate& datareg, const TDate& datacomp, const long numreg, const TString& codcaus, const bool definitivo)
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; TEsercizi_contabili esc;
const int codes = esc.date2esc(datacomp); const int codes = esc.date2esc(datacomp);
head.put(MOV_ANNOES, codes); 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); head.put(MOV_CODCAUS, codcaus);
if (!definitivo) if (!definitivo)
head.put(MOV_PROVVIS, 'C'); 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 //Procedura di inserimento delle righe del movimento
TImporto fondo; 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.. //Controllo dell'eventuale cambio di categoria. Lo fa confrontando la riga iesima appena caricata con..
//..la riga i-1esima (la precedente,insomma) //..la riga i-1esima (la precedente,insomma)
//Se la categoria e' cambiata... //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!! //crea una nuova riga per metterci il fondo;in questo momento la riga e' aggiunta ma va riempita!!
TRectype& riga_fondo = pn.nuova_riga(); 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_GRUPPO, stringone.mid(12,3));
riga_fondo.put(RMV_CONTO, stringone.mid(15,3)); riga_fondo.put(RMV_CONTO, stringone.mid(15,3));
riga_fondo.put(RMV_SOTTOCONTO, stringone.mid(18,6)); 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.. //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 //..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 if (movdett > 0) //se va per cespite la descrizione cambia per ogni movimento in base alla categoria
pn.destroy_rows(++numreg); //ne elimina le righe per poter ricominciare {
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 //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... } //if i>0&&rigamov.compare...
//Se la categoria non e' cambiata crea normalmente la nuova riga //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 //metodo per gestire la successione degli eventi ad alto livello
void TTrasf_mov_ce_cg::elabora() void TTrasf_mov_ce_cg::elabora()
@ -478,7 +502,7 @@ void TTrasf_mov_ce_cg::elabora()
//Codice causale da mettere nei movimenti generati //Codice causale da mettere nei movimenti generati
const TString4 codcaus = config_ditta_ce.get("COAUQU"); const TString4 codcaus = config_ditta_ce.get("COAUQU");
//Assoc_array Categoria-QammTot-QperseTot //Assoc_array Categoria-QammTot
TAssoc_array quote_per_codice; TAssoc_array quote_per_codice;
TProgind pi(nrec, TR("Ricalcolo ammortamenti in corso..."), true, true); 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()); saldi_ordinati.add(h->remove_obj());
//accoppa l'assoc //accoppa l'assoc
quote_per_codice.destroy(); 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(); saldi_ordinati.sort();
//array con le righe movimento CG //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.. //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 //..uno o piu' movimenti di prima nota
//In base al movdett li creera' con righe per categoria o per cespite ma con fondi per categoria
if (movdett == 0) //E' un metodo semimagico
{ genera_mov(righe_mov, datareg, datacomp, codcaus, movdett, definitivo, cont_cesp_log);
genera_mov_per_cat(righe_mov, datareg, datacomp, codcaus, definitivo);
}
else
{
genera_mov_per_ces(righe_mov, datareg, datacomp, codcaus, definitivo);
}
//stampa il log degli errori //stampa il log degli errori