Patch level :2.2 nopatch

Files correlati     :cacnv.exe
Ricompilazione Demo : [ ]
Commento            :
terminata la conversione movimenti (compresi di rmov e rmoviva) anche in versione definitiva


git-svn-id: svn://10.65.10.50/trunk@12629 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2005-01-24 13:57:10 +00:00
parent fdf3aae03c
commit d1fab0f6de

View File

@ -298,23 +298,112 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva)
//se e' riuscita la scrittura dei movimenti di analitica ed e' una conversione definitiva...
if (analmov.write() == NOERR && definitiva)
{
//azzera i campi codice commessa e fase in RMOV...
//RIGHE MOVIMENTI CONTABILI
TArray cg_records;
for (int m = 0; m < mov.cg_items(); m++)
{
TRectype& rmov = mov.cg(m);
rmov.zero(RMV_CODCMS);
rmov.zero(RMV_FASCMS);
const TRectype& rmov = mov.cg(m);
int add_to = -1;
//se la riga movimento contabile ha un ROWTYPE...
if (rmov.get(RMV_ROWTYPE).not_empty())
{
//cerca nell'array dei record riga mov(cg_records) partendo dall'ultima a scalare..
for(add_to = cg_records.last(); add_to >=0; add_to--)
{
//prende il record add_to-esimo..
const TRectype& rec = (TRectype&)cg_records[add_to];
//se i campi gr.co.sottoc. di un record dell'array(cg_records) = a quelli della riga
//movimento contabile in esame(rmov) -> esce con add_to = al numero del record dell'
//array che soddisfa la condizione (quindi add_to > 0)
if (rmov.get_int(RMV_GRUPPO) == rec.get_int(RMV_GRUPPO) &&
rmov.get_int(RMV_CONTO) == rec.get_int(RMV_CONTO) &&
rmov.get_long(RMV_SOTTOCONTO) == rec.get_long(RMV_SOTTOCONTO))
break;
}
}
//se add_to e' rimasto = -1 (la condizione di eguaglianza gr.co.sott. non e' stata soddisfatta
//da alcuna riga dell'array cg_records)..
if (add_to < 0)
{
TRectype* rec = new TRectype(rmov);
//azzera i campi codice commessa e fase in RMOV di origine...
rec->zero(RMV_CODCMS);
rec->zero(RMV_FASCMS);
//e aggiunge all'array cg_records il nuovo record ripulito
cg_records.add(rec);
rec->put(RMV_NUMRIG, cg_records.items());
}
//se ivece add_to > 0 (vedi test su condizione gr.co.sott. sopra)..
else
{
//prende il record(rec) dell'array che soddsfaceva la condizione e somma ad esso importo e sezione
//di quello in esame(rmov)
TRectype& rec = (TRectype&)cg_records[add_to];
TImporto imp_tot(rec.get_char(RMV_SEZIONE), rec.get_real(RMV_IMPORTO));
TImporto imp_original(rmov.get_char(RMV_SEZIONE), rmov.get_real(RMV_IMPORTO));
imp_tot += imp_original;
imp_tot.normalize();
rec.put(RMV_SEZIONE, imp_tot.sezione());
rec.put(RMV_IMPORTO, imp_tot.valore());
//notare che i campi descrittivi resteranno sempre quelli del primo record di cg_records
//che ha gr.co.sottoc. soddisfacenti la condizione sopra!
}
}
//...e in RMOVIVA
//cancella solo le righe contabili del movimento originale..
mov.destroy_cg_row(-1);
//e le sostituisce con le nuove che sono contenute (compattate) in cg-records
FOR_EACH_ARRAY_ITEM(cg_records, cg_i, cg_obj)
{
mov.cg(cg_i) = *(TRectype*)cg_obj;
}
//RIGHE MOVIMENTI IVA (rifa' tutto il giochetto di prima per rmoviva)
TArray iva_records;
for (int n = 0; n < mov.iva_items(); n++)
{
TRectype& rmoviva = mov.iva(n);
rmoviva.zero(RMI_CODCMS);
rmoviva.zero(RMI_FASCMS);
const TRectype& rmoviva = mov.iva(n);
int add_to = -1;
for(add_to = iva_records.last(); add_to >=0; add_to--)
{
const TRectype& rec = (TRectype&)iva_records[add_to];
if (rmoviva.get_int(RMI_GRUPPO) == rec.get_int(RMI_GRUPPO) &&
rmoviva.get_int(RMI_CONTO) == rec.get_int(RMI_CONTO) &&
rmoviva.get_long(RMI_SOTTOCONTO) == rec.get_long(RMI_SOTTOCONTO) &&
rmoviva.get(RMI_CODIVA) == rec.get(RMI_CODIVA) &&
rmoviva.get_int(RMI_TIPODET) == rec.get_int(RMI_TIPODET))
break;
}
if (add_to < 0)
{
TRectype* rec = new TRectype(rmoviva);
rec->zero(RMI_CODCMS);
rec->zero(RMI_FASCMS);
iva_records.add(rec);
rec->put(RMI_NUMRIG, iva_records.items());
}
else
{
TRectype& rec = (TRectype&)iva_records[add_to];
//imponibile..
real tot = rec.get_real(RMI_IMPONIBILE);
real original = rmoviva.get_real(RMI_IMPONIBILE);
tot += original;
rec.put(RMI_IMPONIBILE, tot);
//..e imposta
tot = rec.get_real(RMI_IMPOSTA);
original = rmoviva.get_real(RMI_IMPOSTA);
tot += original;
rec.put(RMI_IMPOSTA, tot);
}
}
//manca il compattamento del file rmov e rmoviva
mov.destroy_iva_row(-1);
FOR_EACH_ARRAY_ITEM(iva_records, iva_i, iva_obj)
{
mov.iva(iva_i) = *(TRectype*)iva_obj;
}
mov.rewrite(); //puo' finalmente riscrivere i files di origine puliti e compattati
}
}
@ -325,7 +414,7 @@ bool TConversione_cm2ca::convert_movs()
msk.run();
//scandisce il file RMOV,alla ricerca dei record con codice fase o codice commessa compilato
TRelation rel_rmov(LF_RMOV);
const bool definitiva = msk.get_int(F_TIPOCONV);
const bool definitiva = msk.get_int(F_TIPOCONV) != 0;
//costruzione filtro con date (in caso di conversione provvisoria)
TString filtro;
filtro << "((CODCMS!='')||(FASCMS!=''))&&(ROWTYPE!='T')";