diff --git a/lv/lv3600.cpp b/lv/lv3600.cpp index 289f4527c..c6d7d879c 100755 --- a/lv/lv3600.cpp +++ b/lv/lv3600.cpp @@ -18,44 +18,34 @@ //classe TInvcon_rec class TInvcon_rec: public TAS400_recordset { - TString4 _umkg; + TString4 _umkg; // Unitą di misura dei Kg + TString4 _umgr; // Unitą di misura dei gr + private: - const int convert_to_kg(const TString& codart, const TString& umkg); + long peso_in_grammi(const TArticolo& art) const; + public: void aggiungi_riga(const long codcf, const TString& codart); TInvcon_rec(); }; -//CONVERT_TO_KG: metodo che converte il peso di un articolo -const int TInvcon_rec::convert_to_kg(const TString& codart, const TString& umkg) +//peso_in_grammi: metodo che converte il peso di un articolo in grammi +long TInvcon_rec::peso_in_grammi(const TArticolo& art) const { - TArticolo& art = cached_article(codart); - const TString4 ump = art.get(ANAMAG_UMP); const real peso = art.get_real(ANAMAG_PESO); + if (ump == _umgr) + return peso.integer(); - real qtaconv = ZERO; - - if (ump.full() && peso != ZERO) - { - //preparo una cache sulla tabella delle unitą di misura - const TRectype& unita = cache().get("%UMS", ump); - //leggo e controllo se esiste l'unitą di misura di riferimento - const TString4 umrif = unita.get("S7"); - real fatconv = UNO; - - if (umrif == umkg) - { - //leggo e controllo il fattore di conversione - fatconv = unita.get_real("R10"); - } - - //se tutti i controlli sono andati a buon fine, converto la quantitą e la restituisco - if(fatconv != ZERO) - qtaconv = fatconv * peso; + real peso_gr = ZERO; + if (ump.full() && !peso.is_zero()) + { + peso_gr = ((TArticolo&)art).convert_to_um(peso, _umkg, ump, false); // Converto in Kg + peso_gr *= 1000.0; // Converto in gr + peso_gr.round(); // Arrotondo al grammo } - TString8 tmp = qtaconv.string(); tmp.replace('.', ' '); tmp.strip_spaces(); - return atoi(tmp); + + return peso_gr.integer(); } //metodo per aggiungere righe al recordset da stampare @@ -81,11 +71,11 @@ void TInvcon_rec::aggiungi_riga(const long codcf, const TString& codart) citta.cut(39); //preparo la cache su anamag - const TRectype& anamag = cache().get(LF_ANAMAG, codart); + const TArticolo& anamag = cached_article(codart); //recupero i dati di interesse da anamag TString80 desart = anamag.get(ANAMAG_DESCR); - long peso = convert_to_kg(codart, _umkg); + long peso = peso_in_grammi(anamag); long lavco1 = atoi(anamag.get(ANAMAG_ARTLAVCONT).left(2)); long lavco2 = 0; //non serve long linde1 = anamag.get_int(ANAMAG_LINDEST1); @@ -104,7 +94,7 @@ void TInvcon_rec::aggiungi_riga(const long codcf, const TString& codart) set("CITTA", citta); set("CODART", codart); set("DESART", desart); - set("PESO", (TVariant)peso); + set("PESO_GR", (TVariant)peso); set("LAVCON1", (TVariant)lavco1); set("LINDES1", (TVariant)linde1); set("LINDES2", (TVariant)linde2); @@ -127,7 +117,7 @@ TInvcon_rec::TInvcon_rec() create_field("CODART", -1, 8, _alfafld, true); //codice articolo create_field("DESART", -1, 30, _alfafld, true); //descrizione articolo create_field("FILLER3", -1, 9, _alfafld, false); //riempimento - create_field("PESO", -1, 6, _intzerofld, true); //peso + create_field("PESO_GR", -1, 6, _longzerofld, true); //peso in grammi create_field("LAVCON1", -1, 2, _intzerofld, true); //lavacontinua 1 create_field("LAVCON2", -1, 2, _intzerofld, false); //lavacontinua 2 create_field("LINDES1", -1, 2, _intzerofld, true); //linea di destinazione 1 @@ -139,7 +129,13 @@ TInvcon_rec::TInvcon_rec() create_field("CONF", -1, 3, _intzerofld, true); //numero di pezzi per confezione create_field("ACAPO", -1, 2, _alfafld, true, TVariant("\r\n")); //caratteri di a capo - _umkg = ini_get_string(CONFIG_DITTA, "lv", "UmKg"); + _umkg = ini_get_string(CONFIG_DITTA, "lv", "UmKg", "KG"); + TISAM_recordset ums("USE %UMS SELECT (NUM(S7==#KG))&&(STR(R10==0.001))"); + ums.set_var("#KG", _umkg); + if (ums.move_first()) + _umgr = ums.get("CODTAB").as_string(); + else + _umgr = _umkg == "KG" ? "GR" : ""; } @@ -154,9 +150,8 @@ class TInvcon_msk: public TAutomask protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - void esporta() const; - public: + void esporta() const; TInvcon_msk(); }; @@ -241,20 +236,11 @@ void TInvcon_msk::esporta() const //ON_FIELD_EVENT: metodo che gestisce gli eventi sui campi della maschera bool TInvcon_msk::on_field_event(TOperable_field& f, TField_event e, long jolly) { - switch (f.dlg()) - { - case DLG_ELABORA: - //alla pressione del bottone elabora eseguo il metodo elabora - if(e == fe_button) - esporta(); - break; - default: break; - } return true; } //metodo costruttore che precarica i campi di interesse sulla maschera -TInvcon_msk::TInvcon_msk():TAutomask("lv3600a") {} +TInvcon_msk::TInvcon_msk() : TAutomask("lv3600a") {} /////////////////////////// //// TINVCON_APP //// @@ -263,46 +249,20 @@ TInvcon_msk::TInvcon_msk():TAutomask("lv3600a") {} //classe TInvcon_app class TInvcon_app : public TSkeleton_application { - TInvcon_msk* _msk; -protected: - virtual bool create(); - virtual bool destroy(); - public: - bool transfer(); virtual void main_loop(); }; -//CREATE: metodo costruttore -bool TInvcon_app::create() -{ - _msk = new TInvcon_msk; - return TSkeleton_application::create(); -} - -//DESTROY: metodo distruttore -bool TInvcon_app::destroy() -{ - delete _msk; - return TApplication::destroy(); -} - -//TRANSFER: metodo principale dell'elaborazione, che non deve fare niente -//perchč viene tutto gestito nella maschera -bool TInvcon_app::transfer() -{ - return true; -} - void TInvcon_app::main_loop() { - while (_msk->run() == K_ENTER) - transfer(); - } + TInvcon_msk msk; + while (msk.run() != K_QUIT) + msk.esporta(); +} int lv3600(int argc, char *argv[]) { TInvcon_app a; - a.run (argc, argv, "Invio a contapezzi"); + a.run (argc, argv, TR("Invio a contapezzi")); return TRUE; } diff --git a/lv/lv3600a.uml b/lv/lv3600a.uml index 0c2869a89..d321af671 100755 --- a/lv/lv3600a.uml +++ b/lv/lv3600a.uml @@ -2,7 +2,7 @@ TOOLBAR "" 0 0 0 2 -BUTTON DLG_ELABORA 2 2 +BUTTON DLG_OK 2 2 BEGIN PROMPT 3 1 "Esporta" PICTURE TOOL_ELABORA