From 0b2bcfe6c9f83ec2eea0988d296971b9b85a326d Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 22 Sep 2014 13:56:52 +0000 Subject: [PATCH] Corretta importazione CBA git-svn-id: svn://10.65.10.50/branches/R_10_00@22996 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ps/ps0430400.cpp | 166 +++++++++++++++++++++++++++------------------- ps/ps0430400a.uml | 2 +- 2 files changed, 99 insertions(+), 69 deletions(-) diff --git a/ps/ps0430400.cpp b/ps/ps0430400.cpp index b8837a4ba..c6b42e4d5 100644 --- a/ps/ps0430400.cpp +++ b/ps/ps0430400.cpp @@ -256,6 +256,7 @@ bool TImport_app::importa_clienti(const TFilename& fname, const TString& cdc, TL TString rs1 = cli.get(6).as_string(); rs1.trim(); TString rs2 = cli.get(7).as_string(); rs2.trim(); + str.cut(0); if (rs2.blank()) { const int spc = rs1.find(' '); @@ -265,8 +266,7 @@ bool TImport_app::importa_clienti(const TFilename& fname, const TString& cdc, TL str.left_just(30); str << rs1.mid(spc+1); } - } - + } if (str.empty()) { str << rs1 << ' ' << rs2; @@ -417,6 +417,47 @@ const TString& TImport_app::get_periodo(const TCBA_recset& fat) const return get_tmp_string() = periodo; } +static bool save_doc(TDocumento& doc, long& ndocs, long& mindoc, long& maxdoc, TLog_report& log) +{ + const int err = doc.write(); + if (err == NOERR) + { + ndocs++; + maxdoc = doc.get_long(DOC_NDOC); + if (ndocs == 1) + mindoc = maxdoc; + } + else + { + TString str; + str.format("Impossibile registrare il documento %s/%ld", + (const char*)doc.get(DOC_CODNUM), maxdoc+1); + log.log(2, str); + } + return err == 0; +} + +static void save_rdoc_desc(const TString& desc, TRiga_documento& rdoc) +{ + if (desc.len() > 50) + { + TParagraph_string p(desc, 50); + rdoc.put(RDOC_DESCR, p.get()); + const int sep = p.find(p.separator()); + if (sep > 0) + { + rdoc.put(RDOC_DESCLUNGA, "X"); + TString tmp = p.mid(sep+1); + tmp.replace(p.separator(), ' '); + tmp.strip_double_spaces(); + tmp.insert("\n"); + rdoc.put(RDOC_DESCEST, tmp); + } + } + else + rdoc.put(RDOC_DESCR, desc); +} + bool TImport_app::importa_fatture(const TFilename& fname, const TString& codnum, const TString& cdc, TLog_report& log) const { TString str = TR("Importazione documenti"); @@ -438,6 +479,8 @@ bool TImport_app::importa_fatture(const TFilename& fname, const TString& codnum, TString periodo; TToken_string ospiti(256, '@'); + TDocumento* doc = NULL; + TProgind pi(fat.items(), str); for (bool ok = fat.move_first(); ok && done; ok = fat.move_next()) { @@ -449,6 +492,13 @@ bool TImport_app::importa_fatture(const TFilename& fname, const TString& codnum, if (tipo == 'T') { + if (doc != NULL) + { + save_doc(*doc, ndocs, mindoc, maxdoc, log); + delete doc; + doc = NULL; + } + TString80 cofi_paiv = fat.get(14).as_string(); cofi_paiv.trim(); cofi_paiv.upper(); codcf = find_clifo(cofi_paiv, clifo); @@ -496,46 +546,44 @@ bool TImport_app::importa_fatture(const TFilename& fname, const TString& codnum, str = codart; str << "|1"; const TString4 um = cache().get(LF_UMART, str, UMART_UM); - TDocumento doc('D', datadoc.year(), codnum, 0); - - doc.put(DOC_TIPOCF, 'C'); - doc.put(DOC_CODCF, codcf); - doc.put(DOC_DATADOC, datadoc); - doc.put(DOC_DOC1, ndoc); - doc.put(DOC_CODPAG, codpag); - doc.put(DOC_STATO, 1); - doc.put(DOC_CODCMS, cdc); - - TToken_string key; - key = "C"; - key.add(codcf); - key.add("N"); - TRecord_array nsban(key, LF_CFBAN); - if (nsban.rows() > 0) + if (doc == NULL) { - const TRectype& rec = nsban.row(1); - doc.put(DOC_CODABIP, rec.get(CFBAN_ABI)); - doc.put(DOC_CODCABP, rec.get(CFBAN_CAB)); - } + doc = new TDocumento('D', datadoc.year(), codnum, 0); + doc->put(DOC_TIPODOC, "F01"); + doc->put(DOC_STATO, 2); // Stampato + + doc->put(DOC_TIPOCF, 'C'); + doc->put(DOC_CODCF, codcf); + doc->put(DOC_DATADOC, datadoc); + doc->put(DOC_DOC1, ndoc); + doc->put(DOC_CODPAG, codpag); + doc->put(DOC_STATO, 1); + doc->put(DOC_CODCMS, cdc); + + TToken_string key; + key = "C"; + key.add(codcf); + key.add("N"); + TRecord_array nsban(key, LF_CFBAN); + if (nsban.rows() > 0) + { + const TRectype& rec = nsban.row(1); + doc->put(DOC_CODABIP, rec.get(CFBAN_ABI)); + doc->put(DOC_CODCABP, rec.get(CFBAN_CAB)); + } - key.add("V", 2); - TRecord_array vsban(key, LF_CFBAN); - if (vsban.rows() > 0) - { - const TRectype& rec = vsban.row(1); - doc.put(DOC_CODABIA, rec.get(CFBAN_ABI)); - doc.put(DOC_CODCABA, rec.get(CFBAN_CAB)); - doc.put(DOC_IBAN, rec.get(CFBAN_IBAN)); + key.add("V", 2); + TRecord_array vsban(key, LF_CFBAN); + if (vsban.rows() > 0) + { + const TRectype& rec = vsban.row(1); + doc->put(DOC_CODABIA, rec.get(CFBAN_ABI)); + doc->put(DOC_CODCABA, rec.get(CFBAN_CAB)); + doc->put(DOC_IBAN, rec.get(CFBAN_IBAN)); + } } - - if (doc.rows() == 0) // Nuovo documento - { - doc.put(DOC_TIPODOC, "F01"); - doc.put(DOC_STATO, 2); - doc.new_row("01"); - } - - TRiga_documento& rdoc = doc[doc.physical_rows()]; + + TRiga_documento& rdoc = doc->new_row("01"); rdoc.put(RDOC_CODART, codart); rdoc.put(RDOC_CODARTMAG, codart); rdoc.checked(true); @@ -556,39 +604,21 @@ bool TImport_app::importa_fatture(const TFilename& fname, const TString& codnum, sep = ", "; } } + save_rdoc_desc(desc, rdoc); - if (desc.len() > 50) + desc = fat.get(23).as_string(); + if (desc.full()) { - TParagraph_string p(desc, 50); - rdoc.put(RDOC_DESCR, p.get()); - const int sep = p.find(p.separator()); - if (sep > 0) - { - rdoc.put(RDOC_DESCLUNGA, "X"); - TString tmp = p.mid(sep+1); - tmp.replace(p.separator(), ' '); - tmp.strip_double_spaces(); - tmp.insert("\n"); - rdoc.put(RDOC_DESCEST, tmp); - } + TRiga_documento& rdesc = doc->new_row("05"); + save_rdoc_desc(desc, rdesc); } - else - rdoc.put(RDOC_DESCR, desc); + } - const int err = doc.write(); - if (err == NOERR) - { - ndocs++; - maxdoc = doc.get_long(DOC_NDOC); - if (ndocs == 1) - mindoc = maxdoc; - } - else - { - str.format("Impossibile registrare il documento %s/%ld alla riga %ld", - (const char*)codnum, ndoc, fat.current_row()+1); - log.log(2, str); - } + if (doc != NULL) + { + save_doc(*doc, ndocs, mindoc, maxdoc, log); + delete doc; + doc = NULL; } log.log(0, str.cut(0)); diff --git a/ps/ps0430400a.uml b/ps/ps0430400a.uml index a261f13c1..640115c25 100644 --- a/ps/ps0430400a.uml +++ b/ps/ps0430400a.uml @@ -26,7 +26,7 @@ END STRING F_NUM 4 BEGIN PROMPT 1 4 "Codice numerazione fatture " - USE %NUM + USE %NUM SELECT I1=2 INPUT CODTAB F_NUM DISPLAY "Codice" CODTAB DISPLAY "Descrizione@50" S0