Patch level :2.2

Files correlati     :cacnv.exe cacnva.msk
Ricompilazione Demo : [ ]
Commento            :completata stesura conversione e fatto primo test


git-svn-id: svn://10.65.10.50/trunk@12815 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2005-03-17 14:40:11 +00:00
parent ca30878746
commit afc6786a29
2 changed files with 78 additions and 27 deletions

View File

@ -15,6 +15,7 @@
#include "../cg/cg2101.h" #include "../cg/cg2101.h"
#include "calib01.h" #include "calib01.h"
#include "fasi.h"
#include "movana.h" #include "movana.h"
#include "rmovana.h" #include "rmovana.h"
#include "rip.h" #include "rip.h"
@ -54,6 +55,12 @@ bool TConversione_anal_msk::on_field_event(TOperable_field& o, TField_event e, l
switch (o.dlg()) switch (o.dlg())
{ {
case F_DATAINI: case F_DATAINI:
if (e == fe_init)
{
const TDate data_att = _config_anal.get("DtAttCa");
if (data_att.ok())
o.set(data_att.string());
}
if (e == fe_modify || e == fe_close) if (e == fe_modify || e == fe_close)
{ {
//controllo sulla data attivazione Contabilita' analitica nel file di configurazione //controllo sulla data attivazione Contabilita' analitica nel file di configurazione
@ -91,7 +98,8 @@ protected:
virtual void main_loop(); virtual void main_loop();
void create_new_movana(long numreg_cg, bool definitiva, TAssoc_array& cg_lines_to_anal); void create_new_movana(long numreg_cg, bool definitiva, TAssoc_array& cg_lines_to_anal);
bool test_configuration(); bool test_configuration();
void TConversione_cm2ca::ripartisci(TRectype& recpcon); void ripartisci(TRectype& recpcon);
void check_phase(const TRectype& analriga);
public: public:
bool convert_clerks(); bool convert_clerks();
@ -328,10 +336,36 @@ bool TConversione_cm2ca::set_anal()
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
// trasferisce i movimenti e le righe relative (MOV,RMOV) nei nuovi file di analitica (MOVANA,RMOVANA) // trasferisce i movimenti e le righe relative (MOV,RMOV) nei nuovi file di analitica (MOVANA,RMOVANA)
// --------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------
void TConversione_cm2ca::check_phase(const TRectype& analriga)
{
const TString16 codfase = analriga.get(RMOVANA_CODFASE);
if (codfase.blank())
return;
const TString& fathfasi = _config_anal->get("FathFasi");
if (fathfasi.blank())
return;
TLocalisamfile file_fasi(LF_FASI);
if (fathfasi == "CDC")
file_fasi.put(FASI_CODCMSFAS, analriga.get(RMOVANA_CODCCOSTO));
else //se non e' "CDC", il FathFasi puo' essere solo "CMS"
file_fasi.put(FASI_CODCMSFAS, analriga.get(RMOVANA_CODCMS));
file_fasi.put(FASI_CODFASE, codfase);
const int err = file_fasi.read();
if (err != NOERR)
{
const TString& descrfase = cache().get("FSC", codfase, "S0");
file_fasi.put(FASI_DESCRIZ, descrfase);
file_fasi.write();
}
}
void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAssoc_array& cg_lines_to_anal) void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAssoc_array& cg_lines_to_anal)
{ {
TAnal_mov analmov; TAnal_mov analmov; //testata movimento analitico
//riempie le righe di testata //riempie le righe di testata del movimento prima nota mov
TMovimentoPN mov; TMovimentoPN mov;
TRectype& mov_head = mov.curr(); TRectype& mov_head = mov.curr();
mov_head.put(MOV_NUMREG, numreg_cg); mov_head.put(MOV_NUMREG, numreg_cg);
@ -347,11 +381,12 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
analmov.put(MOVANA_DESCR, mov_head.get(MOV_DESCR)); analmov.put(MOVANA_DESCR, mov_head.get(MOV_DESCR));
analmov.put(MOVANA_CODCAUS, mov_head.get(MOV_CODCAUS)); analmov.put(MOVANA_CODCAUS, mov_head.get(MOV_CODCAUS));
analmov.put(MOVANA_TIPOMOV, "T"); //deve mettere sempre "Temporaneo" analmov.put(MOVANA_TIPOMOV, "T"); //deve mettere sempre "Temporaneo"
//MOVANA_TOTDOC e' il totale di tutte le sue righe;ancora non si conosce //MOVANA_TOTDOC e' il totale di tutte le sue righe;ancora non si conosce;sara' compilato..
//..successivamente utilizzando importone
//deve scorrere tutte le righe del movimento e sommare gli importi di quelle che hanno la //deve scorrere tutte le righe del movimento e sommare gli importi di quelle che hanno la..
//stessa chiave CODCMS+CODFSC //..stessa chiave CODCMS+CODFSC
TAssoc_array righe_cms; TAssoc_array righe_cms; //array con le righe del movimento che sono da trasferire
TToken_string chiave; TToken_string chiave;
//scansione righe movimentoPN //scansione righe movimentoPN
@ -362,6 +397,8 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
chiave.add(rmov.get(RMV_CODCMS)); chiave.add(rmov.get(RMV_CODCMS));
chiave.add(rmov.get(RMV_FASCMS)); chiave.add(rmov.get(RMV_FASCMS));
//se ci sono la commessa e/o la fase nella riga movimento e la riga iva non e' tipo T..
//..procede al calcolo dell'importo
if (!chiave.empty_items() && rmov.get(RMV_ROWTYPE) != "T") if (!chiave.empty_items() && rmov.get(RMV_ROWTYPE) != "T")
{ {
//alla chiave va aggiunto il vecchio gr/co/stc //alla chiave va aggiunto il vecchio gr/co/stc
@ -383,11 +420,11 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
} }
} }
TImporto importone; TImporto importone; //importo totale del movimento (totale di testata)
FOR_EACH_ASSOC_OBJECT(righe_cms, m, n, a) //giro sull'assoc array delle righe movimento da trasferire FOR_EACH_ASSOC_OBJECT(righe_cms, m, n, a) //giro sull'assoc array delle righe movimento da trasferire
{ {
//deve prendere la sezione dell'importo di ogni riga //aggiunge l'importo della riga all'importo totale
TImporto_descritto& importo = *(TImporto_descritto*)a; TImporto_descritto& importo = *(TImporto_descritto*)a;
importo.normalize(); importo.normalize();
importone += importo; importone += importo;
@ -396,8 +433,9 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
const int gruppo = chiave.get_int(2); const int gruppo = chiave.get_int(2);
const int conto = chiave.get_int(); const int conto = chiave.get_int();
const long sottoconto = chiave.get_long(); const long sottoconto = chiave.get_long();
//controlla se il gr/co/stc del movimento deve essere ripartito;in caso affermativo procede //controlla se il gr/co/stc del movimento deve essere ripartito;in caso affermativo procede..
//alla ripartizione delle righe del movimento //..alla ripartizione delle righe del movimento
//Per prima cosa crea l'array delle righe di ripartizione con questo gr/co/stc
const TRecord_array& righe_ripartizione = _cache_rip.righe(gruppo, conto, sottoconto); const TRecord_array& righe_ripartizione = _cache_rip.righe(gruppo, conto, sottoconto);
if (righe_ripartizione.rows() > 0) //ci sono righe ripartizione: da 1 riga mov CG a N righe mov CA if (righe_ripartizione.rows() > 0) //ci sono righe ripartizione: da 1 riga mov CG a N righe mov CA
@ -405,11 +443,12 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
// Importo totale da distribuire arrotondato ai decimali della valuta di conto // Importo totale da distribuire arrotondato ai decimali della valuta di conto
TGeneric_distrib distrib(importo.valore(), TCurrency::get_firm_dec()); TGeneric_distrib distrib(importo.valore(), TCurrency::get_firm_dec());
// Calcolo tutte le percentuali da ripartire // Calcola tutte le percentuali da ripartire
int i; int i;
for (i = 1; i <= righe_ripartizione.rows(); i++) for (i = 1; i <= righe_ripartizione.rows(); i++)
distrib.add(righe_ripartizione[i].get_real(RRIP_RIPARTO)); distrib.add(righe_ripartizione[i].get_real(RRIP_RIPARTO));
//Compila le righe del movimento di analitica in base alle righe ripartizione
for (i = 1; i <= righe_ripartizione.rows(); i++) for (i = 1; i <= righe_ripartizione.rows(); i++)
{ {
const TRectype& rrip = righe_ripartizione.row(i); const TRectype& rrip = righe_ripartizione.row(i);
@ -428,12 +467,16 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
analriga.put(RMOVANA_CODCMS, rrip.get(RRIP_CODCMS)); analriga.put(RMOVANA_CODCMS, rrip.get(RRIP_CODCMS));
analriga.put(RMOVANA_CODFASE, rrip.get(RRIP_CODFASE)); analriga.put(RMOVANA_CODFASE, rrip.get(RRIP_CODFASE));
analriga.put(RMOVANA_CODCONTO, rrip.get(RRIP_CODCONTO)); analriga.put(RMOVANA_CODCONTO, rrip.get(RRIP_CODCONTO));
//controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi
check_phase(analriga);
} }
} }
else //nessuna riga ripartizione -> da 1 riga movimento CG ad 1 riga movimento CA else //nessuna riga ripartizione -> da 1 riga movimento CG ad 1 riga movimento CA
{ {
if (_config_anal->get_bool("UsePdcc")) if (_config_anal->get_bool("UsePdcc")) //solo se in CA si usa il piano dei conti contabile..
{ { //..e' possibile costruire la riga movimento
//Compila la riga del movimentodi analitica
TRectype& analriga = analmov.new_row(); TRectype& analriga = analmov.new_row();
analriga.put(RMOVANA_SEZIONE, importo.sezione()); analriga.put(RMOVANA_SEZIONE, importo.sezione());
@ -449,18 +492,25 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
TString16 codconto; TString16 codconto;
codconto.format("%03d%03d%06ld", gruppo, conto, sottoconto); codconto.format("%03d%03d%06ld", gruppo, conto, sottoconto);
analriga.put(RMOVANA_CODCONTO, codconto); analriga.put(RMOVANA_CODCONTO, codconto);
//controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi
check_phase(analriga);
} }
else //qui va aggiunta la lista dei conti che non hanno ripartizione else //qui va aggiunta la lista dei conti che non hanno ripartizione quando NON si usa il..
//..piano dei conti contabile in analitica
error_box(TR("Manca la ripartizione di un conto")); error_box(TR("Manca la ripartizione di un conto"));
} }
} } //end FOR_EACH..
//e alla fine riesce a mettere anche l'importone in testata //e alla fine riesce a mettere anche l'importone in testata
importone.normalize(); //x evitare problemi di segno... importone.normalize(); //x evitare problemi di segno...
analmov.put(MOVANA_SEZIONE, importone.sezione()); analmov.put(MOVANA_SEZIONE, importone.sezione());
analmov.put(MOVANA_TOTDOC, importone.valore()); analmov.put(MOVANA_TOTDOC, importone.valore());
//se e' riuscita la scrittura dei movimenti di analitica ed e' una conversione definitiva... //Seconda parte del trasferimento: compatta e riscrive i movimenti(+righe) originali!
//Se e' riuscita la scrittura dei movimenti di analitica (MOVANA,RMOVANA)ed e' una conversione..
//..DEFINITIVA,riordina le righe e le testate dei movimenti originari (MOV,RMOV,RMOVIVA)..
//..riscrivendole
if (analmov.write() == NOERR && definitiva) if (analmov.write() == NOERR && definitiva)
{ {
//RIGHE MOVIMENTI CONTABILI //RIGHE MOVIMENTI CONTABILI
@ -522,7 +572,6 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
mov.cg(cg_i) = *(TRectype*)cg_obj; mov.cg(cg_i) = *(TRectype*)cg_obj;
} }
//RIGHE MOVIMENTI IVA (rifa' tutto il giochetto di prima per rmoviva) //RIGHE MOVIMENTI IVA (rifa' tutto il giochetto di prima per rmoviva)
TArray iva_records; TArray iva_records;
for (int n = 0; n < mov.iva_items(); n++) for (int n = 0; n < mov.iva_items(); n++)
@ -569,8 +618,8 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
mov.iva(iva_i) = *(TRectype*)iva_obj; mov.iva(iva_i) = *(TRectype*)iva_obj;
} }
//puo' finalmente riscrivere i files di origine puliti e compattati (sia iva che non)
mov.rewrite(); //puo' finalmente riscrivere i files di origine puliti e compattati mov.rewrite();
} }
} }
@ -578,6 +627,8 @@ bool TConversione_cm2ca::convert_movs(TConversione_anal_msk& mask)
{ {
//scandisce il file RMOV,alla ricerca dei record con codice fase o codice commessa compilato //scandisce il file RMOV,alla ricerca dei record con codice fase o codice commessa compilato
TRelation rel_rmov(LF_RMOV); TRelation rel_rmov(LF_RMOV);
//aggiunge MOV alla relazione per avere le DATACOMP da usare nel filtro
rel_rmov.add(LF_MOV, "NUMREG==NUMREG");
const bool definitiva = mask.get_int(F_TIPOCONV) != 0; const bool definitiva = mask.get_int(F_TIPOCONV) != 0;
//costruzione filtro con date (in caso di conversione provvisoria) //costruzione filtro con date (in caso di conversione provvisoria)
TString filtro; TString filtro;
@ -585,10 +636,10 @@ bool TConversione_cm2ca::convert_movs(TConversione_anal_msk& mask)
const TDate dataini = mask.get_date(F_DATAINI); const TDate dataini = mask.get_date(F_DATAINI);
if (dataini.ok()) if (dataini.ok())
filtro << "&&(ANSI(DATACOMP)>=" << dataini.string(ANSI) << ")"; filtro << "&&(ANSI(23->DATACOMP)>=" << dataini.string(ANSI) << ")";
const TDate datafin = mask.get_date(F_DATAFIN); const TDate datafin = mask.get_date(F_DATAFIN);
if (datafin.ok()) if (datafin.ok())
filtro << "&&(ANSI(DATACOMP)<=" << datafin.string(ANSI) << ")"; filtro << "&&(ANSI(23->DATACOMP)<=" << datafin.string(ANSI) << ")";
TCursor cur_rmov(&rel_rmov, filtro); TCursor cur_rmov(&rel_rmov, filtro);
TRectype& rec_rmov = rel_rmov.curr(); TRectype& rec_rmov = rel_rmov.curr();
@ -637,8 +688,7 @@ bool TConversione_cm2ca::convert_movs(TConversione_anal_msk& mask)
} }
} }
} }
} //end if(rmov_items>0)
}
return true; return true;
} }

View File

@ -29,8 +29,8 @@ END
BOOLEAN F_MOVIMENTI BOOLEAN F_MOVIMENTI
BEGIN BEGIN
PROMPT 2 3 "Conversione movimenti di contabilita'" PROMPT 2 3 "Conversione movimenti di contabilita'"
MESSAGE FALSE HIDE,1@|CLEAR,1@ MESSAGE FALSE HIDE,1@
MESSAGE TRUE SHOW,1@|ENABLE,1@ MESSAGE TRUE SHOW,1@
END END
GROUPBOX DLG_NULL 78 7 GROUPBOX DLG_NULL 78 7
@ -53,6 +53,7 @@ END
DATA F_DATAINI DATA F_DATAINI
BEGIN BEGIN
PROMPT 2 10 "Da data " PROMPT 2 10 "Da data "
FLAGS "G"
GROUP 1 GROUP 1
END END