From d699ef39722a07fa708c9c807f01fb81800aaede Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Tue, 30 Jul 2024 18:52:10 +0200 Subject: [PATCH] Patch level : 12.00 1326 Files correlati : ca0.exe cg0.exe ve0.exe Inivo a CRM Chiusura commesse fino all'anno --- src/include/postman.cpp | 124 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 113 insertions(+), 11 deletions(-) diff --git a/src/include/postman.cpp b/src/include/postman.cpp index 264f2cd4b..6b6a320b1 100755 --- a/src/include/postman.cpp +++ b/src/include/postman.cpp @@ -682,12 +682,13 @@ HIDDEN void odbc_send(const TString & dsn, int num, TAuto_token_string & elab_fi TODBC_recordset recset; TToken_string odbc_str(dsn.mid(5), ','); TString_array files; - TString_array keys; - TString_array values; TConfig ini(name); ini.set_paragraph("Transaction"); TString tr_type = ini.get("Action"); tr_type.upper(); TString main_file; + HIDDEN int __magic_find_tables = -2; + if (__magic_find_tables == -2) + __magic_find_tables = ini_get_bool(CONFIG_STUDIO, "Main", "MAGIC_FIND_TABLES"); main_file << num; db_op op = db_add; @@ -726,8 +727,6 @@ HIDDEN void odbc_send(const TString & dsn, int num, TAuto_token_string & elab_fi if (to_elab) { - keys.destroy(); - values.destroy(); ini.set_paragraph(*row); TTrec wrk(curr_file_num); int nfields = wrk.fields(); @@ -746,16 +745,115 @@ HIDDEN void odbc_send(const TString & dsn, int num, TAuto_token_string & elab_fi } else { - HIDDEN int __magic_find_tables = -2; - - if (__magic_find_tables == -2) - __magic_find_tables = ini_get_bool(CONFIG_STUDIO, "Main", "MAGIC_FIND_TABLES"); - if (__magic_find_tables) { - TString check_statement = "SELECT * FROM "; + // TString check_statement = "SELECT * FROM "; - check_statement << name << " LIMIT 1;"; +// check_statement << name << " LIMIT 1;"; + bool descr = false; + TString_array keyst; + TString_array valuest; + + for (int i = 0; i < nfields; i++) + { + TToken_string def = wrk.fielddef(i); + TString field(def.get(0)); + TFieldtypes t = (TFieldtypes)def.get_int(1); + TString str = ini.get(field); + + if (key.find(field) >= 0 && str.blank()) + { + ini.set_paragraph(main_file); + str = ini.get(field); + if (str.blank()) + str << rowkey.get(); + ini.set_paragraph(*row); + } + str = str.strip("\""); + if (key.find(field) >= 0 && str.blank()) + str << rowkey; // qui max + + if (curr_file_num == LF_RIGHEDOC) + { + if (field == RDOC_DESCR && str.len() > 50) + { + TString v; + TString add_fld; + TToken_string row("", '~'); + + add_fld = RDOC_DESCLUNGA; + v = "X"; + row = make_val(add_fld, _boolfld, recset.driver(), v); + valuest.add(row); + add_fld = RDOC_DESCEST; + row = make_val(add_fld, _alfafld, recset.driver(), str.smid(50)); + valuest.add(row); + str = str.sleft(50).trim(); + descr = true; + } + else + if (descr && (field == RDOC_DESCLUNGA || field == RDOC_DESCEST)) + continue; + } + + TToken_string row(make_val(field, t, recset.driver(), str), '~'); + + valuest.add(row); + } + int pos = key.find("|"); + + if (pos > 0) + key = key.left(pos); + pos = 0; + rowkey.restart(); + FOR_EACH_STR_TOKEN(key, field) + { + TString fld = field; + + if (fld.starts_with("UPPER")) + { + fld = fld.smid(7); + fld.rtrim(1); + fld << "_UPPER"; + } + else + { + pos = fld.find("["); + + if (pos > 0) + fld = fld.left(pos); + } + + TString str = ini.get(fld); + + if (str.blank()) + { + ini.set_paragraph(main_file); + str = ini.get(fld); + if (str.blank()) + str << rowkey.get(); + ini.set_paragraph(*row); + } + str = str.strip("\""); + + TToken_string def = wrk.fielddef(wrk.field(fld)); + TFieldtypes t = (TFieldtypes)def.get_int(1); + + if (pos > 0) + { + int start = atoi(field.mid(pos + 1)); + + pos = field.find(',', pos + 1); + str = str.smid(start, pos > 0 ? atoi(field.mid(pos + 1)) : 0); + fld << "_MID"; + } + + TToken_string row(make_val(fld, t, recset.driver(), str), '~'); + + keyst.add(row); + } + + TString check_statement = build_statement(recset, op, curr_file_num, name, keyst, valuest); err = recset.exec(check_statement); err = (abs(err) == SQL_NO_TABLE) ? 0 : 1; } @@ -776,7 +874,11 @@ HIDDEN void odbc_send(const TString & dsn, int num, TAuto_token_string & elab_fi else { bool descr = false; + TString_array keys; + TString_array values; + keys.destroy(); + values.destroy(); for (int i = 0; i < nfields; i++) { TToken_string def = wrk.fielddef(i);