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:
parent
c957154c8c
commit
8653d3522f
@ -49,7 +49,7 @@ TAcquisizione_msk::TAcquisizione_msk():TAutomask("lv2600a")
|
||||
///////////////////////////////////
|
||||
|
||||
//classe TAcquisizione_cache
|
||||
class TAcquisizione_cache : TCache
|
||||
class TAcquisizione_cache : public TCache
|
||||
{
|
||||
TString4 _codnum, _tipodoc, _stato;
|
||||
|
||||
@ -66,7 +66,7 @@ public:
|
||||
void TAcquisizione_cache::discarding(const THash_object* 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'è
|
||||
@ -76,19 +76,11 @@ TObject* TAcquisizione_cache::key2obj(const char* key)
|
||||
const TDate datadoc = chiave.get();
|
||||
const long codcf = chiave.get_long();
|
||||
|
||||
TString query;
|
||||
query<< "USE DOC KEY 2 SELECT STATO=#STATO\n";
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
query << (i ? "TO" : "FROM") << " "
|
||||
<< "TIPOCF=C CODCF=#CODCF ANNO=#ANNO DATADOC=#DATADOC CODNUM=#CODNUM\n";
|
||||
}
|
||||
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));
|
||||
TString query = "USE DOC KEY 2\n";
|
||||
query << "SELECT (TIPODOC=\"" << _tipodoc << "\" && STATO=" << _stato <<")\n";
|
||||
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";
|
||||
TISAM_recordset rset(query);
|
||||
|
||||
TDocumento* doc = NULL;
|
||||
|
||||
@ -100,7 +92,7 @@ TObject* TAcquisizione_cache::key2obj(const char* key)
|
||||
doc->put(DOC_TIPODOC, _tipodoc);
|
||||
doc->put(DOC_STATO, _stato);
|
||||
doc->put(DOC_DATADOC, datadoc);
|
||||
doc->put(DOC_TIPOCF, "C");
|
||||
doc->put(DOC_TIPOCF, 'C');
|
||||
doc->put(DOC_CODCF, codcf);
|
||||
}
|
||||
return doc;
|
||||
@ -119,7 +111,7 @@ TAcquisizione_cache::TAcquisizione_cache() : TCache(17)
|
||||
{
|
||||
TConfig cfg(CONFIG_DITTA, "lv");
|
||||
_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);
|
||||
}
|
||||
|
||||
@ -131,6 +123,8 @@ TAcquisizione_cache::TAcquisizione_cache() : TCache(17)
|
||||
class TAcquisizione_lavanderie_app : public TSkeleton_application
|
||||
{
|
||||
TAcquisizione_msk* _msk;
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
virtual bool create();
|
||||
@ -156,8 +150,8 @@ bool TAcquisizione_lavanderie_app::create()
|
||||
|
||||
//DESTROY: metodo distruttore
|
||||
bool TAcquisizione_lavanderie_app::destroy()
|
||||
{
|
||||
delete _msk;
|
||||
{
|
||||
delete _msk;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
@ -166,6 +160,8 @@ void TAcquisizione_lavanderie_app::elabora_file(const TString& file, bool new_fi
|
||||
{
|
||||
TAcquisizione_cache ca;
|
||||
|
||||
bool sovrascrivi = true;
|
||||
TAssoc_array deleted_docs;
|
||||
//scandisco il file
|
||||
TScanner s(file);
|
||||
while (s.ok())
|
||||
@ -223,25 +219,44 @@ void TAcquisizione_lavanderie_app::elabora_file(const TString& file, bool new_fi
|
||||
bool found = false;
|
||||
|
||||
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,
|
||||
//altrimenti creo una nuova riga documento
|
||||
|
||||
//se sto elaborando un nuovo file, ma i documenti che sto importando esistono già, chiedi cosa devo fare
|
||||
if (doc.rows() > 0 && new_file)
|
||||
{
|
||||
if (!yesno_box(TR("ATTENZIONE: il documento che si sta importando esiste già!\nSi desidera continuare?")))
|
||||
return;
|
||||
else if (yesno_box(TR("ATTENZIONE: Si desidera sovrascrivere il documento esistente(rispondendo NO le quantità verranno sommate a quelle esistenti)?")))
|
||||
doc.destroy_rows();
|
||||
KEY k = yesnocancel_box(TR("ATTENZIONE: il documento che si sta importando esiste già! Si desidera continuare?\n"
|
||||
"Premendo SI il documento verrà sovracsritto;\n"
|
||||
"Premendo NO le quantità verranno sommate a quelle esistenti\n"
|
||||
"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++)
|
||||
{
|
||||
//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];
|
||||
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;
|
||||
rdoc.put(RDOC_QTA,qtardoc);
|
||||
rdoc.put(RDOC_QTAGG1,qtardoc);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
@ -249,12 +264,20 @@ void TAcquisizione_lavanderie_app::elabora_file(const TString& file, bool new_fi
|
||||
|
||||
if (found == false)
|
||||
{
|
||||
TRiga_documento& rdoc = doc.new_row("01");
|
||||
rdoc.put(RDOC_CODART,codart);
|
||||
rdoc.put(RDOC_QTA,qta);
|
||||
const TRectype& anamag = cache().get(LF_ANAMAG, codart);
|
||||
|
||||
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;
|
||||
}
|
||||
ca.destroy();
|
||||
deleted_docs.destroy();
|
||||
}
|
||||
|
||||
//TRANSFER: metodo che scorre i campi nome e, se sono pieni, richiama il metodo
|
||||
|
Loading…
x
Reference in New Issue
Block a user