Patch level : 10.0 patch 260

Files correlati     : lv2
Ricompilazione Demo : [ ]
Commento            :
Corretto salvataggio dei documenti creati
Corretta gestione scelta del comportamento da tenere in caso di doppia importazione


git-svn-id: svn://10.65.10.50/trunk@18554 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca83 2009-03-18 15:23:56 +00:00
parent c957154c8c
commit 8653d3522f

View File

@ -49,7 +49,7 @@ TAcquisizione_msk::TAcquisizione_msk():TAutomask("lv2600a")
/////////////////////////////////// ///////////////////////////////////
//classe TAcquisizione_cache //classe TAcquisizione_cache
class TAcquisizione_cache : TCache class TAcquisizione_cache : public TCache
{ {
TString4 _codnum, _tipodoc, _stato; TString4 _codnum, _tipodoc, _stato;
@ -66,7 +66,7 @@ public:
void TAcquisizione_cache::discarding(const THash_object* obj) void TAcquisizione_cache::discarding(const THash_object* obj)
{ {
TDocumento& doc = (TDocumento&)obj->obj(); TDocumento& doc = (TDocumento&)obj->obj();
doc.rewrite(); int err = doc.rewrite();
} }
//KEY2OBJ: metodo che sceglie il documento giusto da disco in modo da poterlo continuare, o lo crea se non c'è //KEY2OBJ: metodo che sceglie il documento giusto da disco in modo da poterlo continuare, o lo crea se non c'è
@ -76,19 +76,11 @@ TObject* TAcquisizione_cache::key2obj(const char* key)
const TDate datadoc = chiave.get(); const TDate datadoc = chiave.get();
const long codcf = chiave.get_long(); const long codcf = chiave.get_long();
TString query; TString query = "USE DOC KEY 2\n";
query<< "USE DOC KEY 2 SELECT STATO=#STATO\n"; query << "SELECT (TIPODOC=\"" << _tipodoc << "\" && STATO=" << _stato <<")\n";
for (int i = 0; i < 2; i++) query << "FROM TIPOCF=C CODCF=" << codcf << " PROVV=D ANNO=" << datadoc.year() << " DATADOC=" << datadoc << " CODNUM=" << _codnum << "\n";
{ query << "TO TIPOCF=C CODCF=" << codcf << " PROVV=D ANNO=" << datadoc.year() << " DATADOC=" << datadoc << " CODNUM=" << _codnum << "\n";
query << (i ? "TO" : "FROM") << " "
<< "TIPOCF=C CODCF=#CODCF ANNO=#ANNO DATADOC=#DATADOC CODNUM=#CODNUM\n";
}
TISAM_recordset rset(query); TISAM_recordset rset(query);
rset.set_var("#STATO", TVariant(_stato));
rset.set_var("#CODCF", codcf);
rset.set_var("#ANNO", long(datadoc.year()));
rset.set_var("#DATADOC", datadoc);
rset.set_var("#CODNUM", TVariant(_codnum));
TDocumento* doc = NULL; TDocumento* doc = NULL;
@ -100,7 +92,7 @@ TObject* TAcquisizione_cache::key2obj(const char* key)
doc->put(DOC_TIPODOC, _tipodoc); doc->put(DOC_TIPODOC, _tipodoc);
doc->put(DOC_STATO, _stato); doc->put(DOC_STATO, _stato);
doc->put(DOC_DATADOC, datadoc); doc->put(DOC_DATADOC, datadoc);
doc->put(DOC_TIPOCF, "C"); doc->put(DOC_TIPOCF, 'C');
doc->put(DOC_CODCF, codcf); doc->put(DOC_CODCF, codcf);
} }
return doc; return doc;
@ -119,7 +111,7 @@ TAcquisizione_cache::TAcquisizione_cache() : TCache(17)
{ {
TConfig cfg(CONFIG_DITTA, "lv"); TConfig cfg(CONFIG_DITTA, "lv");
_codnum = cfg.get("NUM_RIT", NULL, 0); _codnum = cfg.get("NUM_RIT", NULL, 0);
_tipodoc = cfg.get("TIPOOC_RIT", NULL, 0); _tipodoc = cfg.get("TIPODOC_RIT", NULL, 0);
_stato = cfg.get("STATO_RIT", NULL, 0); _stato = cfg.get("STATO_RIT", NULL, 0);
} }
@ -132,6 +124,8 @@ class TAcquisizione_lavanderie_app : public TSkeleton_application
{ {
TAcquisizione_msk* _msk; TAcquisizione_msk* _msk;
protected: protected:
virtual bool create(); virtual bool create();
virtual bool destroy(); virtual bool destroy();
@ -157,7 +151,7 @@ bool TAcquisizione_lavanderie_app::create()
//DESTROY: metodo distruttore //DESTROY: metodo distruttore
bool TAcquisizione_lavanderie_app::destroy() bool TAcquisizione_lavanderie_app::destroy()
{ {
delete _msk; delete _msk;
return TApplication::destroy(); return TApplication::destroy();
} }
@ -166,6 +160,8 @@ void TAcquisizione_lavanderie_app::elabora_file(const TString& file, bool new_fi
{ {
TAcquisizione_cache ca; TAcquisizione_cache ca;
bool sovrascrivi = true;
TAssoc_array deleted_docs;
//scandisco il file //scandisco il file
TScanner s(file); TScanner s(file);
while (s.ok()) while (s.ok())
@ -223,25 +219,44 @@ void TAcquisizione_lavanderie_app::elabora_file(const TString& file, bool new_fi
bool found = false; bool found = false;
TDocumento& doc = ca.doc(datadoc,codcf); TDocumento& doc = ca.doc(datadoc,codcf);
//cerco se esiste già una riga sul documento selezionato per quell'articolo;
//se la trovo sommo la quantità appena letta a quella già esistente, //se sto elaborando un nuovo file, ma i documenti che sto importando esistono già, chiedi cosa devo fare
//altrimenti creo una nuova riga documento
if (doc.rows() > 0 && new_file) if (doc.rows() > 0 && new_file)
{ {
if (!yesno_box(TR("ATTENZIONE: il documento che si sta importando esiste già!\nSi desidera continuare?"))) KEY k = yesnocancel_box(TR("ATTENZIONE: il documento che si sta importando esiste già! Si desidera continuare?\n"
return; "Premendo SI il documento verrà sovracsritto;\n"
else if (yesno_box(TR("ATTENZIONE: Si desidera sovrascrivere il documento esistente(rispondendo NO le quantità verranno sommate a quelle esistenti)?"))) "Premendo NO le quantità verranno sommate a quelle esistenti\n"
doc.destroy_rows(); "Premendo CANCEL il file verrà ignorato"));
switch (k)
{
case K_YES: sovrascrivi = true; break;
case K_NO: sovrascrivi = false; break;
default: return;
}
}
//se voglio sovrascrivere i file, e non l'ho mai cancellato, allora svuotalo effettivamente
const TString8 numdoc = doc.get(DOC_NDOC);
if (sovrascrivi && !deleted_docs.is_key(numdoc))
{
doc.destroy_rows();
deleted_docs.add(numdoc, numdoc);
} }
for (int i = 1; i <= doc.rows(); i++) for (int i = 1; i <= doc.rows(); i++)
{ {
//cerco se esiste già una riga sul documento selezionato per quell'articolo;
//se la trovo sommo la quantità appena letta a quella già esistente,
//altrimenti creo una nuova riga documento
TRiga_documento& rdoc = doc[i]; TRiga_documento& rdoc = doc[i];
if (rdoc.get(RDOC_CODART) == codart) TString80 codart_doc = rdoc.get(RDOC_CODART);
codart_doc.trim();
if (codart_doc == codart.trim())
{ {
long qtardoc = rdoc.get_long(RDOC_QTA); long qtardoc = rdoc.get_long(RDOC_QTAGG1);
qtardoc += qta; qtardoc += qta;
rdoc.put(RDOC_QTA,qtardoc); rdoc.put(RDOC_QTAGG1,qtardoc);
found = true; found = true;
break; break;
} }
@ -249,12 +264,20 @@ void TAcquisizione_lavanderie_app::elabora_file(const TString& file, bool new_fi
if (found == false) if (found == false)
{ {
TRiga_documento& rdoc = doc.new_row("01"); const TRectype& anamag = cache().get(LF_ANAMAG, codart);
rdoc.put(RDOC_CODART,codart);
rdoc.put(RDOC_QTA,qta); TRiga_documento& rdoc = doc.new_row("22");
rdoc.put(RDOC_CODART, codart);
rdoc.put(RDOC_DESCR, anamag.get(ANAMAG_DESCR));
rdoc.put(RDOC_CODARTMAG, codart);
rdoc.put(RDOC_CHECKED, 'X');
rdoc.put(RDOC_QTAGG1, qta);
rdoc.put(RDOC_QTA, rotti);
} }
new_file = false; new_file = false;
} }
ca.destroy();
deleted_docs.destroy();
} }
//TRANSFER: metodo che scorre i campi nome e, se sono pieni, richiama il metodo //TRANSFER: metodo che scorre i campi nome e, se sono pieni, richiama il metodo