diff --git a/lv/lv1200.cpp b/lv/lv1200.cpp index ef97cd7ac..3e07df195 100755 --- a/lv/lv1200.cpp +++ b/lv/lv1200.cpp @@ -4,6 +4,7 @@ #include #include +#include "lvlib.h" #include "lv1200a.h" #include "../ve/velib.h" @@ -26,64 +27,73 @@ bool TStampa_a_kg_msk::on_field_event(TOperable_field& o, TField_event e, long j return true; } -/* /////////////////////////////////////////////////////////// -// TStampa_a_kg_set +// TStampa_a_kg_rep /////////////////////////////////////////////////////////// -class TStampa_a_kg_set : public TISAM_recordset +class TStampa_a_kg_rep : public TReport { protected: - static bool status_filter(const TRelation* rel); - virtual void set_custom_filter(TCursor& cursor) const; - -public: - TStampa_a_kg_set(const TMask& mask); + virtual bool get_usr_val(const TString& name, TVariant& var) const; }; -// Accetta solo i documenti stampabili in definitivo -bool TStampa_a_kg_set::status_filter(const TRelation* rel) +bool TStampa_a_kg_rep::get_usr_val(const TString& name, TVariant& var) const { - const TRectype& doc = rel->curr(); - const char stato_attuale = doc.get_char(DOC_STATO); - if (stato_attuale <= ' ') - return true; + var = 0; + if (name == "#PESO") + { + const TRecordset& recset = *recordset(); + const TString4 umkg = ini_get_string(CONFIG_DITTA, "lv", "UmKg"); + const TString4 umri = recset.get(RDOC_UMQTA).as_string(); + //se la riga è già espressa in kg non devo fare niente + if(umri == umkg) + var = recset.get(RDOC_QTA); + // altrimenti + else + { + // istanzio un TArticolo_lavanderie. serve?? + const TString80 codart = recset.get(RDOC_CODART).as_string(); + TArticolo_lavanderie artlav(codart); + //leggo e controllo l'unità di misura del peso + //leggo e controllo il peso dell'articolo + const TString4 ump = artlav.get(ANAMAG_UMP); + const real peso = artlav.get_real(ANAMAG_PESO); + if (!ump.empty() && peso!=ZERO) + { + //leggo l'unità di misura dell'articolo e la quantità convertita all'unità di misura dell'articolo + const TString4 umart = artlav.um()[0].get(UMART_UM); + const real qta = artlav.convert_to_um(recset.get(RDOC_QTA).as_real(), umart, umri, false); - const TTipo_documento& tipo = cached_tipodoc(doc.get(DOC_TIPODOC)); - if (stato_attuale == tipo.stato_finale_stampa()) - return false; - - const TString& stati_stampa = tipo.stati_iniziali_stampa(); - return stati_stampa.blank() || stati_stampa.find(stato_attuale) >= 0; + //se l'articolo non è espresso in kg, allora: + if(umart != umkg) + { + //preparo una cache sulla tabella delle unità di misura + const TRectype& unita = cache().get("%UMS", umart); + //leggo e controllo se esiste l'unità di misura di riferimento + const TString4 umrif = unita.get("S7"); + if(umrif.empty()) + { + if(umrif == umkg) + { + //leggo e controllo il fattore di conversione + const real fatconv = unita.get_real("R10"); + if (fatconv != ZERO) + { + //se tutti i controlli sono andati a buon fine, converto la quantità e la restituisco + const real qtaconv = qta * fatconv * peso; + var = qtaconv; + } + } + } + } + } + } + return true; + } + else + return TReport::get_usr_val(name, var); } -void TStampa_a_kg_set::set_custom_filter(TCursor& cursor) const -{ - cursor.set_filterfunction(status_filter); -} - -TStampa_a_kg_set::TStampa_a_kg_set(const TMask& mask) : TISAM_recordset("USE DOC") -{ - const TDate data_from = mask.get_date(F_DATA_FROM); - TString query = "USE DOC \n" - "SELECT (BETWEEN(DATADOC,#DATA_FROM,#DATA_TO))" - "&&(BETWEEN(CODCF,#CODCF_FROM,#CODCF_TO))" - "&&(BETWEEN(G1:CODITI,#CODITI_FROM,#CODITI_TO))\n" - "JOIN CLIFO INTO TIPOCF=='C' CODCF==CODCF\n" - "JOIN %STD INTO CODTAB==STATO\n" - ; - query << "FROM PROVV=\"D\" ANNO=" << data_from.year() << " CODNUM=\"" << mask.get(F_CODNUM) << "\"\n" - << "TO PROVV=\"D\" ANNO=" << data_from.year() << " CODNUM=\"" << mask.get(F_CODNUM) << "\"\n"; - set(query); - //inserire parametri filtri - set_var("#DATA_FROM", data_from); - set_var("#DATA_TO", mask.get_date(F_DATA_TO)); - set_var("#CODCF_FROM", TVariant(mask.get(F_CODCF_FROM))); - set_var("#CODCF_TO", TVariant(mask.get(F_CODCF_TO))); - set_var("#CODITI_FROM", TVariant(mask.get(F_CODITI_FROM))); - set_var("#CODITI_TO", TVariant(mask.get(F_CODITI_TO))); -} -*/ /////////////////////////////////////////////////////////// // TStampa_a_kg_app /////////////////////////////////////////////////////////// @@ -96,10 +106,9 @@ protected: virtual bool create(); virtual bool destroy(); - TISAM_recordset prepara_recordset() const; + TISAM_recordset* prepara_recordset() const; public: - bool transfer(); virtual void main_loop(); }; @@ -118,7 +127,7 @@ bool TStampa_a_kg_app::destroy() } //PREPARA_RECORDSET: metodo che estre tutte le righe documento in base ai criteri selezionati -TISAM_recordset TStampa_a_kg_app::prepara_recordset() const +TISAM_recordset* TStampa_a_kg_app::prepara_recordset() const { const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN"); @@ -134,56 +143,82 @@ TISAM_recordset TStampa_a_kg_app::prepara_recordset() const TString query; query << "USE RDOC\n"; if(datadog) - query << "SELECT (BETWEEN(DATADOC,#DADATA,#ADATA))"; + query << "SELECT (BETWEEN(33.DATADOC,#DADATA,#ADATA))"; else query << "SELECT (BETWEEN(33.G1:DATAGEN,#DADATA,#ADATA))"; - query << "&&(33.TIPOCF=\"C\")"; + query << "&&(TIPORIGA==\"21\")&&(33.TIPOCF=\"C\")"; switch(raggruppa) { - case 1: query << "&&(BETWEEN(33.CODCF,#DACODCF,#ACODCF))\nBY 33.CODCF CODART\n"; break; - case 2: query << "&&(BETWEEN(33.G1:CODITI,#DAITI,#AITI)\nBY 33.G1:CODITI CODART\n"; break; - case 3: query << "&&(BETWEEN(33.CODAG,#DAAUT,#AAUT)\nBY 33.CODAG CODART\n"; break; - default: query << "\nBY CODART\n"; break; + case 1: query << "&&(BETWEEN(33.CODCF,#DACODCF,#ACODCF))\nBY 33.CODCF CODART\n"; break; + case 2: query << "&&(BETWEEN(33.G1:CODITI,#DAITI,#AITI)\nBY 33.G1:CODITI CODART\n"; break; + case 3: query << "&&(BETWEEN(33.CODAG,#DAAUT,#AAUT)\nBY 33.CODAG CODART\n"; break; + default: query << "\nBY CODART\n"; break; } query << "JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n" - << "FROM CODNUM=" << codnum << " ANNO=" << daanno << " PROVV=D\n" - << "TO CODNUM=" << codnum << " ANNO=" << aanno << " PROVV=D\n"; + << "JOIN ANAMAG INTO CODART==CODART\n" + //<< "FROM CODNUM=" << codnum << " ANNO=" << daanno << " PROVV=\"D\"\n" + //<< "FROM CODNUM=#CODNUM ANNO=#DAANNO PROVV=\"D\"\n" + //<< "TO CODNUM=#CODNUM ANNO=#AANNO PROVV=\"D\"\n"; + << "FROM CODNUM=#CODNUM\n" + << "TO CODNUM=#CODNUM\n"; - TISAM_recordset righedoc(query); - righedoc.set_var("#DADATA", dadata); - righedoc.set_var("#ADATA", adata); + TISAM_recordset* righedoc = new TISAM_recordset(query); + righedoc->set_var("#DADATA", dadata); + righedoc->set_var("#ADATA", adata); + righedoc->set_var("#CODNUM", codnum); + //righedoc.set_var("#DAANNO", daanno); + //righedoc.set_var("#AANNO", aanno); switch(raggruppa) { case 1: - righedoc.set_var("#DACODCF", _msk->get_long(F_DACODCF)); - righedoc.set_var("#ACODCF", _msk->get_long(F_ACODCF)); + righedoc->set_var("#DACODCF", _msk->get_long(F_DACODCF)); + righedoc->set_var("#ACODCF", _msk->get_long(F_ACODCF)); break; case 2: - righedoc.set_var("#DAITI", _msk->get_long(F_DACODITI)); - righedoc.set_var("#AITI", _msk->get_long(F_ACODITI)); + righedoc->set_var("#DAITI", _msk->get_long(F_DACODITI)); + righedoc->set_var("#AITI", _msk->get_long(F_ACODITI)); break; case 3: - righedoc.set_var("#DAAUT", _msk->get_long(F_DACODAUT)); - righedoc.set_var("#AAUT", _msk->get_long(F_ACODAUT)); + righedoc->set_var("#DAAUT", _msk->get_long(F_DACODAUT)); + righedoc->set_var("#AAUT", _msk->get_long(F_ACODAUT)); break; default: break; } return righedoc; } -//TRANSFER: metodo principale dell'elaborazione, che non deve fare niente -//perchè viene tutto gestito nella maschera -bool TStampa_a_kg_app::transfer() -{ - TISAM_recordset righedoc = prepara_recordset(); - return true; -} - void TStampa_a_kg_app::main_loop() { while (_msk->run() == K_ENTER) - transfer(); - } + { + TISAM_recordset* righedoc = prepara_recordset(); + TStampa_a_kg_rep rep; + const int raggruppa = _msk->get_int(F_RAGX); + bool ok; + switch (raggruppa) + { + case '1': + ok = rep.load("lv1200b"); + break; + case '2': + ok = rep.load("lv1200c"); + break; + case '3': + ok = rep.load("lv1200d"); + break; + default: + ok = rep.load("lv1200e"); + break; + } + if (ok) + rep.set_recordset(righedoc); + TReport_book book; + ok = book.add(rep); + if (ok) + book.print_or_preview(); + delete righedoc; + } +} int lv1200(int argc, char *argv[]) { diff --git a/lv/lv1200e.rep b/lv/lv1200e.rep new file mode 100755 index 000000000..d9454e822 --- /dev/null +++ b/lv/lv1200e.rep @@ -0,0 +1,54 @@ + + + Stampa a kg per articolo + +
+ + RDOC.CODART + + + ANAMAG.DESCR + + + RDOC.QTA + + + RDOC.IMPORTO + +
+
+
+ CODART +
+
+
+ + + + + +
+
+
+
+ + + +
+ USE RDOC + + \ No newline at end of file