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:
parent
ca30878746
commit
afc6786a29
100
ca/cacnv.cpp
100
ca/cacnv.cpp
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user