diff --git a/lv/lv2400.cpp b/lv/lv2400.cpp index 6945d1489..4b6749aea 100755 --- a/lv/lv2400.cpp +++ b/lv/lv2400.cpp @@ -5,12 +5,13 @@ #include "lvlib.h" #include "../ve/velib.h" +#include "../ve/rcondv.h" #include "doc.h" -#include "rdoc.h" #include "lvcondv.h" #include "lvrcondv.h" #include "lvrconsplan.h" +#include "rdoc.h" #include "lv2400a.h" @@ -158,6 +159,7 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep //creo il documento corretto riempiendo i campi che già conosco TDocumento doc('D',anno,codnum,0); doc.put(DOC_TIPODOC, tpdoc); + doc.write(); //calcola tutte le quantità riportate sui documenti di ritiro, sui documenti di anticipo e sulle bolle di consegna //...eventualmente modificate a mano @@ -204,7 +206,7 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep } if (doc.rows() > 0) - err = doc.write(); + err = doc.rewrite(); else doc.remove(); @@ -249,14 +251,6 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, keyrcont.add(codart); //instanzio una cache sulla tabella delle righe contratti const TRectype& rcont = cache().get(LF_LVRCONDV,keyrcont); - - //se il record è vuoto aggiorno il log - if (rcont.empty()) - { - TString str; - str << "L'articolo " << codart << "non è prsente sul contratto del cliente " << codcli; - rep.log(1, str); - } //recupero i dati di interesse dalla riga del contratto bool arrot; @@ -308,11 +302,70 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, //elaborazione sul prezzo da utilizzare real prezzo; - //elaborazione per il prezzo: o lo prendo dalle righe contratto, o dall'anagrafica magazzino - if (tplis == 0) - prezzo = rcont.get_real(LVRCONDV_PREZZO); + + if (rcont.empty()) + { + //PROPONI PREZZO + TToken_string key; + key.add('C'); + key.add(codcli); + const TRectype& cfven = cache().get(LF_CFVEN, key); + + bool trvlst = false; + + if (!cfven.empty()) + { + //se è settata la categoria merceologica, leggo sia il listino che la cat merc, altrimenti solo il listino + TString8 codlis = cfven.get(CFV_CODLIST); + TString8 catven; + TConfig* configve = new TConfig(CONFIG_DITTA,"ve"); + const char gesliscv = configve->get_char("GESLISCV"); + if (gesliscv != 'X') + catven = ""; + else + catven = cfven.get(CFV_CATVEN); + + //cerco il prezzo sul listino + key.cut(0); + key.add('L'); //tipo + key.add(catven); //catven + key.add(""); //tipocf + key.add(""); //codcf + key.add(codlis); //codlis + key.add('A'); //tiporiga + key.add(codart); //codriga + key.add(""); //um + key.add(""); //nscagl + const TRectype& rcondv = cache().get(LF_RCONDV, key); + + if (!rcondv.empty()) + { + prezzo = rcondv.get_real(RCONDV_PREZZO); + trvlst = true; + } + } + + //se non ho trovato un listino, o se non c'è un listino impostato + //propongo come prezzo il valore convenzionale + if (!trvlst) + { + key.cut(0); + key.add(codart); + key.add(1); + const TRectype& umart = cache().get(LF_UMART, key); + prezzo = umart.get_real(UMART_PREZZO); + if (umart.get(UMART_PREZZO).full()) + trvlst = true; + } + } else - prezzo = anamag.get_real(ANAMAG_COSTSTD); + { + //elaborazione per il prezzo: o lo prendo dalle righe contratto, o dall'anagrafica magazzino + if (tplis == 0) + prezzo = rcont.get_real(LVRCONDV_PREZZO); + else + prezzo = anamag.get_real(ANAMAG_COSTSTD); + } rdoc.put(RDOC_CODART,codart); rdoc.put(RDOC_CODARTMAG,codart); @@ -320,7 +373,7 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, if (prinbo) { if (!tmp) - rdoc.put(RDOC_PREZZO,rcont.get_real(LVRCONDV_PREZZO)); + rdoc.put(RDOC_PREZZO, prezzo); else //per adesso per questo ramo non ci passa mai, perchè non sappiamo come gestire le dotazioni temporanee rdoc.put(RDOC_PREZZO,rcont.get_real(LVRCONDV_PRZDTTMP)); rdoc.put(RDOC_SCONTO,rcont.get(LVRCONDV_SCONTPERC)); //sconto @@ -335,6 +388,17 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, rdoc.put(RDOC_CODMAG, magazzino); rdoc.put(RDOC_CODMAGC, magazzinoc); + + //se il record di riga contratto è vuoto aggiorno il log + if (rcont.empty()) + { + TString str; + str << "L'articolo " << codart << " inserito nel documento " << doc.get(DOC_CODNUM) << "-" << doc.get(DOC_TIPODOC) + << " numero " << doc.get(DOC_NDOC) << " in quantità " << quantita_arr + << "non è prsente sul contratto del cliente " << codcli; + rep.log(1, str); + } + } ////////////////////////////////////////////////////////////// @@ -739,8 +803,6 @@ bool TGenera_documenti_app::transfer() docritiri.set_var("#DADATA", dadatacons); docritiri.set_var("#ADATA", adatacons); - int cazzone = docritiri.items(); - TProgind pi(docritiri.items(), TR("Generazione documenti in corso..."), true, true); for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next()) @@ -780,7 +842,7 @@ bool TGenera_documenti_app::transfer() TISAM_recordset plan(query); - if (plan.move_first()) + if (plan.move_to(1)) { _quantita.destroy(); _quantita_ritirata.destroy();