From a5aeb839e4eee3aa3682bf232dfcd41bb94067a4 Mon Sep 17 00:00:00 2001 From: guy Date: Wed, 15 Dec 2010 14:16:07 +0000 Subject: [PATCH] Patch level : 10 ha Files correlati : Ricompilazione Demo : [ ] Commento : avanzamento lavori git-svn-id: svn://10.65.10.50/branches/R_10_00@21312 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ha/hacnv100.cpp | 14 +-- ha/hacnv100a.ini | 105 ++++++++++++++++++++++- ha/hacnv200.cpp | 218 +++++++++++++++++++++++++++++++---------------- ha/hacnvlib.cpp | 53 ++++++++++++ ha/hacnvlib.h | 1 + ha/halib.cpp | 8 ++ ha/halib.h | 1 + 7 files changed, 312 insertions(+), 88 deletions(-) diff --git a/ha/hacnv100.cpp b/ha/hacnv100.cpp index f4f59bbe2..f2a5dd301 100755 --- a/ha/hacnv100.cpp +++ b/ha/hacnv100.cpp @@ -103,9 +103,6 @@ public: class THardy_fornitori : public THardy_transfer { -protected: - long key2forn(const TString& key) const; - public: virtual bool trasferisci(); }; @@ -782,12 +779,6 @@ bool THardy_clienti::trasferisci_destinazioni() // THardy_fornitori /////////////////////////////////////////////////////////// -long THardy_fornitori::key2forn(const TString& key) const -{ - const long codcf = atol(key.mid(3,6)); - return codcf; -} - bool THardy_fornitori::trasferisci() { TString query = @@ -807,7 +798,7 @@ bool THardy_fornitori::trasferisci() while (++hi) { const TString& key = get_str("IdConto"); - const long codcf = key2forn(key); + const long codcf = hd_key2forn(key); if (codcf > 0) { rec.zero(); @@ -1035,8 +1026,7 @@ public: virtual ~TImportazioneHardy_mask(); }; - -// Funzione di tarsferimento dati da/verso file .ini con lo stesso nome della maschera +// Funzione di trasferimento dati da/verso file .ini con lo stesso nome della maschera // Andrebbe messo in libreria void TImportazioneHardy_mask::serialize(bool bSave) { diff --git a/ha/hacnv100a.ini b/ha/hacnv100a.ini index dc1d0137f..ad3f0d825 100755 --- a/ha/hacnv100a.ini +++ b/ha/hacnv100a.ini @@ -141,8 +141,8 @@ PAIV = PartitaIVA TIPOPERS = ALLEG = CODALLEG = -GRUPPO = -CONTO = +GRUPPO = _FISSO,5 +CONTO = _FISSO,600 GRUPPORIC = CONTORIC = SOTTOCRIC = @@ -195,8 +195,8 @@ PAIV = PartitaIVA TIPOPERS = ALLEG = CODALLEG = -GRUPPO = -CONTO = +GRUPPO = _FISSO,4 +CONTO = _FISSO,101 GRUPPORIC = CONTORIC = SOTTOCRIC = @@ -420,10 +420,107 @@ DATAULTAUM = PRZSTO = DATAPRZSTO = +[MOV] +ANNOES = Esercizio +NUMREG = KMovconT +DATAREG = DataMovimento +DATACOMP = DataCompetenza +DATADOC = DataDocumento +DATA74TER = +MESELIQ = +NUMDOC = NumDocumento +//TIPODOC = *** conversione FlTipoDocumento +CODCAUS = IdCausale +DESCR = Descrizione1 +TIPOMOV = +ANNOIVA = +REG = +PROTIVA = +UPROTIVA = +CODVAL = IdDivisa +DATACAM = DataCambio +CAMBIO = Cambio +REGST = +STAMPATO = FlStGiornale +NUMGIO = ProtGiornale +TIPO = +CODCF = +TOTDOC = +TOTDOCVAL = +RITFIS = +RITSOC = +PROVVIS = FlMovSospeso +CODVALI = +CAMBIOI = +CORRLIRE = +CORRVALUTA= +DATACOMPI = +OCFPI = +CODPAG = +INVIATO = +INVIVA = +SCARCON = +TNUMREG = +TOCFP = +DPROVV = +DANNO = +DCODNUM = +DNDOC = +DATAINC = +LIQDIFF = +[RMOV] +ANNOES = Esercizio +NUMREG = KMovconT +NUMRIG = +SEZIONE = +DATAREG = DataMovimento +TIPOC = +GRUPPO = +CONTO = +SOTTOCONTO= +DESCR = _STREXPR,LEFT(Descrizione1+" "+Descrizione2; 50) +RCONTR = +TIPOCC = +GRUPPOC = +CONTOC = +SOTTOCONTC= +IMPORTO = +ROWTYPE = +NUMGIO = ProtGiornale +CODCMS = +FASCMS = + +[RMOVIVA] +ANNOES = +NUMREG = +NUMRIG = +CODIVA = +IMPONIBILE= +IMPOSTA = +TIPODET = +TIPOCR = +INTRA = +TIPOATT = +RIGAIMP = +RIGAIVA = +TIPOC = +GRUPPO = +CONTO = +SOTTOCONTO= +CODCMS = +FASCMS = +NAVP = + +[Mastri] +CLI_GRUPPO = 4 +CLI_CONTO = 101 +FOR_GRUPPO = 5 +FOR_CONTO = 600 // parametri generali della maschera (dns user password) [Main] 201 = hardy 202 = 203 = +PATH = c:\temp diff --git a/ha/hacnv200.cpp b/ha/hacnv200.cpp index ef96f3cf5..b211304b0 100755 --- a/ha/hacnv200.cpp +++ b/ha/hacnv200.cpp @@ -5,10 +5,16 @@ #include #include #include +#include #include #include #include #include +#include + +#include +#include +#include const char* const APPNAME = TR("Conversione movimenti"); @@ -19,15 +25,99 @@ const char* const APPNAME = TR("Conversione movimenti"); class THardy_movimenti : public THardy_transfer { int _anno; - + TConfig* _conf; + long _kmovcont; +protected: + bool trasferisci_righe(); + bool is_mov_iva(); public: virtual bool trasferisci(); THardy_movimenti(int anno); }; - -THardy_movimenti::THardy_movimenti(int anno) : _anno(anno) +bool THardy_movimenti::is_mov_iva() { + TString query_righe; + query_righe << query_header(); + query_righe << "SELECT * " + "FROM dbo.MovIvaT" + "WHERE KMovconT="; + query_righe << _kmovcont; + TODBC_recordset recset_righe(query_righe); + bool is_iva = (recset_righe.items() > 0); + return is_iva; +} + + +bool THardy_movimenti::trasferisci_righe() +{ + TString_array lista_campi_righe; + TConfig& ini = config(); + ini.list_variables(lista_campi_righe, true, "RMOV", true); + TString query_righe; + query_righe << query_header(); + query_righe << "SELECT * " + "FROM dbo.MovContabili " + "WHERE KMovconT="; + query_righe << _kmovcont; + TODBC_recordset recset_righe(query_righe); + TString paragraph; + int nrigac = 1; + int nrigai = 1; + for (bool ok=recset_righe.move_first();ok;ok=recset_righe.move_next()) + { + paragraph.format("%d,%d",LF_RMOV,nrigac++); + _conf->set_paragraph(paragraph); + aggiorna_ini(*_conf, lista_campi_righe); + + // calcolo dei campi non importabili direttamente + TString4 sezione = "D"; + real imp_dare = recset_righe.get("Dare").as_real(); + real imp_avere = recset_righe.get("Avere").as_real(); + if (imp_avere> ZERO) + sezione = "A"; + _conf->set(RMV_SEZIONE, sezione); + _conf->set(RMV_IMPORTO, (imp_dare > ZERO ? imp_dare.string() : imp_avere.string())); + 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) + { + case 'S': + { + tipoc = " "; + gr = atoi(key.mid(1,2)); + co = atoi(key.mid(3,2)); + so = atoi(key.mid(5,3)); + } + break; + case 'C': + { + tipoc = "C"; + gr = ini.get_int("CLI_GRUPPO", "Mastri"); + 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); + } + return true; } bool THardy_movimenti::trasferisci() @@ -44,84 +134,68 @@ bool THardy_movimenti::trasferisci() TString_array lista_campi; ini.list_variables(lista_campi, true, "MOV", true); - TFilename outdir("C:"); - TConfig* conf = NULL; - int nrigac = 1; - int nrigai = 1; + TFilename outdir; + outdir = ini.get("PATH", "Main"); + TString80 listfiles = outdir; + listfiles << "\\ha*.ini"; + TString_array transactions; + list_files(listfiles, transactions); + FOR_EACH_ARRAY_ROW(transactions, row, name) + remove(*name); + + _conf = NULL; long ntran = 1L; - + TString paragraph; + THardy_iterator hi(this); while (++hi) { - if (conf != NULL) - delete conf; - conf = NULL; - TFilename temp(outdir); - - temp.format("%05ld", ntran++); - temp.ext("ini"); - if (temp.exist()) - temp.fremove(); - conf = new TConfig(temp); - conf->set_paragraph("Transaction"); - conf->set("Action","INSERT"); - conf->set("Mode", "AUTO"); - - conf->set_paragraph("23"); // testata movimento - - /* - const TString& key = get_str("IdConto"); - const long codcf = 0;//key2forn(key); - if (codcf > 0) + _kmovcont = recset.get("KMovconT").as_int(); + if (is_mov_iva()) { - rec.zero(); - rec.put(CLI_TIPOCF, "F"); - rec.put(CLI_CODCF, codcf); - - // contropartita - const TString16 key = get_str("IdContropartita"); - const int gr = atoi(key.mid(1,2)); - const int co = atoi(key.mid(3,2)); - const int so = atoi(key.mid(5,3)); - rec.put(CLI_GRUPPORIC, gr); - rec.put(CLI_CONTORIC, co); - rec.put(CLI_SOTTOCRIC, so); - - // ricerca comune - const TString8 cap = get_str("IdCap"); //cap - TString80 loc = get_str("Localita"); //località - const TString4 com = cap2comune(cap,loc); //codice comune - const TString4 stato = get_str("IdNazione"); //stato - - rec.put(CLI_CAPCF, cap); - if (com.full()) - { - rec.put(CLI_COMCF, com); //se riesce la CAP2COMUNE, inserisco il codice comune - loc = ""; - rec.put(CLI_LOCCF, loc); - } - else - { - rec.put(CLI_COMCF, com); - if (stato != "IT" && !stato.blank()) //altrimenti metto tutto nella località, eventualmente concatenando lo stato - loc << " - " << stato; - rec.put(CLI_LOCCF, loc); - } - aggiorna_record(rec, lista_campi); - test_write(clienti); + TString msg; + msg << TR("Movimento IVA ") << _kmovcont << " non generato"; + log(msg); } else { + if (_conf != NULL) + delete _conf; + _conf = NULL; + TFilename temp(outdir); + temp.add(format("ha%06ld", ntran++)); + temp.ext("ini"); + if (temp.exist()) + temp.fremove(); + _conf = new TConfig(temp); + _conf->set_paragraph("Transaction"); + _conf->set("Action","INSERT"); + _conf->set("Mode", "AUTO"); + paragraph.format("%d",LF_MOV); + _conf->set_paragraph(paragraph); // testata movimento + aggiorna_ini(*_conf, lista_campi); + // righe movimento + trasferisci_righe(); TString msg; - msg << TR("Impossibile determinare il codice del fornitore") << " '" << key << '\''; - log(msg); + msg << TR("Movimento contabile ") << _kmovcont << " generato nel file " << temp; + log(msg); } - */ - } - return write_enabled(); + if (_conf != NULL) + delete _conf; + if (yesno_box(FR("Si desidera confermare l'importazione di %ld movimenti"), ntran-1)) + { + TString app; + app << "cg2 -0 -i" << outdir << "/ha*.ini"; + TExternal_app primanota(app); + primanota.run(true); + } + return true; } +THardy_movimenti::THardy_movimenti(int anno) : _anno(anno) +{ +} /////////////////////////////////////////////////////////// // TConvMovimentiHardy_mask @@ -140,8 +214,7 @@ public: virtual ~TConvMovimentiHardy_mask(); }; - -// Funzione di tarsferimento dati da/verso file .ini con lo stesso nome della maschera +// Funzione di trasferimento dati da/verso file .ini con lo stesso nome della maschera // Andrebbe messo in libreria void TConvMovimentiHardy_mask::serialize(bool bSave) { @@ -182,7 +255,6 @@ void TConvMovimentiHardy_mask::trasferisci() book.add(log); rep_to_print = true; } - if (rep_to_print && book.pages() > 0) book.preview(); } @@ -207,7 +279,8 @@ TConvMovimentiHardy_mask::TConvMovimentiHardy_mask() : TAutomask("hacnv200a") } TConvMovimentiHardy_mask::~TConvMovimentiHardy_mask() -{ } +{ +} /////////////////////////////////////////////////////////// // TConvMovimentiHardy @@ -232,3 +305,4 @@ int hacnv200(int argc, char* argv[]) ih.run(argc, argv, APPNAME); return 0; } + diff --git a/ha/hacnvlib.cpp b/ha/hacnvlib.cpp index 231c8104e..c46fd8906 100755 --- a/ha/hacnvlib.cpp +++ b/ha/hacnvlib.cpp @@ -403,3 +403,56 @@ void THardy_transfer::aggiorna_record(TRectype& rec, const TString_array& lista_ } } } + +void THardy_transfer::aggiorna_ini(TConfig& conf, const TString_array& lista_campi) +{ + TString campo_dest, campo_orig, valore, str; + FOR_EACH_ARRAY_ROW(lista_campi,i,row) + { + row->get(0, campo_dest); + row->get(1, campo_orig); + if (campo_orig.full()) + { + if (campo_orig[0] == '_') + { + if (campo_orig.starts_with("_FISSO")) // valore fisso indicato in configurazione + { + valore = campo_orig.after(','); + valore.trim(); + } else + if (campo_orig.starts_with("_STREXPR")) // formato _STREXPR, espressione + { + TExpression expr(campo_orig.after(','), _strexpr); + for (int v = 0; v < expr.numvar(); v++) + { + const char* varname = expr.varname(v); + expr.setvar(v, get_str(varname)); + } + valore = expr.as_string(); + valore.trim(); + } else + if (campo_orig.starts_with("_TAB")) // formato _TAB,,, + { + TToken_string elabora(campo_orig, ','); + const TString4 tab = elabora.get(1); // tabella da leggere + const TString16 codtab = get_str(elabora.get()); + const TString16 campotab = elabora.get(); + valore = cache().get(tab, codtab, campotab); + } + else + if (campo_orig.starts_with("_TRADUCI")) + { + const TString80 campo = campo_orig.after(','); + const TString80 contenuto = get_str(campo); + TConfig& ini = config(); + valore = ini.get(contenuto,campo); + } + else + valore.cut(0); + } + else + valore = get_str(campo_orig); + conf.set(campo_dest, valore); + } + } +} diff --git a/ha/hacnvlib.h b/ha/hacnvlib.h index 2c2b56460..d4cd083e5 100755 --- a/ha/hacnvlib.h +++ b/ha/hacnvlib.h @@ -66,6 +66,7 @@ protected: THardy_transfer(); virtual bool trasferisci() pure; void aggiorna_record(TRectype& rec, const TString_array& lista_campi); + void aggiorna_ini(TConfig& conf, const TString_array& lista_campi); public: void init(const char* rh, const char* qh, THardy_log& log); diff --git a/ha/halib.cpp b/ha/halib.cpp index 4d7cfd2d3..e0f993632 100755 --- a/ha/halib.cpp +++ b/ha/halib.cpp @@ -442,3 +442,11 @@ long hd_key2cli(const TString& key) codcf = 0; return codcf; } + +// determina codice fornitore campo a partire da codice hardy in base alle regole dettatemi da Robbi + +long hd_key2forn(const TString& key) +{ + const long codcf = atol(key.mid(3,6)); + return codcf; +} \ No newline at end of file diff --git a/ha/halib.h b/ha/halib.h index 16c24e78b..635c15b67 100755 --- a/ha/halib.h +++ b/ha/halib.h @@ -219,3 +219,4 @@ const TString& hd_find_codag(long codcf); // Da cliente campo ad agente Hardy ( const TString& hd_format_date8(const TDate& data); const TString& hd_format_date6(const TDate& data); long hd_key2cli(const TString& key); +long hd_key2forn(const TString& key);