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 "calib01.h"
#include "fasi.h"
#include "movana.h"
#include "rmovana.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())
{
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)
{
//controllo sulla data attivazione Contabilita' analitica nel file di configurazione
@ -91,7 +98,8 @@ protected:
virtual void main_loop();
void create_new_movana(long numreg_cg, bool definitiva, TAssoc_array& cg_lines_to_anal);
bool test_configuration();
void TConversione_cm2ca::ripartisci(TRectype& recpcon);
void ripartisci(TRectype& recpcon);
void check_phase(const TRectype& analriga);
public:
bool convert_clerks();
@ -327,11 +335,37 @@ bool TConversione_cm2ca::set_anal()
//----------------------------------------------------------------------------------------------------
// 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)
{
TAnal_mov analmov;
//riempie le righe di testata
TAnal_mov analmov; //testata movimento analitico
//riempie le righe di testata del movimento prima nota mov
TMovimentoPN mov;
TRectype& mov_head = mov.curr();
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_CODCAUS, mov_head.get(MOV_CODCAUS));
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
//stessa chiave CODCMS+CODFSC
TAssoc_array righe_cms;
//deve scorrere tutte le righe del movimento e sommare gli importi di quelle che hanno la..
//..stessa chiave CODCMS+CODFSC
TAssoc_array righe_cms; //array con le righe del movimento che sono da trasferire
TToken_string chiave;
//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_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")
{
//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
{
//deve prendere la sezione dell'importo di ogni riga
//aggiunge l'importo della riga all'importo totale
TImporto_descritto& importo = *(TImporto_descritto*)a;
importo.normalize();
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 conto = chiave.get_int();
const long sottoconto = chiave.get_long();
//controlla se il gr/co/stc del movimento deve essere ripartito;in caso affermativo procede
//alla ripartizione delle righe del movimento
//controlla se il gr/co/stc del movimento deve essere ripartito;in caso affermativo procede..
//..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);
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
TGeneric_distrib distrib(importo.valore(), TCurrency::get_firm_dec());
// Calcolo tutte le percentuali da ripartire
// Calcola tutte le percentuali da ripartire
int i;
for (i = 1; i <= righe_ripartizione.rows(); i++)
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++)
{
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_CODFASE, rrip.get(RRIP_CODFASE));
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
{
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();
analriga.put(RMOVANA_SEZIONE, importo.sezione());
@ -449,18 +492,25 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
TString16 codconto;
codconto.format("%03d%03d%06ld", gruppo, conto, sottoconto);
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"));
}
}
} //end FOR_EACH..
//e alla fine riesce a mettere anche l'importone in testata
importone.normalize(); //x evitare problemi di segno...
analmov.put(MOVANA_SEZIONE, importone.sezione());
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)
{
//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;
}
//RIGHE MOVIMENTI IVA (rifa' tutto il giochetto di prima per rmoviva)
TArray iva_records;
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.rewrite(); //puo' finalmente riscrivere i files di origine puliti e compattati
//puo' finalmente riscrivere i files di origine puliti e compattati (sia iva che non)
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
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;
//costruzione filtro con date (in caso di conversione provvisoria)
TString filtro;
@ -585,10 +636,10 @@ bool TConversione_cm2ca::convert_movs(TConversione_anal_msk& mask)
const TDate dataini = mask.get_date(F_DATAINI);
if (dataini.ok())
filtro << "&&(ANSI(DATACOMP)>=" << dataini.string(ANSI) << ")";
filtro << "&&(ANSI(23->DATACOMP)>=" << dataini.string(ANSI) << ")";
const TDate datafin = mask.get_date(F_DATAFIN);
if (datafin.ok())
filtro << "&&(ANSI(DATACOMP)<=" << datafin.string(ANSI) << ")";
filtro << "&&(ANSI(23->DATACOMP)<=" << datafin.string(ANSI) << ")";
TCursor cur_rmov(&rel_rmov, filtro);
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;
}

View File

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