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
98
ca/cacnv.cpp
98
ca/cacnv.cpp
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user