Patch level : 10 hardy conversione

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/branches/R_10_00@21400 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2011-01-05 15:49:21 +00:00
parent c15c0b931a
commit e7afacec30
5 changed files with 202 additions and 137 deletions

View File

@ -517,13 +517,14 @@ bool THardy_pcon::trasferisci_sottoconti()
{ {
// costruisco la chiave gr.co.sc // costruisco la chiave gr.co.sc
const TString16 key = get_str("IdConto"); const TString16 key = get_str("IdConto");
const int gr = atoi(key.mid(1,2)); int gr, co;
const int co = atoi(key.mid(3,2)); long so;
const int so = atoi(key.mid(5,3)); gr = 0;
co = 0;
so = 0;
hd_key2conto(key, gr, co,so);
rec_pcon.zero(); rec_pcon.zero();
rec_pcon.put(PCN_GRUPPO, gr); rec_pcon.put(PCN_GRUPPO, gr);
if ((gr != 0) && (co != 0) && (so!= 0)) if ((gr != 0) && (co != 0) && (so!= 0))
{ {
if (esclusi.find(key.mid(1,2))>=0) if (esclusi.find(key.mid(1,2))>=0)
@ -817,9 +818,12 @@ bool THardy_fornitori::trasferisci()
// contropartita // contropartita
const TString16 key = get_str("IdContropartita"); const TString16 key = get_str("IdContropartita");
const int gr = atoi(key.mid(1,2)); int gr, co;
const int co = atoi(key.mid(3,2)); long so;
const int so = atoi(key.mid(5,3)); gr = 0;
co = 0;
so = 0;
hd_key2conto(key, gr, co, so);
rec.put(CLI_GRUPPORIC, gr); rec.put(CLI_GRUPPORIC, gr);
rec.put(CLI_CONTORIC, co); rec.put(CLI_CONTORIC, co);
rec.put(CLI_SOTTOCRIC, so); rec.put(CLI_SOTTOCRIC, so);

View File

@ -366,6 +366,8 @@ DATAPRZSTO =
// conversione valute per listini // conversione valute per listini
[IdDivisa] [IdDivisa]
006=EUR 006=EUR
001=
002=
// contratti // contratti
[CONTRATTI] [CONTRATTI]
@ -489,7 +491,7 @@ ANNOIVA =
REG = REG =
PROTIVA = PROTIVA =
UPROTIVA = UPROTIVA =
CODVAL = IdDivisa CODVAL = _TRADUCI,IdDivisa
DATACAM = DataCambio DATACAM = DataCambio
CAMBIO = Cambio CAMBIO = Cambio
REGST = REGST =
@ -548,8 +550,8 @@ ANNOES = Anno
NUMREG = NUMREG =
NUMRIG = NUMRIG =
CODIVA = IdIva CODIVA = IdIva
IMPONIBILE= IMPONIBILE=Imponibile
IMPOSTA = IMPOSTA =Imposta
TIPODET = TIPODET =
TIPOCR = TIPOCR =
INTRA = INTRA =
@ -569,6 +571,7 @@ CLI_GRUPPO = 4
CLI_CONTO = 101 CLI_CONTO = 101
FOR_GRUPPO = 5 FOR_GRUPPO = 5
FOR_CONTO = 600 FOR_CONTO = 600
GRUPPI_MOV = 7|8
// parametri generali della maschera (dns user password) // parametri generali della maschera (dns user password)
[Main] [Main]

View File

@ -28,70 +28,32 @@ class THardy_movimenti : public THardy_transfer
TDate _dadata, _adata; TDate _dadata, _adata;
TConfig* _conf; TConfig* _conf;
long _kmovcont; long _kmovcont;
TArray* _righeiva;
TArray* _righecont;
protected: protected:
bool trasferisci_righe(); bool scrivi_righe();
bool trasferisci_righeiva(); bool scrivi_righecont();
bool test_movcont();
bool conto_is_costoricavo(const int gr);
bool test_moviva();
void conto2campo(const TString& hd_tipoc, const TString& hd_key, TString4& tipoc, int& gr, int& co, long& so);
public: public:
virtual bool trasferisci(); virtual bool trasferisci();
THardy_movimenti(const int anno, const TDate dadata, const TDate adata); THardy_movimenti(const int anno, const TDate dadata, const TDate adata);
}; };
bool THardy_movimenti::trasferisci_righeiva() void THardy_movimenti::conto2campo(const TString& hd_tipoc, const TString& hd_key, TString4& tipoc, int& gr, int& co, long& so)
{ {
TString_array lista_campi_righeiva;
TConfig& ini = config(); TConfig& ini = config();
ini.list_variables(lista_campi_righeiva, true, "RMOVIVA", true); char tipocc = hd_tipoc[0];
TString query;
query << query_header();
query << "SELECT * "
"FROM dbo.MovIvaT "
"WHERE KMovconT=";
query << _kmovcont;
TODBC_recordset recset(query);
bool is_iva = (recset.items() > 0);
if (is_iva)
{
bool ok=recset.move_first();
if (ok)
{
// aggiorna_testata movimento già scritta su ini con i nuovi dati di testata
}
// aggiungo le righe iva
long kregivat = recset.get("KRegivaT").as_int();
TString query_righe;
query_righe << query_header();
query_righe << "SELECT * "
"FROM dbo.MovIva "
"WHERE KRegivaT=";
query_righe << kregivat;
TODBC_recordset recset_righe(query_righe);
TString paragraph;
int nrigac = 1;
for (bool ok=recset_righe.move_first();ok;ok=recset_righe.move_next())
{
paragraph.format("%d,%d",LF_RMOVIVA,nrigac++);
_conf->set_paragraph(paragraph);
aggiorna_ini(*_conf, lista_campi_righeiva);
// calcolo dei campi non importabili direttamente
TString4 sezione = "D";
TImporto imponibile(sezione[0], recset_righe.get("Imponibile").as_real());
TImporto imposta(sezione[0], recset_righe.get("Imposta").as_real());
_conf->set(RMI_IMPONIBILE, imponibile.valore().string(0,2)) ;
_conf->set(RMI_IMPOSTA, imposta.valore().string(0,2));
const TString& key = recset_righe.get("IdConto").as_string();
TString4 tipoc = recset_righe.get("IdContoTp").as_string();
const char tipocc = tipoc[0];
int gr, co;
long so;
switch (tipocc) switch (tipocc)
{ {
case 'S': case 'S':
{ {
tipoc = " "; tipoc = " ";
gr = atoi(key.mid(1,2)); hd_key2conto(hd_key, gr, co, so);
co = atoi(key.mid(3,2));
so = atoi(key.mid(5,3));
} }
break; break;
case 'C': case 'C':
@ -99,7 +61,7 @@ bool THardy_movimenti::trasferisci_righeiva()
tipoc = "C"; tipoc = "C";
gr = ini.get_int("CLI_GRUPPO", "Mastri"); gr = ini.get_int("CLI_GRUPPO", "Mastri");
co = ini.get_int("CLI_CONTO", "Mastri"); co = ini.get_int("CLI_CONTO", "Mastri");
so = hd_key2cli(key); so = hd_key2cli(hd_key);
} }
break; break;
case 'F': case 'F':
@ -107,23 +69,92 @@ bool THardy_movimenti::trasferisci_righeiva()
tipoc = "F"; tipoc = "F";
gr = ini.get_int("FOR_GRUPPO", "Mastri"); gr = ini.get_int("FOR_GRUPPO", "Mastri");
co = ini.get_int("FOR_CONTO", "Mastri"); co = ini.get_int("FOR_CONTO", "Mastri");
so = hd_key2forn(key); so = hd_key2forn(hd_key);
} }
break; break;
default: default:
break; break;
} }
_conf->set(RMI_TIPOC, tipoc);
_conf->set(RMI_GRUPPO, gr);
_conf->set(RMI_CONTO, co);
_conf->set(RMI_SOTTOCONTO, so);
}
}
return is_iva;
} }
bool THardy_movimenti::conto_is_costoricavo(const int gr)
{
TConfig& ini = config();
const int costi = ini.get_int("COSTI_GRUPPO", "Mastri");
const int ricavi = ini.get_int("RICAVI_GRUPPO", "Mastri");
return ((gr == costi) || (gr == ricavi));
}
bool THardy_movimenti::trasferisci_righe() bool THardy_movimenti::test_moviva()
{
// verifico se è un movimento iva: esiste un record in MovIvaT
TString query;
query << query_header();
query << "SELECT * "
"FROM dbo.MovIvaT "
"WHERE KMovconT=";
query << _kmovcont;
TODBC_recordset recset(query);
long kregivat = -1;
if (recset.items() > 0)
{
bool ok=recset.move_first();
if (ok)
{
kregivat = recset.get("KRegivaT").as_int();
// aggiorna_testata movimento già scritta su ini con i nuovi dati di testata
const TString& key = recset.get("IdConto").as_string();
TString4 hdtipoc = recset.get("IdContoTp").as_string();
TString4 tipoc = " ";
int gr, co;
long so;
gr = 0;
co = 0;
so = 0;
conto2campo(hdtipoc, key, tipoc, gr, co, so);
_conf->set(MOV_TIPO, tipoc);
_conf->set(MOV_CODCF, so);
real totdoc = recset.get("TotDocumento").as_real();
_conf->set(MOV_TOTDOC, totdoc.string(0,2));
}
}
// leggo le righe iva e costrisco array corrispondente
TString_array lista_campi_righeiva;
TConfig& ini = config();
ini.list_variables(lista_campi_righeiva, true, "RMOVIVA", true);
TString query_righe;
query_righe << query_header();
query_righe << "SELECT * "
"FROM dbo.MovIva "
"WHERE KRegivaT=";
query_righe << kregivat;
TODBC_recordset recset_righe(query_righe);
_righeiva->destroy();
TLocalisamfile rmoviva(LF_RMOVIVA);
TRectype& rec_rmoviva = rmoviva.curr();
for (bool ok=recset_righe.move_first();ok;ok=recset_righe.move_next())
{
aggiorna_record(rec_rmoviva, lista_campi_righeiva);
const TString& key = recset_righe.get("IdConto").as_string();
TString4 hdtipoc = recset_righe.get("IdContoTp").as_string();
TString4 tipoc;
tipoc = " ";
int gr, co;
long so;
gr = 0;
co = 0;
so = 0;
conto2campo(hdtipoc, key, tipoc, gr, co, so);
rec_rmoviva.put(RMI_TIPOC, tipoc);
rec_rmoviva.put(RMI_GRUPPO, gr);
rec_rmoviva.put(RMI_CONTO, co);
rec_rmoviva.put(RMI_SOTTOCONTO, so);
_righeiva->add(new TObject(rec_rmoviva));
}
return (kregivat > 0);
}
bool THardy_movimenti::test_movcont()
{ {
TString_array lista_campi_righe; TString_array lista_campi_righe;
TConfig& ini = config(); TConfig& ini = config();
@ -135,61 +166,68 @@ bool THardy_movimenti::trasferisci_righe()
"WHERE KMovconT="; "WHERE KMovconT=";
query_righe << _kmovcont; query_righe << _kmovcont;
TODBC_recordset recset_righe(query_righe); TODBC_recordset recset_righe(query_righe);
TString paragraph; _righecont->destroy();
int nrigac = 1; TLocalisamfile rmov(LF_RMOV);
TRectype& rec_rmov = rmov.curr();
for (bool ok=recset_righe.move_first();ok;ok=recset_righe.move_next()) for (bool ok=recset_righe.move_first();ok;ok=recset_righe.move_next())
{ {
paragraph.format("%d,%d",LF_RMOV,nrigac++); aggiorna_record(rec_rmov, lista_campi_righe);
_conf->set_paragraph(paragraph);
aggiorna_ini(*_conf, lista_campi_righe);
// calcolo dei campi non importabili direttamente
TString4 sezione = "D";
TImporto imp_dare(sezione[0], recset_righe.get("Dare").as_real());
TImporto imp_avere(sezione[0], recset_righe.get("Avere").as_real());
if (imp_dare.is_zero())
sezione = "A";
_conf->set(RMV_SEZIONE, sezione);
_conf->set(RMV_IMPORTO, (imp_avere.is_zero() ? imp_dare.valore().string(0,2) : imp_avere.valore().string(0,2)));
const TString& key = recset_righe.get("IdConto").as_string(); const TString& key = recset_righe.get("IdConto").as_string();
TString4 tipoc = recset_righe.get("IdContoTp").as_string(); TString4 hdtipoc = recset_righe.get("IdContoTp").as_string();
const char tipocc = tipoc[0]; TString4 tipoc;
tipoc = " ";
int gr, co; int gr, co;
long so; long so;
switch (tipocc) gr = 0;
co = 0;
so = 0;
conto2campo(hdtipoc, key, tipoc, gr, co, so);
TString4 sezione = "D";
real imp_dare = recset_righe.get("Dare").as_real();
real imp_avere = recset_righe.get("Avere").as_real();
if (imp_dare.is_zero())
sezione = "A";
rec_rmov.put(RMV_SEZIONE, sezione);
rec_rmov.put(RMV_IMPORTO, (imp_avere.is_zero() ? imp_dare : imp_avere));
rec_rmov.put(RMV_TIPOC, tipoc);
rec_rmov.put(RMV_GRUPPO, gr);
rec_rmov.put(RMV_CONTO, co);
rec_rmov.put(RMV_SOTTOCONTO, so);
_righecont->add(new TObject(rec_rmov));
}
return true;
}
bool THardy_movimenti::scrivi_righecont()
{
return true;
}
bool THardy_movimenti::scrivi_righe()
{
TConfig& ini = config();
TToken_string gruppi_mov = ini.get("GRUPPI_MOV", "Mastri");
// se è un movimento iva metto in atto il meccanismo di ricerca per assegnare le aliquote ai conti
if (_righeiva->items()>0)
{ {
case 'S': // primo passo: scartare le righe contabili con gruppi non presenti nella lista GRUPPI_MOV
for (int i=0;i<_righecont->items();i++)
{ {
tipoc = " "; TRectype* rec_rmov = (TRectype*)_righecont->objptr(i);
gr = atoi(key.mid(1,2)); const char* gruppo = rec_rmov->get(RMV_GRUPPO);
co = atoi(key.mid(3,2)); if (!gruppi_mov.find(gruppo))
so = atoi(key.mid(5,3)); _righecont->remove(i);
} }
break; // secondo passo: per ogni riga iva cerco importo uguale in righe contabili,
case 'C': // se lo trovo assegno quel codice iva il conto contabile trovato e cancello la riga iva
for (int i=0;i<_righeiva->items();i++)
{ {
tipoc = "C"; TRectype* rec_rmoviva = (TRectype*)_righeiva->objptr(i);
gr = ini.get_int("CLI_GRUPPO", "Mastri"); real imponibile = rec_rmoviva->get(RMI_IMPONIBILE);
co = ini.get_int("CLI_CONTO", "Mastri");
so = hd_key2cli(key);
} }
break;
case 'F':
{
tipoc = "F";
gr = ini.get_int("FOR_GRUPPO", "Mastri");
co = ini.get_int("FOR_CONTO", "Mastri");
so = hd_key2forn(key);
}
break;
default:
break;
}
_conf->set(RMV_TIPOC, tipoc);
_conf->set(RMV_GRUPPO, gr);
_conf->set(RMV_CONTO, co);
_conf->set(RMV_SOTTOCONTO, so);
} }
// scrivo su ini le righe contabili rimaste (tutte se il mov non è iva)
scrivi_righecont();
return true; return true;
} }
@ -232,7 +270,7 @@ bool THardy_movimenti::trasferisci()
THardy_iterator hi(this); THardy_iterator hi(this);
while (++hi) while (++hi)
{ {
_kmovcont = recset.get("KMovconT").as_int(); _kmovcont = recset.get("KMovconT").as_int(); // numero movimento testata
if (_conf != NULL) if (_conf != NULL)
delete _conf; delete _conf;
_conf = NULL; _conf = NULL;
@ -248,11 +286,22 @@ bool THardy_movimenti::trasferisci()
paragraph.format("%d",LF_MOV); paragraph.format("%d",LF_MOV);
_conf->set_paragraph(paragraph); // testata movimento _conf->set_paragraph(paragraph); // testata movimento
aggiorna_ini(*_conf, lista_campi); aggiorna_ini(*_conf, lista_campi);
// righe movimento // verifica se è un mov. iva e nel caso aggiorna testata e array righe iva
trasferisci_righe(); bool iva = test_moviva();
bool iva = trasferisci_righeiva(); // legge righe contabili e aggiorna array righe cont.
test_movcont();
// scrive RMOV e /o RMOVIVA a partire da array righe letti da db hardy
bool ok = scrivi_righe();
TString msg; TString msg;
msg << (iva ? TR("Movimento contabile "): TR("Movimento iva ")) << _kmovcont << " generato nel file " << temp; if (ok)
msg << (iva ? TR("Movimento iva "): TR("Movimento contabile ")) << _kmovcont << " generato nel file " << temp;
else
{
ntran--;
if (temp.exist())
temp.fremove();
msg << (iva ? TR("Il movimento iva "): TR("Il movimento contabile ")) << _kmovcont << " ha generato un errore, non è stato convertito ";
}
log(msg); log(msg);
} }
if (_conf != NULL) if (_conf != NULL)

View File

@ -450,3 +450,11 @@ long hd_key2forn(const TString& key)
const long codcf = atol(key.mid(3,6)); const long codcf = atol(key.mid(3,6));
return codcf; return codcf;
} }
// determina tipoc, gruppo, conto e sottoconto a partire da tipoconto e idconto hardy
void hd_key2conto(const TString& key, int& gr, int& co, long& so)
{
gr = atoi(key.mid(1,2));
co = atoi(key.mid(3,2));
so = atoi(key.mid(5,3));
}

View File

@ -220,3 +220,4 @@ const TString& hd_format_date8(const TDate& data);
const TString& hd_format_date6(const TDate& data); const TString& hd_format_date6(const TDate& data);
long hd_key2cli(const TString& key); long hd_key2cli(const TString& key);
long hd_key2forn(const TString& key); long hd_key2forn(const TString& key);
void hd_key2conto(const TString& key, int& gr, int& co, long& so);