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 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));

View File

@ -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