Corretta importazione CBA

git-svn-id: svn://10.65.10.50/branches/R_10_00@22996 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2014-09-22 13:56:52 +00:00
parent d7420fdb0c
commit 0b2bcfe6c9
2 changed files with 99 additions and 69 deletions

View File

@ -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 rs1 = cli.get(6).as_string(); rs1.trim();
TString rs2 = cli.get(7).as_string(); rs2.trim(); TString rs2 = cli.get(7).as_string(); rs2.trim();
str.cut(0);
if (rs2.blank()) if (rs2.blank())
{ {
const int spc = rs1.find(' '); const int spc = rs1.find(' ');
@ -266,7 +267,6 @@ bool TImport_app::importa_clienti(const TFilename& fname, const TString& cdc, TL
str << rs1.mid(spc+1); str << rs1.mid(spc+1);
} }
} }
if (str.empty()) if (str.empty())
{ {
str << rs1 << ' ' << rs2; str << rs1 << ' ' << rs2;
@ -417,6 +417,47 @@ const TString& TImport_app::get_periodo(const TCBA_recset& fat) const
return get_tmp_string() = periodo; 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 bool TImport_app::importa_fatture(const TFilename& fname, const TString& codnum, const TString& cdc, TLog_report& log) const
{ {
TString str = TR("Importazione documenti"); TString str = TR("Importazione documenti");
@ -438,6 +479,8 @@ bool TImport_app::importa_fatture(const TFilename& fname, const TString& codnum,
TString periodo; TString periodo;
TToken_string ospiti(256, '@'); TToken_string ospiti(256, '@');
TDocumento* doc = NULL;
TProgind pi(fat.items(), str); TProgind pi(fat.items(), str);
for (bool ok = fat.move_first(); ok && done; ok = fat.move_next()) 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 (tipo == 'T')
{ {
if (doc != NULL)
{
save_doc(*doc, ndocs, mindoc, maxdoc, log);
delete doc;
doc = NULL;
}
TString80 cofi_paiv = fat.get(14).as_string(); TString80 cofi_paiv = fat.get(14).as_string();
cofi_paiv.trim(); cofi_paiv.upper(); cofi_paiv.trim(); cofi_paiv.upper();
codcf = find_clifo(cofi_paiv, clifo); codcf = find_clifo(cofi_paiv, clifo);
@ -496,15 +546,19 @@ bool TImport_app::importa_fatture(const TFilename& fname, const TString& codnum,
str = codart; str << "|1"; str = codart; str << "|1";
const TString4 um = cache().get(LF_UMART, str, UMART_UM); const TString4 um = cache().get(LF_UMART, str, UMART_UM);
TDocumento doc('D', datadoc.year(), codnum, 0); if (doc == NULL)
{
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_TIPOCF, 'C');
doc.put(DOC_CODCF, codcf); doc->put(DOC_CODCF, codcf);
doc.put(DOC_DATADOC, datadoc); doc->put(DOC_DATADOC, datadoc);
doc.put(DOC_DOC1, ndoc); doc->put(DOC_DOC1, ndoc);
doc.put(DOC_CODPAG, codpag); doc->put(DOC_CODPAG, codpag);
doc.put(DOC_STATO, 1); doc->put(DOC_STATO, 1);
doc.put(DOC_CODCMS, cdc); doc->put(DOC_CODCMS, cdc);
TToken_string key; TToken_string key;
key = "C"; key = "C";
@ -514,8 +568,8 @@ bool TImport_app::importa_fatture(const TFilename& fname, const TString& codnum,
if (nsban.rows() > 0) if (nsban.rows() > 0)
{ {
const TRectype& rec = nsban.row(1); const TRectype& rec = nsban.row(1);
doc.put(DOC_CODABIP, rec.get(CFBAN_ABI)); doc->put(DOC_CODABIP, rec.get(CFBAN_ABI));
doc.put(DOC_CODCABP, rec.get(CFBAN_CAB)); doc->put(DOC_CODCABP, rec.get(CFBAN_CAB));
} }
key.add("V", 2); key.add("V", 2);
@ -523,19 +577,13 @@ bool TImport_app::importa_fatture(const TFilename& fname, const TString& codnum,
if (vsban.rows() > 0) if (vsban.rows() > 0)
{ {
const TRectype& rec = vsban.row(1); const TRectype& rec = vsban.row(1);
doc.put(DOC_CODABIA, rec.get(CFBAN_ABI)); doc->put(DOC_CODABIA, rec.get(CFBAN_ABI));
doc.put(DOC_CODCABA, rec.get(CFBAN_CAB)); doc->put(DOC_CODCABA, rec.get(CFBAN_CAB));
doc.put(DOC_IBAN, rec.get(CFBAN_IBAN)); doc->put(DOC_IBAN, rec.get(CFBAN_IBAN));
}
} }
if (doc.rows() == 0) // Nuovo documento TRiga_documento& rdoc = doc->new_row("01");
{
doc.put(DOC_TIPODOC, "F01");
doc.put(DOC_STATO, 2);
doc.new_row("01");
}
TRiga_documento& rdoc = doc[doc.physical_rows()];
rdoc.put(RDOC_CODART, codart); rdoc.put(RDOC_CODART, codart);
rdoc.put(RDOC_CODARTMAG, codart); rdoc.put(RDOC_CODARTMAG, codart);
rdoc.checked(true); rdoc.checked(true);
@ -556,39 +604,21 @@ bool TImport_app::importa_fatture(const TFilename& fname, const TString& codnum,
sep = ", "; sep = ", ";
} }
} }
save_rdoc_desc(desc, rdoc);
if (desc.len() > 50) desc = fat.get(23).as_string();
if (desc.full())
{ {
TParagraph_string p(desc, 50); TRiga_documento& rdesc = doc->new_row("05");
rdoc.put(RDOC_DESCR, p.get()); save_rdoc_desc(desc, rdesc);
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);
const int err = doc.write(); if (doc != NULL)
if (err == NOERR)
{ {
ndocs++; save_doc(*doc, ndocs, mindoc, maxdoc, log);
maxdoc = doc.get_long(DOC_NDOC); delete doc;
if (ndocs == 1) doc = NULL;
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);
}
} }
log.log(0, str.cut(0)); log.log(0, str.cut(0));

View File

@ -26,7 +26,7 @@ END
STRING F_NUM 4 STRING F_NUM 4
BEGIN BEGIN
PROMPT 1 4 "Codice numerazione fatture " PROMPT 1 4 "Codice numerazione fatture "
USE %NUM USE %NUM SELECT I1=2
INPUT CODTAB F_NUM INPUT CODTAB F_NUM
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0