From 940a12138b75f1ba7615ad97ef000ec7d559b599 Mon Sep 17 00:00:00 2001 From: luca83 Date: Wed, 3 Dec 2008 12:15:09 +0000 Subject: [PATCH] Patch level :10.0 Files correlati : Ricompilazione Demo : [ ] Commento : Modifiche varie git-svn-id: svn://10.65.10.50/trunk@17789 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv0600.cpp | 187 -------------------------------- lv/{lv2300a.h => lv2200c.h} | 0 lv/{lv2300a.rep => lv2200c.rep} | 0 lv/lv2300a.uml | 173 ----------------------------- lv/lv2400.cpp | 15 ++- lv/lv3100.cpp | 65 +++++++++++ lv/verig21.ini | 3 +- 7 files changed, 80 insertions(+), 363 deletions(-) delete mode 100755 lv/lv0600.cpp rename lv/{lv2300a.h => lv2200c.h} (100%) rename lv/{lv2300a.rep => lv2200c.rep} (100%) delete mode 100755 lv/lv2300a.uml diff --git a/lv/lv0600.cpp b/lv/lv0600.cpp deleted file mode 100755 index 3d9f177be..000000000 --- a/lv/lv0600.cpp +++ /dev/null @@ -1,187 +0,0 @@ -#include "../ve/ve0100.h" -#include "../ve/veini.h" -#include "../ve/veuml.h" - -#include "lv0.h" -#include "lvlib.h" -#include "lvcondv.h" -#include "lvrcondv.h" - -//definizione della maschera di inserimento -class TGestione_bolle_msk : public TDocumento_mask -{ -protected: - static bool lv_bolla_handler(TMask_field& f, KEY k); -public: - virtual void user_set_handler( int fieldid, int index); - TGestione_bolle_msk(const char* tipodoc):TDocumento_mask(tipodoc) {} -}; - -bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k) -{ - bool ok = true; - switch(f.dlg()) - { - case F_CODCF: ok = TDocumento_mask::clifo_handler( f, k ); break; - case F_DATADOC: ok = data_hndl( f, k ); break; - default: break; - } - - if (ok && k == K_TAB && f.focusdirty()) - { - TMask& msk = f.mask(); - - TDocumento_mask& dmsk = (TDocumento_mask&)msk; - TDocumento& doc = dmsk.doc(); - - static long stcodcf = 0, stcodcont = 0; - - TSheet_field& sheet = dmsk.sfield(F_SHEET); - int nrighe = sheet.items(); - - const long codcf = msk.get_long(F_CODCF); - const int indsped = msk.get_int(F_CODINDSP); - TDate datadoc = msk.get_date(F_DATADOC); - if (!datadoc.ok()) - datadoc = TODAY; - const int anno = datadoc.year(); - - if (codcf <= 0) - return true; - - const long codcont = lv_find_contract(codcf,indsped,datadoc); - - if (stcodcf == codcf && stcodcont == codcont && nrighe > 0) - return true; - - if (codcont == 0) - return error_box(TR("Non ci sono contratti in essere alla data indicata")); - - dmsk.mask2doc(); - - stcodcf = codcf; - stcodcont = codcont; - - //elimino tutte le righe del documento - doc.destroy_rows(); - - //tipo riga - const TString4 tprig = msk.get(F_LBTIPORIGA); - - //preparo la chiave per la tabella contratti - TToken_string keycont; - keycont.add(codcf); - keycont.add(codcont); - //instanzio una cache sulla tabella dei contratti - const TRectype& tcont = cache().get(LF_LVCONDV,keycont); - //estraggo i dati di interesse dalla cache - const int tplis = tcont.get_int(LVCONDV_TIPOLIS); //tipo listino - const bool prinbo = tcont.get_bool(LVCONDV_STPRZBOL); //prezzo in bolla - - //instanzio un recordset sulle righe del contratto considerato - TISAM_recordset rcont("USE LVRCONDV\nFROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT"); - rcont.set_var("#CODCF",codcf); - rcont.set_var("#CODCONT",codcont); - - //per ogni riga estraggo l'articolo, il relativo prezzo e l'eventaule sconto da applicare, - //...riportati in bolla solo se necessario - for (bool ok = rcont.move_first(); ok; ok = rcont.move_next()) - { - //creo una nuova riga documento - TRiga_documento& rdoc = doc.new_row(tprig); - - //recupero i dati di interesse dalla riga del contratto e li inserisco sullo sheet - const TString80 codart = rcont.get(LVRCONDV_CODART).as_string(); - //instanzio una cache sulla tabella del magazzino - const TRectype& anamag = cache().get(LF_ANAMAG,codart); - - rdoc.put(RDOC_CODART,codart); - rdoc.put(RDOC_CODARTMAG,codart); - rdoc.put(RDOC_CHECKED,'X'); - rdoc.put(RDOC_DESCR,anamag.get(ANAMAG_DESCR)); - rdoc.put(RDOC_UMQTA,rcont.get(LVRCONDV_UM).as_string()); - rdoc.put(RDOC_CAUSMAG,rcont.get(LVRCONDV_CAUSLAV).as_string()); - - //elaborazione per il prezzo: o lo prendo dalle righe contratto, o dall'anagrafica magazzino - if (prinbo) - { - TString16 scontostr = ""; - TString16 prezzostr = ""; - real prezzo; - real sconto = rcont.get(LVRCONDV_SCONTPERC).as_real(); - scontostr << sconto; - //controllo da dove devo prendere il prezzo - if (tplis == 0) - prezzo = rcont.get(LVRCONDV_PREZZO).as_real(); - else - { - prezzo = anamag.get_real(ANAMAG_COSTSTD); - } - prezzostr << prezzo; - rdoc.put(RDOC_PREZZO,prezzo); - } - } - dmsk.doc2mask(false); - - FOR_EACH_MASK_FIELD(dmsk, i, f) - { - if (f->has_check()) - f->check(STARTING_CHECK); - if (f->is_edit()) - f->on_hit(); - } - } - return ok; -} - -void TGestione_bolle_msk::user_set_handler( int fieldid, int index) -{ - if (index == 4101) - set_field_handler(fieldid, lv_bolla_handler); - else - TDocumento_mask::user_set_handler(fieldid, index); -} - -// Definizione della classe dell'applicazione motore -class TGestione_bolle_app : public TMotore_application -{ - -protected: - virtual TMask* get_mask( int mode ); -public: - TGestione_bolle_app() {} -}; - -inline TGestione_bolle_app& gbapp() { return (TGestione_bolle_app &) main_app(); }; - -TMask* TGestione_bolle_app::get_mask( int mode ) -{ - if (mode == MODE_INS || mode == MODE_MOD) - { - TString4 tipodoc; - if (mode == MODE_MOD) - tipodoc = get_relation()->curr().get(DOC_TIPODOC); // Lo prendo dalla relazione (Gelai) - else - tipodoc = TMotore_application::get_mask(MODE_QUERY)->get(F_TIPODOC); - if (_doc_masks.objptr(tipodoc) == NULL) - { - TGestione_bolle_msk* m = new TGestione_bolle_msk(tipodoc); - _doc_masks.add(tipodoc, m); - const TTipo_documento& tdoc = m->doc().tipo(); - const TString_array& handlers = tdoc.handlers(); - FOR_EACH_ARRAY_ROW(handlers, i, row) - { - m->user_set_handler( row->get_int( 0 ), row->get_int( 1 ) ); - } - } - } - return TMotore_application::get_mask(mode); -} - -int lv0600( int argc, char* argv[]) -{ - TGestione_bolle_app a; - - a.run( argc, argv, TR("Documenti di Trasporto")); - return 0; -} \ No newline at end of file diff --git a/lv/lv2300a.h b/lv/lv2200c.h similarity index 100% rename from lv/lv2300a.h rename to lv/lv2200c.h diff --git a/lv/lv2300a.rep b/lv/lv2200c.rep similarity index 100% rename from lv/lv2300a.rep rename to lv/lv2200c.rep diff --git a/lv/lv2300a.uml b/lv/lv2300a.uml deleted file mode 100755 index aaa627769..000000000 --- a/lv/lv2300a.uml +++ /dev/null @@ -1,173 +0,0 @@ -#include "lv2300a.h" - -TOOLBAR "topbar" 0 0 0 2 -#include "printbar.h" -ENDPAGE - -PAGE "Stampa Giri" -1 -1 40 5 - -GROUPBOX DLG_NULL 76 3 -BEGIN - PROMPT 1 1 "@bParametri Data" -END - -DATE F_DATA_FROM -BEGIN - PROMPT 2 2 "Dal " - FIELD #FROM_DATA - GROUP 1 - CHECKTYPE REQUIRED - FLAGS "A" -END - -DATE F_DATA_TO -BEGIN - PROMPT 25 2 "Al " - FIELD #TO_DATA - FLAGS "A" - GROUP 2 - CHECKTYPE REQUIRED - VALITATE DATE_CMP_FUNC >= F_DATA_FROM - WARNING "La data finale deve essere successiva a quella iniziale" -END - -GROUPBOX DLG_NULL 76 4 -BEGIN - PROMPT 1 4 "@bParametri Itinerario" -END - -NUMBER F_CODITI_FROM 3 -BEGIN - PROMPT 2 5 "Da Itinerario" - FLAGS "UZ" - USE &ITI - INPUT CODTAB F_CODITI_FROM - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CODITI_FROM CODTAB - OUTPUT F_DESITI_FROM S0 - CHECKTYPE SEARCH - FIELD #FROM_CODITI -END - -STRING F_DESITI_FROM 50 -BEGIN - PROMPT 25 5 "" - FLAGS "D" -END - -NUMBER F_CODITI_TO 3 -BEGIN - PROMPT 2 6 "A Itinerario " - FLAGS "UZ" - USE &ITI - INPUT CODTAB F_CODITI_TO - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CODITI_TO CODTAB - OUTPUT F_DESITI_TO S0 - CHECKTYPE SEARCH - FIELD #TO_CODITI -END - -STRING F_DESITI_TO 50 -BEGIN - PROMPT 25 6 "" - FLAGS "D" -END - -GROUPBOX DLG_NULL 76 4 -BEGIN - PROMPT 1 8 "@bParametri Autista" -END - -STRING F_CODAUT_FROM 6 -BEGIN - PROMPT 2 9 "Da Autista " - FLAGS "U" - USE &AUT - INPUT CODTAB F_CODAUT_FROM - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CODAUT_FROM CODTAB - OUTPUT F_DESAUT_FROM S0 - CHECKTYPE SEARCH - FIELD #FROM_CODAUT -END - -STRING F_DESAUT_FROM 50 -BEGIN - PROMPT 25 9 "" - FLAGS "D" -END - -STRING F_CODAUT_TO 6 -BEGIN - PROMPT 2 10 "Ad Autista " - FLAGS "U" - USE &AUT - INPUT CODTAB F_CODAUT_TO - DISPLAY "Codice" CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_CODAUT_TO CODTAB - OUTPUT F_DESAUT_TO S0 - CHECKTYPE SEARCH - FIELD #TO_CODAUT -END - -STRING F_DESAUT_TO 50 -BEGIN - PROMPT 25 10 "" - FLAGS "D" -END - -GROUPBOX DLG_NULL 76 4 -BEGIN - PROMPT 1 12 "@bParametri Cliente" -END - -NUMBER F_CODCF_FROM 6 -BEGIN - PROMPT 2 13 "Da Cliente " - FLAGS "U" - USE LF_CLIFO KEY 1 - INPUT TIPOCF "C" - INPUT CODCF F_CODCF_FROM - DISPLAY "Codice " CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_CODCF_FROM CODCF - OUTPUT F_RAGSOCCF_FROM RAGSOC - CHECKTYPE NORMAL - FIELD #FROM_CODCF -END - -STRING F_RAGSOCCF_FROM 50 -BEGIN - PROMPT 25 13 "" - FLAGS "D" -END - -NUMBER F_CODCF_TO 6 -BEGIN - PROMPT 2 14 "A Cliente " - FLAGS "U" - USE LF_CLIFO KEY 1 - INPUT TIPOCF "C" - INPUT CODCF F_CODCF_TO - DISPLAY "Codice " CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_CODCF_TO CODCF - OUTPUT F_RAGSOCCF_TO RAGSOC - CHECKTYPE NORMAL - FIELD #TO_CODCF -END - -STRING F_RAGSOCCF_TO 50 -BEGIN - PROMPT 25 14 "" - FLAGS "D" -END - -ENDPAGE - -ENDMASK diff --git a/lv/lv2400.cpp b/lv/lv2400.cpp index b36fcc672..b298b080e 100755 --- a/lv/lv2400.cpp +++ b/lv/lv2400.cpp @@ -41,6 +41,7 @@ class TGenera_documenti_app : public TSkeleton_application { TGenera_documenti_mask* _msk; TAssoc_array _quantita; + TAssoc_array _quantita_ritirata; TConfig* _configlv; private: @@ -202,6 +203,7 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, const bool arrot = rcont.get_bool(LVRCONDV_ARROT); const real conguaglio = rcont.get_real(LVRCONDV_QTACONG); const real& qta = *(real*)_quantita.objptr(codart); + const real& qta1 = *(real*)_quantita_ritirata.objptr(codart); //instanzio una cache sulla tabella del magazzino const TRectype& anamag = cache().get(LF_ANAMAG,codart); @@ -225,9 +227,10 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, //scrivo le quantitą rdoc.put(RDOC_QTA, quantita_arr); - rdoc.put(RDOC_QTAGG1, quantita_noarr); + rdoc.put(RDOC_QTAGG1, qta1); rdoc.put(RDOC_QTAGG2, conguaglio); rdoc.put(RDOC_QTAGG3, quantita_arr); + rdoc.put(RDOC_QTAGG4, quantita_noarr); rdoc.put(RDOC_GENERATA, true); //aggiorno il conguaglio sulla riga del contratto @@ -539,6 +542,7 @@ void TGenera_documenti_app::calcolo_quantita(const TDocumento& doc, const char r TArticolo& art = rdoc.articolo(); //leggo se esiste gią nel TAssoc_array real *qta = (real*)_quantita.objptr(codart); + real *qta1 = (real*)_quantita_ritirata.objptr(codart); //se non esiste if (qta == NULL) { @@ -546,6 +550,12 @@ void TGenera_documenti_app::calcolo_quantita(const TDocumento& doc, const char r qta = new real; _quantita.add(codart,qta); } + if (qta1 == NULL) + { + //per ora memorizzo zero + qta1 = new real; + _quantita_ritirata.add(codart,qta1); + } //aggiorno la quantitą convertendola all'unitą di misura di base, aggiungendola o sottraendola //...se si tratta di un ritiro o di un anticipo rispettivamente; nel caso della scansione delle //...bolle di consegna modificate a mano (caso 'B'), devo modificare la quantitą da consegnare @@ -553,7 +563,8 @@ void TGenera_documenti_app::calcolo_quantita(const TDocumento& doc, const char r switch (ritoant) { case 'R': - *qta += art.convert_to_um(qtardoc, NULL, rdoc.get(RDOC_UMQTA)); + *qta += art.convert_to_um(qtardoc, NULL, rdoc.get(RDOC_UMQTA)); + *qta1 += art.convert_to_um(qtardoc, NULL, rdoc.get(RDOC_UMQTA)); break; case 'A': *qta -= art.convert_to_um(qtardoc, NULL, rdoc.get(RDOC_UMQTA)); diff --git a/lv/lv3100.cpp b/lv/lv3100.cpp index fae87d0fa..8418e7941 100755 --- a/lv/lv3100.cpp +++ b/lv/lv3100.cpp @@ -1,6 +1,7 @@ #include "../ve/ve0100.h" #include "../ve/veini.h" #include "../ve/veuml.h" +#include "../ve/verig.h" #include "lv0.h" #include "lvlib.h" @@ -12,11 +13,61 @@ class TGestione_bolle_msk : public TDocumento_mask { protected: static bool lv_bolla_handler(TMask_field& f, KEY k); + static bool lv_qta_handler(TMask_field& f, KEY k); public: virtual void user_set_handler( int fieldid, int index); + virtual void user_set_row_handler(TMask& rm, int field, int index); TGestione_bolle_msk(const char* tipodoc):TDocumento_mask(tipodoc) {} }; +bool TGestione_bolle_msk::lv_qta_handler(TMask_field& f, KEY k) +{ + if (f.to_check(k, false)) + { + TMask& msk = f.mask(); + real ritirato = msk.get_real(FR_QTA); + if (msk.field(FR_QTAGG1).empty()) + { + //recupero la maschera di testata e leggo i dati di interesse per recuperare... + //...i dati dalla riga contratto + const long codcf = atol(f.evaluate_field(-F_CODCF)); + const int indsped = atoi(f.evaluate_field(-F_CODINDSP)); + TDate datadoc = f.evaluate_field(-F_DATADOC); + if (!datadoc.ok()) + datadoc = TODAY; + const long codcont = lv_find_contract(codcf,indsped,datadoc); + //preparo la chiave per la tabella righe contratti + TToken_string keyrcont; + keyrcont.add(codcf); + keyrcont.add(codcont); + keyrcont.add(msk.get(FR_CODART)); + //instanzio una cache sulla tabella delle righe contratti + const TRectype& rcont = cache().get(LF_LVRCONDV,keyrcont); + //recupero i dati di interesse dalla riga del contratto + const bool arrot = rcont.get_bool(LVRCONDV_ARROT); + + //instanzio una cache sulla tabella del magazzino + const TRectype& anamag = cache().get(LF_ANAMAG,msk.get(FR_CODART)); + //recupero i dati di interesse dall'anagrafica di magazzino + const real ppconf = anamag.get_real(ANAMAG_PPCONF); + + if (arrot) + { + //calcolo di quanti pezzi sforo + long arr = ritirato.integer() % ppconf.integer(); + //se sforo (arr > 0) allora calcolo quanti pezzi in pił gli devo dare e aggiorno la quantitą + if (arr > 0) + { + arr = ppconf.integer() - arr; + ritirato += arr; + } + } + msk.set(FR_QTAGG1,ritirato); + } + } + return true; +} + bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k) { bool ok = true; @@ -94,6 +145,10 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k) const TString80 codart = rcont.get(LVRCONDV_CODART).as_string(); //instanzio una cache sulla tabella del magazzino const TRectype& anamag = cache().get(LF_ANAMAG,codart); + + TString descr = anamag.get(ANAMAG_DESCR); + TString um = rcont.get(LVRCONDV_UM).as_string(); + TString cau = rcont.get(LVRCONDV_CAUSLAV).as_string(); rdoc.put(RDOC_CODART,codart); rdoc.put(RDOC_CODARTMAG,codart); @@ -134,6 +189,16 @@ bool TGestione_bolle_msk::lv_bolla_handler(TMask_field& f, KEY k) return ok; } +void TGestione_bolle_msk::user_set_row_handler(TMask& rm, int field, int index) +{ + switch(index) + { + case 4101: set_field_handler(field, lv_qta_handler); break; + default : TDocumento_mask::user_set_row_handler(rm, field, index); break; + } + +} + void TGestione_bolle_msk::user_set_handler( int fieldid, int index) { if (index == 4101) diff --git a/lv/verig21.ini b/lv/verig21.ini index baa69bdde..aa525daba 100755 --- a/lv/verig21.ini +++ b/lv/verig21.ini @@ -5,5 +5,6 @@ CAMPICALC= IMPONIBILE=IMPNS [HANDLERS] -NHANDLER = 0 +NHANDLER = 1 +1 = 112|4101