From 8653d3522ff7b8e3449d98b18058030d38ef1fd8 Mon Sep 17 00:00:00 2001 From: luca83 Date: Wed, 18 Mar 2009 15:23:56 +0000 Subject: [PATCH] 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 --- lv/lv2600.cpp | 87 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/lv/lv2600.cpp b/lv/lv2600.cpp index 8a87871b2..1c2473b7e 100755 --- a/lv/lv2600.cpp +++ b/lv/lv2600.cpp @@ -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